@sapui5/sap.fe.macros 1.120.9 → 1.120.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -1
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/messagebundle_ar.properties +2 -0
- package/src/sap/fe/macros/messagebundle_bg.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ca.properties +2 -0
- package/src/sap/fe/macros/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/macros/messagebundle_cs.properties +2 -0
- package/src/sap/fe/macros/messagebundle_cy.properties +2 -0
- package/src/sap/fe/macros/messagebundle_da.properties +2 -0
- package/src/sap/fe/macros/messagebundle_de.properties +2 -0
- package/src/sap/fe/macros/messagebundle_el.properties +2 -0
- package/src/sap/fe/macros/messagebundle_en.properties +0 -120
- package/src/sap/fe/macros/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/macros/messagebundle_es.properties +2 -0
- package/src/sap/fe/macros/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/macros/messagebundle_et.properties +2 -0
- package/src/sap/fe/macros/messagebundle_fi.properties +2 -0
- package/src/sap/fe/macros/messagebundle_fr.properties +2 -0
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +2 -0
- package/src/sap/fe/macros/messagebundle_hi.properties +2 -0
- package/src/sap/fe/macros/messagebundle_hr.properties +2 -0
- package/src/sap/fe/macros/messagebundle_hu.properties +2 -0
- package/src/sap/fe/macros/messagebundle_id.properties +2 -0
- package/src/sap/fe/macros/messagebundle_it.properties +2 -0
- package/src/sap/fe/macros/messagebundle_iw.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ja.properties +2 -0
- package/src/sap/fe/macros/messagebundle_kk.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -0
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -0
- package/src/sap/fe/macros/messagebundle_lv.properties +2 -0
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ms.properties +2 -0
- package/src/sap/fe/macros/messagebundle_nl.properties +2 -0
- package/src/sap/fe/macros/messagebundle_no.properties +2 -0
- package/src/sap/fe/macros/messagebundle_pl.properties +2 -0
- package/src/sap/fe/macros/messagebundle_pt.properties +2 -0
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ro.properties +2 -0
- package/src/sap/fe/macros/messagebundle_ru.properties +2 -0
- package/src/sap/fe/macros/messagebundle_sh.properties +32 -30
- package/src/sap/fe/macros/messagebundle_sk.properties +2 -0
- package/src/sap/fe/macros/messagebundle_sl.properties +2 -0
- package/src/sap/fe/macros/messagebundle_sr.properties +2 -0
- package/src/sap/fe/macros/messagebundle_sv.properties +2 -0
- package/src/sap/fe/macros/messagebundle_th.properties +2 -0
- package/src/sap/fe/macros/messagebundle_tr.properties +2 -0
- package/src/sap/fe/macros/messagebundle_uk.properties +2 -0
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -0
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +2 -0
package/package.json
CHANGED
|
@@ -204,7 +204,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
204
204
|
sPropertyPath = propertyContext.getPath(),
|
|
205
205
|
sPropertyLocationPath = CommonHelper.getLocationForPropertyPath(oModel, sPropertyPath),
|
|
206
206
|
oFilterRestrictions = CommonUtils.getFilterRestrictionsByPath(sPropertyLocationPath, oModel);
|
|
207
|
-
if ((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date") && bSemanticDateRange && oFilterRestrictions && oFilterRestrictions.FilterAllowedExpressions && oFilterRestrictions.FilterAllowedExpressions[sProperty] && (oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleRange") || oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleValue")) || sPropertyType === "Edm.Boolean" && !bHasValueListWithFixedValues) {
|
|
207
|
+
if ((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date" || sPropertyType === "Edm.TimeOfDay") && bSemanticDateRange && oFilterRestrictions && oFilterRestrictions.FilterAllowedExpressions && oFilterRestrictions.FilterAllowedExpressions[sProperty] && (oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleRange") || oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleValue")) || sPropertyType === "Edm.Boolean" && !bHasValueListWithFixedValues) {
|
|
208
208
|
return undefined;
|
|
209
209
|
}
|
|
210
210
|
return FieldHelper.getIDForFieldValueHelp(null, sVhIdPrefix || "FilterFieldValueHelp", sPropertyName, sValueHelpPropertyName);
|
|
@@ -870,4 +870,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
870
870
|
FieldHelper.getActionParameterVisibility.requiresIContext = true;
|
|
871
871
|
return FieldHelper;
|
|
872
872
|
}, false);
|
|
873
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJU09DdXJyZW5jeSIsIlVuaXQiLCJGaWVsZEhlbHBlciIsImlzTm90QWx3YXlzSGlkZGVuIiwib0RhdGFGaWVsZCIsIm9EZXRhaWxzIiwib0NvbnRleHQiLCJjb250ZXh0IiwiaXNBbHdheXNIaWRkZW4iLCJWYWx1ZSIsIiRQYXRoIiwiZ2V0T2JqZWN0IiwiaXNSZXF1aXJlZCIsIm9GaWVsZENvbnRyb2wiLCJzRWRpdE1vZGUiLCJNYW5hZ2VkT2JqZWN0IiwiYmluZGluZ1BhcnNlciIsImdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkiLCJvUGFyYW0iLCIkSWYiLCJsZW5ndGgiLCJvTmVnUGFyYW0iLCJBbm5vdGF0aW9uSGVscGVyIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eU5hbWUiLCJ2UHJvcGVydHkiLCJvSW50ZXJmYWNlIiwic1Byb3BlcnR5TmFtZSIsImdldFBhdGgiLCJpbmRleE9mIiwiJFByb3BlcnR5UGF0aCIsInNQYXRoIiwic0NvbnRleHRQYXRoIiwiZmllbGRDb250cm9sIiwic1Byb3BlcnR5UGF0aCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib0ZpZWxkQ29udHJvbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCIkRW51bU1lbWJlciIsInZhbHVlSGVscFByb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsImJJbkZpbHRlckZpZWxkIiwib0NvbnRlbnQiLCJzQW5ub1BhdGgiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uIiwic1VuaXRPckN1cnJlbmN5UGF0aCIsInZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQiLCJnZXRJREZvckZpZWxkVmFsdWVIZWxwIiwic0ZsZXhJZCIsInNJZFByZWZpeCIsInNPcmlnaW5hbFByb3BlcnR5TmFtZSIsInNQcm9wZXJ0eSIsImdlbmVyYXRlIiwiZ2V0VmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsInByb3BlcnR5Q29udGV4dCIsIm9Qcm9wZXJ0eSIsInNQcm9wZXJ0eVR5cGUiLCJzVmhJZFByZWZpeCIsInNWYWx1ZUhlbHBQcm9wZXJ0eU5hbWUiLCJiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlNlbWFudGljRGF0ZVJhbmdlIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiQ29tbW9uSGVscGVyIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJpbmNsdWRlcyIsImNvbXB1dGVGaWVsZEJhc2VEZWxlZ2F0ZSIsImRlbGVnYXRlTmFtZSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZSIsInBheWxvYWQiLCJfZ2V0UHJpbWFyeUludGVudHMiLCJhU2VtYW50aWNPYmplY3RzTGlzdCIsImFQcm9taXNlcyIsIm9Vc2hlbGxDb250YWluZXIiLCJzYXAiLCJ1c2hlbGwiLCJDb250YWluZXIiLCJvU2VydmljZSIsImdldFNlcnZpY2UiLCJmb3JFYWNoIiwic2VtT2JqZWN0IiwicHVzaCIsImdldFByaW1hcnlJbnRlbnQiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsImFTZW1PYmplY3RQcmltYXJ5QWN0aW9uIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsIl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbiIsIm9TZW1hbnRpY3MiLCJhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnMiLCJhcHBDb21wb25lbnQiLCJfZm5Jc1NlbWFudGljT2JqZWN0QWN0aW9uVW5hdmFpbGFibGUiLCJfb1NlbWFudGljcyIsIl9vUHJpbWFyeUFjdGlvbiIsIl9pbmRleCIsInVuYXZhaWxhYmxlQWN0aW9uc0luZGV4Iiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhY3Rpb25zIiwiaW50ZW50Iiwic3BsaXQiLCJzZW1hbnRpY1ByaW1hcnlBY3Rpb25zIiwib1ByaW1hcnlBY3Rpb24iLCJzZW1hbnRpY09iamVjdHMiLCJtYWluU2VtYW50aWNPYmplY3QiLCJzQ3VycmVudEhhc2giLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0SGFzaCIsImluZGV4Iiwic2VtYW50aWNPYmplY3QiLCJjaGVja1ByaW1hcnlBY3Rpb25zIiwiYkdldFRpdGxlTGluayIsInRpdGxlTGluayIsImhhc1RpdGxlTGluayIsIl9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVycyIsIl9vU2VtYW50aWNPYmplY3RNb2RlbCIsIl9saW5rSW50ZW50IiwidGl0bGVsaW5rIiwiZ2V0UHJpbWFyeUFjdGlvbiIsInByaW1hcnlJbnRlbnRBY3Rpb24iLCJvcGVyYXRvcnMiLCJzU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsInByb3BlcnR5VHlwZSIsIiRUeXBlIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5Iiwic2xpY2UiLCJpc1RhYmxlQm91bmRUb05hdmlnYXRpb24iLCJsYXN0SW5kZXhPZiIsImlzTmF2aWdhdGlvblBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsInN1YnN0ciIsInByb3BlcnR5UGF0aCIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5IiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwidG9TdHJpbmciLCJnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkiLCJnZXREYXRhRmllbGREZWZhdWx0Iiwib0RhdGFGaWVsZENvbnRleHQiLCJvRGF0YUZpZWxkRGVmYXVsdCIsImlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZSIsIm9UaGlzIiwiYklzQm91bmQiLCJvQWN0aW9uQ29udGV4dCIsImdldFByZXNzRXZlbnRGb3JEYXRhRmllbGRBY3Rpb25CdXR0b24iLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiYklzTmF2aWdhYmxlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImVudGl0aWVzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0TmFtZSIsIm9QYXJhbXMiLCJjb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsImFkZFNpbmdsZVF1b3RlcyIsIm1vZGVsIiwibGFiZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIkFjdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiaXNOdW1lcmljRGF0YVR5cGUiLCJzRGF0YUZpZWxkVHlwZSIsIl9zRGF0YUZpZWxkVHlwZSIsImFOdW1lcmljRGF0YVR5cGVzIiwiaXNEYXRlT3JUaW1lRGF0YVR5cGUiLCJhRGF0ZVRpbWVEYXRhVHlwZXMiLCJpc0RhdGVUaW1lRGF0YVR5cGUiLCJhRGF0ZURhdGFUeXBlcyIsImlzRGF0ZURhdGFUeXBlIiwiaXNUaW1lRGF0YVR5cGUiLCJnZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24iLCJvQW5ub3RhdGlvbnMiLCJzVHlwZSIsInNUZXh0QW5ub3RhdGlvbiIsInNUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwib1RhYmxlIiwic0VudGl0eVBhdGgiLCJjb2xsZWN0aW9uIiwiSW5saW5lIiwiSWNvblVybCIsImFTZW1hbnRpY0tleXMiLCJiSXNTZW1hbnRpY0tleSIsImV2ZXJ5Iiwib0tleSIsImdldERhdGFGaWVsZEFsaWdubWVudCIsImdldFByb3BlcnR5QWxpZ25tZW50Iiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29tcHV0ZWRFZGl0TW9kZSIsInNEZWZhdWx0QWxpZ25tZW50Iiwic1RleHRBbGlnbm1lbnQiLCJ0ZXh0QWxpZ25Nb2RlIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNEYXRhRmllbGRQYXRoIiwiVGFyZ2V0IiwiJEFubm90YXRpb25QYXRoIiwib0ZpZWxkR3JvdXAiLCJpIiwiRGF0YSIsImtleXMiLCJpc0RhdGFGaWVsZEFjdGlvbkJ1dHRvbkVuYWJsZWQiLCJzQWN0aW9uQ29udGV4dEZvcm1hdCIsImNvbXB1dGVMYWJlbFRleHQiLCJlbmRzV2l0aCIsInNEYXRhRmllbGRMYWJlbCIsInNEYXRhRmllbGRUYXJnZXRUaXRsZSIsInNEYXRhRmllbGRUYXJnZXRMYWJlbCIsInNEYXRhRmllbGRWYWx1ZUxhYmVsIiwic0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWwiLCJidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zIiwic1Zpc3VhbGl6YXRpb24iLCJmaWVsZFZpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicHJvZ3Jlc3NWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJyYXRpbmdWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIm9yIiwiZXF1YWwiLCJVSSIsIklzRWRpdGFibGUiLCJoYXNWYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0Iiwib0Fubm90YXRpb24iLCIkTmFtZSIsIm9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9WYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lIiwib1ZhbHVlTGlzdCIsIm9WYWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiZmluZCIsIm9QYXJhbWV0ZXIiLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5Iiwic1ZhbHVlTGlzdFByb3BlcnR5TmFtZSIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIkNvbGxlY3Rpb25QYXRoIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIiRtb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIm9BY3Rpb25QYXJhbWV0ZXIiLCJzU2FwVUlOYW1lIiwic1BhcmFtTmFtZSIsImdldFZhbHVlSGVscERlbGVnYXRlIiwiaXNCb3VuZCIsImVudGl0eVR5cGVQYXRoIiwic2FwVUlOYW1lIiwicGFyYW1OYW1lIiwiZGVsZWdhdGVDb25maWd1cmF0aW9uIiwiVmFsdWVMaXN0SGVscGVyIiwiZ2V0UHJvcGVydHlQYXRoIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiUHJvcGVydHkiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJnZXRWYWx1ZUhlbHBEZWxlZ2F0ZUZvck5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkIiwiX2dldEVudGl0eVNldEZyb21NdWx0aUxldmVsIiwic1NvdXJjZUVudGl0eSIsImlTdGFydCIsImlEaWZmIiwiYU5hdlBhcnRzIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNQYXJ0IiwiZ2V0QmluZGluZ0luZm9Gb3JUZXh0QXJyYW5nZW1lbnQiLCJvRGF0YUZpZWxkVGV4dEFycmFuZ2VtZW50IiwiZ2V0UGF0aEZvckljb25Tb3VyY2UiLCJnZXRGaWxlbmFtZUV4cHIiLCJzRmlsZW5hbWUiLCJzTm9GaWxlbmFtZVRleHQiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwiaUJ5dGUiLCJ0b0ZpeGVkIiwiZ2V0RG93bmxvYWRVcmwiLCJnZXRNYXJnaW5DbGFzcyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImdldFJlcXVpcmVkIiwiaW1tdXRhYmxlS2V5IiwidGFyZ2V0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwidGFyZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJpc0ZpZWxkUGFydE9mRm9ybSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiY29ubmVjdGVkRGF0YUZpZWxkS2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiaXNGaWVsZEZvdW5kIiwiZmllbGQiLCJrZXkiLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGlmRWxzZSwgb3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlcXVpcmVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVIZWxwUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBWYWx1ZUxpc3RIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBJU09DdXJyZW5jeSA9IFwiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5JU09DdXJyZW5jeVwiLFxuXHRVbml0ID0gXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIjtcblxuY29uc3QgRmllbGRIZWxwZXIgPSB7XG5cdGlzTm90QWx3YXlzSGlkZGVuOiBmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55LCBvRGV0YWlsczogYW55KSB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIEhlYWRlckRhdGFQb2ludFRpdGxlLmZyYWdtZW50XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvRGV0YWlscy5jb250ZXh0O1xuXHRcdGxldCBpc0Fsd2F5c0hpZGRlbjogYW55ID0gZmFsc2U7XG5cdFx0aWYgKG9EYXRhRmllbGQuVmFsdWUgJiYgb0RhdGFGaWVsZC5WYWx1ZS4kUGF0aCkge1xuXHRcdFx0aXNBbHdheXNIaWRkZW4gPSBvQ29udGV4dC5nZXRPYmplY3QoXCJWYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIik7XG5cdFx0fVxuXHRcdGlmICghaXNBbHdheXNIaWRkZW4gfHwgaXNBbHdheXNIaWRkZW4uJFBhdGgpIHtcblx0XHRcdGlzQWx3YXlzSGlkZGVuID0gb0NvbnRleHQuZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKTtcblx0XHRcdGlmICghaXNBbHdheXNIaWRkZW4gfHwgaXNBbHdheXNIaWRkZW4uJFBhdGgpIHtcblx0XHRcdFx0aXNBbHdheXNIaWRkZW4gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0Fsd2F5c0hpZGRlbjtcblx0fSxcblx0aXNSZXF1aXJlZDogZnVuY3Rpb24gKG9GaWVsZENvbnRyb2w6IGFueSwgc0VkaXRNb2RlOiBhbnkpIHtcblx0XHQvLyB0aGlzIGlzIHVzZWQgaW4gYWN0aW9uUGFyYW1ldGVyRGlhbG9nLmZyYWdtZW50XG5cdFx0aWYgKHNFZGl0TW9kZSA9PT0gXCJEaXNwbGF5XCIgfHwgc0VkaXRNb2RlID09PSBcIlJlYWRPbmx5XCIgfHwgc0VkaXRNb2RlID09PSBcIkRpc2FibGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRcdGlmICgoTWFuYWdlZE9iamVjdCBhcyBhbnkpLmJpbmRpbmdQYXJzZXIob0ZpZWxkQ29udHJvbCkpIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gJVwiICsgb0ZpZWxkQ29udHJvbCArIFwiID09PSA3fVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG9GaWVsZENvbnRyb2wgPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9NYW5kYXRvcnlcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdGdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHk6IGZ1bmN0aW9uIChvUGFyYW06IGFueSwgb0NvbnRleHQ6IGFueSkge1xuXHRcdC8vIFRvIHVzZSB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZm9yIGNvbnRyb2xsaW5nIHZpc2liaWxpdHkgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIG5lZ2F0ZWRcblx0XHRpZiAodHlwZW9mIG9QYXJhbSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKG9QYXJhbSAmJiBvUGFyYW0uJElmICYmIG9QYXJhbS4kSWYubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIFVJLkhpZGRlbiBjb250YWlucyBhIGR5bmFtaWMgZXhwcmVzc2lvbiB3ZSBkbyB0aGlzXG5cdFx0XHRcdC8vIGJ5IGp1c3Qgc3dpdGNoaW5nIHRoZSBcInRoZW5cIiBhbmQgXCJlbHNlXCIgcGFydCBvZiB0aGUgZXJwcmVzc2lvblxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzBdIDw9PSBDb25kaXRpb24gcGFydFxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzFdIDw9PSBUaGVuIHBhcnRcblx0XHRcdFx0Ly8gb1BhcmFtLiRJZlsyXSA8PT0gRWxzZSBwYXJ0XG5cdFx0XHRcdGNvbnN0IG9OZWdQYXJhbTogYW55ID0geyAkSWY6IFtdIH07XG5cdFx0XHRcdG9OZWdQYXJhbS4kSWZbMF0gPSBvUGFyYW0uJElmWzBdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzFdID0gb1BhcmFtLiRJZlsyXTtcblx0XHRcdFx0b05lZ1BhcmFtLiRJZlsyXSA9IG9QYXJhbS4kSWZbMV07XG5cdFx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLnZhbHVlKG9OZWdQYXJhbSwgb0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gISV7XCIgKyBvUGFyYW0uJFBhdGggKyBcIn0gfVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG9QYXJhbSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLnZhbHVlKCFvUGFyYW0sIG9Db250ZXh0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbXB1dGVkIGFubm90YXRpb24gdGhhdCByZXR1cm5zIHZQcm9wZXJ0eSBmb3IgYSBzdHJpbmcgYW5kIEBzYXB1aS5uYW1lIGZvciBhbiBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB2UHJvcGVydHkgVGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IG5hbWVcblx0ICovXG5cdHByb3BlcnR5TmFtZTogZnVuY3Rpb24gKHZQcm9wZXJ0eTogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAodHlwZW9mIHZQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkuaW5kZXhPZihcIiRQYXRoXCIpID4gLTEgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKS5pbmRleE9mKFwiJFByb3BlcnR5UGF0aFwiKSA+IC0xKSB7XG5cdFx0XHRcdC8vIFdlIGNvdWxkIGVuZCB1cCB3aXRoIGEgcHVyZSBzdHJpbmcgcHJvcGVydHkgKG5vICRQYXRoKSwgYW5kIHRoaXMgaXMgbm90IGEgcmVhbCBwcm9wZXJ0eSBpbiB0aGF0IGNhc2Vcblx0XHRcdFx0c1Byb3BlcnR5TmFtZSA9IHZQcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHZQcm9wZXJ0eS4kUGF0aCB8fCB2UHJvcGVydHkuJFByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSB2UHJvcGVydHkuJFBhdGggPyBcIi8kUGF0aFwiIDogXCIvJFByb3BlcnR5UGF0aFwiO1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aCArIHNQYXRofS8kQHNhcHVpLm5hbWVgKTtcblx0XHR9IGVsc2UgaWYgKHZQcm9wZXJ0eS5WYWx1ZSAmJiB2UHJvcGVydHkuVmFsdWUuJFBhdGgpIHtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSB2UHJvcGVydHkuVmFsdWUuJFBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQcm9wZXJ0eU5hbWU7XG5cdH0sXG5cblx0ZmllbGRDb250cm9sOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHQvLyBlZGl0YWJsZSBoZWFkZXIgZmFjZXRcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2xDb250ZXh0ID0gb01vZGVsICYmIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbGApO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBvRmllbGRDb250cm9sQ29udGV4dCAmJiBvRmllbGRDb250cm9sQ29udGV4dC5nZXRQcm9wZXJ0eSgpO1xuXHRcdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAob0ZpZWxkQ29udHJvbC5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBvRmllbGRDb250cm9sLiRFbnVtTWVtYmVyO1xuXHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIudmFsdWUob0ZpZWxkQ29udHJvbCwgeyBjb250ZXh0OiBvRmllbGRDb250cm9sQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgZnJvbSBhIERhdGFGaWVsZCBvciBhIFByb3BlcnR5UGF0aCAoaW4gY2FzZSBhIFNlbGVjdGlvbkZpZWxkIGlzIHVzZWQpXG5cdCAqIFByaW9yaXR5IGZyb20gd2hlcmUgdG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZmllbGQgKGV4YW1wbGVzIGFyZSBcIk5hbWVcIiBhbmQgXCJTdXBwbGllclwiKTpcblx0ICogMS4gSWYgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSBoYXMga2V5ICckUGF0aCcsIHRoZW4gd2UgdGFrZSB0aGUgdmFsdWUgYXQgJyRQYXRoJy5cblx0ICogMi4gRWxzZSwgdmFsdWUgYXQgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKS5cblx0ICogSWYgdGhlcmUgaXMgYW4gSVNPQ3VycmVuY3kgb3IgaWYgdGhlcmUgYXJlIFVuaXQgYW5ub3RhdGlvbnMgZm9yIHRoZSBmaWVsZCBwcm9wZXJ0eSxcblx0ICogdGhlbiB0aGUgUGF0aCBhdCB0aGUgSVNPQ3VycmVuY3kgb3IgVW5pdCBhbm5vdGF0aW9ucyBvZiB0aGUgZmllbGQgcHJvcGVydHkgaXMgY29uc2lkZXJlZC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRIZWxwZXIuanNcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHQgVGhlIGNvbnRleHQgZnJvbSB3aGljaCB2YWx1ZSBoZWxwIHByb3BlcnR5IG5lZWQgdG8gYmUgZXh0cmFjdGVkLlxuXHQgKiBAcGFyYW0gYkluRmlsdGVyRmllbGQgV2hldGhlciBvciBub3Qgd2UncmUgaW4gdGhlIGZpbHRlciBmaWVsZCBhbmQgc2hvdWxkIGlnbm9yZVxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZD86IGJvb2xlYW4pIHtcblx0XHQvKiBGb3IgY3VycmVuY3kgKGFuZCBsYXRlciBVbml0KSB3ZSBuZWVkIHRvIGZvcndhcmQgdGhlIHZhbHVlIGhlbHAgdG8gdGhlIGFubm90YXRlZCBmaWVsZCAqL1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9Db250ZW50ID0gb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSB8fCB7fTtcblx0XHRsZXQgc1BhdGggPSBvQ29udGVudC4kUGF0aCA/IGAke3NDb250ZXh0UGF0aH0vJFBhdGhgIDogc0NvbnRleHRQYXRoO1xuXHRcdGNvbnN0IHNBbm5vUGF0aCA9IGAke3NQYXRofUBgO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3Qoc0Fubm9QYXRoKTtcblx0XHRsZXQgc0Fubm90YXRpb247XG5cdFx0aWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRzQW5ub3RhdGlvbiA9XG5cdFx0XHRcdChvUHJvcGVydHlBbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShJU09DdXJyZW5jeSkgJiYgSVNPQ3VycmVuY3kpIHx8IChvUHJvcGVydHlBbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShVbml0KSAmJiBVbml0KTtcblx0XHRcdGlmIChzQW5ub3RhdGlvbiAmJiAhYkluRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgc1VuaXRPckN1cnJlbmN5UGF0aCA9IGAke3NQYXRoICsgc0Fubm90YXRpb259LyRQYXRoYDtcblx0XHRcdFx0Ly8gd2UgY2hlY2sgdGhhdCB0aGUgY3VycmVuY3kgb3IgdW5pdCBpcyBhIFByb3BlcnR5IGFuZCBub3QgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0XHRpZiAob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3Qoc1VuaXRPckN1cnJlbmN5UGF0aCkpIHtcblx0XHRcdFx0XHRzUGF0aCA9IHNVbml0T3JDdXJyZW5jeVBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZWRpY2F0ZWQgbWV0aG9kIHRvIGF2b2lkIGxvb2tpbmcgZm9yIHVuaXQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgcGF0aFxuXHQgKi9cblx0dmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZDogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBJRCBmb3IgVmFsdWUgSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldElERm9yRmllbGRWYWx1ZUhlbHBcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRIZWxwZXIuanNcblx0ICogQHBhcmFtIHNGbGV4SWQgRmxleCBJRCBvZiB0aGUgY3VycmVudCBvYmplY3Rcblx0ICogQHBhcmFtIHNJZFByZWZpeCBQcmVmaXggZm9yIHRoZSBWYWx1ZUhlbHAgSURcblx0ICogQHBhcmFtIHNPcmlnaW5hbFByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBWYWx1ZUhlbHAgUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIElEIGdlbmVyYXRlZCBmb3IgdGhlIFZhbHVlSGVscFxuXHQgKi9cblx0Z2V0SURGb3JGaWVsZFZhbHVlSGVscDogZnVuY3Rpb24gKHNGbGV4SWQ6IHN0cmluZyB8IG51bGwsIHNJZFByZWZpeDogc3RyaW5nLCBzT3JpZ2luYWxQcm9wZXJ0eU5hbWU6IHN0cmluZywgc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKHNGbGV4SWQpIHtcblx0XHRcdHJldHVybiBzRmxleElkO1xuXHRcdH1cblx0XHRsZXQgc1Byb3BlcnR5ID0gc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoc09yaWdpbmFsUHJvcGVydHlOYW1lICE9PSBzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzUHJvcGVydHkgPSBgJHtzT3JpZ2luYWxQcm9wZXJ0eU5hbWV9Ojoke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGdlbmVyYXRlKFtzSWRQcmVmaXgsIHNQcm9wZXJ0eV0pO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlSGVscCBwcm9wZXJ0eSBvZiB0aGUgRmlsdGVyRmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkSGVscGVyLmpzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUNvbnRleHQgUHJvcGVydHkgY29udGV4dCBmb3IgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIG9iamVjdCBvZiB0aGUgVmFsdWVIZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzUHJvcGVydHlUeXBlIFRoZSAkVHlwZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNWaElkUHJlZml4IFRoZSBJRCBwcmVmaXggb2YgdGhlIHZhbHVlIGhlbHBcblx0ICogQHBhcmFtIHNQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVmFsdWVIZWxwUHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSBiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIGxpc3Qgd2l0aCBhIGZpeGVkIHZhbHVlIGFubm90YXRpb25cblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBgdHJ1ZWAgaWYgdGhlIHNlbWFudGljIGRhdGUgcmFuZ2UgaXMgc2V0IHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGhlbHAgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGhlbHBcblx0ICovXG5cdGdldFZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LFxuXHRcdG9Qcm9wZXJ0eTogYW55LFxuXHRcdHNQcm9wZXJ0eVR5cGU6IHN0cmluZyxcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRzVmFsdWVIZWxwUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0Ykhhc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbixcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW4gfCBzdHJpbmdcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBGaWVsZEhlbHBlci5wcm9wZXJ0eU5hbWUob1Byb3BlcnR5LCB7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9KSxcblx0XHRcdGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHByb3BlcnR5Q29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5Q29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBvTW9kZWwpO1xuXHRcdGlmIChcblx0XHRcdCgoc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fCBzUHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlXCIpICYmXG5cdFx0XHRcdGJTZW1hbnRpY0RhdGVSYW5nZSAmJlxuXHRcdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0gJiZcblx0XHRcdFx0KG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0uaW5jbHVkZXMoXCJTaW5nbGVSYW5nZVwiKSB8fFxuXHRcdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0uaW5jbHVkZXMoXCJTaW5nbGVWYWx1ZVwiKSkpIHx8XG5cdFx0XHQoc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiICYmICFiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIEZpZWxkSGVscGVyLmdldElERm9yRmllbGRWYWx1ZUhlbHAobnVsbCwgc1ZoSWRQcmVmaXggfHwgXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiLCBzUHJvcGVydHlOYW1lLCBzVmFsdWVIZWxwUHJvcGVydHlOYW1lKTtcblx0fSxcblxuXHQvKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgZGVsZWdhdGUgd2l0aCBwYXlsb2FkXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge29iamVjdH0gZGVsZWdhdGVOYW1lIC0gbmFtZSBvZiB0aGUgZGVsZWdhdGUgbWV0aG9kZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgLSBhZGRlZCB0byB0aGUgcGF5bG9hZCBvZiB0aGUgZGVsZWdhdGUgbWV0aG9kZVxuXHQgKiBAcmV0dXJuIHtvYmplY3R9IC0gcmV0dXJucyB0aGUgZGVsZWdhdGUgd2l0aCBwYXlsb2FkXG5cdCAqL1xuXHRjb21wdXRlRmllbGRCYXNlRGVsZWdhdGU6IGZ1bmN0aW9uIChkZWxlZ2F0ZU5hbWU6IHN0cmluZywgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogYm9vbGVhbikge1xuXHRcdGlmIChyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRuYW1lOiBkZWxlZ2F0ZU5hbWUsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYHtuYW1lOiAnJHtkZWxlZ2F0ZU5hbWV9J31gO1xuXHR9LFxuXHRfZ2V0UHJpbWFyeUludGVudHM6IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RzTGlzdDogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XG5cdFx0Y29uc3QgYVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdGlmIChhU2VtYW50aWNPYmplY3RzTGlzdCkge1xuXHRcdFx0Y29uc3Qgb1VzaGVsbENvbnRhaW5lciA9IHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXI7XG5cdFx0XHRjb25zdCBvU2VydmljZSA9IG9Vc2hlbGxDb250YWluZXIgJiYgb1VzaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlKFwiQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIik7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzZW1PYmplY3QpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzZW1PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChvU2VydmljZS5nZXRQcmltYXJ5SW50ZW50KHNlbU9iamVjdCwge30pKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVNlbU9iamVjdFByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIGFTZW1PYmplY3RQcmltYXJ5QWN0aW9uO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByaW1hcnkgaW50ZW50c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9KTtcblx0fSxcblx0X2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAoXG5cdFx0b1NlbWFudGljczogYW55LFxuXHRcdGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9uczogYW55LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZSA9IGZ1bmN0aW9uIChfb1NlbWFudGljczogYW55LCBfb1ByaW1hcnlBY3Rpb246IGFueSwgX2luZGV4OiBzdHJpbmcpIHtcblx0XHRcdGZvciAoY29uc3QgdW5hdmFpbGFibGVBY3Rpb25zSW5kZXggaW4gX29TZW1hbnRpY3Muc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX2luZGV4XS5hY3Rpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRfb1ByaW1hcnlBY3Rpb24uaW50ZW50XG5cdFx0XHRcdFx0XHQuc3BsaXQoXCItXCIpWzFdXG5cdFx0XHRcdFx0XHQuaW5kZXhPZihfb1NlbWFudGljcy5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfaW5kZXhdLmFjdGlvbnNbdW5hdmFpbGFibGVBY3Rpb25zSW5kZXhdKSA9PT0gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cblx0XHRvU2VtYW50aWNzLnNlbWFudGljUHJpbWFyeUFjdGlvbnMgPSBhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnM7XG5cdFx0Y29uc3Qgb1ByaW1hcnlBY3Rpb24gPVxuXHRcdFx0b1NlbWFudGljcy5zZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRvU2VtYW50aWNzLnNlbWFudGljUHJpbWFyeUFjdGlvbnNbb1NlbWFudGljcy5zZW1hbnRpY09iamVjdHMuaW5kZXhPZihvU2VtYW50aWNzLm1haW5TZW1hbnRpY09iamVjdCldO1xuXHRcdGNvbnN0IHNDdXJyZW50SGFzaCA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuZ2V0SGFzaCgpO1xuXHRcdGlmIChvU2VtYW50aWNzLm1haW5TZW1hbnRpY09iamVjdCAmJiAhIW9QcmltYXJ5QWN0aW9uICYmIG9QcmltYXJ5QWN0aW9uLmludGVudCAhPT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIG9TZW1hbnRpY3Muc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpIHtcblx0XHRcdFx0aWYgKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0LmluZGV4T2Yob1NlbWFudGljcy5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tpbmRleF0uc2VtYW50aWNPYmplY3QpID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZShvU2VtYW50aWNzLCBvUHJpbWFyeUFjdGlvbiwgaW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0Y2hlY2tQcmltYXJ5QWN0aW9uczogZnVuY3Rpb24gKG9TZW1hbnRpY3M6IGFueSwgYkdldFRpdGxlTGluazogYm9vbGVhbiwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UHJpbWFyeUludGVudHMob1NlbWFudGljcyAmJiBvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cylcblx0XHRcdC50aGVuKChhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnM6IGFueVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBiR2V0VGl0bGVMaW5rXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHRpdGxlTGluazogYVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRoYXNUaXRsZUxpbms6IHRoaXMuX2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY3MsXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRwYXlsb2FkOiBvU2VtYW50aWNzXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB0aGlzLl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbihvU2VtYW50aWNzLCBhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnMsIGFwcENvbXBvbmVudCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gY2hlY2tQcmltYXJ5QWN0aW9uc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0sXG5cdF9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVyczogZnVuY3Rpb24gKF9vU2VtYW50aWNPYmplY3RNb2RlbDogYW55LCBfbGlua0ludGVudDogc3RyaW5nKSB7XG5cdFx0aWYgKF9vU2VtYW50aWNPYmplY3RNb2RlbCAmJiBfb1NlbWFudGljT2JqZWN0TW9kZWwudGl0bGVsaW5rKSB7XG5cdFx0XHRyZXR1cm4gX29TZW1hbnRpY09iamVjdE1vZGVsLnRpdGxlbGluaztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIF9saW5rSW50ZW50O1xuXHRcdH1cblx0fSxcblxuXHRnZXRQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAob1NlbWFudGljczogYW55KSB7XG5cdFx0cmV0dXJuIG9TZW1hbnRpY3Muc2VtYW50aWNQcmltYXJ5QWN0aW9uc1tvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0KV0uaW50ZW50XG5cdFx0XHQ/IEZpZWxkSGVscGVyLl9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvU2VtYW50aWNzLFxuXHRcdFx0XHRcdG9TZW1hbnRpY3Muc2VtYW50aWNQcmltYXJ5QWN0aW9uc1tvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0KV0uaW50ZW50XG5cdFx0XHQgIClcblx0XHRcdDogb1NlbWFudGljcy5wcmltYXJ5SW50ZW50QWN0aW9uO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZldGNoIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zLiBGaWx0ZXIgcmVzdHJpY3Rpb25zIGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdCAqIERlcGVuZGluZyBvbiB0aGUgcGF0aCB0byB3aGljaCB0aGUgY29udHJvbCBpcyBib3VuZCwgd2UgY2hlY2sgZm9yIGZpbHRlciByZXN0cmljdGlvbnMgb24gdGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgY29udHJvbCxcblx0ICogb3Igb24gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgKGlmIHRoZXJlIGlzIGEgbmF2aWdhdGlvbikuXG5cdCAqIEVnLiBJZiB0aGUgdGFibGUgaXMgYm91bmQgdG8gJy9FbnRpdHlTZXQnLCBmb3IgcHJvcGVydHkgcGF0aCAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24vUHJvcGVydHlOYW1lJywgdGhlIGZpbHRlciByZXN0cmljdGlvbnNcblx0ICogb24gJy9FbnRpdHlTZXQnIHdpbiBvdmVyIGZpbHRlciByZXN0cmljdGlvbnMgb24gJy9FbnRpdHlTZXQvX0Fzc29jaWF0aW9uJy5cblx0ICogSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicsIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicgd2luIG92ZXIgZmlsdGVyXG5cdCAqIHJldHJpY3Rpb25zIG9uICcvQXNzb2NpYXRpb25FbnRpdHlTZXQnLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgUHJvcGVydHkgQ29udGV4dFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5IFByb3BlcnR5IG9iamVjdCBpbiB0aGUgbWV0YWRhdGFcblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIFN1Z2dlc3RzIGlmIHNlbWFudGljIGRhdGUgcmFuZ2Ugc2hvdWxkIGJlIHVzZWRcblx0ICogQHBhcmFtIHNTZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBQYXRoIHRvIHdoaWNoIHRoZSBwYXJlbnQgY29udHJvbCAodGhlIHRhYmxlIG9yIHRoZSBmaWx0ZXIgYmFyKSBpcyBib3VuZFxuXHQgKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRvcnMgZm9yIGZpbHRlcmluZ1xuXHQgKi9cblx0b3BlcmF0b3JzOiBmdW5jdGlvbiAob0NvbnRleHQ6IEJhc2VDb250ZXh0LCBvUHJvcGVydHk6IGFueSwgYlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuLCBzU2V0dGluZ3M6IHN0cmluZywgY29udGV4dFBhdGg6IHN0cmluZykge1xuXHRcdC8vIHRoaXMgaXMgdXNlZCBpbiBGaWx0ZXJGaWVsZC5ibG9ja1xuXHRcdGlmICghb1Byb3BlcnR5IHx8ICFjb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9wZXJhdG9yczogc3RyaW5nW107XG5cdFx0Y29uc3Qgc1Byb3BlcnR5ID0gRmllbGRIZWxwZXIucHJvcGVydHlOYW1lKG9Qcm9wZXJ0eSwgeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0cHJvcGVydHlUeXBlID0gb1Byb3BlcnR5LiRUeXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uR3VpZFwiKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlICcvJ1xuXHRcdGNvbnRleHRQYXRoID0gY29udGV4dFBhdGguc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IGlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbjogYm9vbGVhbiA9IGNvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IDA7XG5cdFx0Y29uc3QgaXNOYXZpZ2F0aW9uUGF0aDogYm9vbGVhbiA9XG5cdFx0XHQoaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uICYmIGNvbnRleHRQYXRoICE9PSBzUHJvcGVydHlMb2NhdGlvblBhdGgpIHx8XG5cdFx0XHQoIWlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gMCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGg6IHN0cmluZyA9XG5cdFx0XHQoaXNOYXZpZ2F0aW9uUGF0aCAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGguc3Vic3RyKHNQcm9wZXJ0eUxvY2F0aW9uUGF0aC5pbmRleE9mKGNvbnRleHRQYXRoKSArIGNvbnRleHRQYXRoLmxlbmd0aCArIDEpKSB8fCBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gKGlzTmF2aWdhdGlvblBhdGggJiYgbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eSkgfHwgc1Byb3BlcnR5O1xuXG5cdFx0aWYgKCFpc1RhYmxlQm91bmRUb05hdmlnYXRpb24pIHtcblx0XHRcdGlmICghaXNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdFx0XHQvLyAvU2FsZXNPcmRlck1hbmFnZS9JRFxuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoLFxuXHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hbmdlL19JdGVtL01hdGVyaWFsXG5cdFx0XHRcdC8vbGV0IG9wZXJhdG9yc1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaXNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hZ2UvX0l0ZW0vTWF0ZXJpYWxcblx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRpZiAob3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChjb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0b3JzPy5sZW5ndGggPiAwID8gb3BlcmF0b3JzLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19Bc3NvY2lhdGlvbi9Qcm9wZXJ0eU5hbWVcblx0XHRcdC8vIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlc1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGNvbnRleHRQYXRoKSxcblx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoKCFvcGVyYXRvcnMgfHwgb3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkgJiYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8IHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikpIHtcblx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9ycy50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBEYUZpZWxkRGVmYXVsdCAoaWYgYW55KS4gT3RoZXJ3aXNlLCB0aGUgRGF0YUZpZWxkIHBhdGggaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udGV4dCBDb250ZXh0IG9mIHRoZSBEYXRhRmllbGRcblx0ICogQHJldHVybnMgT2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFGaWVsZERlZmF1bHQ6IGZ1bmN0aW9uIChvRGF0YUZpZWxkQ29udGV4dDogYW55KSB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIGNvbHVtbi5mcmFnbWVudFxuXHRcdGNvbnN0IG9EYXRhRmllbGREZWZhdWx0ID0gb0RhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuZ2V0T2JqZWN0KGAke29EYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdHJldHVybiBvRGF0YUZpZWxkRGVmYXVsdFxuXHRcdFx0PyBgJHtvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgXG5cdFx0XHQ6IG9EYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKTtcblx0fSxcblx0Lypcblx0ICogTWV0aG9kIHRvIGdldCB2aXNpYmxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEFjdGlvbkJ1dHRvblxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvVGhpcyAtIEN1cnJlbnQgT2JqZWN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YUZpZWxkIC0gRGF0YVBvaW50J3MgVmFsdWVcblx0ICogQHBhcmFtIHtib29sZWFufSBiSXNCb3VuZCAtIERhdGFQb2ludCBhY3Rpb24gYm91bmRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BY3Rpb25Db250ZXh0IC0gQWN0aW9uQ29udGV4dCBWYWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufSAtIHJldHVybnMgYm9vbGVhblxuXHQgKi9cblx0aXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlOiBmdW5jdGlvbiAob1RoaXM6IGFueSwgb0RhdGFGaWVsZDogYW55LCBiSXNCb3VuZDogYW55LCBvQWN0aW9uQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSB0cnVlICYmIChiSXNCb3VuZCAhPT0gdHJ1ZSB8fCBvQWN0aW9uQ29udGV4dCAhPT0gZmFsc2UpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCBwcmVzcyBldmVudCBmb3IgRGF0YUZpZWxkQWN0aW9uQnV0dG9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEFjdGlvbkJ1dHRvblxuXHQgKiBAcGFyYW0gb1RoaXMgQ3VycmVudCBPYmplY3Rcblx0ICogQHBhcmFtIG9EYXRhRmllbGQgRGF0YVBvaW50J3MgVmFsdWVcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERhdGFGaWVsZEFjdGlvbkJ1dHRvbiBwcmVzcyBldmVudFxuXHQgKi9cblx0Z2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogZnVuY3Rpb24gKG9UaGlzOiBhbnksIG9EYXRhRmllbGQ6IGFueSkge1xuXHRcdGxldCBzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJJc29sYXRlZFwiO1xuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZy4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHQpIHtcblx0XHRcdHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIkNoYW5nZVNldFwiO1xuXHRcdH1cblx0XHRsZXQgYklzTmF2aWdhYmxlID0gb1RoaXMubmF2aWdhdGVBZnRlckFjdGlvbjtcblx0XHRiSXNOYXZpZ2FibGUgPSBiSXNOYXZpZ2FibGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdGNvbnN0IGVudGl0aWVzOiBBcnJheTxzdHJpbmc+ID0gb1RoaXM/LmVudGl0eVNldD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRjb250ZXh0czogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXBpbmcpLFxuXHRcdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRcdGxhYmVsOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpLFxuXHRcdFx0aXNOYXZpZ2FibGU6IGJJc05hdmlnYWJsZSxcblx0XHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZW50aXR5U2V0TmFtZSlcblx0XHR9O1xuXG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0XCIuZWRpdEZsb3cuaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKVxuXHRcdCk7XG5cdH0sXG5cblx0aXNOdW1lcmljRGF0YVR5cGU6IGZ1bmN0aW9uIChzRGF0YUZpZWxkVHlwZTogYW55KSB7XG5cdFx0Y29uc3QgX3NEYXRhRmllbGRUeXBlID0gc0RhdGFGaWVsZFR5cGU7XG5cdFx0aWYgKF9zRGF0YUZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhTnVtZXJpY0RhdGFUeXBlcyA9IFtcblx0XHRcdFx0XCJFZG0uSW50MTZcIixcblx0XHRcdFx0XCJFZG0uSW50MzJcIixcblx0XHRcdFx0XCJFZG0uSW50NjRcIixcblx0XHRcdFx0XCJFZG0uQnl0ZVwiLFxuXHRcdFx0XHRcIkVkbS5TQnl0ZVwiLFxuXHRcdFx0XHRcIkVkbS5TaW5nbGVcIixcblx0XHRcdFx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcdFx0XHRcIkVkbS5Eb3VibGVcIlxuXHRcdFx0XTtcblx0XHRcdHJldHVybiAhYU51bWVyaWNEYXRhVHlwZXMuaW5jbHVkZXMoX3NEYXRhRmllbGRUeXBlKSA/IGZhbHNlIDogdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHRpc0RhdGVPclRpbWVEYXRhVHlwZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVR5cGU6IGFueSkge1xuXHRcdGlmIChzUHJvcGVydHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFEYXRlVGltZURhdGFUeXBlcyA9IFtcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5EYXRlVGltZVwiLCBcIkVkbS5EYXRlXCIsIFwiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCJdO1xuXHRcdFx0cmV0dXJuIGFEYXRlVGltZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNEYXRlVGltZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogYW55KSB7XG5cdFx0aWYgKHNQcm9wZXJ0eVR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYURhdGVEYXRhVHlwZXMgPSBbXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiwgXCJFZG0uRGF0ZVRpbWVcIl07XG5cdFx0XHRyZXR1cm4gYURhdGVEYXRhVHlwZXMuaW5jbHVkZXMoc1Byb3BlcnR5VHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdGlzRGF0ZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogYW55KSB7XG5cdFx0cmV0dXJuIHNQcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIjtcblx0fSxcblx0aXNUaW1lRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBhbnkpIHtcblx0XHRpZiAoc1Byb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhRGF0ZURhdGFUeXBlcyA9IFtcIkVkbS5UaW1lT2ZEYXlcIiwgXCJFZG0uVGltZVwiXTtcblx0XHRcdHJldHVybiBhRGF0ZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVG8gZGlzcGxheSBhIHRleHQgYXJyYW5nZW1lbnQgc2hvd2luZyB0ZXh0IGFuZCBpZCwgd2UgbmVlZCBhIHN0cmluZyBmaWVsZCBvbiB0aGUgVUkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQW5ub3RhdGlvbnMgQWxsIHRoZSBhbm5vdGF0aW9ucyBvZiBhIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVHlwZSBUaGUgcHJvcGVydHkgZGF0YSB0eXBlXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIHRvIGJlIHVzZWQgb24gdGhlIFVJIGZvciB0aGUgYWxpZ25tZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb246IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSwgc1R5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IHNUZXh0QW5ub3RhdGlvbiA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCIsXG5cdFx0XHRzVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiO1xuXG5cdFx0Lypcblx0XHQgIEluIGNhc2Ugb2YgVGV4dFNlcGFyYXRlLCB0aGUgcmV0dXJuZWQgaXMgdXNlZCBmb3IgdGhlIGZpbGVkIGl0c2VsZiBvbmx5IHNob3dpbmdcblx0XHQgICB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIHByb3BlcnR5LCB0aHVzIGFsc28gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IG5lZWRzIHRvIGJlIHVzZWQuXG5cdFx0ICBJbiBjYXNlIG9mIFRleHRPbmx5LCB3ZSBjb25zaWRlciBpdCB0byBiZSBFZG0uU3RyaW5nIGFjY29yZGluZyB0byB0aGUgZGVmaW5pdGlvblxuXHRcdCAgIGluIHRoZSB2b2NhYnVsYXJ5LCBldmVuIGlmIGl0J3Mgbm90LlxuXHRcdCAgSW4gb3RoZXIgY2FzZXMsIHdlIHJldHVybiBFZG0uU3RyaW5nLCBhcyB0aGUgdmFsdWUgaXMgYnVpbGQgdXNpbmcgYSB0ZXh0IHRlbXBsYXRlLlxuXHRcdCAqL1xuXHRcdHJldHVybiBvQW5ub3RhdGlvbnM/LltzVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbl0/LiRFbnVtTWVtYmVyICE9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIgJiZcblx0XHRcdG9Bbm5vdGF0aW9ucz8uW3NUZXh0QW5ub3RhdGlvbl0/LiRQYXRoXG5cdFx0XHQ/IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHQ6IHNUeXBlO1xuXHR9LFxuXG5cdGdldENvbHVtbkFsaWdubWVudDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgb1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9UYWJsZS5jb2xsZWN0aW9uLnNQYXRoLFxuXHRcdFx0b01vZGVsID0gb1RhYmxlLmNvbGxlY3Rpb24ub01vZGVsO1xuXHRcdGlmIChcblx0XHRcdChvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZFtcIiRUeXBlXCJdID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdG9EYXRhRmllbGQuSWNvblVybFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIFwiQ2VudGVyXCI7XG5cdFx0fVxuXHRcdC8vIENvbHVtbnMgY29udGFpbmluZyBhIFNlbWFudGljIEtleSBtdXN0IGJlIEJlZ2luIGFsaWduZWRcblx0XHRjb25zdCBhU2VtYW50aWNLZXlzID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWApO1xuXHRcdGlmIChvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBvRGF0YUZpZWxkLlZhbHVlLiRQYXRoO1xuXHRcdFx0Y29uc3QgYklzU2VtYW50aWNLZXkgPVxuXHRcdFx0XHRhU2VtYW50aWNLZXlzICYmXG5cdFx0XHRcdCFhU2VtYW50aWNLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChvS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0tleS4kUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmIChiSXNTZW1hbnRpY0tleSkge1xuXHRcdFx0XHRyZXR1cm4gXCJCZWdpblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkQWxpZ25tZW50KG9EYXRhRmllbGQsIG9Nb2RlbCwgc0VudGl0eVBhdGgpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IGFsaWdubWVudCBiYXNlZCBvbmx5IG9uIHRoZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIHNUeXBlIFRoZSBwcm9wZXJ0eSdzIHR5cGVcblx0ICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zIFRoZSBmaWVsZCBmb3JtYXQgb3B0aW9uc1xuXHQgKiBAcGFyYW0gW29Db21wdXRlZEVkaXRNb2RlXSBUaGUgY29tcHV0ZWQgRWRpdCBtb2RlIG9mIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB3aGVuIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHRoZSBDb2x1bW5Qcm9wZXJ0eSBmcmFnbWVudFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgYWxpZ25tZW50XG5cdCAqL1xuXHRnZXRQcm9wZXJ0eUFsaWdubWVudDogZnVuY3Rpb24gKHNUeXBlOiBzdHJpbmcsIG9Gb3JtYXRPcHRpb25zOiBhbnksIG9Db21wdXRlZEVkaXRNb2RlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pIHtcblx0XHRsZXQgc0RlZmF1bHRBbGlnbm1lbnQgPSBcIkJlZ2luXCIgYXMgYW55O1xuXHRcdGNvbnN0IHNUZXh0QWxpZ25tZW50ID0gb0Zvcm1hdE9wdGlvbnMgPyBvRm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlIDogXCJcIjtcblx0XHRzd2l0Y2ggKHNUZXh0QWxpZ25tZW50KSB7XG5cdFx0XHRjYXNlIFwiRm9ybVwiOlxuXHRcdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IFwiQmVnaW5cIjtcblx0XHRcdFx0XHRpZiAob0NvbXB1dGVkRWRpdE1vZGUpIHtcblx0XHRcdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50RXhwcmVzc2lvbihvQ29tcHV0ZWRFZGl0TW9kZSwgXCJCZWdpblwiLCBcIkVuZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkgfHwgdGhpcy5pc0RhdGVPclRpbWVEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IFwiUmlnaHRcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHNEZWZhdWx0QWxpZ25tZW50O1xuXHR9LFxuXG5cdGdldERhdGFGaWVsZEFsaWdubWVudDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgb01vZGVsOiBhbnksIHNFbnRpdHlQYXRoOiBhbnksIG9Gb3JtYXRPcHRpb25zPzogYW55LCBvQ29tcHV0ZWRFZGl0TW9kZT86IGFueSkge1xuXHRcdGxldCBzRGF0YUZpZWxkUGF0aCxcblx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gXCJCZWdpblwiLFxuXHRcdFx0c1R5cGUsXG5cdFx0XHRvQW5ub3RhdGlvbnM7XG5cblx0XHRpZiAob0RhdGFGaWVsZFtcIiRUeXBlXCJdID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFBhdGggPSBvRGF0YUZpZWxkLlRhcmdldC4kQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0W1wiJEFubm90YXRpb25QYXRoXCJdICYmXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0W1wiJEFubm90YXRpb25QYXRoXCJdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID49IDBcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9YCk7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvRmllbGRHcm91cC5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS8ke3NEYXRhRmllbGRQYXRofS9EYXRhLyR7aS50b1N0cmluZygpfS9WYWx1ZS8kUGF0aC8kVHlwZWApO1xuXHRcdFx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9L0RhdGEvJHtpLnRvU3RyaW5nKCl9L1ZhbHVlLyRQYXRoQGApO1xuXHRcdFx0XHRcdHNUeXBlID0gdGhpcy5nZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24ob0Fubm90YXRpb25zLCBzVHlwZSk7XG5cdFx0XHRcdFx0c0RlZmF1bHRBbGlnbm1lbnQgPSB0aGlzLmdldFByb3BlcnR5QWxpZ25tZW50KHNUeXBlLCBvRm9ybWF0T3B0aW9ucywgb0NvbXB1dGVkRWRpdE1vZGUpO1xuXG5cdFx0XHRcdFx0aWYgKHNEZWZhdWx0QWxpZ25tZW50ID09PSBcIkJlZ2luXCIpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldFtcIiRBbm5vdGF0aW9uUGF0aFwiXSAmJlxuXHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldFtcIiRBbm5vdGF0aW9uUGF0aFwiXS5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID49IDAgJiZcblx0XHRcdFx0b01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlcmApID09PVxuXHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzVHlwZSA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9LyRUeXBlYCk7XG5cdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCIpIHtcblx0XHRcdFx0XHRzVHlwZSA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9L1ZhbHVlLyRQYXRoLyRUeXBlYCk7XG5cdFx0XHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vVmFsdWUvJFBhdGhAYCk7XG5cdFx0XHRcdFx0c1R5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihvQW5ub3RhdGlvbnMsIHNUeXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IHRoaXMuZ2V0UHJvcGVydHlBbGlnbm1lbnQoc1R5cGUsIG9Gb3JtYXRPcHRpb25zLCBvQ29tcHV0ZWRFZGl0TW9kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNEYXRhRmllbGRQYXRoID0gb0RhdGFGaWVsZC5WYWx1ZS4kUGF0aDtcblx0XHRcdHNUeXBlID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vJFR5cGVgKTtcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9QGApO1xuXHRcdFx0c1R5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihvQW5ub3RhdGlvbnMsIHNUeXBlKTtcblx0XHRcdGNvbnN0IGtleXMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9gKVtcIiRLZXlcIl07XG5cdFx0XHRpZiAoa2V5cyAmJiBrZXlzLmluZGV4T2Yoc0RhdGFGaWVsZFBhdGgpICE9PSAwKSB7XG5cdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudChzVHlwZSwgb0Zvcm1hdE9wdGlvbnMsIG9Db21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNEZWZhdWx0QWxpZ25tZW50O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGVuYWJsZWQgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkQWN0aW9uQnV0dG9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBiSXNCb3VuZCBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dCBBY3Rpb25Db250ZXh0IFZhbHVlXG5cdCAqIEBwYXJhbSBzQWN0aW9uQ29udGV4dEZvcm1hdCBGb3JtYXR0ZWQgdmFsdWUgb2YgQWN0aW9uQ29udGV4dFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gb3Igc3RyaW5nIGV4cHJlc3Npb24gZm9yIGVuYWJsZWQgcHJvcGVydHlcblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgYklzQm91bmQ6IGJvb2xlYW4sIG9BY3Rpb25Db250ZXh0OiBhbnksIHNBY3Rpb25Db250ZXh0Rm9ybWF0OiBzdHJpbmcpIHtcblx0XHRpZiAoYklzQm91bmQgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIChvQWN0aW9uQ29udGV4dCA9PT0gbnVsbCA/IFwiez0gISR7I1wiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIn0gPyBmYWxzZSA6IHRydWUgfVwiIDogb0FjdGlvbkNvbnRleHQpXG5cdFx0XHQ/IHNBY3Rpb25Db250ZXh0Rm9ybWF0XG5cdFx0XHQ6IFwidHJ1ZVwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgbGFiZWwgZm9yIGEgRGF0YUZpZWxkLlxuXHQgKiBJZiB0aGUgRGF0YUZpZWxkJ3MgbGFiZWwgaXMgYW4gZW1wdHkgc3RyaW5nLCBpdCdzIG5vdCByZW5kZXJlZCBldmVuIGlmIGEgZmFsbGJhY2sgZXhpc3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgY29tcHV0ZUxhYmVsVGV4dFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGZvciBjb250ZXh0IGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21wdXRlZCB0ZXh0IGZvciB0aGUgRGF0YUZpZWxkIGxhYmVsLlxuXHQgKi9cblxuXHRjb21wdXRlTGFiZWxUZXh0OiBmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoc0NvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnNsaWNlKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdH1cblx0XHRjb25zdCBzRGF0YUZpZWxkTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vTGFiZWxgKTtcblx0XHQvL1dlIGRvIG5vdCBzaG93IGFuIGFkZGl0aW9uYWwgbGFiZWwgdGV4dCBmb3IgYSBidXR0b246XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRMYWJlbDtcblx0XHR9IGVsc2UgaWYgKHNEYXRhRmllbGRMYWJlbCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGxldCBzRGF0YUZpZWxkVGFyZ2V0VGl0bGU7XG5cdFx0aWYgKG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID4gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRzRGF0YUZpZWxkVGFyZ2V0VGl0bGUgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aEAvVGl0bGVgKTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YUZpZWxkLlRhcmdldC4kQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIikgPiAtMSkge1xuXHRcdFx0XHRzRGF0YUZpZWxkVGFyZ2V0VGl0bGUgPSBvTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NDb250ZXh0UGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aEAvZm4vJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZFRhcmdldFRpdGxlKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldFRpdGxlO1xuXHRcdH1cblx0XHRsZXQgc0RhdGFGaWVsZFRhcmdldExhYmVsO1xuXHRcdGlmIChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFRhcmdldExhYmVsID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL0xhYmVsYCk7XG5cdFx0fVxuXHRcdGlmIChzRGF0YUZpZWxkVGFyZ2V0TGFiZWwpIHtcblx0XHRcdHJldHVybiBzRGF0YUZpZWxkVGFyZ2V0TGFiZWw7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0RhdGFGaWVsZFZhbHVlTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCk7XG5cdFx0aWYgKHNEYXRhRmllbGRWYWx1ZUxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFZhbHVlTGFiZWw7XG5cdFx0fVxuXG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsO1xuXHRcdGlmIChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWw7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFsaWduIHRoZSBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGxhYmVsLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtc1xuXHQgKiBAcGFyYW0gc1Zpc3VhbGl6YXRpb25cblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBiaW5kaW5nIGZvciBhbGlnbkl0ZW1zIHByb3BlcnR5XG5cdCAqL1xuXHRidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zOiBmdW5jdGlvbiAoc1Zpc3VhbGl6YXRpb246IHN0cmluZykge1xuXHRcdGNvbnN0IGZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uID0gY29uc3RhbnQoc1Zpc3VhbGl6YXRpb24pO1xuXHRcdGNvbnN0IHByb2dyZXNzVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uID0gY29uc3RhbnQoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKTtcblx0XHRjb25zdCByYXRpbmdWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKFxuXHRcdFx0XHRcdGVxdWFsKGZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uLCBwcm9ncmVzc1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0ZXF1YWwoZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24sIHJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbilcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29uc3RhbnQoXCJDZW50ZXJcIiksXG5cdFx0XHRcdGlmRWxzZShVSS5Jc0VkaXRhYmxlLCBjb25zdGFudChcIkNlbnRlclwiKSwgY29uc3RhbnQoXCJTdHJldGNoXCIpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBjaGVjayBWYWx1ZUxpc3RSZWZlcmVuY2VzLCBWYWx1ZUxpc3RNYXBwaW5nIGFuZCBWYWx1ZUxpc3QgaW5zaWRlIEFjdGlvblBhcmFtZXRlcnMgZm9yIFZhbHVlSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhc1ZhbHVlSGVscFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgQWN0aW9uIHBhcmFtZXRlciBvYmplY3Rcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgVmFsdWVMaXN0KiBhbm5vdGF0aW9uIGRlZmluZWRcblx0ICovXG5cdGhhc1ZhbHVlSGVscEFubm90YXRpb246IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0aWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gISEoXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWZlcmVuY2VzXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgZGlzcGxheSBwcm9wZXJ0eSBmb3IgQWN0aW9uUGFyYW1ldGVyIGRpYWxvZy5cblx0ICpcblx0ICogXHRAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0XG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGRpc3BsYXkgZm9ybWF0ICBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBGaWVsZFxuXHQgKi9cblx0Z2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0OiBmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGxldCBvQW5ub3RhdGlvbjtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBvUHJvcGVydHkuJE5hbWUgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFByb3BlcnR5KGAke3NDb250ZXh0UGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdGNvbnN0IG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBgKTtcblx0XHRjb25zdCBvVmFsdWVIZWxwQW5ub3RhdGlvbiA9XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlZmVyZW5jZXNcIl07XG5cdFx0Y29uc3QgZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKG9WYWx1ZUxpc3Q6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdFBhcmFtZXRlciA9IG9WYWx1ZUxpc3QuUGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkgJiYgb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUHJvcGVydHlOYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb1ZhbHVlTGlzdFBhcmFtZXRlciAmJiBvVmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdH07XG5cdFx0bGV0IHNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QXJyYW5nZW1lbnRcIl0gfHxcblx0XHRcdG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl1cblx0XHQpIHtcblx0XHRcdHJldHVybiBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zLCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAob1ZhbHVlSGVscEFubm90YXRpb24pIHtcblx0XHRcdGlmIChvVmFsdWVIZWxwQW5ub3RhdGlvbi5Db2xsZWN0aW9uUGF0aCkge1xuXHRcdFx0XHQvLyBnZXQgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaW4gdmFsdWUgbGlzdCBjb2xsZWN0aW9uXG5cdFx0XHRcdHNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUgPSBnZXRWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUob1ZhbHVlSGVscEFubm90YXRpb24pO1xuXHRcdFx0XHRpZiAoIXNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGdldCB0ZXh0IGZvciB0aGlzIHByb3BlcnR5XG5cdFx0XHRcdG9Bbm5vdGF0aW9uID0gb01vZGVsLmdldE9iamVjdChgLyR7b1ZhbHVlSGVscEFubm90YXRpb24uQ29sbGVjdGlvblBhdGh9LyR7c1ZhbHVlTGlzdFByb3BlcnR5TmFtZX1AYCk7XG5cdFx0XHRcdHJldHVybiBvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Bbm5vdGF0aW9uLCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0OiBcIlZhbHVlXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHNDb250ZXh0UGF0aCwgdHJ1ZSkudGhlbihmdW5jdGlvbiAob1ZhbHVlTGlzdEluZm86IGFueSkge1xuXHRcdFx0XHRcdC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiB2YWx1ZSBsaXN0IGNvbGxlY3Rpb25cblx0XHRcdFx0XHRzVmFsdWVMaXN0UHJvcGVydHlOYW1lID0gZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lKG9WYWx1ZUxpc3RJbmZvW1wiXCJdKTtcblx0XHRcdFx0XHRpZiAoIXNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGdldCB0ZXh0IGZvciB0aGlzIHByb3BlcnR5XG5cdFx0XHRcdFx0b0Fubm90YXRpb24gPSBvVmFsdWVMaXN0SW5mb1tcIlwiXS4kbW9kZWxcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgLyR7b1ZhbHVlTGlzdEluZm9bXCJcIl1bXCJDb2xsZWN0aW9uUGF0aFwiXX0vJHtzVmFsdWVMaXN0UHJvcGVydHlOYW1lfUBgKTtcblx0XHRcdFx0XHRyZXR1cm4gb0Fubm90YXRpb24gJiYgb0Fubm90YXRpb25bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Bbm5vdGF0aW9uLCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHQ6IFwiVmFsdWVcIjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHR9LFxuXHQvKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGRpc3BsYXkgcHJvcGVydHkgZm9yIEFjdGlvblBhcmFtZXRlciBkaWFsb2cgVmFsdWVIZWxwLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBvQWN0aW9uUGFyYW1ldGVyIEFjdGlvbiBwYXJhbWV0ZXIgb2JqZWN0XG5cdCAqIEBwYXJhbSBzU2FwVUlOYW1lIEFjdGlvbiBzYXB1aSBuYW1lXG5cdCAqIEBwYXJhbSBzUGFyYW1OYW1lIFRoZSBwYXJhbWV0ZXIgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIGZpZWxkSGVscCB1c2VkIGJ5IHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwOiBmdW5jdGlvbiAob0FjdGlvblBhcmFtZXRlcjogb2JqZWN0LCBzU2FwVUlOYW1lOiBzdHJpbmcsIHNQYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzVmFsdWVIZWxwQW5ub3RhdGlvbihvQWN0aW9uUGFyYW1ldGVyKSA/IGdlbmVyYXRlKFtzU2FwVUlOYW1lLCBzUGFyYW1OYW1lXSkgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBkZWxlZ2F0ZSBjb25maWd1cmF0aW9uIGZvciBBY3Rpb25QYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0VmFsdWVIZWxwRGVsZWdhdGVcblx0ICogQHBhcmFtIGlzQm91bmQgQWN0aW9uIGlzIGJvdW5kXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlUGF0aCBUaGUgRW50aXR5VHlwZSBQYXRoXG5cdCAqIEBwYXJhbSBzYXBVSU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1OYW1lIFRoZSBuYW1lIG9mIHRoZSBBY3Rpb25QYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKGlzQm91bmQ6IGJvb2xlYW4sIGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsIHNhcFVJTmFtZTogc3RyaW5nLCBwYXJhbU5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IGRlbGVnYXRlQ29uZmlndXJhdGlvbjogeyBuYW1lOiBzdHJpbmc7IHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQgfSA9IHtcblx0XHRcdG5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiKSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFxuXHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5nZXRQcm9wZXJ0eVBhdGgoe1xuXHRcdFx0XHRcdFx0VW5ib3VuZEFjdGlvbjogIWlzQm91bmQsXG5cdFx0XHRcdFx0XHRFbnRpdHlUeXBlUGF0aDogZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdFx0XHRBY3Rpb246IHNhcFVJTmFtZSxcblx0XHRcdFx0XHRcdFByb3BlcnR5OiBwYXJhbU5hbWVcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwiXCIpLFxuXHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZzogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24pO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBmb3IgTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQgZGlhbG9nLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0VmFsdWVIZWxwRGVsZWdhdGVGb3JOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBjdXJyZW50IHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZUZvck5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBkZWxlZ2F0ZUNvbmZpZ3VyYXRpb246IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIH0gPSB7XG5cdFx0XHRuYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIiksXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHByb3BlcnR5UGF0aDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3Rlcyhwcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwiXCIpXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKGRlbGVnYXRlQ29uZmlndXJhdGlvbik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCBlbnRpdHkgZnJvbSBhIHBhdGggY29udGFpbmluZyBtdWx0aXBsZSBhc3NvY2lhdGlvbnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RW50aXR5U2V0RnJvbU11bHRpTGV2ZWxcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHdob3NlIHBhdGggaXMgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggZnJvbSB3aGljaCBlbnRpdHkgaGFzIHRvIGJlIGZldGNoZWRcblx0ICogQHBhcmFtIHNTb3VyY2VFbnRpdHkgVGhlIGVudGl0eSBwYXRoIGluIHdoaWNoIG5hdiBlbnRpdHkgZXhpc3RzXG5cdCAqIEBwYXJhbSBpU3RhcnQgVGhlIHN0YXJ0IGluZGV4IDogYmVnaW5uaW5nIHBhcnRzIG9mIHRoZSBwYXRoIHRvIGJlIGlnbm9yZWRcblx0ICogQHBhcmFtIGlEaWZmIFRoZSBkaWZmIGluZGV4IDogZW5kIHBhcnRzIG9mIHRoZSBwYXRoIHRvIGJlIGlnbm9yZWRcblx0ICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGVudGl0eSBzZXRcblx0ICovXG5cdF9nZXRFbnRpdHlTZXRGcm9tTXVsdGlMZXZlbDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0LCBzUGF0aDogc3RyaW5nLCBzU291cmNlRW50aXR5OiBzdHJpbmcsIGlTdGFydDogYW55LCBpRGlmZjogYW55KSB7XG5cdFx0bGV0IGFOYXZQYXJ0cyA9IHNQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0YU5hdlBhcnRzID0gYU5hdlBhcnRzLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdFx0fSk7XG5cdFx0aWYgKGFOYXZQYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gaVN0YXJ0OyBpIDwgYU5hdlBhcnRzLmxlbmd0aCAtIGlEaWZmOyBpKyspIHtcblx0XHRcdFx0c1NvdXJjZUVudGl0eSA9IGAvJHtvQ29udGV4dC5nZXRPYmplY3QoYCR7c1NvdXJjZUVudGl0eX0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHthTmF2UGFydHNbaV19YCl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNTb3VyY2VFbnRpdHk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZW4gdGhlIHZhbHVlIGRpc3BsYXllZCBpcyBpbiB0ZXh0IGFycmFuZ2VtZW50IFRleHRPbmx5IHdlIGFsc28gd2FudCB0byByZXRyaWV2ZSB0aGUgVGV4dCB2YWx1ZSBmb3IgdGFibGVzIGV2ZW4gaWYgd2UgZG9uJ3Qgc2hvdyBpdC5cblx0ICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBvcmlnaW5hbCBkYXRhIGZpZWxkLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkVGV4dEFycmFuZ2VtZW50IERhdGFGaWVsZCB1c2luZyB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb25cblx0ICogQHBhcmFtIG9EYXRhRmllbGQgRGF0YUZpZWxkIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHVzaW5nIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyB0byB0aGUgdmFsdWVcblx0ICovXG5cdGdldEJpbmRpbmdJbmZvRm9yVGV4dEFycmFuZ2VtZW50OiBmdW5jdGlvbiAob1RoaXM6IG9iamVjdCwgb0RhdGFGaWVsZFRleHRBcnJhbmdlbWVudDogYW55LCBvRGF0YUZpZWxkOiBhbnkpIHtcblx0XHQvLyB0aGlzIGlzIHVzZWQgaW4gQ29sdW1uQ29udGVudCBmcmFnbWVudFxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQgJiZcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQuJEVudW1NZW1iZXIgJiZcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiICYmXG5cdFx0XHRvRGF0YUZpZWxkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gYHske29EYXRhRmllbGQuVmFsdWUuJFBhdGh9fWA7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0Z2V0UGF0aEZvckljb25Tb3VyY2U6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRyZXR1cm4gXCJ7PSBGSUVMRFJVTlRJTUUuZ2V0SWNvbkZvck1pbWVUeXBlKCV7XCIgKyBzUHJvcGVydHlQYXRoICsgXCJAb2RhdGEubWVkaWFDb250ZW50VHlwZX0pfVwiO1xuXHR9LFxuXHRnZXRGaWxlbmFtZUV4cHI6IGZ1bmN0aW9uIChzRmlsZW5hbWU6IGFueSwgc05vRmlsZW5hbWVUZXh0OiBhbnkpIHtcblx0XHRpZiAoc0ZpbGVuYW1lKSB7XG5cdFx0XHRpZiAoc0ZpbGVuYW1lLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG5cdFx0XHRcdC8vIGZpbGVuYW1lIGlzIHJlZmVyZW5jZWQgdmlhIHBhdGgsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogcGF0aFxuXHRcdFx0XHRyZXR1cm4gXCJ7PSAkXCIgKyBzRmlsZW5hbWUgKyBcIiA/ICRcIiArIHNGaWxlbmFtZSArIFwiIDogJFwiICsgc05vRmlsZW5hbWVUZXh0ICsgXCJ9XCI7XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGF0aWMgZmlsZW5hbWUsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogJ3NvbWVTdGF0aWNOYW1lJ1xuXHRcdFx0cmV0dXJuIHNGaWxlbmFtZTtcblx0XHR9XG5cdFx0Ly8gbm8gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lXG5cdFx0cmV0dXJuIHNOb0ZpbGVuYW1lVGV4dDtcblx0fSxcblxuXHRjYWxjdWxhdGVNQmZyb21CeXRlOiBmdW5jdGlvbiAoaUJ5dGU6IGFueSkge1xuXHRcdHJldHVybiBpQnl0ZSA/IChpQnl0ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoNikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldERvd25sb2FkVXJsOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlQYXRoICsgXCJ7PSAke2ludGVybmFsPi9zdGlja3lTZXNzaW9uVG9rZW59ID8gKCc/U0FQLUNvbnRleHRJZD0nICsgJHtpbnRlcm5hbD4vc3RpY2t5U2Vzc2lvblRva2VufSkgOiAnJyB9XCI7XG5cdH0sXG5cdGdldE1hcmdpbkNsYXNzOiBmdW5jdGlvbiAoY29tcGFjdFNlbWFudGljS2V5OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNvbXBhY3RTZW1hbnRpY0tleSA9PT0gXCJ0cnVlXCIgfHwgY29tcGFjdFNlbWFudGljS2V5ID09PSB0cnVlID8gXCJzYXBNVGFibGVDb250ZW50TWFyZ2luXCIgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldFJlcXVpcmVkOiBmdW5jdGlvbiAoaW1tdXRhYmxlS2V5OiBhbnksIHRhcmdldDogYW55LCByZXF1aXJlZFByb3BlcnRpZXM6IGFueSkge1xuXHRcdGxldCB0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb246IGFueSA9IGNvbnN0YW50KGZhbHNlKTtcblx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHR0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbih0YXJnZXQ/LnRhcmdldE9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcih0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb24sIHJlcXVpcmVkUHJvcGVydGllcy5pbmRleE9mKGltbXV0YWJsZUtleSkgPiAtMSkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIGNoZWNrcyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZm9ybS5cblx0ICpcblx0ICogQHBhcmFtIGRhdGFGaWVsZENvbGxlY3Rpb24gVGhlIGxpc3Qgb2YgdGhlIGZpZWxkcyBvZiB0aGUgZm9ybVxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkT2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgZmllbGQgd2hpY2ggbmVlZHMgdG8gYmUgY2hlY2tlZCBpbiB0aGUgZm9ybVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgcGFydCBvZiB0aGUgZm9ybSwgYGZhbHNlYCBvdGhlcndpc2Vcblx0ICovXG5cdGlzRmllbGRQYXJ0T2ZGb3JtOiBmdW5jdGlvbiAoZGF0YUZpZWxkQ29sbGVjdGlvbjogRm9ybUVsZW1lbnRbXSwgZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdC8vZ2VuZXJhdGluZyBrZXkgZm9yIHRoZSByZWNlaXZlZCBkYXRhIGZpZWxkXG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YUZpZWxkS2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGRPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0Ly8gdHJ5aW5nIHRvIGZpbmQgdGhlIGdlbmVyYXRlZCBrZXkgaW4gYWxyZWFkeSBleGlzdGluZyBmb3JtIGVsZW1lbnRzXG5cdFx0Y29uc3QgaXNGaWVsZEZvdW5kID0gZGF0YUZpZWxkQ29sbGVjdGlvbi5maW5kKChmaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmtleSA9PT0gY29ubmVjdGVkRGF0YUZpZWxkS2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiBpc0ZpZWxkRm91bmQgPyB0cnVlIDogZmFsc2U7XG5cdH1cbn07XG4oRmllbGRIZWxwZXIuZmllbGRDb250cm9sIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0IGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dCBhcyBhbnkpLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuKEZpZWxkSGVscGVyLmdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkgYXMgYW55KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0VBc0JBLE1BQU1BLFdBQVcsR0FBRyxvQ0FBb0M7SUFDdkRDLElBQUksR0FBRyw2QkFBNkI7RUFFckMsTUFBTUMsV0FBVyxHQUFHO0lBQ25CQyxpQkFBaUIsRUFBRSxVQUFVQyxVQUFlLEVBQUVDLFFBQWEsRUFBRTtNQUM1RDtNQUNBLE1BQU1DLFFBQVEsR0FBR0QsUUFBUSxDQUFDRSxPQUFPO01BQ2pDLElBQUlDLGNBQW1CLEdBQUcsS0FBSztNQUMvQixJQUFJSixVQUFVLENBQUNLLEtBQUssSUFBSUwsVUFBVSxDQUFDSyxLQUFLLENBQUNDLEtBQUssRUFBRTtRQUMvQ0YsY0FBYyxHQUFHRixRQUFRLENBQUNLLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQztNQUNyRjtNQUNBLElBQUksQ0FBQ0gsY0FBYyxJQUFJQSxjQUFjLENBQUNFLEtBQUssRUFBRTtRQUM1Q0YsY0FBYyxHQUFHRixRQUFRLENBQUNLLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztRQUN6RSxJQUFJLENBQUNILGNBQWMsSUFBSUEsY0FB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
|
|
873
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJU09DdXJyZW5jeSIsIlVuaXQiLCJGaWVsZEhlbHBlciIsImlzTm90QWx3YXlzSGlkZGVuIiwib0RhdGFGaWVsZCIsIm9EZXRhaWxzIiwib0NvbnRleHQiLCJjb250ZXh0IiwiaXNBbHdheXNIaWRkZW4iLCJWYWx1ZSIsIiRQYXRoIiwiZ2V0T2JqZWN0IiwiaXNSZXF1aXJlZCIsIm9GaWVsZENvbnRyb2wiLCJzRWRpdE1vZGUiLCJNYW5hZ2VkT2JqZWN0IiwiYmluZGluZ1BhcnNlciIsImdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkiLCJvUGFyYW0iLCIkSWYiLCJsZW5ndGgiLCJvTmVnUGFyYW0iLCJBbm5vdGF0aW9uSGVscGVyIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eU5hbWUiLCJ2UHJvcGVydHkiLCJvSW50ZXJmYWNlIiwic1Byb3BlcnR5TmFtZSIsImdldFBhdGgiLCJpbmRleE9mIiwiJFByb3BlcnR5UGF0aCIsInNQYXRoIiwic0NvbnRleHRQYXRoIiwiZmllbGRDb250cm9sIiwic1Byb3BlcnR5UGF0aCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib0ZpZWxkQ29udHJvbENvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCIkRW51bU1lbWJlciIsInZhbHVlSGVscFByb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsImJJbkZpbHRlckZpZWxkIiwib0NvbnRlbnQiLCJzQW5ub1BhdGgiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uIiwic1VuaXRPckN1cnJlbmN5UGF0aCIsInZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQiLCJnZXRJREZvckZpZWxkVmFsdWVIZWxwIiwic0ZsZXhJZCIsInNJZFByZWZpeCIsInNPcmlnaW5hbFByb3BlcnR5TmFtZSIsInNQcm9wZXJ0eSIsImdlbmVyYXRlIiwiZ2V0VmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsInByb3BlcnR5Q29udGV4dCIsIm9Qcm9wZXJ0eSIsInNQcm9wZXJ0eVR5cGUiLCJzVmhJZFByZWZpeCIsInNWYWx1ZUhlbHBQcm9wZXJ0eU5hbWUiLCJiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlNlbWFudGljRGF0ZVJhbmdlIiwic1Byb3BlcnR5TG9jYXRpb25QYXRoIiwiQ29tbW9uSGVscGVyIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJpbmNsdWRlcyIsImNvbXB1dGVGaWVsZEJhc2VEZWxlZ2F0ZSIsImRlbGVnYXRlTmFtZSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZSIsInBheWxvYWQiLCJfZ2V0UHJpbWFyeUludGVudHMiLCJhU2VtYW50aWNPYmplY3RzTGlzdCIsImFQcm9taXNlcyIsIm9Vc2hlbGxDb250YWluZXIiLCJzYXAiLCJ1c2hlbGwiLCJDb250YWluZXIiLCJvU2VydmljZSIsImdldFNlcnZpY2UiLCJmb3JFYWNoIiwic2VtT2JqZWN0IiwicHVzaCIsImdldFByaW1hcnlJbnRlbnQiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsImFTZW1PYmplY3RQcmltYXJ5QWN0aW9uIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsIl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbiIsIm9TZW1hbnRpY3MiLCJhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnMiLCJhcHBDb21wb25lbnQiLCJfZm5Jc1NlbWFudGljT2JqZWN0QWN0aW9uVW5hdmFpbGFibGUiLCJfb1NlbWFudGljcyIsIl9vUHJpbWFyeUFjdGlvbiIsIl9pbmRleCIsInVuYXZhaWxhYmxlQWN0aW9uc0luZGV4Iiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhY3Rpb25zIiwiaW50ZW50Iiwic3BsaXQiLCJzZW1hbnRpY1ByaW1hcnlBY3Rpb25zIiwib1ByaW1hcnlBY3Rpb24iLCJzZW1hbnRpY09iamVjdHMiLCJtYWluU2VtYW50aWNPYmplY3QiLCJzQ3VycmVudEhhc2giLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0SGFzaCIsImluZGV4Iiwic2VtYW50aWNPYmplY3QiLCJjaGVja1ByaW1hcnlBY3Rpb25zIiwiYkdldFRpdGxlTGluayIsInRpdGxlTGluayIsImhhc1RpdGxlTGluayIsIl9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVycyIsIl9vU2VtYW50aWNPYmplY3RNb2RlbCIsIl9saW5rSW50ZW50IiwidGl0bGVsaW5rIiwiZ2V0UHJpbWFyeUFjdGlvbiIsInByaW1hcnlJbnRlbnRBY3Rpb24iLCJvcGVyYXRvcnMiLCJzU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsInByb3BlcnR5VHlwZSIsIiRUeXBlIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5Iiwic2xpY2UiLCJpc1RhYmxlQm91bmRUb05hdmlnYXRpb24iLCJsYXN0SW5kZXhPZiIsImlzTmF2aWdhdGlvblBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsInN1YnN0ciIsInByb3BlcnR5UGF0aCIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5IiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwidG9TdHJpbmciLCJnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkiLCJnZXREYXRhRmllbGREZWZhdWx0Iiwib0RhdGFGaWVsZENvbnRleHQiLCJvRGF0YUZpZWxkRGVmYXVsdCIsImlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZSIsIm9UaGlzIiwiYklzQm91bmQiLCJvQWN0aW9uQ29udGV4dCIsImdldFByZXNzRXZlbnRGb3JEYXRhRmllbGRBY3Rpb25CdXR0b24iLCJzSW52b2NhdGlvbkdyb3VwaW5nIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiYklzTmF2aWdhYmxlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImVudGl0aWVzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0TmFtZSIsIm9QYXJhbXMiLCJjb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsImFkZFNpbmdsZVF1b3RlcyIsIm1vZGVsIiwibGFiZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIkFjdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiaXNOdW1lcmljRGF0YVR5cGUiLCJzRGF0YUZpZWxkVHlwZSIsIl9zRGF0YUZpZWxkVHlwZSIsImFOdW1lcmljRGF0YVR5cGVzIiwiaXNEYXRlT3JUaW1lRGF0YVR5cGUiLCJhRGF0ZVRpbWVEYXRhVHlwZXMiLCJpc0RhdGVUaW1lRGF0YVR5cGUiLCJhRGF0ZURhdGFUeXBlcyIsImlzRGF0ZURhdGFUeXBlIiwiaXNUaW1lRGF0YVR5cGUiLCJnZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24iLCJvQW5ub3RhdGlvbnMiLCJzVHlwZSIsInNUZXh0QW5ub3RhdGlvbiIsInNUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwib1RhYmxlIiwic0VudGl0eVBhdGgiLCJjb2xsZWN0aW9uIiwiSW5saW5lIiwiSWNvblVybCIsImFTZW1hbnRpY0tleXMiLCJiSXNTZW1hbnRpY0tleSIsImV2ZXJ5Iiwib0tleSIsImdldERhdGFGaWVsZEFsaWdubWVudCIsImdldFByb3BlcnR5QWxpZ25tZW50Iiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29tcHV0ZWRFZGl0TW9kZSIsInNEZWZhdWx0QWxpZ25tZW50Iiwic1RleHRBbGlnbm1lbnQiLCJ0ZXh0QWxpZ25Nb2RlIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNEYXRhRmllbGRQYXRoIiwiVGFyZ2V0IiwiJEFubm90YXRpb25QYXRoIiwib0ZpZWxkR3JvdXAiLCJpIiwiRGF0YSIsImtleXMiLCJpc0RhdGFGaWVsZEFjdGlvbkJ1dHRvbkVuYWJsZWQiLCJzQWN0aW9uQ29udGV4dEZvcm1hdCIsImNvbXB1dGVMYWJlbFRleHQiLCJlbmRzV2l0aCIsInNEYXRhRmllbGRMYWJlbCIsInNEYXRhRmllbGRUYXJnZXRUaXRsZSIsInNEYXRhRmllbGRUYXJnZXRMYWJlbCIsInNEYXRhRmllbGRWYWx1ZUxhYmVsIiwic0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWwiLCJidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zIiwic1Zpc3VhbGl6YXRpb24iLCJmaWVsZFZpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicHJvZ3Jlc3NWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJyYXRpbmdWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIm9yIiwiZXF1YWwiLCJVSSIsIklzRWRpdGFibGUiLCJoYXNWYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0Iiwib0Fubm90YXRpb24iLCIkTmFtZSIsIm9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9WYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lIiwib1ZhbHVlTGlzdCIsIm9WYWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiZmluZCIsIm9QYXJhbWV0ZXIiLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5Iiwic1ZhbHVlTGlzdFByb3BlcnR5TmFtZSIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIkNvbGxlY3Rpb25QYXRoIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIiRtb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIm9BY3Rpb25QYXJhbWV0ZXIiLCJzU2FwVUlOYW1lIiwic1BhcmFtTmFtZSIsImdldFZhbHVlSGVscERlbGVnYXRlIiwiaXNCb3VuZCIsImVudGl0eVR5cGVQYXRoIiwic2FwVUlOYW1lIiwicGFyYW1OYW1lIiwiZGVsZWdhdGVDb25maWd1cmF0aW9uIiwiVmFsdWVMaXN0SGVscGVyIiwiZ2V0UHJvcGVydHlQYXRoIiwiVW5ib3VuZEFjdGlvbiIsIkVudGl0eVR5cGVQYXRoIiwiUHJvcGVydHkiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJnZXRWYWx1ZUhlbHBEZWxlZ2F0ZUZvck5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkIiwiX2dldEVudGl0eVNldEZyb21NdWx0aUxldmVsIiwic1NvdXJjZUVudGl0eSIsImlTdGFydCIsImlEaWZmIiwiYU5hdlBhcnRzIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNQYXJ0IiwiZ2V0QmluZGluZ0luZm9Gb3JUZXh0QXJyYW5nZW1lbnQiLCJvRGF0YUZpZWxkVGV4dEFycmFuZ2VtZW50IiwiZ2V0UGF0aEZvckljb25Tb3VyY2UiLCJnZXRGaWxlbmFtZUV4cHIiLCJzRmlsZW5hbWUiLCJzTm9GaWxlbmFtZVRleHQiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwiaUJ5dGUiLCJ0b0ZpeGVkIiwiZ2V0RG93bmxvYWRVcmwiLCJnZXRNYXJnaW5DbGFzcyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImdldFJlcXVpcmVkIiwiaW1tdXRhYmxlS2V5IiwidGFyZ2V0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwidGFyZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJpc0ZpZWxkUGFydE9mRm9ybSIsImRhdGFGaWVsZENvbGxlY3Rpb24iLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiY29ubmVjdGVkRGF0YUZpZWxkS2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiaXNGaWVsZEZvdW5kIiwiZmllbGQiLCJrZXkiLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWVsZEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGlmRWxzZSwgb3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlcXVpcmVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVIZWxwUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBWYWx1ZUxpc3RIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5jb25zdCBJU09DdXJyZW5jeSA9IFwiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5JU09DdXJyZW5jeVwiLFxuXHRVbml0ID0gXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIjtcblxuY29uc3QgRmllbGRIZWxwZXIgPSB7XG5cdGlzTm90QWx3YXlzSGlkZGVuOiBmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55LCBvRGV0YWlsczogYW55KSB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIEhlYWRlckRhdGFQb2ludFRpdGxlLmZyYWdtZW50XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvRGV0YWlscy5jb250ZXh0O1xuXHRcdGxldCBpc0Fsd2F5c0hpZGRlbjogYW55ID0gZmFsc2U7XG5cdFx0aWYgKG9EYXRhRmllbGQuVmFsdWUgJiYgb0RhdGFGaWVsZC5WYWx1ZS4kUGF0aCkge1xuXHRcdFx0aXNBbHdheXNIaWRkZW4gPSBvQ29udGV4dC5nZXRPYmplY3QoXCJWYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIik7XG5cdFx0fVxuXHRcdGlmICghaXNBbHdheXNIaWRkZW4gfHwgaXNBbHdheXNIaWRkZW4uJFBhdGgpIHtcblx0XHRcdGlzQWx3YXlzSGlkZGVuID0gb0NvbnRleHQuZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKTtcblx0XHRcdGlmICghaXNBbHdheXNIaWRkZW4gfHwgaXNBbHdheXNIaWRkZW4uJFBhdGgpIHtcblx0XHRcdFx0aXNBbHdheXNIaWRkZW4gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0Fsd2F5c0hpZGRlbjtcblx0fSxcblx0aXNSZXF1aXJlZDogZnVuY3Rpb24gKG9GaWVsZENvbnRyb2w6IGFueSwgc0VkaXRNb2RlOiBhbnkpIHtcblx0XHQvLyB0aGlzIGlzIHVzZWQgaW4gYWN0aW9uUGFyYW1ldGVyRGlhbG9nLmZyYWdtZW50XG5cdFx0aWYgKHNFZGl0TW9kZSA9PT0gXCJEaXNwbGF5XCIgfHwgc0VkaXRNb2RlID09PSBcIlJlYWRPbmx5XCIgfHwgc0VkaXRNb2RlID09PSBcIkRpc2FibGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRcdGlmICgoTWFuYWdlZE9iamVjdCBhcyBhbnkpLmJpbmRpbmdQYXJzZXIob0ZpZWxkQ29udHJvbCkpIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gJVwiICsgb0ZpZWxkQ29udHJvbCArIFwiID09PSA3fVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG9GaWVsZENvbnRyb2wgPT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZS9NYW5kYXRvcnlcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdGdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHk6IGZ1bmN0aW9uIChvUGFyYW06IGFueSwgb0NvbnRleHQ6IGFueSkge1xuXHRcdC8vIFRvIHVzZSB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZm9yIGNvbnRyb2xsaW5nIHZpc2liaWxpdHkgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIG5lZ2F0ZWRcblx0XHRpZiAodHlwZW9mIG9QYXJhbSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKG9QYXJhbSAmJiBvUGFyYW0uJElmICYmIG9QYXJhbS4kSWYubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIFVJLkhpZGRlbiBjb250YWlucyBhIGR5bmFtaWMgZXhwcmVzc2lvbiB3ZSBkbyB0aGlzXG5cdFx0XHRcdC8vIGJ5IGp1c3Qgc3dpdGNoaW5nIHRoZSBcInRoZW5cIiBhbmQgXCJlbHNlXCIgcGFydCBvZiB0aGUgZXJwcmVzc2lvblxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzBdIDw9PSBDb25kaXRpb24gcGFydFxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzFdIDw9PSBUaGVuIHBhcnRcblx0XHRcdFx0Ly8gb1BhcmFtLiRJZlsyXSA8PT0gRWxzZSBwYXJ0XG5cdFx0XHRcdGNvbnN0IG9OZWdQYXJhbTogYW55ID0geyAkSWY6IFtdIH07XG5cdFx0XHRcdG9OZWdQYXJhbS4kSWZbMF0gPSBvUGFyYW0uJElmWzBdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzFdID0gb1BhcmFtLiRJZlsyXTtcblx0XHRcdFx0b05lZ1BhcmFtLiRJZlsyXSA9IG9QYXJhbS4kSWZbMV07XG5cdFx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLnZhbHVlKG9OZWdQYXJhbSwgb0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiez0gISV7XCIgKyBvUGFyYW0uJFBhdGggKyBcIn0gfVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG9QYXJhbSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLnZhbHVlKCFvUGFyYW0sIG9Db250ZXh0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbXB1dGVkIGFubm90YXRpb24gdGhhdCByZXR1cm5zIHZQcm9wZXJ0eSBmb3IgYSBzdHJpbmcgYW5kIEBzYXB1aS5uYW1lIGZvciBhbiBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB2UHJvcGVydHkgVGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IG5hbWVcblx0ICovXG5cdHByb3BlcnR5TmFtZTogZnVuY3Rpb24gKHZQcm9wZXJ0eTogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAodHlwZW9mIHZQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCkuaW5kZXhPZihcIiRQYXRoXCIpID4gLTEgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKS5pbmRleE9mKFwiJFByb3BlcnR5UGF0aFwiKSA+IC0xKSB7XG5cdFx0XHRcdC8vIFdlIGNvdWxkIGVuZCB1cCB3aXRoIGEgcHVyZSBzdHJpbmcgcHJvcGVydHkgKG5vICRQYXRoKSwgYW5kIHRoaXMgaXMgbm90IGEgcmVhbCBwcm9wZXJ0eSBpbiB0aGF0IGNhc2Vcblx0XHRcdFx0c1Byb3BlcnR5TmFtZSA9IHZQcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHZQcm9wZXJ0eS4kUGF0aCB8fCB2UHJvcGVydHkuJFByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSB2UHJvcGVydHkuJFBhdGggPyBcIi8kUGF0aFwiIDogXCIvJFByb3BlcnR5UGF0aFwiO1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aCArIHNQYXRofS8kQHNhcHVpLm5hbWVgKTtcblx0XHR9IGVsc2UgaWYgKHZQcm9wZXJ0eS5WYWx1ZSAmJiB2UHJvcGVydHkuVmFsdWUuJFBhdGgpIHtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSB2UHJvcGVydHkuVmFsdWUuJFBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQcm9wZXJ0eU5hbWUgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQcm9wZXJ0eU5hbWU7XG5cdH0sXG5cblx0ZmllbGRDb250cm9sOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHQvLyBlZGl0YWJsZSBoZWFkZXIgZmFjZXRcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2xDb250ZXh0ID0gb01vZGVsICYmIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbGApO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBvRmllbGRDb250cm9sQ29udGV4dCAmJiBvRmllbGRDb250cm9sQ29udGV4dC5nZXRQcm9wZXJ0eSgpO1xuXHRcdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAob0ZpZWxkQ29udHJvbC5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBvRmllbGRDb250cm9sLiRFbnVtTWVtYmVyO1xuXHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIudmFsdWUob0ZpZWxkQ29udHJvbCwgeyBjb250ZXh0OiBvRmllbGRDb250cm9sQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgZnJvbSBhIERhdGFGaWVsZCBvciBhIFByb3BlcnR5UGF0aCAoaW4gY2FzZSBhIFNlbGVjdGlvbkZpZWxkIGlzIHVzZWQpXG5cdCAqIFByaW9yaXR5IGZyb20gd2hlcmUgdG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZmllbGQgKGV4YW1wbGVzIGFyZSBcIk5hbWVcIiBhbmQgXCJTdXBwbGllclwiKTpcblx0ICogMS4gSWYgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSBoYXMga2V5ICckUGF0aCcsIHRoZW4gd2UgdGFrZSB0aGUgdmFsdWUgYXQgJyRQYXRoJy5cblx0ICogMi4gRWxzZSwgdmFsdWUgYXQgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKS5cblx0ICogSWYgdGhlcmUgaXMgYW4gSVNPQ3VycmVuY3kgb3IgaWYgdGhlcmUgYXJlIFVuaXQgYW5ub3RhdGlvbnMgZm9yIHRoZSBmaWVsZCBwcm9wZXJ0eSxcblx0ICogdGhlbiB0aGUgUGF0aCBhdCB0aGUgSVNPQ3VycmVuY3kgb3IgVW5pdCBhbm5vdGF0aW9ucyBvZiB0aGUgZmllbGQgcHJvcGVydHkgaXMgY29uc2lkZXJlZC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRIZWxwZXIuanNcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHQgVGhlIGNvbnRleHQgZnJvbSB3aGljaCB2YWx1ZSBoZWxwIHByb3BlcnR5IG5lZWQgdG8gYmUgZXh0cmFjdGVkLlxuXHQgKiBAcGFyYW0gYkluRmlsdGVyRmllbGQgV2hldGhlciBvciBub3Qgd2UncmUgaW4gdGhlIGZpbHRlciBmaWVsZCBhbmQgc2hvdWxkIGlnbm9yZVxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZD86IGJvb2xlYW4pIHtcblx0XHQvKiBGb3IgY3VycmVuY3kgKGFuZCBsYXRlciBVbml0KSB3ZSBuZWVkIHRvIGZvcndhcmQgdGhlIHZhbHVlIGhlbHAgdG8gdGhlIGFubm90YXRlZCBmaWVsZCAqL1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9Db250ZW50ID0gb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSB8fCB7fTtcblx0XHRsZXQgc1BhdGggPSBvQ29udGVudC4kUGF0aCA/IGAke3NDb250ZXh0UGF0aH0vJFBhdGhgIDogc0NvbnRleHRQYXRoO1xuXHRcdGNvbnN0IHNBbm5vUGF0aCA9IGAke3NQYXRofUBgO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3Qoc0Fubm9QYXRoKTtcblx0XHRsZXQgc0Fubm90YXRpb247XG5cdFx0aWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRzQW5ub3RhdGlvbiA9XG5cdFx0XHRcdChvUHJvcGVydHlBbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShJU09DdXJyZW5jeSkgJiYgSVNPQ3VycmVuY3kpIHx8IChvUHJvcGVydHlBbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShVbml0KSAmJiBVbml0KTtcblx0XHRcdGlmIChzQW5ub3RhdGlvbiAmJiAhYkluRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgc1VuaXRPckN1cnJlbmN5UGF0aCA9IGAke3NQYXRoICsgc0Fubm90YXRpb259LyRQYXRoYDtcblx0XHRcdFx0Ly8gd2UgY2hlY2sgdGhhdCB0aGUgY3VycmVuY3kgb3IgdW5pdCBpcyBhIFByb3BlcnR5IGFuZCBub3QgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0XHRpZiAob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3Qoc1VuaXRPckN1cnJlbmN5UGF0aCkpIHtcblx0XHRcdFx0XHRzUGF0aCA9IHNVbml0T3JDdXJyZW5jeVBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZWRpY2F0ZWQgbWV0aG9kIHRvIGF2b2lkIGxvb2tpbmcgZm9yIHVuaXQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgcGF0aFxuXHQgKi9cblx0dmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZDogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBJRCBmb3IgVmFsdWUgSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldElERm9yRmllbGRWYWx1ZUhlbHBcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5tYWNyb3MuZmllbGQuRmllbGRIZWxwZXIuanNcblx0ICogQHBhcmFtIHNGbGV4SWQgRmxleCBJRCBvZiB0aGUgY3VycmVudCBvYmplY3Rcblx0ICogQHBhcmFtIHNJZFByZWZpeCBQcmVmaXggZm9yIHRoZSBWYWx1ZUhlbHAgSURcblx0ICogQHBhcmFtIHNPcmlnaW5hbFByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBWYWx1ZUhlbHAgUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIElEIGdlbmVyYXRlZCBmb3IgdGhlIFZhbHVlSGVscFxuXHQgKi9cblx0Z2V0SURGb3JGaWVsZFZhbHVlSGVscDogZnVuY3Rpb24gKHNGbGV4SWQ6IHN0cmluZyB8IG51bGwsIHNJZFByZWZpeDogc3RyaW5nLCBzT3JpZ2luYWxQcm9wZXJ0eU5hbWU6IHN0cmluZywgc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKHNGbGV4SWQpIHtcblx0XHRcdHJldHVybiBzRmxleElkO1xuXHRcdH1cblx0XHRsZXQgc1Byb3BlcnR5ID0gc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoc09yaWdpbmFsUHJvcGVydHlOYW1lICE9PSBzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzUHJvcGVydHkgPSBgJHtzT3JpZ2luYWxQcm9wZXJ0eU5hbWV9Ojoke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGdlbmVyYXRlKFtzSWRQcmVmaXgsIHNQcm9wZXJ0eV0pO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlSGVscCBwcm9wZXJ0eSBvZiB0aGUgRmlsdGVyRmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkSGVscGVyLmpzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUNvbnRleHQgUHJvcGVydHkgY29udGV4dCBmb3IgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIG9iamVjdCBvZiB0aGUgVmFsdWVIZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzUHJvcGVydHlUeXBlIFRoZSAkVHlwZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNWaElkUHJlZml4IFRoZSBJRCBwcmVmaXggb2YgdGhlIHZhbHVlIGhlbHBcblx0ICogQHBhcmFtIHNQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVmFsdWVIZWxwUHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSBiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIGxpc3Qgd2l0aCBhIGZpeGVkIHZhbHVlIGFubm90YXRpb25cblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBgdHJ1ZWAgaWYgdGhlIHNlbWFudGljIGRhdGUgcmFuZ2UgaXMgc2V0IHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGhlbHAgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGhlbHBcblx0ICovXG5cdGdldFZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LFxuXHRcdG9Qcm9wZXJ0eTogYW55LFxuXHRcdHNQcm9wZXJ0eVR5cGU6IHN0cmluZyxcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRzVmFsdWVIZWxwUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0Ykhhc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbixcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW4gfCBzdHJpbmdcblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBGaWVsZEhlbHBlci5wcm9wZXJ0eU5hbWUob1Byb3BlcnR5LCB7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9KSxcblx0XHRcdGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHByb3BlcnR5Q29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5Q29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01vZGVsLCBzUHJvcGVydHlQYXRoKSxcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc1Byb3BlcnR5TG9jYXRpb25QYXRoLCBvTW9kZWwpO1xuXHRcdGlmIChcblx0XHRcdCgoc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fCBzUHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpICYmXG5cdFx0XHRcdGJTZW1hbnRpY0RhdGVSYW5nZSAmJlxuXHRcdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0gJiZcblx0XHRcdFx0KG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0uaW5jbHVkZXMoXCJTaW5nbGVSYW5nZVwiKSB8fFxuXHRcdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0uaW5jbHVkZXMoXCJTaW5nbGVWYWx1ZVwiKSkpIHx8XG5cdFx0XHQoc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiICYmICFiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIEZpZWxkSGVscGVyLmdldElERm9yRmllbGRWYWx1ZUhlbHAobnVsbCwgc1ZoSWRQcmVmaXggfHwgXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiLCBzUHJvcGVydHlOYW1lLCBzVmFsdWVIZWxwUHJvcGVydHlOYW1lKTtcblx0fSxcblxuXHQvKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgZGVsZWdhdGUgd2l0aCBwYXlsb2FkXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge29iamVjdH0gZGVsZWdhdGVOYW1lIC0gbmFtZSBvZiB0aGUgZGVsZWdhdGUgbWV0aG9kZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgLSBhZGRlZCB0byB0aGUgcGF5bG9hZCBvZiB0aGUgZGVsZWdhdGUgbWV0aG9kZVxuXHQgKiBAcmV0dXJuIHtvYmplY3R9IC0gcmV0dXJucyB0aGUgZGVsZWdhdGUgd2l0aCBwYXlsb2FkXG5cdCAqL1xuXHRjb21wdXRlRmllbGRCYXNlRGVsZWdhdGU6IGZ1bmN0aW9uIChkZWxlZ2F0ZU5hbWU6IHN0cmluZywgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogYm9vbGVhbikge1xuXHRcdGlmIChyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRuYW1lOiBkZWxlZ2F0ZU5hbWUsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYHtuYW1lOiAnJHtkZWxlZ2F0ZU5hbWV9J31gO1xuXHR9LFxuXHRfZ2V0UHJpbWFyeUludGVudHM6IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RzTGlzdDogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XG5cdFx0Y29uc3QgYVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdGlmIChhU2VtYW50aWNPYmplY3RzTGlzdCkge1xuXHRcdFx0Y29uc3Qgb1VzaGVsbENvbnRhaW5lciA9IHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXI7XG5cdFx0XHRjb25zdCBvU2VydmljZSA9IG9Vc2hlbGxDb250YWluZXIgJiYgb1VzaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlKFwiQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cIik7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzZW1PYmplY3QpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzZW1PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChvU2VydmljZS5nZXRQcmltYXJ5SW50ZW50KHNlbU9iamVjdCwge30pKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVNlbU9iamVjdFByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIGFTZW1PYmplY3RQcmltYXJ5QWN0aW9uO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIGZldGNoaW5nIHByaW1hcnkgaW50ZW50c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9KTtcblx0fSxcblx0X2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAoXG5cdFx0b1NlbWFudGljczogYW55LFxuXHRcdGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9uczogYW55LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZSA9IGZ1bmN0aW9uIChfb1NlbWFudGljczogYW55LCBfb1ByaW1hcnlBY3Rpb246IGFueSwgX2luZGV4OiBzdHJpbmcpIHtcblx0XHRcdGZvciAoY29uc3QgdW5hdmFpbGFibGVBY3Rpb25zSW5kZXggaW4gX29TZW1hbnRpY3Muc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbX2luZGV4XS5hY3Rpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRfb1ByaW1hcnlBY3Rpb24uaW50ZW50XG5cdFx0XHRcdFx0XHQuc3BsaXQoXCItXCIpWzFdXG5cdFx0XHRcdFx0XHQuaW5kZXhPZihfb1NlbWFudGljcy5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfaW5kZXhdLmFjdGlvbnNbdW5hdmFpbGFibGVBY3Rpb25zSW5kZXhdKSA9PT0gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cblx0XHRvU2VtYW50aWNzLnNlbWFudGljUHJpbWFyeUFjdGlvbnMgPSBhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnM7XG5cdFx0Y29uc3Qgb1ByaW1hcnlBY3Rpb24gPVxuXHRcdFx0b1NlbWFudGljcy5zZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRvU2VtYW50aWNzLnNlbWFudGljUHJpbWFyeUFjdGlvbnNbb1NlbWFudGljcy5zZW1hbnRpY09iamVjdHMuaW5kZXhPZihvU2VtYW50aWNzLm1haW5TZW1hbnRpY09iamVjdCldO1xuXHRcdGNvbnN0IHNDdXJyZW50SGFzaCA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuZ2V0SGFzaCgpO1xuXHRcdGlmIChvU2VtYW50aWNzLm1haW5TZW1hbnRpY09iamVjdCAmJiAhIW9QcmltYXJ5QWN0aW9uICYmIG9QcmltYXJ5QWN0aW9uLmludGVudCAhPT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIG9TZW1hbnRpY3Muc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpIHtcblx0XHRcdFx0aWYgKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0LmluZGV4T2Yob1NlbWFudGljcy5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tpbmRleF0uc2VtYW50aWNPYmplY3QpID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZShvU2VtYW50aWNzLCBvUHJpbWFyeUFjdGlvbiwgaW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0Y2hlY2tQcmltYXJ5QWN0aW9uczogZnVuY3Rpb24gKG9TZW1hbnRpY3M6IGFueSwgYkdldFRpdGxlTGluazogYm9vbGVhbiwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UHJpbWFyeUludGVudHMob1NlbWFudGljcyAmJiBvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cylcblx0XHRcdC50aGVuKChhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnM6IGFueVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBiR2V0VGl0bGVMaW5rXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHRpdGxlTGluazogYVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRoYXNUaXRsZUxpbms6IHRoaXMuX2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY3MsXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRwYXlsb2FkOiBvU2VtYW50aWNzXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB0aGlzLl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbihvU2VtYW50aWNzLCBhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnMsIGFwcENvbXBvbmVudCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gY2hlY2tQcmltYXJ5QWN0aW9uc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0sXG5cdF9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVyczogZnVuY3Rpb24gKF9vU2VtYW50aWNPYmplY3RNb2RlbDogYW55LCBfbGlua0ludGVudDogc3RyaW5nKSB7XG5cdFx0aWYgKF9vU2VtYW50aWNPYmplY3RNb2RlbCAmJiBfb1NlbWFudGljT2JqZWN0TW9kZWwudGl0bGVsaW5rKSB7XG5cdFx0XHRyZXR1cm4gX29TZW1hbnRpY09iamVjdE1vZGVsLnRpdGxlbGluaztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIF9saW5rSW50ZW50O1xuXHRcdH1cblx0fSxcblxuXHRnZXRQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAob1NlbWFudGljczogYW55KSB7XG5cdFx0cmV0dXJuIG9TZW1hbnRpY3Muc2VtYW50aWNQcmltYXJ5QWN0aW9uc1tvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0KV0uaW50ZW50XG5cdFx0XHQ/IEZpZWxkSGVscGVyLl9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvU2VtYW50aWNzLFxuXHRcdFx0XHRcdG9TZW1hbnRpY3Muc2VtYW50aWNQcmltYXJ5QWN0aW9uc1tvU2VtYW50aWNzLnNlbWFudGljT2JqZWN0cy5pbmRleE9mKG9TZW1hbnRpY3MubWFpblNlbWFudGljT2JqZWN0KV0uaW50ZW50XG5cdFx0XHQgIClcblx0XHRcdDogb1NlbWFudGljcy5wcmltYXJ5SW50ZW50QWN0aW9uO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZldGNoIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zLiBGaWx0ZXIgcmVzdHJpY3Rpb25zIGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdCAqIERlcGVuZGluZyBvbiB0aGUgcGF0aCB0byB3aGljaCB0aGUgY29udHJvbCBpcyBib3VuZCwgd2UgY2hlY2sgZm9yIGZpbHRlciByZXN0cmljdGlvbnMgb24gdGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgY29udHJvbCxcblx0ICogb3Igb24gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgKGlmIHRoZXJlIGlzIGEgbmF2aWdhdGlvbikuXG5cdCAqIEVnLiBJZiB0aGUgdGFibGUgaXMgYm91bmQgdG8gJy9FbnRpdHlTZXQnLCBmb3IgcHJvcGVydHkgcGF0aCAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24vUHJvcGVydHlOYW1lJywgdGhlIGZpbHRlciByZXN0cmljdGlvbnNcblx0ICogb24gJy9FbnRpdHlTZXQnIHdpbiBvdmVyIGZpbHRlciByZXN0cmljdGlvbnMgb24gJy9FbnRpdHlTZXQvX0Fzc29jaWF0aW9uJy5cblx0ICogSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicsIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicgd2luIG92ZXIgZmlsdGVyXG5cdCAqIHJldHJpY3Rpb25zIG9uICcvQXNzb2NpYXRpb25FbnRpdHlTZXQnLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgUHJvcGVydHkgQ29udGV4dFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5IFByb3BlcnR5IG9iamVjdCBpbiB0aGUgbWV0YWRhdGFcblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIFN1Z2dlc3RzIGlmIHNlbWFudGljIGRhdGUgcmFuZ2Ugc2hvdWxkIGJlIHVzZWRcblx0ICogQHBhcmFtIHNTZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBQYXRoIHRvIHdoaWNoIHRoZSBwYXJlbnQgY29udHJvbCAodGhlIHRhYmxlIG9yIHRoZSBmaWx0ZXIgYmFyKSBpcyBib3VuZFxuXHQgKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRvcnMgZm9yIGZpbHRlcmluZ1xuXHQgKi9cblx0b3BlcmF0b3JzOiBmdW5jdGlvbiAob0NvbnRleHQ6IEJhc2VDb250ZXh0LCBvUHJvcGVydHk6IGFueSwgYlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuLCBzU2V0dGluZ3M6IHN0cmluZywgY29udGV4dFBhdGg6IHN0cmluZykge1xuXHRcdC8vIHRoaXMgaXMgdXNlZCBpbiBGaWx0ZXJGaWVsZC5ibG9ja1xuXHRcdGlmICghb1Byb3BlcnR5IHx8ICFjb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9wZXJhdG9yczogc3RyaW5nW107XG5cdFx0Y29uc3Qgc1Byb3BlcnR5ID0gRmllbGRIZWxwZXIucHJvcGVydHlOYW1lKG9Qcm9wZXJ0eSwgeyBjb250ZXh0OiBvQ29udGV4dCB9KTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0cHJvcGVydHlUeXBlID0gb1Byb3BlcnR5LiRUeXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uR3VpZFwiKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlICcvJ1xuXHRcdGNvbnRleHRQYXRoID0gY29udGV4dFBhdGguc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IGlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbjogYm9vbGVhbiA9IGNvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IDA7XG5cdFx0Y29uc3QgaXNOYXZpZ2F0aW9uUGF0aDogYm9vbGVhbiA9XG5cdFx0XHQoaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uICYmIGNvbnRleHRQYXRoICE9PSBzUHJvcGVydHlMb2NhdGlvblBhdGgpIHx8XG5cdFx0XHQoIWlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gMCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGg6IHN0cmluZyA9XG5cdFx0XHQoaXNOYXZpZ2F0aW9uUGF0aCAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGguc3Vic3RyKHNQcm9wZXJ0eUxvY2F0aW9uUGF0aC5pbmRleE9mKGNvbnRleHRQYXRoKSArIGNvbnRleHRQYXRoLmxlbmd0aCArIDEpKSB8fCBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gKGlzTmF2aWdhdGlvblBhdGggJiYgbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eSkgfHwgc1Byb3BlcnR5O1xuXG5cdFx0aWYgKCFpc1RhYmxlQm91bmRUb05hdmlnYXRpb24pIHtcblx0XHRcdGlmICghaXNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdFx0XHQvLyAvU2FsZXNPcmRlck1hbmFnZS9JRFxuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoLFxuXHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hbmdlL19JdGVtL01hdGVyaWFsXG5cdFx0XHRcdC8vbGV0IG9wZXJhdG9yc1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghaXNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hZ2UvX0l0ZW0vTWF0ZXJpYWxcblx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRpZiAob3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChjb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0b3JzPy5sZW5ndGggPiAwID8gb3BlcmF0b3JzLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19Bc3NvY2lhdGlvbi9Qcm9wZXJ0eU5hbWVcblx0XHRcdC8vIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlc1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGNvbnRleHRQYXRoKSxcblx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoKCFvcGVyYXRvcnMgfHwgb3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkgJiYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8IHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikpIHtcblx0XHRcdG9wZXJhdG9ycyA9IENvbW1vblV0aWxzLmdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9ycy50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBEYUZpZWxkRGVmYXVsdCAoaWYgYW55KS4gT3RoZXJ3aXNlLCB0aGUgRGF0YUZpZWxkIHBhdGggaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udGV4dCBDb250ZXh0IG9mIHRoZSBEYXRhRmllbGRcblx0ICogQHJldHVybnMgT2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFGaWVsZERlZmF1bHQ6IGZ1bmN0aW9uIChvRGF0YUZpZWxkQ29udGV4dDogYW55KSB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIGNvbHVtbi5mcmFnbWVudFxuXHRcdGNvbnN0IG9EYXRhRmllbGREZWZhdWx0ID0gb0RhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuZ2V0T2JqZWN0KGAke29EYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdHJldHVybiBvRGF0YUZpZWxkRGVmYXVsdFxuXHRcdFx0PyBgJHtvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgXG5cdFx0XHQ6IG9EYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKTtcblx0fSxcblx0Lypcblx0ICogTWV0aG9kIHRvIGdldCB2aXNpYmxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEFjdGlvbkJ1dHRvblxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvVGhpcyAtIEN1cnJlbnQgT2JqZWN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YUZpZWxkIC0gRGF0YVBvaW50J3MgVmFsdWVcblx0ICogQHBhcmFtIHtib29sZWFufSBiSXNCb3VuZCAtIERhdGFQb2ludCBhY3Rpb24gYm91bmRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9BY3Rpb25Db250ZXh0IC0gQWN0aW9uQ29udGV4dCBWYWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufSAtIHJldHVybnMgYm9vbGVhblxuXHQgKi9cblx0aXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlOiBmdW5jdGlvbiAob1RoaXM6IGFueSwgb0RhdGFGaWVsZDogYW55LCBiSXNCb3VuZDogYW55LCBvQWN0aW9uQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSB0cnVlICYmIChiSXNCb3VuZCAhPT0gdHJ1ZSB8fCBvQWN0aW9uQ29udGV4dCAhPT0gZmFsc2UpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCBwcmVzcyBldmVudCBmb3IgRGF0YUZpZWxkQWN0aW9uQnV0dG9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEFjdGlvbkJ1dHRvblxuXHQgKiBAcGFyYW0gb1RoaXMgQ3VycmVudCBPYmplY3Rcblx0ICogQHBhcmFtIG9EYXRhRmllbGQgRGF0YVBvaW50J3MgVmFsdWVcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERhdGFGaWVsZEFjdGlvbkJ1dHRvbiBwcmVzcyBldmVudFxuXHQgKi9cblx0Z2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEFjdGlvbkJ1dHRvbjogZnVuY3Rpb24gKG9UaGlzOiBhbnksIG9EYXRhRmllbGQ6IGFueSkge1xuXHRcdGxldCBzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJJc29sYXRlZFwiO1xuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZy4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHQpIHtcblx0XHRcdHNJbnZvY2F0aW9uR3JvdXBpbmcgPSBcIkNoYW5nZVNldFwiO1xuXHRcdH1cblx0XHRsZXQgYklzTmF2aWdhYmxlID0gb1RoaXMubmF2aWdhdGVBZnRlckFjdGlvbjtcblx0XHRiSXNOYXZpZ2FibGUgPSBiSXNOYXZpZ2FibGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZTtcblxuXHRcdGNvbnN0IGVudGl0aWVzOiBBcnJheTxzdHJpbmc+ID0gb1RoaXM/LmVudGl0eVNldD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRjb250ZXh0czogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXBpbmcpLFxuXHRcdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRcdGxhYmVsOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpLFxuXHRcdFx0aXNOYXZpZ2FibGU6IGJJc05hdmlnYWJsZSxcblx0XHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZW50aXR5U2V0TmFtZSlcblx0XHR9O1xuXG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0XCIuZWRpdEZsb3cuaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKVxuXHRcdCk7XG5cdH0sXG5cblx0aXNOdW1lcmljRGF0YVR5cGU6IGZ1bmN0aW9uIChzRGF0YUZpZWxkVHlwZTogYW55KSB7XG5cdFx0Y29uc3QgX3NEYXRhRmllbGRUeXBlID0gc0RhdGFGaWVsZFR5cGU7XG5cdFx0aWYgKF9zRGF0YUZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhTnVtZXJpY0RhdGFUeXBlcyA9IFtcblx0XHRcdFx0XCJFZG0uSW50MTZcIixcblx0XHRcdFx0XCJFZG0uSW50MzJcIixcblx0XHRcdFx0XCJFZG0uSW50NjRcIixcblx0XHRcdFx0XCJFZG0uQnl0ZVwiLFxuXHRcdFx0XHRcIkVkbS5TQnl0ZVwiLFxuXHRcdFx0XHRcIkVkbS5TaW5nbGVcIixcblx0XHRcdFx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcdFx0XHRcIkVkbS5Eb3VibGVcIlxuXHRcdFx0XTtcblx0XHRcdHJldHVybiAhYU51bWVyaWNEYXRhVHlwZXMuaW5jbHVkZXMoX3NEYXRhRmllbGRUeXBlKSA/IGZhbHNlIDogdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHRpc0RhdGVPclRpbWVEYXRhVHlwZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVR5cGU6IGFueSkge1xuXHRcdGlmIChzUHJvcGVydHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFEYXRlVGltZURhdGFUeXBlcyA9IFtcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5EYXRlVGltZVwiLCBcIkVkbS5EYXRlXCIsIFwiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCJdO1xuXHRcdFx0cmV0dXJuIGFEYXRlVGltZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNEYXRlVGltZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogYW55KSB7XG5cdFx0aWYgKHNQcm9wZXJ0eVR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYURhdGVEYXRhVHlwZXMgPSBbXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiwgXCJFZG0uRGF0ZVRpbWVcIl07XG5cdFx0XHRyZXR1cm4gYURhdGVEYXRhVHlwZXMuaW5jbHVkZXMoc1Byb3BlcnR5VHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdGlzRGF0ZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogYW55KSB7XG5cdFx0cmV0dXJuIHNQcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIjtcblx0fSxcblx0aXNUaW1lRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBhbnkpIHtcblx0XHRpZiAoc1Byb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhRGF0ZURhdGFUeXBlcyA9IFtcIkVkbS5UaW1lT2ZEYXlcIiwgXCJFZG0uVGltZVwiXTtcblx0XHRcdHJldHVybiBhRGF0ZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVG8gZGlzcGxheSBhIHRleHQgYXJyYW5nZW1lbnQgc2hvd2luZyB0ZXh0IGFuZCBpZCwgd2UgbmVlZCBhIHN0cmluZyBmaWVsZCBvbiB0aGUgVUkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQW5ub3RhdGlvbnMgQWxsIHRoZSBhbm5vdGF0aW9ucyBvZiBhIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVHlwZSBUaGUgcHJvcGVydHkgZGF0YSB0eXBlXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIHRvIGJlIHVzZWQgb24gdGhlIFVJIGZvciB0aGUgYWxpZ25tZW50XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb246IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSwgc1R5cGU6IHN0cmluZykge1xuXHRcdGNvbnN0IHNUZXh0QW5ub3RhdGlvbiA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCIsXG5cdFx0XHRzVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiO1xuXG5cdFx0Lypcblx0XHQgIEluIGNhc2Ugb2YgVGV4dFNlcGFyYXRlLCB0aGUgcmV0dXJuZWQgaXMgdXNlZCBmb3IgdGhlIGZpbGVkIGl0c2VsZiBvbmx5IHNob3dpbmdcblx0XHQgICB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIHByb3BlcnR5LCB0aHVzIGFsc28gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IG5lZWRzIHRvIGJlIHVzZWQuXG5cdFx0ICBJbiBjYXNlIG9mIFRleHRPbmx5LCB3ZSBjb25zaWRlciBpdCB0byBiZSBFZG0uU3RyaW5nIGFjY29yZGluZyB0byB0aGUgZGVmaW5pdGlvblxuXHRcdCAgIGluIHRoZSB2b2NhYnVsYXJ5LCBldmVuIGlmIGl0J3Mgbm90LlxuXHRcdCAgSW4gb3RoZXIgY2FzZXMsIHdlIHJldHVybiBFZG0uU3RyaW5nLCBhcyB0aGUgdmFsdWUgaXMgYnVpbGQgdXNpbmcgYSB0ZXh0IHRlbXBsYXRlLlxuXHRcdCAqL1xuXHRcdHJldHVybiBvQW5ub3RhdGlvbnM/LltzVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbl0/LiRFbnVtTWVtYmVyICE9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIgJiZcblx0XHRcdG9Bbm5vdGF0aW9ucz8uW3NUZXh0QW5ub3RhdGlvbl0/LiRQYXRoXG5cdFx0XHQ/IFwiRWRtLlN0cmluZ1wiXG5cdFx0XHQ6IHNUeXBlO1xuXHR9LFxuXG5cdGdldENvbHVtbkFsaWdubWVudDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgb1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9UYWJsZS5jb2xsZWN0aW9uLnNQYXRoLFxuXHRcdFx0b01vZGVsID0gb1RhYmxlLmNvbGxlY3Rpb24ub01vZGVsO1xuXHRcdGlmIChcblx0XHRcdChvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgfHxcblx0XHRcdFx0b0RhdGFGaWVsZFtcIiRUeXBlXCJdID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JbmxpbmUgJiZcblx0XHRcdG9EYXRhRmllbGQuSWNvblVybFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIFwiQ2VudGVyXCI7XG5cdFx0fVxuXHRcdC8vIENvbHVtbnMgY29udGFpbmluZyBhIFNlbWFudGljIEtleSBtdXN0IGJlIEJlZ2luIGFsaWduZWRcblx0XHRjb25zdCBhU2VtYW50aWNLZXlzID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWApO1xuXHRcdGlmIChvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBvRGF0YUZpZWxkLlZhbHVlLiRQYXRoO1xuXHRcdFx0Y29uc3QgYklzU2VtYW50aWNLZXkgPVxuXHRcdFx0XHRhU2VtYW50aWNLZXlzICYmXG5cdFx0XHRcdCFhU2VtYW50aWNLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChvS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0tleS4kUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmIChiSXNTZW1hbnRpY0tleSkge1xuXHRcdFx0XHRyZXR1cm4gXCJCZWdpblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkQWxpZ25tZW50KG9EYXRhRmllbGQsIG9Nb2RlbCwgc0VudGl0eVBhdGgpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IGFsaWdubWVudCBiYXNlZCBvbmx5IG9uIHRoZSBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIHNUeXBlIFRoZSBwcm9wZXJ0eSdzIHR5cGVcblx0ICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zIFRoZSBmaWVsZCBmb3JtYXQgb3B0aW9uc1xuXHQgKiBAcGFyYW0gW29Db21wdXRlZEVkaXRNb2RlXSBUaGUgY29tcHV0ZWQgRWRpdCBtb2RlIG9mIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB3aGVuIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHRoZSBDb2x1bW5Qcm9wZXJ0eSBmcmFnbWVudFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgYWxpZ25tZW50XG5cdCAqL1xuXHRnZXRQcm9wZXJ0eUFsaWdubWVudDogZnVuY3Rpb24gKHNUeXBlOiBzdHJpbmcsIG9Gb3JtYXRPcHRpb25zOiBhbnksIG9Db21wdXRlZEVkaXRNb2RlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pIHtcblx0XHRsZXQgc0RlZmF1bHRBbGlnbm1lbnQgPSBcIkJlZ2luXCIgYXMgYW55O1xuXHRcdGNvbnN0IHNUZXh0QWxpZ25tZW50ID0gb0Zvcm1hdE9wdGlvbnMgPyBvRm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlIDogXCJcIjtcblx0XHRzd2l0Y2ggKHNUZXh0QWxpZ25tZW50KSB7XG5cdFx0XHRjYXNlIFwiRm9ybVwiOlxuXHRcdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IFwiQmVnaW5cIjtcblx0XHRcdFx0XHRpZiAob0NvbXB1dGVkRWRpdE1vZGUpIHtcblx0XHRcdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50RXhwcmVzc2lvbihvQ29tcHV0ZWRFZGl0TW9kZSwgXCJCZWdpblwiLCBcIkVuZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkgfHwgdGhpcy5pc0RhdGVPclRpbWVEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IFwiUmlnaHRcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHNEZWZhdWx0QWxpZ25tZW50O1xuXHR9LFxuXG5cdGdldERhdGFGaWVsZEFsaWdubWVudDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgb01vZGVsOiBhbnksIHNFbnRpdHlQYXRoOiBhbnksIG9Gb3JtYXRPcHRpb25zPzogYW55LCBvQ29tcHV0ZWRFZGl0TW9kZT86IGFueSkge1xuXHRcdGxldCBzRGF0YUZpZWxkUGF0aCxcblx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gXCJCZWdpblwiLFxuXHRcdFx0c1R5cGUsXG5cdFx0XHRvQW5ub3RhdGlvbnM7XG5cblx0XHRpZiAob0RhdGFGaWVsZFtcIiRUeXBlXCJdID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFBhdGggPSBvRGF0YUZpZWxkLlRhcmdldC4kQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0W1wiJEFubm90YXRpb25QYXRoXCJdICYmXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0W1wiJEFubm90YXRpb25QYXRoXCJdLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID49IDBcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9YCk7XG5cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvRmllbGRHcm91cC5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS8ke3NEYXRhRmllbGRQYXRofS9EYXRhLyR7aS50b1N0cmluZygpfS9WYWx1ZS8kUGF0aC8kVHlwZWApO1xuXHRcdFx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9L0RhdGEvJHtpLnRvU3RyaW5nKCl9L1ZhbHVlLyRQYXRoQGApO1xuXHRcdFx0XHRcdHNUeXBlID0gdGhpcy5nZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24ob0Fubm90YXRpb25zLCBzVHlwZSk7XG5cdFx0XHRcdFx0c0RlZmF1bHRBbGlnbm1lbnQgPSB0aGlzLmdldFByb3BlcnR5QWxpZ25tZW50KHNUeXBlLCBvRm9ybWF0T3B0aW9ucywgb0NvbXB1dGVkRWRpdE1vZGUpO1xuXG5cdFx0XHRcdFx0aWYgKHNEZWZhdWx0QWxpZ25tZW50ID09PSBcIkJlZ2luXCIpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldFtcIiRBbm5vdGF0aW9uUGF0aFwiXSAmJlxuXHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldFtcIiRBbm5vdGF0aW9uUGF0aFwiXS5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID49IDAgJiZcblx0XHRcdFx0b01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlcmApID09PVxuXHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzVHlwZSA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9LyRUeXBlYCk7XG5cdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCIpIHtcblx0XHRcdFx0XHRzVHlwZSA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9L1ZhbHVlLyRQYXRoLyRUeXBlYCk7XG5cdFx0XHRcdFx0b0Fubm90YXRpb25zID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vVmFsdWUvJFBhdGhAYCk7XG5cdFx0XHRcdFx0c1R5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihvQW5ub3RhdGlvbnMsIHNUeXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzRGVmYXVsdEFsaWdubWVudCA9IHRoaXMuZ2V0UHJvcGVydHlBbGlnbm1lbnQoc1R5cGUsIG9Gb3JtYXRPcHRpb25zLCBvQ29tcHV0ZWRFZGl0TW9kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNEYXRhRmllbGRQYXRoID0gb0RhdGFGaWVsZC5WYWx1ZS4kUGF0aDtcblx0XHRcdHNUeXBlID0gb01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vJHtzRGF0YUZpZWxkUGF0aH0vJFR5cGVgKTtcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9LyR7c0RhdGFGaWVsZFBhdGh9QGApO1xuXHRcdFx0c1R5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihvQW5ub3RhdGlvbnMsIHNUeXBlKTtcblx0XHRcdGNvbnN0IGtleXMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9gKVtcIiRLZXlcIl07XG5cdFx0XHRpZiAoa2V5cyAmJiBrZXlzLmluZGV4T2Yoc0RhdGFGaWVsZFBhdGgpICE9PSAwKSB7XG5cdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudChzVHlwZSwgb0Zvcm1hdE9wdGlvbnMsIG9Db21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNEZWZhdWx0QWxpZ25tZW50O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGVuYWJsZWQgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkQWN0aW9uQnV0dG9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBiSXNCb3VuZCBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dCBBY3Rpb25Db250ZXh0IFZhbHVlXG5cdCAqIEBwYXJhbSBzQWN0aW9uQ29udGV4dEZvcm1hdCBGb3JtYXR0ZWQgdmFsdWUgb2YgQWN0aW9uQ29udGV4dFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gb3Igc3RyaW5nIGV4cHJlc3Npb24gZm9yIGVuYWJsZWQgcHJvcGVydHlcblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgYklzQm91bmQ6IGJvb2xlYW4sIG9BY3Rpb25Db250ZXh0OiBhbnksIHNBY3Rpb25Db250ZXh0Rm9ybWF0OiBzdHJpbmcpIHtcblx0XHRpZiAoYklzQm91bmQgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIChvQWN0aW9uQ29udGV4dCA9PT0gbnVsbCA/IFwiez0gISR7I1wiICsgb0RhdGFGaWVsZC5BY3Rpb24gKyBcIn0gPyBmYWxzZSA6IHRydWUgfVwiIDogb0FjdGlvbkNvbnRleHQpXG5cdFx0XHQ/IHNBY3Rpb25Db250ZXh0Rm9ybWF0XG5cdFx0XHQ6IFwidHJ1ZVwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY29tcHV0ZSB0aGUgbGFiZWwgZm9yIGEgRGF0YUZpZWxkLlxuXHQgKiBJZiB0aGUgRGF0YUZpZWxkJ3MgbGFiZWwgaXMgYW4gZW1wdHkgc3RyaW5nLCBpdCdzIG5vdCByZW5kZXJlZCBldmVuIGlmIGEgZmFsbGJhY2sgZXhpc3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgY29tcHV0ZUxhYmVsVGV4dFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGZvciBjb250ZXh0IGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21wdXRlZCB0ZXh0IGZvciB0aGUgRGF0YUZpZWxkIGxhYmVsLlxuXHQgKi9cblxuXHRjb21wdXRlTGFiZWxUZXh0OiBmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55LCBvSW50ZXJmYWNlOiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoc0NvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnNsaWNlKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdH1cblx0XHRjb25zdCBzRGF0YUZpZWxkTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vTGFiZWxgKTtcblx0XHQvL1dlIGRvIG5vdCBzaG93IGFuIGFkZGl0aW9uYWwgbGFiZWwgdGV4dCBmb3IgYSBidXR0b246XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRMYWJlbDtcblx0XHR9IGVsc2UgaWYgKHNEYXRhRmllbGRMYWJlbCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGxldCBzRGF0YUZpZWxkVGFyZ2V0VGl0bGU7XG5cdFx0aWYgKG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xIHx8XG5cdFx0XHRcdG9EYXRhRmllbGQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID4gLTFcblx0XHRcdCkge1xuXHRcdFx0XHRzRGF0YUZpZWxkVGFyZ2V0VGl0bGUgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aEAvVGl0bGVgKTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YUZpZWxkLlRhcmdldC4kQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIikgPiAtMSkge1xuXHRcdFx0XHRzRGF0YUZpZWxkVGFyZ2V0VGl0bGUgPSBvTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NDb250ZXh0UGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aEAvZm4vJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZFRhcmdldFRpdGxlKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldFRpdGxlO1xuXHRcdH1cblx0XHRsZXQgc0RhdGFGaWVsZFRhcmdldExhYmVsO1xuXHRcdGlmIChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFRhcmdldExhYmVsID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL0xhYmVsYCk7XG5cdFx0fVxuXHRcdGlmIChzRGF0YUZpZWxkVGFyZ2V0TGFiZWwpIHtcblx0XHRcdHJldHVybiBzRGF0YUZpZWxkVGFyZ2V0TGFiZWw7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0RhdGFGaWVsZFZhbHVlTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCk7XG5cdFx0aWYgKHNEYXRhRmllbGRWYWx1ZUxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFZhbHVlTGFiZWw7XG5cdFx0fVxuXG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsO1xuXHRcdGlmIChvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIikge1xuXHRcdFx0c0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWwgPSBvTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldFZhbHVlTGFiZWw7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFsaWduIHRoZSBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGxhYmVsLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtc1xuXHQgKiBAcGFyYW0gc1Zpc3VhbGl6YXRpb25cblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBiaW5kaW5nIGZvciBhbGlnbkl0ZW1zIHByb3BlcnR5XG5cdCAqL1xuXHRidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zOiBmdW5jdGlvbiAoc1Zpc3VhbGl6YXRpb246IHN0cmluZykge1xuXHRcdGNvbnN0IGZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uID0gY29uc3RhbnQoc1Zpc3VhbGl6YXRpb24pO1xuXHRcdGNvbnN0IHByb2dyZXNzVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uID0gY29uc3RhbnQoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKTtcblx0XHRjb25zdCByYXRpbmdWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKFxuXHRcdFx0XHRcdGVxdWFsKGZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uLCBwcm9ncmVzc1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0ZXF1YWwoZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24sIHJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbilcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29uc3RhbnQoXCJDZW50ZXJcIiksXG5cdFx0XHRcdGlmRWxzZShVSS5Jc0VkaXRhYmxlLCBjb25zdGFudChcIkNlbnRlclwiKSwgY29uc3RhbnQoXCJTdHJldGNoXCIpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBjaGVjayBWYWx1ZUxpc3RSZWZlcmVuY2VzLCBWYWx1ZUxpc3RNYXBwaW5nIGFuZCBWYWx1ZUxpc3QgaW5zaWRlIEFjdGlvblBhcmFtZXRlcnMgZm9yIFZhbHVlSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhc1ZhbHVlSGVscFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgQWN0aW9uIHBhcmFtZXRlciBvYmplY3Rcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgVmFsdWVMaXN0KiBhbm5vdGF0aW9uIGRlZmluZWRcblx0ICovXG5cdGhhc1ZhbHVlSGVscEFubm90YXRpb246IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0aWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gISEoXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWZlcmVuY2VzXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgZGlzcGxheSBwcm9wZXJ0eSBmb3IgQWN0aW9uUGFyYW1ldGVyIGRpYWxvZy5cblx0ICpcblx0ICogXHRAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0XG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGRpc3BsYXkgZm9ybWF0ICBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBGaWVsZFxuXHQgKi9cblx0Z2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0OiBmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnksIG9JbnRlcmZhY2U6IGFueSkge1xuXHRcdGxldCBvQW5ub3RhdGlvbjtcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBvUHJvcGVydHkuJE5hbWUgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFByb3BlcnR5KGAke3NDb250ZXh0UGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdGNvbnN0IG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBgKTtcblx0XHRjb25zdCBvVmFsdWVIZWxwQW5ub3RhdGlvbiA9XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nXCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlZmVyZW5jZXNcIl07XG5cdFx0Y29uc3QgZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lID0gZnVuY3Rpb24gKG9WYWx1ZUxpc3Q6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdFBhcmFtZXRlciA9IG9WYWx1ZUxpc3QuUGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkgJiYgb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUHJvcGVydHlOYW1lO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb1ZhbHVlTGlzdFBhcmFtZXRlciAmJiBvVmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdH07XG5cdFx0bGV0IHNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QXJyYW5nZW1lbnRcIl0gfHxcblx0XHRcdG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl1cblx0XHQpIHtcblx0XHRcdHJldHVybiBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zLCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAob1ZhbHVlSGVscEFubm90YXRpb24pIHtcblx0XHRcdGlmIChvVmFsdWVIZWxwQW5ub3RhdGlvbi5Db2xsZWN0aW9uUGF0aCkge1xuXHRcdFx0XHQvLyBnZXQgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaW4gdmFsdWUgbGlzdCBjb2xsZWN0aW9uXG5cdFx0XHRcdHNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUgPSBnZXRWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUob1ZhbHVlSGVscEFubm90YXRpb24pO1xuXHRcdFx0XHRpZiAoIXNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGdldCB0ZXh0IGZvciB0aGlzIHByb3BlcnR5XG5cdFx0XHRcdG9Bbm5vdGF0aW9uID0gb01vZGVsLmdldE9iamVjdChgLyR7b1ZhbHVlSGVscEFubm90YXRpb24uQ29sbGVjdGlvblBhdGh9LyR7c1ZhbHVlTGlzdFByb3BlcnR5TmFtZX1AYCk7XG5cdFx0XHRcdHJldHVybiBvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Bbm5vdGF0aW9uLCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0OiBcIlZhbHVlXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHNDb250ZXh0UGF0aCwgdHJ1ZSkudGhlbihmdW5jdGlvbiAob1ZhbHVlTGlzdEluZm86IGFueSkge1xuXHRcdFx0XHRcdC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiB2YWx1ZSBsaXN0IGNvbGxlY3Rpb25cblx0XHRcdFx0XHRzVmFsdWVMaXN0UHJvcGVydHlOYW1lID0gZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lKG9WYWx1ZUxpc3RJbmZvW1wiXCJdKTtcblx0XHRcdFx0XHRpZiAoIXNWYWx1ZUxpc3RQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGdldCB0ZXh0IGZvciB0aGlzIHByb3BlcnR5XG5cdFx0XHRcdFx0b0Fubm90YXRpb24gPSBvVmFsdWVMaXN0SW5mb1tcIlwiXS4kbW9kZWxcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgLyR7b1ZhbHVlTGlzdEluZm9bXCJcIl1bXCJDb2xsZWN0aW9uUGF0aFwiXX0vJHtzVmFsdWVMaXN0UHJvcGVydHlOYW1lfUBgKTtcblx0XHRcdFx0XHRyZXR1cm4gb0Fubm90YXRpb24gJiYgb0Fubm90YXRpb25bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Bbm5vdGF0aW9uLCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHQ6IFwiVmFsdWVcIjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHR9LFxuXHQvKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGRpc3BsYXkgcHJvcGVydHkgZm9yIEFjdGlvblBhcmFtZXRlciBkaWFsb2cgVmFsdWVIZWxwLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwXG5cdCAqIEBwYXJhbSBvQWN0aW9uUGFyYW1ldGVyIEFjdGlvbiBwYXJhbWV0ZXIgb2JqZWN0XG5cdCAqIEBwYXJhbSBzU2FwVUlOYW1lIEFjdGlvbiBzYXB1aSBuYW1lXG5cdCAqIEBwYXJhbSBzUGFyYW1OYW1lIFRoZSBwYXJhbWV0ZXIgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIGZpZWxkSGVscCB1c2VkIGJ5IHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwOiBmdW5jdGlvbiAob0FjdGlvblBhcmFtZXRlcjogb2JqZWN0LCBzU2FwVUlOYW1lOiBzdHJpbmcsIHNQYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzVmFsdWVIZWxwQW5ub3RhdGlvbihvQWN0aW9uUGFyYW1ldGVyKSA/IGdlbmVyYXRlKFtzU2FwVUlOYW1lLCBzUGFyYW1OYW1lXSkgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBkZWxlZ2F0ZSBjb25maWd1cmF0aW9uIGZvciBBY3Rpb25QYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0VmFsdWVIZWxwRGVsZWdhdGVcblx0ICogQHBhcmFtIGlzQm91bmQgQWN0aW9uIGlzIGJvdW5kXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlUGF0aCBUaGUgRW50aXR5VHlwZSBQYXRoXG5cdCAqIEBwYXJhbSBzYXBVSU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1OYW1lIFRoZSBuYW1lIG9mIHRoZSBBY3Rpb25QYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKGlzQm91bmQ6IGJvb2xlYW4sIGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsIHNhcFVJTmFtZTogc3RyaW5nLCBwYXJhbU5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IGRlbGVnYXRlQ29uZmlndXJhdGlvbjogeyBuYW1lOiBzdHJpbmc7IHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQgfSA9IHtcblx0XHRcdG5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiKSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFxuXHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5nZXRQcm9wZXJ0eVBhdGgoe1xuXHRcdFx0XHRcdFx0VW5ib3VuZEFjdGlvbjogIWlzQm91bmQsXG5cdFx0XHRcdFx0XHRFbnRpdHlUeXBlUGF0aDogZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdFx0XHRBY3Rpb246IHNhcFVJTmFtZSxcblx0XHRcdFx0XHRcdFByb3BlcnR5OiBwYXJhbU5hbWVcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwiXCIpLFxuXHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZzogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24pO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBmb3IgTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQgZGlhbG9nLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0VmFsdWVIZWxwRGVsZWdhdGVGb3JOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBjdXJyZW50IHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZUZvck5vbkNvbXB1dGVkVmlzaWJsZUtleUZpZWxkOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBkZWxlZ2F0ZUNvbmZpZ3VyYXRpb246IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIH0gPSB7XG5cdFx0XHRuYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIiksXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdHByb3BlcnR5UGF0aDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3Rlcyhwcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKFwiXCIpXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKGRlbGVnYXRlQ29uZmlndXJhdGlvbik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCBlbnRpdHkgZnJvbSBhIHBhdGggY29udGFpbmluZyBtdWx0aXBsZSBhc3NvY2lhdGlvbnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RW50aXR5U2V0RnJvbU11bHRpTGV2ZWxcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHdob3NlIHBhdGggaXMgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggZnJvbSB3aGljaCBlbnRpdHkgaGFzIHRvIGJlIGZldGNoZWRcblx0ICogQHBhcmFtIHNTb3VyY2VFbnRpdHkgVGhlIGVudGl0eSBwYXRoIGluIHdoaWNoIG5hdiBlbnRpdHkgZXhpc3RzXG5cdCAqIEBwYXJhbSBpU3RhcnQgVGhlIHN0YXJ0IGluZGV4IDogYmVnaW5uaW5nIHBhcnRzIG9mIHRoZSBwYXRoIHRvIGJlIGlnbm9yZWRcblx0ICogQHBhcmFtIGlEaWZmIFRoZSBkaWZmIGluZGV4IDogZW5kIHBhcnRzIG9mIHRoZSBwYXRoIHRvIGJlIGlnbm9yZWRcblx0ICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGVudGl0eSBzZXRcblx0ICovXG5cdF9nZXRFbnRpdHlTZXRGcm9tTXVsdGlMZXZlbDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0LCBzUGF0aDogc3RyaW5nLCBzU291cmNlRW50aXR5OiBzdHJpbmcsIGlTdGFydDogYW55LCBpRGlmZjogYW55KSB7XG5cdFx0bGV0IGFOYXZQYXJ0cyA9IHNQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0YU5hdlBhcnRzID0gYU5hdlBhcnRzLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHNQYXJ0ICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdFx0fSk7XG5cdFx0aWYgKGFOYXZQYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gaVN0YXJ0OyBpIDwgYU5hdlBhcnRzLmxlbmd0aCAtIGlEaWZmOyBpKyspIHtcblx0XHRcdFx0c1NvdXJjZUVudGl0eSA9IGAvJHtvQ29udGV4dC5nZXRPYmplY3QoYCR7c1NvdXJjZUVudGl0eX0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHthTmF2UGFydHNbaV19YCl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNTb3VyY2VFbnRpdHk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZW4gdGhlIHZhbHVlIGRpc3BsYXllZCBpcyBpbiB0ZXh0IGFycmFuZ2VtZW50IFRleHRPbmx5IHdlIGFsc28gd2FudCB0byByZXRyaWV2ZSB0aGUgVGV4dCB2YWx1ZSBmb3IgdGFibGVzIGV2ZW4gaWYgd2UgZG9uJ3Qgc2hvdyBpdC5cblx0ICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBvcmlnaW5hbCBkYXRhIGZpZWxkLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RoaXMgVGhlIGN1cnJlbnQgb2JqZWN0XG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkVGV4dEFycmFuZ2VtZW50IERhdGFGaWVsZCB1c2luZyB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb25cblx0ICogQHBhcmFtIG9EYXRhRmllbGQgRGF0YUZpZWxkIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHVzaW5nIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyB0byB0aGUgdmFsdWVcblx0ICovXG5cdGdldEJpbmRpbmdJbmZvRm9yVGV4dEFycmFuZ2VtZW50OiBmdW5jdGlvbiAob1RoaXM6IG9iamVjdCwgb0RhdGFGaWVsZFRleHRBcnJhbmdlbWVudDogYW55LCBvRGF0YUZpZWxkOiBhbnkpIHtcblx0XHQvLyB0aGlzIGlzIHVzZWQgaW4gQ29sdW1uQ29udGVudCBmcmFnbWVudFxuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQgJiZcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQuJEVudW1NZW1iZXIgJiZcblx0XHRcdG9EYXRhRmllbGRUZXh0QXJyYW5nZW1lbnQuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiICYmXG5cdFx0XHRvRGF0YUZpZWxkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gYHske29EYXRhRmllbGQuVmFsdWUuJFBhdGh9fWA7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0Z2V0UGF0aEZvckljb25Tb3VyY2U6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRyZXR1cm4gXCJ7PSBGSUVMRFJVTlRJTUUuZ2V0SWNvbkZvck1pbWVUeXBlKCV7XCIgKyBzUHJvcGVydHlQYXRoICsgXCJAb2RhdGEubWVkaWFDb250ZW50VHlwZX0pfVwiO1xuXHR9LFxuXHRnZXRGaWxlbmFtZUV4cHI6IGZ1bmN0aW9uIChzRmlsZW5hbWU6IGFueSwgc05vRmlsZW5hbWVUZXh0OiBhbnkpIHtcblx0XHRpZiAoc0ZpbGVuYW1lKSB7XG5cdFx0XHRpZiAoc0ZpbGVuYW1lLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG5cdFx0XHRcdC8vIGZpbGVuYW1lIGlzIHJlZmVyZW5jZWQgdmlhIHBhdGgsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogcGF0aFxuXHRcdFx0XHRyZXR1cm4gXCJ7PSAkXCIgKyBzRmlsZW5hbWUgKyBcIiA/ICRcIiArIHNGaWxlbmFtZSArIFwiIDogJFwiICsgc05vRmlsZW5hbWVUZXh0ICsgXCJ9XCI7XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGF0aWMgZmlsZW5hbWUsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogJ3NvbWVTdGF0aWNOYW1lJ1xuXHRcdFx0cmV0dXJuIHNGaWxlbmFtZTtcblx0XHR9XG5cdFx0Ly8gbm8gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lXG5cdFx0cmV0dXJuIHNOb0ZpbGVuYW1lVGV4dDtcblx0fSxcblxuXHRjYWxjdWxhdGVNQmZyb21CeXRlOiBmdW5jdGlvbiAoaUJ5dGU6IGFueSkge1xuXHRcdHJldHVybiBpQnl0ZSA/IChpQnl0ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoNikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldERvd25sb2FkVXJsOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcHJvcGVydHlQYXRoICsgXCJ7PSAke2ludGVybmFsPi9zdGlja3lTZXNzaW9uVG9rZW59ID8gKCc/U0FQLUNvbnRleHRJZD0nICsgJHtpbnRlcm5hbD4vc3RpY2t5U2Vzc2lvblRva2VufSkgOiAnJyB9XCI7XG5cdH0sXG5cdGdldE1hcmdpbkNsYXNzOiBmdW5jdGlvbiAoY29tcGFjdFNlbWFudGljS2V5OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNvbXBhY3RTZW1hbnRpY0tleSA9PT0gXCJ0cnVlXCIgfHwgY29tcGFjdFNlbWFudGljS2V5ID09PSB0cnVlID8gXCJzYXBNVGFibGVDb250ZW50TWFyZ2luXCIgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldFJlcXVpcmVkOiBmdW5jdGlvbiAoaW1tdXRhYmxlS2V5OiBhbnksIHRhcmdldDogYW55LCByZXF1aXJlZFByb3BlcnRpZXM6IGFueSkge1xuXHRcdGxldCB0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb246IGFueSA9IGNvbnN0YW50KGZhbHNlKTtcblx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHR0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbih0YXJnZXQ/LnRhcmdldE9iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcih0YXJnZXRSZXF1aXJlZEV4cHJlc3Npb24sIHJlcXVpcmVkUHJvcGVydGllcy5pbmRleE9mKGltbXV0YWJsZUtleSkgPiAtMSkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgbWV0aG9kIGNoZWNrcyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZm9ybS5cblx0ICpcblx0ICogQHBhcmFtIGRhdGFGaWVsZENvbGxlY3Rpb24gVGhlIGxpc3Qgb2YgdGhlIGZpZWxkcyBvZiB0aGUgZm9ybVxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkT2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgZmllbGQgd2hpY2ggbmVlZHMgdG8gYmUgY2hlY2tlZCBpbiB0aGUgZm9ybVxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgcGFydCBvZiB0aGUgZm9ybSwgYGZhbHNlYCBvdGhlcndpc2Vcblx0ICovXG5cdGlzRmllbGRQYXJ0T2ZGb3JtOiBmdW5jdGlvbiAoZGF0YUZpZWxkQ29sbGVjdGlvbjogRm9ybUVsZW1lbnRbXSwgZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdC8vZ2VuZXJhdGluZyBrZXkgZm9yIHRoZSByZWNlaXZlZCBkYXRhIGZpZWxkXG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YUZpZWxkS2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGRPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0Ly8gdHJ5aW5nIHRvIGZpbmQgdGhlIGdlbmVyYXRlZCBrZXkgaW4gYWxyZWFkeSBleGlzdGluZyBmb3JtIGVsZW1lbnRzXG5cdFx0Y29uc3QgaXNGaWVsZEZvdW5kID0gZGF0YUZpZWxkQ29sbGVjdGlvbi5maW5kKChmaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGZpZWxkLmtleSA9PT0gY29ubmVjdGVkRGF0YUZpZWxkS2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiBpc0ZpZWxkRm91bmQgPyB0cnVlIDogZmFsc2U7XG5cdH1cbn07XG4oRmllbGRIZWxwZXIuZmllbGRDb250cm9sIGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0IGFzIGFueSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dCBhcyBhbnkpLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuKEZpZWxkSGVscGVyLmdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkgYXMgYW55KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0VBc0JBLE1BQU1BLFdBQVcsR0FBRyxvQ0FBb0M7SUFDdkRDLElBQUksR0FBRyw2QkFBNkI7RUFFckMsTUFBTUMsV0FBVyxHQUFHO0lBQ25CQyxpQkFBaUIsRUFBRSxVQUFVQyxVQUFlLEVBQUVDLFFBQWEsRUFBRTtNQUM1RDtNQUNBLE1BQU1DLFFBQVEsR0FBR0QsUUFBUSxDQUFDRSxPQUFPO01BQ2pDLElBQUlDLGNBQW1CLEdBQUcsS0FBSztNQUMvQixJQUFJSixVQUFVLENBQUNLLEtBQUssSUFBSUwsVUFBVSxDQUFDSyxLQUFLLENBQUNDLEtBQUssRUFBRTtRQUMvQ0YsY0FBYyxHQUFHRixRQUFRLENBQUNLLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQztNQUNyRjtNQUNBLElBQUksQ0FBQ0gsY0FBYyxJQUFJQSxjQUFjLENBQUNFLEtBQUssRUFBRTtRQUM1Q0YsY0FBYyxHQUFHRixRQUFRLENBQUNLLFNBQVMsQ0FBQyxvQ0FB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
|
|
@@ -223,7 +223,7 @@ const FieldHelper = {
|
|
|
223
223
|
sPropertyLocationPath = CommonHelper.getLocationForPropertyPath(oModel, sPropertyPath),
|
|
224
224
|
oFilterRestrictions = CommonUtils.getFilterRestrictionsByPath(sPropertyLocationPath, oModel);
|
|
225
225
|
if (
|
|
226
|
-
((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date") &&
|
|
226
|
+
((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date" || sPropertyType === "Edm.TimeOfDay") &&
|
|
227
227
|
bSemanticDateRange &&
|
|
228
228
|
oFilterRestrictions &&
|
|
229
229
|
oFilterRestrictions.FilterAllowedExpressions &&
|
|
@@ -25,7 +25,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
25
25
|
controls: [],
|
|
26
26
|
elements: [],
|
|
27
27
|
// eslint-disable-next-line no-template-curly-in-string
|
|
28
|
-
version: "1.120.
|
|
28
|
+
version: "1.120.10",
|
|
29
29
|
noLibraryCSS: true
|
|
30
30
|
});
|
|
31
31
|
thisLib.NavigationType = {
|
|
@@ -214,6 +214,8 @@ POPOVER_CONTACT_SECTION_MOBILE=\u0627\u0644\u062C\u0648\u0627\u0644
|
|
|
214
214
|
POPOVER_CONTACT_SECTION_PHONE=\u0627\u0644\u0647\u0627\u062A\u0641
|
|
215
215
|
POPOVER_CONTACT_SECTION_ADR=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
|
|
216
216
|
|
|
217
|
+
SUMMARIZE=\u062A\u0644\u062E\u064A\u0635
|
|
218
|
+
|
|
217
219
|
C_SEND_TO_COLLABORATION_MANAGER=\u0625\u0631\u0633\u0627\u0644
|
|
218
220
|
|
|
219
221
|
M_TABLE_CUT=\u0642\u0635
|
|
@@ -214,6 +214,8 @@ POPOVER_CONTACT_SECTION_MOBILE=\u041C\u043E\u0431\u0438\u043B\u0435\u043D \u0442
|
|
|
214
214
|
POPOVER_CONTACT_SECTION_PHONE=\u0422\u0435\u043B\u0435\u0444\u043E\u043D
|
|
215
215
|
POPOVER_CONTACT_SECTION_ADR=\u0410\u0434\u0440\u0435\u0441
|
|
216
216
|
|
|
217
|
+
SUMMARIZE=\u041E\u0431\u043E\u0431\u0449\u0435\u043D\u0438\u0435
|
|
218
|
+
|
|
217
219
|
C_SEND_TO_COLLABORATION_MANAGER=\u0418\u0437\u043F\u0440\u0430\u0449\u0430\u043D\u0435
|
|
218
220
|
|
|
219
221
|
M_TABLE_CUT=\u0418\u0437\u0440\u044F\u0437\u0432\u0430\u043D\u0435
|