@sapui5/sap.fe.core 1.108.18 → 1.108.19
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/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +24 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +20 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_hr.properties +4 -4
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -735,12 +735,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
735
735
|
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
736
736
|
aActionParameters.forEach(_removeMessagesForActionParamter);
|
|
737
737
|
oDialog.destroy();
|
|
738
|
+
buttonLock = false;
|
|
738
739
|
if (actionResult.dialogCancelled) {
|
|
739
740
|
reject(Constants.CancelActionDialog);
|
|
740
741
|
} else {
|
|
741
742
|
resolve(actionResult.result);
|
|
742
743
|
}
|
|
743
744
|
};
|
|
745
|
+
var buttonLock = false;
|
|
744
746
|
var oDialog = new Dialog(undefined, {
|
|
745
747
|
title: sActionLabel || CommonUtils.getTranslatedText("C_OPERATIONS_ACTION_PARAMETER_DIALOG_TITLE", oResourceBundle),
|
|
746
748
|
content: [oDialogContent],
|
|
@@ -763,8 +765,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
763
765
|
var _exit3 = false;
|
|
764
766
|
return Promise.resolve(_finallyRethrows(function () {
|
|
765
767
|
var _exit2 = false;
|
|
768
|
+
// prevent multiple press events. The BusyLocker is not fast enough. (BCP: 2370130210)
|
|
769
|
+
// buttonLock is set once and reset in case of
|
|
770
|
+
// - validation error
|
|
771
|
+
// - message popup
|
|
772
|
+
// - dialog close (afterClose handler)
|
|
773
|
+
|
|
774
|
+
if (buttonLock === true) {
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
buttonLock = true;
|
|
766
778
|
return Promise.resolve(_validateProperties(oResourceBundle)).then(function (_validateProperties2) {
|
|
767
779
|
if (!_validateProperties2) {
|
|
780
|
+
buttonLock = false;
|
|
768
781
|
_exit3 = true;
|
|
769
782
|
return;
|
|
770
783
|
}
|
|
@@ -857,7 +870,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
857
870
|
}, function (oError) {
|
|
858
871
|
var showMessageDialog = true;
|
|
859
872
|
return Promise.resolve(messageHandler.showMessages({
|
|
860
|
-
context: mParameters.aContexts[0],
|
|
873
|
+
context: mParameters.aContexts && mParameters.aContexts[0],
|
|
874
|
+
//aContexts not always defined
|
|
861
875
|
isActionParameterDialogOpen: oDialog.isOpen(),
|
|
862
876
|
messagePageNavigationCallback: function () {
|
|
863
877
|
oDialog.close();
|
|
@@ -870,14 +884,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
870
884
|
return showMessageParameters;
|
|
871
885
|
}
|
|
872
886
|
})).then(function () {
|
|
887
|
+
buttonLock = false; //needed if the action fails with an error popup and this one is canceld (Journey: 412WarningHandling)
|
|
888
|
+
|
|
889
|
+
// In case of backend validation error(s?), message shall not be shown in message dialog but next to the field on parameter dialog, which should
|
|
890
|
+
// stay open in this case => in this case, we must not resolve or reject the promise controlling the parameter dialog.
|
|
891
|
+
// In all other cases (e.g. other backend errors or user cancellation), the promise controlling the parameter dialog needs to be rejected to allow
|
|
892
|
+
// callers to react. (Example: If creation in backend after navigation to transient context fails, back navigation needs to be triggered)
|
|
893
|
+
// TODO: Refactor to separate dialog handling from backend request istead of taking decision based on message handling
|
|
873
894
|
if (showMessageDialog) {
|
|
874
895
|
reject(oError);
|
|
875
896
|
}
|
|
876
|
-
});
|
|
877
|
-
// stay open in this case => in this case, we must not resolve or reject the promise controlling the parameter dialog.
|
|
878
|
-
// In all other cases (e.g. other backend errors or user cancellation), the promise controlling the parameter dialog needs to be rejected to allow
|
|
879
|
-
// callers to react. (Example: If creation in backend after navigation to transient context fails, back navigation needs to be triggered)
|
|
880
|
-
// TODO: Refactor to separate dialog handling from backend request istead of taking decision based on message handling
|
|
897
|
+
});
|
|
881
898
|
});
|
|
882
899
|
});
|
|
883
900
|
}, function (_wasThrown3, _result3) {
|
|
@@ -1592,4 +1609,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1592
1609
|
};
|
|
1593
1610
|
return operations;
|
|
1594
1611
|
}, false);
|
|
1595
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJvUGFyZW50Q29udHJvbCIsIm1lc3NhZ2VIYW5kbGVyIiwiYUNvbnRleHRzIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiX2V4ZWN1dGVBY3Rpb24iLCJhUmVzdWx0Iiwic29tZSIsIm9TaW5nbGVSZXN1bHQiLCJzdGF0dXMiLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldFByb3BlcnR5IiwibGVuZ3RoIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJhZGRNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsIkNvbnN0YW50cyIsIkZFTGlicmFyeSIsIkludm9jYXRpb25Hcm91cGluZyIsIkFjdGlvbiIsIk1lc3NhZ2VCb3giLCJjYWxsQm91bmRBY3Rpb24iLCJzQWN0aW9uTmFtZSIsImNvbnRleHRzIiwib01vZGVsIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5Iiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJjYWxsQWN0aW9uSW1wb3J0IiwiYmluZENvbnRleHQiLCJvQWN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJzRnVuY3Rpb25OYW1lIiwiY29udGV4dCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJyZXNvbHZlIiwib0Z1bmN0aW9uSW1wb3J0Iiwib0Z1bmN0aW9uIiwic0dyb3VwSWQiLCJFcnJvciIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsImFQYXJhbWV0ZXIiLCIkRW50aXR5U2V0UGF0aCIsIiRJc0JvdW5kIiwiZW50aXR5U2V0TmFtZSIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJnZXRDb250ZXh0Iiwib0ZhaWxlZE9wZXJhdGlvblJlc3VsdCIsIm9BY3Rpb25Db250ZXh0IiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRDb250cm9sbGVyIiwic0NvbmZpcm1hdGlvblRleHQiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNob3dNZXNzYWdlQm94IiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldCIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImNsb3NlIiwib25BZnRlckFQRENsb3NlIiwiZmlsdGVyZWRNZXNzYWdlcyIsImJJc0FQRE9wZW4iLCJ1bmRlZmluZWQiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm1lc3NhZ2VIYW5kbGluZyIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsInNQYXRoIiwiX2dldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRDb250ZXh0Iiwic0FjdGlvbk5hbWVQYXRoIiwiYWN0aW9uTmFtZUNvbnRleHQiLCJzRnJhZ21lbnROYW1lIiwiYWN0aW9uUGFyYW1ldGVySW5mb3MiLCJtZXNzYWdlTWFuYWdlciIsIl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIiwibWVzc2FnZVBhcmFtZXRlcnMiLCJtYXAiLCJtZXNzYWdlUGFyYW1ldGVyIiwiYmluZGluZyIsImFjdGlvblBhcmFtZXRlckluZm8iLCJmaWVsZCIsImdldEJpbmRpbmciLCJpc011bHRpVmFsdWUiLCJNZXNzYWdlIiwidHlwZSIsInByb2Nlc3NvciIsInBlcnNpc3RlbnQiLCJ0YXJnZXQiLCJnZXRSZXNvbHZlZFBhdGgiLCJfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciIsInBhcmFtZXRlciIsImFsbE1lc3NhZ2VzIiwiZ2VuZXJhdGUiLCJyZWxldmFudE1lc3NhZ2VzIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsImlkIiwiaW5jbHVkZXMiLCJyZW1vdmVNZXNzYWdlcyIsIl92YWxpZGF0ZVByb3BlcnRpZXMiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZ2V0UmVxdWlyZWQiLCJlbXB0eVJlcXVpcmVkRmllbGRzIiwicmVxdWlyZWRQYXJhbWV0ZXJJbmZvIiwiZmllbGRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJnZXRUZXh0IiwiZmlyc3RJbnZhbGlkQWN0aW9uUGFyYW1ldGVyIiwiZ2V0VmFsdWVTdGF0ZSIsImZvY3VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJlcnJvciIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImFjdGlvbiIsImVudGl0eVNldCIsIm1vZGVscyIsImNyZWF0ZWRGcmFnbWVudCIsImFGdW5jdGlvblBhcmFtcyIsIm9PcGVyYXRpb25CaW5kaW5nIiwic2V0VXNlckRlZmF1bHRzIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJvRGlhbG9nQ29udGVudCIsImFjdGlvblBhcmFtZXRlciIsImFjdGlvblJlc3VsdCIsImRpYWxvZ0NhbmNlbGxlZCIsImRlc3Ryb3kiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJEaWFsb2ciLCJ0aXRsZSIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwiX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiLCJwcmVzcyIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidlBhcmFtZXRlclZhbHVlIiwib1BhcmFtZXRlckNvbnRleHQiLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiYU1WRkNvbnRlbnQiLCJhS2V5VmFsdWVzIiwiaiIsIktleSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImlzTG9ja2VkIiwidW5sb2NrIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJlbmRCdXR0b24iLCJiZWZvcmVPcGVuIiwib0Nsb25lRXZlbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2ciLCJzQmluZGluZ1BhcmFtZXRlciIsInNCb3VuZEZ1bmN0aW9uTmFtZSIsInByZWZpbGxQYXJhbWV0ZXIiLCJzUGFyYW1OYW1lIiwidlBhcmFtRGVmYXVsdFZhbHVlIiwiJFBhdGgiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UGFyYW1WYWx1ZSIsInNQYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwicmVxdWVzdFByb3BlcnR5IiwiTG9nIiwiYkxhdGVQcm9wZXJ0eUVycm9yIiwib0RhdGEiLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgiLCJnZXRQYXJhbWV0ZXJQYXRoIiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYVByZWZpbGxQYXJhbVByb21pc2VzIiwiYWxsIiwiYUV4ZWNGdW5jdGlvblByb21pc2VzIiwib0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UiLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiYVByb21pc2VzIiwiY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwiZnVuY3Rpb25QYXJhbXMiLCJvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QiLCJzRGlhbG9nUGFyYW1OYW1lIiwidlBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImJFcnJvckZvdW5kIiwib1ZhbHVlIiwic1RleHQiLCJ3YXJuaW5nIiwiY29udGVudFdpZHRoIiwiZm5Bc3luY0JlZm9yZU9wZW4iLCJhUGFyYW1ldGVycyIsInJlcXVlc3RPYmplY3QiLCJvQ29udGV4dE9iamVjdCIsImdldEl0ZW1zIiwiYWZ0ZXJDbG9zZSIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwib01WRk1vZGVsIiwiYXR0YWNoQ2hhbmdlIiwiYWRkRGVwZW5kZW50Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3RCaW5kaW5nIiwib3BlbiIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJpbmRleCIsImpvaW4iLCJzRW50aXR5U2V0TmFtZSIsImFBY3Rpb25OYW1lIiwic0tleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiaGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMiLCJjdXJyZW50X2NvbnRleHRfaW5kZXgiLCJpQ29udGV4dExlbmd0aCIsInByb2Nlc3NlZE1lc3NhZ2VJZHMiLCJ0cmFuc2l0aW9uTWVzc2FnZXMiLCJpc0R1cGxpY2F0ZSIsImdldElkIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiU3VjY2VzcyIsImdldFBlcnNpc3RlbnQiLCJncm91cElkIiwib3BlcmF0aW9uc0hlbHBlciIsInJlbmRlck1lc3NhZ2VWaWV3IiwiZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwib3BlcmF0aW9ucyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsInNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiZm5FeGVjdXRlU2luZ2xlQWN0aW9uIiwibm9vcCIsImFBY3Rpb25Qcm9taXNlcyIsInJlZHVjZSIsInByb21pc2UiLCJmbkhhbmRsZVJlc3VsdHMiLCJmbkV4ZWN1dGVBY3Rpb24iLCJhY3Rpb25Db250ZXh0Iiwib1NpZGVFZmZlY3QiLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZm5SZXF1ZXN0U2lkZUVmZmVjdHMiLCJhTG9jYWxQcm9taXNlIiwiZmluYWxseSIsImFjdGlvblBhcmFtZXRlcnMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIgZnJvbSBcIi4uLy4uL29wZXJhdGlvbnNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCIuLi9NZXNzYWdlSGFuZGxlclwiO1xuXG5jb25zdCBDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHRJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuY29uc3QgQWN0aW9uID0gKE1lc3NhZ2VCb3ggYXMgYW55KS5BY3Rpb247XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQm91bmRBY3Rpb25cbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIGNvbnRleHRzIEVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBPRGF0YSBNb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzXSBBIG1hcCBvZiBiaW5kaW5nIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBiZSBwYXJ0IG9mICRzZWxlY3QgYW5kICRleHBhbmQgY29taW5nIGZyb20gc2lkZSBlZmZlY3RzIGZvciBib3VuZCBhY3Rpb25zXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0XSBBcnJheSBvZiBwcm9wZXJ0eSBwYXRocyB0byBiZSByZXF1ZXN0ZWQgaW4gYWRkaXRpb24gdG8gYWN0dWFsIHRhcmdldCBwcm9wZXJ0aWVzIG9mIHRoZSBzaWRlIGVmZmVjdFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZ10gTW9kZSBob3cgYWN0aW9ucyBhcmUgdG8gYmUgY2FsbGVkOiBDaGFuZ2VzZXQgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCBJc29sYXRlZCB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHMsIGRlZmF1bHRzIHRvIElzb2xhdGVkXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xdIElmIHNwZWNpZmllZCwgdGhlIGRpYWxvZ3MgYXJlIGFkZGVkIGFzIGRlcGVuZGVudCBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dF0gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHByb21pc2UgcmV0dXJucyB0aGUgYm91bmQgY29udGV4dFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxCb3VuZEFjdGlvbihzQWN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0czogYW55LCBvTW9kZWw6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmICghY29udGV4dHMgfHwgY29udGV4dHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly9JbiBGcmVlc3R5bGUgYXBwcyBib3VuZCBhY3Rpb25zIGNhbiBoYXZlIG5vIGNvbnRleHRcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBhY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY29udGV4dFwiKTtcblx0fVxuXHQvLyB0aGlzIG1ldGhvZCBlaXRoZXIgYWNjZXB0cyBzaW5nbGUgY29udGV4dCBvciBhbiBhcnJheSBvZiBjb250ZXh0c1xuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBhbiB1bmFtYmlndW9zIEFQSVxuXHRjb25zdCBpc0NhbGxlZFdpdGhBcnJheSA9IEFycmF5LmlzQXJyYXkoY29udGV4dHMpO1xuXG5cdC8vIGluIGNhc2Ugb2Ygc2luZ2xlIGNvbnRleHQgd3JhcCBpbnRvIGFuIGFycmF5IGZvciBjYWxsZWQgbWV0aG9kcyAoZXNwLiBjYWxsQWN0aW9uKVxuXHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBpc0NhbGxlZFdpdGhBcnJheSA/IGNvbnRleHRzIDogW2NvbnRleHRzXTtcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdC8vIEFuYWx5emluZyBtZXRhTW9kZWxQYXRoIGZvciBhY3Rpb24gb25seSBmcm9tIGZpcnN0IGNvbnRleHQgc2VlbXMgd2VpcmQsIGJ1dCBwcm9iYWJseSB3b3JrcyBpbiBhbGwgZXhpc3Rpbmcgc3plbmFyaW9zIC0gaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgcGFzc2VkLCB0aGV5IHByb2JhYmx5XG5cdFx0Ly8gYmVsb25nIHRvIHRoZSBzYW1lIG1ldGFtb2RlbHBhdGguIFRPRE86IENoZWNrLCB3aGV0aGVyIHRoaXMgY2FuIGJlIGltcHJvdmVkIC8gc3plbmFyaW9zIHdpdGggZGlmZmVyZW50IG1ldGFNb2RlbFBhdGhzIG1pZ2h0IGV4aXN0XG5cdFx0c0FjdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke3NBY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kQWN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBzQWN0aW9uUGF0aCwgbVBhcmFtZXRlcnMuYUNvbnRleHRzLCBvQm91bmRBY3Rpb24pO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IGFueSkge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpLnRoZW4oXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQocmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHR0aHJvdyByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQWN0aW9uSW1wb3J0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbXBvcnQgdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmICghb01vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzQWN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9BY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkQWN0aW9uXCIpfS8wYCk7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZGApO1xuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQWN0aW9uSW1wb3J0LCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycyk7XG59XG5mdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IGFueSwgb01vZGVsOiBhbnkpIHtcblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgZnVuY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhIGNvbnRleHRcIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSl9LyR7c0Z1bmN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gaW1wb3J0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zLmNhbGxGdW5jdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsbEZ1bmN0aW9uSW1wb3J0KHNGdW5jdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnkpIHtcblx0aWYgKCFzRnVuY3Rpb25OYW1lKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX1gKS5nZXRQYXRoKCksXG5cdFx0b0Z1bmN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIil9LzBgKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvRnVuY3Rpb25JbXBvcnQpO1xufVxuZnVuY3Rpb24gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBhbnksIG9Nb2RlbDogYW55LCBvRnVuY3Rpb246IGFueSwgY29udGV4dD86IGFueSkge1xuXHRsZXQgc0dyb3VwSWQ7XG5cdGlmICghb0Z1bmN0aW9uIHx8ICFvRnVuY3Rpb24uZ2V0T2JqZWN0KCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBGdW5jdGlvbiAke3NGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0fVxuXHRpZiAoY29udGV4dCkge1xuXHRcdG9GdW5jdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzRnVuY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uR3JvdXBcIjtcblx0fSBlbHNlIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25JbXBvcnRcIjtcblx0fVxuXHRjb25zdCBvRnVuY3Rpb25Qcm9taXNlID0gb0Z1bmN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpO1xuXHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRyZXR1cm4gb0Z1bmN0aW9uUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gb0Z1bmN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9BY3Rpb246IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdGxldCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0bGV0IGZuRGlhbG9nO1xuXHRcdGxldCBvQWN0aW9uUHJvbWlzZTtcblx0XHQvL2xldCBmYWlsZWRBY3Rpb25Qcm9taXNlOiBhbnk7XG5cdFx0Y29uc3Qgc0FjdGlvbkxhYmVsID0gbVBhcmFtZXRlcnMubGFiZWw7XG5cdFx0Y29uc3QgYlNraXBQYXJhbWV0ZXJEaWFsb2cgPSBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nO1xuXHRcdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cztcblx0XHRjb25zdCBiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb247XG5cdFx0Y29uc3QgYklzQ3JpdGljYWxBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uO1xuXHRcdGxldCBvTWV0YU1vZGVsO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cdFx0bGV0IHNNZXNzYWdlc1BhdGg6IGFueTtcblx0XHRsZXQgaU1lc3NhZ2VTaWRlRWZmZWN0O1xuXHRcdGxldCBiSXNTYW1lRW50aXR5O1xuXHRcdGxldCBvUmV0dXJuVHlwZTtcblx0XHRsZXQgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycztcblx0XHRjb25zdCBhY3Rpb25EZWZpbml0aW9uID0gb0FjdGlvbi5nZXRPYmplY3QoKTtcblx0XHRpZiAoIW9BY3Rpb24gfHwgIW9BY3Rpb24uZ2V0T2JqZWN0KCkpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IEVycm9yKGBBY3Rpb24gJHtzQWN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdH1cblxuXHRcdC8vIEdldCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgYWN0aW9uXG5cdFx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBnZXRBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb24pO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBoYXMgcGFyYW1ldGVycyBhbmQgd291bGQgbmVlZCBhIHBhcmFtZXRlciBkaWFsb2dcblx0XHQvLyBUaGUgcGFyYW1ldGVyIFJlc3VsdElzQWN0aXZlRW50aXR5IGlzIGFsd2F5cyBoaWRkZW4gaW4gdGhlIGRpYWxvZyEgSGVuY2UgaWZcblx0XHQvLyB0aGlzIGlzIHRoZSBvbmx5IHBhcmFtZXRlciwgdGhpcyBpcyB0cmVhdGVkIGFzIG5vIHBhcmFtZXRlciBoZXJlIGJlY2F1c2UgdGhlXG5cdFx0Ly8gZGlhbG9nIHdvdWxkIGJlIGVtcHR5IVxuXHRcdC8vIEZJWE1FOiBTaG91bGQgb25seSBpZ25vcmUgdGhpcyBpZiB0aGlzIGlzIGEgJ2NyZWF0ZScgYWN0aW9uLCBvdGhlcndpc2UgaXQgaXMganVzdCBzb21lIG5vcm1hbCBwYXJhbWV0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhpcyBuYW1lXG5cdFx0Y29uc3QgYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nID1cblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiYgIShhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPT09IDEgJiYgYUFjdGlvblBhcmFtZXRlcnNbMF0uJE5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIik7XG5cblx0XHQvLyBQcm92aWRlZCB2YWx1ZXMgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVycyBmcm9tIGludm9rZUFjdGlvbiBjYWxsXG5cdFx0Y29uc3QgYVBhcmFtZXRlclZhbHVlcyA9IG1QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcztcblxuXHRcdC8vIERldGVybWluZSBzdGFydHVwIHBhcmFtZXRlcnMgaWYgcHJvdmlkZWRcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGNvbnN0IG9TdGFydHVwUGFyYW1ldGVycyA9IChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge307XG5cblx0XHQvLyBJbiBjYXNlIGFuIGFjdGlvbiBwYXJhbWV0ZXIgaXMgbmVlZGVkLCBhbmQgd2Ugc2hhbGwgc2tpcCB0aGUgZGlhbG9nLCBjaGVjayBpZiB2YWx1ZXMgYXJlIHByb3ZpZGVkIGZvciBhbGwgcGFyYW1ldGVyc1xuXHRcdGlmIChiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgJiYgYlNraXBQYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMgPSBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRcdFx0XHRiSXNDcmVhdGVBY3Rpb24sXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gRGVwZW5kaW5nIG9uIHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgZGF0YSwgZWl0aGVyIHNldCBhIGRpYWxvZyBvciBsZWF2ZSBpdCBlbXB0eSB3aGljaFxuXHRcdC8vIHdpbGwgbGVhZCB0byBkaXJlY3QgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhIGRpYWxvZ1xuXHRcdGZuRGlhbG9nID0gbnVsbDtcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRpZiAoIShiU2tpcFBhcmFtZXRlckRpYWxvZyAmJiBiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKSkge1xuXHRcdFx0XHRmbkRpYWxvZyA9IHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChiSXNDcml0aWNhbEFjdGlvbikge1xuXHRcdFx0Zm5EaWFsb2cgPSBjb25maXJtQ3JpdGljYWxBY3Rpb247XG5cdFx0fVxuXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRmbk9uU3VibWl0dGVkOiBtUGFyYW1ldGVycy5vblN1Ym1pdHRlZCxcblx0XHRcdGZuT25SZXNwb25zZTogbVBhcmFtZXRlcnMub25SZXNwb25zZSxcblx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25OYW1lLFxuXHRcdFx0bW9kZWw6IG9Nb2RlbCxcblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzOiBhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdGJHZXRCb3VuZENvbnRleHQ6IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdHNlbGVjdGVkSXRlbXM6IG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXNcblx0XHR9O1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYUNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRcdHNNZXNzYWdlc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhgKTtcblxuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdGlNZXNzYWdlU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKGV4cDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiBleHAgPT09IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBBZGQgU0FQX01lc3NhZ2VzIGJ5IGRlZmF1bHQgaWYgbm90IGFubm90YXRlZCBieSBzaWRlIGVmZmVjdHMsIGFjdGlvbiBkb2VzIG5vdCByZXR1cm4gYSBjb2xsZWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIHRoZSByZXR1cm4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgYm91bmQgdHlwZVxuXHRcdFx0XHRcdG9SZXR1cm5UeXBlID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUmV0dXJuVHlwZVwiKTtcblx0XHRcdFx0XHRiSXNTYW1lRW50aXR5ID1cblx0XHRcdFx0XHRcdG9SZXR1cm5UeXBlICYmICFvUmV0dXJuVHlwZS4kaXNDb2xsZWN0aW9uICYmIG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKS4kVHlwZSA9PT0gb1JldHVyblR5cGUuJFR5cGU7XG5cblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEgfHwgYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0LlxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0T2JqZWN0KGAkUmV0dXJuVHlwZS8kVHlwZS8ke3NNZXNzYWdlc1BhdGh9YCkgJiZcblx0XHRcdFx0XHRcdFx0KCFtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCB8fFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0LnNwbGl0KFwiLFwiKS5pbmRleE9mKHNNZXNzYWdlc1BhdGgpID09PSAtMSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0PyBgJHttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHtzTWVzc2FnZXNQYXRofWBcblx0XHRcdFx0XHRcdFx0XHQ6IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBzaWRlIGVmZmVjdHMgYXQgZW50aXR5IGxldmVsIGJlY2F1c2UgJHNlbGVjdCBzdG9wcyB0aGVzZSBiZWluZyByZXR1cm5lZCBieSB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIE9ubHkgaWYgbm8gb3RoZXIgc2lkZSBlZmZlY3RzIHdlcmUgYWRkZWQgZm9yIE1lc3NhZ2VzXG5cdFx0XHRcdFx0XHRcdGlmIChpTWVzc2FnZVNpZGVFZmZlY3QgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnB1c2goXCIqXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCA9PT0gMCAmJiBpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5jb250cm9sSWQpIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChiSXNDcmVhdGVBY3Rpb24pIHtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHR9XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IChhY3Rpb25EZWZpbml0aW9uLiRQYXJhbWV0ZXIgfHwgW10pLnNvbWUoKGFQYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8IGFjdGlvbkRlZmluaXRpb24uJElzQm91bmQpICYmXG5cdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYyA9IGlzU3RhdGljO1xuXHRcdGlmIChmbkRpYWxvZykge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBmbkRpYWxvZyhcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYWtlIG92ZXIgYWxsIHByb3ZpZGVkIHBhcmFtZXRlciB2YWx1ZXMgYW5kIGNhbGwgdGhlIGFjdGlvbi5cblx0XHRcdC8vIFRoaXMgc2hhbGwgb25seSBoYXBwZW4gaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLCBvdGhlcndpc2UgdGhlIHBhcmFtZXRlciBkaWFsb2cgc2hhbGwgYmUgc2hvd24gd2hpY2ggaXMgZW5zdXJlZCBlYXJsaWVyXG5cdFx0XHRpZiAoYVBhcmFtZXRlclZhbHVlcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID1cblx0XHRcdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1ttQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZV0/LlswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG9PcGVyYXRpb25SZXN1bHQ6IGFueTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpLmNvbmNhdChtZXNzYWdlcylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFGYWlsZWRDb250ZXh0cyA9IFtdIGFzIGFueTtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMuZm9yRWFjaChmdW5jdGlvbiAoZmFpbDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikpO1xuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdHJlc29sdmUob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFyYW1ldGVycz8ubWVzc2FnZUhhbmRsZXI/LnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1Dcml0aWNhbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IGFueSxcblx0YVBhcmFtZXRlclZhbHVlczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBhbnlcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0XHRib3VuZEFjdGlvbk5hbWUgPVxuXHRcdFx0Ym91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGAke2VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IG9QYXJlbnRDb250cm9sLmdldENvbnRyb2xsZXIoKS5vUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3Qgc0NvbmZpcm1hdGlvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFwiQ19PUEVSQVRJT05TX0FDVElPTl9DT05GSVJNX01FU1NBR0VcIixcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdG51bGwsXG5cdFx0XHRzdWZmaXhSZXNvdXJjZUtleVxuXHRcdCk7XG5cblx0XHRNZXNzYWdlQm94LmNvbmZpcm0oc0NvbmZpcm1hdGlvblRleHQsIHtcblx0XHRcdG9uQ2xvc2U6IGFzeW5jIGZ1bmN0aW9uIChzQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IEFjdGlvbi5PSykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvT3BlcmF0aW9uID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIG9QYXJlbnRDb250cm9sLCBtZXNzYWdlSGFuZGxlcik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFQTUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFDb250ZXh0czogYW55LFxuXHRvRGlhbG9nOiBhbnksXG5cdGFmdGVyNDEyOiBib29sZWFuXG4pIHtcblx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHQvLyBJZiBzb21lIGVudHJpZXMgd2VyZSBzdWNjZXNzZnVsLCBhbmQgb3RoZXJzIGhhdmUgZmFpbGVkLCB0aGUgb3ZlcmFsbCBwcm9jZXNzIGlzIHN0aWxsIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoaXMgd2FzIHRyZWF0ZWQgYXMgcmVqZWN0aW9uXG5cdC8vIGJlZm9yZSwgYW5kIHRoaXMgY3VycmVudGx5IGlzIHN0aWxsIGtlcHQsIGFzIGxvbmcgYXMgZGlhbG9nIGhhbmRsaW5nIGlzIG1peGVkIHdpdGggYmFja2VuZCBwcm9jZXNzIGhhbmRsaW5nLlxuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBvbmx5IHJlamVjdCBpbiBjYXNlIG9mIG92ZXJhbGwgcHJvY2VzcyBlcnJvci5cblx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nOiBtYXAgdG8gb2xkIGxvZ2ljIHRvIHJlamVjdCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGZhaWxlZFxuXHRpZiAoYVJlc3VsdD8uc29tZSgob1NpbmdsZVJlc3VsdDogYW55KSA9PiBvU2luZ2xlUmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSkge1xuXHRcdHRocm93IGFSZXN1bHQ7XG5cdH1cblxuXHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGlmIChcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHQpIHtcblx0XHRpZiAoIWFmdGVyNDEyKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XCJEZWxheU1lc3NhZ2VzXCIsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpKTtcblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKG1QYXJhbWV0ZXJzLCBhQ29udGV4dHMsIG9EaWFsb2csIGFNZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbjogbVBhcmFtZXRlcnM/Lm9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2sobVBhcmFtZXRlcnMsIGFDb250ZXh0cywgb0RpYWxvZywgYU1lc3NhZ2VzLCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzOiBhbnksIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnksIGFjdGlvbkRlZmluaXRpb246IGFueSkge1xuXHRpZiAoXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoICYmXG5cdFx0YWN0aW9uRGVmaW5pdGlvbi4kSXNCb3VuZFxuXHQpIHtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0SlNPTi5wYXJzZShtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IG9Db250cm9sLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0bWVzc2FnZXM6IGFueSxcblx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IHsgc2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuIH1cbik6IHsgZm5HZXRNZXNzYWdlU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkOyBzaG93TWVzc2FnZUJveDogYm9vbGVhbjsgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW47IGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdIH0ge1xuXHRsZXQgc2hvd01lc3NhZ2VCb3ggPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRjb25zdCBvQ29udHJvbCA9IG1QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdGNvbnN0IHVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0KCkgPT09IFwiXCI7XG5cdH0pO1xuXHRjb25zdCBBUERtZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0ICYmXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YobVBhcmFtZXRlcnMuYWN0aW9uTmFtZSkgIT09IC0xICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YoYWN0aW9uUGFyYW0uJE5hbWUpICE9PSAtMTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG5cdEFQRG1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKEFQRE1lc3NhZ2U6IGFueSkge1xuXHRcdEFQRE1lc3NhZ2UuaXNBUERUYXJnZXQgPSB0cnVlO1xuXHR9KTtcblxuXHRjb25zdCBlcnJvclRhcmdldHNJbkFQRCA9IEFQRG1lc3NhZ2VzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcblx0aWYgKG9EaWFsb2cuaXNPcGVuKCkgJiYgYUNvbnRleHRzLmxlbmd0aCAhPT0gMCAmJiAhbVBhcmFtZXRlcnMuaXNTdGF0aWMpIHtcblx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHQvL2lzb2xhdGVkXG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEgfHwgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdC8vIGRvZXMgbm90IG1hdHRlciBpZiBlcnJvciBpcyBpbiBBUEQgb3Igbm90LCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udGV4dHMgc2VsZWN0ZWQgb3IgaWYgdGhlIGVycm9yIGlzIG5vdCB0aGUgQVBELCB3ZSBjbG9zZSBpdC5cblx0XHRcdFx0Ly8gVE9ETzogRGlsYW9nIGhhbmRsaW5nIHNob3VsZCBub3QgYmUgcGFydCBvZiBtZXNzYWdlIGhhbmRsaW5nLiBSZWZhY3RvciBhY2NvcmRpbmdseSAtIGRpYWxvZyBzaG91bGQgbm90IGJlIG5lZWRlZCBpbnNpZGUgdGhpcyBtZXRob2QgLSBuZWl0aGVyXG5cdFx0XHRcdC8vIHRvIGFzayB3aGV0aGVyIGl0J3Mgb3Blbiwgbm9yIHRvIGNsb3NlIGl0IVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzPy5vbkFmdGVyQVBEQ2xvc2UoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0Ly9jaGFuZ2VzZXRcblx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdG1QYXJhbWV0ZXJzPy5vbkFmdGVyQVBEQ2xvc2UoKTtcblx0XHR9XG5cdFx0Ly8gd2UgbmVlZCB0byBkZXN0cm95IHRoZSBkaWFsb2cgaW1tZWRpYXRlbHkgYWZ0ZXIgY2xvc2luZyBpdCwgaWYgbm90IG9EaWFsb2cuaXNPcGVuKCkgcmV0dXJucyB0cnVlIGJlbG93IGFuZCB0aGF0IHdvdWxkIGNhdXNlIGlycmVsZXZhbnQgbWVzc2FnZXMgdG8gYmUgc2hvd24gb24gVUlcblx0XHQvLyBieSB0aGUgbGluZXMgdGhhdCBmb2xsb3cuXG5cdH1cblx0bGV0IGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdID0gW107XG5cdGNvbnN0IGJJc0FQRE9wZW4gPSBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQoKSAhPT0gdW5kZWZpbmVkICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCgpICE9PSBcIlwiKSB7XG5cdFx0aWYgKChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB8fCAhb0NvbnRyb2wpIHtcblx0XHRcdC8vIE9QIGVkaXQgb3IgTFJcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gIWVycm9yVGFyZ2V0c0luQVBEO1xuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9Db250cm9sKSB7XG5cdFx0aWYgKG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdGlmICghYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdGZpbHRlcmVkTWVzc2FnZXMgPSB1bmJvdW5kTWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0XHRcdH0gZWxzZSBpZiAoIWJJc0FQRE9wZW4gJiYgdW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBlcnJvciB0YXJnZXRzIGluIEFQRCA9PiB0aGVyZSBpcyBhdGxlYXN0IG9uZSBib3VuZCBtZXNzYWdlLiBJZiB0aGVyZSBhcmUgdW5ib3VuZCBtZXNzYWdlcywgZGlhbG9nIG11c3QgYmUgc2hvd24uXG5cdFx0XHRcdC8vIGZvciBkcmFmdCBlbnRpdHksIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBBUERcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHNob3dNZXNzYWdlQm94OiBzaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZzogc2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0ZmlsdGVyZWRNZXNzYWdlczogZmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPyBmaWx0ZXJlZE1lc3NhZ2VzIDogbWVzc2FnZXMsXG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6XG5cdFx0XHRvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmIG1lc3NhZ2VIYW5kbGluZy5zZXRNZXNzYWdlU3VidGl0bGUuYmluZCh7fSwgb0NvbnRyb2wsIGFDb250ZXh0cylcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuLy8gdGhpcyB0eXBlIGlzIG1lYW50IHRvIGRlc2NyaWJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIGZvciBvbmUgQWN0aW9uUGFyYW1ldGVyIChpLmUuIGl0cyBvYmplY3QgaW4gbWV0YU1vZGVsKVxudHlwZSBBY3Rpb25QYXJhbWV0ZXIgPSB7XG5cdCROYW1lOiBzdHJpbmc7XG5cdCRpc0NvbGxlY3Rpb246IGJvb2xlYW47XG5cdC8vIGN1cnJlbnRseSBydW50aW1lIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gaW50byB0aGUgbWV0YW1vZGVsOlxuXHQvLyAtIGluIHRoZSBwcmVzcyBoYW5kbGVyIG9mIHRoZSBhY3Rpb24gYnV0dG9uIG9uIHRoZSBwYXJhbWV0ZXIgZGlhbG9nLCB0aGUgdmFsdWUgb2YgZWFjaCBwYXJhbWV0ZXIgaXMgYWRkZWRcblx0Ly8gLSBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUsIHRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdGhlIGNvbnRleHQgKGluIE9EYXRhTW9kZWwpIGNyZWF0ZWQgZm9yIHRoZSBhY3Rpb24gZXhlY3V0aW9uXG5cdC8vIHRoaXMgaXMgcXVpdGUgb2RkLCBhbmQgaXQgd291bGQgbWFrZSBtdWNoIG1vcmUgc2Vuc2UgdG8gdGFrZSB0aGUgdmFsdWUgZnJvbSBhY3Rpb25QYXJhbWV0ZXJJbmZvc1xuXHQvLyAtIGhvd2V2ZXIsIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSAob3IgcmF0aGVyIHRoZSBzdXJyb3VuZGluZyBfZXhlY3V0ZUFjdGlvbikgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXNcblx0Ly8gPT4gZm9yIHRoZSB0aW1lIGJlaW5nLCBhZGRpbmcgdmFsdWUgaGVyZSB0byBhdm9pZCB0cyBlcnJvcnMsIHN1YmplY3QgdG8gcmVmYWN0b3Jpbmdcblx0Ly8gaW4gY2FzZSBvZiBGaWVsZCwgdGhlIHZhbHVlIGlzIHN0cmluZywgaW4gY2FzZSBvZiBNdWx0aVZhbHVlRmllbGQsIGl0J3MgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdXG5cdHZhbHVlOiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG59O1xuXG5mdW5jdGlvbiBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nKFxuXHRzQWN0aW9uTmFtZTogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHNBY3Rpb25MYWJlbDogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10sXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0Y29uc3Qgc1BhdGggPSBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dCwgc0FjdGlvbk5hbWUpLFxuXHRcdG1ldGFNb2RlbCA9IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCkub01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdGVudGl0eVNldENvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpLFxuXHRcdHNBY3Rpb25OYW1lUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpXG5cdFx0XHQ/IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AJHVpNS5vdmVybG9hZC8wXCIpWzBdXG5cdFx0XHQ6IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi8wXCIpWzBdLFxuXHRcdGFjdGlvbk5hbWVDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25OYW1lUGF0aCksXG5cdFx0YklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24sXG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQWN0aW9uUGFyYW1ldGVyRGlhbG9nXCI7XG5cdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0dHlwZSBBY3Rpb25QYXJhbWV0ZXJJbmZvID0ge1xuXHRcdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXI7XG5cdFx0XHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdFx0XHR2YWx1ZT86IHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXTtcblx0XHRcdHZhbGlkYXRpb25Qcm9taXNlPzogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+O1xuXHRcdH07XG5cdFx0bGV0IGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW107IC8vIHRvIGJlIGZpbGxlZCBhZnRlciBmcmFnbWVudCAoZm9yIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nKSBpcyBsb2FkZWQuIEFjdHVhbGx5IG9ubHkgbmVlZGVkIGR1cmluZyBkaWFsb2cgcHJvY2Vzc2luZywgaS5lLiBjb3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBjb250cm9sbGVyIGFuZCBkaXJlY3RseSBpbml0aWFsaXplZCB0aGVyZSwgYnV0IG9ubHkgYWZ0ZXIgbW92aW5nIGFsbCBoYW5kbGVycyAoZXNwLiBwcmVzcyBoYW5kbGVyIGZvciBhY3Rpb24gYnV0dG9uKSB0byBjb250cm9sbGVyLlxuXG5cdFx0Y29uc3QgbWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cblx0XHQvLyBpbiBjYXNlIG9mIG1pc3NpbmcgbWFuZGFvdG9yeSBwYXJhbWV0ZXIsIG1lc3NhZ2UgY3VycmVudGx5IGRpZmZlcnMgcGVyIHBhcmFtZXRlciwgYXMgaXQgc3VwZXJmbHVvdXNseSBjb250YWlucyB0aGUgbGFiZWwgYXMgcGFyYW1ldGVyLiBQb3NzaWJsa3kgdGhpcyBjb3VsZCBiZSByZW1vdmVkIGluIGZ1dHVyZSwgaW4gdGhhdCBjYXNlLCBpbnRlcmZhY2UgY291bGQgYmUgc2ltcGxpZmllZCB0byBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHN0cmluZ1xuXHRcdGNvbnN0IF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyID0gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pID0+IHtcblx0XHRcdG1lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nID0gbWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldEJpbmRpbmcoXG5cdFx0XHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVyLmFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlID8gXCJpdGVtc1wiIDogXCJ2YWx1ZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZVBhcmFtZXRlci5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdHRhcmdldDogYmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKClcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyID0gKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IG1lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLiROYW1lXSk7XG5cdFx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW10ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0XHQpO1xuXHRcdFx0bWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IF92YWxpZGF0ZVByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSkpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRcdC8qIEhpbnQ6IFRoZSBib29sZWFuIGZhbHNlIGlzIGEgdmFsaWQgdmFsdWUgKi9cblxuXHRcdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdFx0aWYgKHJlcXVpcmVkUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlID09PSB1bmRlZmluZWQgfHwgIXJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRWYWx1ZSA9IChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBtZXNzYWdlIGNvbnRhaW5zIGxhYmVsIHBlciBmaWVsZCBmb3IgaGlzdG9yaWNhbCByZWFzb24gKG9yaWdpbmFsbHksIGl0IHdhcyBzaG93biBpbiBhZGRpdGlvbmFsIHBvcHVwLCBub3cgaXQncyBkaXJlY3RseSBhZGRlZCB0byB0aGUgZmllbGQpXG5cdFx0XHQvLyBpZiB0aGlzIHdhcyBub3QgdGhlIGNhc2UgKGFuZCBob3BlZnVsbHksIGluIGZ1dHVyZSB0aGlzIG1pZ2h0IGJlIHN1YmplY3QgdG8gY2hhbmdlKSwgaW50ZXJmYWNlIG9mIF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIGNvdWxkIGJlIHNpbXBsaWZpZWQgdG8ganVzdCBwYXNzIGVtcHR5UmVxdWlyZWRGaWVsZHMgYW5kIGEgY29uc3RhbnQgbWVzc2FnZSBoZXJlXG5cdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihcblx0XHRcdFx0ZW1wdHlSZXF1aXJlZEZpZWxkcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+ICh7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIiwgb1Jlc291cmNlQnVuZGxlLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXG5cdFx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVyICovXG5cdFx0XHRjb25zdCBmaXJzdEludmFsaWRBY3Rpb25QYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0XHQvLyB1bmZvcnR1bmF0ZWx5LCBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciBzZXRzIHZhbHVlU3RhdGUgb25seSBhc3luY2hyb25lb3VzbHksIHRodXMgY2hlY2tpbmcgZW1wdHlSZXF1aXJlZEZpZWxkcyBhZGRpdGlvbmFsbHlcblx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRWYWx1ZVN0YXRlKCkgPT09IFwiRXJyb3JcIiB8fCBlbXB0eVJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKGFjdGlvblBhcmFtZXRlckluZm8pXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoZmlyc3RJbnZhbGlkQWN0aW9uUGFyYW1ldGVyKSB7XG5cdFx0XHRcdGZpcnN0SW52YWxpZEFjdGlvblBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGRcblx0XHRcdFx0KSBhcyBBY3Rpb25QYXJhbWV0ZXJJbmZvO1xuXHRcdFx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHQvLyBhZGFwdCBpbmZvLiBQcm9taXNlIGlzIHJlc29sdmVkIHRvIHZhbHVlIG9yIHJlamVjdGVkIHdpdGggZXhjZXB0aW9uIGNvbnRhaW5pbmcgbWVzc2FnZVxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGRlbGV0ZSBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0XHRcdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKTtcblx0XHRjb25zdCBvUGFyYW1ldGVyTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdCRkaXNwbGF5TW9kZToge31cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjcmVhdGVkRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0b0ZyYWdtZW50LFxuXHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBvQWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdGFjdGlvbk5hbWU6IGFjdGlvbk5hbWVDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGFjdGlvbk5hbWU6IGFjdGlvbk5hbWVDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogZW50aXR5U2V0Q29udGV4dC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0Ly8gVE9ETzogbW92ZSB0aGUgZGlhbG9nIGludG8gdGhlIGZyYWdtZW50IGFuZCBtb3ZlIHRoZSBoYW5kbGVycyB0byB0aGUgb0NvbnRyb2xsZXJcblx0XHRcdGNvbnN0IGFDb250ZXh0czogYW55W10gPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXM6IGFueVtdID0gW107XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cdFx0XHRsZXQgb09wZXJhdGlvbkJpbmRpbmc6IGFueTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLnNldFVzZXJEZWZhdWx0cyhvQXBwQ29tcG9uZW50LCBhQWN0aW9uUGFyYW1ldGVycywgb1BhcmFtZXRlck1vZGVsLCB0cnVlKTtcblx0XHRcdGNvbnN0IG9EaWFsb2dDb250ZW50ID0gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBjcmVhdGVkRnJhZ21lbnQsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IG9Db250cm9sbGVyXG5cdFx0XHR9KSkgYXMgQ29udHJvbDtcblxuXHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mb3MgPSBhQWN0aW9uUGFyYW1ldGVycy5tYXAoKGFjdGlvblBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IENvcmUuYnlJZChnZW5lcmF0ZShbXCJBUERfXCIsIGFjdGlvblBhcmFtZXRlci4kTmFtZV0pKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gZmllbGQuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIik7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyOiBhY3Rpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0ZmllbGQ6IGZpZWxkLFxuXHRcdFx0XHRcdGlzTXVsdGlWYWx1ZTogaXNNdWx0aVZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gb1BhcmVudENvbnRyb2wuZ2V0Q29udHJvbGxlcigpLm9SZXNvdXJjZUJ1bmRsZTtcblx0XHRcdGxldCBhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRjb25zdCBvbkFmdGVyQVBEQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMuZm9yRWFjaChfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcik7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRpZiAoYWN0aW9uUmVzdWx0LmRpYWxvZ0NhbmNlbGxlZCkge1xuXHRcdFx0XHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKGFjdGlvblJlc3VsdC5yZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2codW5kZWZpbmVkLCB7XG5cdFx0XHRcdHRpdGxlOiBzQWN0aW9uTGFiZWwgfHwgQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIiwgb1Jlc291cmNlQnVuZGxlKSxcblx0XHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50XSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIGVzY2FwZSBoYW5kbGVyIGlzIG1lYW50IHRvIHBvc3NpYmx5IHN1cHByZXNzIG9yIHBvc3Rwb25lIGNsb3NpbmcgdGhlIGRpYWxvZyBvbiBlc2NhcGUgKGJ5IGNhbGxpbmcgXCJyZWplY3RcIiBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciBcInJlc29sdmVcIiBvbmx5IHdoZW5cblx0XHRcdFx0XHQvLyBkb25lIHdpdGggYWxsIHRhc2tzIHRvIGhhcHBlbiBiZWZvcmUgZGlhbG9nIGNhbiBiZSBjbG9zZWQpLiBJdCdzIG5vdCBpbnRlbmRlZCB0byBleHBsaWNldGx5IGNsb3NlIHRoZSBkaWFsb2cgaGVyZSAodGhhdCBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBub1xuXHRcdFx0XHRcdC8vIGVzY2FwZUhhbmRsZXIgaXMgcHJvdmlkZWQgb3IgdGhlIHJlc29sdmUtY2FsbGJhY2sgaXMgY2FsbGVkKSBvciBmb3Igb3duIHdyYXAgdXAgdGFza3MgKGxpa2UgcmVtb3ZpbmcgdmFsaWRpdGlvbiBtZXNzYWdlcyAtIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGVcblx0XHRcdFx0XHQvLyBhZnRlckNsb3NlKS5cblx0XHRcdFx0XHQvLyBUT0RPOiBNb3ZlIHdyYXAgdXAgdGFza3MgdG8gYWZ0ZXJDbG9zZSwgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBjb21wbGV0ZWx5LiBUYWtlIGNhcmUgdG8gYWxzbyBhZGFwdCBlbmQgYnV0dG9uIHByZXNzIGhhbmRsZXIgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0Ly8gQ3VycmVudGx5IG9ubHkgc3RpbGwgbmVlZGVkIHRvIGRpZmZlcmVudGlhdGUgY2xvc2luZyBkaWFsb2cgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gKHVzZXMgcmVzb2x2ZSkgZnJvbSB1c2VyIGNhbmNlbGxhdGlvbiAodXNpbmcgcmVqZWN0KVxuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHQvL1x0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBiSXNDcmVhdGVBY3Rpb25cblx0XHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTlwiLCBvUmVzb3VyY2VCdW5kbGUpXG5cdFx0XHRcdFx0XHQ6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lKG9SZXNvdXJjZUJ1bmRsZSwgc0FjdGlvbkxhYmVsLCBzQWN0aW9uTmFtZSwgZW50aXR5U2V0TmFtZSksXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGlmICghKGF3YWl0IF92YWxpZGF0ZVByb3BlcnRpZXMob1Jlc291cmNlQnVuZGxlKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBkdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbW92ZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gRGlhbG9nIChTaW1wbGVGb3JtKSB0byBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1ldGVyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IG9EaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpLmdldFByb3BlcnR5KGAvJHthQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZX1gKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaiBpbiBhTVZGQ29udGVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMucHVzaChhTVZGQ29udGVudFtqXS5LZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IGFLZXlWYWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBvUGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IHZQYXJhbWV0ZXJWYWx1ZTsgLy8gd3JpdGluZyB0aGUgY3VycmVudCB2YWx1ZSAodWVzZXIgaW5wdXQhKSBpbnRvIHRoZSBtZXRhbW9kZWwgPT4gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gdXNlIEFjdGlvblBhcmFtZXRlckluZm9zIGluc3RlYWQuIFVzZWQgaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmxhYmVsID0gc0FjdGlvbkxhYmVsO1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm9uQWZ0ZXJBUERDbG9zZSA9IG9uQWZ0ZXJBUERDbG9zZTtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnM/LmludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2FuY2VsbGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2h5IGlzIHRoaXMgaW1wbGVtZW50ZWQgYXMgY2FsbGJhY2s/IEFwcGFyZW50bHksIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJlZm9yZWhhbmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIGJhY2tlbmQgdmFsaWRhdGlvbiBlcnJvcihzPyksIG1lc3NhZ2Ugc2hhbGwgbm90IGJlIHNob3duIGluIG1lc3NhZ2UgZGlhbG9nIGJ1dCBuZXh0IHRvIHRoZSBmaWVsZCBvbiBwYXJhbWV0ZXIgZGlhbG9nLCB3aGljaCBzaG91bGRcblx0XHRcdFx0XHRcdFx0XHQvLyBzdGF5IG9wZW4gaW4gdGhpcyBjYXNlID0+IGluIHRoaXMgY2FzZSwgd2UgbXVzdCBub3QgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW4gYWxsIG90aGVyIGNhc2VzIChlLmcuIG90aGVyIGJhY2tlbmQgZXJyb3JzIG9yIHVzZXIgY2FuY2VsbGF0aW9uKSwgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cgbmVlZHMgdG8gYmUgcmVqZWN0ZWQgdG8gYWxsb3dcblx0XHRcdFx0XHRcdFx0XHQvLyBjYWxsZXJzIHRvIHJlYWN0LiAoRXhhbXBsZTogSWYgY3JlYXRpb24gaW4gYmFja2VuZCBhZnRlciBuYXZpZ2F0aW9uIHRvIHRyYW5zaWVudCBjb250ZXh0IGZhaWxzLCBiYWNrIG5hdmlnYXRpb24gbmVlZHMgdG8gYmUgdHJpZ2dlcmVkKVxuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IFJlZmFjdG9yIHRvIHNlcGFyYXRlIGRpYWxvZyBoYW5kbGluZyBmcm9tIGJhY2tlbmQgcmVxdWVzdCBpc3RlYWQgb2YgdGFraW5nIGRlY2lzaW9uIGJhc2VkIG9uIG1lc3NhZ2UgaGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbihnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgc0FjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT01NT05fQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQ0FOQ0VMXCIsIG9SZXNvdXJjZUJ1bmRsZSksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGNhbmNlbCBidXR0b24gc2hvdWxkIGp1c3QgY2xvc2UgdGhlIGRpYWxvZyAoc2ltaWxhciB0byB1c2luZyBlc2NhcGUpLiBBbGwgd3JhcCB1cCB0YXNrcyBzaG91bGQgYmUgbW92ZWQgdG8gYWZ0ZXJDbG9zZS5cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQvLyBUT0RPOiBiZWZvcmVPcGVuIGlzIGp1c3QgYW4gZXZlbnQsIGkuZS4gbm90IHdhaXRpbmcgZm9yIHRoZSBQcm9taXNlIHRvIGJlIHJlc29sdmVkLiBDaGVjayBpZiB0YXNrcyBvZiB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nXG5cdFx0XHRcdC8vIC0gaWYgeWVzLCB0aGV5IG5lZWQgdG8gYmUgbW92ZWQgb3V0c2lkZS5cblx0XHRcdFx0Ly8gQXNzdW1wdGlvbjogU29tZXRpbWVzIGRpYWxvZyBjYW4gYmUgc2VlbiB3aXRob3V0IGFueSBmaWVsZHMgZm9yIGEgc2hvcnQgdGltZSAtIG1heWJlIHRoaXMgaXMgY2F1c2VkIGJ5IHRoaXMgYXN5bmNocm9uaXR5XG5cdFx0XHRcdGJlZm9yZU9wZW46IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIGV2ZW50IGZvciBhY3Rpb25XcmFwcGVyIGFzIG9FdmVudC5vU291cmNlIGdldHMgbG9zdCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBiZWZvcmVPcGVuIGV2ZW50IGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBvQ2xvbmVFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIG9FdmVudCk7XG5cblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRjb25zdCBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0RpYWxvZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IG9BY3Rpb25Db250ZXh0LnNQYXRoICYmIG9BY3Rpb25Db250ZXh0LnNQYXRoLnNwbGl0KFwiL0BcIilbMF0sXG5cdFx0XHRcdFx0XHRcdHNEZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRcdFx0XHRgJHtzQWN0aW9uUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlZmF1bHRWYWx1ZXNGdW5jdGlvbmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBhc3luYyBmdW5jdGlvbiAoc0JpbmRpbmdQYXJhbWV0ZXI/OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNCb3VuZEZ1bmN0aW9uTmFtZSA9IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbigpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJlZmlsbFBhcmFtZXRlciA9IGFzeW5jIGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBhbnksIHZQYXJhbURlZmF1bHRWYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtRGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtVmFsdWUgPSBhd2FpdCBvT3BlcmF0aW9uQmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldFBhcmFtZXRlckNvbnRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnJlcXVlc3RQcm9wZXJ0eSh2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGFDb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzUGF0aEZvckNvbnRleHQgPSB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHNQYXRoRm9yQ29udGV4dC5pbmRleE9mKGAke3NCaW5kaW5nUGFyYW1ldGVyfS9gKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c1BhdGhGb3JDb250ZXh0ID0gc1BhdGhGb3JDb250ZXh0LnJlcGxhY2UoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0c1tpXS5nZXRQcm9wZXJ0eShzUGF0aEZvckNvbnRleHQpICE9PSB2UGFyYW1WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJOb1Bvc3NpYmxlVmFsdWU6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtVmFsdWUgfTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBzUGFyYW1OYW1lLCBtUGFyYW1ldGVycy5hY3Rpb25OYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbURlZmF1bHRWYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVyTW9kZWwgJiYgKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAyOiBUaGVyZSBpcyBubyBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvbiAoPT4gbG9vayBpbnRvIHRoZSBGTFAgVXNlciBEZWZhdWx0cylcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHNQYXJhbU5hbWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0RpYWxvZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLCBzUGFyYW1OYW1lKSArIFwiQFwiLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiYgb1BhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXTsgLy8gZWl0aGVyIHsgJFBhdGg6ICdzb21lUGF0aCcgfSBvciAnc29tZVN0cmluZydcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gW107XG5cdFx0XHRcdFx0XHRsZXQgc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRzUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoc1BhcmFtTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUucHVzaChwcmVmaWxsUGFyYW1ldGVyKHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgc0JvdW5kRnVuY3Rpb25OYW1lLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHNCb3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtcy5wdXNoKGNhbGxCb3VuZEZ1bmN0aW9uKHNCb3VuZEZ1bmN0aW9uTmFtZSwgYUNvbnRleHRzW2ldLCBtUGFyYW1ldGVycy5tb2RlbCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBhUHJlZmlsbFBhcmFtUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0XHRcdGxldCBhRXhlY0Z1bmN0aW9uUHJvbWlzZXM6IFByb21pc2U8YW55W10+ID0gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0XHRcdGxldCBvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZTtcblx0XHRcdFx0XHRcdGlmIChhRnVuY3Rpb25QYXJhbXMgJiYgYUZ1bmN0aW9uUGFyYW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzID0gUHJvbWlzZS5hbGwoYUZ1bmN0aW9uUGFyYW1zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc01vZHVsZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0LnN1YnN0cmluZygwLCBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRcdHNGdW5jdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UgPSBGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihvQ2xvbmVFdmVudCwgc01vZHVsZSwgc0Z1bmN0aW9uTmFtZSwge1xuXHRcdFx0XHRcdFx0XHRcdFwiY29udGV4dHNcIjogYUNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0XHRcdFx0YVByZWZpbGxQYXJhbVByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZVxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlOiBhbnkgPSBhUHJvbWlzZXNbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZ1bmN0aW9uUGFyYW1zID0gYVByb21pc2VzWzFdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QgPSBhUHJvbWlzZXNbMl07XG5cdFx0XHRcdFx0XHRcdGxldCBzRGlhbG9nUGFyYW1OYW1lOiBzdHJpbmc7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRmlsbCB0aGUgZGlhbG9nIHdpdGggdGhlIGVhcmxpZXIgZGV0ZXJtaW5lZCBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gdGhlIGRpZmZlcmVudCBzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdHNEaWFsb2dQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLCB2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QgJiYgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Lmhhc093blByb3BlcnR5KHNEaWFsb2dQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3Rbc0RpYWxvZ1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0gJiYgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSBkZWZhdWx0IHZhbHVlIGhhZCBub3QgYmVlbiBwcmV2aW91c2x5IGRldGVybWluZWQgZHVlIHRvIGRpZmZlcmVudCBjb250ZXh0cywgd2UgZG8gbm90aGluZyBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgIWN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS5iTm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gd2UgY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgc2FtZSBwYXJhbSB2YWx1ZSBmb3IgYWxsIHRoZSBjb250ZXh0czpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IGogPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpID09PVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqICsgMV0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PT0gYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZnVuY3Rpb25QYXJhbXNbMF0gJiYgZnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vT25seSBvbmUgY29udGV4dCwgdGhlbiB0aGUgZGVmYXVsdCBwYXJhbSB2YWx1ZXMgYXJlIHRvIGJlIHZlcmlmaWVkIGZyb20gdGhlIGZ1bmN0aW9uOlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgYkVycm9yRm91bmQgPSBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUuc29tZShmdW5jdGlvbiAob1ZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAob1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0XHRcdFx0XHRcdGlmIChiRXJyb3JGb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNUZXh0LCB7IGNvbnRlbnRXaWR0aDogXCIyNWVtXCIgfSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBwYXJhbWV0ZXJcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQXN5bmNCZWZvcmVPcGVuID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXJhbWV0ZXIgPSBhUGFyYW1ldGVyc1swXSAmJiBhUGFyYW1ldGVyc1swXS4kTmFtZTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gYXdhaXQgYUNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihzQmluZGluZ1BhcmFtZXRlciwgb0NvbnRleHRPYmplY3QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyhzQmluZGluZ1BhcmFtZXRlcik7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGF3YWl0IGZuQXN5bmNCZWZvcmVPcGVuKCk7XG5cblx0XHRcdFx0XHQvLyBhZGRpbmcgZGVmYXVsdGVkIHZhbHVlcyBvbmx5IGhlcmUgYWZ0ZXIgdGhleSBhcmUgbm90IHNldCB0byB0aGUgZmllbGRzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgTXVsdGlWYWx1ZUZpZWxkKS5nZXRJdGVtcygpXG5cdFx0XHRcdFx0XHRcdDogKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IG9uQWZ0ZXJBUERDbG9zZVxuXHRcdFx0fSk7XG5cdFx0XHRtUGFyYW1ldGVycy5vRGlhbG9nID0gb0RpYWxvZztcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob0FjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKS5vTW9kZWwpO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvUGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHQvKiBFdmVudCBuZWVkZWQgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIG9mIHZhbGlkIGNoYW5nZWQgZmllbGQgKi9cblx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRpZiAoYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvPy5maWVsZD8uZ2V0QmluZGluZyhcIml0ZW1zXCIpPy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNBY3Rpb25QYXRoID0gYCR7c0FjdGlvbk5hbWV9KC4uLilgO1xuXHRcdFx0aWYgKCFhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHNBY3Rpb25QYXRoID0gYC8ke3NBY3Rpb25QYXRofWA7XG5cdFx0XHR9XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdH1cblx0XHRcdG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogYW55KSB7XG5cdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpIHx8IFtdO1xuXHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdC8vaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLCBpZ25vcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBhbmQgY29uc2lkZXIgdGhlIHJlc3Rcblx0XHRcdHJldHVybiBhUGFyYW1ldGVycy5zbGljZSgxLCBhUGFyYW1ldGVycy5sZW5ndGgpIHx8IFtdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSwgY29udGV4dHM/OiBhbnksIG9Cb3VuZEFjdGlvbj86IGFueSkge1xuXHRjb25zdCB2QWN0aW9uQ3JpdGljYWwgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxgKTtcblx0bGV0IHNDcml0aWNhbFBhdGggPSB2QWN0aW9uQ3JpdGljYWwgJiYgdkFjdGlvbkNyaXRpY2FsLiRQYXRoO1xuXHRpZiAoIXNDcml0aWNhbFBhdGgpIHtcblx0XHQvLyB0aGUgc3RhdGljIHZhbHVlIHNjZW5hcmlvIGZvciBpc0FjdGlvbkNyaXRpY2FsXG5cdFx0cmV0dXJuICEhdkFjdGlvbkNyaXRpY2FsO1xuXHR9XG5cdGNvbnN0IGFCaW5kaW5nUGFyYW1zID0gb0JvdW5kQWN0aW9uICYmIG9Cb3VuZEFjdGlvbi5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpLFxuXHRcdGFQYXRocyA9IHNDcml0aWNhbFBhdGggJiYgc0NyaXRpY2FsUGF0aC5zcGxpdChcIi9cIiksXG5cdFx0YkNvbmRpdGlvbiA9XG5cdFx0XHRhQmluZGluZ1BhcmFtcyAmJiBhQmluZGluZ1BhcmFtcy5sZW5ndGggJiYgdHlwZW9mIGFCaW5kaW5nUGFyYW1zID09PSBcIm9iamVjdFwiICYmIHNDcml0aWNhbFBhdGggJiYgY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoO1xuXHRpZiAoYkNvbmRpdGlvbikge1xuXHRcdC8vaW4gY2FzZSBiaW5kaW5nIHBhdGFtZXRlcnMgYXJlIHRoZXJlIGluIHBhdGggbmVlZCB0byByZW1vdmUgZWc6IC0gX2l0L2lzVmVyaWZpZWQgPT4gbmVlZCB0byByZW1vdmUgX2l0IGFuZCB0aGUgcGF0aCBzaG91bGQgYmUgaXNWZXJpZmllZFxuXHRcdGFCaW5kaW5nUGFyYW1zLmZpbHRlcihmdW5jdGlvbiAob1BhcmFtczogYW55KSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGFQYXRocyAmJiBhUGF0aHMuaW5kZXhPZihvUGFyYW1zLiROYW1lKTtcblx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdGFQYXRocy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNDcml0aWNhbFBhdGggPSBhUGF0aHMuam9pbihcIi9cIik7XG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fSBlbHNlIGlmIChzQ3JpdGljYWxQYXRoKSB7XG5cdFx0Ly9pZiBzY2VuYXJpbyBpcyBwYXRoIGJhc2VkIHJldHVybiB0aGUgcGF0aCB2YWx1ZVxuXHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3Qoc0NyaXRpY2FsUGF0aCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgc0FjdGlvbkxhYmVsOiBzdHJpbmcsIHNBY3Rpb25OYW1lOiBzdHJpbmcsIHNFbnRpdHlTZXROYW1lOiBzdHJpbmcpIHtcblx0bGV0IGJvdW5kQWN0aW9uTmFtZTogYW55ID0gc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IG51bGw7XG5cdGNvbnN0IGFBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKTtcblx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBhQWN0aW9uTmFtZVthQWN0aW9uTmFtZS5sZW5ndGggLSAxXSA6IGJvdW5kQWN0aW9uTmFtZTtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgc0VudGl0eVNldE5hbWUgPyBgJHtzRW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdGNvbnN0IHNLZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9OQU1FXCI7XG5cdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9XG5cdFx0b1Jlc291cmNlQnVuZGxlICYmIENvbW1vblV0aWxzLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cygob1Jlc291cmNlQnVuZGxlIGFzIGFueSkuYUN1c3RvbUJ1bmRsZXMsIGAke3NLZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCk7XG5cdGlmIChzQWN0aW9uTGFiZWwpIHtcblx0XHRpZiAoYlJlc291cmNlS2V5RXhpc3RzKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlLCBudWxsLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSAmJlxuXHRcdFx0Q29tbW9uVXRpbHMuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcywgYCR7c0tleX18JHtzRW50aXR5U2V0TmFtZX1gKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KHNLZXksIG9SZXNvdXJjZUJ1bmRsZSwgbnVsbCwgYCR7c0VudGl0eVNldE5hbWV9YCk7XG5cdFx0fSBlbHNlIGlmIChvUmVzb3VyY2VCdW5kbGUgJiYgQ29tbW9uVXRpbHMuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcywgYCR7c0tleX1gKSkge1xuXHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KHNLZXksIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQWN0aW9uTGFiZWw7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0RJQUxPR19PS1wiLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvQWN0aW9uOiBhbnksXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0b1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZVxuKSB7XG5cdGlmIChtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdGxldCBzdHJpY3RIYW5kbGluZ0ZhaWxzOiBhbnk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHByb2Nlc3NlZE1lc3NhZ2VJZHMgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIik7XG5cdFx0Y29uc3QgdHJhbnNpdGlvbk1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRjb25zdCBpc0R1cGxpY2F0ZSA9IHByb2Nlc3NlZE1lc3NhZ2VJZHMuZmluZChmdW5jdGlvbiAoaWQ6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRJZCgpID09PSBpZDtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFpc0R1cGxpY2F0ZSkge1xuXHRcdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzLnB1c2gobWVzc2FnZS5nZXRJZCgpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkRlbGF5TWVzc2FnZXNcIixcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWUgJiYgbWVzc2FnZS5nZXRUeXBlKCkgIT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWlzRHVwbGljYXRlO1xuXHRcdH0pO1xuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBwcm9jZXNzZWRNZXNzYWdlSWRzKTtcblx0XHRpZiAodHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik7XG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMucHVzaCh7XG5cdFx0XHRcdFx0b0FjdGlvbjogb0FjdGlvbixcblx0XHRcdFx0XHRncm91cElkOiBzR3JvdXBJZFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIHN0cmljdEhhbmRsaW5nRmFpbHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChcblx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXggPT09IGlDb250ZXh0TGVuZ3RoICYmXG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMk1lc3NhZ2VzXCIpPy5sZW5ndGhcblx0KSB7XG5cdFx0b3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMk1lc3NhZ2VzXCIpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGxcbikge1xuXHRsZXQgb0FjdGlvblByb21pc2UsXG5cdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gdHJ1ZTtcblx0aWYgKGJHZXRCb3VuZENvbnRleHQpIHtcblx0XHRjb25zdCBzUGF0aCA9IG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChzTWV0YVBhdGgpO1xuXHRcdGlmIChvUHJvcGVydHkgJiYgb1Byb3BlcnR5WzBdPy4ka2luZCAhPT0gXCJBY3Rpb25cIikge1xuXHRcdFx0Ly9kbyBub3QgZW5hYmxlIHRoZSBzdHJpY3QgaGFuZGxpbmcgaWYgaXRzIG5vdCBhbiBhY3Rpb25cblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmICghYkVuYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBiR2V0Qm91bmRDb250ZXh0XG5cdFx0XHQ/IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBiR2V0Qm91bmRDb250ZXh0XG5cdFx0XHQ/IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGU0MTJGYWlsZWRUcmFuc2l0aW9ucyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGU0MTJGYWlsZWRUcmFuc2l0aW9ucyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0XHRoYW5kbGU0MTJGYWlsZWRUcmFuc2l0aW9ucyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvQWN0aW9uUHJvbWlzZS5jYXRjaCgoKSA9PiB7XG5cdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0fSk7XG59XG5mdW5jdGlvbiBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnksIG9QYXJlbnRDb250cm9sPzogYW55LCBtZXNzYWdlSGFuZGxlcj86IE1lc3NhZ2VIYW5kbGVyKSB7XG5cdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0Y29uc3Qgb01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMgfHwgW107XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuYWN0aW9uTmFtZTtcblx0Y29uc3QgZm5PblN1Ym1pdHRlZCA9IG1QYXJhbWV0ZXJzLmZuT25TdWJtaXR0ZWQ7XG5cdGNvbnN0IGZuT25SZXNwb25zZSA9IG1QYXJhbWV0ZXJzLmZuT25SZXNwb25zZTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gb1BhcmVudENvbnRyb2wgJiYgb1BhcmVudENvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikgJiYgb1BhcmVudENvbnRyb2wuZ2V0Q29udHJvbGxlcigpLm9SZXNvdXJjZUJ1bmRsZTtcblx0bGV0IG9BY3Rpb246IGFueTtcblxuXHRmdW5jdGlvbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKSB7XG5cdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzICYmIGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoIWFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChhQWN0aW9uUGFyYW1ldGVyc1tqXS4kVHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IDA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gdGJjXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0FjdGlvbi5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbal0uJE5hbWUsIGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmICFtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpKSB7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdQcm9taXNlc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIiwgW10pO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIiwgW10pO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIiwgW10pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRsZXQgc0dyb3VwSWQ6IHN0cmluZztcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZUFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb25Db250ZXh0OiBhbnksIGN1cnJlbnRfY29udGV4dF9pbmRleDogYW55LCBvU2lkZUVmZmVjdDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSAhYkdyb3VwZWQgPyBgJGF1dG8uJHtjdXJyZW50X2NvbnRleHRfaW5kZXh9YCA6IGFjdGlvbkNvbnRleHQuZ2V0VXBkYXRlR3JvdXBJZCgpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbnMsIG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQpO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZVNpbmdsZUFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb25Db250ZXh0OiBhbnksIGN1cnJlbnRfY29udGV4dF9pbmRleDogYW55LCBvU2lkZUVmZmVjdDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGFMb2NhbFByb21pc2U6IGFueSA9IFtdO1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gYGFwaU1vZGUke2N1cnJlbnRfY29udGV4dF9pbmRleH1gO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKFxuXHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGFMb2NhbFByb21pc2UpO1xuXHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGFMb2NhbFByb21pc2UpO1xuXHRcdFx0fTtcblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5FeGVjdXRlU2VxdWVudGlhbGx5KGNvbnRleHRzVG9FeGVjdXRlOiBDb250ZXh0W10pIHtcblx0XHRcdFx0Ly8gT25lIGFjdGlvbiBhbmQgaXRzIHNpZGUgZWZmZWN0cyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGUgbmV4dCBhY3Rpb24gaXMgZXhlY3V0ZWRcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQ6IGFueSwgYWN0aW9uSW5kZXg6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBjb250ZXh0LCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHJldHVybiBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YWN0aW9uSW5kZXgsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBzZXJpYWxpemF0aW9uOiBwcm9jZXNzT25lQWN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBpbiBjb250ZXh0c1RvRXhlY3V0ZSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRcdFx0YXdhaXQgY29udGV4dHNUb0V4ZWN1dGUucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBDb250ZXh0LCBpZDogaW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkICsgMSwgYUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdH0sIFByb21pc2UucmVzb2x2ZSgpKTtcblxuXHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFiR3JvdXBlZCkge1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIsIGVuc3VyZSB0aGF0IGVhY2ggYWN0aW9uIGFuZCBtYXRjaGluZyBzaWRlIGVmZmVjdHNcblx0XHRcdFx0Ly8gYXJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIG5leHQgc2V0IGlzIHN1Ym1pdHRlZC4gV29ya2Fyb3VuZCB1bnRpbCBKU09OIGJhdGNoIGlzIGF2YWlsYWJsZS5cblx0XHRcdFx0Ly8gQWxsb3cgYWxzbyBmb3IgTGlzdCBSZXBvcnQuXG5cdFx0XHRcdGZuRXhlY3V0ZVNlcXVlbnRpYWxseShhQ29udGV4dHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBhQ29udGV4dHNbaV0sIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPD0gMSA/IG51bGwgOiBpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBhQ29udGV4dHNbaV0sXG5cdFx0XHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmbkhhbmRsZVJlc3VsdHMoKSB7XG5cdFx0XHRcdC8vIFByb21pc2UuYWxsU2V0dGxlZCB3aWxsIG5ldmVyIGJlIHJlamVjdGVkLiBIb3dldmVyLCBlc2xpbnQgcmVxdWlyZXMgZWl0aGVyIGNhdGNoIG9yIHJldHVybiAtIHRodXMgd2UgcmV0dXJuIHRoZSByZXN1bHRpbmcgUHJvbWlzZSBhbHRob3VnaCBubyBvbmUgd2lsbCB1c2UgaXQuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUFjdGlvblByb21pc2VzKS50aGVuKHJlc29sdmUpO1xuXHRcdFx0fVxuXHRcdH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb24uZXhlY3V0ZShcblx0XHRcdHNHcm91cElkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdHsgbGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLCBtb2RlbDogb01vZGVsIH0sXG5cdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdClcblx0XHQpO1xuXHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0Ly8gdHJpZ2dlciBvblN1Ym1pdHRlZCBcImV2ZW50XCJcblx0XHQoXG5cdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHQvKiovXG5cdFx0XHR9XG5cdFx0KShvQWN0aW9uUHJvbWlzZSk7XG5cdFx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gX2dldFBhdGgob0FjdGlvbkNvbnRleHQ6IGFueSwgc0FjdGlvbk5hbWU6IGFueSkge1xuXHRsZXQgc1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCk7XG5cdHNQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgPyBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdIDogc1BhdGguc3BsaXQoXCIvMFwiKVswXTtcblx0cmV0dXJuIHNQYXRoLnNwbGl0KGAvJHtzQWN0aW9uTmFtZX1gKVswXTtcbn1cblxuZnVuY3Rpb24gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyhcblx0aXNDcmVhdGVBY3Rpb246IGJvb2xlYW4sXG5cdGFjdGlvblBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcblx0cGFyYW1ldGVyVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRzdGFydHVwUGFyYW1ldGVycz86IGFueVxuKTogYm9vbGVhbiB7XG5cdGlmIChwYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHQvLyBJZiBzaG93RGlhbG9nIGlzIGZhbHNlIGJ1dCB0aGVyZSBhcmUgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnZva2VBY3Rpb24gY2FsbCwgd2UgbmVlZCB0byBjaGVjayB0aGF0IHZhbHVlcyBoYXZlIGJlZW5cblx0XHQvLyBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlci4kTmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiICYmXG5cdFx0XHRcdCFwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBhY3Rpb25QYXJhbWV0ZXIuJE5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQ3JlYXRlQWN0aW9uICYmIHN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0Ly8gSWYgcGFyYW1ldGVycyBoYXZlIGJlZW4gcHJvdmlkZWQgZHVyaW5nIGFwcGxpY2F0aW9uIGxhdW5jaCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgc2V0IGlzIGNvbXBsZXRlXG5cdFx0Ly8gSWYgbm90LCB0aGUgcGFyYW1ldGVyIGRpYWxvZyBzdGlsbCBuZWVkcyB0byBiZSBzaG93bi5cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzW2FjdGlvblBhcmFtZXRlci4kTmFtZV0pIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnksIHNHcm91cElkOiBhbnksIGFMb2NhbFByb21pc2U/OiBhbnkpIHtcblx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGxldCBvTG9jYWxQcm9taXNlO1xuXHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNUcmlnZ2VyQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0XHRcdGlmIChhTG9jYWxQcm9taXNlKSB7XG5cdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gcmVxdWVzdCBzaWRlIGVmZmVjdHMgZm9yIHRoaXMgYWN0aW9uXG5cdC8vIGFzIHdlIG1vdmUgdGhlIG1lc3NhZ2VzIHJlcXVlc3QgdG8gUE9TVCAkc2VsZWN0IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGFuIGVtcHR5IGFycmF5XG5cdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcblx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHR9XG5cdFx0b0xvY2FsUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRKU09OLnBhcnNlKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyB0byBjYWxsIE9EYXRhIGFjdGlvbnMgKGJvdW5kL2ltcG9ydCkgYW5kIGZ1bmN0aW9ucyAoYm91bmQvaW1wb3J0KVxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXHRjYWxsQm91bmRBY3Rpb246IGNhbGxCb3VuZEFjdGlvbixcblx0Y2FsbEFjdGlvbkltcG9ydDogY2FsbEFjdGlvbkltcG9ydCxcblx0Y2FsbEJvdW5kRnVuY3Rpb246IGNhbGxCb3VuZEZ1bmN0aW9uLFxuXHRjYWxsRnVuY3Rpb25JbXBvcnQ6IGNhbGxGdW5jdGlvbkltcG9ydCxcblx0ZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0czogZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyxcblx0dmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzOiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzLFxuXHRnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lOiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSxcblx0YWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjazogYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayxcblx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uOiBhZnRlckFjdGlvblJlc29sdXRpb25cblx0Ly8gQWN0aW9uUGFyYW1ldGVySW5mbzogQWN0aW9uUGFyYW1ldGVySW5mbyxcblx0Ly8gIF92YWxpZGF0ZVByb3BlcnRpZXMsIF92YWxpZGF0ZVByb3BlcnRpZXNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFJLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQUU7SUFDcEIsQ0FBQyxDQUFDLE9BQU1HLENBQUMsRUFBRTtNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBQyxDQUFDO0lBQ2xCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRUgsT0FBTyxDQUFDO0lBQ3BDO0lBQ0EsT0FBT0MsTUFBTTtFQUNkO0VBR08sMEJBQTBCRixJQUFJLEVBQUVLLFNBQVMsRUFBRTtJQUNqRCxJQUFJO01BQ0gsSUFBSUgsTUFBTSxHQUFHRixJQUFJLEVBQUU7SUFDcEIsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtNQUNYLE9BQU9FLFNBQVMsQ0FBQyxJQUFJLEVBQUVGLENBQUMsQ0FBQztJQUMxQjtJQUNBLElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFJLENB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
|
|
1612
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJvUGFyZW50Q29udHJvbCIsIm1lc3NhZ2VIYW5kbGVyIiwiYUNvbnRleHRzIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiX2V4ZWN1dGVBY3Rpb24iLCJhUmVzdWx0Iiwic29tZSIsIm9TaW5nbGVSZXN1bHQiLCJzdGF0dXMiLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldFByb3BlcnR5IiwibGVuZ3RoIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJhZGRNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsIkNvbnN0YW50cyIsIkZFTGlicmFyeSIsIkludm9jYXRpb25Hcm91cGluZyIsIkFjdGlvbiIsIk1lc3NhZ2VCb3giLCJjYWxsQm91bmRBY3Rpb24iLCJzQWN0aW9uTmFtZSIsImNvbnRleHRzIiwib01vZGVsIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5Iiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJjYWxsQWN0aW9uSW1wb3J0IiwiYmluZENvbnRleHQiLCJvQWN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJzRnVuY3Rpb25OYW1lIiwiY29udGV4dCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJyZXNvbHZlIiwib0Z1bmN0aW9uSW1wb3J0Iiwib0Z1bmN0aW9uIiwic0dyb3VwSWQiLCJFcnJvciIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsImFQYXJhbWV0ZXIiLCIkRW50aXR5U2V0UGF0aCIsIiRJc0JvdW5kIiwiZW50aXR5U2V0TmFtZSIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJnZXRDb250ZXh0Iiwib0ZhaWxlZE9wZXJhdGlvblJlc3VsdCIsIm9BY3Rpb25Db250ZXh0IiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRDb250cm9sbGVyIiwic0NvbmZpcm1hdGlvblRleHQiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNob3dNZXNzYWdlQm94IiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldCIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImNsb3NlIiwib25BZnRlckFQRENsb3NlIiwiZmlsdGVyZWRNZXNzYWdlcyIsImJJc0FQRE9wZW4iLCJ1bmRlZmluZWQiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm1lc3NhZ2VIYW5kbGluZyIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsInNQYXRoIiwiX2dldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRDb250ZXh0Iiwic0FjdGlvbk5hbWVQYXRoIiwiYWN0aW9uTmFtZUNvbnRleHQiLCJzRnJhZ21lbnROYW1lIiwiYWN0aW9uUGFyYW1ldGVySW5mb3MiLCJtZXNzYWdlTWFuYWdlciIsIl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIiwibWVzc2FnZVBhcmFtZXRlcnMiLCJtYXAiLCJtZXNzYWdlUGFyYW1ldGVyIiwiYmluZGluZyIsImFjdGlvblBhcmFtZXRlckluZm8iLCJmaWVsZCIsImdldEJpbmRpbmciLCJpc011bHRpVmFsdWUiLCJNZXNzYWdlIiwidHlwZSIsInByb2Nlc3NvciIsInBlcnNpc3RlbnQiLCJ0YXJnZXQiLCJnZXRSZXNvbHZlZFBhdGgiLCJfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciIsInBhcmFtZXRlciIsImFsbE1lc3NhZ2VzIiwiZ2VuZXJhdGUiLCJyZWxldmFudE1lc3NhZ2VzIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsImlkIiwiaW5jbHVkZXMiLCJyZW1vdmVNZXNzYWdlcyIsIl92YWxpZGF0ZVByb3BlcnRpZXMiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZ2V0UmVxdWlyZWQiLCJlbXB0eVJlcXVpcmVkRmllbGRzIiwicmVxdWlyZWRQYXJhbWV0ZXJJbmZvIiwiZmllbGRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJnZXRUZXh0IiwiZmlyc3RJbnZhbGlkQWN0aW9uUGFyYW1ldGVyIiwiZ2V0VmFsdWVTdGF0ZSIsImZvY3VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJnZXRTb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJlcnJvciIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImFjdGlvbiIsImVudGl0eVNldCIsIm1vZGVscyIsImNyZWF0ZWRGcmFnbWVudCIsImFGdW5jdGlvblBhcmFtcyIsIm9PcGVyYXRpb25CaW5kaW5nIiwic2V0VXNlckRlZmF1bHRzIiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJvRGlhbG9nQ29udGVudCIsImFjdGlvblBhcmFtZXRlciIsImFjdGlvblJlc3VsdCIsImRpYWxvZ0NhbmNlbGxlZCIsImRlc3Ryb3kiLCJidXR0b25Mb2NrIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidGV4dCIsIl9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIiwicHJlc3MiLCJCdXN5TG9ja2VyIiwibG9jayIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInZQYXJhbWV0ZXJWYWx1ZSIsIm9QYXJhbWV0ZXJDb250ZXh0IiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJpc0xvY2tlZCIsInVubG9jayIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZW5kQnV0dG9uIiwiYmVmb3JlT3BlbiIsIm9DbG9uZUV2ZW50IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwic0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzQm91bmRGdW5jdGlvbk5hbWUiLCJwcmVmaWxsUGFyYW1ldGVyIiwic1BhcmFtTmFtZSIsInZQYXJhbURlZmF1bHRWYWx1ZSIsIiRQYXRoIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlBhcmFtVmFsdWUiLCJzUGF0aEZvckNvbnRleHQiLCJyZXBsYWNlIiwicGFyYW1OYW1lIiwiYk5vUG9zc2libGVWYWx1ZSIsInJlcXVlc3RQcm9wZXJ0eSIsIkxvZyIsImJMYXRlUHJvcGVydHlFcnJvciIsIm9EYXRhIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwic0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoIiwiZ2V0UGFyYW1ldGVyUGF0aCIsIm9QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwidlBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiaGFzT3duUHJvcGVydHkiLCJiRXJyb3JGb3VuZCIsIm9WYWx1ZSIsInNUZXh0Iiwid2FybmluZyIsImNvbnRlbnRXaWR0aCIsImZuQXN5bmNCZWZvcmVPcGVuIiwiYVBhcmFtZXRlcnMiLCJyZXF1ZXN0T2JqZWN0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRJdGVtcyIsImFmdGVyQ2xvc2UiLCJzZXRNb2RlbCIsImJpbmRFbGVtZW50IiwicGF0aCIsIm9NVkZNb2RlbCIsImF0dGFjaENoYW5nZSIsImFkZERlcGVuZGVudCIsInNldEJpbmRpbmdDb250ZXh0IiwiZ2V0T2JqZWN0QmluZGluZyIsIm9wZW4iLCJzbGljZSIsInZBY3Rpb25Dcml0aWNhbCIsInNDcml0aWNhbFBhdGgiLCJhQmluZGluZ1BhcmFtcyIsImFQYXRocyIsImJDb25kaXRpb24iLCJvUGFyYW1zIiwiaW5kZXgiLCJqb2luIiwic0VudGl0eVNldE5hbWUiLCJhQWN0aW9uTmFtZSIsInNLZXkiLCJiUmVzb3VyY2VLZXlFeGlzdHMiLCJjaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMiLCJhQ3VzdG9tQnVuZGxlcyIsImhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zIiwiY3VycmVudF9jb250ZXh0X2luZGV4IiwiaUNvbnRleHRMZW5ndGgiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiaXNEdXBsaWNhdGUiLCJnZXRJZCIsImdldFR5cGUiLCJNZXNzYWdlVHlwZSIsIlN1Y2Nlc3MiLCJnZXRQZXJzaXN0ZW50IiwiZ3JvdXBJZCIsIm9wZXJhdGlvbnNIZWxwZXIiLCJyZW5kZXJNZXNzYWdlVmlldyIsImV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMiLCJiRW5hYmxlU3RyaWN0SGFuZGxpbmciLCJvUHJvcGVydHkiLCIka2luZCIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsIm9wZXJhdGlvbnMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJmbkV4ZWN1dGVTZXF1ZW50aWFsbHkiLCJjb250ZXh0c1RvRXhlY3V0ZSIsInByb2Nlc3NPbmVBY3Rpb24iLCJhY3Rpb25JbmRleCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsIm5vb3AiLCJhQWN0aW9uUHJvbWlzZXMiLCJyZWR1Y2UiLCJwcm9taXNlIiwiZm5IYW5kbGVSZXN1bHRzIiwiZm5FeGVjdXRlQWN0aW9uIiwiYWN0aW9uQ29udGV4dCIsIm9TaWRlRWZmZWN0IiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYUxvY2FsUHJvbWlzZSIsImZpbmFsbHkiLCJhY3Rpb25QYXJhbWV0ZXJzIiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9Mb2NhbFByb21pc2UiLCJzVHJpZ2dlckFjdGlvbiIsImV4ZWN1dGVBY3Rpb24iLCJ2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMiLCJnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJvcGVyYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi8uLi9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBvcGVyYXRpb25zSGVscGVyIGZyb20gXCIuLi8uLi9vcGVyYXRpb25zSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwiLi4vTWVzc2FnZUhhbmRsZXJcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEJvdW5kQWN0aW9uXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBjb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgT0RhdGEgTW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQsIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oc0FjdGlvbk5hbWU6IHN0cmluZywgY29udGV4dHM6IGFueSwgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblx0Ly8gdGhpcyBtZXRob2QgZWl0aGVyIGFjY2VwdHMgc2luZ2xlIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gYW4gdW5hbWJpZ3VvcyBBUElcblx0Y29uc3QgaXNDYWxsZWRXaXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKTtcblxuXHQvLyBpbiBjYXNlIG9mIHNpbmdsZSBjb250ZXh0IHdyYXAgaW50byBhbiBhcnJheSBmb3IgY2FsbGVkIG1ldGhvZHMgKGVzcC4gY2FsbEFjdGlvbilcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gaXNDYWxsZWRXaXRoQXJyYXkgPyBjb250ZXh0cyA6IFtjb250ZXh0c107XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHQvLyBBbmFseXppbmcgbWV0YU1vZGVsUGF0aCBmb3IgYWN0aW9uIG9ubHkgZnJvbSBmaXJzdCBjb250ZXh0IHNlZW1zIHdlaXJkLCBidXQgcHJvYmFibHkgd29ya3MgaW4gYWxsIGV4aXN0aW5nIHN6ZW5hcmlvcyAtIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHBhc3NlZCwgdGhleSBwcm9iYWJseVxuXHRcdC8vIGJlbG9uZyB0byB0aGUgc2FtZSBtZXRhbW9kZWxwYXRoLiBUT0RPOiBDaGVjaywgd2hldGhlciB0aGlzIGNhbiBiZSBpbXByb3ZlZCAvIHN6ZW5hcmlvcyB3aXRoIGRpZmZlcmVudCBtZXRhTW9kZWxQYXRocyBtaWdodCBleGlzdFxuXHRcdHNBY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbCwgc0FjdGlvblBhdGgsIG1QYXJhbWV0ZXJzLmFDb250ZXh0cywgb0JvdW5kQWN0aW9uKTtcblxuXHQvLyBQcm9taXNlIHJldHVybmVkIGJ5IGNhbGxBY3Rpb24gY3VycmVudGx5IGlzIHJlamVjdGVkIGluIGNhc2Ugb2YgZXhlY3V0aW9uIGZvciBtdWx0aXBsZSBjb250ZXh0cyBwYXJ0bHkgZmFpbGluZy4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCAoc29tZSBmYWlsaW5nIGNvbnRleHRzIGRvIG5vdCBtZWFuXG5cdC8vIHRoYXQgZnVuY3Rpb24gZGlkIG5vdCBmdWxmaWxsIGl0cyB0YXNrKSwgYnV0IGFzIHRoaXMgaXMgYSBiaWdnZXIgcmVmYWN0b3JpbmcsIGZvciB0aGUgdGltZSBiZWluZyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGF0IGF0IHRoZSBjYWxsaW5nIHBsYWNlIChpLmUuIGhlcmUpXG5cdC8vID0+IHByb3ZpZGUgdGhlIHNhbWUgaGFuZGxlciAobWFwcGluZyBiYWNrIGZyb20gYXJyYXkgdG8gc2luZ2xlIHJlc3VsdC9lcnJvciBpZiBuZWVkZWQpIGZvciByZXNvbHZlZC9yZWplY3RlZCBjYXNlXG5cdGNvbnN0IGV4dHJhY3RTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHQvLyBzaW5nbGUgYWN0aW9uIGNvdWxkIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkXG5cdFx0aWYgKHJlc3VsdFswXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRbMF0udmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGlhbG9nIGNhbmNlbGxhdGlvbiwgbm8gYXJyYXkgaXMgcmV0dXJuZWQgPT4gdGhyb3cgdGhlIHJlc3VsdC5cblx0XHRcdC8vIElkZWFsbHksIGRpZmZlcmVudGlhdGluZyBzaG91bGQgbm90IGJlIG5lZWRlZCBoZXJlID0+IFRPRE86IEZpbmQgYmV0dGVyIHNvbHV0aW9uIHdoZW4gc2VwYXJhdGluZyBkaWFsb2cgaGFuZGxpbmcgKHNpbmdsZSBvYmplY3Qgd2l0aCBzaW5nbGUgcmVzdWx0KSBmcm9tIGJhY2tlbmRcblx0XHRcdC8vIGV4ZWN1dGlvbiAocG90ZW50aWFsbHkgbXVsdGlwbGUgb2JqZWN0cylcblx0XHRcdHRocm93IHJlc3VsdFswXS5yZWFzb24gfHwgcmVzdWx0O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRBY3Rpb24sIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzKS50aGVuKFxuXHRcdChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW1wb3J0IHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxBY3Rpb25JbXBvcnQoc0FjdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkFjdGlvbiBleHBlY3RzIGEgbW9kZWwvY29udGV4dCBmb3IgZXhlY3V0aW9uXCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0FjdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvQWN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEFjdGlvblwiKX0vMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpO1xufVxuZnVuY3Rpb24gY2FsbEJvdW5kRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0OiBhbnksIG9Nb2RlbDogYW55KSB7XG5cdGlmICghY29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGZ1bmN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYSBjb250ZXh0XCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpfS8ke3NGdW5jdGlvbk5hbWV9YCxcblx0XHRvQm91bmRGdW5jdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kRnVuY3Rpb24sIGNvbnRleHQpO1xufVxuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzRnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgdjQgbW9kZWxcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGxGdW5jdGlvbkltcG9ydChzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogYW55KSB7XG5cdGlmICghc0Z1bmN0aW9uTmFtZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9GdW5jdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEZ1bmN0aW9uXCIpfS8wYCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0Z1bmN0aW9uSW1wb3J0KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogYW55LCBvTW9kZWw6IGFueSwgb0Z1bmN0aW9uOiBhbnksIGNvbnRleHQ/OiBhbnkpIHtcblx0bGV0IHNHcm91cElkO1xuXHRpZiAoIW9GdW5jdGlvbiB8fCAhb0Z1bmN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgRnVuY3Rpb24gJHtzRnVuY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdH1cblx0aWYgKGNvbnRleHQpIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0Z1bmN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQpO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkdyb3VwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdH1cblx0Y29uc3Qgb0Z1bmN0aW9uUHJvbWlzZSA9IG9GdW5jdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG9GdW5jdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lOiBhbnksIG9Nb2RlbDogYW55LCBvQWN0aW9uOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRsZXQgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdGxldCBmbkRpYWxvZztcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Ly9sZXQgZmFpbGVkQWN0aW9uUHJvbWlzZTogYW55O1xuXHRcdGNvbnN0IHNBY3Rpb25MYWJlbCA9IG1QYXJhbWV0ZXJzLmxhYmVsO1xuXHRcdGNvbnN0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBhbnk7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgYklzU2FtZUVudGl0eTtcblx0XHRsZXQgb1JldHVyblR5cGU7XG5cdFx0bGV0IGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYWN0aW9uRGVmaW5pdGlvbiA9IG9BY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdFx0aWYgKCFvQWN0aW9uIHx8ICFvQWN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQWN0aW9uICR7c0FjdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGFjdGlvblxuXHRcdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uKTtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIHBhcmFtZXRlcnMgYW5kIHdvdWxkIG5lZWQgYSBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0Ly8gVGhlIHBhcmFtZXRlciBSZXN1bHRJc0FjdGl2ZUVudGl0eSBpcyBhbHdheXMgaGlkZGVuIGluIHRoZSBkaWFsb2chIEhlbmNlIGlmXG5cdFx0Ly8gdGhpcyBpcyB0aGUgb25seSBwYXJhbWV0ZXIsIHRoaXMgaXMgdHJlYXRlZCBhcyBubyBwYXJhbWV0ZXIgaGVyZSBiZWNhdXNlIHRoZVxuXHRcdC8vIGRpYWxvZyB3b3VsZCBiZSBlbXB0eSFcblx0XHQvLyBGSVhNRTogU2hvdWxkIG9ubHkgaWdub3JlIHRoaXMgaWYgdGhpcyBpcyBhICdjcmVhdGUnIGFjdGlvbiwgb3RoZXJ3aXNlIGl0IGlzIGp1c3Qgc29tZSBub3JtYWwgcGFyYW1ldGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoaXMgbmFtZVxuXHRcdGNvbnN0IGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyA9XG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPiAwICYmICEoYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID09PSAxICYmIGFBY3Rpb25QYXJhbWV0ZXJzWzBdLiROYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIpO1xuXG5cdFx0Ly8gUHJvdmlkZWQgdmFsdWVzIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlcnMgZnJvbSBpbnZva2VBY3Rpb24gY2FsbFxuXHRcdGNvbnN0IGFQYXJhbWV0ZXJWYWx1ZXMgPSBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXM7XG5cblx0XHQvLyBEZXRlcm1pbmUgc3RhcnR1cCBwYXJhbWV0ZXJzIGlmIHByb3ZpZGVkXG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSBvQXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9O1xuXG5cdFx0Ly8gSW4gY2FzZSBhbiBhY3Rpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCwgYW5kIHdlIHNoYWxsIHNraXAgdGhlIGRpYWxvZywgY2hlY2sgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHBhcmFtZXRlcnNcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nICYmIGJTa2lwUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzID0gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyhcblx0XHRcdFx0YklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIGRhdGEsIGVpdGhlciBzZXQgYSBkaWFsb2cgb3IgbGVhdmUgaXQgZW1wdHkgd2hpY2hcblx0XHQvLyB3aWxsIGxlYWQgdG8gZGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYSBkaWFsb2dcblx0XHRmbkRpYWxvZyA9IG51bGw7XG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0aWYgKCEoYlNraXBQYXJhbWV0ZXJEaWFsb2cgJiYgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycykpIHtcblx0XHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0Zm5PblN1Ym1pdHRlZDogbVBhcmFtZXRlcnMub25TdWJtaXR0ZWQsXG5cdFx0XHRmbk9uUmVzcG9uc2U6IG1QYXJhbWV0ZXJzLm9uUmVzcG9uc2UsXG5cdFx0XHRhY3Rpb25OYW1lOiBzQWN0aW9uTmFtZSxcblx0XHRcdG1vZGVsOiBvTW9kZWwsXG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVyczogYUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRiR2V0Qm91bmRDb250ZXh0OiBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRzZWxlY3RlZEl0ZW1zOiBtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zXG5cdFx0fTtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRpTWVzc2FnZVNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChleHA6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIgJiYgZXhwID09PSBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRvUmV0dXJuVHlwZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGVcIik7XG5cdFx0XHRcdFx0YklzU2FtZUVudGl0eSA9XG5cdFx0XHRcdFx0XHRvUmV0dXJuVHlwZSAmJiAhb1JldHVyblR5cGUuJGlzQ29sbGVjdGlvbiAmJiBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCkuJFR5cGUgPT09IG9SZXR1cm5UeXBlLiRUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGJJc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdC5cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldE9iamVjdChgJFJldHVyblR5cGUvJFR5cGUvJHtzTWVzc2FnZXNQYXRofWApICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdC5zcGxpdChcIixcIikuaW5kZXhPZihzTWVzc2FnZXNQYXRoKSA9PT0gLTEpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdD8gYCR7bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3R9LCR7c01lc3NhZ2VzUGF0aH1gXG5cdFx0XHRcdFx0XHRcdFx0OiBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdFx0XHQvLyBBZGQgc2lkZSBlZmZlY3RzIGF0IGVudGl0eSBsZXZlbCBiZWNhdXNlICRzZWxlY3Qgc3RvcHMgdGhlc2UgYmVpbmcgcmV0dXJuZWQgYnkgdGhlIGFjdGlvblxuXHRcdFx0XHRcdFx0XHQvLyBPbmx5IGlmIG5vIG90aGVyIHNpZGUgZWZmZWN0cyB3ZXJlIGFkZGVkIGZvciBNZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5wdXNoKFwiKlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGggPT09IDAgJiYgaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2U7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuY29udHJvbElkKSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYklzQ3JlYXRlQWN0aW9uKSB7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0fVxuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSAoYWN0aW9uRGVmaW5pdGlvbi4kUGFyYW1ldGVyIHx8IFtdKS5zb21lKChhUGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCgoYWN0aW9uRGVmaW5pdGlvbi4kRW50aXR5U2V0UGF0aCAmJiBhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoID09PSBhUGFyYW1ldGVyLiROYW1lKSB8fCBhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kKSAmJlxuXHRcdFx0XHRhUGFyYW1ldGVyLiRpc0NvbGxlY3Rpb25cblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBpc1N0YXRpYztcblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9XG5cdFx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNbbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVdPy5bMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBvT3BlcmF0aW9uUmVzdWx0OiBhbnk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycz8uaW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0XHRvT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkRlbGF5TWVzc2FnZXNcIixcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik7XG5cdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ0ZhaWxzLmZvckVhY2goZnVuY3Rpb24gKGZhaWw6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUZhaWxlZENvbnRleHRzO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0ZhaWxlZE9wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpKTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bVBhcmFtZXRlcnM/Lm1lc3NhZ2VIYW5kbGVyPy5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IG51bGw7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID1cblx0XHRcdGJvdW5kQWN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKVtib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IHNDb25maXJtYXRpb25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0c3VmZml4UmVzb3VyY2VLZXlcblx0XHQpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyBmdW5jdGlvbiAoc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBUE1BY3Rpb24oXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRhQ29udGV4dHM6IGFueSxcblx0b0RpYWxvZzogYW55LFxuXHRhZnRlcjQxMjogYm9vbGVhblxuKSB7XG5cdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgb1BhcmVudENvbnRyb2wsIG1lc3NhZ2VIYW5kbGVyKTtcblx0Ly8gSWYgc29tZSBlbnRyaWVzIHdlcmUgc3VjY2Vzc2Z1bCwgYW5kIG90aGVycyBoYXZlIGZhaWxlZCwgdGhlIG92ZXJhbGwgcHJvY2VzcyBpcyBzdGlsbCBzdWNjZXNzZnVsLiBIb3dldmVyLCB0aGlzIHdhcyB0cmVhdGVkIGFzIHJlamVjdGlvblxuXHQvLyBiZWZvcmUsIGFuZCB0aGlzIGN1cnJlbnRseSBpcyBzdGlsbCBrZXB0LCBhcyBsb25nIGFzIGRpYWxvZyBoYW5kbGluZyBpcyBtaXhlZCB3aXRoIGJhY2tlbmQgcHJvY2VzcyBoYW5kbGluZy5cblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gb25seSByZWplY3QgaW4gY2FzZSBvZiBvdmVyYWxsIHByb2Nlc3MgZXJyb3IuXG5cdC8vIEZvciB0aGUgdGltZSBiZWluZzogbWFwIHRvIG9sZCBsb2dpYyB0byByZWplY3QgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IGhhcyBmYWlsZWRcblx0aWYgKGFSZXN1bHQ/LnNvbWUoKG9TaW5nbGVSZXN1bHQ6IGFueSkgPT4gb1NpbmdsZVJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikpIHtcblx0XHR0aHJvdyBhUmVzdWx0O1xuXHR9XG5cblx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRpZiAoXG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0KSB7XG5cdFx0aWYgKCFhZnRlcjQxMikge1xuXHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikuY29uY2F0KG1lc3NhZ2VzKVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKSk7XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhtUGFyYW1ldGVycywgYUNvbnRleHRzLCBvRGlhbG9nLCBhTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHQvLyBCT1VORCBUUkFOU0lUSU9OIEFTIFBBUlQgT0YgU0FQX01FU1NBR0Vcblx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG1QYXJhbWV0ZXJzPy5vRGlhbG9nLmlzT3BlbigpLFxuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKG1QYXJhbWV0ZXJzLCBhQ29udGV4dHMsIG9EaWFsb2csIGFNZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVyczogYW55LCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55LCBhY3Rpb25EZWZpbml0aW9uOiBhbnkpIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzU3RhdGljO1xuXHRcdGlmICghaXNTdGF0aWMpIHtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0bVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBvQ29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFDb250ZXh0czogYW55LFxuXHRvRGlhbG9nOiBhbnksXG5cdG1lc3NhZ2VzOiBhbnksXG5cdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiB7IHNob3dNZXNzYWdlQm94OiBib29sZWFuOyBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB9XG4pOiB7IGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDsgc2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuOyBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSB9IHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpID09PSBcIlwiO1xuXHR9KTtcblx0Y29uc3QgQVBEbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMuc29tZShmdW5jdGlvbiAoYWN0aW9uUGFyYW06IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKGFjdGlvblBhcmFtLiROYW1lKSAhPT0gLTE7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChBUERNZXNzYWdlOiBhbnkpIHtcblx0XHRBUERNZXNzYWdlLmlzQVBEVGFyZ2V0ID0gdHJ1ZTtcblx0fSk7XG5cblx0Y29uc3QgZXJyb3JUYXJnZXRzSW5BUEQgPSBBUERtZXNzYWdlcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdGlmIChvRGlhbG9nLmlzT3BlbigpICYmIGFDb250ZXh0cy5sZW5ndGggIT09IDAgJiYgIW1QYXJhbWV0ZXJzLmlzU3RhdGljKSB7XG5cdFx0aWYgKCFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0Ly9pc29sYXRlZFxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxIHx8ICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHQvLyBkb2VzIG5vdCBtYXR0ZXIgaWYgZXJyb3IgaXMgaW4gQVBEIG9yIG5vdCwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRleHRzIHNlbGVjdGVkIG9yIGlmIHRoZSBlcnJvciBpcyBub3QgdGhlIEFQRCwgd2UgY2xvc2UgaXQuXG5cdFx0XHRcdC8vIFRPRE86IERpbGFvZyBoYW5kbGluZyBzaG91bGQgbm90IGJlIHBhcnQgb2YgbWVzc2FnZSBoYW5kbGluZy4gUmVmYWN0b3IgYWNjb3JkaW5nbHkgLSBkaWFsb2cgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW5zaWRlIHRoaXMgbWV0aG9kIC0gbmVpdGhlclxuXHRcdFx0XHQvLyB0byBhc2sgd2hldGhlciBpdCdzIG9wZW4sIG5vciB0byBjbG9zZSBpdCFcblx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRtUGFyYW1ldGVycz8ub25BZnRlckFQRENsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdC8vY2hhbmdlc2V0XG5cdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRtUGFyYW1ldGVycz8ub25BZnRlckFQRENsb3NlKCk7XG5cdFx0fVxuXHRcdC8vIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NpbmcgaXQsIGlmIG5vdCBvRGlhbG9nLmlzT3BlbigpIHJldHVybnMgdHJ1ZSBiZWxvdyBhbmQgdGhhdCB3b3VsZCBjYXVzZSBpcnJlbGV2YW50IG1lc3NhZ2VzIHRvIGJlIHNob3duIG9uIFVJXG5cdFx0Ly8gYnkgdGhlIGxpbmVzIHRoYXQgZm9sbG93LlxuXHR9XG5cdGxldCBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZy5pc09wZW4oKTtcblx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0KCkgIT09IHVuZGVmaW5lZCAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQoKSAhPT0gXCJcIikge1xuXHRcdGlmICgob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkgfHwgIW9Db250cm9sKSB7XG5cdFx0XHQvLyBPUCBlZGl0IG9yIExSXG5cdFx0XHRzaG93TWVzc2FnZUJveCA9ICFlcnJvclRhcmdldHNJbkFQRDtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ29udHJvbCkge1xuXHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIWJJc0FQRE9wZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzID0gdW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChBUERtZXNzYWdlcyk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiSXNBUERPcGVuICYmIHVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gZXJyb3IgdGFyZ2V0cyBpbiBBUEQgPT4gdGhlcmUgaXMgYXRsZWFzdCBvbmUgYm91bmQgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIHVuYm91bmQgbWVzc2FnZXMsIGRpYWxvZyBtdXN0IGJlIHNob3duLlxuXHRcdFx0XHQvLyBmb3IgZHJhZnQgZW50aXR5LCB3ZSBhbHJlYWR5IGNsb3NlZCB0aGUgQVBEXG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOlxuXHRcdFx0b0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpXG5cdH07XG59XG5cbi8qXG4gKiBDdXJyZW50bHksIHRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIHRoZSBkaWFsb2cgYW5kIGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBUaGUgcHJvbWlzZSByZXR1cm5lZCBpcyBwZW5kaW5nIHdoaWxlIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXQsIGFzIHdlbGwgYXMgd2hpbGUgdGhlXG4gKiBiYWNrLWVuZCByZXF1ZXN0IGlzIHJ1bm5pbmcuIFRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdoZW4gdGhlIHVzZXIgY2FuY2VscyB0aGUgZGlhbG9nIGFuZCBhbHNvIHdoZW4gdGhlIGJhY2stZW5kIHJlcXVlc3QgZmFpbHMuXG4gKiBUT0RPOiBSZWZhY3RvcmluZzogU2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCBwcm9jZXNzaW5nLiBEaWFsb2cgaGFuZGxpbmcgc2hvdWxkIHJldHVybiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHBhcmFtZXRlcnMgdG8gYmUgcHJvdmlkZWQgdG8gYmFja2VuZC4gSWYgZGlhbG9nIGlzXG4gKiBjYW5jZWxsZWQsIHRoYXQgcHJvbWlzZSBjYW4gYmUgcmVqZWN0ZWQuIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgYmFja2VuZCBwcm9jZXNzaW5nIG5lZWQgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGNvbnRleHRzIC0gaS5lLiBpdCBzaG91bGQgZWl0aGVyIHJldHVybiBhbiBhcnJheSBvZiBQcm9taXNlcyBvclxuICogYSBQcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGF0IFByb21pc2Ugc2hvdWxkIGJlIHJlc29sdmVkIGFsc28gd2hlbiBzb21lIG9yIGV2ZW4gYWxsIGNvbnRleHRzIGZhaWxlZCBpbiBiYWNrZW5kIC0gdGhlIG92ZXJhbGwgcHJvY2VzcyBzdGlsbCB3YXNcbiAqIHN1Y2Nlc3NmdWwuXG4gKlxuICovXG5cbi8vIHRoaXMgdHlwZSBpcyBtZWFudCB0byBkZXNjcmliZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiBmb3Igb25lIEFjdGlvblBhcmFtZXRlciAoaS5lLiBpdHMgb2JqZWN0IGluIG1ldGFNb2RlbClcbnR5cGUgQWN0aW9uUGFyYW1ldGVyID0ge1xuXHQkTmFtZTogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuXHQvLyBjdXJyZW50bHkgcnVudGltZSBpbmZvcm1hdGlvbiBpcyB3cml0dGVuIGludG8gdGhlIG1ldGFtb2RlbDpcblx0Ly8gLSBpbiB0aGUgcHJlc3MgaGFuZGxlciBvZiB0aGUgYWN0aW9uIGJ1dHRvbiBvbiB0aGUgcGFyYW1ldGVyIGRpYWxvZywgdGhlIHZhbHVlIG9mIGVhY2ggcGFyYW1ldGVyIGlzIGFkZGVkXG5cdC8vIC0gaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlLCB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBjb250ZXh0IChpbiBPRGF0YU1vZGVsKSBjcmVhdGVkIGZvciB0aGUgYWN0aW9uIGV4ZWN1dGlvblxuXHQvLyB0aGlzIGlzIHF1aXRlIG9kZCwgYW5kIGl0IHdvdWxkIG1ha2UgbXVjaCBtb3JlIHNlbnNlIHRvIHRha2UgdGhlIHZhbHVlIGZyb20gYWN0aW9uUGFyYW1ldGVySW5mb3Ncblx0Ly8gLSBob3dldmVyLCBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgKG9yIHJhdGhlciB0aGUgc3Vycm91bmRpbmcgX2V4ZWN1dGVBY3Rpb24pIGlzIGFsc28gY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzXG5cdC8vID0+IGZvciB0aGUgdGltZSBiZWluZywgYWRkaW5nIHZhbHVlIGhlcmUgdG8gYXZvaWQgdHMgZXJyb3JzLCBzdWJqZWN0IHRvIHJlZmFjdG9yaW5nXG5cdC8vIGluIGNhc2Ugb2YgRmllbGQsIHRoZSB2YWx1ZSBpcyBzdHJpbmcsIGluIGNhc2Ugb2YgTXVsdGlWYWx1ZUZpZWxkLCBpdCdzIE11bHRpVmFsdWVGaWVsZEl0ZW1bXVxuXHR2YWx1ZTogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xufTtcblxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueVxuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0XHRcdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyO1xuXHRcdFx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdFx0aXNNdWx0aVZhbHVlOiBib29sZWFuO1xuXHRcdFx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG5cdFx0XHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0XHR9O1xuXHRcdGxldCBhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdOyAvLyB0byBiZSBmaWxsZWQgYWZ0ZXIgZnJhZ21lbnQgKGZvciBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZykgaXMgbG9hZGVkLiBBY3R1YWxseSBvbmx5IG5lZWRlZCBkdXJpbmcgZGlhbG9nIHByb2Nlc3NpbmcsIGkuZS4gY291bGQgYmUgbW92ZWQgaW50byB0aGUgY29udHJvbGxlciBhbmQgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIGJ1dCBvbmx5IGFmdGVyIG1vdmluZyBhbGwgaGFuZGxlcnMgKGVzcC4gcHJlc3MgaGFuZGxlciBmb3IgYWN0aW9uIGJ1dHRvbikgdG8gY29udHJvbGxlci5cblxuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Ly8gaW4gY2FzZSBvZiBtaXNzaW5nIG1hbmRhb3RvcnkgcGFyYW1ldGVyLCBtZXNzYWdlIGN1cnJlbnRseSBkaWZmZXJzIHBlciBwYXJhbWV0ZXIsIGFzIGl0IHN1cGVyZmx1b3VzbHkgY29udGFpbnMgdGhlIGxhYmVsIGFzIHBhcmFtZXRlci4gUG9zc2libGt5IHRoaXMgY291bGQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUsIGluIHRoYXQgY2FzZSwgaW50ZXJmYWNlIGNvdWxkIGJlIHNpbXBsaWZpZWQgdG8gQWN0aW9uUGFyYW1ldGVySW5mb1tdLCBzdHJpbmdcblx0XHRjb25zdCBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciA9IChtZXNzYWdlUGFyYW1ldGVyczogeyBhY3Rpb25QYXJhbWV0ZXJJbmZvOiBBY3Rpb25QYXJhbWV0ZXJJbmZvOyBtZXNzYWdlOiBzdHJpbmcgfVtdKSA9PiB7XG5cdFx0XHRtZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlcnMubWFwKChtZXNzYWdlUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSA/IFwiaXRlbXNcIiA6IFwidmFsdWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2VQYXJhbWV0ZXIubWVzc2FnZSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiRXJyb3JcIixcblx0XHRcdFx0XHRcdHByb2Nlc3NvcjogYmluZGluZz8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH07XG5cblx0XHRjb25zdCBfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciA9IChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcikgPT4ge1xuXHRcdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBtZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRjb25zdCBjb250cm9sSWQgPSBnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci4kTmFtZV0pO1xuXHRcdFx0Ly8gYWxzbyByZW1vdmUgbWVzc2FnZXMgYXNzaWduZWQgdG8gaW5uZXIgY29udHJvbHMsIGJ1dCBhdm9pZCByZW1vdmluZyBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHBhcmFtdGVycyAod2l0aCBuYW1lIGJlaW5nIHN1YnN0cmluZyBvZiBhbm90aGVyIHBhcmFtZXRlciBuYW1lKVxuXHRcdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IGFsbE1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGlkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5zcGxpdChcIi1cIikuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KTtcblx0XHRcdG1lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlbGV2YW50TWVzc2FnZXMpO1xuXHRcdH07XG5cblx0XHRjb25zdCBfdmFsaWRhdGVQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UpKTtcblx0XHRcdGNvbnN0IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maWx0ZXIoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UmVxdWlyZWQoKSk7XG5cdFx0XHQvKiBIaW50OiBUaGUgYm9vbGVhbiBmYWxzZSBpcyBhIHZhbGlkIHZhbHVlICovXG5cblx0XHRcdGNvbnN0IGVtcHR5UmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZFBhcmFtZXRlckluZm9zLmZpbHRlcigocmVxdWlyZWRQYXJhbWV0ZXJJbmZvKSA9PiB7XG5cdFx0XHRcdGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICFyZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGRWYWx1ZSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlID09PSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gbWVzc2FnZSBjb250YWlucyBsYWJlbCBwZXIgZmllbGQgZm9yIGhpc3RvcmljYWwgcmVhc29uIChvcmlnaW5hbGx5LCBpdCB3YXMgc2hvd24gaW4gYWRkaXRpb25hbCBwb3B1cCwgbm93IGl0J3MgZGlyZWN0bHkgYWRkZWQgdG8gdGhlIGZpZWxkKVxuXHRcdFx0Ly8gaWYgdGhpcyB3YXMgbm90IHRoZSBjYXNlIChhbmQgaG9wZWZ1bGx5LCBpbiBmdXR1cmUgdGhpcyBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZSksIGludGVyZmFjZSBvZiBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciBjb3VsZCBiZSBzaW1wbGlmaWVkIHRvIGp1c3QgcGFzcyBlbXB0eVJlcXVpcmVkRmllbGRzIGFuZCBhIGNvbnN0YW50IG1lc3NhZ2UgaGVyZVxuXHRcdFx0X2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUlTU0lOR19NQU5EQVRPUllfTVNHXCIsIG9SZXNvdXJjZUJ1bmRsZSwgW1xuXHRcdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UGFyZW50KCk/LmdldEFnZ3JlZ2F0aW9uKFwibGFiZWxcIikgYXMgTGFiZWwpLmdldFRleHQoKVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdH0pKVxuXHRcdFx0KTtcblxuXHRcdFx0LyogQ2hlY2sgdmFsdWUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlciAqL1xuXHRcdFx0Y29uc3QgZmlyc3RJbnZhbGlkQWN0aW9uUGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0Ly8gdW5mb3J0dW5hdGVseSwgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIgc2V0cyB2YWx1ZVN0YXRlIG9ubHkgYXN5bmNocm9uZW91c2x5LCB0aHVzIGNoZWNraW5nIGVtcHR5UmVxdWlyZWRGaWVsZHMgYWRkaXRpb25hbGx5XG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCIgfHwgZW1wdHlSZXF1aXJlZEZpZWxkcy5pbmNsdWRlcyhhY3Rpb25QYXJhbWV0ZXJJbmZvKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGZpcnN0SW52YWxpZEFjdGlvblBhcmFtZXRlcikge1xuXHRcdFx0XHRmaXJzdEludmFsaWRBY3Rpb25QYXJhbWV0ZXIuZmllbGQuZm9jdXMoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9Db250cm9sbGVyID0ge1xuXHRcdFx0aGFuZGxlQ2hhbmdlOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBFdmVudCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkXG5cdFx0XHRcdCkgYXMgQWN0aW9uUGFyYW1ldGVySW5mbztcblx0XHRcdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0Ly8gYWRhcHQgaW5mby4gUHJvbWlzZSBpcyByZXNvbHZlZCB0byB2YWx1ZSBvciByZWplY3RlZCB3aXRoIGV4Y2VwdGlvbiBjb250YWluaW5nIG1lc3NhZ2Vcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpIGFzIFByb21pc2U8c3RyaW5nPjtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlID0gYXdhaXQgYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IGFueVtdID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRcdFx0Y29uc3QgYUZ1bmN0aW9uUGFyYW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXHRcdFx0bGV0IG9PcGVyYXRpb25CaW5kaW5nOiBhbnk7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMob0FwcENvbXBvbmVudCwgYUFjdGlvblBhcmFtZXRlcnMsIG9QYXJhbWV0ZXJNb2RlbCwgdHJ1ZSk7XG5cdFx0XHRjb25zdCBvRGlhbG9nQ29udGVudCA9IChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogY3JlYXRlZEZyYWdtZW50LFxuXHRcdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlclxuXHRcdFx0fSkpIGFzIENvbnRyb2w7XG5cblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zID0gYUFjdGlvblBhcmFtZXRlcnMubWFwKChhY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBDb3JlLmJ5SWQoZ2VuZXJhdGUoW1wiQVBEX1wiLCBhY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZpZWxkLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHBhcmFtZXRlcjogYWN0aW9uUGFyYW1ldGVyLFxuXHRcdFx0XHRcdGZpZWxkOiBmaWVsZCxcblx0XHRcdFx0XHRpc011bHRpVmFsdWU6IGlzTXVsdGlWYWx1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IG9QYXJlbnRDb250cm9sLmdldENvbnRyb2xsZXIoKS5vUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRsZXQgYWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IHRydWUsIC8vIHRvIGJlIHNldCB0byBmYWxzZSBpbiBjYXNlIG9mIHN1Y2Nlc3NmdWwgYWN0aW9uIGV4ZWN0aW9uXG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb25BZnRlckFQRENsb3NlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIpO1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0YnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoYWN0aW9uUmVzdWx0LmRpYWxvZ0NhbmNlbGxlZCkge1xuXHRcdFx0XHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKGFjdGlvblJlc3VsdC5yZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRsZXQgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh1bmRlZmluZWQsIHtcblx0XHRcdFx0dGl0bGU6IHNBY3Rpb25MYWJlbCB8fCBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gZXNjYXBlIGhhbmRsZXIgaXMgbWVhbnQgdG8gcG9zc2libHkgc3VwcHJlc3Mgb3IgcG9zdHBvbmUgY2xvc2luZyB0aGUgZGlhbG9nIG9uIGVzY2FwZSAoYnkgY2FsbGluZyBcInJlamVjdFwiIG9uIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIFwicmVzb2x2ZVwiIG9ubHkgd2hlblxuXHRcdFx0XHRcdC8vIGRvbmUgd2l0aCBhbGwgdGFza3MgdG8gaGFwcGVuIGJlZm9yZSBkaWFsb2cgY2FuIGJlIGNsb3NlZCkuIEl0J3Mgbm90IGludGVuZGVkIHRvIGV4cGxpY2V0bHkgY2xvc2UgdGhlIGRpYWxvZyBoZXJlICh0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aGVuIG5vXG5cdFx0XHRcdFx0Ly8gZXNjYXBlSGFuZGxlciBpcyBwcm92aWRlZCBvciB0aGUgcmVzb2x2ZS1jYWxsYmFjayBpcyBjYWxsZWQpIG9yIGZvciBvd24gd3JhcCB1cCB0YXNrcyAobGlrZSByZW1vdmluZyB2YWxpZGl0aW9uIG1lc3NhZ2VzIC0gdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZVxuXHRcdFx0XHRcdC8vIGFmdGVyQ2xvc2UpLlxuXHRcdFx0XHRcdC8vIFRPRE86IE1vdmUgd3JhcCB1cCB0YXNrcyB0byBhZnRlckNsb3NlLCBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGNvbXBsZXRlbHkuIFRha2UgY2FyZSB0byBhbHNvIGFkYXB0IGVuZCBidXR0b24gcHJlc3MgaGFuZGxlciBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHQvLyBDdXJyZW50bHkgb25seSBzdGlsbCBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBjbG9zaW5nIGRpYWxvZyBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAodXNlcyByZXNvbHZlKSBmcm9tIHVzZXIgY2FuY2VsbGF0aW9uICh1c2luZyByZWplY3QpXG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdC8vXHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IGJJc0NyZWF0ZUFjdGlvblxuXHRcdFx0XHRcdFx0PyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OXCIsIG9SZXNvdXJjZUJ1bmRsZSlcblx0XHRcdFx0XHRcdDogX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUob1Jlc291cmNlQnVuZGxlLCBzQWN0aW9uTGFiZWwsIHNBY3Rpb25OYW1lLCBlbnRpdHlTZXROYW1lKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRcdFx0XHRcdFx0Ly8gYnV0dG9uTG9jayBpcyBzZXQgb25jZSBhbmQgcmVzZXQgaW4gY2FzZSBvZlxuXHRcdFx0XHRcdFx0XHQvLyAtIHZhbGlkYXRpb24gZXJyb3Jcblx0XHRcdFx0XHRcdFx0Ly8gLSBtZXNzYWdlIHBvcHVwXG5cdFx0XHRcdFx0XHRcdC8vIC0gZGlhbG9nIGNsb3NlIChhZnRlckNsb3NlIGhhbmRsZXIpXG5cblx0XHRcdFx0XHRcdFx0aWYgKGJ1dHRvbkxvY2sgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnV0dG9uTG9jayA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoYXdhaXQgX3ZhbGlkYXRlUHJvcGVydGllcyhvUmVzb3VyY2VCdW5kbGUpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBkdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbW92ZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gRGlhbG9nIChTaW1wbGVGb3JtKSB0byBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1ldGVyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IG9EaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpLmdldFByb3BlcnR5KGAvJHthQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZX1gKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaiBpbiBhTVZGQ29udGVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMucHVzaChhTVZGQ29udGVudFtqXS5LZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IGFLZXlWYWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBvUGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IHZQYXJhbWV0ZXJWYWx1ZTsgLy8gd3JpdGluZyB0aGUgY3VycmVudCB2YWx1ZSAodWVzZXIgaW5wdXQhKSBpbnRvIHRoZSBtZXRhbW9kZWwgPT4gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gdXNlIEFjdGlvblBhcmFtZXRlckluZm9zIGluc3RlYWQuIFVzZWQgaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmxhYmVsID0gc0FjdGlvbkxhYmVsO1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm9uQWZ0ZXJBUERDbG9zZSA9IG9uQWZ0ZXJBUERDbG9zZTtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnM/LmludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2FuY2VsbGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dDogbVBhcmFtZXRlcnMuYUNvbnRleHRzICYmIG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXSwgLy9hQ29udGV4dHMgbm90IGFsd2F5cyBkZWZpbmVkXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjazogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdoeSBpcyB0aGlzIGltcGxlbWVudGVkIGFzIGNhbGxiYWNrPyBBcHBhcmVudGx5LCBhbGwgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBiZWZvcmVoYW5kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IHJlZmFjdG9yIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0YnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBpZiB0aGUgYWN0aW9uIGZhaWxzIHdpdGggYW4gZXJyb3IgcG9wdXAgYW5kIHRoaXMgb25lIGlzIGNhbmNlbGQgKEpvdXJuZXk6IDQxMldhcm5pbmdIYW5kbGluZylcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgYmFja2VuZCB2YWxpZGF0aW9uIGVycm9yKHM/KSwgbWVzc2FnZSBzaGFsbCBub3QgYmUgc2hvd24gaW4gbWVzc2FnZSBkaWFsb2cgYnV0IG5leHQgdG8gdGhlIGZpZWxkIG9uIHBhcmFtZXRlciBkaWFsb2csIHdoaWNoIHNob3VsZFxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXkgb3BlbiBpbiB0aGlzIGNhc2UgPT4gaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG5vdCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZy5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBhbGwgb3RoZXIgY2FzZXMgKGUuZy4gb3RoZXIgYmFja2VuZCBlcnJvcnMgb3IgdXNlciBjYW5jZWxsYXRpb24pLCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBuZWVkcyB0byBiZSByZWplY3RlZCB0byBhbGxvd1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNhbGxlcnMgdG8gcmVhY3QuIChFeGFtcGxlOiBJZiBjcmVhdGlvbiBpbiBiYWNrZW5kIGFmdGVyIG5hdmlnYXRpb24gdG8gdHJhbnNpZW50IGNvbnRleHQgZmFpbHMsIGJhY2sgbmF2aWdhdGlvbiBuZWVkcyB0byBiZSB0cmlnZ2VyZWQpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gc2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCByZXF1ZXN0IGlzdGVhZCBvZiB0YWtpbmcgZGVjaXNpb24gYmFzZWQgb24gbWVzc2FnZSBoYW5kbGluZ1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJDYW5jZWxcIl0pLCB7XG5cdFx0XHRcdFx0dGV4dDogQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIiwgb1Jlc291cmNlQnVuZGxlKSxcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Ly8gVE9ETzogY2FuY2VsIGJ1dHRvbiBzaG91bGQganVzdCBjbG9zZSB0aGUgZGlhbG9nIChzaW1pbGFyIHRvIHVzaW5nIGVzY2FwZSkuIEFsbCB3cmFwIHVwIHRhc2tzIHNob3VsZCBiZSBtb3ZlZCB0byBhZnRlckNsb3NlLlxuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdC8vIFRPRE86IGJlZm9yZU9wZW4gaXMganVzdCBhbiBldmVudCwgaS5lLiBub3Qgd2FpdGluZyBmb3IgdGhlIFByb21pc2UgdG8gYmUgcmVzb2x2ZWQuIENoZWNrIGlmIHRhc2tzIG9mIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBiZSBkb25lIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2dcblx0XHRcdFx0Ly8gLSBpZiB5ZXMsIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCBvdXRzaWRlLlxuXHRcdFx0XHQvLyBBc3N1bXB0aW9uOiBTb21ldGltZXMgZGlhbG9nIGNhbiBiZSBzZWVuIHdpdGhvdXQgYW55IGZpZWxkcyBmb3IgYSBzaG9ydCB0aW1lIC0gbWF5YmUgdGhpcyBpcyBjYXVzZWQgYnkgdGhpcyBhc3luY2hyb25pdHlcblx0XHRcdFx0YmVmb3JlT3BlbjogYXN5bmMgZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgZXZlbnQgZm9yIGFjdGlvbldyYXBwZXIgYXMgb0V2ZW50Lm9Tb3VyY2UgZ2V0cyBsb3N0IGR1cmluZyBwcm9jZXNzaW5nIG9mIGJlZm9yZU9wZW4gZXZlbnQgaGFuZGxlclxuXHRcdFx0XHRcdGNvbnN0IG9DbG9uZUV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgb0V2ZW50KTtcblxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdGNvbnN0IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXRoID0gb0FjdGlvbkNvbnRleHQuc1BhdGggJiYgb0FjdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvQFwiKVswXSxcblx0XHRcdFx0XHRcdFx0c0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0XHRcdGAke3NBY3Rpb25QYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uYFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNEZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyA9IGFzeW5jIGZ1bmN0aW9uIChzQmluZGluZ1BhcmFtZXRlcj86IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0JvdW5kRnVuY3Rpb25OYW1lID0gZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVmaWxsUGFyYW1ldGVyID0gYXN5bmMgZnVuY3Rpb24gKHNQYXJhbU5hbWU6IGFueSwgdlBhcmFtRGVmYXVsdFZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxOiBUaGVyZSBpcyBhIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1EZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCAmJiB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1WYWx1ZSA9IGF3YWl0IENvbW1vblV0aWxzLnJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1WYWx1ZSA9IGF3YWl0IG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UGFyYW1ldGVyQ29udGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXRoRm9yQ29udGV4dCA9IHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1BhdGhGb3JDb250ZXh0LmluZGV4T2YoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2ApID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzUGF0aEZvckNvbnRleHQgPSBzUGF0aEZvckNvbnRleHQucmVwbGFjZShgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzW2ldLmdldFByb3BlcnR5KHNQYXRoRm9yQ29udGV4dCkgIT09IHZQYXJhbVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yk5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1WYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsIHNQYXJhbU5hbWUsIG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJMYXRlUHJvcGVydHlFcnJvcjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtRGVmYXVsdFZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJNb2RlbCAmJiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDI6IFRoZXJlIGlzIG5vIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uICg9PiBsb29rIGludG8gdGhlIEZMUCBVc2VyIERlZmF1bHRzKVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCksIHNQYXJhbU5hbWUpICsgXCJAXCIsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyRGVmYXVsdFZhbHVlID1cblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyAmJiBvUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFyYW1ldGVyRGVmYXVsdFZhbHVlXCJdOyAvLyBlaXRoZXIgeyAkUGF0aDogJ3NvbWVQYXRoJyB9IG9yICdzb21lU3RyaW5nJ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGxldCBzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShzUGFyYW1OYW1lKTtcblx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5wdXNoKHByZWZpbGxQYXJhbWV0ZXIoc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiBzQm91bmRGdW5jdGlvbk5hbWUubGVuZ3RoID4gMCAmJiB0eXBlb2Ygc0JvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZ1bmN0aW9uUGFyYW1zLnB1c2goY2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFQcmVmaWxsUGFyYW1Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRcdFx0bGV0IGFFeGVjRnVuY3Rpb25Qcm9taXNlczogUHJvbWlzZTxhbnlbXT4gPSBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdFx0XHRcdFx0bGV0IG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlO1xuXHRcdFx0XHRcdFx0aWYgKGFGdW5jdGlvblBhcmFtcyAmJiBhRnVuY3Rpb25QYXJhbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhRnVuY3Rpb25QYXJhbXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTW9kdWxlID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHQuc3Vic3RyaW5nKDAsIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZSA9IEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKG9DbG9uZUV2ZW50LCBzTW9kdWxlLCBzRnVuY3Rpb25OYW1lLCB7XG5cdFx0XHRcdFx0XHRcdFx0XCJjb250ZXh0c1wiOiBhQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0XHRcdFx0XHRhUHJlZmlsbFBhcmFtUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWU6IGFueSA9IGFQcm9taXNlc1swXTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25QYXJhbXMgPSBhUHJvbWlzZXNbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCA9IGFQcm9taXNlc1syXTtcblx0XHRcdFx0XHRcdFx0bGV0IHNEaWFsb2dQYXJhbU5hbWU6IHN0cmluZztcblxuXHRcdFx0XHRcdFx0XHQvLyBGaWxsIHRoZSBkaWFsb2cgd2l0aCB0aGUgZWFybGllciBkZXRlcm1pbmVkIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZGlmZmVyZW50IHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c0RpYWxvZ1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdC8vIFBhcmFtZXRlciB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIGNhbGwgb2YgaW52b2tlQWN0aW9uIG92ZXJydWxlIG90aGVyIHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCAmJiBvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QuaGFzT3duUHJvcGVydHkoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdFtzRGlhbG9nUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXSAmJiBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFkIG5vdCBiZWVuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkdWUgdG8gZGlmZmVyZW50IGNvbnRleHRzLCB3ZSBkbyBub3RoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiAhY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLmJOb1Bvc3NpYmxlVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlIChqIDwgYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vcGFyYW0gdmFsdWVzIGFyZSBhbGwgdGhlIHNhbWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmdW5jdGlvblBhcmFtc1swXSAmJiBmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9Pbmx5IG9uZSBjb250ZXh0LCB0aGVuIHRoZSBkZWZhdWx0IHBhcmFtIHZhbHVlcyBhcmUgdG8gYmUgdmVyaWZpZWQgZnJvbSB0aGUgZnVuY3Rpb246XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBiRXJyb3JGb3VuZCA9IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBJZiBhdCBsZWFzdCBvbmUgRGVmYXVsdCBQcm9wZXJ0eSBpcyBhIExhdGUgUHJvcGVydHkgYW5kIGFuIGVUYWcgZXJyb3Igd2FzIHJhaXNlZC5cblx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX0xBVEVfUFJPUEVSVFlcIiwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc1RleHQsIHsgY29udGVudFdpZHRoOiBcIjI1ZW1cIiB9IGFzIGFueSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5Bc3luY0JlZm9yZU9wZW4gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAob0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzQmluZGluZ1BhcmFtZXRlciA9IGFQYXJhbWV0ZXJzWzBdICYmIGFQYXJhbWV0ZXJzWzBdLiROYW1lO1xuXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3QgPSBhd2FpdCBhQ29udGV4dHNbMF0ucmVxdWVzdE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dE9iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHNCaW5kaW5nUGFyYW1ldGVyLCBvQ29udGV4dE9iamVjdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKHNCaW5kaW5nUGFyYW1ldGVyKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBwYXJhbWV0ZXJcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0YXdhaXQgZm5Bc3luY0JlZm9yZU9wZW4oKTtcblxuXHRcdFx0XHRcdC8vIGFkZGluZyBkZWZhdWx0ZWQgdmFsdWVzIG9ubHkgaGVyZSBhZnRlciB0aGV5IGFyZSBub3Qgc2V0IHRvIHRoZSBmaWVsZHNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlckluZm8gb2YgYWN0aW9uUGFyYW1ldGVySW5mb3MpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWVcblx0XHRcdFx0XHRcdFx0PyAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBNdWx0aVZhbHVlRmllbGQpLmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdFx0OiAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogb25BZnRlckFQRENsb3NlXG5cdFx0XHR9KTtcblx0XHRcdG1QYXJhbWV0ZXJzLm9EaWFsb2cgPSBvRGlhbG9nO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0XHRjb25zdCBvTVZGTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob01WRk1vZGVsLCBcIm12ZnZpZXdcIik7XG5cblx0XHRcdC8qIEV2ZW50IG5lZWRlZCBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgb2YgdmFsaWQgY2hhbmdlZCBmaWVsZCAqL1xuXHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdGlmIChhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwiaXRlbXNcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbz8uZmllbGQ/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc0FjdGlvblBhdGggPSBgJHtzQWN0aW9uTmFtZX0oLi4uKWA7XG5cdFx0XHRpZiAoIWFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0c0FjdGlvblBhdGggPSBgLyR7c0FjdGlvblBhdGh9YDtcblx0XHRcdH1cblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBzQWN0aW9uUGF0aFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBwYXJlbnQgY29udHJvbCBzcGVjaWZpZWQgYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50XG5cdFx0XHRcdG9QYXJlbnRDb250cm9sLmFkZERlcGVuZGVudChvRGlhbG9nKTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGFDb250ZXh0c1swXSk7IC8vIHVzZSBjb250ZXh0IG9mIGZpcnN0IHNlbGVjdGVkIGxpbmUgaXRlbVxuXHRcdFx0fVxuXHRcdFx0b09wZXJhdGlvbkJpbmRpbmcgPSBvRGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55LCBjb250ZXh0cz86IGFueSwgb0JvdW5kQWN0aW9uPzogYW55KSB7XG5cdGNvbnN0IHZBY3Rpb25Dcml0aWNhbCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRsZXQgc0NyaXRpY2FsUGF0aCA9IHZBY3Rpb25Dcml0aWNhbCAmJiB2QWN0aW9uQ3JpdGljYWwuJFBhdGg7XG5cdGlmICghc0NyaXRpY2FsUGF0aCkge1xuXHRcdC8vIHRoZSBzdGF0aWMgdmFsdWUgc2NlbmFyaW8gZm9yIGlzQWN0aW9uQ3JpdGljYWxcblx0XHRyZXR1cm4gISF2QWN0aW9uQ3JpdGljYWw7XG5cdH1cblx0Y29uc3QgYUJpbmRpbmdQYXJhbXMgPSBvQm91bmRBY3Rpb24gJiYgb0JvdW5kQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIiksXG5cdFx0YVBhdGhzID0gc0NyaXRpY2FsUGF0aCAmJiBzQ3JpdGljYWxQYXRoLnNwbGl0KFwiL1wiKSxcblx0XHRiQ29uZGl0aW9uID1cblx0XHRcdGFCaW5kaW5nUGFyYW1zICYmIGFCaW5kaW5nUGFyYW1zLmxlbmd0aCAmJiB0eXBlb2YgYUJpbmRpbmdQYXJhbXMgPT09IFwib2JqZWN0XCIgJiYgc0NyaXRpY2FsUGF0aCAmJiBjb250ZXh0cyAmJiBjb250ZXh0cy5sZW5ndGg7XG5cdGlmIChiQ29uZGl0aW9uKSB7XG5cdFx0Ly9pbiBjYXNlIGJpbmRpbmcgcGF0YW1ldGVycyBhcmUgdGhlcmUgaW4gcGF0aCBuZWVkIHRvIHJlbW92ZSBlZzogLSBfaXQvaXNWZXJpZmllZCA9PiBuZWVkIHRvIHJlbW92ZSBfaXQgYW5kIHRoZSBwYXRoIHNob3VsZCBiZSBpc1ZlcmlmaWVkXG5cdFx0YUJpbmRpbmdQYXJhbXMuZmlsdGVyKGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBzQWN0aW9uTGFiZWw6IHN0cmluZywgc0FjdGlvbk5hbWU6IHN0cmluZywgc0VudGl0eVNldE5hbWU6IHN0cmluZykge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBhbnkgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGFBY3Rpb25OYW1lW2FBY3Rpb25OYW1lLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBzRW50aXR5U2V0TmFtZSA/IGAke3NFbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0Y29uc3Qgc0tleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID1cblx0XHRvUmVzb3VyY2VCdW5kbGUgJiYgQ29tbW9uVXRpbHMuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcywgYCR7c0tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKTtcblx0aWYgKHNBY3Rpb25MYWJlbCkge1xuXHRcdGlmIChiUmVzb3VyY2VLZXlFeGlzdHMpIHtcblx0XHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlICYmXG5cdFx0XHRDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fXwke3NFbnRpdHlTZXROYW1lfWApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlLCBudWxsLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKG9SZXNvdXJjZUJ1bmRsZSAmJiBDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNBY3Rpb25MYWJlbDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0c0dyb3VwSWQ6IHN0cmluZyxcblx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRpQ29udGV4dExlbmd0aDogbnVtYmVyIHwgbnVsbCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyIHwgdW5kZWZpbmVkLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlXG4pIHtcblx0aWYgKG1QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0bGV0IHN0cmljdEhhbmRsaW5nRmFpbHM6IGFueTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcHJvY2Vzc2VkTWVzc2FnZUlkcyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiKTtcblx0XHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IGlzRHVwbGljYXRlID0gcHJvY2Vzc2VkTWVzc2FnZUlkcy5maW5kKGZ1bmN0aW9uIChpZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCkgPT09IGlkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWlzRHVwbGljYXRlKSB7XG5cdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmdldElkKCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpLmNvbmNhdChtZXNzYWdlKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdFx0fSk7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJwcm9jZXNzZWRNZXNzYWdlSWRzXCIsIHByb2Nlc3NlZE1lc3NhZ2VJZHMpO1xuXHRcdGlmICh0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5wdXNoKHtcblx0XHRcdFx0XHRvQWN0aW9uOiBvQWN0aW9uLFxuXHRcdFx0XHRcdGdyb3VwSWQ6IHNHcm91cElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIiwgc3RyaWN0SGFuZGxpbmdGYWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKFxuXHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCA9PT0gaUNvbnRleHRMZW5ndGggJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIik/Lmxlbmd0aFxuXHQpIHtcblx0XHRvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRvQWN0aW9uOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGJHZXRCb3VuZENvbnRleHQ6IGJvb2xlYW4sXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbFxuKSB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZSxcblx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSB0cnVlO1xuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdCAgfSlcblx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQ6IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgb1BhcmVudENvbnRyb2w/OiBhbnksIG1lc3NhZ2VIYW5kbGVyPzogTWVzc2FnZUhhbmRsZXIpIHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSAmJiBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gVE9ETzogcmVmYWN0b3IgdG8gZGlyZWN0IHVzZSBvZiBQcm9taXNlLmFsbFNldHRsZWRcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYkdldEJvdW5kQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQ7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIW1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ1Byb21pc2VzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCI0MTJNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhQWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQob3BlcmF0aW9ucywgb0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCk7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlU2luZ2xlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgYUxvY2FsUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGFMb2NhbFByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoY29udGV4dHNUb0V4ZWN1dGU6IENvbnRleHRbXSkge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dDogYW55LCBhY3Rpb25JbmRleDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IENvbnRleHQsIGlkOiBpbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRmbkV4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA8PSAxID8gbnVsbCA6IGksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZuSGFuZGxlUmVzdWx0cygpIHtcblx0XHRcdFx0Ly8gUHJvbWlzZS5hbGxTZXR0bGVkIHdpbGwgbmV2ZXIgYmUgcmVqZWN0ZWQuIEhvd2V2ZXIsIGVzbGludCByZXF1aXJlcyBlaXRoZXIgY2F0Y2ggb3IgcmV0dXJuIC0gdGh1cyB3ZSByZXR1cm4gdGhlIHJlc3VsdGluZyBQcm9taXNlIGFsdGhvdWdoIG5vIG9uZSB3aWxsIHVzZSBpdC5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChhQWN0aW9uUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHR9XG5cdFx0fSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IG9BY3Rpb25Qcm9taXNlID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2UuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogYW55LCBzQWN0aW9uTmFtZTogYW55KSB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogYW55XG4pOiBib29sZWFuIHtcblx0aWYgKHBhcmFtZXRlclZhbHVlcykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsLCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdmFsdWVzIGhhdmUgYmVlblxuXHRcdC8vIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFjdGlvblBhcmFtZXRlci4kTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQ6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgc0dyb3VwSWQ6IGFueSwgYUxvY2FsUHJvbWlzZT86IGFueSkge1xuXHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IG9Mb2NhbFByb21pc2U7XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdH1cblx0XHRvTG9jYWxQcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvblxuXHQvLyBBY3Rpb25QYXJhbWV0ZXJJbmZvOiBBY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHQvLyAgX3ZhbGlkYXRlUHJvcGVydGllcywgX3ZhbGlkYXRlUHJvcGVydGllc1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb3BlcmF0aW9ucztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFHTywwQkFBMEJGLElBQUksRUFBRUssU0FBUyxFQUFFO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBT0UsU0FBUyxDQUFDLElBQUksRUFBRUYsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFRCxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUU7SUFDQSxPQUFPRCxTQUFTLENBQUMsS0FBSyxFQUFFSCxNQUFNLENBQUM7RUFDaEM7RUFBQyxJQWhIY0ssZ0JBQWdCLGFBQzlC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
|
|
@@ -840,12 +840,16 @@ function showActionParameterDialog(
|
|
|
840
840
|
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
841
841
|
aActionParameters.forEach(_removeMessagesForActionParamter);
|
|
842
842
|
oDialog.destroy();
|
|
843
|
+
buttonLock = false;
|
|
843
844
|
if (actionResult.dialogCancelled) {
|
|
844
845
|
reject(Constants.CancelActionDialog);
|
|
845
846
|
} else {
|
|
846
847
|
resolve(actionResult.result);
|
|
847
848
|
}
|
|
848
849
|
};
|
|
850
|
+
|
|
851
|
+
let buttonLock = false;
|
|
852
|
+
|
|
849
853
|
const oDialog = new Dialog(undefined, {
|
|
850
854
|
title: sActionLabel || CommonUtils.getTranslatedText("C_OPERATIONS_ACTION_PARAMETER_DIALOG_TITLE", oResourceBundle),
|
|
851
855
|
content: [oDialogContent],
|
|
@@ -866,7 +870,19 @@ function showActionParameterDialog(
|
|
|
866
870
|
type: "Emphasized",
|
|
867
871
|
press: async function () {
|
|
868
872
|
try {
|
|
873
|
+
// prevent multiple press events. The BusyLocker is not fast enough. (BCP: 2370130210)
|
|
874
|
+
// buttonLock is set once and reset in case of
|
|
875
|
+
// - validation error
|
|
876
|
+
// - message popup
|
|
877
|
+
// - dialog close (afterClose handler)
|
|
878
|
+
|
|
879
|
+
if (buttonLock === true) {
|
|
880
|
+
return;
|
|
881
|
+
}
|
|
882
|
+
buttonLock = true;
|
|
883
|
+
|
|
869
884
|
if (!(await _validateProperties(oResourceBundle))) {
|
|
885
|
+
buttonLock = false;
|
|
870
886
|
return;
|
|
871
887
|
}
|
|
872
888
|
|
|
@@ -983,8 +999,9 @@ function showActionParameterDialog(
|
|
|
983
999
|
}
|
|
984
1000
|
} catch (oError: any) {
|
|
985
1001
|
let showMessageDialog = true;
|
|
1002
|
+
|
|
986
1003
|
await messageHandler.showMessages({
|
|
987
|
-
context: mParameters.aContexts[0],
|
|
1004
|
+
context: mParameters.aContexts && mParameters.aContexts[0], //aContexts not always defined
|
|
988
1005
|
isActionParameterDialogOpen: oDialog.isOpen(),
|
|
989
1006
|
messagePageNavigationCallback: function () {
|
|
990
1007
|
oDialog.close();
|
|
@@ -1004,6 +1021,8 @@ function showActionParameterDialog(
|
|
|
1004
1021
|
}
|
|
1005
1022
|
});
|
|
1006
1023
|
|
|
1024
|
+
buttonLock = false; //needed if the action fails with an error popup and this one is canceld (Journey: 412WarningHandling)
|
|
1025
|
+
|
|
1007
1026
|
// In case of backend validation error(s?), message shall not be shown in message dialog but next to the field on parameter dialog, which should
|
|
1008
1027
|
// stay open in this case => in this case, we must not resolve or reject the promise controlling the parameter dialog.
|
|
1009
1028
|
// In all other cases (e.g. other backend errors or user cancellation), the promise controlling the parameter dialog needs to be rejected to allow
|
|
@@ -68,7 +68,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
|
|
|
68
68
|
controls: [],
|
|
69
69
|
elements: [],
|
|
70
70
|
// eslint-disable-next-line no-template-curly-in-string
|
|
71
|
-
version: "1.108.
|
|
71
|
+
version: "1.108.19",
|
|
72
72
|
noLibraryCSS: true,
|
|
73
73
|
extensions: {
|
|
74
74
|
//Configuration used for rule loading of Support Assistant
|
|
@@ -55,9 +55,9 @@ C_TRANSACTION_HELPER_DRAFT_DISCARD_MESSAGE=Odbaciti sve promjene?
|
|
|
55
55
|
|
|
56
56
|
C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON=Odbaci
|
|
57
57
|
|
|
58
|
-
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=
|
|
58
|
+
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=U\u010Dinili ste promjene na ovom objektu. \n\u0160to \u017Eelite u\u010Diniti?
|
|
59
59
|
|
|
60
|
-
ST_DRAFT_DATALOSS_POPUP_MESSAGE_CREATE=
|
|
60
|
+
ST_DRAFT_DATALOSS_POPUP_MESSAGE_CREATE=Jo\u0161 niste kreirali ovaj objekt.\n\u0160to \u017Eelite u\u010Diniti?
|
|
61
61
|
|
|
62
62
|
ST_DRAFT_DATALOSS_SAVE_DRAFT_RBL=Snimi
|
|
63
63
|
|
|
@@ -79,7 +79,7 @@ WARNING=Upozorenje
|
|
|
79
79
|
|
|
80
80
|
PROCEED=Ipak nastaviti?
|
|
81
81
|
|
|
82
|
-
C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER=Trenutno
|
|
82
|
+
C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER=Trenutno nije mogu\u0107e urediti ovaj objekt. \nZaklju\u010Dao ga je korisnik {0}.
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
C_COLLABORATIONDRAFT_INVITATION_DIALOG=Pozovi korisnike u
|
|
@@ -333,7 +333,7 @@ C_MASS_EDIT_SAVE_BUTTON_TEXT=Snimi
|
|
|
333
333
|
|
|
334
334
|
C_MASS_EDIT_APPLY_BUTTON_TEXT=Primijeni
|
|
335
335
|
|
|
336
|
-
C_MASS_EDIT_CONFIRM_MESSAGE={0} od {1} {3}
|
|
336
|
+
C_MASS_EDIT_CONFIRM_MESSAGE={0} od {1} {3} nije mogu\u0107e urediti. \n\u017Delite li urediti preostalih {2} {3}?
|
|
337
337
|
|
|
338
338
|
C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER=Mogu\u0107i uzroci
|
|
339
339
|
|