@sapui5/sap.fe.macros 1.139.0 → 1.139.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/RichTextEditor.js +1 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +8 -1
- package/src/sap/fe/macros/table/TableAPI.ts +15 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
|
@@ -648,6 +648,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
648
648
|
}
|
|
649
649
|
if (!path.key) {
|
|
650
650
|
path.key = firstKey;
|
|
651
|
+
const propertyPath = `/${annotationValueListType.CollectionPath}/${firstKey}`;
|
|
652
|
+
const propertyAnnotations = metaModelVH.getObject(`${propertyPath}@`) || {};
|
|
653
|
+
// We update path.descriptionPath for the key property
|
|
654
|
+
path.descriptionPath = propertyAnnotations[AnnotationText]?.$Path || "";
|
|
651
655
|
}
|
|
652
656
|
|
|
653
657
|
/* Ensure that vhKeys are part of the columnDefs, otherwise it is not considered in $select (BCP 2270141154) */
|
|
@@ -1217,4 +1221,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
|
|
|
1217
1221
|
};
|
|
1218
1222
|
return ValueListHelper;
|
|
1219
1223
|
}, false);
|
|
1220
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsInNvcnRlciIsInByb3BlcnR5UGF0aCIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJEZXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsImFzY2VuZGluZyIsInB1c2giLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U29ydENvbmRpdGlvbnNGb3JWYWx1ZUxpc3QiLCJzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0UHJvcGVydHlQYXRoIiwib1BhcmFtZXRlcnMiLCJVbmJvdW5kQWN0aW9uIiwiRW50aXR5VHlwZVBhdGgiLCJBY3Rpb24iLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImdldFZhbHVlTGlzdFByb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsIm9WYWx1ZUxpc3RNb2RlbCIsImdldENvbHVtblZpc2liaWxpdHkiLCJvVmFsdWVMaXN0Iiwib1NvdXJjZSIsImlzRHJvcERvd25MaXN0IiwidmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaXNWaXNpYmxlIiwiY29sdW1uSW5mb3MiLCJpc0RpYWxvZ1RhYmxlIiwiY29sdW1uV2l0aEhpZGRlbkFubm90YXRpb24iLCJjb2x1bW5OYW1lIiwiaGFzSGlkZGVuQW5ub3RhdGlvbiIsImdldENvbHVtblZpc2liaWxpdHlJbmZvIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJiSXNEcm9wRG93bkxpc3RlIiwib01ldGFNb2RlbCIsImFDb2x1bW5JbmZvcyIsIm9Db2x1bW5JbmZvcyIsImdldFRhYmxlSXRlbXNQYXJhbWV0ZXJzIiwicmVxdWVzdEdyb3VwSWQiLCJpdGVtUGFyYW1ldGVycyIsInNlbGVjdFN0cmluZyIsInNlbGVjdFN0cmluZ1BhcnQiLCJpc1N1c3BlbmRlZCIsImRlZmF1bHRTb3J0UHJvcGVydHlOYW1lIiwiam9pbiIsImhhc0ltcG9ydGFuY2UiLCJnZXRNaW5TY3JlZW5XaWR0aCIsImdldENvbHVtbldpZHRoIiwiaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJpc1NtYWxsRGV2aWNlIiwidGFyZ2V0T2JqZWN0IiwicHJvcGVydHkiLCJyZWxhdGVkUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwidG9TdHJpbmciLCJsYWJlbCIsIkxhYmVsIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInNpemUiLCJpbnN0YW5jZXMiLCJwcm9wIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIlByb3BlcnR5T0RhdGFDb25zdHJ1Y3RvciIsIk9iamVjdFBhdGgiLCJnZXQiLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwic1dpZHRoIiwiVXRpbCIsImNhbGNDb2x1bW5XaWR0aCIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwiTG9nIiwiZXJyb3IiLCJnZXRPdXRQYXJhbWV0ZXJQYXRocyIsImFQYXJhbWV0ZXJzIiwic1BhdGgiLCJlbmRzV2l0aCIsImVudGl0eUlzU2VhcmNoYWJsZSIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJjb2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJzZWFyY2hTdXBwb3J0ZWQiLCJTZWFyY2hTdXBwb3J0ZWQiLCJzZWFyY2hhYmxlIiwiU2VhcmNoYWJsZSIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5U2V0IiwicGFydHMiLCJzcGxpdCIsImNvbmRpdGlvblBhdGgiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsIiRraW5kIiwiJGlzQ29sbGVjdGlvbiIsIl9nZXRDb2x1bW5EZWZpbml0aW9uRnJvbVNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVR5cGVBbm5vdGF0aW9ucyIsInNlbGVjdGlvbkZpZWxkcyIsInNlbGVjdGlvbkZpZWxkIiwic2VsZWN0aW9uRmllbGRQYXRoIiwiY29sdW1uRGVmIiwiZmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyIsInZhbHVlTGlzdFByb3BlcnR5IiwiY29sdW1uUGF0aCIsImNvbHVtblByb3BlcnR5VHlwZSIsInRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0UGF0aCIsImZpbHRlckluT3V0UGFyYW1ldGVycyIsInZoUGFyYW1ldGVycyIsInR5cGVGaWx0ZXIiLCJmaWx0ZXIiLCJwYXJhbWV0ZXIiLCJwYXJtZXRlclR5cGUiLCJnZXRJblBhcmFtZXRlcnMiLCJnZXRPdXRQYXJhbWV0ZXJzIiwiY3JlYXRlVkhVSU1vZGVsIiwidmFsdWVIZWxwIiwidmhVSU1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9nZXREaWFsb2dUaXRsZSIsInZhbHVlaGVscExhYmVsIiwicHJvcGVydHlMYWJlbCIsImdldFByb3BlcnR5IiwiZGF0YUZpZWxkTGFiZWwiLCJnZXRDb250cm9sIiwiZGVzdHJveVZIQ29udGVudCIsImdldERpYWxvZyIsImRlc3Ryb3lDb250ZW50IiwiZ2V0VHlwZWFoZWFkIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwicXVhbGlmaWVycyIsImluZGV4RGVmYXVsdFZIIiwiaW5kZXhPZiIsInVuc2hpZnQiLCJzcGxpY2UiLCJfZ2V0Q29udGV4dFByZWZpeCIsImJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlCaW5kaW5nUGFydHMiLCJnZXRQYXRoIiwiYmluZGlnQ29udGV4dFBhcnRzIiwiY29udGV4dFByZWZpeFBhcnRzIiwiaSIsIl9nZXRWaFBhcmFtZXRlciIsImNvbmRpdGlvbk1vZGVsIiwiY29udGV4dFByZWZpeCIsInZoTWV0YU1vZGVsIiwibG9jYWxEYXRhUHJvcGVydHlQYXRoIiwidmFsdWVQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQYXJlbnQiLCJpc0EiLCJfcGFyYW1ldGVySXNBIiwiZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkiLCJvQm91bmRFbnRpdHkiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoT2ZUYWJsZSIsImdldFJvd0JpbmRpbmciLCJmaWx0ZXJCYXJBUEkiLCJmaWx0ZXJCYXJNZXRhUGF0aCIsIm1ldGFQYXRoIiwidmFsdWVIZWxwQ29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aCIsImNvbnRleHRNZXRhUGF0aCIsIk1ldGFQYXRoIiwiY29udmVydFR5cGVzIiwibmV3UGF0aCIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsInRhcmdldEVudGl0eVNldCIsImdldENsb3Nlc3RFbnRpdHlTZXQiLCJnZXRNZXRhUGF0aEZvck9iamVjdCIsImdldFJlbGF0aXZlUGF0aCIsInNvdXJjZSIsImhlbHBQYXRoIiwiY29uc3RhbnRWYWx1ZSIsIkNvbnN0YW50IiwiaW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudCIsIkJvb2xlYW4iLCJJbml0aWFsVmFsdWVJc1NpZ25pZmljYW50IiwicGFyYW1ldGVyVHlwZXMiLCJfZW5yaWNoUGF0aCIsInByb3BlcnR5TmFtZSIsImV4dGVybmFsSWRQYXRoIiwia2V5IiwiZXh0ZXJuYWxJZFByb3BlcnR5IiwicG9wIiwiZmllbGRQcm9wZXJ0eVBhdGgiLCJkZXNjcmlwdGlvblBhdGgiLCJfZW5yaWNoS2V5cyIsInZoS2V5cyIsImdldEluQW5kT3V0UGFyYW1ldGVyc0xpc3QiLCJfZ2V0RW50aXR5VHlwZSIsIm1ldGFNb2RlbFZIIiwiZW50aXR5U2V0UGF0aCIsInJlcXVlc3RPYmplY3QiLCJfcHJvY2Vzc1BhcmFtZXRlcnMiLCJhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSIsInZhbHVlSGVscFF1YWxpZmllciIsInBheWxvYWQiLCJlbnRpdHlUeXBlIiwiaXNGb3JNdWx0aVZhbHVlRmllbGQiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCIkS2V5IiwiZmlyc3RLZXkiLCJMb2NhbERhdGFQcm9wZXJ0eSIsImlzUG90ZW50aWFsbHlTZW5zaXRpdmUiLCJ2aFBhcmFtZXRlciIsInZhbHVlbGlzdEluZm8iLCJrZXlQYXRoIiwiX2xvZ0Vycm9yIiwic3RhdHVzIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwibXNnIiwiZ2V0VmFsdWVMaXN0SW5mbyIsInZhbHVlTGlzdEluZm9zIiwicHJvcGVydHlQYXRoUGFydHMiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVIZWxwUXVhbGlmaWVycyIsIk9iamVjdCIsImtleXMiLCIkcXVhbGlmaWVyIiwiZXJyIiwiQUxMRlJBR01FTlRTIiwibG9nRnJhZ21lbnQiLCJfbG9nVGVtcGxhdGVkRnJhZ21lbnRzIiwiZnJhZ21lbnROYW1lIiwiZnJhZ21lbnREZWZpbml0aW9uIiwibG9nSW5mbyIsImZyYWdtZW50IiwiZ2V0TGV2ZWwiLCJMZXZlbCIsIkRFQlVHIiwic2V0VGltZW91dCIsIl90ZW1wbGF0ZUZyYWdtZW50Iiwic291cmNlTW9kZWwiLCJjb250YWluaW5nVmlldyIsImdldFRhcmdldFZpZXciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJsb2NhbFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RNb2RlbCIsInZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwiLCJ2aWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJiaW5kaW5nQ29udGV4dHMiLCJjb250ZXh0UGF0aCIsIm1vZGVscyIsInRlbXBsYXRlQ29tcG9uZW50IiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwicnVuQXNPd25lciIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiX2dldENvbnRlbnRJZCIsInZhbHVlSGVscElkIiwiaXNUeXBlYWhlYWQiLCJjb250ZW50VHlwZSIsIl9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQiLCJ2aFByb3BlcnRpZXMiLCJTZXQiLCJhZGQiLCJBcnJheSIsImZyb20iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiX2dldFdpZHRoSW5SZW0iLCJpc1VuaXRWYWx1ZUhlbHAiLCJ3aWR0aCIsIiQiLCJmbG9hdFdpZHRoIiwiUmVtIiwiZnJvbVB4IiwiaXNOYU4iLCJfZ2V0VGFibGVXaWR0aCIsInRhYmxlIiwibWluV2lkdGgiLCJpc011bHRpU2VsZWN0IiwiZ2V0Q29sdW1ucyIsInZpc2libGVDb2x1bW5zIiwiZ2V0VmlzaWJsZSIsImluaXRpYWxTdW0iLCJzdW1XaWR0aCIsInN1bSIsImdldFdpZHRoIiwiTWF0aCIsIm1heCIsIl9nZXRKU09OTW9kZWxGb3JEaWFsb2ciLCJjb250ZW50IiwiaXNEcm9wRG93bkxpc3RlIiwiaWQiLCJnZXRJZCIsImdyb3VwSWQiLCJiU3VnZ2VzdGlvbiIsIl9nZXRKU09OTW9kZWxGb3JDb25kaXRpb24iLCJjYXNlU2Vuc2l0aXZlIiwiX2dldEpTT05Nb2RlbEZvclR5cGVhaGVhZCIsImNvbnRlbnRJZCIsIl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQiLCJzZXRLZXlQYXRoIiwic2V0RGVzY3JpcHRpb25QYXRoIiwiaGlzdG9yeSIsImVuYWJsZWQiLCJjaGVja0hpc3RvcnlFbmFibGVkIiwiZGF0YSIsImluZm8iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJzZXRUYWJsZSIsImZpZWxkIiwidGFibGVNb2RlIiwiZ2V0TWF4Q29uZGl0aW9ucyIsInNldE1vZGUiLCJhZGRFdmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsIlJlc2l6ZUhhbmRsZXIiLCJyZWdpc3RlciIsIl9zZXRUYWJsZVdpZHRoIiwicmVkdWNlV2lkdGhGb3JVbml0VmFsdWVIZWxwIiwidGFibGVXaWR0aCIsInNldFdpZHRoIiwiaGlzdG9yeVNldHRpbmdzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsImZpZWxkcyIsImhpc3RvcnlFbmFibGVkIiwiaXNWYWx1ZUxpc3RTZWFyY2hhYmxlIiwidmFsdWVMaXN0TWV0YW1vZGVsIiwiX2NyZWF0ZVZhbHVlSGVscERpYWxvZyIsImNvbmRpdGlvbkNvbnRlbnQiLCJzb3VyY2VNb2RlbERpYWxvZyIsImZpcnN0VHlwZUFoZWFkQ29udGVudCIsImdldENvbnRlbnQiLCJnZXRDYXNlU2Vuc2l0aXZlIiwic291cmNlTW9kZWxDb25kaXRpb24iLCJhZGREZXBlbmRlbnQiLCJzZXRWYWx1ZUhlbHAiLCJjb25kaXRpb25UYWJsZSIsImdldFRhYmxlIiwidGFibGVQcm9taXNlIiwiZmlsdGVyQmFyUHJvbWlzZSIsImZpbHRlckJhciIsIlByb21pc2UiLCJhbGwiLCJzZXRGaWx0ZXJCYXIiLCJzZXRGaWx0ZXIiLCJpbml0aWFsaXplZCIsInNldENvcHlQcm92aWRlclZpc2liaWxpdHkiLCJtZGNUYWJsZSIsIl9zZXRTaG93UDEzbkJ1dHRvbiIsImdldENvcHlQcm92aWRlciIsInNldFZpc2libGUiLCJfZ2V0Q29udGVudEJ5SWQiLCJjb250ZW50TGlzdCIsIml0ZW0iLCJfY3JlYXRlUG9wb3ZlckNvbnRlbnQiLCJ1c2VBc1ZhbHVlSGVscCIsIk1UYWJsZSIsImdyb3VwIiwiX2NyZWF0ZURpYWxvZ0NvbnRlbnQiLCJmb3JjZUJpbmQiLCJNRENUYWJsZSIsIl9zaG93Q29uZGl0aW9uc0NvbnRlbnQiLCJjb250YWluZXIiLCJjb25kaXRpb25zQ29udGVudCIsIkNvbmRpdGlvbnMiLCJhZGRDb250ZW50IiwiX2FsaWduT3JDcmVhdGVDb250ZW50Iiwic2hvd0NvbmRpdGlvblBhbmVsIiwiRmV0Y2hWYWx1ZXMiLCJpbnNlcnRDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQiLCJxdWFsaWZpZXJGb3JUeXBlYWhlYWQiLCJzdWJWYWx1ZUxpc3RJbmZvIiwiZ2V0VXNlQXNWYWx1ZUhlbHAiLCJyZW1vdmVDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2ciLCJzZWxlY3RlZENvbnRlbnRJZCIsImNvbnRlbnRMaXN0SXRlbSIsImhhc09wZXJhdG9yRVEiLCJnZXRPcGVyYXRvcnMiLCJzZWxlY3RlZEluZm8iLCJzZWxlY3RlZENvbnRlbnQiLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJzZXRUaXRsZSIsIl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkIiwidmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoIiwiY29udmVydGVkTWV0YWRhdGEiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwidmFsdWVIZWxwS2V5UGF0aCIsIm1heExlbmd0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInNob3dWYWx1ZUxpc3QiLCJtYXAiLCJjb2wiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZhbHVlTGlzdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByZXNlbnRhdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgVXRpbCBmcm9tIFwic2FwL20vdGFibGUvVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFJlc2l6ZUhhbmRsZXIgZnJvbSBcInNhcC91aS9jb3JlL1Jlc2l6ZUhhbmRsZXJcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgUmVtIGZyb20gXCJzYXAvdWkvZG9tL3VuaXRzL1JlbVwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNZGNJbm5lclRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgdHlwZSBNZGNGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRlbnRcIjtcbmltcG9ydCBDb25kaXRpb25zIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L0NvbmRpdGlvbnNcIjtcbmltcG9ydCBNRENUYWJsZSwgeyB0eXBlICRNRENUYWJsZVNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCBNVGFibGUsIHsgdHlwZSAkTVRhYmxlU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NVGFibGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL09EYXRhVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdFZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG5cdExvY2FsRGF0YVByb3BlcnR5Pzoge1xuXHRcdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0fTtcblx0Q29uc3RhbnQ/OiBzdHJpbmc7XG5cdEluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ/OiBib29sZWFuO1xuXHRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXT86IHtcblx0XHQkRW51bU1lbWJlcjogc3RyaW5nO1xuXHR9O1xufTtcblxudHlwZSBMb2dGcmFnbWVudE1ldGhvZCA9IChpbmZvOiB7IHBhdGg6IHN0cmluZzsgZnJhZ21lbnROYW1lOiBzdHJpbmc7IGZyYWdtZW50OiB1bmtub3duIH0pID0+IHZvaWQ7XG5cbi8vIGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHtcblx0JFR5cGU6IHN0cmluZzsgLy8gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFR5cGU7XG5cdExhYmVsPzogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUm9vdD86IHN0cmluZztcblx0RGlzdGluY3RWYWx1ZXNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRGZXRjaFZhbHVlcz86IG51bWJlcjtcblx0UHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0U2VsZWN0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdCRxdWFsaWZpZXI/OiBzdHJpbmc7IC8vIGRlZmluZWQgaW4gY2FzZSBvZiBWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RUeXBlQnlRdWFsaWZpZXIgPSBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZT47XG5cbmNvbnN0IGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkID0gKGNvbHVtbkRlZnM6IENvbHVtbkRlZltdLCB2aEtleTogc3RyaW5nKTogYm9vbGVhbiA9PiAhY29sdW1uRGVmcy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSB2aEtleSk7XG5cbmV4cG9ydCBjb25zdCBBbm5vdGF0aW9uTGFiZWwgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIixcblx0QW5ub3RhdGlvblRleHQgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiLFxuXHRBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50ID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIixcblx0QW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCIsXG5cdEFubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiO1xuXG50eXBlIEFubm90YXRpb25zRm9yUHJvcGVydHkgPSB7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIj86IHtcblx0XHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIj86IHN0cmluZzsgLy8gQW5ub3RhdGlvbkxhYmVsXG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCI/OiB7XG5cdFx0Ly8gQW5ub3RhdGlvblRleHRcblx0XHQkUGF0aDogc3RyaW5nO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIj86IHtcblx0XHQvLyBBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XG5cdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdH07XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiPzogYm9vbGVhbjtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiPzogYm9vbGVhbjsgLy8gQW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCI/OiBzdHJpbmdbXTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI/OiBzdHJpbmc7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCI/OiBib29sZWFuO1xufTtcblxudHlwZSBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQgPSB7XG5cdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgQW5ub3RhdGlvbnNGb3JFbnRpdHlUeXBlID0ge1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIj86IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZFtdO1xufTtcblxudHlwZSBDb2x1bW5Qcm9wZXJ0eSA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JGtpbmQ6IHN0cmluZztcblx0JGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEluT3V0UGFyYW1ldGVyID0ge1xuXHRwYXJtZXRlclR5cGU6IHN0cmluZztcblx0c291cmNlOiBzdHJpbmc7XG5cdGhlbHBQYXRoOiBzdHJpbmc7XG5cdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IGJvb2xlYW47XG5cdGNvbnN0YW50VmFsdWU/OiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxudHlwZSBWYWx1ZUhlbHBQYXlsb2FkSW5mbyA9IHtcblx0dmhLZXlzPzogc3RyaW5nW107XG5cdHZoUGFyYW1ldGVycz86IEluT3V0UGFyYW1ldGVyW107XG5cdHZoUHJvcGVydGllcz86IHN0cmluZ1tdO1xufTtcblxudHlwZSBWYWx1ZUhlbHBRdWFsaWZpZXJNYXAgPSBSZWNvcmQ8c3RyaW5nLCBWYWx1ZUhlbHBQYXlsb2FkSW5mbz47XG5cbnR5cGUgSGlzdG9yeVBheWxvYWQgPSB7XG5cdGVuYWJsZWQ/OiBib29sZWFuO1xuXHRkYXRhPzogRmllbGREYXRhVHlwZVtdO1xuXHRoYXNSZWxldmFudERhdGE/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwUGF5bG9hZCA9IHtcblx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdHF1YWxpZmllcnM6IFZhbHVlSGVscFF1YWxpZmllck1hcDtcblx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmc7XG5cdGNvbmRpdGlvbk1vZGVsPzogc3RyaW5nO1xuXHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGlzVW5pdFZhbHVlSGVscD86IGJvb2xlYW47XG5cdHJlcXVlc3RHcm91cElkPzogc3RyaW5nO1xuXHR1c2VNdWx0aVZhbHVlRmllbGQ/OiBib29sZWFuO1xuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz86IGJvb2xlYW47XG5cdHZhbHVlSGVscERlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0cHJvcGVydHlEZXNjcmlwdGlvblBhdGg/OiBzdHJpbmc7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0dmFsdWVIZWxwS2V5UGF0aD86IHN0cmluZztcblx0aXNEZWZpbmVDb25kaXRpb25WYWx1ZUhlbHA/OiBib29sZWFuO1xuXHRpc1BvdGVudGlhbGx5U2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0aGlzdG9yeT86IEhpc3RvcnlQYXlsb2FkO1xuXHRleHRlcm5hbElkUGF0aD86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sdW1uRGVmID0ge1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRleHRQYXRoPzogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHQkVHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVMaXN0SW5mbyA9IHtcblx0a2V5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0ZmllbGRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0dmhLZXlzOiBzdHJpbmdbXTtcblx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdO1xuXHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZTtcblx0Y29sdW1uRGVmczogQ29sdW1uRGVmW107XG5cdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nO1xufTtcblxudHlwZSBEaXNwbGF5Rm9ybWF0ID0gXCJEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCIgfCBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblxudHlwZSBQYXRoID0ge1xuXHRmaWVsZFByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRhc2NlbmRpbmc/OiBib29sZWFuO1xuXHRkZXNjZW5kaW5nPzogYm9vbGVhbjtcblx0cGF0aD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzb3J0RmllbGROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zSW5mbyA9IGdldFNvcnRSZXN0cmljdGlvbnNJbmZvKGVudGl0eVNldEFubm90YXRpb25zKTtcblx0Y29uc3QgZm91bmRFbGVtZW50ID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHRlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHx8XG5cdFx0XHRcdGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJEaXNwbGF5T25seSkgJiZcblx0XHRcdCEoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7ZWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuYCkgPT09XG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9KTtcblx0aWYgKGZvdW5kRWxlbWVudCkge1xuXHRcdGlmIChcblx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2ZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyYFxuXHRcdFx0KSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0XHQpIHtcblx0XHRcdHNvcnRGaWVsZE5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c29ydEZpZWxkTmFtZSA9IGZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHR9XG5cdH1cblx0aWYgKHNvcnRGaWVsZE5hbWUgJiYgKCFzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc29ydEZpZWxkTmFtZV0gfHwgc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NvcnRGaWVsZE5hbWVdLnNvcnRhYmxlKSkge1xuXHRcdHJldHVybiBzb3J0RmllbGROYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gX3JlZHVuZGFudERlc2NyaXB0aW9uKFxuXHRvVkxQYXJhbWV0ZXI6IHtcblx0XHRWYWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nO1xuXHR9LFxuXHRhQ29sdW1uSW5mbzogQ29sdW1uSW5mb1tdXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0NvbHVtbkluZm8gPSBhQ29sdW1uSW5mby5maW5kKGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb2x1bW5JbmZvKSB7XG5cdFx0cmV0dXJuIG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gY29sdW1uSW5mby50ZXh0Q29sdW1uTmFtZTtcblx0fSk7XG5cdGlmIChcblx0XHRvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IG9Db2x1bW5JbmZvPy50ZXh0Q29sdW1uTmFtZSAmJlxuXHRcdCFvQ29sdW1uSW5mby5rZXlDb2x1bW5IaWRkZW4gJiZcblx0XHRvQ29sdW1uSW5mby5rZXlDb2x1bW5EaXNwbGF5Rm9ybWF0ICE9PSBcIlZhbHVlXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9KTogYm9vbGVhbiB7XG5cdHJldHVybiBvVmFsdWVMaXN0Q29udGV4dC5QYXJhbWV0ZXJzLnNvbWUoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b1BhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRvUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGUvSGlnaFwiXG5cdFx0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9idWlsZCRTZWxlY3RTdHJpbmcoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9WaWV3RGF0YSA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSBhcyBKU09OTW9kZWw7XG5cdGlmIChvVmlld0RhdGEpIHtcblx0XHRjb25zdCBvRGF0YSA9IG9WaWV3RGF0YS5nZXREYXRhKCk7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhQ29sdW1ucyA9IG9EYXRhLmNvbHVtbnM7XG5cdFx0XHRpZiAoYUNvbHVtbnMpIHtcblx0XHRcdFx0cmV0dXJuIGFDb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0c1F1ZXJ5OiBzdHJpbmcsXG5cdFx0XHRcdFx0b1Byb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHRcdFx0XHQvLyBUT0RPIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdFx0XHRcdGlmIChvUHJvcGVydHkucGF0aCAmJiAhb1Byb3BlcnR5LnBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRzUXVlcnkgPSBzUXVlcnkgPyBgJHtzUXVlcnl9LCR7b1Byb3BlcnR5LnBhdGh9YCA6IG9Qcm9wZXJ0eS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc1F1ZXJ5O1xuXHRcdFx0XHR9LCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdG9UZXh0QW5ub3RhdGlvbiAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl07XG5cdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdHJldHVybiBvVGV4dEFubm90YXRpb24gJiYgdHlwZW9mIG9UZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBcIiRQYXRoXCIgaW4gb1RleHRBbm5vdGF0aW9uICYmIG9UZXh0QW5ub3RhdGlvbi4kUGF0aFxuXHRcdFx0PyBzRGlzcGxheU1vZGVcblx0XHRcdDogXCJWYWx1ZVwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIE9ubHkgZXhwbGljaXQgZGVmaW5lZCBUZXh0QXJyYW5nZW1lbnRzIGluIGEgVmFsdWUgSGVscCB3aXRoIERpYWxvZyBhcmUgY29uc2lkZXJlZFxuXHRcdHJldHVybiBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA/IHNEaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0fVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWVMaXN0J3MgUHJlc2VudGF0aW9uVmFyaWFudC5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgUHJlc2VudGF0aW9uVmFyaWFudCAoaWYgYW55KSBvZiB0aGUgdmFsdWVMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyID0gdmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIgPyBgIyR7dmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YCA6IFwiXCI7XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnRQYXRoID0gYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnQke3ByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YDtcblx0cmV0dXJuIHZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSBhcyBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkO1xufVxuXG50eXBlIENvbHVtbkluZm8gPSB7XG5cdGtleUNvbHVtbkhpZGRlbj86IGJvb2xlYW47XG5cdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG5cdHRleHRDb2x1bW5OYW1lPzogc3RyaW5nO1xuXHRjb2x1bW5OYW1lOiBzdHJpbmc7XG5cdGhhc0hpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xufTtcbmNvbnN0IFZhbHVlTGlzdEhlbHBlciA9IHtcblx0Z2V0VmFsdWVMaXN0Q29sbGVjdGlvbkVudGl0eVNldDogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogQmFzZUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1WYWx1ZUxpc3QgPSBvVmFsdWVMaXN0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9YCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgVmFsdWVMaXN0IGlzIGFubm90YXRlZCB3aXRoIGEgUHJlc2VudGF0aW9uVmFyaWFudC5cblx0ICogSWYgdGhlIFByZXNlbnRhdGlvblZhcmlhbnQgaXMgYW5ub3RhdGVkIHdpdGggYSBSZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIsIHRoZSBWYWx1ZUxpc3QncyB0YWJsZSBoYXMgdG8gYmUgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHRhYmxlIGhhcyB0byBiZSBhIFRyZWVUYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc1RyZWVUYWJsZVR5cGUodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdCk/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA/IHRydWUgOiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZVxuXHQgKi9cblx0Z2V0VGFibGVEZWxlZ2F0ZTogZnVuY3Rpb24gKHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0KTtcblx0XHRpZiAoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBgJyR7c0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfSdgO1xuXHRcdH1cblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3QpO1xuXHRcdGNvbnN0IHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA9IHByZXNlbnRhdGlvblZhcmlhbnQ/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllcjtcblx0XHRpZiAocmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPSBwcmVzZW50YXRpb25WYXJpYW50LkluaXRpYWxFeHBhbnNpb25MZXZlbDtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlJywgcGF5bG9hZDoge2NvbGxlY3Rpb25OYW1lOiAnXCIgK1xuXHRcdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPyBcIiwgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU6IFwiICsgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogXCJcIikgK1xuXHRcdFx0XHRcIiwgaGllcmFyY2h5UXVhbGlmaWVyOiAnXCIgK1xuXHRcdFx0XHRyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPyBcIiwgaW5pdGlhbEV4cGFuc2lvbkxldmVsOiBcIiArIChpbml0aWFsRXhwYW5zaW9uTGV2ZWwgKyAxKSA6IFwiXCIpICtcblx0XHRcdFx0XCJ9fVwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7bmFtZTogJ3NhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGUnLCBwYXlsb2FkOiB7Y29sbGVjdGlvbk5hbWU6ICdcIiArXG5cdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XCInXCIgK1xuXHRcdFx0KHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA/IFwiLCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZTogXCIgKyBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgOiBcIlwiKSArXG5cdFx0XHRcIn19XCJcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzb3J0IGNvbmRpdGlvbnMgc2V0IG9uIHRoZSBWYWx1ZUxpc3QncyBQcmVzZW50YXRpb25WYXJpYW50LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzU3VnZ2VzdGlvbiBJbmRpY2F0ZXMgaWYgdGhlIFZhbHVlTGlzdCBpcyB1c2VkIGluIGEgc3VnZ2VzdGlvbiBzY2VuYXJpb1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGlmIGFueSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudDogZnVuY3Rpb24gKHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLCBpc1N1Z2dlc3Rpb246IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8pO1xuXHRcdGlmIChwcmVzZW50YXRpb25WYXJpYW50Py5Tb3J0T3JkZXIpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXSBhcyBTb3J0ZXJUeXBlW11cblx0XHRcdH07XG5cblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRjb25zdCBzb3J0ZXI6IFNvcnRlclR5cGUgPSB7fSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBjb25kaXRpb24/LlByb3BlcnR5Py4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoaXNTdWdnZXN0aW9uKSB7XG5cdFx0XHRcdFx0c29ydGVyLnBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLm5hbWUgPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLkRlc2NlbmRpbmcpIHtcblx0XHRcdFx0XHRzb3J0ZXIuZGVzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLmFzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0c29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKHNvcnRlcik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBpc1N1Z2dlc3Rpb24gPyBgc29ydGVyOiAke0pTT04uc3RyaW5naWZ5KHNvcnRDb25kaXRpb25zLnNvcnRlcnMpfWAgOiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgVmFsdWVMaXN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIEluZGljYXRlcyBpZiBWYWx1ZUxpc3QgaGFzIGZpeGVkIHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGVpdGhlciBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCBvciB0aGUgZGVmYXVsdCBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgZmFsc2UpO1xuXG5cdFx0aWYgKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pLFxuXHRcdFx0XHRcdFx0YXNjZW5kaW5nOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdIGFzIFNvcnRlclR5cGVbXVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFByb3BlcnR5UGF0aDogZnVuY3Rpb24gKG9QYXJhbWV0ZXJzOiB7IFVuYm91bmRBY3Rpb24/OiBib29sZWFuOyBQcm9wZXJ0eTogc3RyaW5nOyBFbnRpdHlUeXBlUGF0aDogc3RyaW5nOyBBY3Rpb246IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gIW9QYXJhbWV0ZXJzLlVuYm91bmRBY3Rpb25cblx0XHRcdD8gYCR7b1BhcmFtZXRlcnMuRW50aXR5VHlwZVBhdGh9LyR7b1BhcmFtZXRlcnMuQWN0aW9ufS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWBcblx0XHRcdDogYC8ke29QYXJhbWV0ZXJzLkFjdGlvbi5zdWJzdHJpbmcob1BhcmFtZXRlcnMuQWN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWA7XG5cdH0sXG5cblx0Z2V0VmFsdWVMaXN0UHJvcGVydHk6IGZ1bmN0aW9uIChvUHJvcGVydHlDb250ZXh0OiBCYXNlQ29udGV4dCk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvVmFsdWVMaXN0TW9kZWwgPSBvUHJvcGVydHlDb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbVZhbHVlTGlzdCA9IG9WYWx1ZUxpc3RNb2RlbC5nZXRPYmplY3QoXCIvXCIpIGFzIHVua25vd24gYXMgeyBDb2xsZWN0aW9uUGF0aDogc3RyaW5nOyAkbW9kZWw6IE9EYXRhTW9kZWwgfTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKX1gKTtcblx0fSxcblxuXHQvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHZhbHVlIGhlbHAgbS10YWJsZSBhbmQgbWRjLXRhYmxlXG5cdGdldENvbHVtblZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9LFxuXHRcdG9WTFBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHRvU291cmNlOiB7XG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW47XG5cdFx0XHRjb2x1bW5JbmZvOiB7XG5cdFx0XHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0XHRcdGNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW107XG5cdFx0XHR9O1xuXHRcdH1cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3QgPSBvU291cmNlICYmICEhb1NvdXJjZS52YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRvQ29sdW1uSW5mbyA9IG9Tb3VyY2UuY29sdW1uSW5mbyxcblx0XHRcdGlzVmlzaWJsZSA9ICFfcmVkdW5kYW50RGVzY3JpcHRpb24ob1ZMUGFyYW1ldGVyLCBvQ29sdW1uSW5mby5jb2x1bW5JbmZvcyksXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gb0NvbHVtbkluZm8uaXNEaWFsb2dUYWJsZTtcblxuXHRcdGlmIChpc0Ryb3BEb3duTGlzdCB8fCAoIWlzRHJvcERvd25MaXN0ICYmIGlzRGlhbG9nVGFibGUpIHx8ICghaXNEcm9wRG93bkxpc3QgJiYgIV9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID0gb0NvbHVtbkluZm8uY29sdW1uSW5mb3MuZmluZChmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29sdW1uSW5mbykge1xuXHRcdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBjb2x1bW5JbmZvLmNvbHVtbk5hbWUgJiYgY29sdW1uSW5mby5oYXNIaWRkZW5Bbm5vdGF0aW9uID09PSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gIWNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID8gaXNWaXNpYmxlIDogZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghaXNEcm9wRG93bkxpc3QgJiYgX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpKSB7XG5cdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlL0hpZ2hcIlxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0Q29sdW1uVmlzaWJpbGl0eUluZm86IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7XG5cdFx0XHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdFx0XHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHRcdH0sXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRiSXNEcm9wRG93bkxpc3RlOiBib29sZWFuLFxuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW5cblx0KToge1xuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0Y29sdW1uSW5mb3M6IENvbHVtbkluZm9bXTtcblx0fSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdID0gW107XG5cdFx0Y29uc3Qgb0NvbHVtbkluZm9zID0ge1xuXHRcdFx0aXNEaWFsb2dUYWJsZTogaXNEaWFsb2dUYWJsZSxcblx0XHRcdGNvbHVtbkluZm9zOiBhQ29sdW1uSW5mb3Ncblx0XHR9O1xuXG5cdFx0b1ZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke29WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eX1AYCk7XG5cdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdGxldCBjb2x1bW5JbmZvOiBDb2x1bW5JbmZvID0ge30gYXMgdW5rbm93biBhcyBDb2x1bW5JbmZvO1xuXHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0ge1xuXHRcdFx0XHRcdGtleUNvbHVtbkhpZGRlbjogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHRcdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ6IG9UZXh0QW5ub3RhdGlvbiAmJiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9ucywgYklzRHJvcERvd25MaXN0ZSksXG5cdFx0XHRcdFx0dGV4dENvbHVtbk5hbWU6IG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgsXG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8gPSB7XG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdG9Db2x1bW5JbmZvcy5jb2x1bW5JbmZvcy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Db2x1bW5JbmZvcztcblx0fSxcblxuXHRnZXRUYWJsZUl0ZW1zUGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cmVxdWVzdEdyb3VwSWQ6IHN0cmluZyxcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW4sXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBpdGVtUGFyYW1ldGVycyA9IFtgcGF0aDogJy8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9J2BdO1xuXG5cdFx0Ly8gYWRkIHNlbGVjdCB0byBvQmluZGluZ0luZm8gKEJDUCAyMTgwMjU1OTU2IC8gMjE3MDE2MzAxMilcblx0XHRjb25zdCBzZWxlY3RTdHJpbmcgPSBfYnVpbGQkU2VsZWN0U3RyaW5nKHRoaXMpO1xuXG5cdFx0Ly8gc2luY2UgdGhlcmUgY291bGQgYmUgcmVjb21tZW5kYXRpb25zL3JlY2VudGx5IHVzZWQgdmFsdWVzIHRvIHNob3cgaW4gdGhlIHN1Z2dlc3Rpb24gcG9wb3ZlclxuXHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gY3JlYXRlIHNvbWUgdHJhbnNpZW50IGNvbnRleHRzIG9uIHRoZSB2YWx1ZUhlbHAgbGlzdCBiaW5kaW5nXG5cdFx0Ly8gc28gd2Ugd2lsbCBzZXQgdGhlIHVwZGF0ZUdyb3VwSWQgb2YgdGhlIGxpc3QgYmluZGluZyB0byBhdm9pZCBzZW5kaW5nIGNhbGxzIHRvIHRoZSBiYWNrZW5kXG5cdFx0Ly8gd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCAkJHNoYXJlZFJlcXVlc3QgdG8gZmFsc2UgdG8gbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgdHJhbnNpZW50IGNvbnRleHRzIGluIFJBUFxuXHRcdGlmIChyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0U3RyaW5nUGFydCA9IHNlbGVjdFN0cmluZyA/IGAsICcke3NlbGVjdFN0cmluZ30nYCA6IFwiXCI7XG5cblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goXG5cdFx0XHRcdGBwYXJhbWV0ZXJzOiB7JCRzaGFyZWRSZXF1ZXN0OiBmYWxzZSwgJCR1cGRhdGVHcm91cElkOiBcImRvbm90c3VibWl0XCIsICQkZ3JvdXBJZDogJyR7cmVxdWVzdEdyb3VwSWR9JyR7c2VsZWN0U3RyaW5nUGFydH19YFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdFN0cmluZykge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgcGFyYW1ldGVyczogeyQkc2hhcmVkUmVxdWVzdDogZmFsc2UsICQkdXBkYXRlR3JvdXBJZDogXCJkb25vdHN1Ym1pdFwiLCAkc2VsZWN0OiAnJHtzZWxlY3RTdHJpbmd9J31gKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc1N1c3BlbmRlZCA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChvUGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gaXNTdWdnZXN0aW9uIHx8IG9QYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbjtcblx0XHR9KTtcblx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKGBzdXNwZW5kZWQ6ICR7aXNTdXNwZW5kZWR9YCk7XG5cblx0XHRpZiAoIWlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKFwibGVuZ3RoOiAxMFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgaXNTdWdnZXN0aW9uKTtcblxuXHRcdGlmIChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdH0gZWxzZSBpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgc29ydGVyOiBbe3BhdGg6ICcke2RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfScsIGFzY2VuZGluZzogdHJ1ZX1dYCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwie1wiICsgaXRlbVBhcmFtZXRlcnMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0sXG5cblx0Ly8gSXMgbmVlZGVkIGZvciBcImV4dGVybmFsXCIgcmVwcmVzZW50YXRpb24gaW4gcXVuaXRcblx0aGFzSW1wb3J0YW5jZTogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0LmdldE9iamVjdCgpKSA/IFwiSW1wb3J0YW5jZS9IaWdoXCIgOiBcIk5vbmVcIjtcblx0fSxcblxuXHQvLyBJcyBuZWVkZWQgZm9yIFwiZXh0ZXJuYWxcIiByZXByZXNlbnRhdGlvbiBpbiBxdW5pdFxuXHRnZXRNaW5TY3JlZW5XaWR0aDogZnVuY3Rpb24gKG9WYWx1ZUxpc3Q6IHsgUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkgPyBcIns9ICR7X1ZIVUk+L21pblNjcmVlbldpZHRofX1cIiA6IFwiNDE2cHhcIjtcblx0fSxcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb2x1bW4gd2lkdGggZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5UGF0aFxuXHQgKiBAcGFyYW0gaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgQW4gaW5kaWNhdG9yIHN0YXRpbmcgaWYgdGhlIHZhbHVlSGVscCBoYXMgZml4ZWQgdmFsdWVzXG5cdCAqIEByZXR1cm5zIFRoZSB3aWR0aCBhcyBhIHN0cmluZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCkgfHwgIXByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QpIHJldHVybjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHJlbGF0ZWRQcm9wZXJ0eTogUHJvcGVydHlbXSA9IFtwcm9wZXJ0eV07XG5cdFx0Ly8gVGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgY291bGQgcmVmZXIgdG8gdGhlIHRleHQsIGN1cnJlbmN5LCB1bml0IG9yIHRpbWV6b25lXG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eShwcm9wZXJ0eSkgfHxcblx0XHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KSxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdHRleHRBcnJhbmdlbWVudCA9IHRleHRBbm5vdGF0aW9uPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSxcblx0XHRcdGxhYmVsID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0bGV0IGRpc3BsYXlNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBkZWZhdWx0IHRleHRhcnJhbmdlbWVudCBpcyBvbmx5IHVzZWQgZm9yIFZIIHdpdGggZml4ZWQgdmFsdWVzXG5cdFx0aWYgKGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmICF0ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdC8vZGlzcGxheU1vZGUgPSBhcyBhbm5vdGF0ZWQgb3IgZGVmYXVsdFxuXHRcdFx0ZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eVBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2Rpc3BsYXlNb2RlID0gYXMgYW5ub3RhdGVkIG9yIHVuZGVmaW5lZFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHlQYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0XHRpZiAoZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkgPSBbYWRkaXRpb25hbFByb3BlcnR5XTtcblx0XHRcdH0gZWxzZSBpZiAoIXRleHRBbm5vdGF0aW9uIHx8IChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkucHVzaChhZGRpdGlvbmFsUHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzaXplID0gMDtcblx0XHRjb25zdCBpbnN0YW5jZXM6IE9EYXRhVHlwZVtdID0gW107XG5cblx0XHRyZWxhdGVkUHJvcGVydHkuZm9yRWFjaCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcCwgdW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3RvciA9IE9iamVjdFBhdGguZ2V0KHByb3BlcnR5VHlwZUNvbmZpZy50eXBlKTtcblx0XHRcdGlmIChQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IpIHtcblx0XHRcdFx0aW5zdGFuY2VzLnB1c2gobmV3IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3Rvcihwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucywgcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgc1dpZHRoID0gVXRpbC5jYWxjQ29sdW1uV2lkdGgoaW5zdGFuY2VzLCBsYWJlbCk7XG5cdFx0c2l6ZSA9IHNXaWR0aCA/IHBhcnNlRmxvYXQoc1dpZHRoLnJlcGxhY2UoXCJyZW1cIiwgXCJcIikpIDogMDtcblxuXHRcdGlmIChzaXplID09PSAwKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHRoZSBjb2x1bW4gd2lkdGggZm9yIHByb3BlcnR5OiAke3Byb3BlcnR5Lm5hbWV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBzaXplIDw9IDIwID8gc2l6ZS50b1N0cmluZygpICsgXCJyZW1cIiA6IFwiMjByZW1cIjtcblx0fSxcblxuXHRnZXRPdXRQYXJhbWV0ZXJQYXRoczogZnVuY3Rpb24gKGFQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcikge1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXIuJFR5cGUuZW5kc1dpdGgoXCJPdXRcIikpIHtcblx0XHRcdFx0c1BhdGggKz0gYHske29QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9fWA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9LFxuXG5cdGVudGl0eUlzU2VhcmNoYWJsZTogZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0Y29sbGVjdGlvbkFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNlYXJjaFN1cHBvcnRlZCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXT8uU2VhcmNoU3VwcG9ydGVkLFxuXHRcdFx0c2VhcmNoYWJsZSA9IGNvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiXT8uU2VhcmNoYWJsZTtcblxuXHRcdGlmIChcblx0XHRcdChzZWFyY2hhYmxlID09PSB1bmRlZmluZWQgJiYgc2VhcmNoU3VwcG9ydGVkID09PSBmYWxzZSkgfHxcblx0XHRcdChzZWFyY2hhYmxlID09PSB0cnVlICYmIHNlYXJjaFN1cHBvcnRlZCA9PT0gZmFsc2UpIHx8XG5cdFx0XHRzZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuXG5cdCAqIEZvciBlLmcuIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29uZGl0aW9uUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldDogc3RyaW5nLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Ly8gKHNlZSBhbHNvOiBzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyLnRzKVxuXHRcdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgY29uZGl0aW9uUGF0aCA9IFwiXCIsXG5cdFx0XHRwYXJ0aWFsUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldH0vJHtwYXJ0aWFsUGF0aH1gKTtcblx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25kaXRpb25QYXRoID0gY29uZGl0aW9uUGF0aCA/IGAke2NvbmRpdGlvblBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbmRpdGlvblBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zIGNvcnJlc3BvbmRpbmcgdG8gcHJvcGVydGllcyBkZWZpbmVkIGFzIFNlbGVjdGlvbiBGaWVsZHMgb24gdGhlIENvbGxlY3Rpb25QYXRoIGVudGl0eSBzZXQgaW4gYSBWYWx1ZUhlbHAuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHJldHVybnMgQXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXQ6IHN0cmluZyk6IENvbHVtbkRlZltdIHtcblx0XHRjb25zdCBjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSA9IFtdLFxuXHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXR9L0BgKSBhcyBBbm5vdGF0aW9uc0ZvckVudGl0eVR5cGUsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdO1xuXG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkOiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGRQYXRoID0gYCR7ZW50aXR5U2V0fS8ke3NlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGh9YCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb25kaXRpb25QYXRoKG1ldGFNb2RlbCwgZW50aXR5U2V0LCBzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtzZWxlY3Rpb25GaWVsZFBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHRcdFx0Y29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogY29uZGl0aW9uUGF0aCxcblx0XHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eUFubm90YXRpb25zPy5bQW5ub3RhdGlvbkxhYmVsXSB8fCBzZWxlY3Rpb25GaWVsZFBhdGgsXG5cdFx0XHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGZpbHRlcmFibGU6IGlzUHJvcGVydHlGaWx0ZXJhYmxlKG1ldGFNb2RlbCwgZW50aXR5U2V0LCBzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRoLCBmYWxzZSksXG5cdFx0XHRcdFx0XHQkVHlwZTogbWV0YU1vZGVsLmdldE9iamVjdChzZWxlY3Rpb25GaWVsZFBhdGgpPy4kVHlwZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkRlZnM7XG5cdH0sXG5cblx0X21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllczogZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkRlZnM6IENvbHVtbkRlZltdLFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0cHJvcGVydHk6IENvbHVtblByb3BlcnR5LFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHlcblx0KTogdm9pZCB7XG5cdFx0bGV0IGNvbHVtblBhdGggPSB2YWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdGNvbHVtblByb3BlcnR5VHlwZSA9IHByb3BlcnR5LiRUeXBlO1xuXHRcdGNvbnN0IGxhYmVsID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uTGFiZWxdIHx8IGNvbHVtblBhdGgsXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGV4dEFubm90YXRpb24gJiZcblx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudF0/LiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIlxuXHRcdCkge1xuXHRcdFx0Ly8gdGhlIGNvbHVtbiBwcm9wZXJ0eSBpcyB0aGUgb25lIGNvbWluZyBmcm9tIHRoZSB0ZXh0IGFubm90YXRpb25cblx0XHRcdGNvbHVtblBhdGggPSB0ZXh0QW5ub3RhdGlvbi4kUGF0aDtcblx0XHRcdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtjb2x1bW5QYXRofWA7XG5cdFx0XHRjb2x1bW5Qcm9wZXJ0eVR5cGUgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKT8uZ2V0T2JqZWN0KHRleHRQcm9wZXJ0eVBhdGgpPy4kVHlwZSBhcyBzdHJpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkKGNvbHVtbkRlZnMsIGNvbHVtblBhdGgpKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWY6IENvbHVtbkRlZiA9IHtcblx0XHRcdFx0cGF0aDogY29sdW1uUGF0aCxcblx0XHRcdFx0Ly8gZW5zdXJlIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbHVtbiB0aGF0IHJlZmVyZW5jZXMgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IHJlZmxlY3RzIHRoZSBzYW1lIG5hdmlnYXRpb24gc3RydWN0dXJlIGFzIHRoZSBjb2x1bW5cblx0XHRcdFx0dGV4dFBhdGg6XG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24/LiRQYXRoICYmIHZhbHVlTGlzdFByb3BlcnR5LmluY2x1ZGVzKFwiL1wiKVxuXHRcdFx0XHRcdFx0PyB2YWx1ZUxpc3RQcm9wZXJ0eS5zdWJzdHJpbmcoMCwgdmFsdWVMaXN0UHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpKSArIFwiL1wiICsgdGV4dEFubm90YXRpb24uJFBhdGhcblx0XHRcdFx0XHRcdDogdGV4dEFubm90YXRpb24/LiRQYXRoLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiAhcHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIl0sXG5cdFx0XHRcdCRUeXBlOiBjb2x1bW5Qcm9wZXJ0eVR5cGVcblx0XHRcdH07XG5cdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVySW5PdXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdLCB0eXBlRmlsdGVyOiBzdHJpbmdbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiB2aFBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiB0eXBlRmlsdGVyLmluY2x1ZGVzKHBhcmFtZXRlci5wYXJtZXRlclR5cGUpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGdldEluUGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiBWYWx1ZUxpc3RIZWxwZXIuZmlsdGVySW5PdXRQYXJhbWV0ZXJzKHZoUGFyYW1ldGVycywgW1xuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50LFxuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XSk7XG5cdH0sXG5cblx0Z2V0T3V0UGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiBWYWx1ZUxpc3RIZWxwZXIuZmlsdGVySW5PdXRQYXJhbWV0ZXJzKHZoUGFyYW1ldGVycywgW0Fubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsIEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dF0pO1xuXHR9LFxuXG5cdGNyZWF0ZVZIVUlNb2RlbDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gc2V0dGluZyB0aGUgX1ZIVUkgbW9kZWwgZXZhbHVhdGVkIGluIHRoZSBWYWx1ZUxpc3RUYWJsZSBmcmFnbWVudFxuXHRcdGNvbnN0IHZoVUlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pLFxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5O1xuXG5cdFx0dmFsdWVIZWxwLnNldE1vZGVsKHZoVUlNb2RlbCwgXCJfVkhVSVwiKTtcblx0XHQvLyBJZGVudGlmaWVzIHRoZSBcIkNvbnRleHREZXBlbmRlbnQtU2NlbmFyaW9cIlxuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9oYXNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIiwgISFwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXSk7XG5cdFx0LyogUHJvcGVydHkgbGFiZWwgZm9yIGRpYWxvZyB0aXRsZSAqL1xuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIsIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbkxhYmVsXSk7XG5cblx0XHRyZXR1cm4gdmhVSU1vZGVsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgdmFsdWUgaGVscCBkaWFsb2cuXG5cdCAqIEJ5IGRlZmF1bHQsIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogRm9yIGNvbnRleHQtZGVwZW5kZW50IHZhbHVlIGhlbHBzLCBieSBkZWZhdWx0IHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgdmFsdWVIZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBMYWJlbCBUaGUgbGFiZWwgaW4gdGhlIHZhbHVlIGhlbHAgbWV0YWRhdGFcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIGZvciB0aGUgdmFsdWVIZWxwIGRpYWxvZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldERpYWxvZ1RpdGxlOiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAsIHZhbHVlaGVscExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5TGFiZWwgPSAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIpO1xuXHRcdGNvbnN0IGRhdGFGaWVsZExhYmVsID0gdmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0UHJvcGVydHkoXCJsYWJlbFwiKTtcblx0XHRyZXR1cm4gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaGFzVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCIpXG5cdFx0XHQ/IHZhbHVlaGVscExhYmVsIHx8IHByb3BlcnR5TGFiZWwgfHwgZGF0YUZpZWxkTGFiZWxcblx0XHRcdDogZGF0YUZpZWxkTGFiZWwgfHwgcHJvcGVydHlMYWJlbCB8fCB2YWx1ZWhlbHBMYWJlbDtcblx0fSxcblxuXHRkZXN0cm95VkhDb250ZW50OiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwKSB7XG5cdFx0XHR2YWx1ZUhlbHAuZ2V0RGlhbG9nKCk/LmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0XHR2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCk/LmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0fVxuXHR9LFxuXG5cdHB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdDogZnVuY3Rpb24gKHF1YWxpZmllcnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGluZGV4RGVmYXVsdFZIID0gcXVhbGlmaWVycy5pbmRleE9mKFwiXCIpO1xuXG5cdFx0Ly8gZGVmYXVsdCBWYWx1ZUhlbHAgd2l0aG91dCBxdWFsaWZpZXIgc2hvdWxkIGJlIHRoZSBmaXJzdFxuXHRcdGlmIChpbmRleERlZmF1bHRWSCA+IDApIHtcblx0XHRcdHF1YWxpZmllcnMudW5zaGlmdChxdWFsaWZpZXJzW2luZGV4RGVmYXVsdFZIXSk7XG5cdFx0XHRxdWFsaWZpZXJzLnNwbGljZShpbmRleERlZmF1bHRWSCArIDEsIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVhbGlmaWVycztcblx0fSxcblxuXHRfZ2V0Q29udGV4dFByZWZpeDogZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBwcm9wZXJ0eUJpbmRpbmdQYXJ0czogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpZ0NvbnRleHRQYXJ0cyA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAocHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gYmluZGlnQ29udGV4dFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dFByZWZpeFBhcnRzID0gW107XG5cdFx0XHRcdGZvciAobGV0IGkgPSBiaW5kaWdDb250ZXh0UGFydHMubGVuZ3RoOyBpIDwgcHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeFBhcnRzLnB1c2gocHJvcGVydHlCaW5kaW5nUGFydHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgJHtjb250ZXh0UHJlZml4UGFydHMuam9pbihcIi9cIil9L2A7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0sXG5cblx0X2dldFZoUGFyYW1ldGVyOiBmdW5jdGlvbiAoXG5cdFx0Y29uZGl0aW9uTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0UHJlZml4OiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdHZoTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuXHQpOiBJbk91dFBhcmFtZXRlciB7XG5cdFx0bGV0IHZhbHVlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscD8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoY29uZGl0aW9uTW9kZWwgJiYgY29uZGl0aW9uTW9kZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR2YWx1ZUhlbHA/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0ICYmXG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciB2YWx1ZSBoZWxwIHVzZWQgaW4gZmlsdGVyIGRpYWxvZ1xuXHRcdFx0XHRjb25zdCBwYXJ0cyA9IGxvY2FsRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXJ0c1swXTtcblx0XHRcdFx0XHRjb25zdCBvQm91bmRFbnRpdHkgPSB2aE1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdGNvbnN0IHNQYXRoT2ZUYWJsZSA9ICh2YWx1ZUhlbHAuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGdldFJvd0JpbmRpbmc6IEZ1bmN0aW9uIH0pLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCk7IC8vVE9ET1xuXHRcdFx0XHRcdGlmIChvQm91bmRFbnRpdHkuZ2V0T2JqZWN0KGAke3NQYXRoT2ZUYWJsZX0vJFBhcnRuZXJgKSA9PT0gZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdC8vIFVzaW5nIHRoZSBjb25kaXRpb24gbW9kZWwgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBpbiBjYXNlIGFuIGluLXBhcmFtZXRlciB1c2VzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0Ly8gcmVmZXJyaW5nIHRvIHRoZSBwYXJ0bmVyLiBUaGVyZWZvcmUgdXNpbmcgdGhlIEZWSCBjb250ZXh0IGluc3RlYWQgb2YgdGhlIGNvbmRpdGlvbiBtb2RlbC5cblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHZhbHVlSGVscD8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikgPT09IHRydWUgJiZcblx0XHRcdFx0YmluZGluZ0NvbnRleHQgJiZcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgYXJlIGEgdmFsdWUgaGVscCBvZiBhIEZpbHRlckJhciwgd2UgY2FuIGdvIHVwIHRvIHRoZSBBUEkgdG8gY2hlY2sgaWYgd2UgYXJlIG9uIGEgZmlsdGVyYmFyIHJlcHJlc2VudGluZyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdmFsdWVIZWxwLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJNZXRhUGF0aCA9IGZpbHRlckJhckFQSS5tZXRhUGF0aDtcblx0XHRcdFx0Y29uc3QgdmFsdWVIZWxwQ29udGV4dFBhdGggPSB2aE1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0TWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgdmFsdWVIZWxwQ29udGV4dFBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgZmlsdGVyQmFyTWV0YVBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4obG9jYWxEYXRhUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0aWYgKG5ld1BhdGggJiYgbmV3UGF0aC5nZXRUYXJnZXQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IG5ld1BhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IGNvbnRleHRNZXRhUGF0aC5nZXRDbG9zZXN0RW50aXR5U2V0KCkpIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGNvbnRleHRNZXRhUGF0aC5nZXRNZXRhUGF0aEZvck9iamVjdChuZXdQYXRoLmdldFRhcmdldCgpKT8uZ2V0UmVsYXRpdmVQYXRoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXZhbHVlUGF0aCkge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBjb25kaXRpb25Nb2RlbCArIFwiPi9jb25kaXRpb25zL1wiICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZVBhdGggPSBjb250ZXh0UHJlZml4ICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdHNvdXJjZTogdmFsdWVQYXRoLFxuXHRcdFx0aGVscFBhdGg6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IEJvb2xlYW4ocGFyYW1ldGVyLkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQpXG5cdFx0fTtcblx0fSxcblxuXHRfcGFyYW1ldGVySXNBKHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlciwgcGFyYW1ldGVyVHlwZXM6IENvbW1vbkFubm90YXRpb25UeXBlc1tdKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlclR5cGVzLmluY2x1ZGVzKHBhcmFtZXRlci4kVHlwZSBhcyBDb21tb25Bbm5vdGF0aW9uVHlwZXMpO1xuXHR9LFxuXG5cdF9lbnJpY2hQYXRoOiBmdW5jdGlvbiAoXG5cdFx0cGF0aDogUGF0aCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRleHRlcm5hbElkUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCFwYXRoLmtleSAmJlxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XSkgJiZcblx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lXG5cdFx0KSB7XG5cdFx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHkgPSBleHRlcm5hbElkUGF0aD8uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID0gZXh0ZXJuYWxJZFByb3BlcnR5ID8gZXh0ZXJuYWxJZFByb3BlcnR5IDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0cGF0aC5maWVsZFByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDtcblx0XHRcdHBhdGgua2V5ID0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXG5cdFx0XHQvL09ubHkgdGhlIHRleHQgYW5ub3RhdGlvbiBvZiB0aGUga2V5IGNhbiBzcGVjaWZ5IHRoZSBkZXNjcmlwdGlvblxuXHRcdFx0cGF0aC5kZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XT8uJFBhdGggfHwgXCJcIjtcblx0XHR9XG5cdH0sXG5cblx0X2VucmljaEtleXM6IGZ1bmN0aW9uICh2aEtleXM6IHN0cmluZ1tdLCBwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFZhbHVlTGlzdEhlbHBlci5nZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCkpICYmXG5cdFx0XHQhdmhLZXlzLmluY2x1ZGVzKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSlcblx0XHQpIHtcblx0XHRcdHZoS2V5cy5wdXNoKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRFbnRpdHlUeXBlOiBhc3luYyBmdW5jdGlvbiAobWV0YU1vZGVsVkg6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcblx0XHRyZXR1cm4gbWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L2ApIHx8IChhd2FpdCBtZXRhTW9kZWxWSC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L2ApKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHByZS1wcm9jZXNzIGEgdmFsdWUgbGlzdCBhbm5vdGF0aW9uIGJlZm9yZSB1c2luZyB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGVcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uTW9kZWxcblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gY29udGV4dFByZWZpeFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBRdWFsaWZpZXJcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGVcblx0ICogQHJldHVybnMgVGhlIFZhbHVlTGlzdEluZm8gdG8gYmUgdXNlZCBpbiB0ZW1wbGF0aW5nXG5cdCAqL1xuXHRfcHJvY2Vzc1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZTogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0Y29uZGl0aW9uTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0UHJlZml4OiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIHwgdW5kZWZpbmVkLFxuXHRcdGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWRcblx0KTogVmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgaXNGb3JNdWx0aVZhbHVlRmllbGQgPSBwYXlsb2FkPy51c2VNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgbWV0YU1vZGVsVkggPSBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS4kbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofWA7XG5cdFx0aWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLmVycm9yKGBJbmNvbnNpc3RlbnQgdmFsdWUgaGVscCBtZXRhZGF0YTogRW50aXR5ICR7ZW50aXR5U2V0UGF0aH0gaXMgbm90IGRlZmluZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29sdW1uRGVmcyA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMobWV0YU1vZGVsVkgsIGVudGl0eVNldFBhdGgpLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdID0gW10sXG5cdFx0XHRwYXRoOiBQYXRoID0ge1xuXHRcdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogXCJcIixcblx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRrZXk6IFwiXCJcblx0XHRcdH07XG5cdFx0bGV0IHZoS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRcdGlmIChcIiRLZXlcIiBpbiBlbnRpdHlUeXBlICYmIGVudGl0eVR5cGUuJEtleSkge1xuXHRcdFx0dmhLZXlzID0gWy4uLihlbnRpdHlUeXBlLiRLZXkgYXMgc3RyaW5nW10pXTtcblx0XHR9XG5cdFx0Y29uc3QgZmlyc3RLZXkgPSB2aEtleXNbMF07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5QYXJhbWV0ZXJzKSB7XG5cdFx0XHQvL0FsbCBTdHJpbmcgZmllbGRzIGFyZSBhbGxvd2VkIGZvciBmaWx0ZXJcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9YCxcblx0XHRcdFx0cHJvcGVydHkgPSBtZXRhTW9kZWxWSC5nZXRPYmplY3QocHJvcGVydHlQYXRoKSxcblx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IHBheWxvYWQ/LmV4dGVybmFsSWRQYXRoXG5cdFx0XHRcdFx0PyAoKG1ldGFNb2RlbFZILmdldE9iamVjdChgLyR7cGF5bG9hZD8uZXh0ZXJuYWxJZFBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5KVxuXHRcdFx0XHRcdDogKChtZXRhTW9kZWxWSC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSB8fCB7fSkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSksXG5cdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCB8fCBcIlwiO1xuXG5cdFx0XHRpZiAocGF5bG9hZCAmJiBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdKSB7XG5cdFx0XHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcHJvcGVydHkgY29taW5nIGZvciB0aGUgZW50cnkgaXNuJ3QgZGVmaW5lZCBpblxuXHRcdFx0Ly8gdGhlIG1ldGFtb2RlbCwgdGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IGluIHRoZSBpbi9vdXQgcGFyYW1ldGVyc1xuXHRcdFx0aWYgKHByb3BlcnR5KSB7XG5cdFx0XHRcdC8vIFNlYXJjaCBmb3IgdGhlICpvdXQgUGFyYW1ldGVyIG1hcHBlZCB0byB0aGUgbG9jYWwgcHJvcGVydHlcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9lbnJpY2hQYXRoKFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0cGF5bG9hZD8uZXh0ZXJuYWxJZFBhdGhcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXMoXG5cdFx0XHRcdFx0Y29sdW1uRGVmcyxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vSW4gYW5kIEluT3V0IGFuZCBPdXRcblx0XHRcdGlmIChcblx0XHRcdFx0KFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKSAmJlxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCAhPT0gcHJvcGVydHlOYW1lKSB8fFxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB2aFBhcmFtZXRlciA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VmhQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0Y29uZGl0aW9uTW9kZWwsXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXgsXG5cdFx0XHRcdFx0cGFyYW1ldGVyLFxuXHRcdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFpc0Zvck11bHRpVmFsdWVGaWVsZCB8fFxuXHRcdFx0XHRcdChpc0Zvck11bHRpVmFsdWVGaWVsZCAmJiBWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5dKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBNdWx0aXZhbHVlIEZpZWxkIHdlIGRpc3JlZ2FyZCBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRcdHZoUGFyYW1ldGVycy5wdXNoKHZoUGFyYW1ldGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL0NvbnN0YW50IGFzIEluUGFyYW10ZXIgZm9yIGZpbHRlcmluZ1xuXHRcdFx0aWYgKHBhcmFtZXRlci4kVHlwZSA9PT0gQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50KSB7XG5cdFx0XHRcdHZoUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdFx0XHRzb3VyY2U6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoZWxwUGF0aDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdFx0XHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBCb29sZWFuKHBhcmFtZXRlci5Jbml0aWFsVmFsdWVJc1NpZ25pZmljYW50KVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRW5yaWNoIGtleXMgd2l0aCBvdXQtcGFyYW1ldGVyc1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9lbnJpY2hLZXlzKHZoS2V5cywgcGFyYW1ldGVyKTtcblx0XHR9XG5cdFx0aWYgKCFwYXRoLmtleSkge1xuXHRcdFx0cGF0aC5rZXkgPSBmaXJzdEtleTtcblx0XHR9XG5cblx0XHQvKiBFbnN1cmUgdGhhdCB2aEtleXMgYXJlIHBhcnQgb2YgdGhlIGNvbHVtbkRlZnMsIG90aGVyd2lzZSBpdCBpcyBub3QgY29uc2lkZXJlZCBpbiAkc2VsZWN0IChCQ1AgMjI3MDE0MTE1NCkgKi9cblx0XHRmb3IgKGNvbnN0IHZoS2V5IG9mIHZoS2V5cykge1xuXHRcdFx0aWYgKGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkKGNvbHVtbkRlZnMsIHZoS2V5KSkge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5EZWY6IENvbHVtbkRlZiA9IHtcblx0XHRcdFx0XHRwYXRoOiB2aEtleSxcblx0XHRcdFx0XHQkVHlwZTogbWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXRoLmtleX1gKT8uJFR5cGUsXG5cdFx0XHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IHVuZGVmaW5lZFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZWxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvID0ge1xuXHRcdFx0a2V5UGF0aDogcGF0aC5rZXksXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHBhdGguZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0ZmllbGRQcm9wZXJ0eVBhdGg6IHBhdGguZmllbGRQcm9wZXJ0eVBhdGgsXG5cdFx0XHR2aEtleXM6IHZoS2V5cyxcblx0XHRcdHZoUGFyYW1ldGVyczogdmhQYXJhbWV0ZXJzLFxuXHRcdFx0dmFsdWVMaXN0SW5mbzogYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRjb2x1bW5EZWZzOiBjb2x1bW5EZWZzLFxuXHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyXG5cdFx0fTtcblx0XHRyZXR1cm4gdmFsdWVsaXN0SW5mbztcblx0fSxcblxuXHRfbG9nRXJyb3I6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZXJyb3IgPyAoZXJyb3IgYXMgWE1MSHR0cFJlcXVlc3QpLnN0YXR1cyA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblxuXHRcdExvZy5lcnJvcihtc2cpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNvbXB1dGUgdGhlIHZhbHVlIGxpc3QgaW5mb3MgYmFzZWQgb24gdGhlIHZhbHVlIGxpc3QgYW5ub3RhdGlvbnMgYmVmb3JlIHVzaW5nIHRoZW0gYXQgdGVtcGxhdGluZy5cblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWxcblx0ICogQHJldHVybnMgVGhlIHZhbHVlIGxpc3QgaW5mb3Ncblx0ICovXG5cdGdldFZhbHVlTGlzdEluZm86IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIHwgdW5kZWZpbmVkLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxWYWx1ZUxpc3RJbmZvW10+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdFx0Y29uZGl0aW9uTW9kZWwgPSBwYXlsb2FkPy5jb25kaXRpb25Nb2RlbCxcblx0XHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10gPSBbXSxcblx0XHRcdHByb3BlcnR5UGF0aFBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0QnlRdWFsaWZpZXIgPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8ocHJvcGVydHlQYXRoLCB0cnVlLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXJzID0gVmFsdWVMaXN0SGVscGVyLnB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdChPYmplY3Qua2V5cyh2YWx1ZUxpc3RCeVF1YWxpZmllcikpLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVBhdGhQYXJ0cy5wb3AoKTtcblxuXHRcdFx0Y29uc3QgY29udGV4dFByZWZpeCA9XG5cdFx0XHRcdHBheWxvYWQ/LnVzZU11bHRpVmFsdWVGaWVsZCA9PT0gdHJ1ZSA/IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGV4dFByZWZpeChiaW5kaW5nQ29udGV4dCwgcHJvcGVydHlQYXRoUGFydHMpIDogXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgb2YgdmFsdWVIZWxwUXVhbGlmaWVycykge1xuXHRcdFx0XHQvLyBBZGQgY29sdW1uIGRlZmluaXRpb25zIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgYXMgU2VsZWN0aW9uIGZpZWxkcyBvbiB0aGUgQ29sbGVjdGlvblBhdGggZW50aXR5IHNldC5cblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgPSB2YWx1ZUxpc3RCeVF1YWxpZmllclt2YWx1ZUhlbHBRdWFsaWZpZXJdO1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWxWSCA9IGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofWA7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX2dldEVudGl0eVR5cGUobWV0YU1vZGVsVkgsIGVudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gVmFsdWVMaXN0SGVscGVyLl9wcm9jZXNzUGFyYW1ldGVycyhcblx0XHRcdFx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0Y29uZGl0aW9uTW9kZWwsXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXgsXG5cdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRxdWFsaWZpZXIgPz8gdmFsdWVIZWxwUXVhbGlmaWVyLCAvLyBmb3IgVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzLCBnZXQgdGhlIHF1YWxpZmllciBmcm9tICRxdWFsaWZpZXJcblx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0LyogT25seSBjb25zaXN0ZW50IHZhbHVlIGhlbHAgZGVmaW5pdGlvbnMgc2hhbGwgYmUgcGFydCBvZiB0aGUgdmFsdWUgaGVscCAqL1xuXHRcdFx0XHRpZiAodmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLnB1c2godmFsdWVMaXN0SW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHRoaXMuX2xvZ0Vycm9yKHByb3BlcnR5UGF0aCwgZXJyKTtcblxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmRlc3Ryb3lWSENvbnRlbnQodmFsdWVIZWxwKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm9zO1xuXHR9LFxuXG5cdEFMTEZSQUdNRU5UUzogW10gYXMge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRmcmFnbWVudE5hbWU6IHN0cmluZztcblx0XHRmcmFnbWVudDogdW5rbm93bjtcblx0fVtdLFxuXHRsb2dGcmFnbWVudDogdW5kZWZpbmVkIGFzIExvZ0ZyYWdtZW50TWV0aG9kIHwgdW5kZWZpbmVkLFxuXG5cdF9sb2dUZW1wbGF0ZWRGcmFnbWVudHM6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgZnJhZ21lbnROYW1lOiBzdHJpbmcsIGZyYWdtZW50RGVmaW5pdGlvbjogdW5rbm93bik6IHZvaWQge1xuXHRcdGNvbnN0IGxvZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRmcmFnbWVudE5hbWU6IGZyYWdtZW50TmFtZSxcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudERlZmluaXRpb25cblx0XHR9O1xuXHRcdGlmIChMb2cuZ2V0TGV2ZWwoKSA9PT0gTG9nLkxldmVsLkRFQlVHKSB7XG5cdFx0XHQvL0luIGRlYnVnIG1vZGUgd2UgbG9nIGFsbCBnZW5lcmF0ZWQgZnJhZ21lbnRzXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTID0gVmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUyB8fCBbXTtcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMucHVzaChsb2dJbmZvKTtcblx0XHR9XG5cdFx0aWYgKFZhbHVlTGlzdEhlbHBlci5sb2dGcmFnbWVudCkge1xuXHRcdFx0Ly9PbmUgVG9vbCBTdWJzY3JpYmVyIGFsbG93ZWRcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIubG9nRnJhZ21lbnQ/Lihsb2dJbmZvKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fSxcblxuXHRfdGVtcGxhdGVGcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gPFQgZXh0ZW5kcyBUYWJsZSB8IE1kY0lubmVyVGFibGUgfCBNZGNGaWx0ZXJCYXIgfCBWYWx1ZUhlbHA+KFxuXHRcdGZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0c291cmNlTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscFxuXHQpOiBQcm9taXNlPFQ+IHtcblx0XHRjb25zdCBjb250YWluaW5nVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApKTtcblxuXHRcdGNvbnN0IGxvY2FsVmFsdWVMaXN0SW5mbyA9IHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbyxcblx0XHRcdHZhbHVlTGlzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChsb2NhbFZhbHVlTGlzdEluZm8pLFxuXHRcdFx0dmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCA9IGxvY2FsVmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHR2aWV3RGF0YSA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRjb252ZXJ0ZXJUeXBlOiBcIkxpc3RSZXBvcnRcIixcblx0XHRcdFx0Y29sdW1uczogdmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzIHx8IG51bGxcblx0XHRcdH0pO1xuXG5cdFx0Y29uc3QgZnJhZ21lbnREZWZpbml0aW9uID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoZnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpLFxuXHRcdFx0eyBuYW1lOiBmcmFnbWVudE5hbWUgfSxcblx0XHRcdHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0OiB2YWx1ZUxpc3RNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IHZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke2xvY2FsVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vYCksXG5cdFx0XHRcdFx0c291cmNlOiBzb3VyY2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0OiB2YWx1ZUxpc3RNb2RlbCxcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCxcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCxcblx0XHRcdFx0XHR2aWV3RGF0YTogdmlld0RhdGFcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRWYWx1ZUxpc3RIZWxwZXIuX2xvZ1RlbXBsYXRlZEZyYWdtZW50cyhwcm9wZXJ0eVBhdGgsIGZyYWdtZW50TmFtZSwgZnJhZ21lbnREZWZpbml0aW9uKTtcblx0XHRjb25zdCB0ZW1wbGF0ZUNvbXBvbmVudCA9IGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKT8uZ2V0T3duZXJDb21wb25lbnQoKTtcblx0XHRpZiAodGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdHJldHVybiB0ZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRkZWZpbml0aW9uOiBmcmFnbWVudERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29udHJvbGxlcjogY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdH0pKSBhcyBUO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGZyYWdtZW50RGVmaW5pdGlvbixcblx0XHRcdFx0Y29udHJvbGxlcjogY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHR9KSkgYXMgVDtcblx0XHR9XG5cdH0sXG5cblx0X2dldENvbnRlbnRJZDogZnVuY3Rpb24gKHZhbHVlSGVscElkOiBzdHJpbmcsIHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nLCBpc1R5cGVhaGVhZDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSBpc1R5cGVhaGVhZCA/IFwiUG9wb3ZlclwiIDogXCJEaWFsb2dcIjtcblxuXHRcdHJldHVybiBgJHt2YWx1ZUhlbHBJZH06OiR7Y29udGVudFR5cGV9OjpxdWFsaWZpZXI6OiR7dmFsdWVIZWxwUXVhbGlmaWVyfWA7XG5cdH0sXG5cblx0X2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZDogZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8pOiB2b2lkIHtcblx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblxuXHRcdGlmICghcGF5bG9hZC5xdWFsaWZpZXJzKSB7XG5cdFx0XHRwYXlsb2FkLnF1YWxpZmllcnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoIXBheWxvYWQucXVhbGlmaWVyc1t2YWx1ZUhlbHBRdWFsaWZpZXJdKSB7XG5cdFx0XHRjb25zdCB2aFByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRcdHZhbHVlTGlzdEluZm8uY29sdW1uRGVmcy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKCFjb2x1bW4ucGF0aC5pbmNsdWRlcyhcIipcIikpIHtcblx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIDEuLm4gdGhlIGNvbmRpdGlvbiBwYXRoIGluY2x1ZGVzIGEgKiBzbyB3ZSBoYXZlIHRvIHJlbW92ZSB0aGlzXG5cdFx0XHRcdFx0dmhQcm9wZXJ0aWVzLmFkZChjb2x1bW4ucGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNvbHVtbi50ZXh0UGF0aCkge1xuXHRcdFx0XHRcdHZoUHJvcGVydGllcy5hZGQoY29sdW1uLnRleHRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRwYXlsb2FkLnF1YWxpZmllcnNbdmFsdWVIZWxwUXVhbGlmaWVyXSA9IHtcblx0XHRcdFx0dmhLZXlzOiB2YWx1ZUxpc3RJbmZvLnZoS2V5cyxcblx0XHRcdFx0dmhQYXJhbWV0ZXJzOiB2YWx1ZUxpc3RJbmZvLnZoUGFyYW1ldGVycyxcblx0XHRcdFx0dmhQcm9wZXJ0aWVzOiBBcnJheS5mcm9tKHZoUHJvcGVydGllcylcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRWYWx1ZUhlbHBDb2x1bW5EaXNwbGF5Rm9ybWF0OiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBEaXNwbGF5Rm9ybWF0IHtcblx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShwcm9wZXJ0eUFubm90YXRpb25zLCB1bmRlZmluZWQpLFxuXHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eUFubm90YXRpb25zICYmIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdLFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRleHRBbm5vdGF0aW9uICYmIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudF07XG5cblx0XHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdHJldHVybiB0ZXh0QW5ub3RhdGlvbiAmJiB0eXBlb2YgdGV4dEFubm90YXRpb24gIT09IFwic3RyaW5nXCIgJiYgdGV4dEFubm90YXRpb24uJFBhdGggPyBkaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBleHBsaWNpdCBkZWZpbmVkIFRleHRBcnJhbmdlbWVudHMgaW4gYSBWYWx1ZSBIZWxwIHdpdGggRGlhbG9nIGFyZSBjb25zaWRlcmVkXG5cdFx0XHRyZXR1cm4gdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA/IGRpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0V2lkdGhJblJlbTogZnVuY3Rpb24gKGNvbnRyb2w6IENvbnRyb2wsIGlzVW5pdFZhbHVlSGVscDogYm9vbGVhbik6IG51bWJlciB7XG5cdFx0bGV0IHdpZHRoID0gY29udHJvbC4kKCkud2lkdGgoKTsgLy8gSlF1ZXJ5XG5cdFx0aWYgKGlzVW5pdFZhbHVlSGVscCAmJiB3aWR0aCkge1xuXHRcdFx0d2lkdGggPSAwLjMgKiB3aWR0aDtcblx0XHR9XG5cdFx0Y29uc3QgZmxvYXRXaWR0aCA9IHdpZHRoID8gcGFyc2VGbG9hdChTdHJpbmcoUmVtLmZyb21QeCh3aWR0aCkpKSA6IDA7XG5cblx0XHRyZXR1cm4gaXNOYU4oZmxvYXRXaWR0aCkgPyAwIDogZmxvYXRXaWR0aDtcblx0fSxcblxuXHRfZ2V0VGFibGVXaWR0aDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgbWluV2lkdGg6IG51bWJlciwgaXNNdWx0aVNlbGVjdDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0bGV0IHdpZHRoOiBzdHJpbmc7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRhYmxlLmdldENvbHVtbnMoKSxcblx0XHRcdHZpc2libGVDb2x1bW5zID1cblx0XHRcdFx0KGNvbHVtbnMgJiZcblx0XHRcdFx0XHRjb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sdW1uICYmIGNvbHVtbi5nZXRWaXNpYmxlICYmIGNvbHVtbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdFx0fSkpIHx8XG5cdFx0XHRcdFtdLFxuXHRcdFx0Ly8gd2UgYWRkIDFlbSBmb3IgZXZlcnkgY29sdW1uIGFuZCAyLjVlbSBmb3IgYSBtdWx0aXNlbGVjdCBjaGVja2JveFxuXHRcdFx0aW5pdGlhbFN1bSA9IHZpc2libGVDb2x1bW5zLmxlbmd0aCArIChpc011bHRpU2VsZWN0ID8gMi41IDogMCksXG5cdFx0XHRzdW1XaWR0aCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBjb2x1bW4pIHtcblx0XHRcdFx0d2lkdGggPSBjb2x1bW4uZ2V0V2lkdGgoKTtcblx0XHRcdFx0aWYgKHdpZHRoICYmIHdpZHRoLmVuZHNXaXRoKFwicHhcIikpIHtcblx0XHRcdFx0XHR3aWR0aCA9IFN0cmluZyhSZW0uZnJvbVB4KHdpZHRoKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZmxvYXRXaWR0aCA9IHBhcnNlRmxvYXQod2lkdGgpO1xuXG5cdFx0XHRcdHJldHVybiBzdW0gKyAoaXNOYU4oZmxvYXRXaWR0aCkgPyA5IDogZmxvYXRXaWR0aCk7XG5cdFx0XHR9LCBpbml0aWFsU3VtKTtcblx0XHRyZXR1cm4gYCR7TWF0aC5tYXgoc3VtV2lkdGgsIG1pbldpZHRoKX1lbWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgSlNPTiBNb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgZnJhZ21lbnQgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvckRpYWxvZzogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZFxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ZSA9IGZhbHNlLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IHRydWUsXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBpc0Ryb3BEb3duTGlzdGUsIGlzRGlhbG9nVGFibGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogZmFsc2UsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBpc0Ryb3BEb3duTGlzdGVcblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSBkZWZpbmUgY29uZGl0aW9uIHZhbHVlIGhlbHAgZnJhZ21lbnQgaW4gdGhlIHZhbHVlIGhlbHAgZGlhbG9nIHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcGFyYW0gY2FzZVNlbnNpdGl2ZVxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JDb25kaXRpb246IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1EQ1RhYmxlLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhblxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ZSA9IGZhbHNlLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IGZhbHNlLFxuXHRcdFx0Y29sdW1uSW5mbyA9IFZhbHVlTGlzdEhlbHBlci5nZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgaXNEcm9wRG93bkxpc3RlLCBpc0RpYWxvZ1RhYmxlKTtcblxuXHRcdHJldHVybiBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBjb250ZW50LmdldElkKCksXG5cdFx0XHRncm91cElkOiBwYXlsb2FkLnJlcXVlc3RHcm91cElkIHx8IHVuZGVmaW5lZCxcblx0XHRcdGJTdWdnZXN0aW9uOiB0cnVlLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogaXNEcm9wRG93bkxpc3RlLFxuXHRcdFx0ZGVzY3JpcHRpb25QYXRoOiB2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdGtleVBhdGg6IHZhbHVlTGlzdEluZm8ua2V5UGF0aCxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSB2YWx1ZSBoZWxwIHR5cGVhaGVhZCBmcmFnbWVudCB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHBhcmFtIHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyBTcGVjaWZ5IGlzIGl0IGRyb3Bkb3dubGlzdCBvciBub3Rcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBpc0RpYWxvZ1RhYmxlID0gZmFsc2UsXG5cdFx0XHRjb250ZW50SWQgPSBjb250ZW50LmdldElkKCksXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKFxuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzLFxuXHRcdFx0XHRpc0RpYWxvZ1RhYmxlXG5cdFx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnRJZCxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IHRydWUsXG5cdFx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aCxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlc1xuXHRcdH0pO1xuXHR9LFxuXG5cdF9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZW50OiBNVGFibGUsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXSA/PyBmYWxzZSxcblx0XHRcdHNvdXJjZU1vZGVsID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCwgdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKTtcblxuXHRcdGNvbnRlbnQuc2V0S2V5UGF0aCh2YWx1ZUxpc3RJbmZvLmtleVBhdGgpO1xuXHRcdGNvbnRlbnQuc2V0RGVzY3JpcHRpb25QYXRoKHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoKTtcblx0XHRwYXlsb2FkLmlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzO1xuXHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA/PyBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdO1xuXHRcdHBheWxvYWQuaGlzdG9yeSA9IHtcblx0XHRcdGVuYWJsZWQ6IHRoaXMuY2hlY2tIaXN0b3J5RW5hYmxlZCh2YWx1ZUhlbHAsIHBheWxvYWQpXG5cdFx0fTtcblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblxuXHRcdGNvbnRlbnQuZGF0YShcInNlYXJjaFN1cHBvcnRlZFwiLCBWYWx1ZUxpc3RIZWxwZXIuZW50aXR5SXNTZWFyY2hhYmxlKHByb3BlcnR5QW5ub3RhdGlvbnMsIGNvbGxlY3Rpb25Bbm5vdGF0aW9ucykgPyB0cnVlIDogZmFsc2UpO1xuXG5cdFx0Y29uc3QgdGFibGUgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8VGFibGU+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RUYWJsZVwiLFxuXHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdHNvdXJjZU1vZGVsLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0dmFsdWVIZWxwXG5cdFx0KTtcblxuXHRcdHRhYmxlLnNldE1vZGVsKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwpO1xuXG5cdFx0TG9nLmluZm8oYFZhbHVlIExpc3QtIHN1Z2dlc3QgVGFibGUgWE1MIGNvbnRlbnQgY3JlYXRlZCBbJHtwcm9wZXJ0eVBhdGh9XWAsIHRhYmxlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpLCBcIk1EQyBUZW1wbGF0aW5nXCIpO1xuXG5cdFx0Y29udGVudC5zZXRUYWJsZSh0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cblx0XHRpZiAoXG5cdFx0XHRmaWVsZCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHQoZmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikgfHxcblx0XHRcdFx0ZmllbGQuaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgfHxcblx0XHRcdFx0KGZpZWxkLmlzQTxGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykgfHxcblx0XHRcdFx0ZmllbGQuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSlcblx0XHQpIHtcblx0XHRcdC8vQ2FuIHRoZSBmaWx0ZXJmaWVsZCBiZSBzb21ldGhpbmcgZWxzZSB0aGF0IHdlIG5lZWQgdGhlIC5pc0EoKSBjaGVjaz9cblx0XHRcdGNvbnN0IHRhYmxlTW9kZSA9XG5cdFx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyAmJiAoZmllbGQgYXMgRmllbGRCYXNlKS5nZXRNYXhDb25kaXRpb25zKCkgIT09IDEgPyBcIk11bHRpU2VsZWN0XCIgOiBcIlNpbmdsZVNlbGVjdE1hc3RlclwiO1xuXHRcdFx0dGFibGUuc2V0TW9kZSh0YWJsZU1vZGUpO1xuXG5cdFx0XHR0YWJsZS5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFJlc2l6ZUhhbmRsZXIucmVnaXN0ZXIodGFibGUsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fc2V0VGFibGVXaWR0aCh0YWJsZSwgZmllbGQsIHRhYmxlTW9kZSwgcGF5bG9hZC5pc1VuaXRWYWx1ZUhlbHApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX3NldFRhYmxlV2lkdGgodGFibGUsIGZpZWxkLCB0YWJsZU1vZGUsIHBheWxvYWQuaXNVbml0VmFsdWVIZWxwKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldFRhYmxlV2lkdGgodGFibGU6IFRhYmxlLCBmaWVsZDogQ29udHJvbCwgdGFibGVNb2RlOiBzdHJpbmcsIGlzVW5pdFZhbHVlSGVscD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCByZWR1Y2VXaWR0aEZvclVuaXRWYWx1ZUhlbHAgPSBCb29sZWFuKGlzVW5pdFZhbHVlSGVscCk7XG5cdFx0Y29uc3QgdGFibGVXaWR0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VGFibGVXaWR0aChcblx0XHRcdHRhYmxlLFxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9nZXRXaWR0aEluUmVtKGZpZWxkLCByZWR1Y2VXaWR0aEZvclVuaXRWYWx1ZUhlbHApLFxuXHRcdFx0dGFibGVNb2RlID09PSBcIk11bHRpU2VsZWN0XCJcblx0XHQpO1xuXG5cdFx0dGFibGUuc2V0V2lkdGgodGFibGVXaWR0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBoaXN0b3J5IGlzIGVuYWJsZWQgZm9yIGEgY2VydGFpbiBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgdmFsdWUgaGVscCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaGlzdG9yeSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrSGlzdG9yeUVuYWJsZWQ6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCwgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCkpO1xuXHRcdGNvbnN0IGhpc3RvcnlTZXR0aW5ncyA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5oaXN0b3J5U2V0dGluZ3M7XG5cdFx0cmV0dXJuIGhpc3RvcnlTZXR0aW5ncz8uZmllbGRzPy5bcGF5bG9hZC5wcm9wZXJ0eVBhdGhdPy5oaXN0b3J5RW5hYmxlZCA/PyB0cnVlO1xuXHR9LFxuXG5cdGlzVmFsdWVMaXN0U2VhcmNoYWJsZShwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdmFsdWVMaXN0TWV0YW1vZGVsID0gdmFsdWVMaXN0LnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IHZhbHVlTGlzdE1ldGFtb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSA/PyB7fTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPSB2YWx1ZUxpc3RNZXRhbW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgPz8ge307XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKTtcblx0fSxcblxuXHRfY3JlYXRlVmFsdWVIZWxwRGlhbG9nOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y29uZGl0aW9uQ29udGVudD86IENvbmRpdGlvbnNcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2cgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JEaWFsb2codmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkKTtcblxuXHRcdGNvbnRlbnQuc2V0S2V5UGF0aCh2YWx1ZUxpc3RJbmZvLmtleVBhdGgpO1xuXHRcdGNvbnRlbnQuc2V0RGVzY3JpcHRpb25QYXRoKHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPVxuXHRcdFx0dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgfHwge307XG5cdFx0Y29udGVudC5kYXRhKFwic2VhcmNoU3VwcG9ydGVkXCIsIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKSA/IHRydWUgOiBmYWxzZSk7XG5cdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gcGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID8/IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV07XG5cblx0XHRpZiAoY29uZGl0aW9uQ29udGVudCkge1xuXHRcdFx0Y29uc3QgZmlyc3RUeXBlQWhlYWRDb250ZW50ID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpLmdldENvbnRlbnQoKVswXSBhcyBNVGFibGUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmUgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0Q2FzZVNlbnNpdGl2ZSgpO1xuXG5cdFx0XHRjb25zdCBzb3VyY2VNb2RlbENvbmRpdGlvbiA9IHRoaXMuX2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbih2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGNvbnRlbnQsIHBheWxvYWQsIGNhc2VTZW5zaXRpdmUpO1xuXG5cdFx0XHRjb25zdCBjb25kaXRpb24gPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8VmFsdWVIZWxwPihcblx0XHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RGb3JDb25kaXRpb25cIixcblx0XHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdFx0c291cmNlTW9kZWxDb25kaXRpb24sXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0dmFsdWVIZWxwXG5cdFx0XHQpO1xuXHRcdFx0LyogQXMgdGhlIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgdG8gYW4gYWdncmVnYXRpb24sIGJ1dCBqdXN0IGFzc29jaWF0ZWQsIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIG1vZGVsICovXG5cdFx0XHRjb25kaXRpb24uc2V0TW9kZWwobWV0YU1vZGVsKTtcblxuXHRcdFx0LyogQWRkIGFzIGRlcGVuZGVudCwgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGJlIHByb3Blcmx5IGRlc3Ryb3llZCBkdXJpbmcgbGlmZWN5Y2xlIGhhbmRsaW5nICovXG5cdFx0XHRjb25kaXRpb25Db250ZW50LmFkZERlcGVuZGVudChjb25kaXRpb24pO1xuXHRcdFx0Y29uZGl0aW9uQ29udGVudC5zZXRWYWx1ZUhlbHAoY29uZGl0aW9uLmdldElkKCkpO1xuXG5cdFx0XHRjb25zdCBjb25kaXRpb25UYWJsZSA9IGNvbmRpdGlvblxuXHRcdFx0XHQuZ2V0VHlwZWFoZWFkKClcblx0XHRcdFx0LmdldENvbnRlbnQoKVswXSAvLyB0aGVyZSBpcyBvbmx5IG9uZSB0YWJsZVxuXHRcdFx0XHQuZ2V0VGFibGUoKTtcblxuXHRcdFx0Y29uc3QgdGFibGVXaWR0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VGFibGVXaWR0aChjb25kaXRpb25UYWJsZSwgMCwgZmFsc2UpO1xuXHRcdFx0Y29uZGl0aW9uVGFibGUuc2V0V2lkdGgodGFibGVXaWR0aCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFibGVQcm9taXNlID0gVmFsdWVMaXN0SGVscGVyLl90ZW1wbGF0ZUZyYWdtZW50PE1kY0lubmVyVGFibGU+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3REaWFsb2dUYWJsZVwiLFxuXHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdHNvdXJjZU1vZGVsRGlhbG9nLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0dmFsdWVIZWxwXG5cdFx0KTtcblxuXHRcdGNvbnN0IGZpbHRlckJhclByb21pc2UgPSBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8RmlsdGVyQmFyPihcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuVmFsdWVMaXN0RmlsdGVyQmFyXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2csXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0Y29uc3QgW3RhYmxlLCBmaWx0ZXJCYXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RhYmxlUHJvbWlzZSwgZmlsdGVyQmFyUHJvbWlzZV0pO1xuXG5cdFx0dGFibGUuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cdFx0ZmlsdGVyQmFyLnNldE1vZGVsKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwpO1xuXG5cdFx0Y29udGVudC5zZXRGaWx0ZXJCYXIoZmlsdGVyQmFyKTtcblx0XHRjb250ZW50LnNldFRhYmxlKHRhYmxlKTtcblxuXHRcdHRhYmxlLnNldEZpbHRlcihmaWx0ZXJCYXIuZ2V0SWQoKSk7XG5cdFx0dGFibGUuaW5pdGlhbGl6ZWQoKTtcblxuXHRcdHRhYmxlLnNldFdpZHRoKFwiMTAwJVwiKTtcblxuXHRcdFZhbHVlTGlzdEhlbHBlci5zZXRDb3B5UHJvdmlkZXJWaXNpYmlsaXR5KHRhYmxlLCB2YWx1ZUhlbHApO1xuXG5cdFx0Ly9UaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcnJvdW5kIC0gcHJvdmlkZWQgYnkgTURDIChzZWUgRklPUklURUNIUDEtMjQwMDIpXG5cdFx0Y29uc3QgbWRjVGFibGUgPSB0YWJsZSBhcyB1bmtub3duIGFzIHsgX3NldFNob3dQMTNuQnV0dG9uOiBGdW5jdGlvbiB9O1xuXHRcdG1kY1RhYmxlLl9zZXRTaG93UDEzbkJ1dHRvbihmYWxzZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJsZSBhdHRyaWJ1dGUgb2YgdGhlIENvcHlQcm92aWRlciBiYXNlZCBvbiB0aGUgTWF4Q29uZGl0aW9uIG9mIHRoZSBmaWVsZC5cblx0ICogSW4gY2FzZSBvZiBhIHNpbmdsZSBzZWxlY3Rpb24sIHRoZSBjb3B5IGJ1dHRvbiBpcyBoaWRkZW4uIEluIGFub3RoZXIgY2FzZSwgaXQgaXMgdmlzaWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBNREMgdGFibGUgb2YgdGhlIFZhbHVlIEhlbHAgZGlhbG9nXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgVGhlIFZhbHVlIEhlbHAgb2JqZWN0XG5cdCAqL1xuXHRzZXRDb3B5UHJvdmlkZXJWaXNpYmlsaXR5OiBmdW5jdGlvbiAodGFibGU6IE1kY0lubmVyVGFibGUsIHZhbHVlSGVscDogVmFsdWVIZWxwKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmlzQTxGaWVsZEJhc2U+KFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZEJhc2VcIikpIHtcblx0XHRcdHRhYmxlLmdldENvcHlQcm92aWRlcigpPy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Q29udGVudEJ5SWQ6IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTVRhYmxlIHwgTURDVGFibGU+KGNvbnRlbnRMaXN0OiBDb250ZW50W10sIGNvbnRlbnRJZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGNvbnRlbnRMaXN0LmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHJldHVybiBpdGVtLmdldElkKCkgPT09IGNvbnRlbnRJZDtcblx0XHR9KSBhcyBUIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdF9jcmVhdGVQb3BvdmVyQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnRJZDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuLCB1c2VBc1ZhbHVlSGVscDogYm9vbGVhbik6IE1UYWJsZSB7XG5cdFx0cmV0dXJuIG5ldyBNVGFibGUoe1xuXHRcdFx0aWQ6IGNvbnRlbnRJZCxcblx0XHRcdGdyb3VwOiBcImdyb3VwMVwiLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZSxcblx0XHRcdHVzZUFzVmFsdWVIZWxwOiB1c2VBc1ZhbHVlSGVscFxuXHRcdH0gYXMgJE1UYWJsZVNldHRpbmdzKTtcblx0fSxcblxuXHRfY3JlYXRlRGlhbG9nQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnRJZDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuLCBmb3JjZUJpbmQ6IGJvb2xlYW4pOiBNRENUYWJsZSB7XG5cdFx0cmV0dXJuIG5ldyBNRENUYWJsZSh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXA6IFwiZ3JvdXAxXCIsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0Zm9yY2VCaW5kOiBmb3JjZUJpbmRcblx0XHR9IGFzICRNRENUYWJsZVNldHRpbmdzKTtcblx0fSxcblxuXHRfc2hvd0NvbmRpdGlvbnNDb250ZW50OiBmdW5jdGlvbiAoY29udGVudExpc3Q6IENvbnRlbnRbXSwgY29udGFpbmVyOiBDb250YWluZXIpOiBDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29uZGl0aW9uc0NvbnRlbnQgPVxuXHRcdFx0Y29udGVudExpc3QubGVuZ3RoICYmIGNvbnRlbnRMaXN0W2NvbnRlbnRMaXN0Lmxlbmd0aCAtIDFdLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnQuQ29uZGl0aW9uc1wiXG5cdFx0XHRcdD8gKGNvbnRlbnRMaXN0W2NvbnRlbnRMaXN0Lmxlbmd0aCAtIDFdIGFzIENvbmRpdGlvbnMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGNvbmRpdGlvbnNDb250ZW50KSB7XG5cdFx0XHRjb25kaXRpb25zQ29udGVudC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25kaXRpb25zQ29udGVudCA9IG5ldyBDb25kaXRpb25zKCk7XG5cdFx0XHRjb250YWluZXIuYWRkQ29udGVudChjb25kaXRpb25zQ29udGVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbmRpdGlvbnNDb250ZW50O1xuXHR9LFxuXG5cdF9hbGlnbk9yQ3JlYXRlQ29udGVudDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0Y29udGVudElkOiBzdHJpbmcsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcblx0XHRzaG93Q29uZGl0aW9uUGFuZWw6IGJvb2xlYW4sXG5cdFx0Y29udGFpbmVyOiBDb250YWluZXJcblx0KTogTURDVGFibGUge1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblx0XHRsZXQgY29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudEJ5SWQ8TURDVGFibGU+KGNvbnRlbnRMaXN0LCBjb250ZW50SWQpO1xuXG5cdFx0aWYgKCFjb250ZW50KSB7XG5cdFx0XHRjb25zdCBmb3JjZUJpbmQgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uRmV0Y2hWYWx1ZXMgPT09IDIgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRcdGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZURpYWxvZ0NvbnRlbnQoY29udGVudElkLCBjYXNlU2Vuc2l0aXZlLCBmb3JjZUJpbmQpO1xuXG5cdFx0XHRpZiAoIXNob3dDb25kaXRpb25QYW5lbCkge1xuXHRcdFx0XHRjb250YWluZXIuYWRkQ29udGVudChjb250ZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRhaW5lci5pbnNlcnRDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRMaXN0Lmxlbmd0aCAtIDEpOyAvLyBpbnNlcnQgY29udGVudCBiZWZvcmUgY29uZGl0aW9ucyBjb250ZW50XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH0sXG5cblx0X3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250YWluZXI6IENvbnRhaW5lcixcblx0XHR2YWx1ZUxpc3RJbmZvczogVmFsdWVMaXN0SW5mb1tdLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcblx0XHRmaXJzdFR5cGVBaGVhZENvbnRlbnQ6IE1UYWJsZVxuXHQpOiB7IHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm87IGNvbnRlbnQ6IE1UYWJsZSB9IHtcblx0XHRjb25zdCBjb250ZW50TGlzdCA9IGNvbnRhaW5lci5nZXRDb250ZW50KCk7XG5cdFx0bGV0IHF1YWxpZmllckZvclR5cGVhaGVhZCA9IHZhbHVlSGVscC5kYXRhKFwidmFsdWVsaXN0Rm9yVmFsaWRhdGlvblwiKSB8fCBcIlwiOyAvLyBjYW4gYWxzbyBiZSBudWxsXG5cdFx0aWYgKHF1YWxpZmllckZvclR5cGVhaGVhZCA9PT0gXCIgXCIpIHtcblx0XHRcdHF1YWxpZmllckZvclR5cGVhaGVhZCA9IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBxdWFsaWZpZXJGb3JUeXBlYWhlYWQgLy8gZmFsbGJhY2sgaWYgcXVhbGlmaWVyIGZvciBUeXBlYWhlYWQgbm90IGV4aXN0c1xuXHRcdFx0PyB2YWx1ZUxpc3RJbmZvcy5maWx0ZXIoZnVuY3Rpb24gKHN1YlZhbHVlTGlzdEluZm8pIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViVmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXIgPT09IHF1YWxpZmllckZvclR5cGVhaGVhZDtcblx0XHRcdCAgfSlbMF0gfHwgdmFsdWVMaXN0SW5mb3NbMF1cblx0XHRcdDogdmFsdWVMaXN0SW5mb3NbMF07XG5cblx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZChwYXlsb2FkLCB2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdGNvbnN0IGNvbnRlbnRJZCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudElkKHZhbHVlSGVscC5nZXRJZCgpLCB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllciwgdHJ1ZSk7XG5cdFx0bGV0IGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRCeUlkPE1UYWJsZT4oY29udGVudExpc3QsIGNvbnRlbnRJZCk7XG5cblx0XHRpZiAoIWNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IHVzZUFzVmFsdWVIZWxwID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldFVzZUFzVmFsdWVIZWxwKCk7XG5cdFx0XHRjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVQb3BvdmVyQ29udGVudChjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIHVzZUFzVmFsdWVIZWxwKTtcblxuXHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgMCk7IC8vIGluc2VydCBjb250ZW50IGFzIGZpcnN0IGNvbnRlbnRcblx0XHR9IGVsc2UgaWYgKGNvbnRlbnRJZCAhPT0gY29udGVudExpc3RbMF0uZ2V0SWQoKSkge1xuXHRcdFx0Ly8gY29udGVudCBhbHJlYWR5IGF2YWlsYWJsZSBidXQgbm90IGFzIGZpcnN0IGNvbnRlbnQ/XG5cdFx0XHRjb250YWluZXIucmVtb3ZlQ29udGVudChjb250ZW50KTtcblx0XHRcdGNvbnRhaW5lci5pbnNlcnRDb250ZW50KGNvbnRlbnQsIDApOyAvLyBtb3ZlIGNvbnRlbnQgdG8gZmlyc3QgcG9zaXRpb25cblx0XHR9XG5cblx0XHRyZXR1cm4geyB2YWx1ZUxpc3RJbmZvLCBjb250ZW50IH07XG5cdH0sXG5cblx0X3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2c6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250YWluZXI6IENvbnRhaW5lcixcblx0XHR2YWx1ZUxpc3RJbmZvczogVmFsdWVMaXN0SW5mb1tdLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0c2VsZWN0ZWRDb250ZW50SWQ6IHN0cmluZyxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuXG5cdCk6IHtcblx0XHRzZWxlY3RlZEluZm86IFZhbHVlTGlzdEluZm87XG5cdFx0c2VsZWN0ZWRDb250ZW50OiBNRENUYWJsZTtcblx0XHRjb25kaXRpb25Db250ZW50PzogQ29uZGl0aW9ucztcblx0fSB7XG5cdFx0Y29uc3Qgc2hvd0NvbmRpdGlvblBhbmVsID0gdmFsdWVIZWxwLmRhdGEoXCJzaG93Q29uZGl0aW9uUGFuZWxcIikgJiYgdmFsdWVIZWxwLmRhdGEoXCJzaG93Q29uZGl0aW9uUGFuZWxcIikgIT09IFwiZmFsc2VcIjtcblx0XHRjb25zdCBjb250ZW50TGlzdCA9IGNvbnRhaW5lci5nZXRDb250ZW50KCk7XG5cblx0XHQvLyBzZXQgYWxsIGNvbnRlbnRzIHRvIGludmlzaWJsZVxuXHRcdGZvciAoY29uc3QgY29udGVudExpc3RJdGVtIG9mIGNvbnRlbnRMaXN0KSB7XG5cdFx0XHRjb250ZW50TGlzdEl0ZW0uc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29uZGl0aW9uQ29udGVudCA9IHNob3dDb25kaXRpb25QYW5lbCA/IHRoaXMuX3Nob3dDb25kaXRpb25zQ29udGVudChjb250ZW50TGlzdCwgY29udGFpbmVyKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cblx0XHQvLyBGb3IgYSBGaWx0ZXJGaWVsZCB3ZSBjaGVjayB0aGUgb3BlcmF0b3JzIGlmIHRoZXkgYXJlIGRlZmF1bHQgKGVtcHR5IGxpc3Q9YWxsKSBvciBpbmNsdWRlIEVRXG5cdFx0Y29uc3QgaGFzT3BlcmF0b3JFUSA9XG5cdFx0XHRmaWVsZCAmJiBmaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKVxuXHRcdFx0XHQ/IGZpZWxkLmdldE9wZXJhdG9ycygpLmxlbmd0aCA9PT0gMCB8fCBmaWVsZC5nZXRPcGVyYXRvcnMoKS5pbmNsdWRlcyhcIkVRXCIpXG5cdFx0XHRcdDogdHJ1ZTtcblxuXHRcdGxldCBzZWxlY3RlZEluZm86IFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQsIHNlbGVjdGVkQ29udGVudDogTURDVGFibGUgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBDcmVhdGUgb3IgcmV1c2UgY29udGVudHMgZm9yIHRoZSBjdXJyZW50IGNvbnRleHRcblx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdEluZm8gb2YgdmFsdWVMaXN0SW5mb3MpIHtcblx0XHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZChwYXlsb2FkLCB2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdFx0Y29uc3QgY29udGVudElkID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50SWQodmFsdWVIZWxwLmdldElkKCksIHZhbHVlSGVscFF1YWxpZmllciwgZmFsc2UpO1xuXG5cdFx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5fYWxpZ25PckNyZWF0ZUNvbnRlbnQodmFsdWVMaXN0SW5mbywgY29udGVudElkLCBjYXNlU2Vuc2l0aXZlLCBzaG93Q29uZGl0aW9uUGFuZWwsIGNvbnRhaW5lcik7XG5cdFx0XHRjb250ZW50LnNldFZpc2libGUoaGFzT3BlcmF0b3JFUSk7IC8vIERvIG5vdCBzaG93IGEgdmFsdWUgaGVscCB0YWJsZSBmb3IgYSBmaWx0ZXIgZmllbGQgd2l0aG91dCBvcGVyYXRvciAnRVEnXG5cblx0XHRcdGlmICh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uTGFiZWwgJiYgZmllbGQpIHtcblx0XHRcdFx0Y29uc3QgdGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5MYWJlbCwgZmllbGQpO1xuXHRcdFx0XHRjb250ZW50LnNldFRpdGxlKHRpdGxlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxlY3RlZENvbnRlbnQgfHwgKHNlbGVjdGVkQ29udGVudElkICYmIHNlbGVjdGVkQ29udGVudElkID09PSBjb250ZW50SWQpKSB7XG5cdFx0XHRcdHNlbGVjdGVkQ29udGVudCA9IGNvbnRlbnQ7XG5cdFx0XHRcdHNlbGVjdGVkSW5mbyA9IHZhbHVlTGlzdEluZm87XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxlY3RlZEluZm8gfHwgIXNlbGVjdGVkQ29udGVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2VsZWN0ZWRJbmZvIG9yIHNlbGVjdGVkQ29udGVudCB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgc2VsZWN0ZWRJbmZvLCBzZWxlY3RlZENvbnRlbnQsIGNvbmRpdGlvbkNvbnRlbnQgfTtcblx0fSxcblxuXHRfYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZDogZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHRpZiAocGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGggIT09IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoIHx8IHBheWxvYWQuZXh0ZXJuYWxJZFBhdGgpIHtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCA9IChcblx0XHRcdFx0Y29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KHBheWxvYWQucHJvcGVydHlQYXRoKS50YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdFx0XHQ/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0KT8ucGF0aDtcblxuXHRcdFx0LyogRW5yaWNoIHBheWxvYWQgd2l0aCBUZXh0IFByb3BlcnR5IEluZm9zICovXG5cdFx0XHRwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBLZXlQYXRoID0gdmFsdWVMaXN0SW5mby5rZXlQYXRoO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdHBheWxvYWQubWF4TGVuZ3RoID0gcGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGhcblx0XHRcdFx0XHQ/IGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRcdFx0YC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aH1gXG5cdFx0XHRcdFx0ICApPy50YXJnZXQ/Lm1heExlbmd0aFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRwYXlsb2FkLnByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHR9XG5cblx0XHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRcdC8vIEFkZCBkZXNjcmlwdGlvblBhdGggdG8gdGhlIHBheWxvYWQgYW5kIHZhbHVlTGlzdEluZm9cblx0XHRcdGNvbnN0IGV4dGVybmFsSWRQYXRoID0gcGF5bG9hZC5leHRlcm5hbElkUGF0aDtcblx0XHRcdGlmIChleHRlcm5hbElkUGF0aCAmJiAhcGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwYXlsb2FkLnByb3BlcnR5UGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkRnVsbFBhdGggPSBwYXlsb2FkLnByb3BlcnR5UGF0aC5yZXBsYWNlKHByb3BlcnR5TmFtZSwgZXh0ZXJuYWxJZFBhdGgpO1xuXHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSAoXG5cdFx0XHRcdFx0Y29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KGV4dGVybmFsSWRGdWxsUGF0aCkudGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHRcdFx0XHQ/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0XHQpPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGggPSBkZXNjcmlwdGlvblBhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHNob3dWYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLCBjb250YWluZXI6IENvbnRhaW5lciwgc2VsZWN0ZWRDb250ZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHZhbHVlSGVscCA9IGNvbnRhaW5lci5nZXRQYXJlbnQoKSBhcyBWYWx1ZUhlbHAsXG5cdFx0XHRpc1R5cGVhaGVhZCA9IGNvbnRhaW5lci5pc1R5cGVhaGVhZCgpLFxuXHRcdFx0cHJvcGVydHlQYXRoID0gcGF5bG9hZC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHQvKiBJbiBjYXNlIG9mIFJBUCB0aGUgdmFsdWVIZWxwIG1vZGVsIGlzIGRpZmZlcmVudCB0byB0aGUgY29udHJvbCBtb2RlbCAqL1xuXHRcdFx0Y29udHJvbCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBjb250cm9sXG5cdFx0XHRcdD8gKHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0OiAodmFsdWVIZWxwLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHR2aFVJTW9kZWwgPVxuXHRcdFx0XHR2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0PyAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKVxuXHRcdFx0XHRcdDogVmFsdWVMaXN0SGVscGVyLmNyZWF0ZVZIVUlNb2RlbCh2YWx1ZUhlbHAsIHByb3BlcnR5UGF0aCwgbWV0YU1vZGVsKTtcblx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0cGF5bG9hZC5leHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3BheWxvYWQucHJvcGVydHlQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRXh0ZXJuYWxJRGApPy4kUGF0aDtcblxuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc1N1Z2dlc3Rpb25cIiwgaXNUeXBlYWhlYWQpO1xuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9taW5TY3JlZW5XaWR0aFwiLCAhaXNUeXBlYWhlYWQgPyBcIjQxOHB4XCIgOiB1bmRlZmluZWQpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm9zID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGgsIHBheWxvYWQsIG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBmaXJzdFR5cGVBaGVhZENvbnRlbnQgPSB2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkuZ2V0Q29udGVudCgpWzBdIGFzIE1UYWJsZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRDYXNlU2Vuc2l0aXZlKCk7IC8vIHRha2UgY2FzZVNlbnNpdGl2ZSBmcm9tIGZpcnN0IFR5cGVhaGVhZCBjb250ZW50XG5cblx0XHRcdGlmIChpc1R5cGVhaGVhZCkge1xuXHRcdFx0XHRjb25zdCB7IHZhbHVlTGlzdEluZm8sIGNvbnRlbnQgfSA9IFZhbHVlTGlzdEhlbHBlci5fcHJlcGFyZVZhbHVlSGVscFR5cGVBaGVhZChcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLFxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSxcblx0XHRcdFx0XHRmaXJzdFR5cGVBaGVhZENvbnRlbnRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXHRcdFx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XCIvc2VsZWN0ZWRQcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzLm1hcCgoY29sKSA9PiBjb2wucGF0aClcblx0XHRcdFx0KTtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8sIG1ldGFNb2RlbCk7XG5cblx0XHRcdFx0aWYgKGNvbnRlbnQuZ2V0VGFibGUoKSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRlbnQuZ2V0VGFibGUoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlVmFsdWVIZWxwVHlwZWFoZWFkKHByb3BlcnR5UGF0aCwgdmFsdWVIZWxwLCBjb250ZW50LCB2YWx1ZUxpc3RJbmZvLCBwYXlsb2FkLCBtZXRhTW9kZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB7IHNlbGVjdGVkSW5mbywgc2VsZWN0ZWRDb250ZW50LCBjb25kaXRpb25Db250ZW50IH0gPSBWYWx1ZUxpc3RIZWxwZXIuX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2coXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRhaW5lcixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvcyxcblx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGVudElkLFxuXHRcdFx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllciA9IHNlbGVjdGVkSW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZChwYXlsb2FkLCBzZWxlY3RlZEluZm8sIG1ldGFNb2RlbCk7XG5cblx0XHRcdFx0LyogRm9yIGNvbnRleHQgZGVwZW50ZW50IHZhbHVlIGhlbHBzIHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQgZm9yIHRoZSBkaWFsb2cgdGl0bGUgKi9cblx0XHRcdFx0Y29uc3QgZmllbGQgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0XHRjb25zdCB0aXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoXG5cdFx0XHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2dldERpYWxvZ1RpdGxlKHZhbHVlSGVscCwgc2VsZWN0ZWRJbmZvLnZhbHVlTGlzdEluZm8/LkxhYmVsKSxcblx0XHRcdFx0XHRcdGZpZWxkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb250YWluZXIuc2V0VGl0bGUodGl0bGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGVudC5nZXRUYWJsZSgpID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRDb250ZW50LmdldFRhYmxlKCkgPT09IG51bGwpIHtcblx0XHRcdFx0XHRhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVZhbHVlSGVscERpYWxvZyhcblx0XHRcdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGVudCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkSW5mbyxcblx0XHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0XHRjb25kaXRpb25Db250ZW50XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5fbG9nRXJyb3IocHJvcGVydHlQYXRoLCBlcnIpO1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmRlc3Ryb3lWSENvbnRlbnQodmFsdWVIZWxwKTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0SW5BbmRPdXRQYXJhbWV0ZXJzTGlzdCgpOiBDb21tb25Bbm5vdGF0aW9uVHlwZXNbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsXG5cdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRdO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWYWx1ZUxpc3RIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUVBOztFQWtCQSxNQUFNQSx1QkFBdUIsR0FBR0EsQ0FBQ0MsVUFBdUIsRUFBRUMsS0FBYSxLQUFjLENBQUNELFVBQVUsQ0FBQ0UsSUFBSSxDQUFFQyxNQUFNLElBQUtBLE1BQU0sQ0FBQ0MsSUFBSSxLQUFLSCxLQUFLLENBQUM7RUFFakksTUFBTUksZUFBZSxHQUFHLHVDQUF1QztJQUNyRUMsY0FBYyxHQUFHLHNDQUFzQztJQUN2REMsK0JBQStCLEdBQUcsaUZBQWlGO0lBQ25IQyw4QkFBOEIsR0FBRyxxREFBcUQ7SUFDdEZDLG9DQUFvQyxHQUFHLDJEQUEyRDtJQUNsR0MsK0JBQStCLEdBQUcsc0RBQXNEO0lBQ3hGQyxpQ0FBaUMsR0FBRyx3REFBd0Q7SUFDNUZDLGtDQUFrQyxHQUFHLDBEQUEwRDtJQUMvRkMsMkNBQTJDLEdBQUcsOERBQThEO0lBQzVHQyxzQ0FBc0MsR0FBRyw2REFBNkQ7RUFBQ0MsUUFBQSxDQUFBVixlQUFBLEdBQUFBLGVBQUE7RUFBQVUsUUFBQSxDQUFBRCxzQ0FBQSxHQUFBQSxzQ0FBQTtFQUFBQyxRQUFBLENBQUFGLDJDQUFBLEdBQUFBLDJDQUFBO0VBQUFFLFFBQUEsQ0FBQUgsa0NBQUEsR0FBQUEsa0NBQUE7RUFBQUcsUUFBQSxDQUFBSixpQ0FBQSxHQUFBQSxpQ0FBQTtFQUFBSSxRQUFBLENBQUFMLCtCQUFBLEdBQUFBLCtCQUFBO0VBQUFLLFFBQUEsQ0FBQU4sb0NBQUEsR0FBQUEsb0NBQUE7RUFBQU0sUUFBQSxDQUFBUCw4QkFBQSxHQUFBQSw4QkFBQTtFQUFBTyxRQUFBLENBQUFSLCtCQUFBLEdBQUFBLCtCQUFBO0VBQUFRLFFBQUEsQ0FBQVQsY0FBQSxHQUFBQSxjQUFBO0VBaUh4RyxTQUFTVSwyQkFBMkJBLENBQUNDLGFBQXNDLEVBQXNCO0lBQ2hHLElBQUlDLGFB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QUU7WUFDcEUsTUFBTWxZLGVBQWUsQ0FBQzJWLHlCQUF5QixDQUFDdlUsWUFBWSxFQUFFd0ksU0FBUyxFQUFFcUwsT0FBTyxFQUFFMVksYUFBYSxFQUFFeVMsT0FBTyxFQUFFdlMsU0FBUyxDQUFDO1VBQ3JIO1FBQ0QsQ0FBQyxNQUFNO1VBQ04sTUFBTTtZQUFFb2UsWUFBWTtZQUFFQyxlQUFlO1lBQUVyRDtVQUFpQixDQUFDLEdBQUd6WCxlQUFlLENBQUN3YSx1QkFBdUIsQ0FDbEc1USxTQUFTLEVBQ1QrUCxTQUFTLEVBQ1R6SixjQUFjLEVBQ2RsQixPQUFPLEVBQ1B5TCxpQkFBaUIsRUFDakJqRixhQUNELENBQUM7VUFFRHhHLE9BQU8sQ0FBQ0Qsa0JBQWtCLEdBQUc4TCxZQUFZLENBQUM5TCxrQkFBa0I7VUFDNUQvTyxlQUFlLENBQUNrYiw2QkFBNkIsQ0FBQ2xNLE9BQU8sRUFBRTZMLFlBQVksRUFBRXBlLFNBQVMsQ0FBQzs7VUFFL0U7VUFDQSxNQUFNNlosS0FBSyxHQUFHMU0sU0FBUyxDQUFDVSxVQUFVLENBQUMsQ0FBQztVQUNwQyxJQUFJZ00sS0FBSyxFQUFFO1lBQ1YsTUFBTXlFLEtBQUssR0FBR3piLFdBQVcsQ0FBQzBiLHFDQUFxQyxDQUM5RGhiLGVBQWUsQ0FBQ2lLLGVBQWUsQ0FBQ0wsU0FBUyxFQUFFaVIsWUFBWSxDQUFDdGUsYUFBYSxFQUFFb0osS0FBSyxDQUFDLEVBQzdFMlEsS0FDRCxDQUFDO1lBQ0RxRCxTQUFTLENBQUNzQixRQUFRLENBQUNGLEtBQUssQ0FBQztVQUMxQjtVQUVBLElBQUlELGVBQWUsQ0FBQzVDLFFBQVEsQ0FBQyxDQUFDLEtBQUt6YSxTQUFTLElBQUlxZCxlQUFlLENBQUM1QyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwRixNQUFNbFksZUFBZSxDQUFDd1gsc0JBQXNCLENBQzNDL2EsU0FBUyxFQUNUMkUsWUFBWSxFQUNad0ksU0FBUyxFQUNUa1IsZUFBZSxFQUNmRCxZQUFZLEVBQ1o3TCxPQUFPLEVBQ1B5SSxnQkFDRCxDQUFDO1VBQ0Y7UUFDRDtNQUNELENBQUMsQ0FBQyxPQUFPL0csR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDZixTQUFTLENBQUN2TyxZQUFZLEVBQUVzUCxHQUFHLENBQUM7UUFDakMxUSxlQUFlLENBQUN1SyxnQkFBZ0IsQ0FBQ1gsU0FBUyxDQUFDO01BQzVDO0lBQ0QsQ0FBQztJQUVENEUseUJBQXlCQSxDQUFBLEVBQTRCO01BQ3BELE9BQU8seUtBSU47SUFDRjtFQUNELENBQUM7RUFBQyxPQUVheE8sZUFBZTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
1224
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5Ob3RBbHJlYWR5RGVmaW5lZCIsImNvbHVtbkRlZnMiLCJ2aEtleSIsInNvbWUiLCJjb2x1bW4iLCJwYXRoIiwiQW5ub3RhdGlvbkxhYmVsIiwiQW5ub3RhdGlvblRleHQiLCJBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluIiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50IiwiQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlck91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCIsIkFubm90YXRpb25WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJBbm5vdGF0aW9uc1BlcnNvbmFsRGF0YVBvdGVudGlhbGx5U2Vuc2l0aXZlIiwiQW5ub3RhdGlvbnNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJfZXhwb3J0cyIsIl9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm8iLCJzb3J0RmllbGROYW1lIiwibWV0YU1vZGVsIiwiJG1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJDb2xsZWN0aW9uUGF0aCIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmb3VuZEVsZW1lbnQiLCJQYXJhbWV0ZXJzIiwiZmluZCIsImVsZW1lbnQiLCIkVHlwZSIsIlZhbHVlTGlzdFByb3BlcnR5IiwicHJvcGVydHlJbmZvIiwic29ydGFibGUiLCJ1bmRlZmluZWQiLCJfcmVkdW5kYW50RGVzY3JpcHRpb24iLCJvVkxQYXJhbWV0ZXIiLCJhQ29sdW1uSW5mbyIsIm9Db2x1bW5JbmZvIiwiY29sdW1uSW5mbyIsInRleHRDb2x1bW5OYW1lIiwia2V5Q29sdW1uSGlkZGVuIiwia2V5Q29sdW1uRGlzcGxheUZvcm1hdCIsIl9oYXNJbXBvcnRhbmNlSGlnaCIsIm9WYWx1ZUxpc3RDb250ZXh0Iiwib1BhcmFtZXRlciIsIiRFbnVtTWVtYmVyIiwiX2J1aWxkJFNlbGVjdFN0cmluZyIsImNvbnRyb2wiLCJvVmlld0RhdGEiLCJnZXRNb2RlbCIsIm9EYXRhIiwiZ2V0RGF0YSIsImFDb2x1bW5zIiwiY29sdW1ucyIsInJlZHVjZSIsInNRdWVyeSIsIm9Qcm9wZXJ0eSIsImluY2x1ZGVzIiwiX2dldFZhbHVlSGVscENvbHVtbkRpc3BsYXlGb3JtYXQiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwic0Rpc3BsYXlNb2RlIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRQYXRoIiwiZ2V0UHJlc2VudGF0aW9uVmFyaWFudCIsInZhbHVlTGlzdCIsInByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwicHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJWYWx1ZUxpc3RIZWxwZXIiLCJnZXRWYWx1ZUxpc3RDb2xsZWN0aW9uRW50aXR5U2V0IiwibVZhbHVlTGlzdCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiaXNUcmVlVGFibGVUeXBlIiwiUmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyIiwiZ2V0VGFibGVEZWxlZ2F0ZSIsInNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsInByZXNlbnRhdGlvblZhcmlhbnQiLCJyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJnZXRTb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiaXNTdWdnZXN0aW9uIiwiU29ydE9yZGVyIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsInNvcnRlciIsInByb3BlcnR5UGF0aCIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm5hbWUiLCJEZXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsImFzY2VuZGluZyIsInB1c2giLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U29ydENvbmRpdGlvbnNGb3JWYWx1ZUxpc3QiLCJzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50IiwiZ2V0UHJvcGVydHlQYXRoIiwib1BhcmFtZXRlcnMiLCJVbmJvdW5kQWN0aW9uIiwiRW50aXR5VHlwZVBhdGgiLCJBY3Rpb24iLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImdldFZhbHVlTGlzdFByb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsIm9WYWx1ZUxpc3RNb2RlbCIsImdldENvbHVtblZpc2liaWxpdHkiLCJvVmFsdWVMaXN0Iiwib1NvdXJjZSIsImlzRHJvcERvd25MaXN0IiwidmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaXNWaXNpYmxlIiwiY29sdW1uSW5mb3MiLCJpc0RpYWxvZ1RhYmxlIiwiY29sdW1uV2l0aEhpZGRlbkFubm90YXRpb24iLCJjb2x1bW5OYW1lIiwiaGFzSGlkZGVuQW5ub3RhdGlvbiIsImdldENvbHVtblZpc2liaWxpdHlJbmZvIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJiSXNEcm9wRG93bkxpc3RlIiwib01ldGFNb2RlbCIsImFDb2x1bW5JbmZvcyIsIm9Db2x1bW5JbmZvcyIsImdldFRhYmxlSXRlbXNQYXJhbWV0ZXJzIiwicmVxdWVzdEdyb3VwSWQiLCJpdGVtUGFyYW1ldGVycyIsInNlbGVjdFN0cmluZyIsInNlbGVjdFN0cmluZ1BhcnQiLCJpc1N1c3BlbmRlZCIsImRlZmF1bHRTb3J0UHJvcGVydHlOYW1lIiwiam9pbiIsImhhc0ltcG9ydGFuY2UiLCJnZXRNaW5TY3JlZW5XaWR0aCIsImdldENvbHVtbldpZHRoIiwiaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJpc1NtYWxsRGV2aWNlIiwidGFyZ2V0T2JqZWN0IiwicHJvcGVydHkiLCJyZWxhdGVkUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwidG9TdHJpbmciLCJsYWJlbCIsIkxhYmVsIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInNpemUiLCJpbnN0YW5jZXMiLCJwcm9wIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIlByb3BlcnR5T0RhdGFDb25zdHJ1Y3RvciIsIk9iamVjdFBhdGgiLCJnZXQiLCJ0eXBlIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwic1dpZHRoIiwiVXRpbCIsImNhbGNDb2x1bW5XaWR0aCIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwiTG9nIiwiZXJyb3IiLCJnZXRPdXRQYXJhbWV0ZXJQYXRocyIsImFQYXJhbWV0ZXJzIiwic1BhdGgiLCJlbmRzV2l0aCIsImVudGl0eUlzU2VhcmNoYWJsZSIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJjb2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJzZWFyY2hTdXBwb3J0ZWQiLCJTZWFyY2hTdXBwb3J0ZWQiLCJzZWFyY2hhYmxlIiwiU2VhcmNoYWJsZSIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5U2V0IiwicGFydHMiLCJzcGxpdCIsImNvbmRpdGlvblBhdGgiLCJwYXJ0aWFsUGF0aCIsInBhcnQiLCJzaGlmdCIsIiRraW5kIiwiJGlzQ29sbGVjdGlvbiIsIl9nZXRDb2x1bW5EZWZpbml0aW9uRnJvbVNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVR5cGVBbm5vdGF0aW9ucyIsInNlbGVjdGlvbkZpZWxkcyIsInNlbGVjdGlvbkZpZWxkIiwic2VsZWN0aW9uRmllbGRQYXRoIiwiY29sdW1uRGVmIiwiZmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiX21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllcyIsInZhbHVlTGlzdFByb3BlcnR5IiwiY29sdW1uUGF0aCIsImNvbHVtblByb3BlcnR5VHlwZSIsInRleHRQcm9wZXJ0eVBhdGgiLCJ0ZXh0UGF0aCIsImZpbHRlckluT3V0UGFyYW1ldGVycyIsInZoUGFyYW1ldGVycyIsInR5cGVGaWx0ZXIiLCJmaWx0ZXIiLCJwYXJhbWV0ZXIiLCJwYXJtZXRlclR5cGUiLCJnZXRJblBhcmFtZXRlcnMiLCJnZXRPdXRQYXJhbWV0ZXJzIiwiY3JlYXRlVkhVSU1vZGVsIiwidmFsdWVIZWxwIiwidmhVSU1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9nZXREaWFsb2dUaXRsZSIsInZhbHVlaGVscExhYmVsIiwicHJvcGVydHlMYWJlbCIsImdldFByb3BlcnR5IiwiZGF0YUZpZWxkTGFiZWwiLCJnZXRDb250cm9sIiwiZGVzdHJveVZIQ29udGVudCIsImdldERpYWxvZyIsImRlc3Ryb3lDb250ZW50IiwiZ2V0VHlwZWFoZWFkIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwicXVhbGlmaWVycyIsImluZGV4RGVmYXVsdFZIIiwiaW5kZXhPZiIsInVuc2hpZnQiLCJzcGxpY2UiLCJfZ2V0Q29udGV4dFByZWZpeCIsImJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlCaW5kaW5nUGFydHMiLCJnZXRQYXRoIiwiYmluZGlnQ29udGV4dFBhcnRzIiwiY29udGV4dFByZWZpeFBhcnRzIiwiaSIsIl9nZXRWaFBhcmFtZXRlciIsImNvbmRpdGlvbk1vZGVsIiwiY29udGV4dFByZWZpeCIsInZoTWV0YU1vZGVsIiwibG9jYWxEYXRhUHJvcGVydHlQYXRoIiwidmFsdWVQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQYXJlbnQiLCJpc0EiLCJfcGFyYW1ldGVySXNBIiwiZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkiLCJvQm91bmRFbnRpdHkiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoT2ZUYWJsZSIsImdldFJvd0JpbmRpbmciLCJmaWx0ZXJCYXJBUEkiLCJmaWx0ZXJCYXJNZXRhUGF0aCIsIm1ldGFQYXRoIiwidmFsdWVIZWxwQ29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aCIsImNvbnRleHRNZXRhUGF0aCIsIk1ldGFQYXRoIiwiY29udmVydFR5cGVzIiwibmV3UGF0aCIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsInRhcmdldEVudGl0eVNldCIsImdldENsb3Nlc3RFbnRpdHlTZXQiLCJnZXRNZXRhUGF0aEZvck9iamVjdCIsImdldFJlbGF0aXZlUGF0aCIsInNvdXJjZSIsImhlbHBQYXRoIiwiY29uc3RhbnRWYWx1ZSIsIkNvbnN0YW50IiwiaW5pdGlhbFZhbHVlSXNTaWduaWZpY2FudCIsIkJvb2xlYW4iLCJJbml0aWFsVmFsdWVJc1NpZ25pZmljYW50IiwicGFyYW1ldGVyVHlwZXMiLCJfZW5yaWNoUGF0aCIsInByb3BlcnR5TmFtZSIsImV4dGVybmFsSWRQYXRoIiwia2V5IiwiZXh0ZXJuYWxJZFByb3BlcnR5IiwicG9wIiwiZmllbGRQcm9wZXJ0eVBhdGgiLCJkZXNjcmlwdGlvblBhdGgiLCJfZW5yaWNoS2V5cyIsInZoS2V5cyIsImdldEluQW5kT3V0UGFyYW1ldGVyc0xpc3QiLCJfZ2V0RW50aXR5VHlwZSIsIm1ldGFNb2RlbFZIIiwiZW50aXR5U2V0UGF0aCIsInJlcXVlc3RPYmplY3QiLCJfcHJvY2Vzc1BhcmFtZXRlcnMiLCJhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSIsInZhbHVlSGVscFF1YWxpZmllciIsInBheWxvYWQiLCJlbnRpdHlUeXBlIiwiaXNGb3JNdWx0aVZhbHVlRmllbGQiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCIkS2V5IiwiZmlyc3RLZXkiLCJMb2NhbERhdGFQcm9wZXJ0eSIsImlzUG90ZW50aWFsbHlTZW5zaXRpdmUiLCJ2aFBhcmFtZXRlciIsInZhbHVlbGlzdEluZm8iLCJrZXlQYXRoIiwiX2xvZ0Vycm9yIiwic3RhdHVzIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwibXNnIiwiZ2V0VmFsdWVMaXN0SW5mbyIsInZhbHVlTGlzdEluZm9zIiwicHJvcGVydHlQYXRoUGFydHMiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVIZWxwUXVhbGlmaWVycyIsIk9iamVjdCIsImtleXMiLCIkcXVhbGlmaWVyIiwiZXJyIiwiQUxMRlJBR01FTlRTIiwibG9nRnJhZ21lbnQiLCJfbG9nVGVtcGxhdGVkRnJhZ21lbnRzIiwiZnJhZ21lbnROYW1lIiwiZnJhZ21lbnREZWZpbml0aW9uIiwibG9nSW5mbyIsImZyYWdtZW50IiwiZ2V0TGV2ZWwiLCJMZXZlbCIsIkRFQlVHIiwic2V0VGltZW91dCIsIl90ZW1wbGF0ZUZyYWdtZW50Iiwic291cmNlTW9kZWwiLCJjb250YWluaW5nVmlldyIsImdldFRhcmdldFZpZXciLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJsb2NhbFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RNb2RlbCIsInZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwiLCJ2aWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJiaW5kaW5nQ29udGV4dHMiLCJjb250ZXh0UGF0aCIsIm1vZGVscyIsInRlbXBsYXRlQ29tcG9uZW50IiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwicnVuQXNPd25lciIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiX2dldENvbnRlbnRJZCIsInZhbHVlSGVscElkIiwiaXNUeXBlYWhlYWQiLCJjb250ZW50VHlwZSIsIl9hZGRJbk91dFBhcmFtZXRlcnNUb1BheWxvYWQiLCJ2aFByb3BlcnRpZXMiLCJTZXQiLCJhZGQiLCJBcnJheSIsImZyb20iLCJ0ZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiX2dldFdpZHRoSW5SZW0iLCJpc1VuaXRWYWx1ZUhlbHAiLCJ3aWR0aCIsIiQiLCJmbG9hdFdpZHRoIiwiUmVtIiwiZnJvbVB4IiwiaXNOYU4iLCJfZ2V0VGFibGVXaWR0aCIsInRhYmxlIiwibWluV2lkdGgiLCJpc011bHRpU2VsZWN0IiwiZ2V0Q29sdW1ucyIsInZpc2libGVDb2x1bW5zIiwiZ2V0VmlzaWJsZSIsImluaXRpYWxTdW0iLCJzdW1XaWR0aCIsInN1bSIsImdldFdpZHRoIiwiTWF0aCIsIm1heCIsIl9nZXRKU09OTW9kZWxGb3JEaWFsb2ciLCJjb250ZW50IiwiaXNEcm9wRG93bkxpc3RlIiwiaWQiLCJnZXRJZCIsImdyb3VwSWQiLCJiU3VnZ2VzdGlvbiIsIl9nZXRKU09OTW9kZWxGb3JDb25kaXRpb24iLCJjYXNlU2Vuc2l0aXZlIiwiX2dldEpTT05Nb2RlbEZvclR5cGVhaGVhZCIsImNvbnRlbnRJZCIsIl9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQiLCJzZXRLZXlQYXRoIiwic2V0RGVzY3JpcHRpb25QYXRoIiwiaGlzdG9yeSIsImVuYWJsZWQiLCJjaGVja0hpc3RvcnlFbmFibGVkIiwiZGF0YSIsImluZm8iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJzZXRUYWJsZSIsImZpZWxkIiwidGFibGVNb2RlIiwiZ2V0TWF4Q29uZGl0aW9ucyIsInNldE1vZGUiLCJhZGRFdmVudERlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsIlJlc2l6ZUhhbmRsZXIiLCJyZWdpc3RlciIsIl9zZXRUYWJsZVdpZHRoIiwicmVkdWNlV2lkdGhGb3JVbml0VmFsdWVIZWxwIiwidGFibGVXaWR0aCIsInNldFdpZHRoIiwiaGlzdG9yeVNldHRpbmdzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsImZpZWxkcyIsImhpc3RvcnlFbmFibGVkIiwiaXNWYWx1ZUxpc3RTZWFyY2hhYmxlIiwidmFsdWVMaXN0TWV0YW1vZGVsIiwiX2NyZWF0ZVZhbHVlSGVscERpYWxvZyIsImNvbmRpdGlvbkNvbnRlbnQiLCJzb3VyY2VNb2RlbERpYWxvZyIsImZpcnN0VHlwZUFoZWFkQ29udGVudCIsImdldENvbnRlbnQiLCJnZXRDYXNlU2Vuc2l0aXZlIiwic291cmNlTW9kZWxDb25kaXRpb24iLCJhZGREZXBlbmRlbnQiLCJzZXRWYWx1ZUhlbHAiLCJjb25kaXRpb25UYWJsZSIsImdldFRhYmxlIiwidGFibGVQcm9taXNlIiwiZmlsdGVyQmFyUHJvbWlzZSIsImZpbHRlckJhciIsIlByb21pc2UiLCJhbGwiLCJzZXRGaWx0ZXJCYXIiLCJzZXRGaWx0ZXIiLCJpbml0aWFsaXplZCIsInNldENvcHlQcm92aWRlclZpc2liaWxpdHkiLCJtZGNUYWJsZSIsIl9zZXRTaG93UDEzbkJ1dHRvbiIsImdldENvcHlQcm92aWRlciIsInNldFZpc2libGUiLCJfZ2V0Q29udGVudEJ5SWQiLCJjb250ZW50TGlzdCIsIml0ZW0iLCJfY3JlYXRlUG9wb3ZlckNvbnRlbnQiLCJ1c2VBc1ZhbHVlSGVscCIsIk1UYWJsZSIsImdyb3VwIiwiX2NyZWF0ZURpYWxvZ0NvbnRlbnQiLCJmb3JjZUJpbmQiLCJNRENUYWJsZSIsIl9zaG93Q29uZGl0aW9uc0NvbnRlbnQiLCJjb250YWluZXIiLCJjb25kaXRpb25zQ29udGVudCIsIkNvbmRpdGlvbnMiLCJhZGRDb250ZW50IiwiX2FsaWduT3JDcmVhdGVDb250ZW50Iiwic2hvd0NvbmRpdGlvblBhbmVsIiwiRmV0Y2hWYWx1ZXMiLCJpbnNlcnRDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQiLCJxdWFsaWZpZXJGb3JUeXBlYWhlYWQiLCJzdWJWYWx1ZUxpc3RJbmZvIiwiZ2V0VXNlQXNWYWx1ZUhlbHAiLCJyZW1vdmVDb250ZW50IiwiX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2ciLCJzZWxlY3RlZENvbnRlbnRJZCIsImNvbnRlbnRMaXN0SXRlbSIsImhhc09wZXJhdG9yRVEiLCJnZXRPcGVyYXRvcnMiLCJzZWxlY3RlZEluZm8iLCJzZWxlY3RlZENvbnRlbnQiLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJzZXRUaXRsZSIsIl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkIiwidmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoIiwiY29udmVydGVkTWV0YWRhdGEiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwidmFsdWVIZWxwS2V5UGF0aCIsIm1heExlbmd0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInNob3dWYWx1ZUxpc3QiLCJtYXAiLCJjb2wiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZhbHVlTGlzdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByZXNlbnRhdGlvblZhcmlhbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNQcm9wZXJ0eUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkRGF0YVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCBnZXRUeXBlQ29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgVXRpbCBmcm9tIFwic2FwL20vdGFibGUvVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFJlc2l6ZUhhbmRsZXIgZnJvbSBcInNhcC91aS9jb3JlL1Jlc2l6ZUhhbmRsZXJcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgUmVtIGZyb20gXCJzYXAvdWkvZG9tL3VuaXRzL1JlbVwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNZGNJbm5lclRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgdHlwZSBNZGNGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2Jhc2UvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZW50IGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9iYXNlL0NvbnRlbnRcIjtcbmltcG9ydCBDb25kaXRpb25zIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L0NvbmRpdGlvbnNcIjtcbmltcG9ydCBNRENUYWJsZSwgeyB0eXBlICRNRENUYWJsZVNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCBNVGFibGUsIHsgdHlwZSAkTVRhYmxlU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NVGFibGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL09EYXRhVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgPSB7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdFZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmc7XG5cdExvY2FsRGF0YVByb3BlcnR5Pzoge1xuXHRcdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0fTtcblx0Q29uc3RhbnQ/OiBzdHJpbmc7XG5cdEluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ/OiBib29sZWFuO1xuXHRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXT86IHtcblx0XHQkRW51bU1lbWJlcjogc3RyaW5nO1xuXHR9O1xufTtcblxudHlwZSBMb2dGcmFnbWVudE1ldGhvZCA9IChpbmZvOiB7IHBhdGg6IHN0cmluZzsgZnJhZ21lbnROYW1lOiBzdHJpbmc7IGZyYWdtZW50OiB1bmtub3duIH0pID0+IHZvaWQ7XG5cbi8vIGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSA9IHtcblx0JFR5cGU6IHN0cmluZzsgLy8gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFR5cGU7XG5cdExhYmVsPzogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRDb2xsZWN0aW9uUm9vdD86IHN0cmluZztcblx0RGlzdGluY3RWYWx1ZXNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRGZXRjaFZhbHVlcz86IG51bWJlcjtcblx0UHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0U2VsZWN0aW9uVmFyaWFudFF1YWxpZmllcj86IHN0cmluZztcblx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdCRxdWFsaWZpZXI/OiBzdHJpbmc7IC8vIGRlZmluZWQgaW4gY2FzZSBvZiBWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25WYWx1ZUxpc3RUeXBlQnlRdWFsaWZpZXIgPSBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZT47XG5cbmNvbnN0IGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkID0gKGNvbHVtbkRlZnM6IENvbHVtbkRlZltdLCB2aEtleTogc3RyaW5nKTogYm9vbGVhbiA9PiAhY29sdW1uRGVmcy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSB2aEtleSk7XG5cbmV4cG9ydCBjb25zdCBBbm5vdGF0aW9uTGFiZWwgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIixcblx0QW5ub3RhdGlvblRleHQgPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiLFxuXHRBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50ID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbiA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJDb25zdGFudCA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50XCIsXG5cdEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQgPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0ID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIixcblx0QW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIixcblx0QW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCIsXG5cdEFubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVyc1wiO1xuXG50eXBlIEFubm90YXRpb25zRm9yUHJvcGVydHkgPSB7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIj86IHtcblx0XHRTZWFyY2hTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIj86IHN0cmluZzsgLy8gQW5ub3RhdGlvbkxhYmVsXG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCI/OiB7XG5cdFx0Ly8gQW5ub3RhdGlvblRleHRcblx0XHQkUGF0aDogc3RyaW5nO1xuXHR9O1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIj86IHtcblx0XHQvLyBBbm5vdGF0aW9uVGV4dFVJVGV4dEFycmFuZ2VtZW50XG5cdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdH07XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiPzogYm9vbGVhbjtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1wiPzogYm9vbGVhbjsgLy8gQW5ub3RhdGlvblZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCI/OiBzdHJpbmdbXTtcblx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI/OiBzdHJpbmc7XG5cdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCI/OiBib29sZWFuO1xufTtcblxudHlwZSBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQgPSB7XG5cdCRQcm9wZXJ0eVBhdGg6IHN0cmluZztcbn07XG5cbnR5cGUgQW5ub3RhdGlvbnNGb3JFbnRpdHlUeXBlID0ge1xuXHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIj86IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZFtdO1xufTtcblxudHlwZSBDb2x1bW5Qcm9wZXJ0eSA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JGtpbmQ6IHN0cmluZztcblx0JGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEluT3V0UGFyYW1ldGVyID0ge1xuXHRwYXJtZXRlclR5cGU6IHN0cmluZztcblx0c291cmNlOiBzdHJpbmc7XG5cdGhlbHBQYXRoOiBzdHJpbmc7XG5cdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IGJvb2xlYW47XG5cdGNvbnN0YW50VmFsdWU/OiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxudHlwZSBWYWx1ZUhlbHBQYXlsb2FkSW5mbyA9IHtcblx0dmhLZXlzPzogc3RyaW5nW107XG5cdHZoUGFyYW1ldGVycz86IEluT3V0UGFyYW1ldGVyW107XG5cdHZoUHJvcGVydGllcz86IHN0cmluZ1tdO1xufTtcblxudHlwZSBWYWx1ZUhlbHBRdWFsaWZpZXJNYXAgPSBSZWNvcmQ8c3RyaW5nLCBWYWx1ZUhlbHBQYXlsb2FkSW5mbz47XG5cbnR5cGUgSGlzdG9yeVBheWxvYWQgPSB7XG5cdGVuYWJsZWQ/OiBib29sZWFuO1xuXHRkYXRhPzogRmllbGREYXRhVHlwZVtdO1xuXHRoYXNSZWxldmFudERhdGE/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwUGF5bG9hZCA9IHtcblx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdHF1YWxpZmllcnM6IFZhbHVlSGVscFF1YWxpZmllck1hcDtcblx0dmFsdWVIZWxwUXVhbGlmaWVyOiBzdHJpbmc7XG5cdGNvbmRpdGlvbk1vZGVsPzogc3RyaW5nO1xuXHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGlzVW5pdFZhbHVlSGVscD86IGJvb2xlYW47XG5cdHJlcXVlc3RHcm91cElkPzogc3RyaW5nO1xuXHR1c2VNdWx0aVZhbHVlRmllbGQ/OiBib29sZWFuO1xuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz86IGJvb2xlYW47XG5cdHZhbHVlSGVscERlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0cHJvcGVydHlEZXNjcmlwdGlvblBhdGg/OiBzdHJpbmc7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0dmFsdWVIZWxwS2V5UGF0aD86IHN0cmluZztcblx0aXNEZWZpbmVDb25kaXRpb25WYWx1ZUhlbHA/OiBib29sZWFuO1xuXHRpc1BvdGVudGlhbGx5U2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0aGlzdG9yeT86IEhpc3RvcnlQYXlsb2FkO1xuXHRleHRlcm5hbElkUGF0aD86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sdW1uRGVmID0ge1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRleHRQYXRoPzogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHQkVHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVMaXN0SW5mbyA9IHtcblx0a2V5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0ZmllbGRQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0dmhLZXlzOiBzdHJpbmdbXTtcblx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdO1xuXHR2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZTtcblx0Y29sdW1uRGVmczogQ29sdW1uRGVmW107XG5cdHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nO1xufTtcblxudHlwZSBEaXNwbGF5Rm9ybWF0ID0gXCJEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCIgfCBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblxudHlwZSBQYXRoID0ge1xuXHRmaWVsZFByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRhc2NlbmRpbmc/OiBib29sZWFuO1xuXHRkZXNjZW5kaW5nPzogYm9vbGVhbjtcblx0cGF0aD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0U29ydFByb3BlcnR5TmFtZSh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzb3J0RmllbGROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9QGApIHx8IHt9O1xuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zSW5mbyA9IGdldFNvcnRSZXN0cmljdGlvbnNJbmZvKGVudGl0eVNldEFubm90YXRpb25zKTtcblx0Y29uc3QgZm91bmRFbGVtZW50ID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHRlbGVtZW50LiRUeXBlID09PSBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0IHx8XG5cdFx0XHRcdGVsZW1lbnQuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJEaXNwbGF5T25seSkgJiZcblx0XHRcdCEoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9LyR7ZWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuYCkgPT09XG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9KTtcblx0aWYgKGZvdW5kRWxlbWVudCkge1xuXHRcdGlmIChcblx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofS8ke2ZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyYFxuXHRcdFx0KSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0XHQpIHtcblx0XHRcdHNvcnRGaWVsZE5hbWUgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtmb3VuZEVsZW1lbnQuVmFsdWVMaXN0UHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c29ydEZpZWxkTmFtZSA9IGZvdW5kRWxlbWVudC5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHR9XG5cdH1cblx0aWYgKHNvcnRGaWVsZE5hbWUgJiYgKCFzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc29ydEZpZWxkTmFtZV0gfHwgc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NvcnRGaWVsZE5hbWVdLnNvcnRhYmxlKSkge1xuXHRcdHJldHVybiBzb3J0RmllbGROYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gX3JlZHVuZGFudERlc2NyaXB0aW9uKFxuXHRvVkxQYXJhbWV0ZXI6IHtcblx0XHRWYWx1ZUxpc3RQcm9wZXJ0eTogc3RyaW5nO1xuXHR9LFxuXHRhQ29sdW1uSW5mbzogQ29sdW1uSW5mb1tdXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0NvbHVtbkluZm8gPSBhQ29sdW1uSW5mby5maW5kKGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb2x1bW5JbmZvKSB7XG5cdFx0cmV0dXJuIG9WTFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSA9PT0gY29sdW1uSW5mby50ZXh0Q29sdW1uTmFtZTtcblx0fSk7XG5cdGlmIChcblx0XHRvVkxQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IG9Db2x1bW5JbmZvPy50ZXh0Q29sdW1uTmFtZSAmJlxuXHRcdCFvQ29sdW1uSW5mby5rZXlDb2x1bW5IaWRkZW4gJiZcblx0XHRvQ29sdW1uSW5mby5rZXlDb2x1bW5EaXNwbGF5Rm9ybWF0ICE9PSBcIlZhbHVlXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9KTogYm9vbGVhbiB7XG5cdHJldHVybiBvVmFsdWVMaXN0Q29udGV4dC5QYXJhbWV0ZXJzLnNvbWUoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b1BhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRvUGFyYW1ldGVyW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGUvSGlnaFwiXG5cdFx0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIF9idWlsZCRTZWxlY3RTdHJpbmcoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9WaWV3RGF0YSA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJ2aWV3RGF0YVwiKSBhcyBKU09OTW9kZWw7XG5cdGlmIChvVmlld0RhdGEpIHtcblx0XHRjb25zdCBvRGF0YSA9IG9WaWV3RGF0YS5nZXREYXRhKCk7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhQ29sdW1ucyA9IG9EYXRhLmNvbHVtbnM7XG5cdFx0XHRpZiAoYUNvbHVtbnMpIHtcblx0XHRcdFx0cmV0dXJuIGFDb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0c1F1ZXJ5OiBzdHJpbmcsXG5cdFx0XHRcdFx0b1Byb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHRcdFx0XHQvLyBUT0RPIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdFx0XHRcdGlmIChvUHJvcGVydHkucGF0aCAmJiAhb1Byb3BlcnR5LnBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRzUXVlcnkgPSBzUXVlcnkgPyBgJHtzUXVlcnl9LCR7b1Byb3BlcnR5LnBhdGh9YCA6IG9Qcm9wZXJ0eS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc1F1ZXJ5O1xuXHRcdFx0XHR9LCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdG9UZXh0QW5ub3RhdGlvbiAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl07XG5cdGlmIChpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykge1xuXHRcdHJldHVybiBvVGV4dEFubm90YXRpb24gJiYgdHlwZW9mIG9UZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBcIiRQYXRoXCIgaW4gb1RleHRBbm5vdGF0aW9uICYmIG9UZXh0QW5ub3RhdGlvbi4kUGF0aFxuXHRcdFx0PyBzRGlzcGxheU1vZGVcblx0XHRcdDogXCJWYWx1ZVwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIE9ubHkgZXhwbGljaXQgZGVmaW5lZCBUZXh0QXJyYW5nZW1lbnRzIGluIGEgVmFsdWUgSGVscCB3aXRoIERpYWxvZyBhcmUgY29uc2lkZXJlZFxuXHRcdHJldHVybiBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA/IHNEaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0fVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWVMaXN0J3MgUHJlc2VudGF0aW9uVmFyaWFudC5cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgUHJlc2VudGF0aW9uVmFyaWFudCAoaWYgYW55KSBvZiB0aGUgdmFsdWVMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyID0gdmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXIgPyBgIyR7dmFsdWVMaXN0LlByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YCA6IFwiXCI7XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnRQYXRoID0gYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnQke3ByZXNlbnRhdGlvblZhcmlhbnRRdWFsaWZpZXJ9YDtcblx0cmV0dXJuIHZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHByZXNlbnRhdGlvblZhcmlhbnRQYXRoKSBhcyBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+IHwgdW5kZWZpbmVkO1xufVxuXG50eXBlIENvbHVtbkluZm8gPSB7XG5cdGtleUNvbHVtbkhpZGRlbj86IGJvb2xlYW47XG5cdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG5cdHRleHRDb2x1bW5OYW1lPzogc3RyaW5nO1xuXHRjb2x1bW5OYW1lOiBzdHJpbmc7XG5cdGhhc0hpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xufTtcbmNvbnN0IFZhbHVlTGlzdEhlbHBlciA9IHtcblx0Z2V0VmFsdWVMaXN0Q29sbGVjdGlvbkVudGl0eVNldDogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogQmFzZUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1WYWx1ZUxpc3QgPSBvVmFsdWVMaXN0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9YCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgVmFsdWVMaXN0IGlzIGFubm90YXRlZCB3aXRoIGEgUHJlc2VudGF0aW9uVmFyaWFudC5cblx0ICogSWYgdGhlIFByZXNlbnRhdGlvblZhcmlhbnQgaXMgYW5ub3RhdGVkIHdpdGggYSBSZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIsIHRoZSBWYWx1ZUxpc3QncyB0YWJsZSBoYXMgdG8gYmUgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIHZhbHVlTGlzdCBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHRhYmxlIGhhcyB0byBiZSBhIFRyZWVUYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc1RyZWVUYWJsZVR5cGUodmFsdWVMaXN0OiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdCk/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA/IHRydWUgOiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgZGVsZWdhdGUgZm9yIHRoZSBWYWx1ZUxpc3QncyB0YWJsZVxuXHQgKi9cblx0Z2V0VGFibGVEZWxlZ2F0ZTogZnVuY3Rpb24gKHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBfZ2V0RGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUodmFsdWVMaXN0KTtcblx0XHRpZiAoc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBgJyR7c0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfSdgO1xuXHRcdH1cblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0UHJlc2VudGF0aW9uVmFyaWFudCh2YWx1ZUxpc3QpO1xuXHRcdGNvbnN0IHJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllciA9IHByZXNlbnRhdGlvblZhcmlhbnQ/LlJlY3Vyc2l2ZUhpZXJhcmNoeVF1YWxpZmllcjtcblx0XHRpZiAocmVjdXJzaXZlSGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPSBwcmVzZW50YXRpb25WYXJpYW50LkluaXRpYWxFeHBhbnNpb25MZXZlbDtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwie25hbWU6ICdzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlJywgcGF5bG9hZDoge2NvbGxlY3Rpb25OYW1lOiAnXCIgK1xuXHRcdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPyBcIiwgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU6IFwiICsgc0RlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogXCJcIikgK1xuXHRcdFx0XHRcIiwgaGllcmFyY2h5UXVhbGlmaWVyOiAnXCIgK1xuXHRcdFx0XHRyZWN1cnNpdmVIaWVyYXJjaHlRdWFsaWZpZXIgK1xuXHRcdFx0XHRcIidcIiArXG5cdFx0XHRcdChpbml0aWFsRXhwYW5zaW9uTGV2ZWwgPyBcIiwgaW5pdGlhbEV4cGFuc2lvbkxldmVsOiBcIiArIChpbml0aWFsRXhwYW5zaW9uTGV2ZWwgKyAxKSA6IFwiXCIpICtcblx0XHRcdFx0XCJ9fVwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7bmFtZTogJ3NhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGUnLCBwYXlsb2FkOiB7Y29sbGVjdGlvbk5hbWU6ICdcIiArXG5cdFx0XHR2YWx1ZUxpc3QuQ29sbGVjdGlvblBhdGggK1xuXHRcdFx0XCInXCIgK1xuXHRcdFx0KHNEZWZhdWx0U29ydFByb3BlcnR5TmFtZSA/IFwiLCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZTogXCIgKyBzRGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgOiBcIlwiKSArXG5cdFx0XHRcIn19XCJcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzb3J0IGNvbmRpdGlvbnMgc2V0IG9uIHRoZSBWYWx1ZUxpc3QncyBQcmVzZW50YXRpb25WYXJpYW50LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgdmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzU3VnZ2VzdGlvbiBJbmRpY2F0ZXMgaWYgdGhlIFZhbHVlTGlzdCBpcyB1c2VkIGluIGEgc3VnZ2VzdGlvbiBzY2VuYXJpb1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGlmIGFueSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0Z2V0U29ydENvbmRpdGlvbnNGcm9tUHJlc2VudGF0aW9uVmFyaWFudDogZnVuY3Rpb24gKHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLCBpc1N1Z2dlc3Rpb246IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRQcmVzZW50YXRpb25WYXJpYW50KHZhbHVlTGlzdEluZm8pO1xuXHRcdGlmIChwcmVzZW50YXRpb25WYXJpYW50Py5Tb3J0T3JkZXIpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXSBhcyBTb3J0ZXJUeXBlW11cblx0XHRcdH07XG5cblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnQuU29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuXHRcdFx0XHRjb25zdCBzb3J0ZXI6IFNvcnRlclR5cGUgPSB7fSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBjb25kaXRpb24/LlByb3BlcnR5Py4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoaXNTdWdnZXN0aW9uKSB7XG5cdFx0XHRcdFx0c29ydGVyLnBhdGggPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLm5hbWUgPSBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLkRlc2NlbmRpbmcpIHtcblx0XHRcdFx0XHRzb3J0ZXIuZGVzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c29ydGVyLmFzY2VuZGluZyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0c29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKHNvcnRlcik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBpc1N1Z2dlc3Rpb24gPyBgc29ydGVyOiAke0pTT04uc3RyaW5naWZ5KHNvcnRDb25kaXRpb25zLnNvcnRlcnMpfWAgOiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgVmFsdWVMaXN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cblx0ICogQHBhcmFtIGlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIEluZGljYXRlcyBpZiBWYWx1ZUxpc3QgaGFzIGZpeGVkIHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgc29ydCBjb25kaXRpb25zIGVpdGhlciBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudCBvciB0aGUgZGVmYXVsdCBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zRm9yVmFsdWVMaXN0OiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgZmFsc2UpO1xuXG5cdFx0aWYgKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0XHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pLFxuXHRcdFx0XHRcdFx0YXNjZW5kaW5nOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdIGFzIFNvcnRlclR5cGVbXVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShzb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFByb3BlcnR5UGF0aDogZnVuY3Rpb24gKG9QYXJhbWV0ZXJzOiB7IFVuYm91bmRBY3Rpb24/OiBib29sZWFuOyBQcm9wZXJ0eTogc3RyaW5nOyBFbnRpdHlUeXBlUGF0aDogc3RyaW5nOyBBY3Rpb246IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gIW9QYXJhbWV0ZXJzLlVuYm91bmRBY3Rpb25cblx0XHRcdD8gYCR7b1BhcmFtZXRlcnMuRW50aXR5VHlwZVBhdGh9LyR7b1BhcmFtZXRlcnMuQWN0aW9ufS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWBcblx0XHRcdDogYC8ke29QYXJhbWV0ZXJzLkFjdGlvbi5zdWJzdHJpbmcob1BhcmFtZXRlcnMuQWN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke29QYXJhbWV0ZXJzLlByb3BlcnR5fWA7XG5cdH0sXG5cblx0Z2V0VmFsdWVMaXN0UHJvcGVydHk6IGZ1bmN0aW9uIChvUHJvcGVydHlDb250ZXh0OiBCYXNlQ29udGV4dCk6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvVmFsdWVMaXN0TW9kZWwgPSBvUHJvcGVydHlDb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbVZhbHVlTGlzdCA9IG9WYWx1ZUxpc3RNb2RlbC5nZXRPYmplY3QoXCIvXCIpIGFzIHVua25vd24gYXMgeyBDb2xsZWN0aW9uUGF0aDogc3RyaW5nOyAkbW9kZWw6IE9EYXRhTW9kZWwgfTtcblx0XHRyZXR1cm4gbVZhbHVlTGlzdC4kbW9kZWwuZ2V0TWV0YU1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKX1gKTtcblx0fSxcblxuXHQvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHZhbHVlIGhlbHAgbS10YWJsZSBhbmQgbWRjLXRhYmxlXG5cdGdldENvbHVtblZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7IFBhcmFtZXRlcnM6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJbXSB9LFxuXHRcdG9WTFBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcixcblx0XHRvU291cmNlOiB7XG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW47XG5cdFx0XHRjb2x1bW5JbmZvOiB7XG5cdFx0XHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0XHRcdGNvbHVtbkluZm9zOiBDb2x1bW5JbmZvW107XG5cdFx0XHR9O1xuXHRcdH1cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNEcm9wRG93bkxpc3QgPSBvU291cmNlICYmICEhb1NvdXJjZS52YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMsXG5cdFx0XHRvQ29sdW1uSW5mbyA9IG9Tb3VyY2UuY29sdW1uSW5mbyxcblx0XHRcdGlzVmlzaWJsZSA9ICFfcmVkdW5kYW50RGVzY3JpcHRpb24ob1ZMUGFyYW1ldGVyLCBvQ29sdW1uSW5mby5jb2x1bW5JbmZvcyksXG5cdFx0XHRpc0RpYWxvZ1RhYmxlID0gb0NvbHVtbkluZm8uaXNEaWFsb2dUYWJsZTtcblxuXHRcdGlmIChpc0Ryb3BEb3duTGlzdCB8fCAoIWlzRHJvcERvd25MaXN0ICYmIGlzRGlhbG9nVGFibGUpIHx8ICghaXNEcm9wRG93bkxpc3QgJiYgIV9oYXNJbXBvcnRhbmNlSGlnaChvVmFsdWVMaXN0KSkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID0gb0NvbHVtbkluZm8uY29sdW1uSW5mb3MuZmluZChmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29sdW1uSW5mbykge1xuXHRcdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSBjb2x1bW5JbmZvLmNvbHVtbk5hbWUgJiYgY29sdW1uSW5mby5oYXNIaWRkZW5Bbm5vdGF0aW9uID09PSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gIWNvbHVtbldpdGhIaWRkZW5Bbm5vdGF0aW9uID8gaXNWaXNpYmxlIDogZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghaXNEcm9wRG93bkxpc3QgJiYgX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3QpKSB7XG5cdFx0XHRyZXR1cm4gb1ZMUGFyYW1ldGVyICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdICYmXG5cdFx0XHRcdG9WTFBhcmFtZXRlcltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlL0hpZ2hcIlxuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0Q29sdW1uVmlzaWJpbGl0eUluZm86IGZ1bmN0aW9uIChcblx0XHRvVmFsdWVMaXN0OiB7XG5cdFx0XHQkbW9kZWw6IE9EYXRhTW9kZWw7XG5cdFx0XHRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0UGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdO1xuXHRcdH0sXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRiSXNEcm9wRG93bkxpc3RlOiBib29sZWFuLFxuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW5cblx0KToge1xuXHRcdGlzRGlhbG9nVGFibGU6IGJvb2xlYW47XG5cdFx0Y29sdW1uSW5mb3M6IENvbHVtbkluZm9bXTtcblx0fSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WYWx1ZUxpc3QuJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5JbmZvczogQ29sdW1uSW5mb1tdID0gW107XG5cdFx0Y29uc3Qgb0NvbHVtbkluZm9zID0ge1xuXHRcdFx0aXNEaWFsb2dUYWJsZTogaXNEaWFsb2dUYWJsZSxcblx0XHRcdGNvbHVtbkluZm9zOiBhQ29sdW1uSW5mb3Ncblx0XHR9O1xuXG5cdFx0b1ZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke29WYWx1ZUxpc3QuQ29sbGVjdGlvblBhdGh9LyR7b1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eX1AYCk7XG5cdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdGxldCBjb2x1bW5JbmZvOiBDb2x1bW5JbmZvID0ge30gYXMgdW5rbm93biBhcyBDb2x1bW5JbmZvO1xuXHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0ge1xuXHRcdFx0XHRcdGtleUNvbHVtbkhpZGRlbjogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdFx0XHRcdGtleUNvbHVtbkRpc3BsYXlGb3JtYXQ6IG9UZXh0QW5ub3RhdGlvbiAmJiBfZ2V0VmFsdWVIZWxwQ29sdW1uRGlzcGxheUZvcm1hdChvUHJvcGVydHlBbm5vdGF0aW9ucywgYklzRHJvcERvd25MaXN0ZSksXG5cdFx0XHRcdFx0dGV4dENvbHVtbk5hbWU6IG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgsXG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8gPSB7XG5cdFx0XHRcdFx0Y29sdW1uTmFtZTogb1BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoYXNIaWRkZW5Bbm5vdGF0aW9uOiBvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPyB0cnVlIDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdG9Db2x1bW5JbmZvcy5jb2x1bW5JbmZvcy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Db2x1bW5JbmZvcztcblx0fSxcblxuXHRnZXRUYWJsZUl0ZW1zUGFyYW1ldGVyczogZnVuY3Rpb24gKFxuXHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cmVxdWVzdEdyb3VwSWQ6IHN0cmluZyxcblx0XHRpc1N1Z2dlc3Rpb246IGJvb2xlYW4sXG5cdFx0aXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBpdGVtUGFyYW1ldGVycyA9IFtgcGF0aDogJy8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9J2BdO1xuXG5cdFx0Ly8gYWRkIHNlbGVjdCB0byBvQmluZGluZ0luZm8gKEJDUCAyMTgwMjU1OTU2IC8gMjE3MDE2MzAxMilcblx0XHRjb25zdCBzZWxlY3RTdHJpbmcgPSBfYnVpbGQkU2VsZWN0U3RyaW5nKHRoaXMpO1xuXG5cdFx0Ly8gc2luY2UgdGhlcmUgY291bGQgYmUgcmVjb21tZW5kYXRpb25zL3JlY2VudGx5IHVzZWQgdmFsdWVzIHRvIHNob3cgaW4gdGhlIHN1Z2dlc3Rpb24gcG9wb3ZlclxuXHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gY3JlYXRlIHNvbWUgdHJhbnNpZW50IGNvbnRleHRzIG9uIHRoZSB2YWx1ZUhlbHAgbGlzdCBiaW5kaW5nXG5cdFx0Ly8gc28gd2Ugd2lsbCBzZXQgdGhlIHVwZGF0ZUdyb3VwSWQgb2YgdGhlIGxpc3QgYmluZGluZyB0byBhdm9pZCBzZW5kaW5nIGNhbGxzIHRvIHRoZSBiYWNrZW5kXG5cdFx0Ly8gd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCAkJHNoYXJlZFJlcXVlc3QgdG8gZmFsc2UgdG8gbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgdHJhbnNpZW50IGNvbnRleHRzIGluIFJBUFxuXHRcdGlmIChyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0U3RyaW5nUGFydCA9IHNlbGVjdFN0cmluZyA/IGAsICcke3NlbGVjdFN0cmluZ30nYCA6IFwiXCI7XG5cblx0XHRcdGl0ZW1QYXJhbWV0ZXJzLnB1c2goXG5cdFx0XHRcdGBwYXJhbWV0ZXJzOiB7JCRzaGFyZWRSZXF1ZXN0OiBmYWxzZSwgJCR1cGRhdGVHcm91cElkOiBcImRvbm90c3VibWl0XCIsICQkZ3JvdXBJZDogJyR7cmVxdWVzdEdyb3VwSWR9JyR7c2VsZWN0U3RyaW5nUGFydH19YFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdFN0cmluZykge1xuXHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgcGFyYW1ldGVyczogeyQkc2hhcmVkUmVxdWVzdDogZmFsc2UsICQkdXBkYXRlR3JvdXBJZDogXCJkb25vdHN1Ym1pdFwiLCAkc2VsZWN0OiAnJHtzZWxlY3RTdHJpbmd9J31gKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc1N1c3BlbmRlZCA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChvUGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gaXNTdWdnZXN0aW9uIHx8IG9QYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbjtcblx0XHR9KTtcblx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKGBzdXNwZW5kZWQ6ICR7aXNTdXNwZW5kZWR9YCk7XG5cblx0XHRpZiAoIWlzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKFwibGVuZ3RoOiAxMFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50ID0gVmFsdWVMaXN0SGVscGVyLmdldFNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQodmFsdWVMaXN0SW5mbywgaXNTdWdnZXN0aW9uKTtcblxuXHRcdGlmIChzb3J0Q29uZGl0aW9uc0Zyb21QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHRpdGVtUGFyYW1ldGVycy5wdXNoKHNvcnRDb25kaXRpb25zRnJvbVByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdH0gZWxzZSBpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gX2dldERlZmF1bHRTb3J0UHJvcGVydHlOYW1lKHZhbHVlTGlzdEluZm8pO1xuXG5cdFx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0aXRlbVBhcmFtZXRlcnMucHVzaChgc29ydGVyOiBbe3BhdGg6ICcke2RlZmF1bHRTb3J0UHJvcGVydHlOYW1lfScsIGFzY2VuZGluZzogdHJ1ZX1dYCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwie1wiICsgaXRlbVBhcmFtZXRlcnMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0sXG5cblx0Ly8gSXMgbmVlZGVkIGZvciBcImV4dGVybmFsXCIgcmVwcmVzZW50YXRpb24gaW4gcXVuaXRcblx0aGFzSW1wb3J0YW5jZTogZnVuY3Rpb24gKG9WYWx1ZUxpc3RDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gX2hhc0ltcG9ydGFuY2VIaWdoKG9WYWx1ZUxpc3RDb250ZXh0LmdldE9iamVjdCgpKSA/IFwiSW1wb3J0YW5jZS9IaWdoXCIgOiBcIk5vbmVcIjtcblx0fSxcblxuXHQvLyBJcyBuZWVkZWQgZm9yIFwiZXh0ZXJuYWxcIiByZXByZXNlbnRhdGlvbiBpbiBxdW5pdFxuXHRnZXRNaW5TY3JlZW5XaWR0aDogZnVuY3Rpb24gKG9WYWx1ZUxpc3Q6IHsgUGFyYW1ldGVyczogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcltdIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBfaGFzSW1wb3J0YW5jZUhpZ2gob1ZhbHVlTGlzdCkgPyBcIns9ICR7X1ZIVUk+L21pblNjcmVlbldpZHRofX1cIiA6IFwiNDE2cHhcIjtcblx0fSxcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb2x1bW4gd2lkdGggZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5UGF0aFxuXHQgKiBAcGFyYW0gaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgQW4gaW5kaWNhdG9yIHN0YXRpbmcgaWYgdGhlIHZhbHVlSGVscCBoYXMgZml4ZWQgdmFsdWVzXG5cdCAqIEByZXR1cm5zIFRoZSB3aWR0aCBhcyBhIHN0cmluZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sIGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCkgfHwgIXByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QpIHJldHVybjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IHJlbGF0ZWRQcm9wZXJ0eTogUHJvcGVydHlbXSA9IFtwcm9wZXJ0eV07XG5cdFx0Ly8gVGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgY291bGQgcmVmZXIgdG8gdGhlIHRleHQsIGN1cnJlbmN5LCB1bml0IG9yIHRpbWV6b25lXG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eShwcm9wZXJ0eSkgfHxcblx0XHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpIHx8XG5cdFx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KSxcblx0XHRcdHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdHRleHRBcnJhbmdlbWVudCA9IHRleHRBbm5vdGF0aW9uPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSxcblx0XHRcdGxhYmVsID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0bGV0IGRpc3BsYXlNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBkZWZhdWx0IHRleHRhcnJhbmdlbWVudCBpcyBvbmx5IHVzZWQgZm9yIFZIIHdpdGggZml4ZWQgdmFsdWVzXG5cdFx0aWYgKGlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmICF0ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdC8vZGlzcGxheU1vZGUgPSBhcyBhbm5vdGF0ZWQgb3IgZGVmYXVsdFxuXHRcdFx0ZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eVBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2Rpc3BsYXlNb2RlID0gYXMgYW5ub3RhdGVkIG9yIHVuZGVmaW5lZFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHlQYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0XHRpZiAoZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkgPSBbYWRkaXRpb25hbFByb3BlcnR5XTtcblx0XHRcdH0gZWxzZSBpZiAoIXRleHRBbm5vdGF0aW9uIHx8IChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHkucHVzaChhZGRpdGlvbmFsUHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzaXplID0gMDtcblx0XHRjb25zdCBpbnN0YW5jZXM6IE9EYXRhVHlwZVtdID0gW107XG5cblx0XHRyZWxhdGVkUHJvcGVydHkuZm9yRWFjaCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcCwgdW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3RvciA9IE9iamVjdFBhdGguZ2V0KHByb3BlcnR5VHlwZUNvbmZpZy50eXBlKTtcblx0XHRcdGlmIChQcm9wZXJ0eU9EYXRhQ29uc3RydWN0b3IpIHtcblx0XHRcdFx0aW5zdGFuY2VzLnB1c2gobmV3IFByb3BlcnR5T0RhdGFDb25zdHJ1Y3Rvcihwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucywgcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgc1dpZHRoID0gVXRpbC5jYWxjQ29sdW1uV2lkdGgoaW5zdGFuY2VzLCBsYWJlbCk7XG5cdFx0c2l6ZSA9IHNXaWR0aCA/IHBhcnNlRmxvYXQoc1dpZHRoLnJlcGxhY2UoXCJyZW1cIiwgXCJcIikpIDogMDtcblxuXHRcdGlmIChzaXplID09PSAwKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHRoZSBjb2x1bW4gd2lkdGggZm9yIHByb3BlcnR5OiAke3Byb3BlcnR5Lm5hbWV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBzaXplIDw9IDIwID8gc2l6ZS50b1N0cmluZygpICsgXCJyZW1cIiA6IFwiMjByZW1cIjtcblx0fSxcblxuXHRnZXRPdXRQYXJhbWV0ZXJQYXRoczogZnVuY3Rpb24gKGFQYXJhbWV0ZXJzOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlcikge1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXIuJFR5cGUuZW5kc1dpdGgoXCJPdXRcIikpIHtcblx0XHRcdFx0c1BhdGggKz0gYHske29QYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9fWA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9LFxuXG5cdGVudGl0eUlzU2VhcmNoYWJsZTogZnVuY3Rpb24gKFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0Y29sbGVjdGlvbkFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNlYXJjaFN1cHBvcnRlZCA9IHByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXT8uU2VhcmNoU3VwcG9ydGVkLFxuXHRcdFx0c2VhcmNoYWJsZSA9IGNvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc1wiXT8uU2VhcmNoYWJsZTtcblxuXHRcdGlmIChcblx0XHRcdChzZWFyY2hhYmxlID09PSB1bmRlZmluZWQgJiYgc2VhcmNoU3VwcG9ydGVkID09PSBmYWxzZSkgfHxcblx0XHRcdChzZWFyY2hhYmxlID09PSB0cnVlICYmIHNlYXJjaFN1cHBvcnRlZCA9PT0gZmFsc2UpIHx8XG5cdFx0XHRzZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuXG5cdCAqIEZvciBlLmcuIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29uZGl0aW9uUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldDogc3RyaW5nLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Ly8gKHNlZSBhbHNvOiBzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyLnRzKVxuXHRcdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgY29uZGl0aW9uUGF0aCA9IFwiXCIsXG5cdFx0XHRwYXJ0aWFsUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVNldH0vJHtwYXJ0aWFsUGF0aH1gKTtcblx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25kaXRpb25QYXRoID0gY29uZGl0aW9uUGF0aCA/IGAke2NvbmRpdGlvblBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbmRpdGlvblBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zIGNvcnJlc3BvbmRpbmcgdG8gcHJvcGVydGllcyBkZWZpbmVkIGFzIFNlbGVjdGlvbiBGaWVsZHMgb24gdGhlIENvbGxlY3Rpb25QYXRoIGVudGl0eSBzZXQgaW4gYSBWYWx1ZUhlbHAuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IFRoZSBlbnRpdHkgc2V0IHBhdGhcblx0ICogQHJldHVybnMgQXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXQ6IHN0cmluZyk6IENvbHVtbkRlZltdIHtcblx0XHRjb25zdCBjb2x1bW5EZWZzOiBDb2x1bW5EZWZbXSA9IFtdLFxuXHRcdFx0ZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlTZXR9L0BgKSBhcyBBbm5vdGF0aW9uc0ZvckVudGl0eVR5cGUsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdO1xuXG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkOiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGRQYXRoID0gYCR7ZW50aXR5U2V0fS8ke3NlbGVjdGlvbkZpZWxkLiRQcm9wZXJ0eVBhdGh9YCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXRoID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb25kaXRpb25QYXRoKG1ldGFNb2RlbCwgZW50aXR5U2V0LCBzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtzZWxlY3Rpb25GaWVsZFBhdGh9QGApIGFzIEFubm90YXRpb25zRm9yUHJvcGVydHksXG5cdFx0XHRcdFx0Y29sdW1uRGVmID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogY29uZGl0aW9uUGF0aCxcblx0XHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eUFubm90YXRpb25zPy5bQW5ub3RhdGlvbkxhYmVsXSB8fCBzZWxlY3Rpb25GaWVsZFBhdGgsXG5cdFx0XHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGZpbHRlcmFibGU6IGlzUHJvcGVydHlGaWx0ZXJhYmxlKG1ldGFNb2RlbCwgZW50aXR5U2V0LCBzZWxlY3Rpb25GaWVsZC4kUHJvcGVydHlQYXRoLCBmYWxzZSksXG5cdFx0XHRcdFx0XHQkVHlwZTogbWV0YU1vZGVsLmdldE9iamVjdChzZWxlY3Rpb25GaWVsZFBhdGgpPy4kVHlwZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkRlZnMucHVzaChjb2x1bW5EZWYpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkRlZnM7XG5cdH0sXG5cblx0X21lcmdlQ29sdW1uRGVmaW5pdGlvbnNGcm9tUHJvcGVydGllczogZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkRlZnM6IENvbHVtbkRlZltdLFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHZhbHVlTGlzdFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0cHJvcGVydHk6IENvbHVtblByb3BlcnR5LFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IEFubm90YXRpb25zRm9yUHJvcGVydHlcblx0KTogdm9pZCB7XG5cdFx0bGV0IGNvbHVtblBhdGggPSB2YWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdGNvbHVtblByb3BlcnR5VHlwZSA9IHByb3BlcnR5LiRUeXBlO1xuXHRcdGNvbnN0IGxhYmVsID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uTGFiZWxdIHx8IGNvbHVtblBhdGgsXG5cdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGV4dEFubm90YXRpb24gJiZcblx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudF0/LiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIlxuXHRcdCkge1xuXHRcdFx0Ly8gdGhlIGNvbHVtbiBwcm9wZXJ0eSBpcyB0aGUgb25lIGNvbWluZyBmcm9tIHRoZSB0ZXh0IGFubm90YXRpb25cblx0XHRcdGNvbHVtblBhdGggPSB0ZXh0QW5ub3RhdGlvbi4kUGF0aDtcblx0XHRcdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtjb2x1bW5QYXRofWA7XG5cdFx0XHRjb2x1bW5Qcm9wZXJ0eVR5cGUgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKT8uZ2V0T2JqZWN0KHRleHRQcm9wZXJ0eVBhdGgpPy4kVHlwZSBhcyBzdHJpbmc7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkKGNvbHVtbkRlZnMsIGNvbHVtblBhdGgpKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWY6IENvbHVtbkRlZiA9IHtcblx0XHRcdFx0cGF0aDogY29sdW1uUGF0aCxcblx0XHRcdFx0Ly8gZW5zdXJlIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbHVtbiB0aGF0IHJlZmVyZW5jZXMgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IHJlZmxlY3RzIHRoZSBzYW1lIG5hdmlnYXRpb24gc3RydWN0dXJlIGFzIHRoZSBjb2x1bW5cblx0XHRcdFx0dGV4dFBhdGg6XG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24/LiRQYXRoICYmIHZhbHVlTGlzdFByb3BlcnR5LmluY2x1ZGVzKFwiL1wiKVxuXHRcdFx0XHRcdFx0PyB2YWx1ZUxpc3RQcm9wZXJ0eS5zdWJzdHJpbmcoMCwgdmFsdWVMaXN0UHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpKSArIFwiL1wiICsgdGV4dEFubm90YXRpb24uJFBhdGhcblx0XHRcdFx0XHRcdDogdGV4dEFubm90YXRpb24/LiRQYXRoLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiAhcHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIl0sXG5cdFx0XHRcdCRUeXBlOiBjb2x1bW5Qcm9wZXJ0eVR5cGVcblx0XHRcdH07XG5cdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVySW5PdXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAodmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdLCB0eXBlRmlsdGVyOiBzdHJpbmdbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiB2aFBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiB0eXBlRmlsdGVyLmluY2x1ZGVzKHBhcmFtZXRlci5wYXJtZXRlclR5cGUpO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGdldEluUGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiBWYWx1ZUxpc3RIZWxwZXIuZmlsdGVySW5PdXRQYXJhbWV0ZXJzKHZoUGFyYW1ldGVycywgW1xuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50LFxuXHRcdFx0QW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckluT3V0XG5cdFx0XSk7XG5cdH0sXG5cblx0Z2V0T3V0UGFyYW1ldGVyczogZnVuY3Rpb24gKHZoUGFyYW1ldGVyczogSW5PdXRQYXJhbWV0ZXJbXSk6IEluT3V0UGFyYW1ldGVyW10ge1xuXHRcdHJldHVybiBWYWx1ZUxpc3RIZWxwZXIuZmlsdGVySW5PdXRQYXJhbWV0ZXJzKHZoUGFyYW1ldGVycywgW0Fubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsIEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dF0pO1xuXHR9LFxuXG5cdGNyZWF0ZVZIVUlNb2RlbDogZnVuY3Rpb24gKHZhbHVlSGVscDogVmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gc2V0dGluZyB0aGUgX1ZIVUkgbW9kZWwgZXZhbHVhdGVkIGluIHRoZSBWYWx1ZUxpc3RUYWJsZSBmcmFnbWVudFxuXHRcdGNvbnN0IHZoVUlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pLFxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5O1xuXG5cdFx0dmFsdWVIZWxwLnNldE1vZGVsKHZoVUlNb2RlbCwgXCJfVkhVSVwiKTtcblx0XHQvLyBJZGVudGlmaWVzIHRoZSBcIkNvbnRleHREZXBlbmRlbnQtU2NlbmFyaW9cIlxuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9oYXNWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIiwgISFwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXSk7XG5cdFx0LyogUHJvcGVydHkgbGFiZWwgZm9yIGRpYWxvZyB0aXRsZSAqL1xuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIsIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbkxhYmVsXSk7XG5cblx0XHRyZXR1cm4gdmhVSU1vZGVsO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgdmFsdWUgaGVscCBkaWFsb2cuXG5cdCAqIEJ5IGRlZmF1bHQsIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogRm9yIGNvbnRleHQtZGVwZW5kZW50IHZhbHVlIGhlbHBzLCBieSBkZWZhdWx0IHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQsIG90aGVyd2lzZSBlaXRoZXIgdGhlIHByb3BlcnR5IGxhYmVsIG9yIHRoZSBkYXRhIGZpZWxkIGxhYmVsIGlzIHVzZWQgYXMgYSBmYWxsYmFjay5cblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgdmFsdWVIZWxwIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBMYWJlbCBUaGUgbGFiZWwgaW4gdGhlIHZhbHVlIGhlbHAgbWV0YWRhdGFcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIGZvciB0aGUgdmFsdWVIZWxwIGRpYWxvZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldERpYWxvZ1RpdGxlOiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAsIHZhbHVlaGVscExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5TGFiZWwgPSAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShcIi9wcm9wZXJ0eUxhYmVsXCIpO1xuXHRcdGNvbnN0IGRhdGFGaWVsZExhYmVsID0gdmFsdWVIZWxwLmdldENvbnRyb2woKT8uZ2V0UHJvcGVydHkoXCJsYWJlbFwiKTtcblx0XHRyZXR1cm4gKHZhbHVlSGVscC5nZXRNb2RlbChcIl9WSFVJXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaGFzVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCIpXG5cdFx0XHQ/IHZhbHVlaGVscExhYmVsIHx8IHByb3BlcnR5TGFiZWwgfHwgZGF0YUZpZWxkTGFiZWxcblx0XHRcdDogZGF0YUZpZWxkTGFiZWwgfHwgcHJvcGVydHlMYWJlbCB8fCB2YWx1ZWhlbHBMYWJlbDtcblx0fSxcblxuXHRkZXN0cm95VkhDb250ZW50OiBmdW5jdGlvbiAodmFsdWVIZWxwOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAodmFsdWVIZWxwKSB7XG5cdFx0XHR2YWx1ZUhlbHAuZ2V0RGlhbG9nKCk/LmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0XHR2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCk/LmRlc3Ryb3lDb250ZW50KCk7XG5cdFx0fVxuXHR9LFxuXG5cdHB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdDogZnVuY3Rpb24gKHF1YWxpZmllcnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGluZGV4RGVmYXVsdFZIID0gcXVhbGlmaWVycy5pbmRleE9mKFwiXCIpO1xuXG5cdFx0Ly8gZGVmYXVsdCBWYWx1ZUhlbHAgd2l0aG91dCBxdWFsaWZpZXIgc2hvdWxkIGJlIHRoZSBmaXJzdFxuXHRcdGlmIChpbmRleERlZmF1bHRWSCA+IDApIHtcblx0XHRcdHF1YWxpZmllcnMudW5zaGlmdChxdWFsaWZpZXJzW2luZGV4RGVmYXVsdFZIXSk7XG5cdFx0XHRxdWFsaWZpZXJzLnNwbGljZShpbmRleERlZmF1bHRWSCArIDEsIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVhbGlmaWVycztcblx0fSxcblxuXHRfZ2V0Q29udGV4dFByZWZpeDogZnVuY3Rpb24gKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBwcm9wZXJ0eUJpbmRpbmdQYXJ0czogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdGNvbnN0IGJpbmRpZ0NvbnRleHRQYXJ0cyA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAocHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gYmluZGlnQ29udGV4dFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dFByZWZpeFBhcnRzID0gW107XG5cdFx0XHRcdGZvciAobGV0IGkgPSBiaW5kaWdDb250ZXh0UGFydHMubGVuZ3RoOyBpIDwgcHJvcGVydHlCaW5kaW5nUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0Y29udGV4dFByZWZpeFBhcnRzLnB1c2gocHJvcGVydHlCaW5kaW5nUGFydHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBgJHtjb250ZXh0UHJlZml4UGFydHMuam9pbihcIi9cIil9L2A7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0sXG5cblx0X2dldFZoUGFyYW1ldGVyOiBmdW5jdGlvbiAoXG5cdFx0Y29uZGl0aW9uTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0UHJlZml4OiBzdHJpbmcsXG5cdFx0cGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyLFxuXHRcdHZoTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuXHQpOiBJbk91dFBhcmFtZXRlciB7XG5cdFx0bGV0IHZhbHVlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscD8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoY29uZGl0aW9uTW9kZWwgJiYgY29uZGl0aW9uTW9kZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR2YWx1ZUhlbHA/LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0ICYmXG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciB2YWx1ZSBoZWxwIHVzZWQgaW4gZmlsdGVyIGRpYWxvZ1xuXHRcdFx0XHRjb25zdCBwYXJ0cyA9IGxvY2FsRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXJ0c1swXTtcblx0XHRcdFx0XHRjb25zdCBvQm91bmRFbnRpdHkgPSB2aE1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdGNvbnN0IHNQYXRoT2ZUYWJsZSA9ICh2YWx1ZUhlbHAuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGdldFJvd0JpbmRpbmc6IEZ1bmN0aW9uIH0pLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCk7IC8vVE9ET1xuXHRcdFx0XHRcdGlmIChvQm91bmRFbnRpdHkuZ2V0T2JqZWN0KGAke3NQYXRoT2ZUYWJsZX0vJFBhcnRuZXJgKSA9PT0gZmlyc3ROYXZpZ2F0aW9uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdC8vIFVzaW5nIHRoZSBjb25kaXRpb24gbW9kZWwgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBpbiBjYXNlIGFuIGluLXBhcmFtZXRlciB1c2VzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0Ly8gcmVmZXJyaW5nIHRvIHRoZSBwYXJ0bmVyLiBUaGVyZWZvcmUgdXNpbmcgdGhlIEZWSCBjb250ZXh0IGluc3RlYWQgb2YgdGhlIGNvbmRpdGlvbiBtb2RlbC5cblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGxvY2FsRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHZhbHVlSGVscD8uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikgPT09IHRydWUgJiZcblx0XHRcdFx0YmluZGluZ0NvbnRleHQgJiZcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbXG5cdFx0XHRcdFx0Q29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluLFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgYXJlIGEgdmFsdWUgaGVscCBvZiBhIEZpbHRlckJhciwgd2UgY2FuIGdvIHVwIHRvIHRoZSBBUEkgdG8gY2hlY2sgaWYgd2UgYXJlIG9uIGEgZmlsdGVyYmFyIHJlcHJlc2VudGluZyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gdmFsdWVIZWxwLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJNZXRhUGF0aCA9IGZpbHRlckJhckFQSS5tZXRhUGF0aDtcblx0XHRcdFx0Y29uc3QgdmFsdWVIZWxwQ29udGV4dFBhdGggPSB2aE1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0TWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgdmFsdWVIZWxwQ29udGV4dFBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKHZoTWV0YU1vZGVsKSwgZmlsdGVyQmFyTWV0YVBhdGgsIHZhbHVlSGVscENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbmV3UGF0aCA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4obG9jYWxEYXRhUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0aWYgKG5ld1BhdGggJiYgbmV3UGF0aC5nZXRUYXJnZXQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IG5ld1BhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlTZXQgPT09IGNvbnRleHRNZXRhUGF0aC5nZXRDbG9zZXN0RW50aXR5U2V0KCkpIHtcblx0XHRcdFx0XHRcdHZhbHVlUGF0aCA9IGNvbnRleHRNZXRhUGF0aC5nZXRNZXRhUGF0aEZvck9iamVjdChuZXdQYXRoLmdldFRhcmdldCgpKT8uZ2V0UmVsYXRpdmVQYXRoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXZhbHVlUGF0aCkge1xuXHRcdFx0XHR2YWx1ZVBhdGggPSBjb25kaXRpb25Nb2RlbCArIFwiPi9jb25kaXRpb25zL1wiICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZVBhdGggPSBjb250ZXh0UHJlZml4ICsgbG9jYWxEYXRhUHJvcGVydHlQYXRoO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdHNvdXJjZTogdmFsdWVQYXRoLFxuXHRcdFx0aGVscFBhdGg6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdGluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQ6IEJvb2xlYW4ocGFyYW1ldGVyLkluaXRpYWxWYWx1ZUlzU2lnbmlmaWNhbnQpXG5cdFx0fTtcblx0fSxcblxuXHRfcGFyYW1ldGVySXNBKHBhcmFtZXRlcjogQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlciwgcGFyYW1ldGVyVHlwZXM6IENvbW1vbkFubm90YXRpb25UeXBlc1tdKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlclR5cGVzLmluY2x1ZGVzKHBhcmFtZXRlci4kVHlwZSBhcyBDb21tb25Bbm5vdGF0aW9uVHlwZXMpO1xuXHR9LFxuXG5cdF9lbnJpY2hQYXRoOiBmdW5jdGlvbiAoXG5cdFx0cGF0aDogUGF0aCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRleHRlcm5hbElkUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cdCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdCFwYXRoLmtleSAmJlxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9wYXJhbWV0ZXJJc0EocGFyYW1ldGVyLCBbQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XSkgJiZcblx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lXG5cdFx0KSB7XG5cdFx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHkgPSBleHRlcm5hbElkUGF0aD8uc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0cGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID0gZXh0ZXJuYWxJZFByb3BlcnR5ID8gZXh0ZXJuYWxJZFByb3BlcnR5IDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0cGF0aC5maWVsZFByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aDtcblx0XHRcdHBhdGgua2V5ID0gcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXG5cdFx0XHQvL09ubHkgdGhlIHRleHQgYW5ub3RhdGlvbiBvZiB0aGUga2V5IGNhbiBzcGVjaWZ5IHRoZSBkZXNjcmlwdGlvblxuXHRcdFx0cGF0aC5kZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XT8uJFBhdGggfHwgXCJcIjtcblx0XHR9XG5cdH0sXG5cblx0X2VucmljaEtleXM6IGZ1bmN0aW9uICh2aEtleXM6IHN0cmluZ1tdLCBwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRpZiAoXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFZhbHVlTGlzdEhlbHBlci5nZXRJbkFuZE91dFBhcmFtZXRlcnNMaXN0KCkpICYmXG5cdFx0XHQhdmhLZXlzLmluY2x1ZGVzKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSlcblx0XHQpIHtcblx0XHRcdHZoS2V5cy5wdXNoKHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRFbnRpdHlUeXBlOiBhc3luYyBmdW5jdGlvbiAobWV0YU1vZGVsVkg6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcblx0XHRyZXR1cm4gbWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L2ApIHx8IChhd2FpdCBtZXRhTW9kZWxWSC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9L2ApKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHByZS1wcm9jZXNzIGEgdmFsdWUgbGlzdCBhbm5vdGF0aW9uIGJlZm9yZSB1c2luZyB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlTGlzdFR5cGVcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uTW9kZWxcblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gY29udGV4dFByZWZpeFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBRdWFsaWZpZXJcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGVcblx0ICogQHJldHVybnMgVGhlIFZhbHVlTGlzdEluZm8gdG8gYmUgdXNlZCBpbiB0ZW1wbGF0aW5nXG5cdCAqL1xuXHRfcHJvY2Vzc1BhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZTogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0Y29uZGl0aW9uTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRjb250ZXh0UHJlZml4OiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IHN0cmluZyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIHwgdW5kZWZpbmVkLFxuXHRcdGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWRcblx0KTogVmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgaXNGb3JNdWx0aVZhbHVlRmllbGQgPSBwYXlsb2FkPy51c2VNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgbWV0YU1vZGVsVkggPSBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS4kbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofWA7XG5cdFx0aWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLmVycm9yKGBJbmNvbnNpc3RlbnQgdmFsdWUgaGVscCBtZXRhZGF0YTogRW50aXR5ICR7ZW50aXR5U2V0UGF0aH0gaXMgbm90IGRlZmluZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29sdW1uRGVmcyA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21TZWxlY3Rpb25GaWVsZHMobWV0YU1vZGVsVkgsIGVudGl0eVNldFBhdGgpLFxuXHRcdFx0dmhQYXJhbWV0ZXJzOiBJbk91dFBhcmFtZXRlcltdID0gW10sXG5cdFx0XHRwYXRoOiBQYXRoID0ge1xuXHRcdFx0XHRmaWVsZFByb3BlcnR5UGF0aDogXCJcIixcblx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRrZXk6IFwiXCJcblx0XHRcdH07XG5cdFx0bGV0IHZoS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRcdGlmIChcIiRLZXlcIiBpbiBlbnRpdHlUeXBlICYmIGVudGl0eVR5cGUuJEtleSkge1xuXHRcdFx0dmhLZXlzID0gWy4uLihlbnRpdHlUeXBlLiRLZXkgYXMgc3RyaW5nW10pXTtcblx0XHR9XG5cdFx0Y29uc3QgZmlyc3RLZXkgPSB2aEtleXNbMF07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5QYXJhbWV0ZXJzKSB7XG5cdFx0XHQvL0FsbCBTdHJpbmcgZmllbGRzIGFyZSBhbGxvd2VkIGZvciBmaWx0ZXJcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHl9YCxcblx0XHRcdFx0cHJvcGVydHkgPSBtZXRhTW9kZWxWSC5nZXRPYmplY3QocHJvcGVydHlQYXRoKSxcblx0XHRcdFx0cHJvcGVydHlBbm5vdGF0aW9ucyA9IHBheWxvYWQ/LmV4dGVybmFsSWRQYXRoXG5cdFx0XHRcdFx0PyAoKG1ldGFNb2RlbFZILmdldE9iamVjdChgLyR7cGF5bG9hZD8uZXh0ZXJuYWxJZFBhdGh9QGApIHx8IHt9KSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5KVxuXHRcdFx0XHRcdDogKChtZXRhTW9kZWxWSC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSB8fCB7fSkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSksXG5cdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCB8fCBcIlwiO1xuXG5cdFx0XHRpZiAocGF5bG9hZCAmJiBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdKSB7XG5cdFx0XHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcHJvcGVydHkgY29taW5nIGZvciB0aGUgZW50cnkgaXNuJ3QgZGVmaW5lZCBpblxuXHRcdFx0Ly8gdGhlIG1ldGFtb2RlbCwgdGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IGluIHRoZSBpbi9vdXQgcGFyYW1ldGVyc1xuXHRcdFx0aWYgKHByb3BlcnR5KSB7XG5cdFx0XHRcdC8vIFNlYXJjaCBmb3IgdGhlICpvdXQgUGFyYW1ldGVyIG1hcHBlZCB0byB0aGUgbG9jYWwgcHJvcGVydHlcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9lbnJpY2hQYXRoKFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdHByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0cGF5bG9hZD8uZXh0ZXJuYWxJZFBhdGhcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9tZXJnZUNvbHVtbkRlZmluaXRpb25zRnJvbVByb3BlcnRpZXMoXG5cdFx0XHRcdFx0Y29sdW1uRGVmcyxcblx0XHRcdFx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eUFubm90YXRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vSW4gYW5kIEluT3V0IGFuZCBPdXRcblx0XHRcdGlmIChcblx0XHRcdFx0KFZhbHVlTGlzdEhlbHBlci5fcGFyYW1ldGVySXNBKHBhcmFtZXRlciwgW1xuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbixcblx0XHRcdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LFxuXHRcdFx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRdKSAmJlxuXHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5UGF0aCAhPT0gcHJvcGVydHlOYW1lKSB8fFxuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB2aFBhcmFtZXRlciA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VmhQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0Y29uZGl0aW9uTW9kZWwsXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXgsXG5cdFx0XHRcdFx0cGFyYW1ldGVyLFxuXHRcdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eVBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFpc0Zvck11bHRpVmFsdWVGaWVsZCB8fFxuXHRcdFx0XHRcdChpc0Zvck11bHRpVmFsdWVGaWVsZCAmJiBWYWx1ZUxpc3RIZWxwZXIuX3BhcmFtZXRlcklzQShwYXJhbWV0ZXIsIFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5dKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBNdWx0aXZhbHVlIEZpZWxkIHdlIGRpc3JlZ2FyZCBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFxuXHRcdFx0XHRcdHZoUGFyYW1ldGVycy5wdXNoKHZoUGFyYW1ldGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvL0NvbnN0YW50IGFzIEluUGFyYW10ZXIgZm9yIGZpbHRlcmluZ1xuXHRcdFx0aWYgKHBhcmFtZXRlci4kVHlwZSA9PT0gQW5ub3RhdGlvblZhbHVlTGlzdFBhcmFtZXRlckNvbnN0YW50KSB7XG5cdFx0XHRcdHZoUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRwYXJtZXRlclR5cGU6IHBhcmFtZXRlci4kVHlwZSxcblx0XHRcdFx0XHRzb3VyY2U6IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRoZWxwUGF0aDogcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5LFxuXHRcdFx0XHRcdGNvbnN0YW50VmFsdWU6IHBhcmFtZXRlci5Db25zdGFudCxcblx0XHRcdFx0XHRpbml0aWFsVmFsdWVJc1NpZ25pZmljYW50OiBCb29sZWFuKHBhcmFtZXRlci5Jbml0aWFsVmFsdWVJc1NpZ25pZmljYW50KVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRW5yaWNoIGtleXMgd2l0aCBvdXQtcGFyYW1ldGVyc1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9lbnJpY2hLZXlzKHZoS2V5cywgcGFyYW1ldGVyKTtcblx0XHR9XG5cdFx0aWYgKCFwYXRoLmtleSkge1xuXHRcdFx0cGF0aC5rZXkgPSBmaXJzdEtleTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtmaXJzdEtleX1gO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IChtZXRhTW9kZWxWSC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSB8fCB7fSkgYXMgQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eTtcblx0XHRcdC8vIFdlIHVwZGF0ZSBwYXRoLmRlc2NyaXB0aW9uUGF0aCBmb3IgdGhlIGtleSBwcm9wZXJ0eVxuXHRcdFx0cGF0aC5kZXNjcmlwdGlvblBhdGggPSBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25UZXh0XT8uJFBhdGggfHwgXCJcIjtcblx0XHR9XG5cblx0XHQvKiBFbnN1cmUgdGhhdCB2aEtleXMgYXJlIHBhcnQgb2YgdGhlIGNvbHVtbkRlZnMsIG90aGVyd2lzZSBpdCBpcyBub3QgY29uc2lkZXJlZCBpbiAkc2VsZWN0IChCQ1AgMjI3MDE0MTE1NCkgKi9cblx0XHRmb3IgKGNvbnN0IHZoS2V5IG9mIHZoS2V5cykge1xuXHRcdFx0aWYgKGNvbHVtbk5vdEFscmVhZHlEZWZpbmVkKGNvbHVtbkRlZnMsIHZoS2V5KSkge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5EZWY6IENvbHVtbkRlZiA9IHtcblx0XHRcdFx0XHRwYXRoOiB2aEtleSxcblx0XHRcdFx0XHQkVHlwZTogbWV0YU1vZGVsVkguZ2V0T2JqZWN0KGAvJHthbm5vdGF0aW9uVmFsdWVMaXN0VHlwZS5Db2xsZWN0aW9uUGF0aH0vJHtwYXRoLmtleX1gKT8uJFR5cGUsXG5cdFx0XHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IHVuZGVmaW5lZFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5EZWZzLnB1c2goY29sdW1uRGVmKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZWxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvID0ge1xuXHRcdFx0a2V5UGF0aDogcGF0aC5rZXksXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IHBhdGguZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0ZmllbGRQcm9wZXJ0eVBhdGg6IHBhdGguZmllbGRQcm9wZXJ0eVBhdGgsXG5cdFx0XHR2aEtleXM6IHZoS2V5cyxcblx0XHRcdHZoUGFyYW1ldGVyczogdmhQYXJhbWV0ZXJzLFxuXHRcdFx0dmFsdWVMaXN0SW5mbzogYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0XHRjb2x1bW5EZWZzOiBjb2x1bW5EZWZzLFxuXHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyXG5cdFx0fTtcblx0XHRyZXR1cm4gdmFsdWVsaXN0SW5mbztcblx0fSxcblxuXHRfbG9nRXJyb3I6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZXJyb3IgPyAoZXJyb3IgYXMgWE1MSHR0cFJlcXVlc3QpLnN0YXR1cyA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuXHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblxuXHRcdExvZy5lcnJvcihtc2cpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNvbXB1dGUgdGhlIHZhbHVlIGxpc3QgaW5mb3MgYmFzZWQgb24gdGhlIHZhbHVlIGxpc3QgYW5ub3RhdGlvbnMgYmVmb3JlIHVzaW5nIHRoZW0gYXQgdGVtcGxhdGluZy5cblx0ICogQHBhcmFtIHZhbHVlSGVscFxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBwYXlsb2FkXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWxcblx0ICogQHJldHVybnMgVGhlIHZhbHVlIGxpc3QgaW5mb3Ncblx0ICovXG5cdGdldFZhbHVlTGlzdEluZm86IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIHwgdW5kZWZpbmVkLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxWYWx1ZUxpc3RJbmZvW10+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZhbHVlSGVscD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdFx0Y29uZGl0aW9uTW9kZWwgPSBwYXlsb2FkPy5jb25kaXRpb25Nb2RlbCxcblx0XHRcdHZhbHVlTGlzdEluZm9zOiBWYWx1ZUxpc3RJbmZvW10gPSBbXSxcblx0XHRcdHByb3BlcnR5UGF0aFBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0QnlRdWFsaWZpZXIgPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8ocHJvcGVydHlQYXRoLCB0cnVlLCBiaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXJzID0gVmFsdWVMaXN0SGVscGVyLnB1dERlZmF1bHRRdWFsaWZpZXJGaXJzdChPYmplY3Qua2V5cyh2YWx1ZUxpc3RCeVF1YWxpZmllcikpLFxuXHRcdFx0XHRwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVBhdGhQYXJ0cy5wb3AoKTtcblxuXHRcdFx0Y29uc3QgY29udGV4dFByZWZpeCA9XG5cdFx0XHRcdHBheWxvYWQ/LnVzZU11bHRpVmFsdWVGaWVsZCA9PT0gdHJ1ZSA/IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGV4dFByZWZpeChiaW5kaW5nQ29udGV4dCwgcHJvcGVydHlQYXRoUGFydHMpIDogXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgb2YgdmFsdWVIZWxwUXVhbGlmaWVycykge1xuXHRcdFx0XHQvLyBBZGQgY29sdW1uIGRlZmluaXRpb25zIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgYXMgU2VsZWN0aW9uIGZpZWxkcyBvbiB0aGUgQ29sbGVjdGlvblBhdGggZW50aXR5IHNldC5cblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgPSB2YWx1ZUxpc3RCeVF1YWxpZmllclt2YWx1ZUhlbHBRdWFsaWZpZXJdO1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWxWSCA9IGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2Fubm90YXRpb25WYWx1ZUxpc3RUeXBlLkNvbGxlY3Rpb25QYXRofWA7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX2dldEVudGl0eVR5cGUobWV0YU1vZGVsVkgsIGVudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gVmFsdWVMaXN0SGVscGVyLl9wcm9jZXNzUGFyYW1ldGVycyhcblx0XHRcdFx0XHRhbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0Y29uZGl0aW9uTW9kZWwsXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRleHRQcmVmaXgsXG5cdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFubm90YXRpb25WYWx1ZUxpc3RUeXBlLiRxdWFsaWZpZXIgPz8gdmFsdWVIZWxwUXVhbGlmaWVyLCAvLyBmb3IgVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzLCBnZXQgdGhlIHF1YWxpZmllciBmcm9tICRxdWFsaWZpZXJcblx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0LyogT25seSBjb25zaXN0ZW50IHZhbHVlIGhlbHAgZGVmaW5pdGlvbnMgc2hhbGwgYmUgcGFydCBvZiB0aGUgdmFsdWUgaGVscCAqL1xuXHRcdFx0XHRpZiAodmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLnB1c2godmFsdWVMaXN0SW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHRoaXMuX2xvZ0Vycm9yKHByb3BlcnR5UGF0aCwgZXJyKTtcblxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmRlc3Ryb3lWSENvbnRlbnQodmFsdWVIZWxwKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm9zO1xuXHR9LFxuXG5cdEFMTEZSQUdNRU5UUzogW10gYXMge1xuXHRcdHBhdGg6IHN0cmluZztcblx0XHRmcmFnbWVudE5hbWU6IHN0cmluZztcblx0XHRmcmFnbWVudDogdW5rbm93bjtcblx0fVtdLFxuXHRsb2dGcmFnbWVudDogdW5kZWZpbmVkIGFzIExvZ0ZyYWdtZW50TWV0aG9kIHwgdW5kZWZpbmVkLFxuXG5cdF9sb2dUZW1wbGF0ZWRGcmFnbWVudHM6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgZnJhZ21lbnROYW1lOiBzdHJpbmcsIGZyYWdtZW50RGVmaW5pdGlvbjogdW5rbm93bik6IHZvaWQge1xuXHRcdGNvbnN0IGxvZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRmcmFnbWVudE5hbWU6IGZyYWdtZW50TmFtZSxcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudERlZmluaXRpb25cblx0XHR9O1xuXHRcdGlmIChMb2cuZ2V0TGV2ZWwoKSA9PT0gTG9nLkxldmVsLkRFQlVHKSB7XG5cdFx0XHQvL0luIGRlYnVnIG1vZGUgd2UgbG9nIGFsbCBnZW5lcmF0ZWQgZnJhZ21lbnRzXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuQUxMRlJBR01FTlRTID0gVmFsdWVMaXN0SGVscGVyLkFMTEZSQUdNRU5UUyB8fCBbXTtcblx0XHRcdFZhbHVlTGlzdEhlbHBlci5BTExGUkFHTUVOVFMucHVzaChsb2dJbmZvKTtcblx0XHR9XG5cdFx0aWYgKFZhbHVlTGlzdEhlbHBlci5sb2dGcmFnbWVudCkge1xuXHRcdFx0Ly9PbmUgVG9vbCBTdWJzY3JpYmVyIGFsbG93ZWRcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIubG9nRnJhZ21lbnQ/Lihsb2dJbmZvKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fSxcblxuXHRfdGVtcGxhdGVGcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gPFQgZXh0ZW5kcyBUYWJsZSB8IE1kY0lubmVyVGFibGUgfCBNZGNGaWx0ZXJCYXIgfCBWYWx1ZUhlbHA+KFxuXHRcdGZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0c291cmNlTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscFxuXHQpOiBQcm9taXNlPFQ+IHtcblx0XHRjb25zdCBjb250YWluaW5nVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodmFsdWVIZWxwKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh2YWx1ZUhlbHApKTtcblxuXHRcdGNvbnN0IGxvY2FsVmFsdWVMaXN0SW5mbyA9IHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbyxcblx0XHRcdHZhbHVlTGlzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChsb2NhbFZhbHVlTGlzdEluZm8pLFxuXHRcdFx0dmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCA9IGxvY2FsVmFsdWVMaXN0SW5mby4kbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHR2aWV3RGF0YSA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRjb252ZXJ0ZXJUeXBlOiBcIkxpc3RSZXBvcnRcIixcblx0XHRcdFx0Y29sdW1uczogdmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzIHx8IG51bGxcblx0XHRcdH0pO1xuXG5cdFx0Y29uc3QgZnJhZ21lbnREZWZpbml0aW9uID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoZnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpLFxuXHRcdFx0eyBuYW1lOiBmcmFnbWVudE5hbWUgfSxcblx0XHRcdHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0OiB2YWx1ZUxpc3RNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IHZhbHVlTGlzdFNlcnZpY2VNZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke2xvY2FsVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vYCksXG5cdFx0XHRcdFx0c291cmNlOiBzb3VyY2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0dmFsdWVMaXN0OiB2YWx1ZUxpc3RNb2RlbCxcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCxcblx0XHRcdFx0XHRzb3VyY2U6IHNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogdmFsdWVMaXN0U2VydmljZU1ldGFNb2RlbCxcblx0XHRcdFx0XHR2aWV3RGF0YTogdmlld0RhdGFcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRWYWx1ZUxpc3RIZWxwZXIuX2xvZ1RlbXBsYXRlZEZyYWdtZW50cyhwcm9wZXJ0eVBhdGgsIGZyYWdtZW50TmFtZSwgZnJhZ21lbnREZWZpbml0aW9uKTtcblx0XHRjb25zdCB0ZW1wbGF0ZUNvbXBvbmVudCA9IGNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKT8uZ2V0T3duZXJDb21wb25lbnQoKTtcblx0XHRpZiAodGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdHJldHVybiB0ZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRkZWZpbml0aW9uOiBmcmFnbWVudERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29udHJvbGxlcjogY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdH0pKSBhcyBUO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGZyYWdtZW50RGVmaW5pdGlvbixcblx0XHRcdFx0Y29udHJvbGxlcjogY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHR9KSkgYXMgVDtcblx0XHR9XG5cdH0sXG5cblx0X2dldENvbnRlbnRJZDogZnVuY3Rpb24gKHZhbHVlSGVscElkOiBzdHJpbmcsIHZhbHVlSGVscFF1YWxpZmllcjogc3RyaW5nLCBpc1R5cGVhaGVhZDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29udGVudFR5cGUgPSBpc1R5cGVhaGVhZCA/IFwiUG9wb3ZlclwiIDogXCJEaWFsb2dcIjtcblxuXHRcdHJldHVybiBgJHt2YWx1ZUhlbHBJZH06OiR7Y29udGVudFR5cGV9OjpxdWFsaWZpZXI6OiR7dmFsdWVIZWxwUXVhbGlmaWVyfWA7XG5cdH0sXG5cblx0X2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZDogZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8pOiB2b2lkIHtcblx0XHRjb25zdCB2YWx1ZUhlbHBRdWFsaWZpZXIgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllcjtcblxuXHRcdGlmICghcGF5bG9hZC5xdWFsaWZpZXJzKSB7XG5cdFx0XHRwYXlsb2FkLnF1YWxpZmllcnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoIXBheWxvYWQucXVhbGlmaWVyc1t2YWx1ZUhlbHBRdWFsaWZpZXJdKSB7XG5cdFx0XHRjb25zdCB2aFByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRcdHZhbHVlTGlzdEluZm8uY29sdW1uRGVmcy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdFx0aWYgKCFjb2x1bW4ucGF0aC5pbmNsdWRlcyhcIipcIikpIHtcblx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIDEuLm4gdGhlIGNvbmRpdGlvbiBwYXRoIGluY2x1ZGVzIGEgKiBzbyB3ZSBoYXZlIHRvIHJlbW92ZSB0aGlzXG5cdFx0XHRcdFx0dmhQcm9wZXJ0aWVzLmFkZChjb2x1bW4ucGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNvbHVtbi50ZXh0UGF0aCkge1xuXHRcdFx0XHRcdHZoUHJvcGVydGllcy5hZGQoY29sdW1uLnRleHRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRwYXlsb2FkLnF1YWxpZmllcnNbdmFsdWVIZWxwUXVhbGlmaWVyXSA9IHtcblx0XHRcdFx0dmhLZXlzOiB2YWx1ZUxpc3RJbmZvLnZoS2V5cyxcblx0XHRcdFx0dmhQYXJhbWV0ZXJzOiB2YWx1ZUxpc3RJbmZvLnZoUGFyYW1ldGVycyxcblx0XHRcdFx0dmhQcm9wZXJ0aWVzOiBBcnJheS5mcm9tKHZoUHJvcGVydGllcylcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRWYWx1ZUhlbHBDb2x1bW5EaXNwbGF5Rm9ybWF0OiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHlBbm5vdGF0aW9uczogQW5ub3RhdGlvbnNGb3JQcm9wZXJ0eSxcblx0XHRpc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogYm9vbGVhblxuXHQpOiBEaXNwbGF5Rm9ybWF0IHtcblx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShwcm9wZXJ0eUFubm90YXRpb25zLCB1bmRlZmluZWQpLFxuXHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eUFubm90YXRpb25zICYmIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRdLFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRleHRBbm5vdGF0aW9uICYmIHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvblRleHRVSVRleHRBcnJhbmdlbWVudF07XG5cblx0XHRpZiAoaXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMpIHtcblx0XHRcdHJldHVybiB0ZXh0QW5ub3RhdGlvbiAmJiB0eXBlb2YgdGV4dEFubm90YXRpb24gIT09IFwic3RyaW5nXCIgJiYgdGV4dEFubm90YXRpb24uJFBhdGggPyBkaXNwbGF5TW9kZSA6IFwiVmFsdWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBleHBsaWNpdCBkZWZpbmVkIFRleHRBcnJhbmdlbWVudHMgaW4gYSBWYWx1ZSBIZWxwIHdpdGggRGlhbG9nIGFyZSBjb25zaWRlcmVkXG5cdFx0XHRyZXR1cm4gdGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA/IGRpc3BsYXlNb2RlIDogXCJWYWx1ZVwiO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0V2lkdGhJblJlbTogZnVuY3Rpb24gKGNvbnRyb2w6IENvbnRyb2wsIGlzVW5pdFZhbHVlSGVscDogYm9vbGVhbik6IG51bWJlciB7XG5cdFx0bGV0IHdpZHRoID0gY29udHJvbC4kKCkud2lkdGgoKTsgLy8gSlF1ZXJ5XG5cdFx0aWYgKGlzVW5pdFZhbHVlSGVscCAmJiB3aWR0aCkge1xuXHRcdFx0d2lkdGggPSAwLjMgKiB3aWR0aDtcblx0XHR9XG5cdFx0Y29uc3QgZmxvYXRXaWR0aCA9IHdpZHRoID8gcGFyc2VGbG9hdChTdHJpbmcoUmVtLmZyb21QeCh3aWR0aCkpKSA6IDA7XG5cblx0XHRyZXR1cm4gaXNOYU4oZmxvYXRXaWR0aCkgPyAwIDogZmxvYXRXaWR0aDtcblx0fSxcblxuXHRfZ2V0VGFibGVXaWR0aDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgbWluV2lkdGg6IG51bWJlciwgaXNNdWx0aVNlbGVjdDogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0bGV0IHdpZHRoOiBzdHJpbmc7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRhYmxlLmdldENvbHVtbnMoKSxcblx0XHRcdHZpc2libGVDb2x1bW5zID1cblx0XHRcdFx0KGNvbHVtbnMgJiZcblx0XHRcdFx0XHRjb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sdW1uICYmIGNvbHVtbi5nZXRWaXNpYmxlICYmIGNvbHVtbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdFx0fSkpIHx8XG5cdFx0XHRcdFtdLFxuXHRcdFx0Ly8gd2UgYWRkIDFlbSBmb3IgZXZlcnkgY29sdW1uIGFuZCAyLjVlbSBmb3IgYSBtdWx0aXNlbGVjdCBjaGVja2JveFxuXHRcdFx0aW5pdGlhbFN1bSA9IHZpc2libGVDb2x1bW5zLmxlbmd0aCArIChpc011bHRpU2VsZWN0ID8gMi41IDogMCksXG5cdFx0XHRzdW1XaWR0aCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBjb2x1bW4pIHtcblx0XHRcdFx0d2lkdGggPSBjb2x1bW4uZ2V0V2lkdGgoKTtcblx0XHRcdFx0aWYgKHdpZHRoICYmIHdpZHRoLmVuZHNXaXRoKFwicHhcIikpIHtcblx0XHRcdFx0XHR3aWR0aCA9IFN0cmluZyhSZW0uZnJvbVB4KHdpZHRoKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZmxvYXRXaWR0aCA9IHBhcnNlRmxvYXQod2lkdGgpO1xuXG5cdFx0XHRcdHJldHVybiBzdW0gKyAoaXNOYU4oZmxvYXRXaWR0aCkgPyA5IDogZmxvYXRXaWR0aCk7XG5cdFx0XHR9LCBpbml0aWFsU3VtKTtcblx0XHRyZXR1cm4gYCR7TWF0aC5tYXgoc3VtV2lkdGgsIG1pbldpZHRoKX1lbWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgSlNPTiBNb2RlbCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgZnJhZ21lbnQgd2hlcmUgaXQgaXMgdXNlZCBhcyBhIHNvdXJjZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBjb250ZW50IENvbnRlbnQgZm9yIHdoaWNoIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBzZXRcblx0ICogQHBhcmFtIHBheWxvYWQgVmFsdWUgaGVscCBwYXlsb2FkXG5cdCAqIEByZXR1cm5zIEpTT05Nb2RlbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2dldEpTT05Nb2RlbEZvckRpYWxvZzogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGVudDogTURDVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZFxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ZSA9IGZhbHNlLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IHRydWUsXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBpc0Ryb3BEb3duTGlzdGUsIGlzRGlhbG9nVGFibGUpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnQuZ2V0SWQoKSxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQsXG5cdFx0XHRiU3VnZ2VzdGlvbjogZmFsc2UsXG5cdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzOiBpc0Ryb3BEb3duTGlzdGVcblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSBkZWZpbmUgY29uZGl0aW9uIHZhbHVlIGhlbHAgZnJhZ21lbnQgaW4gdGhlIHZhbHVlIGhlbHAgZGlhbG9nIHdoZXJlIGl0IGlzIHVzZWQgYXMgYSBzb3VyY2Ugb2JqZWN0LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gY29udGVudCBDb250ZW50IGZvciB3aGljaCB0aGlzIGZyYWdtZW50IHdpbGwgYmUgc2V0XG5cdCAqIEBwYXJhbSBwYXlsb2FkIFZhbHVlIGhlbHAgcGF5bG9hZFxuXHQgKiBAcGFyYW0gY2FzZVNlbnNpdGl2ZVxuXHQgKiBAcmV0dXJucyBKU09OTW9kZWxcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9nZXRKU09OTW9kZWxGb3JDb25kaXRpb246IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdGNvbnRlbnQ6IE1EQ1RhYmxlLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhblxuXHQpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGlzRHJvcERvd25MaXN0ZSA9IGZhbHNlLFxuXHRcdFx0aXNEaWFsb2dUYWJsZSA9IGZhbHNlLFxuXHRcdFx0Y29sdW1uSW5mbyA9IFZhbHVlTGlzdEhlbHBlci5nZXRDb2x1bW5WaXNpYmlsaXR5SW5mbyh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgaXNEcm9wRG93bkxpc3RlLCBpc0RpYWxvZ1RhYmxlKTtcblxuXHRcdHJldHVybiBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBjb250ZW50LmdldElkKCksXG5cdFx0XHRncm91cElkOiBwYXlsb2FkLnJlcXVlc3RHcm91cElkIHx8IHVuZGVmaW5lZCxcblx0XHRcdGJTdWdnZXN0aW9uOiB0cnVlLFxuXHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlczogaXNEcm9wRG93bkxpc3RlLFxuXHRcdFx0ZGVzY3JpcHRpb25QYXRoOiB2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdGtleVBhdGg6IHZhbHVlTGlzdEluZm8ua2V5UGF0aCxcblx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBKU09OIE1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgZm9yIHRoZSB2YWx1ZSBoZWxwIHR5cGVhaGVhZCBmcmFnbWVudCB3aGVyZSBpdCBpcyB1c2VkIGFzIGEgc291cmNlIG9iamVjdC5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBmb3Igd2hpY2ggdGhpcyBmcmFnbWVudCB3aWxsIGJlIHNldFxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHBhcmFtIHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyBTcGVjaWZ5IGlzIGl0IGRyb3Bkb3dubGlzdCBvciBub3Rcblx0ICogQHJldHVybnMgSlNPTk1vZGVsXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkOiBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRjb250ZW50OiBNVGFibGUsXG5cdFx0cGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCxcblx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW5cblx0KTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBpc0RpYWxvZ1RhYmxlID0gZmFsc2UsXG5cdFx0XHRjb250ZW50SWQgPSBjb250ZW50LmdldElkKCksXG5cdFx0XHRjb2x1bW5JbmZvID0gVmFsdWVMaXN0SGVscGVyLmdldENvbHVtblZpc2liaWxpdHlJbmZvKFxuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8sXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzLFxuXHRcdFx0XHRpc0RpYWxvZ1RhYmxlXG5cdFx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IGNvbnRlbnRJZCxcblx0XHRcdGdyb3VwSWQ6IHBheWxvYWQucmVxdWVzdEdyb3VwSWQgfHwgdW5kZWZpbmVkLFxuXHRcdFx0YlN1Z2dlc3Rpb246IHRydWUsXG5cdFx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aCxcblx0XHRcdGNvbHVtbkluZm86IGNvbHVtbkluZm8sXG5cdFx0XHR2YWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXM6IHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlc1xuXHRcdH0pO1xuXHR9LFxuXG5cdF9jcmVhdGVWYWx1ZUhlbHBUeXBlYWhlYWQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZW50OiBNVGFibGUsXG5cdFx0dmFsdWVMaXN0SW5mbzogVmFsdWVMaXN0SW5mbyxcblx0XHRwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0dmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzID0gcHJvcGVydHlBbm5vdGF0aW9uc1tBbm5vdGF0aW9uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXSA/PyBmYWxzZSxcblx0XHRcdHNvdXJjZU1vZGVsID0gdGhpcy5fZ2V0SlNPTk1vZGVsRm9yVHlwZWFoZWFkKHZhbHVlTGlzdEluZm8sIHByb3BlcnR5UGF0aCwgY29udGVudCwgcGF5bG9hZCwgdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKTtcblxuXHRcdGNvbnRlbnQuc2V0S2V5UGF0aCh2YWx1ZUxpc3RJbmZvLmtleVBhdGgpO1xuXHRcdGNvbnRlbnQuc2V0RGVzY3JpcHRpb25QYXRoKHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoKTtcblx0XHRwYXlsb2FkLmlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID0gdmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzO1xuXHRcdHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA9IHBheWxvYWQuaXNQb3RlbnRpYWxseVNlbnNpdGl2ZSA/PyBwcm9wZXJ0eUFubm90YXRpb25zW0Fubm90YXRpb25zUGVyc29uYWxEYXRhUG90ZW50aWFsbHlTZW5zaXRpdmVdO1xuXHRcdHBheWxvYWQuaGlzdG9yeSA9IHtcblx0XHRcdGVuYWJsZWQ6IHRoaXMuY2hlY2tIaXN0b3J5RW5hYmxlZCh2YWx1ZUhlbHAsIHBheWxvYWQpXG5cdFx0fTtcblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9XG5cdFx0XHR2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofUBgKSB8fCB7fTtcblxuXHRcdGNvbnRlbnQuZGF0YShcInNlYXJjaFN1cHBvcnRlZFwiLCBWYWx1ZUxpc3RIZWxwZXIuZW50aXR5SXNTZWFyY2hhYmxlKHByb3BlcnR5QW5ub3RhdGlvbnMsIGNvbGxlY3Rpb25Bbm5vdGF0aW9ucykgPyB0cnVlIDogZmFsc2UpO1xuXG5cdFx0Y29uc3QgdGFibGUgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8VGFibGU+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RUYWJsZVwiLFxuXHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdHNvdXJjZU1vZGVsLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0dmFsdWVIZWxwXG5cdFx0KTtcblxuXHRcdHRhYmxlLnNldE1vZGVsKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwpO1xuXG5cdFx0TG9nLmluZm8oYFZhbHVlIExpc3QtIHN1Z2dlc3QgVGFibGUgWE1MIGNvbnRlbnQgY3JlYXRlZCBbJHtwcm9wZXJ0eVBhdGh9XWAsIHRhYmxlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpLCBcIk1EQyBUZW1wbGF0aW5nXCIpO1xuXG5cdFx0Y29udGVudC5zZXRUYWJsZSh0YWJsZSk7XG5cblx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cblx0XHRpZiAoXG5cdFx0XHRmaWVsZCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHQoZmllbGQuaXNBPEZpbHRlckZpZWxkPihcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikgfHxcblx0XHRcdFx0ZmllbGQuaXNBPEZpZWxkPihcInNhcC51aS5tZGMuRmllbGRcIikgfHxcblx0XHRcdFx0KGZpZWxkLmlzQTxGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpICYmIHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcykgfHxcblx0XHRcdFx0ZmllbGQuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSlcblx0XHQpIHtcblx0XHRcdC8vQ2FuIHRoZSBmaWx0ZXJmaWVsZCBiZSBzb21ldGhpbmcgZWxzZSB0aGF0IHdlIG5lZWQgdGhlIC5pc0EoKSBjaGVjaz9cblx0XHRcdGNvbnN0IHRhYmxlTW9kZSA9XG5cdFx0XHRcdHZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyAmJiAoZmllbGQgYXMgRmllbGRCYXNlKS5nZXRNYXhDb25kaXRpb25zKCkgIT09IDEgPyBcIk11bHRpU2VsZWN0XCIgOiBcIlNpbmdsZVNlbGVjdE1hc3RlclwiO1xuXHRcdFx0dGFibGUuc2V0TW9kZSh0YWJsZU1vZGUpO1xuXG5cdFx0XHR0YWJsZS5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFJlc2l6ZUhhbmRsZXIucmVnaXN0ZXIodGFibGUsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fc2V0VGFibGVXaWR0aCh0YWJsZSwgZmllbGQsIHRhYmxlTW9kZSwgcGF5bG9hZC5pc1VuaXRWYWx1ZUhlbHApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX3NldFRhYmxlV2lkdGgodGFibGUsIGZpZWxkLCB0YWJsZU1vZGUsIHBheWxvYWQuaXNVbml0VmFsdWVIZWxwKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldFRhYmxlV2lkdGgodGFibGU6IFRhYmxlLCBmaWVsZDogQ29udHJvbCwgdGFibGVNb2RlOiBzdHJpbmcsIGlzVW5pdFZhbHVlSGVscD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCByZWR1Y2VXaWR0aEZvclVuaXRWYWx1ZUhlbHAgPSBCb29sZWFuKGlzVW5pdFZhbHVlSGVscCk7XG5cdFx0Y29uc3QgdGFibGVXaWR0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VGFibGVXaWR0aChcblx0XHRcdHRhYmxlLFxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLl9nZXRXaWR0aEluUmVtKGZpZWxkLCByZWR1Y2VXaWR0aEZvclVuaXRWYWx1ZUhlbHApLFxuXHRcdFx0dGFibGVNb2RlID09PSBcIk11bHRpU2VsZWN0XCJcblx0XHQpO1xuXG5cdFx0dGFibGUuc2V0V2lkdGgodGFibGVXaWR0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBoaXN0b3J5IGlzIGVuYWJsZWQgZm9yIGEgY2VydGFpbiBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlSGVscCBUaGUgdmFsdWUgaGVscCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gcGF5bG9hZCBWYWx1ZSBoZWxwIHBheWxvYWRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaGlzdG9yeSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrSGlzdG9yeUVuYWJsZWQ6IGZ1bmN0aW9uICh2YWx1ZUhlbHA6IFZhbHVlSGVscCwgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHZhbHVlSGVscCkpO1xuXHRcdGNvbnN0IGhpc3RvcnlTZXR0aW5ncyA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5oaXN0b3J5U2V0dGluZ3M7XG5cdFx0cmV0dXJuIGhpc3RvcnlTZXR0aW5ncz8uZmllbGRzPy5bcGF5bG9hZC5wcm9wZXJ0eVBhdGhdPy5oaXN0b3J5RW5hYmxlZCA/PyB0cnVlO1xuXHR9LFxuXG5cdGlzVmFsdWVMaXN0U2VhcmNoYWJsZShwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWVMaXN0OiBWYWx1ZUxpc3RJbmZvKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdmFsdWVMaXN0TWV0YW1vZGVsID0gdmFsdWVMaXN0LnZhbHVlTGlzdEluZm8uJG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9IHZhbHVlTGlzdE1ldGFtb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSA/PyB7fTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPSB2YWx1ZUxpc3RNZXRhbW9kZWwuZ2V0T2JqZWN0KGAvJHt2YWx1ZUxpc3QudmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgPz8ge307XG5cdFx0cmV0dXJuIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKTtcblx0fSxcblxuXHRfY3JlYXRlVmFsdWVIZWxwRGlhbG9nOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250ZW50OiBNRENUYWJsZSxcblx0XHR2YWx1ZUxpc3RJbmZvOiBWYWx1ZUxpc3RJbmZvLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y29uZGl0aW9uQ29udGVudD86IENvbmRpdGlvbnNcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9ICh2YWx1ZUhlbHAuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKSBhcyBBbm5vdGF0aW9uc0ZvclByb3BlcnR5LFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2cgPSB0aGlzLl9nZXRKU09OTW9kZWxGb3JEaWFsb2codmFsdWVMaXN0SW5mbywgcHJvcGVydHlQYXRoLCBjb250ZW50LCBwYXlsb2FkKTtcblxuXHRcdGNvbnRlbnQuc2V0S2V5UGF0aCh2YWx1ZUxpc3RJbmZvLmtleVBhdGgpO1xuXHRcdGNvbnRlbnQuc2V0RGVzY3JpcHRpb25QYXRoKHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQW5ub3RhdGlvbnMgPVxuXHRcdFx0dmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1AYCkgfHwge307XG5cdFx0Y29udGVudC5kYXRhKFwic2VhcmNoU3VwcG9ydGVkXCIsIFZhbHVlTGlzdEhlbHBlci5lbnRpdHlJc1NlYXJjaGFibGUocHJvcGVydHlBbm5vdGF0aW9ucywgY29sbGVjdGlvbkFubm90YXRpb25zKSA/IHRydWUgOiBmYWxzZSk7XG5cdFx0cGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID0gcGF5bG9hZC5pc1BvdGVudGlhbGx5U2Vuc2l0aXZlID8/IHByb3BlcnR5QW5ub3RhdGlvbnNbQW5ub3RhdGlvbnNQZXJzb25hbERhdGFQb3RlbnRpYWxseVNlbnNpdGl2ZV07XG5cblx0XHRpZiAoY29uZGl0aW9uQ29udGVudCkge1xuXHRcdFx0Y29uc3QgZmlyc3RUeXBlQWhlYWRDb250ZW50ID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpLmdldENvbnRlbnQoKVswXSBhcyBNVGFibGUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmUgPSBmaXJzdFR5cGVBaGVhZENvbnRlbnQuZ2V0Q2FzZVNlbnNpdGl2ZSgpO1xuXG5cdFx0XHRjb25zdCBzb3VyY2VNb2RlbENvbmRpdGlvbiA9IHRoaXMuX2dldEpTT05Nb2RlbEZvckNvbmRpdGlvbih2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eVBhdGgsIGNvbnRlbnQsIHBheWxvYWQsIGNhc2VTZW5zaXRpdmUpO1xuXG5cdFx0XHRjb25zdCBjb25kaXRpb24gPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8VmFsdWVIZWxwPihcblx0XHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3RGb3JDb25kaXRpb25cIixcblx0XHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdFx0c291cmNlTW9kZWxDb25kaXRpb24sXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0dmFsdWVIZWxwXG5cdFx0XHQpO1xuXHRcdFx0LyogQXMgdGhlIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgdG8gYW4gYWdncmVnYXRpb24sIGJ1dCBqdXN0IGFzc29jaWF0ZWQsIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIG1vZGVsICovXG5cdFx0XHRjb25kaXRpb24uc2V0TW9kZWwobWV0YU1vZGVsKTtcblxuXHRcdFx0LyogQWRkIGFzIGRlcGVuZGVudCwgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGJlIHByb3Blcmx5IGRlc3Ryb3llZCBkdXJpbmcgbGlmZWN5Y2xlIGhhbmRsaW5nICovXG5cdFx0XHRjb25kaXRpb25Db250ZW50LmFkZERlcGVuZGVudChjb25kaXRpb24pO1xuXHRcdFx0Y29uZGl0aW9uQ29udGVudC5zZXRWYWx1ZUhlbHAoY29uZGl0aW9uLmdldElkKCkpO1xuXG5cdFx0XHRjb25zdCBjb25kaXRpb25UYWJsZSA9IGNvbmRpdGlvblxuXHRcdFx0XHQuZ2V0VHlwZWFoZWFkKClcblx0XHRcdFx0LmdldENvbnRlbnQoKVswXSAvLyB0aGVyZSBpcyBvbmx5IG9uZSB0YWJsZVxuXHRcdFx0XHQuZ2V0VGFibGUoKTtcblxuXHRcdFx0Y29uc3QgdGFibGVXaWR0aCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0VGFibGVXaWR0aChjb25kaXRpb25UYWJsZSwgMCwgZmFsc2UpO1xuXHRcdFx0Y29uZGl0aW9uVGFibGUuc2V0V2lkdGgodGFibGVXaWR0aCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFibGVQcm9taXNlID0gVmFsdWVMaXN0SGVscGVyLl90ZW1wbGF0ZUZyYWdtZW50PE1kY0lubmVyVGFibGU+KFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmludGVybmFsLnZhbHVlaGVscC5WYWx1ZUxpc3REaWFsb2dUYWJsZVwiLFxuXHRcdFx0dmFsdWVMaXN0SW5mbyxcblx0XHRcdHNvdXJjZU1vZGVsRGlhbG9nLFxuXHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0dmFsdWVIZWxwXG5cdFx0KTtcblxuXHRcdGNvbnN0IGZpbHRlckJhclByb21pc2UgPSBWYWx1ZUxpc3RIZWxwZXIuX3RlbXBsYXRlRnJhZ21lbnQ8RmlsdGVyQmFyPihcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC52YWx1ZWhlbHAuVmFsdWVMaXN0RmlsdGVyQmFyXCIsXG5cdFx0XHR2YWx1ZUxpc3RJbmZvLFxuXHRcdFx0c291cmNlTW9kZWxEaWFsb2csXG5cdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHR2YWx1ZUhlbHBcblx0XHQpO1xuXG5cdFx0Y29uc3QgW3RhYmxlLCBmaWx0ZXJCYXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RhYmxlUHJvbWlzZSwgZmlsdGVyQmFyUHJvbWlzZV0pO1xuXG5cdFx0dGFibGUuc2V0TW9kZWwodmFsdWVMaXN0SW5mby52YWx1ZUxpc3RJbmZvLiRtb2RlbCk7XG5cdFx0ZmlsdGVyQmFyLnNldE1vZGVsKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby4kbW9kZWwpO1xuXG5cdFx0Y29udGVudC5zZXRGaWx0ZXJCYXIoZmlsdGVyQmFyKTtcblx0XHRjb250ZW50LnNldFRhYmxlKHRhYmxlKTtcblxuXHRcdHRhYmxlLnNldEZpbHRlcihmaWx0ZXJCYXIuZ2V0SWQoKSk7XG5cdFx0dGFibGUuaW5pdGlhbGl6ZWQoKTtcblxuXHRcdHRhYmxlLnNldFdpZHRoKFwiMTAwJVwiKTtcblxuXHRcdFZhbHVlTGlzdEhlbHBlci5zZXRDb3B5UHJvdmlkZXJWaXNpYmlsaXR5KHRhYmxlLCB2YWx1ZUhlbHApO1xuXG5cdFx0Ly9UaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcnJvdW5kIC0gcHJvdmlkZWQgYnkgTURDIChzZWUgRklPUklURUNIUDEtMjQwMDIpXG5cdFx0Y29uc3QgbWRjVGFibGUgPSB0YWJsZSBhcyB1bmtub3duIGFzIHsgX3NldFNob3dQMTNuQnV0dG9uOiBGdW5jdGlvbiB9O1xuXHRcdG1kY1RhYmxlLl9zZXRTaG93UDEzbkJ1dHRvbihmYWxzZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJsZSBhdHRyaWJ1dGUgb2YgdGhlIENvcHlQcm92aWRlciBiYXNlZCBvbiB0aGUgTWF4Q29uZGl0aW9uIG9mIHRoZSBmaWVsZC5cblx0ICogSW4gY2FzZSBvZiBhIHNpbmdsZSBzZWxlY3Rpb24sIHRoZSBjb3B5IGJ1dHRvbiBpcyBoaWRkZW4uIEluIGFub3RoZXIgY2FzZSwgaXQgaXMgdmlzaWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBNREMgdGFibGUgb2YgdGhlIFZhbHVlIEhlbHAgZGlhbG9nXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgVGhlIFZhbHVlIEhlbHAgb2JqZWN0XG5cdCAqL1xuXHRzZXRDb3B5UHJvdmlkZXJWaXNpYmlsaXR5OiBmdW5jdGlvbiAodGFibGU6IE1kY0lubmVyVGFibGUsIHZhbHVlSGVscDogVmFsdWVIZWxwKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmlzQTxGaWVsZEJhc2U+KFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZEJhc2VcIikpIHtcblx0XHRcdHRhYmxlLmdldENvcHlQcm92aWRlcigpPy5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Q29udGVudEJ5SWQ6IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTVRhYmxlIHwgTURDVGFibGU+KGNvbnRlbnRMaXN0OiBDb250ZW50W10sIGNvbnRlbnRJZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGNvbnRlbnRMaXN0LmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHJldHVybiBpdGVtLmdldElkKCkgPT09IGNvbnRlbnRJZDtcblx0XHR9KSBhcyBUIHwgdW5kZWZpbmVkO1xuXHR9LFxuXG5cdF9jcmVhdGVQb3BvdmVyQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnRJZDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuLCB1c2VBc1ZhbHVlSGVscDogYm9vbGVhbik6IE1UYWJsZSB7XG5cdFx0cmV0dXJuIG5ldyBNVGFibGUoe1xuXHRcdFx0aWQ6IGNvbnRlbnRJZCxcblx0XHRcdGdyb3VwOiBcImdyb3VwMVwiLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZSxcblx0XHRcdHVzZUFzVmFsdWVIZWxwOiB1c2VBc1ZhbHVlSGVscFxuXHRcdH0gYXMgJE1UYWJsZVNldHRpbmdzKTtcblx0fSxcblxuXHRfY3JlYXRlRGlhbG9nQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnRJZDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuLCBmb3JjZUJpbmQ6IGJvb2xlYW4pOiBNRENUYWJsZSB7XG5cdFx0cmV0dXJuIG5ldyBNRENUYWJsZSh7XG5cdFx0XHRpZDogY29udGVudElkLFxuXHRcdFx0Z3JvdXA6IFwiZ3JvdXAxXCIsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLFxuXHRcdFx0Zm9yY2VCaW5kOiBmb3JjZUJpbmRcblx0XHR9IGFzICRNRENUYWJsZVNldHRpbmdzKTtcblx0fSxcblxuXHRfc2hvd0NvbmRpdGlvbnNDb250ZW50OiBmdW5jdGlvbiAoY29udGVudExpc3Q6IENvbnRlbnRbXSwgY29udGFpbmVyOiBDb250YWluZXIpOiBDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29uZGl0aW9uc0NvbnRlbnQgPVxuXHRcdFx0Y29udGVudExpc3QubGVuZ3RoICYmIGNvbnRlbnRMaXN0W2NvbnRlbnRMaXN0Lmxlbmd0aCAtIDFdLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnQuQ29uZGl0aW9uc1wiXG5cdFx0XHRcdD8gKGNvbnRlbnRMaXN0W2NvbnRlbnRMaXN0Lmxlbmd0aCAtIDFdIGFzIENvbmRpdGlvbnMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGNvbmRpdGlvbnNDb250ZW50KSB7XG5cdFx0XHRjb25kaXRpb25zQ29udGVudC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25kaXRpb25zQ29udGVudCA9IG5ldyBDb25kaXRpb25zKCk7XG5cdFx0XHRjb250YWluZXIuYWRkQ29udGVudChjb25kaXRpb25zQ29udGVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbmRpdGlvbnNDb250ZW50O1xuXHR9LFxuXG5cdF9hbGlnbk9yQ3JlYXRlQ29udGVudDogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sXG5cdFx0Y29udGVudElkOiBzdHJpbmcsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcblx0XHRzaG93Q29uZGl0aW9uUGFuZWw6IGJvb2xlYW4sXG5cdFx0Y29udGFpbmVyOiBDb250YWluZXJcblx0KTogTURDVGFibGUge1xuXHRcdGNvbnN0IGNvbnRlbnRMaXN0ID0gY29udGFpbmVyLmdldENvbnRlbnQoKTtcblx0XHRsZXQgY29udGVudCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudEJ5SWQ8TURDVGFibGU+KGNvbnRlbnRMaXN0LCBjb250ZW50SWQpO1xuXG5cdFx0aWYgKCFjb250ZW50KSB7XG5cdFx0XHRjb25zdCBmb3JjZUJpbmQgPSB2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uRmV0Y2hWYWx1ZXMgPT09IDIgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRcdGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZURpYWxvZ0NvbnRlbnQoY29udGVudElkLCBjYXNlU2Vuc2l0aXZlLCBmb3JjZUJpbmQpO1xuXG5cdFx0XHRpZiAoIXNob3dDb25kaXRpb25QYW5lbCkge1xuXHRcdFx0XHRjb250YWluZXIuYWRkQ29udGVudChjb250ZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRhaW5lci5pbnNlcnRDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRMaXN0Lmxlbmd0aCAtIDEpOyAvLyBpbnNlcnQgY29udGVudCBiZWZvcmUgY29uZGl0aW9ucyBjb250ZW50XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH0sXG5cblx0X3ByZXBhcmVWYWx1ZUhlbHBUeXBlQWhlYWQ6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250YWluZXI6IENvbnRhaW5lcixcblx0XHR2YWx1ZUxpc3RJbmZvczogVmFsdWVMaXN0SW5mb1tdLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcblx0XHRmaXJzdFR5cGVBaGVhZENvbnRlbnQ6IE1UYWJsZVxuXHQpOiB7IHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm87IGNvbnRlbnQ6IE1UYWJsZSB9IHtcblx0XHRjb25zdCBjb250ZW50TGlzdCA9IGNvbnRhaW5lci5nZXRDb250ZW50KCk7XG5cdFx0bGV0IHF1YWxpZmllckZvclR5cGVhaGVhZCA9IHZhbHVlSGVscC5kYXRhKFwidmFsdWVsaXN0Rm9yVmFsaWRhdGlvblwiKSB8fCBcIlwiOyAvLyBjYW4gYWxzbyBiZSBudWxsXG5cdFx0aWYgKHF1YWxpZmllckZvclR5cGVhaGVhZCA9PT0gXCIgXCIpIHtcblx0XHRcdHF1YWxpZmllckZvclR5cGVhaGVhZCA9IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBxdWFsaWZpZXJGb3JUeXBlYWhlYWQgLy8gZmFsbGJhY2sgaWYgcXVhbGlmaWVyIGZvciBUeXBlYWhlYWQgbm90IGV4aXN0c1xuXHRcdFx0PyB2YWx1ZUxpc3RJbmZvcy5maWx0ZXIoZnVuY3Rpb24gKHN1YlZhbHVlTGlzdEluZm8pIHtcblx0XHRcdFx0XHRyZXR1cm4gc3ViVmFsdWVMaXN0SW5mby52YWx1ZUhlbHBRdWFsaWZpZXIgPT09IHF1YWxpZmllckZvclR5cGVhaGVhZDtcblx0XHRcdCAgfSlbMF0gfHwgdmFsdWVMaXN0SW5mb3NbMF1cblx0XHRcdDogdmFsdWVMaXN0SW5mb3NbMF07XG5cblx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZChwYXlsb2FkLCB2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdGNvbnN0IGNvbnRlbnRJZCA9IFZhbHVlTGlzdEhlbHBlci5fZ2V0Q29udGVudElkKHZhbHVlSGVscC5nZXRJZCgpLCB2YWx1ZUxpc3RJbmZvLnZhbHVlSGVscFF1YWxpZmllciwgdHJ1ZSk7XG5cdFx0bGV0IGNvbnRlbnQgPSBWYWx1ZUxpc3RIZWxwZXIuX2dldENvbnRlbnRCeUlkPE1UYWJsZT4oY29udGVudExpc3QsIGNvbnRlbnRJZCk7XG5cblx0XHRpZiAoIWNvbnRlbnQpIHtcblx0XHRcdGNvbnN0IHVzZUFzVmFsdWVIZWxwID0gZmlyc3RUeXBlQWhlYWRDb250ZW50LmdldFVzZUFzVmFsdWVIZWxwKCk7XG5cdFx0XHRjb250ZW50ID0gVmFsdWVMaXN0SGVscGVyLl9jcmVhdGVQb3BvdmVyQ29udGVudChjb250ZW50SWQsIGNhc2VTZW5zaXRpdmUsIHVzZUFzVmFsdWVIZWxwKTtcblxuXHRcdFx0Y29udGFpbmVyLmluc2VydENvbnRlbnQoY29udGVudCwgMCk7IC8vIGluc2VydCBjb250ZW50IGFzIGZpcnN0IGNvbnRlbnRcblx0XHR9IGVsc2UgaWYgKGNvbnRlbnRJZCAhPT0gY29udGVudExpc3RbMF0uZ2V0SWQoKSkge1xuXHRcdFx0Ly8gY29udGVudCBhbHJlYWR5IGF2YWlsYWJsZSBidXQgbm90IGFzIGZpcnN0IGNvbnRlbnQ/XG5cdFx0XHRjb250YWluZXIucmVtb3ZlQ29udGVudChjb250ZW50KTtcblx0XHRcdGNvbnRhaW5lci5pbnNlcnRDb250ZW50KGNvbnRlbnQsIDApOyAvLyBtb3ZlIGNvbnRlbnQgdG8gZmlyc3QgcG9zaXRpb25cblx0XHR9XG5cblx0XHRyZXR1cm4geyB2YWx1ZUxpc3RJbmZvLCBjb250ZW50IH07XG5cdH0sXG5cblx0X3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2c6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRjb250YWluZXI6IENvbnRhaW5lcixcblx0XHR2YWx1ZUxpc3RJbmZvczogVmFsdWVMaXN0SW5mb1tdLFxuXHRcdHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0c2VsZWN0ZWRDb250ZW50SWQ6IHN0cmluZyxcblx0XHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuXG5cdCk6IHtcblx0XHRzZWxlY3RlZEluZm86IFZhbHVlTGlzdEluZm87XG5cdFx0c2VsZWN0ZWRDb250ZW50OiBNRENUYWJsZTtcblx0XHRjb25kaXRpb25Db250ZW50PzogQ29uZGl0aW9ucztcblx0fSB7XG5cdFx0Y29uc3Qgc2hvd0NvbmRpdGlvblBhbmVsID0gdmFsdWVIZWxwLmRhdGEoXCJzaG93Q29uZGl0aW9uUGFuZWxcIikgJiYgdmFsdWVIZWxwLmRhdGEoXCJzaG93Q29uZGl0aW9uUGFuZWxcIikgIT09IFwiZmFsc2VcIjtcblx0XHRjb25zdCBjb250ZW50TGlzdCA9IGNvbnRhaW5lci5nZXRDb250ZW50KCk7XG5cblx0XHQvLyBzZXQgYWxsIGNvbnRlbnRzIHRvIGludmlzaWJsZVxuXHRcdGZvciAoY29uc3QgY29udGVudExpc3RJdGVtIG9mIGNvbnRlbnRMaXN0KSB7XG5cdFx0XHRjb250ZW50TGlzdEl0ZW0uc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29uZGl0aW9uQ29udGVudCA9IHNob3dDb25kaXRpb25QYW5lbCA/IHRoaXMuX3Nob3dDb25kaXRpb25zQ29udGVudChjb250ZW50TGlzdCwgY29udGFpbmVyKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBmaWVsZCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCk7XG5cblx0XHQvLyBGb3IgYSBGaWx0ZXJGaWVsZCB3ZSBjaGVjayB0aGUgb3BlcmF0b3JzIGlmIHRoZXkgYXJlIGRlZmF1bHQgKGVtcHR5IGxpc3Q9YWxsKSBvciBpbmNsdWRlIEVRXG5cdFx0Y29uc3QgaGFzT3BlcmF0b3JFUSA9XG5cdFx0XHRmaWVsZCAmJiBmaWVsZC5pc0E8RmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKVxuXHRcdFx0XHQ/IGZpZWxkLmdldE9wZXJhdG9ycygpLmxlbmd0aCA9PT0gMCB8fCBmaWVsZC5nZXRPcGVyYXRvcnMoKS5pbmNsdWRlcyhcIkVRXCIpXG5cdFx0XHRcdDogdHJ1ZTtcblxuXHRcdGxldCBzZWxlY3RlZEluZm86IFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQsIHNlbGVjdGVkQ29udGVudDogTURDVGFibGUgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBDcmVhdGUgb3IgcmV1c2UgY29udGVudHMgZm9yIHRoZSBjdXJyZW50IGNvbnRleHRcblx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdEluZm8gb2YgdmFsdWVMaXN0SW5mb3MpIHtcblx0XHRcdGNvbnN0IHZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXG5cdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2FkZEluT3V0UGFyYW1ldGVyc1RvUGF5bG9hZChwYXlsb2FkLCB2YWx1ZUxpc3RJbmZvKTtcblxuXHRcdFx0Y29uc3QgY29udGVudElkID0gVmFsdWVMaXN0SGVscGVyLl9nZXRDb250ZW50SWQodmFsdWVIZWxwLmdldElkKCksIHZhbHVlSGVscFF1YWxpZmllciwgZmFsc2UpO1xuXG5cdFx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5fYWxpZ25PckNyZWF0ZUNvbnRlbnQodmFsdWVMaXN0SW5mbywgY29udGVudElkLCBjYXNlU2Vuc2l0aXZlLCBzaG93Q29uZGl0aW9uUGFuZWwsIGNvbnRhaW5lcik7XG5cdFx0XHRjb250ZW50LnNldFZpc2libGUoaGFzT3BlcmF0b3JFUSk7IC8vIERvIG5vdCBzaG93IGEgdmFsdWUgaGVscCB0YWJsZSBmb3IgYSBmaWx0ZXIgZmllbGQgd2l0aG91dCBvcGVyYXRvciAnRVEnXG5cblx0XHRcdGlmICh2YWx1ZUxpc3RJbmZvLnZhbHVlTGlzdEluZm8uTGFiZWwgJiYgZmllbGQpIHtcblx0XHRcdFx0Y29uc3QgdGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKHZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5MYWJlbCwgZmllbGQpO1xuXHRcdFx0XHRjb250ZW50LnNldFRpdGxlKHRpdGxlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxlY3RlZENvbnRlbnQgfHwgKHNlbGVjdGVkQ29udGVudElkICYmIHNlbGVjdGVkQ29udGVudElkID09PSBjb250ZW50SWQpKSB7XG5cdFx0XHRcdHNlbGVjdGVkQ29udGVudCA9IGNvbnRlbnQ7XG5cdFx0XHRcdHNlbGVjdGVkSW5mbyA9IHZhbHVlTGlzdEluZm87XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxlY3RlZEluZm8gfHwgIXNlbGVjdGVkQ29udGVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2VsZWN0ZWRJbmZvIG9yIHNlbGVjdGVkQ29udGVudCB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgc2VsZWN0ZWRJbmZvLCBzZWxlY3RlZENvbnRlbnQsIGNvbmRpdGlvbkNvbnRlbnQgfTtcblx0fSxcblxuXHRfYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZDogZnVuY3Rpb24gKHBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsIHZhbHVlTGlzdEluZm86IFZhbHVlTGlzdEluZm8sIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHRpZiAocGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGggIT09IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoIHx8IHBheWxvYWQuZXh0ZXJuYWxJZFBhdGgpIHtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCA9IChcblx0XHRcdFx0Y29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KHBheWxvYWQucHJvcGVydHlQYXRoKS50YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdFx0XHQ/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0KT8ucGF0aDtcblxuXHRcdFx0LyogRW5yaWNoIHBheWxvYWQgd2l0aCBUZXh0IFByb3BlcnR5IEluZm9zICovXG5cdFx0XHRwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEluZm8uZGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBLZXlQYXRoID0gdmFsdWVMaXN0SW5mby5rZXlQYXRoO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdHBheWxvYWQubWF4TGVuZ3RoID0gcGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGhcblx0XHRcdFx0XHQ/IGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRcdFx0YC8ke3ZhbHVlTGlzdEluZm8udmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aH1gXG5cdFx0XHRcdFx0ICApPy50YXJnZXQ/Lm1heExlbmd0aFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRwYXlsb2FkLnByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHR9XG5cblx0XHRcdC8qIEVYVEVSTkFMSUQgKi9cblx0XHRcdC8vIEFkZCBkZXNjcmlwdGlvblBhdGggdG8gdGhlIHBheWxvYWQgYW5kIHZhbHVlTGlzdEluZm9cblx0XHRcdGNvbnN0IGV4dGVybmFsSWRQYXRoID0gcGF5bG9hZC5leHRlcm5hbElkUGF0aDtcblx0XHRcdGlmIChleHRlcm5hbElkUGF0aCAmJiAhcGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGgpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwYXlsb2FkLnByb3BlcnR5UGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkRnVsbFBhdGggPSBwYXlsb2FkLnByb3BlcnR5UGF0aC5yZXBsYWNlKHByb3BlcnR5TmFtZSwgZXh0ZXJuYWxJZFBhdGgpO1xuXHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSAoXG5cdFx0XHRcdFx0Y29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8UHJvcGVydHk+KGV4dGVybmFsSWRGdWxsUGF0aCkudGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHRcdFx0XHQ/LlRleHQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0XHQpPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUxpc3RJbmZvLmRlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRcdFx0cGF5bG9hZC52YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGggPSBkZXNjcmlwdGlvblBhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHNob3dWYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLCBjb250YWluZXI6IENvbnRhaW5lciwgc2VsZWN0ZWRDb250ZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHZhbHVlSGVscCA9IGNvbnRhaW5lci5nZXRQYXJlbnQoKSBhcyBWYWx1ZUhlbHAsXG5cdFx0XHRpc1R5cGVhaGVhZCA9IGNvbnRhaW5lci5pc1R5cGVhaGVhZCgpLFxuXHRcdFx0cHJvcGVydHlQYXRoID0gcGF5bG9hZC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHQvKiBJbiBjYXNlIG9mIFJBUCB0aGUgdmFsdWVIZWxwIG1vZGVsIGlzIGRpZmZlcmVudCB0byB0aGUgY29udHJvbCBtb2RlbCAqL1xuXHRcdFx0Y29udHJvbCA9IHZhbHVlSGVscC5nZXRDb250cm9sKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBjb250cm9sXG5cdFx0XHRcdD8gKHZhbHVlSGVscC5nZXRDb250cm9sKCk/LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0OiAodmFsdWVIZWxwLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHR2aFVJTW9kZWwgPVxuXHRcdFx0XHR2YWx1ZUhlbHAuZ2V0TW9kZWwoXCJfVkhVSVwiKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0PyAodmFsdWVIZWxwLmdldE1vZGVsKFwiX1ZIVUlcIikgYXMgSlNPTk1vZGVsKVxuXHRcdFx0XHRcdDogVmFsdWVMaXN0SGVscGVyLmNyZWF0ZVZIVUlNb2RlbCh2YWx1ZUhlbHAsIHByb3BlcnR5UGF0aCwgbWV0YU1vZGVsKTtcblx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0cGF5bG9hZC5leHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3BheWxvYWQucHJvcGVydHlQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRXh0ZXJuYWxJRGApPy4kUGF0aDtcblxuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc1N1Z2dlc3Rpb25cIiwgaXNUeXBlYWhlYWQpO1xuXHRcdHZoVUlNb2RlbC5zZXRQcm9wZXJ0eShcIi9taW5TY3JlZW5XaWR0aFwiLCAhaXNUeXBlYWhlYWQgPyBcIjQxOHB4XCIgOiB1bmRlZmluZWQpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm9zID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odmFsdWVIZWxwLCBwcm9wZXJ0eVBhdGgsIHBheWxvYWQsIG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBmaXJzdFR5cGVBaGVhZENvbnRlbnQgPSB2YWx1ZUhlbHAuZ2V0VHlwZWFoZWFkKCkuZ2V0Q29udGVudCgpWzBdIGFzIE1UYWJsZSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSA9IGZpcnN0VHlwZUFoZWFkQ29udGVudC5nZXRDYXNlU2Vuc2l0aXZlKCk7IC8vIHRha2UgY2FzZVNlbnNpdGl2ZSBmcm9tIGZpcnN0IFR5cGVhaGVhZCBjb250ZW50XG5cblx0XHRcdGlmIChpc1R5cGVhaGVhZCkge1xuXHRcdFx0XHRjb25zdCB7IHZhbHVlTGlzdEluZm8sIGNvbnRlbnQgfSA9IFZhbHVlTGlzdEhlbHBlci5fcHJlcGFyZVZhbHVlSGVscFR5cGVBaGVhZChcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0Y29udGFpbmVyLFxuXHRcdFx0XHRcdHZhbHVlTGlzdEluZm9zLFxuXHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZSxcblx0XHRcdFx0XHRmaXJzdFR5cGVBaGVhZENvbnRlbnRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllciA9IHZhbHVlTGlzdEluZm8udmFsdWVIZWxwUXVhbGlmaWVyO1xuXHRcdFx0XHR2aFVJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XCIvc2VsZWN0ZWRQcm9wZXJ0aWVzXCIsXG5cdFx0XHRcdFx0dmFsdWVMaXN0SW5mby5jb2x1bW5EZWZzLm1hcCgoY29sKSA9PiBjb2wucGF0aClcblx0XHRcdFx0KTtcblx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLl9hZGREZXNjcmlwdGlvbkluZm9zVG9QYXlsb2FkKHBheWxvYWQsIHZhbHVlTGlzdEluZm8sIG1ldGFNb2RlbCk7XG5cblx0XHRcdFx0aWYgKGNvbnRlbnQuZ2V0VGFibGUoKSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRlbnQuZ2V0VGFibGUoKSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGF3YWl0IFZhbHVlTGlzdEhlbHBlci5fY3JlYXRlVmFsdWVIZWxwVHlwZWFoZWFkKHByb3BlcnR5UGF0aCwgdmFsdWVIZWxwLCBjb250ZW50LCB2YWx1ZUxpc3RJbmZvLCBwYXlsb2FkLCBtZXRhTW9kZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB7IHNlbGVjdGVkSW5mbywgc2VsZWN0ZWRDb250ZW50LCBjb25kaXRpb25Db250ZW50IH0gPSBWYWx1ZUxpc3RIZWxwZXIuX3ByZXBhcmVWYWx1ZUhlbHBEaWFsb2coXG5cdFx0XHRcdFx0dmFsdWVIZWxwLFxuXHRcdFx0XHRcdGNvbnRhaW5lcixcblx0XHRcdFx0XHR2YWx1ZUxpc3RJbmZvcyxcblx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGVudElkLFxuXHRcdFx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRwYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllciA9IHNlbGVjdGVkSW5mby52YWx1ZUhlbHBRdWFsaWZpZXI7XG5cdFx0XHRcdFZhbHVlTGlzdEhlbHBlci5fYWRkRGVzY3JpcHRpb25JbmZvc1RvUGF5bG9hZChwYXlsb2FkLCBzZWxlY3RlZEluZm8sIG1ldGFNb2RlbCk7XG5cblx0XHRcdFx0LyogRm9yIGNvbnRleHQgZGVwZW50ZW50IHZhbHVlIGhlbHBzIHRoZSB2YWx1ZSBsaXN0IGxhYmVsIGlzIHVzZWQgZm9yIHRoZSBkaWFsb2cgdGl0bGUgKi9cblx0XHRcdFx0Y29uc3QgZmllbGQgPSB2YWx1ZUhlbHAuZ2V0Q29udHJvbCgpO1xuXHRcdFx0XHRpZiAoZmllbGQpIHtcblx0XHRcdFx0XHRjb25zdCB0aXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoXG5cdFx0XHRcdFx0XHRWYWx1ZUxpc3RIZWxwZXIuX2dldERpYWxvZ1RpdGxlKHZhbHVlSGVscCwgc2VsZWN0ZWRJbmZvLnZhbHVlTGlzdEluZm8/LkxhYmVsKSxcblx0XHRcdFx0XHRcdGZpZWxkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb250YWluZXIuc2V0VGl0bGUodGl0bGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGVudC5nZXRUYWJsZSgpID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRDb250ZW50LmdldFRhYmxlKCkgPT09IG51bGwpIHtcblx0XHRcdFx0XHRhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuX2NyZWF0ZVZhbHVlSGVscERpYWxvZyhcblx0XHRcdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGVudCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkSW5mbyxcblx0XHRcdFx0XHRcdHBheWxvYWQsXG5cdFx0XHRcdFx0XHRjb25kaXRpb25Db250ZW50XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5fbG9nRXJyb3IocHJvcGVydHlQYXRoLCBlcnIpO1xuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmRlc3Ryb3lWSENvbnRlbnQodmFsdWVIZWxwKTtcblx0XHR9XG5cdH0sXG5cblx0Z2V0SW5BbmRPdXRQYXJhbWV0ZXJzTGlzdCgpOiBDb21tb25Bbm5vdGF0aW9uVHlwZXNbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQsXG5cdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW4sXG5cdFx0XHRDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcblx0XHRdO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWYWx1ZUxpc3RIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUVBOztFQWtCQSxNQUFNQSx1QkFBdUIsR0FBR0EsQ0FBQ0MsVUFBdUIsRUFBRUMsS0FBYSxLQUFjLENBQUNELFVBQVUsQ0FBQ0UsSUFBSSxDQUFFQyxNQUFNLElBQUtBLE1BQU0sQ0FBQ0MsSUFBSSxLQUFLSCxLQUFLLENBQUM7RUFFakksTUFBTUksZUFBZSxHQUFHLHVDQUF1QztJQUNyRUMsY0FBYyxHQUFHLHNDQUFzQztJQUN2REMsK0JBQStCLEdBQUcsaUZBQWlGO0lBQ25IQyw4QkFBOEIsR0FBRyxxREFBcUQ7SUFDdEZDLG9DQUFvQyxHQUFHLDJEQUEyRDtJQUNsR0MsK0JBQStCLEdBQUcsc0RBQXNEO0lBQ3hGQyxpQ0FBaUMsR0FBRyx3REFBd0Q7SUFDNUZDLGtDQUFrQyxHQUFHLDBEQUEwRDtJQUMvRkMsMkNBQTJDLEdBQUcsOERBQThEO0lBQzVHQyxzQ0FBc0MsR0FBRyw2REFBNkQ7RUFBQ0MsUUFBQSxDQUFBVixlQUFBLEdBQUFBLGVBQUE7RUFBQVUsUUFBQSxDQUFBRCxzQ0FBQSxH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
|