@sapui5/sap.fe.core 1.121.1 → 1.121.3
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/LICENSE.txt +13 -10
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +14 -7
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +24 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +20 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Table.ts +10 -2
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -1
- package/src/sap/fe/core/library.js +1 -1
|
@@ -313,6 +313,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
313
313
|
uploadAction: uploadAction
|
|
314
314
|
};
|
|
315
315
|
}
|
|
316
|
+
|
|
317
|
+
// We don't keep table selection after searching/filtering, except in responsive/upload tables
|
|
318
|
+
if (tableVisualization.control.type !== "ResponsiveTable" && tableVisualization.control.type !== "UploadTable") {
|
|
319
|
+
tableVisualization.clearSelectionOnFilter = true;
|
|
320
|
+
}
|
|
316
321
|
}
|
|
317
322
|
/**
|
|
318
323
|
* Get the navigation target path from manifest settings.
|
|
@@ -443,7 +448,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
443
448
|
enable$select: true,
|
|
444
449
|
enable$$getKeepAliveContext: true,
|
|
445
450
|
header: tableManifestConfig.header,
|
|
446
|
-
headerVisible: tableManifestConfig.headerVisible
|
|
451
|
+
headerVisible: tableManifestConfig.headerVisible,
|
|
452
|
+
clearSelectionOnFilter: false
|
|
447
453
|
};
|
|
448
454
|
updateLinkedProperties(converterContext.getAnnotationEntityType(lineItemAnnotation), columns);
|
|
449
455
|
updateTableVisualizationForType(oVisualization, converterContext.getAnnotationEntityType(lineItemAnnotation), converterContext, presentationVariantAnnotation);
|
|
@@ -472,7 +478,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
472
478
|
enable$select: true,
|
|
473
479
|
enable$$getKeepAliveContext: true,
|
|
474
480
|
header: tableManifestConfig.header,
|
|
475
|
-
headerVisible: tableManifestConfig.headerVisible
|
|
481
|
+
headerVisible: tableManifestConfig.headerVisible,
|
|
482
|
+
clearSelectionOnFilter: false
|
|
476
483
|
};
|
|
477
484
|
updateLinkedProperties(converterContext.getEntityType(), columns);
|
|
478
485
|
updateTableVisualizationForType(oVisualization, converterContext.getEntityType(), converterContext);
|
|
@@ -3186,4 +3193,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
3186
3193
|
getNavigationTargetPath
|
|
3187
3194
|
};
|
|
3188
3195
|
}, false);
|
|
3189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwic2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJ0YWJsZUFjdGlvbnMiLCJnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsInBhc3RlIiwiY3V0IiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJrZXkiLCJzdGFydHNXaXRoIiwibm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwid2lkdGgiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJhZGRDb21wdXRlZENvbHVtbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJjb2x1bW4iLCJ0YWJsZUNvbHVtbiIsInVuaXQiLCJhZGQiLCJjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJyZXN1bHQiLCJwcm9wZXJ0eUluZm9zIiwicmVsYXRpdmVQYXRoIiwicmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImhhcyIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJmb3VuZENvbHVtbiIsImZpbmRDb2x1bW5CeVBhdGgiLCJwdXNoIiwibGVuZ3RoIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImVuYWJsZUFuYWx5dGljcyIsImVuYWJsZSRzZWxlY3QiLCJlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJhZ2dyZWdhdGVzIiwiX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVCYXNpY1NlYXJjaCIsImluY2x1ZGVzIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJzdHJlYW1Qcm9wZXJ0eSIsIlVJIiwiTWVkaWFSZXNvdXJjZSIsIlN0cmVhbSIsIiR0YXJnZXQiLCJ1cGxvYWRBY3Rpb24iLCJ1cGxvYWRUYWJsZSIsInN0cmVhbSIsImZpbGVOYW1lIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwicGF0aCIsImFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJ0b1N0cmluZyIsIm1heExlbmd0aCIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9uQ29sdW1uIiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJvUHJvcGVydHkiLCJvUHJvcCIsIm9Vbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1RpbWV6b25lIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJzVGltZXpvbmUiLCJDb21tb24iLCJUaW1lem9uZSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0Iiwib1RpbWV6b25lQ29sdW1uIiwidGltZXpvbmUiLCJ0aW1lem9uZVRleHQiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiSGVhZGVySW5mbyIsIlRpdGxlIiwiVmFsdWUiLCJzZW1hbnRpY0tleUFubm90YXRpb25zIiwiU2VtYW50aWNLZXkiLCJoZWFkZXJJbmZvVHlwZU5hbWUiLCJUeXBlTmFtZSIsInNlbWFudGljS2V5Q29sdW1ucyIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsInBhcmFtcyIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwic2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlIiwic3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsImdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJ0YWJsZUFubm90YXRpb24iLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlckluZm9UaXRsZSIsInNlbWFudGljS2V5cyIsImhlYWRlciIsImhlYWRlclZpc2libGUiLCJjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uIiwiaXNCbGFua1RhYmxlIiwiZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImNyZWF0aW9uTW9kZSIsIkFjdGlvbkhlbHBlciIsImdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoIiwicmVzdHJpY3Rpb25zIiwiZ2V0UmVzdHJpY3Rpb25zIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwidXBkYXRhYmxlIiwiaXNVcGRhdGFibGUiLCJpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IiwiaXNDb25zdGFudCIsImV4cHJlc3Npb24iLCJuYXZpZ2F0aW9uRXhwcmVzc2lvbiIsIl90eXBlIiwidXBkYXRhYmxlRXhwcmVzc2lvbiIsIkNhcGFiaWxpdGllcyIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsInByb3BlcnRpZXMiLCJhY3Rpb25OYW1lIiwicHJvcGVydHlOYW1lIiwic2l6ZSIsInRpdGxlUHJvcGVydHkiLCJBcnJheSIsImZyb20iLCJqb2luIiwiZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImN1cnJlbnRFbnRpdHlUeXBlIiwiY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eSIsInNwbGl0IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJjdXN0b21BY3Rpb25zIiwicmVkdWNlIiwiYWN0aW9uIiwibWVudSIsIm1lbnVBY3Rpb24iLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwiaXNFbnRpdHlTZXQiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJGb3JjZU11bHRpIiwiTXVsdGkiLCJGb3JjZVNpbmdsZSIsIlNpbmdsZSIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiYk1hc3NFZGl0RW5hYmxlZCIsIkF1dG8iLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsImVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjb25jYXQiLCJjb3B5RGF0YUZpZWxkIiwiZ2V0Q29weUFjdGlvbiIsImRhdGFGaWVsZElzQ29weUFjdGlvbiIsInNFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidXNlRW5hYmxlZEV4cHJlc3Npb24iLCJfdXNlRW5hYmxlZEV4cHJlc3Npb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsIm5vdCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJ0ZXh0IiwiTGFiZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsIkRldGVybWluaW5nIiwidGFibGVBY3Rpb24iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3RPck5vZGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJNZXNzYWdlVHlwZSIsImdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSIsImFNaXNzaW5nS2V5cyIsImZvcm1hdFJlc3VsdCIsIkVudGl0eSIsIkhhc0FjdGl2ZSIsIklzQWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiZGV0YWlsIiwib3JpZ2luYWxUYWJsZVNldHRpbmdzIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIkxpc3RSZXBvcnQiLCJDcmVhdGlvbk1vZGUiLCJOZXdQYWdlIiwiRXh0ZXJuYWwiLCJMb2ciLCJ3YXJuaW5nIiwibmV3QWN0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbnMiLCJ0YXJnZXRBbm5vdGF0aW9uc0NvbW1vbiIsInRhcmdldEFubm90YXRpb25zU2Vzc2lvbiIsIlNlc3Npb24iLCJEcmFmdFJvb3QiLCJOZXdBY3Rpb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiQ3JlYXRpb25Sb3ciLCJFcnJvciIsInJvdXRlIiwiYXBwZW5kIiwiY3JlYXRlQXRFbmQiLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiZXJyb3IiLCJpbmZvIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJ0YWJsZVR5cGUiLCJwcmVzc1Byb3BlcnR5Iiwib3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSIsIm5hdmlnYXRpb25UYXJnZXQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiZGlzcGxheSIsInRhcmdldCIsIkNyaXRpY2FsaXR5IiwiTW9kZWxIZWxwZXIiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJlZGl0YWJsZSIsImJSZWNyZWF0ZUNvbnRleHQiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJvcGVuSW5OZXdUYWJQcmVzcyIsInJvd05hdmlnYXRlZCIsIklzSW5hY3RpdmUiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0YWJsZUNyZWF0aW9uTW9kZSIsInRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiIsImV4aXN0cyIsInRhcmdldFR5cGUiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJyZWxhdGVkUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ0ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24iLCJjb2x1bW5JbmZvIiwiZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSIsImV4cG9ydFNldHRpbmdzIiwiZGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSIsInVwZGF0ZVByb3BlcnR5TGFiZWwiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsInJlbGF0ZWRDb2x1bW5zIiwiX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJncm91cFBhdGgiLCJfc2xpY2VBdFNsYXNoIiwiaXNHcm91cCIsImxhYmVsIiwiZ2V0TGFiZWwiLCJkYXRhVHlwZSIsImdldERhdGFGaWVsZERhdGFUeXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsImlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiIsInNvcnRhYmxlIiwiZmlsdGVyYWJsZSIsInR5cGVDb25maWciLCJjbGFzc05hbWUiLCJjb25zdHJhaW50cyIsIl9pc0V4cG9ydGFibGVDb2x1bW4iLCJjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyIsImNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyIsIl9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJBbm5vdGF0aW9uIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwic2VtYW50aWNPYmplY3RQYXRoIiwiaXNHcm91cGFibGUiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiaXNLZXkiLCJjYXNlU2Vuc2l0aXZlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiZ2V0SW1wb3J0YW5jZSIsIkRhdGFGaWVsZERlZmF1bHQiLCJyZXF1aXJlZCIsImlzUmVxdWlyZWRDb2x1bW4iLCJhZGRpdGlvbmFsTGFiZWxzIiwiX2FkZFRvb2xUaXAiLCJfc2V0RXhwb3J0U2V0dGluZ3NGb3JEYXRhUG9pbnQiLCJ1bml0UHJvcGVydHkiLCJ0aW1lem9uZVByb3BlcnR5IiwidXRjIiwiaXNBVGltZXpvbmUiLCJjdXJyZW5jeVByb3BlcnR5Iiwic2NhbGUiLCJpc1Byb3BlcnR5IiwiZ2V0U3RhdGljVW5pdE9yQ3VycmVuY3kiLCJnZXRTdGF0aWNUaW1lem9uZSIsImlzVGltZXpvbmUiLCJleHBvcnRUeXBlIiwiZ2V0RXhwb3J0RGF0YVR5cGUiLCJpbnB1dEZvcm1hdCIsImdldERhdGVJbnB1dEZvcm1hdCIsImRlbGltaXRlciIsImdldERlbGltaXRlciIsInRlbXBsYXRlIiwid3JhcCIsInJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyIsInNldHRpbmciLCJsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucyIsImNvbCIsInRvb2x0aXAiLCJwcm9wZXJ0eVR5cGUiLCJkYXRhRmllbGREZWZhdWx0UHJvcGVydHkiLCJUYXJnZXQiLCJNZWRpYVR5cGUiLCJ0ZXJtIiwiaXNVUkwiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInByb3BlcnR5VmFsdWUiLCJpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkIiwiaXNBbmFseXRpY2FsTGVhZiIsIl9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJkYXRhRmllbGRHcm91cCIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImRhdGFGaWVsZERlZmF1bHQiLCJpc0RhdGFGaWVsZFR5cGVzIiwiX2dldFRvb2x0aXAiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiY29sTmFtZSIsImlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImV4aXN0aW5nQ29sdW1uIiwibmV3TmFtZSIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsImNyZWF0ZVRlY2huaWNhbFByb3BlcnR5IiwicmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXAiLCJjb2x1bW5FeGlzdHMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0ZWNobmljYWxDb2x1bW4iLCJhZ2dyZWdhdGFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5NdWx0aVZhbHVlZCIsInByb3BlcnR5T2JqZWN0UGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImZpbHRlckZ1bmN0aW9ucyIsIl9nZXRGaWx0ZXJGdW5jdGlvbnMiLCJpc0FycmF5IiwiQ29udmVydGVyQ29udGV4dCIsIlR5cGVHdWFyZHMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiX2dldEltcE51bWJlciIsIkltcG9ydGFuY2UiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsInRhcmdldFZhbHVlZnJvbURQIiwiZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCIsImlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQiLCJfZ2V0TWF4SW1wb3J0YW5jZSIsImZpZWxkcyIsIm1heEltcE51bWJlciIsImltcE51bWJlciIsIkRhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIiwiZmllbGQiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXMiLCJoaWdoS2V5cyIsImZpZWxkc1dpdGhJbXBvcnRhbmNlIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZGF0YUZpZWxkVGFyZ2V0IiwiZmllbGRHcm91cERhdGEiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiSGlnaCIsIml0ZW0iLCJnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMiLCJnZXRUYWJsZVR5cGUiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhYmxlQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwibGluZUl0ZW0iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsInNMYWJlbCIsImlzRmllbGRHcm91cENvbHVtbiIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwic2l0dWF0aW9uc05hdlByb3BzIiwibmF2aWdhdGlvblByb3BlcnR5IiwiaXNDb2xsZWN0aW9uIiwiU0FQT2JqZWN0Tm9kZVR5cGUiLCJOYW1lIiwic2l0dWF0aW9uc05hdlByb3AiLCJoYXNTaXR1YXRpb25zSW5kaWNhdG9yIiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwiaXNNdWx0aVZhbHVlIiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiSFRNTDUiLCJDc3NEZWZhdWx0cyIsInNUb29sdGlwIiwiY3JlYXRlUHJvcGVydHlBbm5vdGF0ZWRUZXh0T25seSIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsInJlc29sdmVQYXRoIiwiaXNSZXF1aXJlZEZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwIiwiaXNEYXRhRmllbGQiLCJpc1N0YXRpY2FsbHlNYW5kYXRvcnkiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkiLCJpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImRhdGFGaWVsZEZvckFubm90YXRpb24iLCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uRmllbGRDb250cm9sTm90TWFuZGF0b3J5IiwiaGFzRmllbGRDb250cm9sTm90TWFuZGF0b3J5IiwiaGFzRmllbGRHcm91cFRhcmdldCIsImhhc0RhdGFQb2ludFRhcmdldCIsIlZpc3VhbGl6YXRpb24iLCJpc1JlcXVpcmVkRGF0YVBvaW50IiwiaXNSZXF1aXJlZFByb3BlcnR5IiwiaXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHQiLCJkYXRhUG9pbnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJpc0RhdGFGaWVsZEZvckFubm90YXRpb24iLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJpbnRlcm5hbENvbHVtbnMiLCJpc0Fubm90YXRpb25Db2x1bW4iLCJpc1Nsb3RDb2x1bW4iLCJtYW5pZmVzdENvbHVtbiIsIlNsb3QiLCJpc0N1c3RvbUNvbHVtbiIsIl91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zIiwiYW5ub3RhdGlvblRhYmxlQ29sdW1ucyIsInByb3AiLCJyZXBsYWNlIiwidmFsaWRhdGVLZXkiLCJiYXNlVGFibGVDb2x1bW4iLCJBZnRlciIsInByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW4iLCJpc0FjdGlvbk5hdmlnYWJsZSIsInRvb2x0aXBUZXh0IiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsImhlYWRlclRleHQiLCJiYXNlTWFuaWZlc3RDb2x1bW4iLCJIb3Jpem9udGFsQWxpZ24iLCJCZWdpbiIsImlkIiwiY3VzdG9tVGFibGVDb2x1bW4iLCJtZXNzYWdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIkFubm90YXRpb25Db2x1bW5zIiwiSW52YWxpZEtleSIsImNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yIiwic2l0dWF0aW9uc0luZGljYXRvckNvbHVtbiIsInByb3BlcnR5S2V5IiwiaXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiQ29tcHV0ZWQiLCJjbGlwYm9hcmRTZXR0aW5ncyIsImluZGV4T2ZGaXJzdFZpc2libGVDb2x1bW4iLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IiLCJpc0RyYWZ0Tm9kZSIsImlzRHJhZnRSb290IiwiZHJhZnRJbmRpY2F0b3JDb2x1bW4iLCJpc0RyYWZ0SW5kaWNhdG9yIiwiY29sdW1uSW5kZXhUb0luc2VydEFmdGVyIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImlzQW5hbHl0aWNhbFRhYmxlIiwiaXNSZXNwb25zaXZlVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwic29ydENvbmRpdGlvbnMiLCJTb3J0T3JkZXIiLCJzb3J0ZXJzIiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsImNvbmRpdGlvblByb3BlcnR5IiwiUHJvcGVydHkiLCJpbmZvTmFtZSIsImNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsImdldEluaXRpYWxFeHBhbnNpb25MZXZlbCIsImxldmVsIiwiSW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lIiwiYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uIiwiY3VzdG9tQWdncmVnYXRlIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mbyIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2FwYWJpbGl0aWVzIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiVG90YWwiLCJhVG90YWxzIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJnZXRDcmVhdGlvblJvdyIsInR5cGVOYW1lUGx1cmFsIiwiVHlwZU5hbWVQbHVyYWwiLCJ0aXRsZSIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJnZXRUYWJsZUlEIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwiZW50aXR5TmFtZSIsImVudGl0eVR5cGVOYW1lIiwiY29sbGVjdGlvbiIsInJvdyIsImlzSW5EaXNwbGF5TW9kZSIsInNlYXJjaGFibGUiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJpc0N1cnJlbmN5IiwiZXhwb3J0RGF0YVR5cGUiLCJ0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIl9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSIsImlzSXBob25lIiwiZW5hYmxlRnVsbFNjcmVlbiIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVNb2RlIiwiaXNUZW1wbGF0ZUxpc3RSZXBvcnQiLCJyb3dDb3VudE1vZGUiLCJyb3dDb3VudCIsIl9nZXRDb25kZW5zZWRUYWJsZUxheW91dCIsIl90YWJsZVR5cGUiLCJfdGFibGVTZXR0aW5ncyIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX2dldFRhYmxlU2VsZWN0aW9uTGltaXQiLCJzZWxlY3Rpb25MaW1pdCIsIl9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiaGlkZVRhYmxlVGl0bGUiLCJmaWx0ZXJzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwicXVpY2tGaWx0ZXJQYXRocyIsImZpbHRlclBhdGhzIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsImhpZGRlbkZpbHRlcnMiLCJuYXZQcm9wZXJ0eSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInNvdXJjZVR5cGUiLCJwYXJhbWV0ZXJzIiwidXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidGFibGVDb25maWd1cmF0aW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZXJhcmNoeVF1YWxpZmllciIsImhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsImlzTm9kZU1vdmFibGUiLCJnZXRDdXN0b21GdW5jdGlvbkluZm8iLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJpc0NyZWF0ZUVuYWJsZWQiLCJub2RlVHlwZSIsImxhc3REb3RJbmRleCIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwiYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyIsImdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0IiwiZGlzYWJsZVJlcXVlc3RDYWNoZSIsImNoZWNrQ29uZGVuc2VkTGF5b3V0IiwiX21hbmlmZXN0V3JhcHBlciIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImlzUGhvbmUiLCJ0ZW1wbGF0ZVR5cGUiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCIsIm9GaWx0ZXJDb25maWd1cmF0aW9uIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwidGFibGVSb3dNb2RlIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIm9Db25maWd1cmF0aW9uIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImVuYWJsZU1hc3NFZGl0IiwiZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsImJlZm9yZVJlYmluZFRhYmxlIiwic2VsZWN0aW9uQ2hhbmdlIiwiaXNQcm9wZXJ0eU5hdmlnYXRlZCIsImluaGVyZWRQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0luaGVyZWRQcm9wZXJ0eU5hdmlnYXRlZCIsIm9UYXJnZXRNYXBwaW5nIiwiaXNUeXBlRGVmaW5pdGlvbiIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdFByb3BlcnR5UGF0aFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRnVuY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3RPcHRpb25UeXBlLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxleFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCxcblx0aGFzRGF0YVBvaW50VGFyZ2V0LFxuXHRoYXNGaWVsZEdyb3VwVGFyZ2V0LFxuXHRpc0RhdGFGaWVsZCxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHRpc0RhdGFGaWVsZFR5cGVzLFxuXHRpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0LFxuXHRpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGRhdGFGaWVsZElzQ29weUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0Q29weUFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24sXG5cdGlzQWN0aW9uTmF2aWdhYmxlLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZUNhdGVnb3J5VHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBFbnRpdHksIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUsIHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0ICogYXMgVHlwZUd1YXJkcyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRpc0Fubm90YXRpb25PZlR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eSxcblx0aXNUeXBlRGVmaW5pdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZSxcblx0dHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCB0eXBlIERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzRmllbGRDb250cm9sTm90TWFuZGF0b3J5LCBpc1N0YXRpY2FsbHlNYW5kYXRvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0U3RhdGljVGltZXpvbmUsXG5cdGdldFN0YXRpY1VuaXRPckN1cnJlbmN5LFxuXHRpc1RpbWV6b25lXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0Rm9ybWF0T3B0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QWN0aW9uVHlwZSxcblx0Q3JlYXRpb25Nb2RlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdEltcG9ydGFuY2UsXG5cdFNlbGVjdGlvbk1vZGUsXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaXN1YWxpemF0aW9uVHlwZVxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkQWN0aW9uIH0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRTdGFuZGFyZEFjdGlvbktleXMsXG5cdGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Z2V0Q3JlYXRpb25Sb3csXG5cdGdldEN1dFZpc2liaWxpdHksXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3V0LFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRhY2NlcHRhYmxlTWVkaWFUeXBlcz86IHN0cmluZztcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogc3RyaW5nO1xuXHRyb3c/OiB7XG5cdFx0YWN0aW9uPzogc3RyaW5nO1xuXHRcdHByZXNzPzogc3RyaW5nO1xuXHRcdG9wZW5Jbk5ld1RhYlByZXNzPzogc3RyaW5nO1xuXHRcdHJvd0hpZ2hsaWdodGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0cm93TmF2aWdhdGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdH07XG5cdHNlbGVjdGlvbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuO1xuXHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZGlzcGxheU1vZGU/OiBib29sZWFuO1xuXHR0aHJlc2hvbGQ6IG51bWJlcjtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRlbnRpdHlUeXBlTmFtZTogc3RyaW5nO1xuXHRzb3J0Q29uZGl0aW9ucz86IHN0cmluZztcblx0Z3JvdXBDb25kaXRpb25zPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGVDb25kaXRpb25zPzogc3RyaW5nO1xuXHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXI7XG5cdC8qKiBDcmVhdGUgbmV3IGVudHJpZXMgKi9cblx0Y3JlYXRlOiBDcmVhdGVCZWhhdmlvciB8IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWw7XG5cdHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNlYXJjaGFibGU6IGJvb2xlYW47XG5cdHJlcXVpcmVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR1cGxvYWRUYWJsZT86IFVwbG9hZFRhYmxlU2V0dGluZ3M7XG59O1xuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvciA9IHtcblx0bW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRhcHBlbmQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGVUb1RhcmdldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEV4dGVybmFsTWV0aG9kQ29uZmlnID0ge1xuXHRtb2R1bGVOYW1lOiBzdHJpbmc7XG5cdG1ldGhvZE5hbWU6IHN0cmluZztcbn07XG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIGJ5IG5hdmlnYXRpbmcgdG8gc29tZSB0YXJnZXRcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR9W107XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGRpc2FibGVSZXF1ZXN0Q2FjaGU6IGJvb2xlYW47XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGZyb3plbkNvbHVtbkNvdW50PzogbnVtYmVyO1xuXHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47XG5cdGhlYWRlcj86IHN0cmluZztcblx0aGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBQYXJ0aWFsPFJlY29yZDxcInF1aWNrRmlsdGVyc1wiIHwgXCJoaWRkZW5GaWx0ZXJzXCIsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+Pjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRyb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTtcblx0cm93Q291bnQ/OiBudW1iZXI7XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXI7XG5cdG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVQYXN0ZTogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbjogYm9vbGVhbjtcblx0c2hvd1Jvd0NvdW50OiBib29sZWFuO1xuXHRpbmxpbmVDcmVhdGlvblJvd0NvdW50PzogbnVtYmVyO1xuXHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ZW5hYmxlTWFzc0VkaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogYm9vbGVhbjtcblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0bm9kZVR5cGU/OiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W107XG5cdH07XG5cdGNyZWF0ZUVuYWJsZW1lbnQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNOb2RlTW92YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRzZWxlY3Rpb25DaGFuZ2U/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0YWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcz86IHN0cmluZ1tdO1xuXHRiZWZvcmVSZWJpbmRUYWJsZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCIgfCBcIlRyZWVUYWJsZVwiIHwgXCJVcGxvYWRUYWJsZVwiO1xuZXhwb3J0IHR5cGUgVGFibGVSb3dDb3VudE1vZGUgPSBcIkF1dG9cIiB8IFwiRml4ZWRcIjtcblxuZW51bSBDb2x1bW5UeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLCAvLyBEZWZhdWx0IFR5cGUgKEN1c3RvbSBDb2x1bW4pXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIixcblx0U2xvdCA9IFwiU2xvdFwiLFxuXHRDb21wdXRlZCA9IFwiQ29tcHV0ZWRcIlxufVxuLy8gQ3VzdG9tIENvbHVtbiBmcm9tIE1hbmlmZXN0XG5leHBvcnQgdHlwZSBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU/OiBDb2x1bW5UeXBlLkRlZmF1bHQ7XG59O1xuLy8gU2xvdCBDb2x1bW4gZnJvbSBCdWlsZGluZyBCbG9ja1xuZXhwb3J0IHR5cGUgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiA9IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiAmIHtcblx0dHlwZTogQ29sdW1uVHlwZS5TbG90O1xufTtcbi8vIFByb3BlcnRpZXMgYWxsIENvbHVtblR5cGVzIGhhdmU6XG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tXG5cdHdpZHRoPzogc3RyaW5nO1xuXHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47XG5cdGltcG9ydGFuY2U/OiBJbXBvcnRhbmNlO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG59O1xuLy8gUHJvcGVydGllcyBvbiBDdXN0b20gQ29sdW1ucyBhbmQgU2xvdCBDb2x1bW5zXG5leHBvcnQgdHlwZSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRleHBvcnRTZXR0aW5ncz86IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbDtcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGU7XG5cdGlzR3JvdXBhYmxlOiBib29sZWFuO1xuXHRpc05hdmlnYWJsZTogYm9vbGVhbjtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfTtcblx0cHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRyZXF1aXJlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcHV0ZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0bmFtZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRwcm9wZXJ0eUtleTogc3RyaW5nO1xuXHRpc0RyYWZ0SW5kaWNhdG9yPzogYm9vbGVhbjtcblx0aXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlIHwgbnVsbDtcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdIHwgbnVsbDtcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGNsaXBib2FyZFNldHRpbmdzPzogT2JqZWN0IHwgbnVsbDtcblx0cmVxdWlyZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbi8vIFByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIE1hbmlmZXN0IHRvIG92ZXJyaWRlIEFubm90YXRpb24gY29uZmlndXJhdGlvbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cyA9IFBhcnRpYWw8e1xuXHRzY2FsZTogbnVtYmVyO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0bWF4TGVuZ3RoOiBudW1iZXI7XG5cdG51bGxhYmxlOiBib29sZWFuO1xuXHRtaW5pbXVtOiBzdHJpbmc7XG5cdG1heGltdW06IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlOiBib29sZWFuO1xufT47XG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nOiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcbn0+O1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50czogUHJvcGVydHlUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IFByb3BlcnR5VHlwZUZvcm1hdE9wdGlvbnM7XG5cdHR5cGVJbnN0YW5jZT86IHVua25vd247XG5cdGJhc2VUeXBlPzogc3RyaW5nO1xuXHRjbGFzc05hbWU/OiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlO1xufTtcbmV4cG9ydCB0eXBlIENvbHVtbkV4cG9ydFNldHRpbmdzID0gUGFydGlhbDx7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHdyYXA6IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0aW5wdXRGb3JtYXQ6IHN0cmluZztcblx0Zm9ybWF0OiBzdHJpbmc7XG5cdHNjYWxlOiBudW1iZXI7XG5cdGRlbGltaXRlcjogYm9vbGVhbjtcblx0dW5pdDogc3RyaW5nO1xuXHR1bml0UHJvcGVydHk6IHN0cmluZztcblx0dGltZXpvbmU6IHN0cmluZztcblx0dGltZXpvbmVQcm9wZXJ0eTogc3RyaW5nO1xuXHR1dGM6IGJvb2xlYW47XG5cdGRhdGFQb2ludFRhcmdldFZhbHVlOiBzdHJpbmc7XG5cdGlzQ3VycmVuY3k6IGJvb2xlYW47XG59Pjtcbi8vIFByb3BlcnRpZXMgZm9yIEFubm90YXRpb24gQ29sdW1uc1xuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd0RhdGFGaWVsZHNMYWJlbD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzS2V5PzogYm9vbGVhbjtcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdHR5cGVDb25maWc/OiBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlzUGFydE9mTGluZUl0ZW0/OiBib29sZWFuOyAvLyB0ZW1wb3JhcnkgaW5kaWNhdG9yIHRvIG9ubHkgYWxsb3cgZmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB3aGVuIHRoZXkncmUgcGFydCBvZiBhIGxpbmUgaXRlbVxuXHRhZGRpdGlvbmFsTGFiZWxzPzogc3RyaW5nW107XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGFibGU/OiBib29sZWFuO1xuXHRleHRlbnNpb24/OiBFeHRlbnNpb25Gb3JBbmFseXRpY3M7XG5cdGlzTXVsdGlWYWx1ZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0ge1xuXHRjdXN0b21BZ2dyZWdhdGU/OiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdHRydW5jYXRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCBDb21wdXRlZFRhYmxlQ29sdW1uO1xuZXhwb3J0IHR5cGUgTWFuaWZlc3RDb2x1bW4gPSBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT47XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xufTtcbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHN0YW5kYXJkQWN0aW9uczogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbltcInN0YW5kYXJkQWN0aW9uc1wiXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gdGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlLFxuXHRcdGhpZGRlbkFjdGlvbnNcblx0KTtcblx0Ly8gVGhlIFwiQ29weVwiIGFjdGlvbiBhbHdheXMgbmVlZHMgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBcIkNyZWF0ZVwiIGFjdGlvbiwgc28gd2UgbmVlZCB0byBzZXBhcmF0ZSBpdFxuXHRjb25zdCBjb3B5QWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgPT09IEFjdGlvblR5cGUuQ29weSk7XG5cdGNvbnN0IGFubm90YXRpb25BY3Rpb25zID0gdGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucy5maWx0ZXIoKGEpID0+IGEudHlwZSAhPT0gQWN0aW9uVHlwZS5Db3B5KTtcblx0Ly8gQ29tYmluZSBzdGFuZGFyZCwgYW5ub3RhdGlvbiwgYW5kIGN1c3RvbSBhY3Rpb25zIHRvZ2V0aGVyLCByZXNwZWN0aW5nIHRoZSBmaXhlZCBvcmRlciBvZiBzdGFuZGFyZCBhY3Rpb25zXG5cdGNvbnN0IGFubm90YXRpb25BbmRTdGFuZGFyZEFjdGlvbnMgPSBbXG5cdFx0Li4uYW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0ZSxcblx0XHQuLi5jb3B5QWN0aW9ucyxcblx0XHRzdGFuZGFyZEFjdGlvbnMuZGVsZXRlLFxuXHRcdHN0YW5kYXJkQWN0aW9ucy5tYXNzRWRpdCxcblx0XHRzdGFuZGFyZEFjdGlvbnMuaW5zaWdodHMsXG5cdFx0Ly8gTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcmUgbm90IHRlbXBsYXRlZCBhcyBidXR0b25zXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0aW9uUm93LFxuXHRcdHN0YW5kYXJkQWN0aW9ucy5wYXN0ZSxcblx0XHRzdGFuZGFyZEFjdGlvbnMuY3V0XG5cdF0gYXMgQmFzZUFjdGlvbltdO1xuXHQvLyBBbmNob3IgYWxsIG5vbi1hbmNob3JlZCBtYW5pZmVzdCBjdXN0b20gYWN0aW9ucy9tZW51cyBiZWZvcmUgdGhlIHN0YW5kYXJkIGFjdGlvbnNcblx0Zm9yIChjb25zdCBtYW5pZmVzdEFjdGlvbiBvZiBPYmplY3QudmFsdWVzKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKSkge1xuXHRcdGlmICgobWFuaWZlc3RBY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5EZWZhdWx0IHx8IG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkgJiYgIW1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uPy5hbmNob3IpIHtcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uID0ge1xuXHRcdFx0XHRhbmNob3I6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUsXG5cdFx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkJlZm9yZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Ly8gSW5zZXJ0IHR3aWNlIHRvIGFsbG93IHJlZ3VsYXIgb3ZlcnJpZGUgZm9yIG5vbi1zdGFuZGFyZCBhY3Rpb25zIGFuZCBwb3NpdGlvbmFsIG92ZXJyaWRlIGZvciBzdGFuZGFyZCBhY3Rpb25zXG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9uRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Y29uc3Qgc3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+IGtleS5zdGFydHNXaXRoKFwiU3RhbmRhcmRBY3Rpb246OlwiKSkpO1xuXHRjb25zdCBub25TdGFuZGFyZE1hbmlmZXN0QWN0aW9ucyA9IE9iamVjdC5mcm9tRW50cmllcyhtYW5pZmVzdEFjdGlvbkVudHJpZXMuZmlsdGVyKChba2V5XSkgPT4gIXN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zW2tleV0pKTtcblx0Y29uc3QgYWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0aXNOYXZpZ2FibGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlT25TZWxlY3Q6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlQXV0b1Njcm9sbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0bGV0IGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zLCBub25TdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0YWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zLCB7XG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGNvbHVtbnMsIGFubm90YXRpb24tYmFzZWQgYXMgd2VsbCBhcyBtYW5pZmVzdC1iYXNlZC5cbiAqIFRoZXkgYXJlIHNvcnRlZCBhbmQgc29tZSBwcm9wZXJ0aWVzIGNhbiBiZSBvdmVyd3JpdHRlbiB2aWEgdGhlIG1hbmlmZXN0IChjaGVjayBvdXQgdGhlIGtleXMgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4pLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFsbCB0YWJsZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB0ZW1wbGF0aW5nIG9yIHBlcnNvbmFsaXphdGlvbiBvciB0aGVpciBvcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29sdW1ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RDb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmNvbHVtbnMsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cblx0Y29uc3QgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSxcblx0XHRtYW5pZmVzdENvbHVtbnMgYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj4+LFxuXHRcdHtcblx0XHRcdHdpZHRoOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRpbXBvcnRhbmNlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0aXNOYXZpZ2FibGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0XHR9XG5cdCk7XG5cblx0cmV0dXJuIGFkZENvbXB1dGVkQ29sdW1ucyh0YWJsZUNvbHVtbnMsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgdGFibGVDb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmICh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCByYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gZGVmaW5pdGlvbnNbdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlXG5cdFx0XHRpZiAocmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJiAhY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5uYW1lKSkge1xuXHRcdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKSB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRlc0RlZmluaXRpb25zID0gZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkc2VsZWN0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblx0XHRcdF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb24pO1xuXHRcdFx0Y29uc3QgYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVCYXNpY1NlYXJjaCA9IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPyBhbGxvd2VkVHJhbnNmb3JtYXRpb25zLmluY2x1ZGVzKFwic2VhcmNoXCIpIDogdHJ1ZTtcblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHRcdGFnZ3JlZ2F0ZXNEZWZpbml0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVCYXNpY1NlYXJjaCA9IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPyBhbGxvd2VkVHJhbnNmb3JtYXRpb25zLmluY2x1ZGVzKFwic2VhcmNoXCIpIDogdHJ1ZTtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlVwbG9hZFRhYmxlXCIpIHtcblx0XHRjb25zdCBzdHJlYW1Qcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbT8uJHRhcmdldDtcblx0XHRpZiAoIXN0cmVhbVByb3BlcnR5KSB7XG5cdFx0XHR0aHJvdyBcIlVJLk1lZGlhUmVzb3VyY2UgYW5ub3RhdGlvbiB3aXRoIFN0cmVhbSBwcm9wZXJ0eSBtaXNzaW5nXCI7XG5cdFx0fVxuXG5cdFx0Ly8gdGhlIHVwbG9hZCBhY3Rpb24gaXMgdHJlYXRlZCBhcyB0aGUgY3JlYXRlIGFjdGlvblxuXHRcdGNvbnN0IHVwbG9hZEFjdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbjtcblx0XHQvLyB0aHVzIHdlIGFsc28gcmVtb3ZlIHRoZSBjcmVhdGUgYWN0aW9uXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFjdGlvbnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uYWN0aW9ucy5maWx0ZXIoKGEpID0+IGEua2V5ICE9PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKTtcblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnVwbG9hZFRhYmxlID0ge1xuXHRcdFx0c3RyZWFtOiBzdHJlYW1Qcm9wZXJ0eS5uYW1lLFxuXHRcdFx0ZmlsZU5hbWU6IChzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkKT8ucGF0aCxcblx0XHRcdGFjY2VwdGFibGVNZWRpYVR5cGVzOiBzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcz8udG9TdHJpbmcoKSxcblx0XHRcdG1heExlbmd0aDogc3RyZWFtUHJvcGVydHkubWF4TGVuZ3RoLFxuXHRcdFx0dXBsb2FkQWN0aW9uOiB1cGxvYWRBY3Rpb25cblx0XHR9O1xuXHR9XG59XG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5mdW5jdGlvbiBmaW5kQ29sdW1uQnlQYXRoKHBhdGg6IHN0cmluZywgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0fSk7XG59XG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKG9Qcm9wOiBQcm9wZXJ0eSkgPT4gb1Byb3AubmFtZSA9PT0gb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IG9Vbml0ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IG9UaW1lem9uZSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IHNUaW1lem9uZSA9IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdFx0XHRcdGlmIChvVW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Vbml0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVW5pdC5uYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGltZXpvbmUgPSBvVGltZXpvbmVDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lVGV4dCA9IHNUaW1lem9uZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZVxuXHRcdD8ucGF0aDtcblx0Y29uc3Qgc2VtYW50aWNLZXlBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5wdXNoKG9Db2x1bW4udmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IGhlYWRlckluZm9UaXRsZVBhdGgsIHNlbWFudGljS2V5Q29sdW1ucywgaGVhZGVySW5mb1R5cGVOYW1lIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiB0YWJsZUFubm90YXRpb24sXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGVcblx0fTtcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGlzQmxhbmtUYWJsZT86IGJvb2xlYW4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0e30sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0W10sXG5cdFx0W10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy5jcmVhdGlvbk1vZGUsXG5cdFx0W11cblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBcIlwiKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdHVuZGVmaW5lZCxcblx0XHRcIlwiLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XCJcIixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0aXNCbGFua1RhYmxlID8gW10gOiBjb2x1bW5zLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlLFxuXHRcdGhlYWRlcjogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXJWaXNpYmxlXG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIEFjdGlvbkhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBcInRhYmxlXCIsIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVFeHByZXNzaW9uID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1cGRhdGFibGVFeHByZXNzaW9uKSAmJiB1cGRhdGFibGVFeHByZXNzaW9uLnBhdGg7XG5cdHJldHVybiBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID8gKHVwZGF0YWJsZVByb3BlcnR5UGF0aCBhcyBzdHJpbmcpIDogXCJcIjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIFRoZSByZWNvcmQgY29uc2lzdGluZyBvZiBhY3Rpb25zIGFuZCB0aGVpciBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIENTViBzdHJpbmcgb2YgYWxsIHByb3BlcnR5IHBhdGhzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoKSwgZmFsc2UpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBwYXRoIG9mIGEgRGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRjb25zdCBleHByZXNzaW9uID0gc291cmNlLmFubm90YXRpb25zPy5VST8uSGlkZGVuIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRsZXQgcGF0aCA9IGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uKTtcblx0aWYgKHR5cGVvZiBwYXRoID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChcInZpc2libGVcIiBpbiBzb3VyY2UpIHtcblx0XHRcdHBhdGggPSBwYXRoLnN1YnN0cmluZygxLCBwYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaXMgY29ycmVjdDpcblx0XHRcdGNvbnN0IHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eSA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHlbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvblByb3BlcnR5KGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3QpICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBuYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkuc2xpY2UoMSkuam9pbihcIi9cIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgbWFuaWZlc3QgYWN0aW9ucyBhbmQgY2hlY2sgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiBJZiB0aGUgZGF0YSBmaWVsZCBpcyBhbHNvIHJlZmVyZW5jZWQgYXMgYSBjdXN0b20gYWN0aW9uLlxuICogSWYgdGhlIHVuZGVybHlpbmcgbWFuaWZlc3QgYWN0aW9uIGlzIGVpdGhlciBhIGJvdW5kIGFjdGlvbiBvciBoYXMgdGhlICdSZXF1aXJlc0NvbnRleHQnIHByb3BlcnR5IHNldCB0byB0cnVlLlxuICpcbiAqIElmIHNvLCB0aGUgJ3JlcXVpcmVzU2VsZWN0aW9uJyBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gJ3RydWUnIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciBhbmQgcmVxdWlyZXMgYSBjb250ZXh0XG4gKiBJZiBhbiBhY3Rpb24gaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgaXQgaXMgc2V0IGFzaWRlIGFuZCB3aWxsIGJlIGNvbnNpZGVyZWRcbiAqIHdoZW4gZ29pbmcgdGhyb3VnaCB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+LFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBsaW5lSXRlbUFubm90YXRpb24uc29tZSgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uSWQgPSBnZW5lcmF0ZShbXCJEYXRhRmllbGRGb3JBY3Rpb25cIiwgZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmddKTtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckFjdG9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmICh1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KG1hbmlmZXN0QWN0aW9uSWQsIGRhdGFGaWVsZCwgbWFuaWZlc3RBY3Rpb25zKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0XHRcdFx0XHRcdGBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246OiR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fTo6JHtkYXRhRmllbGQuQWN0aW9ufWAsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgY3VzdG9tIGFjdGlvbiB0aGF0IHJlcXVpcmVzIGEgY29udGV4dCBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdG9vbGJhci5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnJlZHVjZSgoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIGFjdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmICghYWN0aW9uLm1lbnUpIHtcblx0XHRcdC8vc2ltcGxlIGN1c3RvbSBhY3Rpb25cblx0XHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBncm91cGVkIGFjdGlvbnNcblx0XHRcdGFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4uKGFjdGlvbi5tZW51LmZpbHRlcigobWVudUFjdGlvbikgPT4gdHlwZW9mIG1lbnVBY3Rpb24gIT09IFwic3RyaW5nXCIpIGFzIEN1c3RvbUFjdGlvbltdKV07XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBbXSk7XG5cdHJldHVybiAhIWN1c3RvbUFjdGlvbnMuZmluZChcblx0XHQoYWN0aW9uKSA9PiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgKGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKVxuXHQpO1xufVxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIEFycmF5PEV4cHJlc3Npb248Ym9vbGVhbj4+IEFsbCB0aGUgdmlzaWJsZSBwYXRoIGV4cHJlc3Npb25zIG9mIHRoZSBhY3Rpb25zIHRoYXQgbWVldCB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLmZvckVhY2goKGFjdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlICYmIGFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8qVGhlIGZpbmFsIGFpbSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgcGF0aCBleHByZXNzaW9uIGRlcGVuZHMgb24gdGhlIHBhcmVudCBjb250ZXh0XG5cdFx0XHRcdFx0YW5kIGNvbnNpZGVycyBvbmx5IHRob3NlIGV4cHJlc3Npb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLFxuXHRcdFx0XHRcdGJ1dCBjdXJyZW50bHkgbm90IHBvc3NpYmxlIGZyb20gdGhlIG1hbmlmZXN0IGFzIHRoZSB2aXNpYmxlIGtleSBpcyBib3VuZCBvbiB0aGUgcGFyZW50IGVudGl0eS5cblx0XHRcdFx0XHRUcmlja3kgdG8gZGlmZmVyZW50aWF0ZSB0aGUgcGF0aCBhcyBpdCdzIGRvbmUgZm9yIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdFx0XHRGb3IgdGhlIHRpbWUgYmVpbmcgd2UgY29uc2lkZXIgYWxsIHRoZSBwYXRocyBvZiB0aGUgbWFuaWZlc3QqL1xuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGFuZCBrZWVwIGl0IGFzIHNwZWNpZmllZFxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUV4cHJlc3Npb24oaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0Y29uc3QgYk1hc3NFZGl0RW5hYmxlZDogYm9vbGVhbiA9ICFpc0NvbnN0YW50KG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pIHx8IG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24udmFsdWUgIT09IGZhbHNlO1xuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKFxuXHRcdGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpXG5cdCkge1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHR9XG5cdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHQpO1xuXHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdC8vIE5vIGFjdGlvbiByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHRpZiAoXG5cdFx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHQoY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgYk1hc3NFZGl0RW5hYmxlZClcblx0KSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRcdC8vIEJ1aWxkaW5nIGV4cHJlc3Npb24gZm9yIGRlbGV0ZSBhbmQgbWFzcyBlZGl0XG5cdFx0XHRcdGNvbnN0IGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gb3IoXG5cdFx0XHRcdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSxcblx0XHRcdFx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCB0cnVlLCAvLyBkZWZhdWx0IGRlbGV0ZSB2aXNpYmlsaXR5IGFzIHRydWVcblx0XHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzRWRpdGFibGUsIGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLlNpbmdsZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gZXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFubm90YXRpb25BY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBjb3B5RGF0YUZpZWxkID0gZ2V0Q29weUFjdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdXG5cdCk7XG5cdGNvbnN0IHNFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRpZiAoY29weURhdGFGaWVsZCkge1xuXHRcdGNvbnN0IHVzZUVuYWJsZWRFeHByZXNzaW9uID0gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIHNFbnRpdHlUeXBlKTtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdC8vIFVzZSBPcGVyYXRpb25BdmFpbGFibGUgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gb25lIHNlbGVjdGVkIGl0ZW1cblx0XHRcdGVuYWJsZWQ6IHVzZUVuYWJsZWRFeHByZXNzaW9uXG5cdFx0XHRcdD8gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgY29weURhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdG5vdChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0Y29weURhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0dGV4dDogY29weURhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSA/PyBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0NPTU1PTl9DT1BZXCIpLFxuXHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHR9KTtcblx0fVxuXHRsaW5lSXRlbUFubm90YXRpb25cblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiAhZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpICE9PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBzRW50aXR5VHlwZSkpIHtcblx0XHRcdFx0XHRcdFx0dGFibGVBY3Rpb24uZW5hYmxlZCA9IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdHJldHVybiB7XG5cdFx0dGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uc1xuXHR9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiBQYXRoIG9yIHZhbHVlIG9mIHRoZSBjcml0aWNhbGl0eVxuICogQHBhcmFtIGlzRHJhZnRSb290T3JOb2RlICBJcyB0aGUgY3VycmVudCBlbnRpdHlTZXQgYW4gRHJhZnQgcm9vdCBvciBhIG5vZGVcbiAqIEBwYXJhbSB0YXJnZXRFbnRpdHlUeXBlIFRoZSB0YXJnZXRlZCBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uQmluZGluZ1xuICovXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IENyaXRpY2FsaXR5IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdE9yTm9kZTogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lKSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdE9yTm9kZX1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWxdLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCJcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoaW4gdGhlIExpc3QgUmVwb3J0LiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiICYmXG5cdFx0IVtDcmVhdGlvbk1vZGUuTmV3UGFnZSwgQ3JlYXRpb25Nb2RlLklubGluZV0uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIiBpbiBjYXNlIG9mIGEgbm9uLXN1cHBvcnRlZCBtb2RlIGZvciBhIFRyZWVUYWJsZVxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBUcmVlIFRhYmxlLiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH1cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Ly8gbm8gbmF2aWdhdGlvbiBvciBubyByb3V0ZSBzcGVjaWZpZWQgLSBmYWxsYmFjayB0byBpbmxpbmUgY3JlYXRlIGlmIG9yaWdpbmFsIGNyZWF0aW9uIG1vZGUgd2FzICdOZXdQYWdlJ1xuXHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0TG9nLmVycm9yKFwiVGhlIGNyZWF0aW9uIG1vZGUgJ05ld1BhZ2UnIGlzIHVzZWQgYnV0IHRoZSBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlIGlzIG1pc3NpbmcuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSB3YXMgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNyZWF0ZUF0RW5kIHdlIGZvcmNlIGl0IHRvIGZhbHNlXG5cdFx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0TG9nLmluZm8oXCJUaGUgY3JlYXRpb24gbW9kZSB3YXMgY2hhbmdlZCBmcm9tICdOZXdQYWdlJyB0byAnSW5saW5lJyBkdWUgdG8gbWlzc2luZyBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlLlwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHQhIU1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8ICEhTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCksXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9IGAuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJyR7bmF2aWdhdGlvblRhcmdldH0nLCBcXCR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KWA7XG5cdFx0XHRvcGVuSW5OZXdUYWJQcmVzc1Byb3BlcnR5ID0gYC5vbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQoJyR7bmF2aWdhdGlvblRhcmdldH0nLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCBcIlwiLCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgO1xuXHRcdH1cblx0XHRpZiAoIW5hdmlnYXRpb25UYXJnZXQgJiYgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGUpIHtcblx0XHRcdGNvbnN0IGVkaXRhYmxlID1cblx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldClcblx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRjb25zdCBiUmVjcmVhdGVDb250ZXh0ID0gdGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IFwiLCBiUmVjcmVhdGVDb250ZXh0OiB0cnVlXCIgOiBcIlwiO1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9IGBBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsIFxcJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJyR7dGFyZ2V0UGF0aH0nLCBlZGl0YWJsZTogJHtlZGl0YWJsZX0gJHtiUmVjcmVhdGVDb250ZXh0fSB9KWA7IC8vTmVlZCB0byBhY2Nlc3MgdG8gRHJhZnRSb290IGFuZCBEcmFmdE5vZGUgISEhISEhIVxuXHRcdFx0b3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSA9IGBBUEkub25PcGVuSW5OZXdUYWJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke3RhcmdldFBhdGh9JywgbmF2TW9kZTogJ29wZW5Jbk5ld1RhYicgfSwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYDtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRvcGVuSW5OZXdUYWJQcmVzczogb3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUV4cHJlc3Npb24ocm93TmF2aWdhdGVkRXhwcmVzc2lvbiksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KFVJLklzSW5hY3RpdmUpKVxuXHR9O1xufTtcbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRpZiAoYW5ub3RhdGlvbkNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGFubm90YXRpb25Db2x1bW5zID0gW107XG5cdH1cblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdFx0Y29uc3QgZXhpc3RzID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIEluY2x1ZGUgdGV4dCBwcm9wZXJ0aWVzIGZvdW5kIGR1cmluZyBhbmFseXNpcyBvbiBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZSxcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNJbmZvXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgUHJvcGVydHkgTGFiZWwgd2hlbiBpdCdzIHJlZmVyZW5jZWQgb25seSBvbmNlIGluIGEgY29sdW1uLCBuZXcgbGFiZWwgd2lsbCBiZSB0aGUgbGFiZWwgb2YgdGhlIGNvbHVtblxuXHRcdFx0dXBkYXRlUHJvcGVydHlMYWJlbChhbm5vdGF0aW9uQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCB0aGF0IHBvaW50cyB0byBhIHRleHQgcHJvcGVydHkgKGFuZCBub3QgYSAnaGFyZCBjb2RlZCB0ZXh0JykgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZCBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyA9IG5vblNvcnRhYmxlQ29sdW1ucy5jb25jYXQocHJvcGVydHkubmFtZSk7XG5cdFx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpKSB7XG5cdFx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHQvLyBDcmVhdGUgYSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eS5cblx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdHRhYmxlQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbixcblx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHQpO1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuLyoqXG4gKiBDcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGEgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gdXNlRGF0YUZpZWxkUHJlZml4IFNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIFwiRGF0YUZpZWxkOjpcIiwgZWxzZSBpdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggXCJQcm9wZXJ0eTo6XCJcbiAqIEBwYXJhbSBhdmFpbGFibGVGb3JBZGFwdGF0aW9uIERlY2lkZXMgd2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24tc29ydGFibGUgY29sdW1uIG5hbWVzXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uSGVscGVyIGZvciB0aGUgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZVxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1xuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXSxcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz86IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbiB7XG5cdGNvbnN0IG5hbWUgPSB1c2VEYXRhRmllbGRQcmVmaXggPyByZWxhdGl2ZVBhdGggOiBgUHJvcGVydHk6OiR7cmVsYXRpdmVQYXRofWA7XG5cdGNvbnN0IGtleSA9ICh1c2VEYXRhRmllbGRQcmVmaXggPyBcIkRhdGFGaWVsZDo6XCIgOiBcIlByb3BlcnR5OjpcIikgKyByZXBsYWNlU3BlY2lhbENoYXJzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgcHJvcGVydHkpO1xuXHRjb25zdCBpc0hpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHByb3BlcnR5KTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgbGFiZWwgPSBnZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCk7XG5cdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShwcm9wZXJ0eSk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIGRhdGFUeXBlKTtcblx0Y29uc3QgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uID0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uPy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzb3J0YWJsZSA9ICghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiAhbm9uU29ydGFibGVDb2x1bW5zLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGZpbHRlcmFibGUgPSAhaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uO1xuXHRjb25zdCB0eXBlQ29uZmlnID0ge1xuXHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdH07XG5cdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhwcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0fVxuXHRjb25zdCBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyhyZWxhdGl2ZVBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRrZXk6IGtleSxcblx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0bGFiZWw6IGxhYmVsLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBnZXRMYWJlbChwcm9wZXJ0eSkgOiB1bmRlZmluZWQsXG5cdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdGF2YWlsYWJpbGl0eTogIWF2YWlsYWJsZUZvckFkYXB0YXRpb24gfHwgaXNIaWRkZW4gPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0bmFtZTogbmFtZSxcblx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0ZmlsdGVyYWJsZTogZmlsdGVyYWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/ICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkgOiBzb3J0YWJsZSxcblx0XHRpc0tleTogcHJvcGVydHkuaXNLZXksXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnIGFzIFByb3BlcnR5VHlwZUNvbmZpZyxcblx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCksXG5cdFx0cmVxdWlyZWQ6IGlzUmVxdWlyZWRDb2x1bW4oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHksIHRhYmxlQ3JlYXRpb25Nb2RlKSxcblx0XHRhZGRpdGlvbmFsTGFiZWxzOiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHNcblx0fTtcblx0X2FkZFRvb2xUaXAocHJvcGVydHksIGNvbHVtbik7XG5cdF9zZXRFeHBvcnRTZXR0aW5nc0ZvckRhdGFQb2ludChwcm9wZXJ0eSwgY29sdW1uKTtcblx0cmV0dXJuIGNvbHVtbjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIGZvciBhIGdpdmVuIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBnaXZlbiBjb2x1bW4gZnJvbSBhIGxpbmUgaXRlbSBhcyBhIGRhdGEgZmllbGQgb3IgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZVxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGxpbmtlZCB0byB0aGUgY29sdW1uIChuYW1lZCBhbHNvIGNvbXBsZXggcHJvcGVydHkpXG4gKiBAcmV0dXJucyBUaGUgZXhwb3J0IHNldHRpbmdzIGluIGEgdGhlIGdpdmVuIGNvbHVtblxuICovXG5jb25zdCBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz86IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0bGV0IHVuaXRQcm9wZXJ0eSwgdGltZXpvbmVQcm9wZXJ0eSwgdW5pdFRleHQsIHRpbWV6b25lVGV4dCwgdXRjLCBpc0FUaW1lem9uZSwgY3VycmVuY3lQcm9wZXJ0eSwgc2NhbGU7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvID8gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpIDogW107XG5cdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8gJiYgcmVsYXRlZFByb3BlcnR5TmFtZXM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGJhc2VkIG9uIHRoZSByZWxhdGVkIChjaGlsZCkgcHJvcGVydHkgaW4gY2FzZSB0aGVyZSBpcyBvbmx5IG9uZS5cblx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2UgaGF2ZSBhIHRleHQgb25seSBhbm5vdGF0aW9uIHRvIGNvbXB1dGUgdGhlIGV4cG9ydCBzZXR0aW5ncyBmcm9tIHRoZSB0ZXh0IGluc3RlYWQgb2YgdGhlIHZhbHVlXG5cdFx0Y29sdW1uID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZXNbMF1dO1xuXHR9XG5cdGNvbnN0IGRhdGFUeXBlID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUoY29sdW1uKTtcblx0aWYgKGlzUHJvcGVydHkoY29sdW1uKSkge1xuXHRcdHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkoY29sdW1uKTtcblx0XHRjdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkoY29sdW1uKTtcblx0XHR0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkoY29sdW1uKTtcblx0XHR1bml0VGV4dCA9IGdldFN0YXRpY1VuaXRPckN1cnJlbmN5KGNvbHVtbik7XG5cdFx0dGltZXpvbmVUZXh0ID0gZ2V0U3RhdGljVGltZXpvbmUoY29sdW1uKTtcblx0XHRpc0FUaW1lem9uZSA9IGlzVGltZXpvbmUoY29sdW1uKTtcblx0XHRzY2FsZSA9IGNvbHVtbi5zY2FsZTtcblx0fVxuXHR1bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy51bml0UHJvcGVydHkgPz8gdW5pdFByb3BlcnR5Py5uYW1lID8/IGN1cnJlbmN5UHJvcGVydHk/Lm5hbWU7XG5cdHRpbWV6b25lUHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy50aW1lem9uZVByb3BlcnR5ID8/IHRpbWV6b25lUHJvcGVydHk/Lm5hbWU7XG5cdHNjYWxlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncz8uc2NhbGUgPz8gc2NhbGU7XG5cdGNvbnN0IGV4cG9ydFR5cGUgPSBnZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgaXNBVGltZXpvbmUsICEhY3VycmVuY3lQcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncyk7XG5cdGlmICh0aW1lem9uZVByb3BlcnR5IHx8IChleHBvcnRUeXBlID09PSBcIkRhdGVUaW1lXCIgJiYgIXRpbWV6b25lVGV4dCkpIHtcblx0XHR1dGMgPSBmYWxzZTtcblx0fVxuXHRjb25zdCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRpbnB1dEZvcm1hdDogZ2V0RGF0ZUlucHV0Rm9ybWF0KGRhdGFUeXBlKSxcblx0XHRkZWxpbWl0ZXI6IGdldERlbGltaXRlcihkYXRhVHlwZSksXG5cdFx0c2NhbGU6IHNjYWxlLFxuXHRcdHVuaXRQcm9wZXJ0eTogdW5pdFByb3BlcnR5LFxuXHRcdHVuaXQ6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3MudW5pdCA/PyB1bml0VGV4dCxcblx0XHR0aW1lem9uZVByb3BlcnR5OiB0aW1lem9uZVByb3BlcnR5LFxuXHRcdHRpbWV6b25lOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID8/IHRpbWV6b25lVGV4dD8udG9TdHJpbmcoKSxcblx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSxcblx0XHQvL29ubHkgaW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXMsIHdyYXAgdGhlIGNlbGwgY29udGVudFx0b24gdGhlIGV4Y2VsIGV4cG9ydGVkIGZpbGVcblx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLndyYXAsXG5cdFx0dXRjOiB1dGNcblx0fTtcblx0cmV0dXJuIHJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyhleHBvcnRTZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBHZXRzIHRoZSBleHBvcnQgZm9ybWF0IHRlbXBsYXRlIGZvciBjb2x1bW5zIHdpdGggZGF0ZXMuXG4gKlxuICogQHBhcmFtIGRhdGFUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbHVtblxuICogQHJldHVybnMgVGhlIGlucHV0Rm9ybWF0XG4gKi9cbmNvbnN0IGdldERhdGVJbnB1dEZvcm1hdCA9IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBkYXRhVHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBHZXRzIHRoZSBkZWxpbWl0ZXIgaW4gbnVtZXJpYyBjb2x1bW5zLlxuICogVGhlIGRlbGltaXRlciBpcyB1c2VkIHRvIGRpc3BsYXkgdGhvdXNhbmRzIHNlcGFyYXRvciBpbiBudW1lcmljIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGRhdGFUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbHVtblxuICogQHJldHVybnMgVHJ1ZSB0byBkaXNwbGF5IHRob3VzYW5kcyBzZXBhcmF0b3IgaW4gbnVtZXJpYyBjb2x1bW5zXG4gKi9cbmNvbnN0IGdldERlbGltaXRlciA9IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZGF0YVR5cGUgPT09IFwiRWRtLkludDY0XCIgPyB0cnVlIDogdW5kZWZpbmVkO1xufTtcbi8qKlxuICpcbiAqIFJlbW92ZXMgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0IG9mIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgZXhwb3J0IHNldHRpbmdzIGNvbmZpZ3VyYXRpb25zIGZvciBhIGNvbHVtblxuICogQHJldHVybnMgVGhlIGV4cG9ydCBzZXR0aW5ncyBjb25maWd1cmF0aW9ucyB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXNcbiAqL1xuY29uc3QgcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzID0gZnVuY3Rpb24gKGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0Ly9SZW1vdmUgdW5kZWZpbmVkIHNldHRpbmdzIGZyb20gZXhwb3J0U2V0dGluZyBvYmplY3Rcblx0Zm9yIChjb25zdCBzZXR0aW5nIGluIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0aWYgKGV4cG9ydFNldHRpbmdzW3NldHRpbmcgYXMga2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3NdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBleHBvcnRTZXR0aW5nc1tzZXR0aW5nIGFzIGtleW9mIENvbHVtbkV4cG9ydFNldHRpbmdzXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xufTtcbi8qKlxuICogVXBkYXRlIHByb3BlcnR5IGxhYmVsIGluIGNhc2UgaXQncyBvbmx5IHJlZmVyZW5jZWQgaW4gb25lIGNvbHVtbi4gVGhlIGxhYmVsIG9mIHRoZSBjb2x1bW4gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IGxhYmVsLlxuICogVGhpcyB1cGRhdGUgYWxzbyBpcyBhcHBsaWVkIGZvciB0aGUgdG9vbHRpcCBhcyBpdCBpcyBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgbGFiZWxcbiAqXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZFxuICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5TGFiZWwoXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtblxuKTogdm9pZCB7XG5cdGNvbnN0IGxpbmtlZEFubm90YXRpb25Db2x1bW5zID0gYW5ub3RhdGlvbkNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aCkpO1xuXHRpZiAoXG5cdFx0bGlua2VkQW5ub3RhdGlvbkNvbHVtbnM/Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aF0gJiZcblx0XHRsaW5rZWRBbm5vdGF0aW9uQ29sdW1uc1swXS5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDFcblx0KSB7XG5cdFx0Y29sdW1uSW5mby5sYWJlbCA9IGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLmxhYmVsO1xuXHRcdGNvbHVtbkluZm8udG9vbHRpcCA9IGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLnRvb2x0aXA7XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1ucywgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgZGF0YUZpZWxkIG9yIHByb3BlcnR5IHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW4sIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5cbiAqL1xuZnVuY3Rpb24gX2lzRXhwb3J0YWJsZUNvbHVtbihzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRsZXQgcHJvcGVydHlUeXBlLCBwcm9wZXJ0eTtcblx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5ID0gKHNvdXJjZSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnMuVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkpIHtcblx0XHRpZiAoaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oc291cmNlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRwcm9wZXJ0eVR5cGUgPSBkYXRhRmllbGREZWZhdWx0UHJvcGVydHk/LiRUeXBlO1xuXHR9IGVsc2UgaWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydHkgPSBzb3VyY2U7XG5cdFx0cHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSkge1xuXHRcdFx0Ly9Gb3IgQ2hhcnRcblx0XHRcdHByb3BlcnR5VHlwZSA9IChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlO1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkICYmICFVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlLmluY2x1ZGVzKHByb3BlcnR5VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy50ZXJtID09PSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lZGlhVHlwZVwiICYmXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/LmlzVVJMICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvL0ZvciBTdHJlYW1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5VHlwZVxuXHRcdD8gIVtcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdFx0ICBdLmluY2x1ZGVzKHByb3BlcnR5VHlwZSlcblx0XHQ6IHRydWU7XG59XG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDoqLyBjb25zdGFudChmYWxzZSk7XG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ISFwcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRpZiAoZGF0YUZpZWxkR3JvdXA/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGRHcm91cC5hbm5vdGF0aW9ucy5VSS5IaWRkZW4pLCB0cnVlKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcykgPT4ge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMucHVzaChfZ2V0VmlzaWJsZUV4cHJlc3Npb24oeyB0YXJnZXRPYmplY3Q6IGlubmVyRGF0YUZpZWxkIH0gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKG9yKC4uLmZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBbcHJvcGVydHldIFByb3BlcnR5LCBEYXRhRmllbGQgb3IgTmF2aWdhdGlvbiBQcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqL1xuY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNHcm91cCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpIHx8IGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSAocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbCkge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWU7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhwcm9wZXJ0eSkpIHtcblx0XHRpZiAoISFpc0dyb3VwICYmIHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCwgW10sIHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHkuTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSlcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBwcm9wZXJ0eS5MYWJlbD8udG9TdHJpbmcoKTtcblx0fVxufTtcbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24gKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gc291cmNlLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8pKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc291cmNlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gc291cmNlLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0cmV0dXJuIGRhdGFwb2ludFRhcmdldD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvd1N0YXR1c1Zpc2liaWxpdHkoY29sTmFtZTogc3RyaW5nLCBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwPzogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cGF0aEluTW9kZWwoYHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0Y29sTmFtZSxcblx0XHRcdGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXBcblx0XHRdLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXG5cdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1uIG5hbWVzIHdoaWNoIGNhbm5vdCBiZSBzb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdLFxuXHR0YWJsZUNyZWF0aW9uTW9kZT86IENyZWF0aW9uTW9kZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVDcmVhdGlvbk1vZGVcblx0XHRcdCk7XG5cdFx0XHRjb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbSA9IGV4aXN0aW5nQ29sdW1ucy5zb21lKFxuXHRcdFx0XHQoZXhpc3RpbmdDb2x1bW4pID0+IGV4aXN0aW5nQ29sdW1uLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKG5hbWUpICYmIGV4aXN0aW5nQ29sdW1uLmlzUGFydE9mTGluZUl0ZW1cblx0XHRcdCk7XG5cdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHwgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7bmFtZX1gO1xuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXgsXG5cdFx0XHRcdC8vIFNldCBpdCB0byBoaWRkZW4gYXMgaXQgaXMgb25seSBjb25zdW1lZCBieSBDb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gcmVsYXRlZENvbHVtbi5pc1BhcnRPZkxpbmVJdGVtO1xuXHRcdFx0XHRjb2x1bW4uZmlsdGVyYWJsZSA9IGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID8/IGNvbHVtbi5maWx0ZXJhYmxlO1xuXHRcdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpICYmXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5pbmNsdWRlcyhuYW1lKSAmJiAhcmVsYXRlZENvbHVtbi5maWx0ZXJhYmxlKSB7XG5cdFx0XHQvLyBDYXNlIDQ6IFRoZSBjb2x1bW4gaXMgYSByZWZlcmVuY2VkIHRleHQgb25seSBwcm9wZXJ0eVxuXHRcdFx0Ly8gQ2FzZSA1OiBUaGUgY29sdW1uIGlzbid0IGFscmVhZHkgYXZhaWxhYmxlIGZvciBmaWx0ZXJpbmcgYXMgaXQgY291bGQgYmUgcmVmZXJlbmNlZCBvbiBhbm90aGVyIGNvbHVtbiAoZS5nLiB0ZXh0IGZpcnN0KVxuXHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXggdG8gY3JlYXRlIHRoZSB0ZXh0IHByb3BlcnR5IG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3Nlc1xuXHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiwgbmVhdGhlciBzb3J0YWJsZSBub3IgZ3JvdXBhYmxlLlxuXHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFtuYW1lXSxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0KTtcblx0XHRcdGNvbHVtbi5pc0dyb3VwYWJsZSA9IGZhbHNlO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuLyoqXG4gKiBHZXR0aW5nIHRoZSBDb2x1bW4gTmFtZVxuICogSWYgaXQgcG9pbnRzIHRvIGEgRGF0YUZpZWxkIHdpdGggb25lIHByb3BlcnR5IG9yIERhdGFQb2ludCB3aXRoIG9uZSBwcm9wZXJ0eSwgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aCkge1xuXHRcdHJldHVybiBkYXRhRmllbGQuVmFsdWU/LnBhdGg7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy5wYXRoKSB7XG5cdFx0Ly8gVGhpcyBpcyBmb3IgcmVtb3ZpbmcgZHVwbGljYXRlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlLCAnUHJvZ3Jlc3MnIFByb3BlcnR5IGlzIHJlbW92ZWQgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgRGF0YVBvaW50XG5cdFx0cmV0dXJuIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0fVxufTtcbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgdGhlIGlkZW50aWZpZWQgYWRkaXRpb25hbCBwcm9wZXJ0eSBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyB0ZWNobmljYWwgcHJvcGVydHkgaW4gdGhlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG9mIENvbXBsZXhQcm9wZXJ0eUluZm8gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGNvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZSBmcm9tIHRoZSB0YWJsZSB2aXN1YWxpemF0aW9uLlxuICogQHBhcmFtIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydHlJbmZvIG9mIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY29sdW1ucy5cbiAqL1xuY29uc3QgY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRjb25zdCBrZXkgPSBgUHJvcGVydHlfVGVjaG5pY2FsOjoke25hbWV9YDtcblx0Ly8gVmFsaWRhdGUgaWYgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBoYXNuJ3QgeWV0IGJlZW4gY3JlYXRlZCBvbiBwcmV2aW91cyBpdGVyYXRpb25zLlxuXHRjb25zdCBjb2x1bW5FeGlzdHMgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KTtcblx0Ly8gUmV0cmlldmUgdGhlIHNpbXBsZSBwcm9wZXJ0eSB1c2VkIGJ5IHRoZSBoaWRkZW4gYW5ub3RhdGlvbiwgaXQgd2lsbCBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIG1hbmRhdG9yeSBhdHRyaWJ1dGVzIG9mIG5ld2x5IGNyZWF0ZWQgdGVjaG5pY2FsIHByb3BlcnR5LiBGb3IgZS5nLiByZWxhdGl2ZVBhdGhcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHQhY29sdW1uRXhpc3RzICYmIChjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUgJiYgIWNvbHVtbi5wcm9wZXJ0eUluZm9zKSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pITtcblx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IHRlY2huaWNhbENvbHVtbjogVGVjaG5pY2FsQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRsYWJlbDogYWRkaXRpb25hbFByb3BlcnR5LmxhYmVsLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGFkZGl0aW9uYWxQcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGF2YWlsYWJpbGl0eTogXCJIaWRkZW5cIixcblx0XHRcdG5hbWU6IGtleSxcblx0XHRcdHJlbGF0aXZlUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LnJlbGF0aXZlUGF0aCxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGlzS2V5OiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBudWxsLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmFsc2UsXG5cdFx0XHRhZ2dyZWdhdGFibGU6IGZhbHNlLFxuXHRcdFx0ZXh0ZW5zaW9uOiB7XG5cdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlLFxuXHRcdFx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29sdW1ucy5wdXNoKHRlY2huaWNhbENvbHVtbik7XG5cdFx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSB0ZWNobmljYWxDb2x1bW4ubmFtZTtcblx0fVxufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YSBmaWVsZCBsYWJlbHMgaGF2ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwTmFtZSBUaGUgYERhdGFGaWVsZGAgbmFtZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgc2hvd0RhdGFGaWVsZHNMYWJlbGAgdmFsdWUgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbiAoZmllbGRHcm91cE5hbWU6IHN0cmluZywgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29sdW1ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk/LmNvbHVtbnM7XG5cdGNvbnN0IGFDb2x1bW5LZXlzID0gb0NvbHVtbnMgJiYgT2JqZWN0LmtleXMob0NvbHVtbnMpO1xuXHRyZXR1cm4gKFxuXHRcdGFDb2x1bW5LZXlzICYmXG5cdFx0ISFhQ29sdW1uS2V5cy5maW5kKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGBEYXRhRmllbGRgIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoXG4gKi9cbmNvbnN0IF9nZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aCA9IFwiXCI7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gZGF0YUZpZWxkPy5UYXJnZXQ/LnZhbHVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKSB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IW5vblNvcnRhYmxlQ29sdW1ucy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIC8vIENvbHVtbiBpcyBub3QgbWFya2VkIGFzIG5vbi1zb3J0YWJsZSB2aWEgYW5ub3RhdGlvblxuXHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbilcblx0KTtcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAhKGZpbHRlckZ1bmN0aW9ucyBhcyBTdHJpbmdbXSkuaW5jbHVkZXMoXCJ0b2xvd2VyXCIpIDogdHJ1ZTtcbn07XG5mdW5jdGlvbiBfZ2V0RmlsdGVyRnVuY3Rpb25zKENvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBGaWx0ZXJGdW5jdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRpZiAoVHlwZUd1YXJkcy5pc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9ucyA/P1xuXHRcdFx0Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9uc1xuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LCBuYW1lOiBzdHJpbmcpIHtcblx0Y29uc3QgYVNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgYlNlbWFudGljS2V5Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleXMubGVuZ3RoOyBpKyspIHtcblx0XHRhU2VtYW50aWNLZXlWYWx1ZXMucHVzaChzZW1hbnRpY0tleXNbaV0udmFsdWUpO1xuXHRcdGlmIChzZW1hbnRpY0tleXNbaV0udmFsdWUgPT09IG5hbWUpIHtcblx0XHRcdGJTZW1hbnRpY0tleUZvdW5kID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZXM6IGFTZW1hbnRpY0tleVZhbHVlcyxcblx0XHRzZW1hbnRpY0tleUZvdW5kOiBiU2VtYW50aWNLZXlGb3VuZFxuXHR9O1xufVxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IHN0cmluZ1tdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluY2x1ZGVzKHRtcCkpKSB7XG5cdFx0XHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRzUHJvcGVydHlQYXRoID0gc2VtYW50aWNLZXlWYWx1ZXNbaV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogc1Byb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBmaXJzdCBwcm9wZXJ0eSBpbiB0aGUgZmllbGRHcm91cCB0aGF0IGlzIHBhcnQgb2YgdGhlIHNlbWFudGljIGtleXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZEdyb3VwXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlWYWx1ZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGEgZmxhZyB0cnVlIGlmIGEgcHJvcGVydHkgaXMgZm91bmQgYW5kIGEgcHJvcGVydHlQYXRoLlxuICovXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgbnVsbCwgc2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdKSB7XG5cdC8vIHRoaXMgaW5mbyBpcyB1c2VkIGluIEZpZWxkSGVscGVyI2lzRHJhZnRJbmRpY2F0b3JWaXNpYmxlSW5GaWVsZEdyb3VwIHRvIHNob3cgYSBkcmFmdCBpbmRpY2F0b3IgYXQgdGhlIGVuZCBvZiBhIGZpZWxkIGdyb3VwXG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoPzogc3RyaW5nIH0gPSB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogZmFsc2UsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cCAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0KSB7XG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGlubmVyRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmXG5cdFx0XHRcdGlubmVyRGF0YUZpZWxkLlZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0YVByb3BlcnRpZXMucHVzaChpbm5lckRhdGFGaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdH1cblx0XHRcdF9wcm9wZXJ0aWVzRm91bmQgPSBfZmluZFByb3BlcnRpZXMoc2VtYW50aWNLZXlWYWx1ZXMsIGFQcm9wZXJ0aWVzKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IF9wcm9wZXJ0aWVzRm91bmQuc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRwcm9wZXJ0eVBhdGg6IF9wcm9wZXJ0aWVzRm91bmQuZmllbGRHcm91cFByb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgd2l0aCBkcmFmdEluZGljYXRvciBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEBwYXJhbSBpc0ZpZWxkR3JvdXBDb2x1bW5cbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihcblx0bmFtZTogc3RyaW5nLFxuXHRzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbik6IFBhcnRpYWw8e1xuXHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZztcblx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG59PiB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHQvL1RPRE8gd2Ugc2hvdWxkIHJhdGhlciBzdG9yZSBoYXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogbmFtZSxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSlcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHt9O1xufVxuZnVuY3Rpb24gX2dldEltcE51bWJlcihkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzKTogbnVtYmVyIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0hpZ2hcIikpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXHRpZiAoaW1wb3J0YW5jZSAmJiBpbXBvcnRhbmNlLmluY2x1ZGVzKFwiVUkuSW1wb3J0YW5jZVR5cGUvTWVkaXVtXCIpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0xvd1wiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cdHJldHVybiAwO1xufVxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGNvbnRhaW5pbmcgZGF0YXBvaW50cy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBnaXZlbiBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cblxuZnVuY3Rpb24gX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50KHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVmcm9tRFAgPSBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KTtcblx0aWYgKFxuXHRcdGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpICYmXG5cdFx0dHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzPy51bml0ICE9PSBcIiVcIlxuXHQpIHtcblx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSB0YXJnZXRWYWx1ZWZyb21EUDtcblx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgPSBcInswfS9cIiArIHRhcmdldFZhbHVlZnJvbURQO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRNYXhJbXBvcnRhbmNlKGZpZWxkczogRGF0YUZpZWxkVHlwZXNbXSk6IEltcG9ydGFuY2Uge1xuXHRpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IG1heEltcE51bWJlciA9IC0xO1xuXHRcdGxldCBpbXBOdW1iZXIgPSAtMTtcblx0XHRsZXQgRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2U7XG5cdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcblx0XHRcdGltcE51bWJlciA9IF9nZXRJbXBOdW1iZXIoZmllbGQpO1xuXHRcdFx0aWYgKGltcE51bWJlciA+IG1heEltcE51bWJlcikge1xuXHRcdFx0XHRtYXhJbXBOdW1iZXIgPSBpbXBOdW1iZXI7XG5cdFx0XHRcdERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlID0gZmllbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdH1cblx0cmV0dXJuIEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW1wb3J0YW5jZSB2YWx1ZSBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZCk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5ID8/IFtdO1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZ2hLZXlzID0gWy4uLnNlbWFudGljS2V5cywgLi4ucmVxdWlyZWRQcm9wZXJ0aWVzXS5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdC8vRXZhbHVhdGUgZGVmYXVsdCBJbXBvcnRhbmNlIGlzIG5vdCBzZXQgZXhwbGljaXRseVxuXHRsZXQgZmllbGRzV2l0aEltcG9ydGFuY2U7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Ly9JZiBhIEZpZWxkR3JvdXAgY29udGFpbnMgYSBzZW1hbnRpY0tleSBvciByZXF1aXJlZCBwcm9wZXJ0eSwgaW1wb3J0YW5jZSBzZXQgdG8gSGlnaFxuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdGlzRGF0YUZpZWxkVHlwZXMoZmllbGRHcm91cERhdGFGaWVsZCkgJiYgaGlnaEtleXMuaW5jbHVkZXMoZmllbGRHcm91cERhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIEltcG9ydGFuY2UuSGlnaDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaGFzIGFuIEltcG9ydGFuY2Ugd2UgdGFrZSBpdFxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGVsc2UgdGhlIGhpZ2hlc3QgaW1wb3J0YW5jZSAoaWYgYW55KSBpcyByZXR1cm5lZFxuXHRcdFx0XHRmaWVsZHNXaXRoSW1wb3J0YW5jZSA9IGZpZWxkR3JvdXBEYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBpdGVtPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoaWdoS2V5cy5pbmNsdWRlcygoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdD8gSW1wb3J0YW5jZS5IaWdoXG5cdFx0OiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG59XG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRjb25zdCB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFibGVDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0Z2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSlcblx0XHQpO1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChsaW5lSXRlbSkgPT4ge1xuXHRcdFx0Ly8gVE9ETzogdmFyaWFibGUgbmFtZSBzaG91bGQgYmUgZGF0YWZpZWxkIGFuZCBub3QgbGluZUl0ZW1cblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWxhdGl2ZVBhdGggPyBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoID8gZ3JvdXBQYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWApIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihuYW1lLCBzZW1hbnRpY0tleXMsIGxpbmVJdGVtKSk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgcmVsYXRpdmVQYXRoKTtcblx0XHRcdC8vIERldGVybWluZSBpZiB3ZSBuZWVkIGEgc2l0dWF0aW9ucyBpbmRpY2F0b3Jcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3BzID0gbmF2aWdhdGlvblByb3BlcnRpZXMuZmlsdGVyKFxuXHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PlxuXHRcdFx0XHRcdCFuYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TQVBPYmplY3ROb2RlVHlwZT8uTmFtZSA9PT0gXCJCdXNpbmVzc1NpdHVhdGlvblwiXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCA9IHNpdHVhdGlvbnNOYXZQcm9wcy5sZW5ndGggPj0gMSA/IHNpdHVhdGlvbnNOYXZQcm9wc1swXSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzaXR1YXRpb25zTmF2UHJvcCAmJiBmb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdC8vZXhjbHVkZSB0aGUgdHlwZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUgRXhwb3J0IChnZW5lcmF0ZXMgZXJyb3Igb24gRXhwb3J0IGFzIFBERilcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhsaW5lSXRlbSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0XHRcdH1cblx0XHRcdGxldCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChkYXRhVHlwZSkge1xuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKGxpbmVJdGVtLCBkYXRhVHlwZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0eXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdFx0XHRcdGNsYXNzTmFtZTogZGF0YVR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Li4ucHJvcGVydHlUeXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiB7IC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uY29uc3RyYWludHMgfVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHZpc3VhbFNldHRpbmdzOiBWaXN1YWxTZXR0aW5ncyA9IHt9O1xuXHRcdFx0aWYgKCFkYXRhVHlwZSB8fCAhdHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gX2lzQ29sdW1uTXVsdGlWYWx1ZWQobGluZUl0ZW0sIHRhYmxlQ29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzb3J0YWJsZSA9ICFpc011bHRpVmFsdWUgJiYgX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKTtcblx0XHRcdGNvbnN0IGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQobGluZUl0ZW0pLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBnZXRMYWJlbChsaW5lSXRlbSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4obGluZUl0ZW0pID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsOiBzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRyZXF1aXJlZDogaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcywgdGFibGVDcmVhdGlvbk1vZGUpLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0c29ydGFibGU6IHNvcnRhYmxlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPyByZWxhdGVkUHJvcGVydHlOYW1lcyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5SW5mb3M6IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDAgPyBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHR3aWR0aDogKGxpbmVJdGVtLmFubm90YXRpb25zPy5IVE1MNT8uQ3NzRGVmYXVsdHM/LndpZHRoPy52YWx1ZU9mKCkgYXMgc3RyaW5nKSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3MsXG5cdFx0XHRcdHRpbWV6b25lVGV4dDogZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lLFxuXHRcdFx0XHRpc1BhcnRPZkxpbmVJdGVtOiB0cnVlLFxuXHRcdFx0XHRpc011bHRpVmFsdWVcblx0XHRcdH07XG5cdFx0XHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKGxpbmVJdGVtKSB8fCBzTGFiZWw7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLnB1c2goLi4ucmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbik7XG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIGxpbmVJdGVtIHBvaW50cyB0byBhIG5hdmlnYXRpb24gcHJvcGVydHkgd2l0aCBhIHRleHRBcnJhbmdlbWVudCBUZXh0T25seSwgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGNvbHVtbiB3aXRoIHRoZSB2YWx1ZSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgdGV4dCBwcm9wZXJ0eSBpcyByZWZlcmVuY2VkIG9uIHRoZSByZWxhdGVkIHByb3BlcnRpZXMgb2YgdGhlIGxpbmVJdGVtLCBzbyB3aWxsIGJlIGNyZWF0ZWQgb24gdGhlIF9jcmVhdGVSZWxhdGVkQ29sdW1ucyBtZXRob2QuXG5cdFx0XHRcdGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0bGluZUl0ZW0sXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV07XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgYSBtdWx0aS12YWx1ZSwgcmVsYXRlZCBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBzb3J0ZWQgYXMgd2UgZ28gdGhyb3VnaCBhIDEtbiByZWxhdGlvblxuXHRcdFx0XHRpZiAoaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLnB1c2gocmVsYXRlZFByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdHJldHVybiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xufTtcbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1hdGNoZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRtYXRjaGVkUHJvcGVydGllcyA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbWF0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGZpZWxkIGdyb3VwIGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpZWxkR3JvdXAgVGhlIGZpZWxkR3JvdXAgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkR3JvdXAgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWRGaWVsZEdyb3VwID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRmaWVsZEdyb3VwOiBGaWVsZEdyb3VwLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZmllbGRHcm91cERhdGEgPSBmaWVsZEdyb3VwLkRhdGE7XG5cdHJldHVybiBmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0Ly8gd2UgZXhjbHVkZSBib29sZWFuIHR5cGUsIHRoZSBlbmQtdXNlciBtYXkgd2FudCB0byBrZWVwIHRoZSB1bmRlcmx5aW5nIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdFx0aWYgKGlzRGF0YUZpZWxkKGl0ZW0pICYmIGl0ZW0/LlZhbHVlPy4kdGFyZ2V0LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0aXNTdGF0aWNhbGx5TWFuZGF0b3J5KGl0ZW0pIHx8XG5cdFx0XHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShpdGVtLlZhbHVlLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIFRoZSBwcm9wZXJ0eSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWREYXRhRmllbGRGb3JBbm5vdGF0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSA9IGhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeShkYXRhRmllbGRGb3JBbm5vdGF0aW9uKTtcblx0Ly8gQ2hlY2sgaWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRzIHRvIGEgRmllbGRHcm91cFxuXHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGlmIChpc1JlcXVpcmVkRmllbGRHcm91cChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGRUYXJnZXQgYXMgRmllbGRHcm91cCwgdGFibGVDcmVhdGlvbk1vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSAoZGF0YUZpZWxkVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0cmV0dXJuIGZpZWxkR3JvdXBEYXRhLnNvbWUoKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBpbm5lckRhdGFGaWVsZCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHRcdH0pO1xuXHR9XG5cdC8qSWYgdGhlIHVuZGVybHlpbmcgZGF0YXBvaW50IGlzIGEgcmF0aW5nIGluZGljYXRvciwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIHJhdGluZyBlbXB0eSAodmFsdWUgMCkgb24gcHVycG9zZS5cblx0QmVzaWRlcywgY3VycmVudGx5LCBvbmx5IGEgZmllbGRDb250cm9sIHNldCBvbiBhIGRhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBkYXRhUG9pbnQgaGFzIGFuIGluZmx1ZW5jZSBpbiB0aGUgdGFibGUuXG5cdEFjY29yZGluZ2x5LCBpZiBhIGRhdGFwb2ludCBjb21lcyBmcm9tIGEgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB3aXRoIGEgZmllbGRDb250cm9sIHNldCBhcyBub3QgbWFuZGF0b3J5LCB0aGlzIGRhdGFQb2ludCBtdXN0IG5vdCBiZSBmbGFnZ2VkIGFzIFwicmVxdWlyZWRcIiovXG5cdGlmIChoYXNEYXRhUG9pbnRUYXJnZXQoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiYgKGRhdGFGaWVsZFRhcmdldCBhcyBEYXRhUG9pbnQpLlZpc3VhbGl6YXRpb24gIT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRpZiAoRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoaXNTdGF0aWNhbGx5TWFuZGF0b3J5KGRhdGFGaWVsZEZvckFubm90YXRpb24pKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzUmVxdWlyZWREYXRhUG9pbnQoY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkVGFyZ2V0IGFzIERhdGFQb2ludCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvcGVydHkgaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZFByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5OiBQcm9wZXJ0eSwgdGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHByb3BlcnR5LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIiAmJlxuXHRcdCFpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiZcblx0XHQoaXNTdGF0aWNhbGx5TWFuZGF0b3J5KHByb3BlcnR5KSB8fFxuXHRcdFx0KHRhYmxlQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzICYmXG5cdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YVBvaW50IGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRhdGFQb2ludCBUaGUgZGF0YVBvaW50IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhUG9pbnQgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWREYXRhUG9pbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgZGF0YVBvaW50OiBEYXRhUG9pbnQsIHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRpc1N0YXRpY2FsbHlNYW5kYXRvcnkoZGF0YVBvaW50KSB8fFxuXHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0aXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5KGRhdGFQb2ludC5WYWx1ZS4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHVuZGVybHlpbmcgY29sdW1uIGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3JlcXVpcmVkJyBwcm9wZXJ0eSBvZiB0aGUgdGFibGUgY29sdW1uLlxuICovXG5jb25zdCBpc1JlcXVpcmVkQ29sdW1uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YXJnZXQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSxcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVDcmVhdGlvbk1vZGUgfHwgQ3JlYXRpb25Nb2RlLklubGluZTtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldCkpIHtcblx0XHRyZXR1cm4gaXNSZXF1aXJlZFByb3BlcnR5KGNvbnZlcnRlckNvbnRleHQsIHRhcmdldCwgY3JlYXRpb25Nb2RlKSA/IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpIDogdW5kZWZpbmVkO1xuXHR9XG5cdC8vIENoZWNrIGlmIHRoZSBkYXRhRmllbGQgaXMgb2YgdHlwZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdGlmIChpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0KSkge1xuXHRcdHJldHVybiBpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0LCB0YXJnZXQsIGNyZWF0aW9uTW9kZSkgPyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKSA6IHVuZGVmaW5lZDtcblx0fVxuXHQvL0lmIHRoZSB1bmRlcmx5aW5nIHByb3BlcnR5IGlzIGEgYm9vbGVhbiwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXQpICYmIHRhcmdldC5WYWx1ZT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB7XG5cdFx0cmV0dXJuIGlzU3RhdGljYWxseU1hbmRhdG9yeSh0YXJnZXQpIHx8XG5cdFx0XHQoY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzICYmXG5cdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eSh0YXJnZXQuVmFsdWUuJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gYHske3Byb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSl9fWA7XG5cdFx0fSlcblx0XHQuam9pbihgJHtcIlxcblwifWApO1xufTtcbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4gPSB7fTtcblx0ZnVuY3Rpb24gaXNBbm5vdGF0aW9uQ29sdW1uKFxuXHRcdGNvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdFx0a2V5OiBzdHJpbmdcblx0KTogY29sdW1uIGlzIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5rZXkgPT09IGtleSk7XG5cdH1cblx0ZnVuY3Rpb24gaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gQ29sdW1uVHlwZS5TbG90O1xuXHR9XG5cdGZ1bmN0aW9uIGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSB1bmRlZmluZWQgJiYgISFtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZTtcblx0fVxuXHRmdW5jdGlvbiBfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSwgYW5ub3RhdGlvblRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pIHtcblx0XHRjb25zdCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGFubm90YXRpb25UYWJsZUNvbHVtbnMuZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAocHJvcC5uYW1lID09PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHByb3Auc29ydGFibGUgPSAhbm9uU29ydGFibGVDb2x1bW5zLmluY2x1ZGVzKHByb3BlcnR5LnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpKTtcblx0XHRcdFx0XHRwcm9wLmlzR3JvdXBhYmxlID0gcHJvcC5zb3J0YWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdC8vIEJhc2VUYWJsZUNvbHVtblxuXHRcdGNvbnN0IGJhc2VUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IG1hbmlmZXN0Q29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblx0XHRpZiAoaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uOiBDdXN0b21FbGVtZW50PEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KVxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHRcdFx0c2V0dGluZ3M6IG1hbmlmZXN0Q29sdW1uLnNldHRpbmdzLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShtYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zKVxuXHRcdFx0fTtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdFx0bWFuaWZlc3RDb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB0b29sdGlwVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi50b29sdGlwKSxcblx0XHRcdFx0aGVhZGVyVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi5oZWFkZXIpO1xuXHRcdFx0Y29uc3QgYmFzZU1hbmlmZXN0Q29sdW1uID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGhlYWRlcjogaGVhZGVyVGV4dCxcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UgfHwgSW1wb3J0YW5jZS5Ob25lLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24gfHwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHkgfHwgXCJEZWZhdWx0XCIsXG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcHJvcGVydHlJbmZvcyxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHByb3BlcnR5SW5mb3Ncblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGU6IF9hcHBlbmRDdXN0b21UZW1wbGF0ZShwcm9wZXJ0eUluZm9zKSxcblx0XHRcdFx0XHRcdFx0d3JhcDogISEocHJvcGVydHlJbmZvcy5sZW5ndGggPiAxKVxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0aWQ6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdG5hbWU6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdC8vTmVlZGVkIGZvciBNREM6XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHsgdGV4dExpbmVzRWRpdDogNCB9LFxuXHRcdFx0XHRpc0dyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBmYWxzZSxcblx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH0sXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXBUZXh0ID8gdG9vbHRpcFRleHQgOiBoZWFkZXJUZXh0LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiBtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRyZXF1aXJlZDpcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbi5yZXF1aXJlZCAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zLCBhbm5vdGF0aW9uQ29sdW1ucyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBBZGRzIGNvbXB1dGVkIGNvbHVtbnMgc3VjaCBhcyB0aGUgZHJhZnQgc3RhdHVzIGFuZCBzaXR1YXRpb25zIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSB0YWJsZSBjb2x1bW5zIGNvbGxlY3RlZCBzbyBmYXJcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBlbnJpY2hlZCBzZXQgb2YgdGFibGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29tcHV0ZWRDb2x1bW5zKFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVUeXBlID0gZ2V0VGFibGVUeXBlKGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyk7XG5cblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJHcmlkVGFibGVcIiAmJiB0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBUb2RheSB3ZSBvbmx5IGRvIHNvbWV0aGluZyBoZXJlIGluIGNhc2Ugb2YgZ3JpZCBvciB0cmVlIHRhYmxlXG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucztcblx0fVxuXG5cdC8vIEluIGNhc2UgYSBncmlkIHRhYmxlIG9yIHRyZWUgdGFibGUgaXMgdXNlZCwgd2UgZGlzcGxheSB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdGNvbnN0IGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCA9IHRhYmxlQ29sdW1ucy5maW5kKFxuXHRcdChjb2x1bW4pID0+IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5oYXNTaXR1YXRpb25zSW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgPT09IHRydWVcblx0KTtcblx0aWYgKGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yPy5mb3JtYXRPcHRpb25zKSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gdGhlIGZvdW5kIGNvbHVtblxuXHRcdGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yLmZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgY29sdW1uXG5cdFx0Y29uc3Qgc2l0dWF0aW9uc0luZGljYXRvckNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleTogXCJzaXR1YXRpb25zSW5kaWNhdG9yXCIsXG5cdFx0XHRuYW1lOiBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIixcblx0XHRcdHByb3BlcnR5S2V5OiBjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvci5uYW1lLFxuXHRcdFx0aXNTaXR1YXRpb25zSW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX1NJVFVBVElPTlNfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19TSVRVQVRJT05TX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQ29tcHV0ZWQsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBudWxsLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cblx0XHQvLyBQbGFjZSB0aGUgZHJhZnQgc3RhdHVzIGNvbHVtbiBhZnRlciB0aGUgZmlyc3QgdmlzaWJsZSBjb2x1bW5cblx0XHRjb25zdCBpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uOiBpbnQgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdHRhYmxlQ29sdW1ucy5zcGxpY2UoaW5kZXhPZkZpcnN0VmlzaWJsZUNvbHVtbiArIDEsIDAsIHNpdHVhdGlvbnNJbmRpY2F0b3JDb2x1bW4pO1xuXHR9XG5cblx0Ly8gSW4gY2FzZSBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBpcyB1c2VkLCB3ZSBkaXNwbGF5IHRoZSBkcmFmdCBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdC8vIFRoZSBhZGRpdGlvbmFsIGNvbHVtbiBpcyBvbmx5IGFkZGVkIGZvciB0YWJsZXMgb24gYSBMUiBhbmQgaW4gY2FzZSB0ZWhlIGVudGl0eSBpcyBkcmFmdCBlbmFibGVkIVxuXHRjb25zdCBjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkID0gdGFibGVDb2x1bW5zLmZpbmQoXG5cdFx0KGNvbHVtbikgPT4gY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdCk7XG5cdGlmIChcblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I/LmZvcm1hdE9wdGlvbnMgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0Tm9kZShjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSB8fCBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSlcblx0KSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgZHJhZnQgaW5kaWNhdG9yIGluIHRoZSBmb3VuZCBjb2x1bW5cblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IuZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgZHJhZnQgaW5kaWNhdG9yIGNvbHVtblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yQ29sdW1uOiBDb21wdXRlZFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRuYW1lOiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRwcm9wZXJ0eUtleTogY29sdW1uV2l0aERyYWZ0SW5kaWNhdG9yLm5hbWUsXG5cdFx0XHRpc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX0RSQUZUX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHRvb2x0aXA6IFwie3NhcC5mZS5pMThuPkNfRFJBRlRfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Db21wdXRlZCxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IG51bGwsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cdFx0bGV0IGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlcjogaW50ID0gMDtcblx0XHRpZiAoY29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3MgYSBzaXR1YXRpb25zIGluZGljYXRvciBjb2x1bW4sIHBsYWNlIHRoZSBkcmFmdCBzdGF0dXMgY29sdW1uIGJlZm9yZSBpdFxuXHRcdFx0Y29sdW1uSW5kZXhUb0luc2VydEFmdGVyID1cblx0XHRcdFx0dGFibGVDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiAoY29sdW1uIGFzIENvbXB1dGVkVGFibGVDb2x1bW4pLmlzU2l0dWF0aW9uc0luZGljYXRvciA9PT0gdHJ1ZSkgLSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPdGhlcndpc2UgcGxhY2UgdGhlIGRyYWZ0IHN0YXR1cyBjb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHZpc2libGUgY29sdW1uXG5cdFx0XHRjb2x1bW5JbmRleFRvSW5zZXJ0QWZ0ZXIgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdH1cblx0XHR0YWJsZUNvbHVtbnMuc3BsaWNlKGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciArIDEsIDAsIGRyYWZ0SW5kaWNhdG9yQ29sdW1uKTtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCI7XG5cdFx0XHRcdGNhc2UgXCJSZXNwb25zaXZlVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXBcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNSZXNwb25zaXZlVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICpcbiAqIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG4gKiBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmXG5cdFx0IWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpICYmXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHRhYmxlVHlwZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGxldCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnk7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0YUdyb3VwQnkgPSBhR3JvdXBCeS5zbGljZSgwLCAxKTtcblx0XHR9XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKSB7XG5cdGNvbnN0IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lID0gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gY29sdW1uLm5hbWUpO1xuXHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzIVthZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0Y29sdW1uLmFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRjb2x1bW4uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRjdXN0b21BZ2dyZWdhdGU6IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5kZWZhdWx0QWdncmVnYXRlID8/IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MubWFwKFxuXHRcdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdGhlIGNvbXBsZXggcHJvcGVydHkgdXNpbmcgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8uY29uY2F0KGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgc2V0IG9uIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCAgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHBhdGhzIG9mIHRoZSByZXN0cmljdGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBQcm9wZXJ0eVBhdGhbXSB7XG5cdHJldHVybiBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHQoY2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcztcblx0XHR9LFxuXHRcdGZhbHNlXG5cdCk7XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb3BlcnR5IGlzIGFubm90YXRlZCBhcyBhIHJlcXVpcmVkIHByb3BlcnR5LlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZFxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkobmFtZTogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdC5pbmNsdWRlcyhuYW1lKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRhZ2dyZWdhdGVzRGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVG90YWwpIHtcblx0XHRjb25zdCBhVG90YWxzID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uVG90YWw7XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdGFnZ3JlZ2F0ZXNba2V5XSA9IHt9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWdncmVnYXRlcyk7XG59XG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXTtcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdFtrZXkgaW4gXCJjcmVhdGVcIiB8IFwiZGVsZXRlXCIgfCBcInBhc3RlXCIgfCBcIm1hc3NFZGl0XCIgfCBcImluc2lnaHRzXCIgfCBcImNyZWF0aW9uUm93XCIgfCBcImN1dFwiXTogU3RhbmRhcmRBY3Rpb247XG5cdH07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzdGFuZGFyZCBhY3Rpb25zIGFuZCBhZGphY2VudCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBpbiB0aGUgZnVydGhlciBjb252ZXJzaW9uIHByb2Nlc3MuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgdGFibGUgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHZpZXdDb25maWd1cmF0aW9uIFRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgdGVtcGxhdGVkIHZpZXdcbiAqIEByZXR1cm5zIFN0YW5kYXJkIGFjdGlvbnMgYW5kIGNvbm5lY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHQpO1xuXHRjb25zdCBjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkID0gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dClcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zID0ge1xuXHRcdGN1dDogZ2V0U3RhbmRhcmRBY3Rpb25DdXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0aW5zaWdodHM6IGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KVxuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkLFxuXHRcdHN0YW5kYXJkQWN0aW9uc1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdHlwZU5hbWVQbHVyYWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWVQbHVyYWw7XG5cdGNvbnN0IHRpdGxlID0gdHlwZU5hbWVQbHVyYWwgJiYgY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHR5cGVOYW1lUGx1cmFsKSk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGhhc0Fic29sdXRlUGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwLFxuXHRcdHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pLFxuXHRcdGlkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGdldFRhYmxlSUQodmlzdWFsaXphdGlvblBhdGgpIDogZ2V0VGFibGVJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCksIFwiTGluZUl0ZW1cIik7XG5cdGNvbnN0IHRhcmdldENhcGFiaWxpdGllcyA9IGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24ubWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uXG5cdCk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKTtcblx0fSBlbHNlIGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gVG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoLCB3ZSBzZXQgdGhlIHRocmVzaG9sZCB2YWx1ZSBoaWdoZXIgZm9yIHRyZWUgdGFibGVzXG5cdFx0dGhyZXNob2xkID0gMjAwO1xuXHR9XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBpc1NlYXJjaGFibGUgPSBpc1BhdGhTZWFyY2hhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGVudGl0eVR5cGVOYW1lOiBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmVudGl0eVR5cGUgPyBlbnRpdHlTZXQuZW50aXR5VHlwZS5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGgsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0Y3JlYXRlOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgIT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIShpc0NvbnN0YW50KGlzU2VhcmNoYWJsZSkgJiYgaXNTZWFyY2hhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiBnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pLFxuXHRcdHJlcXVpcmVkUHJvcGVydGllczogZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHk/LiR0YXJnZXQ/LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIilcblx0XHRcdC5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS52YWx1ZSlcblx0fTtcbn1cbi8qKlxuICogR2V0cyB0aGUgZGF0YSB0eXBlIG9mIGEgY29sdW1uIGZvciB0aGUgZXhwb3J0LlxuICpcbiAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIGEgcHJvcGVydHksIGNvbHVtblxuICogQHBhcmFtIGlzQVRpbWV6b25lIElzIHRoZSBnaXZlbiBwcm9wZXJ0eSBhIHRpbWV6b25lXG4gKiBAcGFyYW0gaXNDdXJyZW5jeSBJcyB0aGUgZ2l2ZW4gcHJvcGVydHkgYSBjdXJyZW5jeVxuICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBhbHJlYWR5IGRldGVjdGVkIGV4cG9ydCBzZXR0aW5ncyBmcm9tIGRhdGFmaWVsZHNcbiAqIEByZXR1cm5zIFRoZSBzdXBwb3J0ZWQgZXhwb3J0IHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0RXhwb3J0RGF0YVR5cGUoXG5cdGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGlzQVRpbWV6b25lID0gZmFsc2UsXG5cdGlzQ3VycmVuY3kgPSBmYWxzZSxcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5nc1xuKTogc3RyaW5nIHtcblx0bGV0IGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0aWYgKCFkYXRhVHlwZSB8fCBleHBvcnRTZXR0aW5ncz8uZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH1cblx0aWYgKGV4cG9ydFNldHRpbmdzPy5pc0N1cnJlbmN5IHx8IGlzQ3VycmVuY3kpIHtcblx0XHRyZXR1cm4gXCJDdXJyZW5jeVwiO1xuXHR9XG5cdGlmIChpc0FUaW1lem9uZSkge1xuXHRcdHJldHVybiBcIlRpbWV6b25lXCI7XG5cdH1cblx0aWYgKGV4cG9ydFNldHRpbmdzPy53cmFwKSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9XG5cdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRlY2ltYWxcIjpcblx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdGNhc2UgXCJFZG0uRG91YmxlXCI6XG5cdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVPZlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiVGltZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiQm9vbGVhblwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG4vKipcbiAqIFNwbGl0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIHNwbGl0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IFt0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0aWYgKHNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gW107XG5cdFx0c2VsZWN0aW9uLlNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lPy52YWx1ZSA/PyBcIlwiO1xuXHRcdFx0aWYgKCFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50IDogNVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAxO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5mdW5jdGlvbiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmZyb3plbkNvbHVtbkNvdW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgdmFsdWUgZnJvbSB0aGUgdGFibGVTZXR0aW5ncyBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgVGFibGVTZXR0aW5ncyBPYmplY3RcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIHZhbHVlIG9mIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIG9yIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWRcbik6IHtcblx0ZmlsdGVyczogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG59IHtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGNvbnN0IGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+ID0ge307XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGlmICh0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHMgPSAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24ucGF0aHMgPz8gW10pLnJlZHVjZShcblx0XHRcdChmaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSwgcGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXRoLmFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdGZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aHM7XG5cdFx0XHR9LFxuXHRcdFx0W11cblx0XHQpO1xuXHRcdGlmIChxdWlja0ZpbHRlclBhdGhzLmxlbmd0aCkge1xuXHRcdFx0ZmlsdGVycy5xdWlja0ZpbHRlcnMgPSB7XG5cdFx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnNob3dDb3VudHMsXG5cdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHQvKipcblx0XHQgKiBQcm92aWRlIFNlbGVjdGlvbiBWYXJpYW50IHRvIGhpZGRlbkZpbHRlcnMgaW4gb3JkZXIgdG8gc2V0IHRoZSBTViBmaWx0ZXJzIHRvIHRoZSB0YWJsZS5cblx0XHQgKiBNREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0ICogYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdCAqIFRvIGF2b2lkIGltcGxlbWVudGluZyBzcGVjaWZpYyBMUiBmZWF0dXJlIHRvIFNBUCBGRSBNYWNybyBUYWJsZSwgdGhlIGZpbHRlcihzKSAgbm90IG1hbmFnZWQgYnkgdGhlIEZpbHRlckJhclxuXHRcdCAqIGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdGFibGUgdmlhIHBhcmFtZXRlci9jb250ZXh0IG5hbWVkIGZpbHRlcnMgYW5kIGtleSBoaWRkZW5GaWx0ZXJzLlxuXHRcdCAqL1xuXHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IHsgcGF0aHM6IFt7IGFubm90YXRpb25QYXRoOiBgQCR7c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gIH1dIH07XG5cdH1cblxuXHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShmaWx0ZXJzPy5xdWlja0ZpbHRlcnMgJiYgaGlkZVRhYmxlVGl0bGUpXG5cdH07XG59XG4vKipcbiAqIEFkZHMgdGhlIHRvb2x0aXAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBjb2x1bW4uXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIG9uIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF9hZGRUb29sVGlwKHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KSA/PyBjb2x1bW4ubGFiZWw7XG5cdGlmICh0b29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSB0b29sdGlwO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0aW9uIHdpbGwgaGF2ZSBhbiBleHByZXNzaW9uIGZvciBlbmFibGVtZW50IGdlbmVyYXRlZC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgY29udGFpbmluZyBhbiBhY3Rpb25cbiAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgZm9yIHRlbXBsYXRpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBpcyB0byBiZSBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHQvLyAxLiBBbiBhY3Rpb24gd2l0aCBhbiBvdmVybG9hZCwgdGhhdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGEgcGFyZW50IGVudGl0eS5cblx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdGxldCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IGZhbHNlO1xuXHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kKSB7XG5cdFx0XHQvLyBVbmJvdW5kIGFjdGlvbi4gSXMgcmVjb2duaXNlZCwgYnV0IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBjaGVja3MgZm9yIGlzQm91bmQgPSB0cnVlLCBzbyBub3QgZ2VuZXJhdGVkLlxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0Ly8gT3ZlcmxvYWQgYWN0aW9uXG5cdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly8gU3RhdGljIGFjdGlvblxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdXNlRW5hYmxlZEV4cHJlc3Npb247XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIHdpdGggVHJlZS1UYWJsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5mdW5jdGlvbiB1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogdm9pZCB7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0Y29uc3QgaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyIVxuXHQpO1xuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlID0gIW5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5pbmNsdWRlcyhoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTm9kZU1vdmFibGUgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc05vZGVNb3ZhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlzQ3JlYXRlRW5hYmxlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy5wcm9wZXJ0eU5hbWUgJiYgdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy52YWx1ZXMpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS52YWx1ZXM7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm5vZGVUeXBlID0ge1xuXHRcdFx0cHJvcGVydHlOYW1lOiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS5wcm9wZXJ0eU5hbWUsXG5cdFx0XHR2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdHRleHQ6IHZhbHVlc1t2YWx1ZV1cblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21GdW5jdGlvbkluZm8odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uKTogRXh0ZXJuYWxNZXRob2RDb25maWcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXZhbHVlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsYXN0RG90SW5kZXggPSB2YWx1ZS5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTE7XG5cdGNvbnN0IG1vZHVsZU5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0Y29uc3QgbWV0aG9kTmFtZSA9IHZhbHVlLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKTtcblxuXHQvLyBBZGQgdGhlIGN1c3RvbSBtb2R1bGUgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlcyBpZiBuZWNlc3Nhcnlcblx0aWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCIvZXh0ZW5zaW9uL1wiKSkge1xuXHRcdGlmICghdGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMpIHtcblx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID0gW21vZHVsZU5hbWVdO1xuXHRcdH0gZWxzZSBpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5wdXNoKG1vZHVsZU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUgfTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIG9wdGltaXN0aWMgYmF0Y2ggaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuIEByZXR1cm5zIFRydWUgaWYgT3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlzIGRpc2FibGVkXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Ly8gT3B0aW1pc3RpYyBiYXRjaCBpcyBzZXQgYnkgZGVmYXVsdFxuXHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5kaXNhYmxlUmVxdWVzdENhY2hlIHx8IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gZmFsc2UsXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogU2VsZWN0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlIDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7IC8vIFBhc3RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0ZWQgZm9yIE9QXG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBsaW5lSXRlbUFubm90YXRpb25cblx0XHQ/IGdldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHQ6IHt9O1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCB0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKTtcblx0Y29uc3QgdGFibGVSb3dNb2RlID0gX2dldFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRsZXQgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUpIHtcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID1cblx0XHRcdHR5cGVvZiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInRydWVcIlxuXHRcdFx0XHQ6IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlO1xuXHR9XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVBZGRDYXJkVG9JbnNpZ2h0czogdGFibGVTZXR0aW5ncz8uZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdGhlYWRlclZpc2libGU6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZVNldHRpbmdzLmhlYWRlcixcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogX2dldFRhYmxlU2VsZWN0aW9uTGltaXQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudDogX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlOiBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlLFxuXHRcdHNob3dSb3dDb3VudDogIXRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyAmJiAhX21hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpPy5zaG93Q291bnRzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHRkaXNhYmxlUmVxdWVzdENhY2hlOiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdGlzQ29tcGFjdFR5cGU6IF9tYW5pZmVzdFdyYXBwZXIuaXNDb21wYWN0VHlwZSgpLFxuXHRcdGJlZm9yZVJlYmluZFRhYmxlOiB0YWJsZVNldHRpbmdzLmJlZm9yZVJlYmluZFRhYmxlXG5cdH07XG5cblx0Y29uc3QgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4udGFibGVSb3dNb2RlLCAuLi5vRmlsdGVyQ29uZmlndXJhdGlvbiB9O1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRhYmxlQ29uZmlndXJhdGlvbiwgdGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkNoYW5nZSkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25DaGFuZ2UgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5zZWxlY3Rpb25DaGFuZ2UsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdH1cblx0aWYgKHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhlYWRlclZpc2libGUgPSB0YWJsZVNldHRpbmdzLmhlYWRlclZpc2libGU7XG5cdH1cblxuXHRyZXR1cm4gdGFibGVDb25maWd1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzPzogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBUYWJsZVR5cGUge1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0Ly8gaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGEgdGFibGUgdHlwZSB3ZSB3aWxsIHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy50eXBlO1xuXHR9XG5cblx0Ly8gY2hlY2sgaWYgVXBsb2FkVGFibGUgc2hhbGwgYmUgdXNlZFxuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uTWVkaWFSZXNvdXJjZT8uU3RyZWFtKSB7XG5cdFx0cmV0dXJuIFwiVXBsb2FkVGFibGVcIjtcblx0fVxuXG5cdC8vIGRlZmF1bHQgaXMgdGhlIFJlc3BvbnNpdmVUYWJsZVxuXHRyZXR1cm4gXCJSZXNwb25zaXZlVGFibGVcIjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJvcGVydHkgdXNpbmcgdGhlIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbiBzZXQgdG8gdGV4dCBvbmx5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIGNvcnJlc3BvbmRpbmcgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgY29sdW1uIHRvIGJlIGV2YWx1YXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0LlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0bGluZUl0ZW06IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IGlzUHJvcGVydHlOYXZpZ2F0ZWQgPVxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggIT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0aWYgKGlzUHJvcGVydHlOYXZpZ2F0ZWQgJiYgaXNEYXRhRmllbGQobGluZUl0ZW0pKSB7XG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0aXZlUGF0aF0gPSBsaW5lSXRlbS5WYWx1ZS4kdGFyZ2V0O1xuXHRcdG5vblNvcnRhYmxlQ29sdW1ucy5wdXNoKHJlbGF0aXZlUGF0aCk7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKGxpbmVJdGVtKSAmJiBoYXNGaWVsZEdyb3VwVGFyZ2V0KGxpbmVJdGVtKSkge1xuXHRcdChsaW5lSXRlbS5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoaXNEYXRhRmllbGQoZmllbGQpICYmIGdldERpc3BsYXlNb2RlKGZpZWxkLlZhbHVlLiR0YXJnZXQpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0Y29uc3QgaW5oZXJlZFByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdGZpZWxkLlZhbHVlLnBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgaXNJbmhlcmVkUHJvcGVydHlOYXZpZ2F0ZWQgPVxuXHRcdFx0XHRcdGluaGVyZWRQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoICE9PVxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0XHRcdFx0aWYgKGlzSW5oZXJlZFByb3BlcnR5TmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2ZpZWxkLlZhbHVlLnBhdGhdID0gZmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMucHVzaChmaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSAmJiBvVGFyZ2V0TWFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RpZ2l0U2VxdWVuY2V9YF0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IGZhbHNlXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0SW1wb3J0YW5jZSxcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0Um93U3RhdHVzVmlzaWJpbGl0eSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdGdldFR5cGVDb25maWcsXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1U0tBLFVBQVUsRUFNZjtFQUFBLFdBTktBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtFQUFBLEdBQVZBLFVBQVUsS0FBVkEsVUFBVTtFQW9NZjtFQUNBLE1BQU1DLDZCQUE2QixHQUFHLEVBQUU7RUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxlQUFlLENBQzlCQyxrQkFBNEIsRUFDNUJDLGlCQUF5QixFQUN6QkMsZ0JBQWtDLEVBQ2xDQyxlQUFnRSxFQUNoRUMsa0JBQW9ELEVBQ25DO0lBQ2pCLE1BQU1DLFlBQVksR0FBR0MseUJBQXlCLENBQUNOLGtCQUFrQixFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDdkcsTUFBTUssYUFBYSxHQUFHRixZQUFZLENBQUNHLGtCQUFrQjtJQUNyRCxNQUFNQyxlQUFlLEdBQUdDLHNCQUFzQixDQUM3Q1IsZ0JBQWdCLENBQUNTLCtCQUErQixDQUFDVixpQkFBaUIsQ0FBQyxDQUFDVyxPQUFPLEVBQzNFVixnQkFBZ0IsRUFDaEJHLFlBQVksQ0FBQ0EsWUFBWSxFQUN6QkQsa0JBQWtCLEVBQ2xCLElBQUksRUFDSkcsYUFBYSxDQUNiO0lBQ0Q7SUFDQSxNQUFNTSxXQUFXLEdBQUdSLFlBQVksQ0FBQ0EsWUFBWSxDQUFDUyxNQUFNLENBQUVDLENBQUMsSUFBS0EsQ0FBQyxDQUFDQyxJQUFJ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
|
|
3196
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwic2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJ0YWJsZUFjdGlvbnMiLCJnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsInBhc3RlIiwiY3V0IiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJrZXkiLCJzdGFydHNXaXRoIiwibm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwid2lkdGgiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJhZGRDb21wdXRlZENvbHVtbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJjb2x1bW4iLCJ0YWJsZUNvbHVtbiIsInVuaXQiLCJhZGQiLCJjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJyZXN1bHQiLCJwcm9wZXJ0eUluZm9zIiwicmVsYXRpdmVQYXRoIiwicmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImhhcyIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJmb3VuZENvbHVtbiIsImZpbmRDb2x1bW5CeVBhdGgiLCJwdXNoIiwibGVuZ3RoIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImVuYWJsZUFuYWx5dGljcyIsImVuYWJsZSRzZWxlY3QiLCJlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJhZ2dyZWdhdGVzIiwiX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVCYXNpY1NlYXJjaCIsImluY2x1ZGVzIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJzdHJlYW1Qcm9wZXJ0eSIsIlVJIiwiTWVkaWFSZXNvdXJjZSIsIlN0cmVhbSIsIiR0YXJnZXQiLCJ1cGxvYWRBY3Rpb24iLCJ1cGxvYWRUYWJsZSIsInN0cmVhbSIsImZpbGVOYW1lIiwiQ29yZSIsIkNvbnRlbnREaXNwb3NpdGlvbiIsIkZpbGVuYW1lIiwicGF0aCIsImFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJ0b1N0cmluZyIsIm1heExlbmd0aCIsImNsZWFyU2VsZWN0aW9uT25GaWx0ZXIiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbkNvbHVtbiIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJvQ29sdW1uIiwib1RhYmxlQ29sdW1uIiwib1Byb3BlcnR5Iiwib1Byb3AiLCJvVW5pdCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsIm9UaW1lem9uZSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5Iiwic1RpbWV6b25lIiwiQ29tbW9uIiwiVGltZXpvbmUiLCJvVW5pdENvbHVtbiIsInNVbml0IiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJ1bml0VGV4dCIsIm9UaW1lem9uZUNvbHVtbiIsInRpbWV6b25lIiwidGltZXpvbmVUZXh0IiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiVGV4dCIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwib1RleHRDb2x1bW4iLCJ0ZXh0QXJyYW5nZW1lbnQiLCJ0ZXh0UHJvcGVydHkiLCJtb2RlIiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsIlNlbWFudGljS2V5IiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiVHlwZU5hbWUiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJwYXJhbXMiLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwic2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSIsInN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIiwidGFibGVBbm5vdGF0aW9uIiwiZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJKU09OIiwic3RyaW5naWZ5Iiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJoZWFkZXJJbmZvVGl0bGUiLCJzZW1hbnRpY0tleXMiLCJoZWFkZXIiLCJoZWFkZXJWaXNpYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImlzQmxhbmtUYWJsZSIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJjcmVhdGlvbk1vZGUiLCJBY3Rpb25IZWxwZXIiLCJnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aCIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsInVwZGF0YWJsZSIsImlzVXBkYXRhYmxlIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsImlzQ29uc3RhbnQiLCJleHByZXNzaW9uIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJfdHlwZSIsInVwZGF0YWJsZUV4cHJlc3Npb24iLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJBY3Rpb25UYXJnZXQiLCJpc0JvdW5kIiwic291cmNlRW50aXR5VHlwZSIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsInZhbHVlT2YiLCJIaWRkZW4iLCJlcXVhbCIsImdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwiLCJnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24iLCJzb3VyY2UiLCJjb25zdGFudCIsInN1YnN0cmluZyIsImluZGV4T2YiLCJzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJzcGxpdCIsIm5hdmlnYXRpb25QYXRoIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJwYXJ0bmVyIiwicGF0aEluTW9kZWwiLCJzbGljZSIsInVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQiLCJkYXRhRmllbGRJZCIsInNvbWUiLCJhY3Rpb25LZXkiLCJyZXF1aXJlc1NlbGVjdGlvbiIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbklkIiwiZ2VuZXJhdGUiLCJBY3Rpb24iLCJTZW1hbnRpY09iamVjdCIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiY3VzdG9tQWN0aW9ucyIsInJlZHVjZSIsImFjdGlvbiIsIm1lbnUiLCJtZW51QWN0aW9uIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiZ2V0U2VsZWN0aW9uTW9kZSIsImlzRW50aXR5U2V0IiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uIiwiY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsIlNlbGVjdGlvbk1vZGUiLCJOb25lIiwiRm9yY2VNdWx0aSIsIk11bHRpIiwiRm9yY2VTaW5nbGUiLCJTaW5nbGUiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJjb21waWxlRXhwcmVzc2lvbiIsImJNYXNzRWRpdEVuYWJsZWQiLCJBdXRvIiwiYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJvciIsImlmRWxzZSIsImFuZCIsIklzRWRpdGFibGUiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJzRW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiX3VzZUVuYWJsZWRFeHByZXNzaW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJub3QiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwidGV4dCIsIkxhYmVsIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJEZXRlcm1pbmluZyIsInRhYmxlQWN0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJMaXN0UmVwb3J0IiwiQ3JlYXRpb25Nb2RlIiwiTmV3UGFnZSIsIkV4dGVybmFsIiwiTG9nIiwid2FybmluZyIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwidGFyZ2V0QW5ub3RhdGlvbnNDb21tb24iLCJ0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24iLCJTZXNzaW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsImVycm9yIiwiaW5mbyIsIl9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwidGFibGVUeXBlIiwicHJlc3NQcm9wZXJ0eSIsIm9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwiZWRpdGFibGUiLCJiUmVjcmVhdGVDb250ZXh0Iiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsInByZXNzIiwib3BlbkluTmV3VGFiUHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJJc0luYWN0aXZlIiwiY29sdW1uc1RvQmVDcmVhdGVkIiwibm9uU29ydGFibGVDb2x1bW5zIiwidGFibGVDcmVhdGlvbk1vZGUiLCJ0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24iLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uIiwiY29sdW1uSW5mbyIsImdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkiLCJleHBvcnRTZXR0aW5ncyIsImRhdGFQb2ludFRhcmdldFZhbHVlIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJ1cGRhdGVQcm9wZXJ0eUxhYmVsIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJyZWxhdGVkQ29sdW1ucyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJ1c2VEYXRhRmllbGRQcmVmaXgiLCJhdmFpbGFibGVGb3JBZGFwdGF0aW9uIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc0hpZGRlbiIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJsYWJlbCIsImdldExhYmVsIiwiZGF0YVR5cGUiLCJnZXREYXRhRmllbGREYXRhVHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24iLCJzb3J0YWJsZSIsImZpbHRlcmFibGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiY29uc3RyYWludHMiLCJfaXNFeHBvcnRhYmxlQ29sdW1uIiwiY3JlYXRlQ29sdW1uRXhwb3J0U2V0dGluZ3MiLCJjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiQW5ub3RhdGlvbiIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwicmVxdWlyZWQiLCJpc1JlcXVpcmVkQ29sdW1uIiwiYWRkaXRpb25hbExhYmVscyIsIl9hZGRUb29sVGlwIiwiX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50IiwidW5pdFByb3BlcnR5IiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImlzQVRpbWV6b25lIiwiY3VycmVuY3lQcm9wZXJ0eSIsInNjYWxlIiwiaXNQcm9wZXJ0eSIsImdldFN0YXRpY1VuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJpc1RpbWV6b25lIiwiZXhwb3J0VHlwZSIsImdldEV4cG9ydERhdGFUeXBlIiwiaW5wdXRGb3JtYXQiLCJnZXREYXRlSW5wdXRGb3JtYXQiLCJkZWxpbWl0ZXIiLCJnZXREZWxpbWl0ZXIiLCJ0ZW1wbGF0ZSIsIndyYXAiLCJyZW1vdmVVbmRlZmluZWRGcm9tRXhwb3J0U2V0dGluZ3MiLCJzZXR0aW5nIiwibGlua2VkQW5ub3RhdGlvbkNvbHVtbnMiLCJjb2wiLCJ0b29sdGlwIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5IiwiVGFyZ2V0IiwiTWVkaWFUeXBlIiwidGVybSIsImlzVVJMIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZGF0YUZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJEYXRhIiwiaW5uZXJEYXRhRmllbGQiLCJkYXRhRmllbGREZWZhdWx0IiwiaXNEYXRhRmllbGRUeXBlcyIsIl9nZXRUb29sdGlwIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSIsImNvbE5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsImlzUGFydE9mTGluZUl0ZW0iLCJleGlzdGluZ0NvbHVtbiIsIm5ld05hbWUiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSIsInJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwIiwiY29sdW1uRXhpc3RzIiwiYWRkaXRpb25hbFByb3BlcnR5IiwidGVjaG5pY2FsQ29sdW1uIiwiYWdncmVnYXRhYmxlIiwiZXh0ZW5zaW9uIiwidGVjaG5pY2FsbHlHcm91cGFibGUiLCJ0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSIsIl9nZXRTaG93RGF0YUZpZWxkc0xhYmVsIiwiZmllbGRHcm91cE5hbWUiLCJvQ29sdW1ucyIsImFDb2x1bW5LZXlzIiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsImxhc3RJbmRleE9mIiwiX2lzQ29sdW1uTXVsdGlWYWx1ZWQiLCJwcm9wZXJ0eU9iamVjdFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiX2lzQ29sdW1uU29ydGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJmaWx0ZXJGdW5jdGlvbnMiLCJfZ2V0RmlsdGVyRnVuY3Rpb25zIiwiaXNBcnJheSIsIkNvbnZlcnRlckNvbnRleHQiLCJUeXBlR3VhcmRzIiwiRmlsdGVyRnVuY3Rpb25zIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNFZGl0IiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyIsImFTZW1hbnRpY0tleVZhbHVlcyIsImJTZW1hbnRpY0tleUZvdW5kIiwiaSIsInNlbWFudGljS2V5Rm91bmQiLCJfZmluZFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleVZhbHVlcyIsImZpZWxkR3JvdXBQcm9wZXJ0aWVzIiwic2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCIsInNQcm9wZXJ0eVBhdGgiLCJ0bXAiLCJmaWVsZEdyb3VwUHJvcGVydHlQYXRoIiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cCIsImFQcm9wZXJ0aWVzIiwiX3Byb3BlcnRpZXNGb3VuZCIsImdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbiIsInNlbWFudGljS2V5Iiwic2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJzaG93RXJyb3JPYmplY3RTdGF0dXMiLCJoYXNEcmFmdEluZGljYXRvciIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiX2dldERhdGFGaWVsZEltcG9ydGFuY2UiLCJ0YXJnZXRWYWx1ZWZyb21EUCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0IiwiX2dldE1heEltcG9ydGFuY2UiLCJmaWVsZHMiLCJtYXhJbXBOdW1iZXIiLCJpbXBOdW1iZXIiLCJEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSIsImZpZWxkIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwiaGlnaEtleXMiLCJmaWVsZHNXaXRoSW1wb3J0YW5jZSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImRhdGFGaWVsZFRhcmdldCIsImZpZWxkR3JvdXBEYXRhIiwiZmllbGRHcm91cERhdGFGaWVsZCIsIkhpZ2giLCJpdGVtIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwiZ2V0VGFibGVUeXBlIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ0YWJsZUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImxpbmVJdGVtIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJzTGFiZWwiLCJpc0ZpZWxkR3JvdXBDb2x1bW4iLCJwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInNpdHVhdGlvbnNOYXZQcm9wcyIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzQ29sbGVjdGlvbiIsIlNBUE9iamVjdE5vZGVUeXBlIiwiTmFtZSIsInNpdHVhdGlvbnNOYXZQcm9wIiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsInZpc3VhbFNldHRpbmdzIiwid2lkdGhDYWxjdWxhdGlvbiIsImlzTXVsdGlWYWx1ZSIsIkZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkhUTUw1IiwiQ3NzRGVmYXVsdHMiLCJzVG9vbHRpcCIsImNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkiLCJyZWxhdGVkUHJvcGVydHlOYW1lIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZSIsIl9nZXRQcm9wZXJ0eU5hbWVzIiwibWF0Y2hlZFByb3BlcnRpZXMiLCJyZXNvbHZlUGF0aCIsImlzUmVxdWlyZWRGaWVsZEdyb3VwIiwiZmllbGRHcm91cCIsImlzRGF0YUZpZWxkIiwiaXNTdGF0aWNhbGx5TWFuZGF0b3J5IiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5IiwiaXNSZXF1aXJlZERhdGFGaWVsZEZvckFubm90YXRpb24iLCJkYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSIsImhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSIsImhhc0ZpZWxkR3JvdXBUYXJnZXQiLCJoYXNEYXRhUG9pbnRUYXJnZXQiLCJWaXN1YWxpemF0aW9uIiwiaXNSZXF1aXJlZERhdGFQb2ludCIsImlzUmVxdWlyZWRQcm9wZXJ0eSIsImlzUmF0aW5nVmlzdWFsaXphdGlvbkZyb21EYXRhRmllbGREZWZhdWx0IiwiZGF0YVBvaW50IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiaW50ZXJuYWxDb2x1bW5zIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaXNTbG90Q29sdW1uIiwibWFuaWZlc3RDb2x1bW4iLCJTbG90IiwiaXNDdXN0b21Db2x1bW4iLCJfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyIsImFubm90YXRpb25UYWJsZUNvbHVtbnMiLCJwcm9wIiwicmVwbGFjZSIsInZhbGlkYXRlS2V5IiwiYmFzZVRhYmxlQ29sdW1uIiwiQWZ0ZXIiLCJwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJ0b29sdGlwVGV4dCIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJoZWFkZXJUZXh0IiwiYmFzZU1hbmlmZXN0Q29sdW1uIiwiSG9yaXpvbnRhbEFsaWduIiwiQmVnaW4iLCJpZCIsImN1c3RvbVRhYmxlQ29sdW1uIiwibWVzc2FnZSIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiTWFuaWZlc3QiLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9uQ29sdW1ucyIsIkludmFsaWRLZXkiLCJjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvciIsInNpdHVhdGlvbnNJbmRpY2F0b3JDb2x1bW4iLCJwcm9wZXJ0eUtleSIsImlzU2l0dWF0aW9uc0luZGljYXRvciIsIkNvbXB1dGVkIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uIiwiZmluZEluZGV4Iiwic3BsaWNlIiwiY29sdW1uV2l0aERyYWZ0SW5kaWNhdG9yIiwiaXNEcmFmdE5vZGUiLCJpc0RyYWZ0Um9vdCIsImRyYWZ0SW5kaWNhdG9yQ29sdW1uIiwiaXNEcmFmdEluZGljYXRvciIsImNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImFnZ3JlZ2F0ZSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJsZXZlbCIsIkluaXRpYWxFeHBhbnNpb25MZXZlbCIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJncm91cExldmVscyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiIsImNhcGFiaWxpdGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIlRvdGFsIiwiYVRvdGFscyIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldEN1dFZpc2liaWxpdHkiLCJnZXREZWxldGVWaXNpYmlsaXR5IiwibWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwiZ2V0Q3JlYXRpb25Sb3ciLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwidGl0bGUiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiZ2V0VGFibGVJRCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsImVudGl0eU5hbWUiLCJlbnRpdHlUeXBlTmFtZSIsImNvbGxlY3Rpb24iLCJyb3ciLCJpc0luRGlzcGxheU1vZGUiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwiaXNDdXJyZW5jeSIsImV4cG9ydERhdGFUeXBlIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsIl9nZXRNdWx0aVNlbGVjdE1vZGUiLCJtdWx0aVNlbGVjdE1vZGUiLCJzZWxlY3RBbGwiLCJ1c2VJY29uVGFiQmFyIiwiX2dldFRhYmxlTW9kZSIsImlzVGVtcGxhdGVMaXN0UmVwb3J0Iiwicm93Q291bnRNb2RlIiwicm93Q291bnQiLCJfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQiLCJfdGFibGVUeXBlIiwiX3RhYmxlU2V0dGluZ3MiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsIl9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0Iiwic2VsZWN0aW9uTGltaXQiLCJfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsIl9nZXRFbmFibGVFeHBvcnQiLCJlbmFibGVQYXN0ZSIsImVuYWJsZUV4cG9ydCIsIl9nZXRGcm96ZW5Db2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50IiwiX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImhpZGVUYWJsZVRpdGxlIiwiZmlsdGVycyIsInF1aWNrVmFyaWFudFNlbGVjdGlvbiIsInF1aWNrRmlsdGVyUGF0aHMiLCJmaWx0ZXJQYXRocyIsInF1aWNrRmlsdGVycyIsInNob3dDb3VudHMiLCJoaWRkZW5GaWx0ZXJzIiwibmF2UHJvcGVydHkiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJzb3VyY2VUeXBlIiwicGFyYW1ldGVycyIsInVwZGF0ZVRyZWVUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInRhYmxlQ29uZmlndXJhdGlvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJpc05vZGVNb3ZhYmxlIiwiZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvIiwiaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwiaXNDcmVhdGVFbmFibGVkIiwibm9kZVR5cGUiLCJsYXN0RG90SW5kZXgiLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCIsImRpc2FibGVSZXF1ZXN0Q2FjaGUiLCJjaGVja0NvbmRlbnNlZExheW91dCIsIl9tYW5pZmVzdFdyYXBwZXIiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwidGVtcGxhdGVUeXBlIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJvRmlsdGVyQ29uZmlndXJhdGlvbiIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsInRhYmxlUm93TW9kZSIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJvQ29uZmlndXJhdGlvbiIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJlbmFibGVNYXNzRWRpdCIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwic2hvd1Jvd0NvdW50IiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsImlzQ29tcGFjdFR5cGUiLCJiZWZvcmVSZWJpbmRUYWJsZSIsInNlbGVjdGlvbkNoYW5nZSIsImlzUHJvcGVydHlOYXZpZ2F0ZWQiLCJpbmhlcmVkUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNJbmhlcmVkUHJvcGVydHlOYXZpZ2F0ZWQiLCJvVGFyZ2V0TWFwcGluZyIsImlzVHlwZURlZmluaXRpb24iLCJFRE1fVFlQRV9NQVBQSU5HIiwidW5kZXJseWluZ1R5cGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsInBhcnNlQXNTdHJpbmciLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY0tleSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q3JpdGljYWxpdHksXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBsZXhQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyxcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHksXG5cdGdldERhdGFGaWVsZERhdGFUeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdFBhdGgsXG5cdGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQsXG5cdGhhc0RhdGFQb2ludFRhcmdldCxcblx0aGFzRmllbGRHcm91cFRhcmdldCxcblx0aXNEYXRhRmllbGQsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0aXNEYXRhRmllbGRUeXBlcyxcblx0aXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCxcblx0aXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgRW50aXR5LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlLCByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFR5cGVHdWFyZHMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHtcblx0aXNBbm5vdGF0aW9uT2ZUeXBlLFxuXHRpc05hdmlnYXRpb25Qcm9wZXJ0eSxcblx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHksXG5cdGlzVHlwZURlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHtcblx0ZW5oYW5jZURhdGFNb2RlbFBhdGgsXG5cdGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uLFxuXHRnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhTZWFyY2hhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGUsXG5cdHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgdHlwZSBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSwgaXNTdGF0aWNhbGx5TWFuZGF0b3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldFN0YXRpY1RpbWV6b25lLFxuXHRnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSxcblx0aXNUaW1lem9uZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0VGFibGVDb2x1bW5TZXR0aW5ncyxcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0SG9yaXpvbnRhbEFsaWduLFxuXHRJbXBvcnRhbmNlLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHtcblx0U3RhbmRhcmRBY3Rpb25LZXlzLFxuXHRnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGdldENyZWF0aW9uUm93LFxuXHRnZXRDdXRWaXNpYmlsaXR5LFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0TWFzc0VkaXRWaXNpYmlsaXR5LFxuXHRnZXRSZXN0cmljdGlvbnMsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkN1dCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uUGFzdGUsXG5cdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCxcblx0aXNJbkRpc3BsYXlNb2RlXG59IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuXG50eXBlIFVwbG9hZFRhYmxlU2V0dGluZ3MgPSB7XG5cdHN0cmVhbTogc3RyaW5nO1xuXHRmaWxlTmFtZT86IHN0cmluZztcblx0YWNjZXB0YWJsZU1lZGlhVHlwZXM/OiBzdHJpbmc7XG5cdG1heExlbmd0aD86IGludDtcblx0dXBsb2FkQWN0aW9uPzogU3RhbmRhcmRBY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRvcGVuSW5OZXdUYWJQcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhbjtcblx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0ZW50aXR5VHlwZU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dXBsb2FkVGFibGU/OiBVcGxvYWRUYWJsZVNldHRpbmdzO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3IgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlcm5hbE1ldGhvZENvbmZpZyA9IHtcblx0bW9kdWxlTmFtZTogc3RyaW5nO1xuXHRtZXRob2ROYW1lOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHtcblx0aXNEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzVXBkYXRhYmxlOiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdHBhdGhzOiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0fVtdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRkaXNhYmxlUmVxdWVzdENhY2hlOiBib29sZWFuO1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRmcm96ZW5Db2x1bW5Db3VudD86IG51bWJlcjtcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0cm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7XG5cdHJvd0NvdW50PzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudD86IG51bWJlcjtcblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0NvbXBhY3RUeXBlPzogYm9vbGVhbjtcblx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGU/OiBib29sZWFuO1xuXHRlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdG5vZGVUeXBlPzoge1xuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdHZhbHVlczogeyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdO1xuXHR9O1xuXHRjcmVhdGVFbmFibGVtZW50PzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdGlzTm9kZU1vdmFibGU/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0c2VsZWN0aW9uQ2hhbmdlPzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdGFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXM/OiBzdHJpbmdbXTtcblx0YmVmb3JlUmViaW5kVGFibGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIiB8IFwiVXBsb2FkVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlIChDdXN0b20gQ29sdW1uKVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIixcblx0Q29tcHV0ZWQgPSBcIkNvbXB1dGVkXCJcbn1cbi8vIEN1c3RvbSBDb2x1bW4gZnJvbSBNYW5pZmVzdFxuZXhwb3J0IHR5cGUgTWFuaWZlc3REZWZpbmVkQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uICYge1xuXHR0eXBlPzogQ29sdW1uVHlwZS5EZWZhdWx0O1xufTtcbi8vIFNsb3QgQ29sdW1uIGZyb20gQnVpbGRpbmcgQmxvY2tcbmV4cG9ydCB0eXBlIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU6IENvbHVtblR5cGUuU2xvdDtcbn07XG4vLyBQcm9wZXJ0aWVzIGFsbCBDb2x1bW5UeXBlcyBoYXZlOlxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbVxuXHR3aWR0aD86IHN0cmluZztcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXHRpbXBvcnRhbmNlPzogSW1wb3J0YW5jZTtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xufTtcbi8vIFByb3BlcnRpZXMgb24gQ3VzdG9tIENvbHVtbnMgYW5kIFNsb3QgQ29sdW1uc1xuZXhwb3J0IHR5cGUgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xuXHRpc0dyb3VwYWJsZTogYm9vbGVhbjtcblx0aXNOYXZpZ2FibGU6IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH07XG5cdHByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0cmVxdWlyZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVkVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0cHJvcGVydHlLZXk6IHN0cmluZztcblx0aXNEcmFmdEluZGljYXRvcj86IGJvb2xlYW47XG5cdGlzU2l0dWF0aW9uc0luZGljYXRvcj86IGJvb2xlYW47XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZSB8IG51bGw7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXSB8IG51bGw7XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHRjbGlwYm9hcmRTZXR0aW5ncz86IE9iamVjdCB8IG51bGw7XG5cdHJlcXVpcmVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlQ29uc3RyYWludHMgPSBQYXJ0aWFsPHtcblx0c2NhbGU6IG51bWJlcjtcblx0cHJlY2lzaW9uOiBudW1iZXI7XG5cdG1heExlbmd0aDogbnVtYmVyO1xuXHRudWxsYWJsZTogYm9vbGVhbjtcblx0bWluaW11bTogc3RyaW5nO1xuXHRtYXhpbXVtOiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZTogYm9vbGVhbjtcbn0+O1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRwYXJzZUFzU3RyaW5nOiBib29sZWFuO1xuXHRlbXB0eVN0cmluZzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGJvb2xlYW47XG59PjtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHR0eXBlSW5zdGFuY2U/OiB1bmtub3duO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcbn07XG5leHBvcnQgdHlwZSBDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IFBhcnRpYWw8e1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHR3cmFwOiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlucHV0Rm9ybWF0OiBzdHJpbmc7XG5cdGZvcm1hdDogc3RyaW5nO1xuXHRzY2FsZTogbnVtYmVyO1xuXHRkZWxpbWl0ZXI6IGJvb2xlYW47XG5cdHVuaXQ6IHN0cmluZztcblx0dW5pdFByb3BlcnR5OiBzdHJpbmc7XG5cdHRpbWV6b25lOiBzdHJpbmc7XG5cdHRpbWV6b25lUHJvcGVydHk6IHN0cmluZztcblx0dXRjOiBib29sZWFuO1xuXHRkYXRhUG9pbnRUYXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRpc0N1cnJlbmN5OiBib29sZWFuO1xufT47XG4vLyBQcm9wZXJ0aWVzIGZvciBBbm5vdGF0aW9uIENvbHVtbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdGlzR3JvdXBhYmxlPzogYm9vbGVhbjtcblx0dW5pdD86IHN0cmluZztcblx0dW5pdFRleHQ/OiBzdHJpbmc7XG5cdHRpbWV6b25lVGV4dD86IHN0cmluZztcblx0dGltZXpvbmU/OiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdGZpbHRlcmFibGU/OiBib29sZWFuO1xuXHRleHBvcnRTZXR0aW5ncz86IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbDtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogUHJvcGVydHlUeXBlQ29uZmlnO1xuXHRpc1BhcnRPZkxpbmVJdGVtPzogYm9vbGVhbjsgLy8gdGVtcG9yYXJ5IGluZGljYXRvciB0byBvbmx5IGFsbG93IGZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hlbiB0aGV5J3JlIHBhcnQgb2YgYSBsaW5lIGl0ZW1cblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xuXHRleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZT86IHN0cmluZztcblx0YWdncmVnYXRhYmxlPzogYm9vbGVhbjtcblx0ZXh0ZW5zaW9uPzogRXh0ZW5zaW9uRm9yQW5hbHl0aWNzO1xuXHRpc011bHRpVmFsdWU/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEV4dGVuc2lvbkZvckFuYWx5dGljcyA9IHtcblx0Y3VzdG9tQWdncmVnYXRlPzoge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcbn07XG5leHBvcnQgdHlwZSBUZWNobmljYWxDb2x1bW4gPSBBbm5vdGF0aW9uVGFibGVDb2x1bW4gJiB7XG5cdGV4dGVuc2lvbj86IHtcblx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogYm9vbGVhbjtcblx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogYm9vbGVhbjtcblx0fTtcbn07XG5leHBvcnQgdHlwZSBWaXN1YWxTZXR0aW5ncyA9IHtcblx0d2lkdGhDYWxjdWxhdGlvbj86IFdpZHRoQ2FsY3VsYXRpb247XG59O1xuZXhwb3J0IHR5cGUgV2lkdGhDYWxjdWxhdGlvbiA9IG51bGwgfCB7XG5cdG1pbldpZHRoPzogbnVtYmVyO1xuXHRtYXhXaWR0aD86IG51bWJlcjtcblx0ZGVmYXVsdFdpZHRoPzogbnVtYmVyO1xuXHR0cnVuY2F0ZUxhYmVsPzogYm9vbGVhbjtcblx0Z2FwPzogbnVtYmVyO1xuXHQvLyBvbmx5IHJlbGV2YW50IGZvciBjb21wbGV4IHR5cGVzXG5cdGV4Y2x1ZGVQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHZlcnRpY2FsQXJyYW5nZW1lbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uIHwgQ29tcHV0ZWRUYWJsZUNvbHVtbjtcbmV4cG9ydCB0eXBlIE1hbmlmZXN0Q29sdW1uID0gQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+O1xuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdGFnZ3JlZ2F0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPjtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlQmFzaWNTZWFyY2g/OiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xuXHRoZWFkZXJJbmZvVGl0bGU6IHN0cmluZztcblx0c2VtYW50aWNLZXlzOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRlbmFibGUkc2VsZWN0OiBib29sZWFuO1xuXHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IGJvb2xlYW47XG5cdGlzSW5zaWdodHNFbmFibGVkPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0Y2xlYXJTZWxlY3Rpb25PbkZpbHRlcjogYm9vbGVhbjtcbn07XG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG4vLyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBvcGVuIGluIG5ldyB0YWJzIHNpbXVsdGFub3VzbHlcbmNvbnN0IHNlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFiID0gMTA7XG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHN0YW5kYXJkLCBhbm5vdGF0aW9uLWJhc2VkLCBhbmQgbWFuaWZlc3QtYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzdGFuZGFyZEFjdGlvbnM6IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25bXCJzdGFuZGFyZEFjdGlvbnNcIl0sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZGVuQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dHJ1ZSxcblx0XHRoaWRkZW5BY3Rpb25zXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gW1xuXHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGUsXG5cdFx0Li4uY29weUFjdGlvbnMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRzdGFuZGFyZEFjdGlvbnMubWFzc0VkaXQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmluc2lnaHRzLFxuXHRcdC8vIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIG5vdCB0ZW1wbGF0ZWQgYXMgYnV0dG9uc1xuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdyxcblx0XHRzdGFuZGFyZEFjdGlvbnMucGFzdGUsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmN1dFxuXHRdIGFzIEJhc2VBY3Rpb25bXTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdGxldCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucywgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywge1xuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBjb2x1bW5zLCBhbm5vdGF0aW9uLWJhc2VkIGFzIHdlbGwgYXMgbWFuaWZlc3QtYmFzZWQuXG4gKiBUaGV5IGFyZSBzb3J0ZWQgYW5kIHNvbWUgcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gdmlhIHRoZSBtYW5pZmVzdCAoY2hlY2sgb3V0IHRoZSBrZXlzIHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuKS5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdGNvbnN0IHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGFubm90YXRpb25Db2x1bW5zIGFzIFRhYmxlQ29sdW1uW10sXG5cdFx0bWFuaWZlc3RDb2x1bW5zIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VGFibGVDb2x1bW4+Pixcblx0XHR7XG5cdFx0XHR3aWR0aDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0aW1wb3J0YW5jZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGhvcml6b250YWxBbGlnbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0fVxuXHQpO1xuXG5cdHJldHVybiBhZGRDb21wdXRlZENvbHVtbnModGFibGVDb2x1bW5zLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgdGFibGVDb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmICh0YWJsZUNvbHVtbi51bml0KSB7XG5cdFx0XHRjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuYWRkKHRhYmxlQ29sdW1uLnVuaXQpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmIChhZ2dyZWdhdGVkUHJvcGVydHkpIHtcblx0XHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdGRlZmluaXRpb25zW2FnZ3JlZ2F0ZWRQcm9wZXJ0eS5uYW1lXSA9IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcblx0XHRcdFx0PyBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLm1hcCgoY3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gPSB7fTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3QgcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGRlZmluaXRpb25zW3RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aF07XG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0aWYgKHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiYgIWN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXModGFibGVDb2x1bW4ubmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaCgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZm91bmRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoY29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0uZGVmYXVsdEFnZ3JlZ2F0ZS5jb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gY29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucykge1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyA9IHRydWU7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJHNlbGVjdCA9IGZhbHNlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzRGVmaW5pdGlvbnM7XG5cdFx0XHRfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnModGFibGVWaXN1YWxpemF0aW9uKTtcblx0XHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdFx0XHQvLyBBZGQgZ3JvdXAgYW5kIHNvcnQgY29uZGl0aW9ucyBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHRcdCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zID0gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGVzRGVmaW5pdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPSBcIkdyaWRUYWJsZVwiOyAvLyBBbmFseXRpY2FsVGFibGUgaXNuJ3QgYSByZWFsIHR5cGUgZm9yIHRoZSBNREM6VGFibGUsIHNvIHdlIGFsd2F5cyBzd2l0Y2ggYmFjayB0byBHcmlkXG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0KTtcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJVcGxvYWRUYWJsZVwiKSB7XG5cdFx0Y29uc3Qgc3RyZWFtUHJvcGVydHkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5NZWRpYVJlc291cmNlPy5TdHJlYW0/LiR0YXJnZXQ7XG5cdFx0aWYgKCFzdHJlYW1Qcm9wZXJ0eSkge1xuXHRcdFx0dGhyb3cgXCJVSS5NZWRpYVJlc291cmNlIGFubm90YXRpb24gd2l0aCBTdHJlYW0gcHJvcGVydHkgbWlzc2luZ1wiO1xuXHRcdH1cblxuXHRcdC8vIHRoZSB1cGxvYWQgYWN0aW9uIGlzIHRyZWF0ZWQgYXMgdGhlIGNyZWF0ZSBhY3Rpb25cblx0XHRjb25zdCB1cGxvYWRBY3Rpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb247XG5cdFx0Ly8gdGh1cyB3ZSBhbHNvIHJlbW92ZSB0aGUgY3JlYXRlIGFjdGlvblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zID0gdGFibGVWaXN1YWxpemF0aW9uLmFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLmtleSAhPT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSk7XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi51cGxvYWRUYWJsZSA9IHtcblx0XHRcdHN0cmVhbTogc3RyZWFtUHJvcGVydHkubmFtZSxcblx0XHRcdGZpbGVOYW1lOiAoc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCk/LnBhdGgsXG5cdFx0XHRhY2NlcHRhYmxlTWVkaWFUeXBlczogc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXM/LnRvU3RyaW5nKCksXG5cdFx0XHRtYXhMZW5ndGg6IHN0cmVhbVByb3BlcnR5Lm1heExlbmd0aCxcblx0XHRcdHVwbG9hZEFjdGlvbjogdXBsb2FkQWN0aW9uXG5cdFx0fTtcblx0fVxuXG5cdC8vIFdlIGRvbid0IGtlZXAgdGFibGUgc2VsZWN0aW9uIGFmdGVyIHNlYXJjaGluZy9maWx0ZXJpbmcsIGV4Y2VwdCBpbiByZXNwb25zaXZlL3VwbG9hZCB0YWJsZXNcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgJiYgdGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJVcGxvYWRUYWJsZVwiKSB7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNsZWFyU2VsZWN0aW9uT25GaWx0ZXIgPSB0cnVlO1xuXHR9XG59XG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggVGhlIG5hdmlnYXRpb24gcGF0aCB0byBjaGVjayBpbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEByZXR1cm5zIE5hdmlnYXRpb24gcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5mdW5jdGlvbiBmaW5kQ29sdW1uQnlQYXRoKHBhdGg6IHN0cmluZywgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0fSk7XG59XG4vKipcbiAqIFNldHMgdGhlICd1bml0JyBhbmQgJ3RleHRBcnJhbmdlbWVudCcgcHJvcGVydGllcyBpbiBjb2x1bW5zIHdoZW4gbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBjb2x1bW5zIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sdW1uKSA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKG9Qcm9wOiBQcm9wZXJ0eSkgPT4gb1Byb3AubmFtZSA9PT0gb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IG9Vbml0ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IG9UaW1lem9uZSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IHNUaW1lem9uZSA9IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdFx0XHRcdGlmIChvVW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Vbml0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVW5pdC5uYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGltZXpvbmUgPSBvVGltZXpvbmVDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lVGV4dCA9IHNUaW1lem9uZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZVxuXHRcdD8ucGF0aDtcblx0Y29uc3Qgc2VtYW50aWNLZXlBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5wdXNoKG9Db2x1bW4udmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IGhlYWRlckluZm9UaXRsZVBhdGgsIHNlbWFudGljS2V5Q29sdW1ucywgaGVhZGVySW5mb1R5cGVOYW1lIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiB0YWJsZUFubm90YXRpb24sXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0Y2xlYXJTZWxlY3Rpb25PbkZpbHRlcjogZmFsc2Vcblx0fTtcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGlzQmxhbmtUYWJsZT86IGJvb2xlYW4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0e30sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0W10sXG5cdFx0W10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy5jcmVhdGlvbk1vZGUsXG5cdFx0W11cblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBcIlwiKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdHVuZGVmaW5lZCxcblx0XHRcIlwiLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XCJcIixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0aXNCbGFua1RhYmxlID8gW10gOiBjb2x1bW5zLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlLFxuXHRcdGhlYWRlcjogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXJWaXNpYmxlLFxuXHRcdGNsZWFyU2VsZWN0aW9uT25GaWx0ZXI6IGZhbHNlXG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIEFjdGlvbkhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBcInRhYmxlXCIsIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVFeHByZXNzaW9uID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1cGRhdGFibGVFeHByZXNzaW9uKSAmJiB1cGRhdGFibGVFeHByZXNzaW9uLnBhdGg7XG5cdHJldHVybiBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID8gKHVwZGF0YWJsZVByb3BlcnR5UGF0aCBhcyBzdHJpbmcpIDogXCJcIjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIFRoZSByZWNvcmQgY29uc2lzdGluZyBvZiBhY3Rpb25zIGFuZCB0aGVpciBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIENTViBzdHJpbmcgb2YgYWxsIHByb3BlcnR5IHBhdGhzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoKSwgZmFsc2UpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBwYXRoIG9mIGEgRGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRjb25zdCBleHByZXNzaW9uID0gc291cmNlLmFubm90YXRpb25zPy5VST8uSGlkZGVuIGFzIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRsZXQgcGF0aCA9IGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uKTtcblx0aWYgKHR5cGVvZiBwYXRoID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChcInZpc2libGVcIiBpbiBzb3VyY2UpIHtcblx0XHRcdHBhdGggPSBwYXRoLnN1YnN0cmluZygxLCBwYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdC8vY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaXMgY29ycmVjdDpcblx0XHRcdGNvbnN0IHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eSA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHlbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvblByb3BlcnR5KGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3QpICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBuYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkuc2xpY2UoMSkuam9pbihcIi9cIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgbWFuaWZlc3QgYWN0aW9ucyBhbmQgY2hlY2sgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiBJZiB0aGUgZGF0YSBmaWVsZCBpcyBhbHNvIHJlZmVyZW5jZWQgYXMgYSBjdXN0b20gYWN0aW9uLlxuICogSWYgdGhlIHVuZGVybHlpbmcgbWFuaWZlc3QgYWN0aW9uIGlzIGVpdGhlciBhIGJvdW5kIGFjdGlvbiBvciBoYXMgdGhlICdSZXF1aXJlc0NvbnRleHQnIHByb3BlcnR5IHNldCB0byB0cnVlLlxuICpcbiAqIElmIHNvLCB0aGUgJ3JlcXVpcmVzU2VsZWN0aW9uJyBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gJ3RydWUnIGluIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciBhbmQgcmVxdWlyZXMgYSBjb250ZXh0XG4gKiBJZiBhbiBhY3Rpb24gaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgaXQgaXMgc2V0IGFzaWRlIGFuZCB3aWxsIGJlIGNvbnNpZGVyZWRcbiAqIHdoZW4gZ29pbmcgdGhyb3VnaCB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+LFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBsaW5lSXRlbUFubm90YXRpb24uc29tZSgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uSWQgPSBnZW5lcmF0ZShbXCJEYXRhRmllbGRGb3JBY3Rpb25cIiwgZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmddKTtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckFjdG9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmICh1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KG1hbmlmZXN0QWN0aW9uSWQsIGRhdGFGaWVsZCwgbWFuaWZlc3RBY3Rpb25zKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0XHRcdFx0XHRcdGBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246OiR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fTo6JHtkYXRhRmllbGQuQWN0aW9ufWAsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGEgY3VzdG9tIGFjdGlvbiB0aGF0IHJlcXVpcmVzIGEgY29udGV4dCBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdG9vbGJhci5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnJlZHVjZSgoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIGFjdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmICghYWN0aW9uLm1lbnUpIHtcblx0XHRcdC8vc2ltcGxlIGN1c3RvbSBhY3Rpb25cblx0XHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBncm91cGVkIGFjdGlvbnNcblx0XHRcdGFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4uKGFjdGlvbi5tZW51LmZpbHRlcigobWVudUFjdGlvbikgPT4gdHlwZW9mIG1lbnVBY3Rpb24gIT09IFwic3RyaW5nXCIpIGFzIEN1c3RvbUFjdGlvbltdKV07XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBbXSk7XG5cdHJldHVybiAhIWN1c3RvbUFjdGlvbnMuZmluZChcblx0XHQoYWN0aW9uKSA9PiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgKGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKVxuXHQpO1xufVxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIEFycmF5PEV4cHJlc3Npb248Ym9vbGVhbj4+IEFsbCB0aGUgdmlzaWJsZSBwYXRoIGV4cHJlc3Npb25zIG9mIHRoZSBhY3Rpb25zIHRoYXQgbWVldCB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLmZvckVhY2goKGFjdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlICYmIGFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8qVGhlIGZpbmFsIGFpbSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgcGF0aCBleHByZXNzaW9uIGRlcGVuZHMgb24gdGhlIHBhcmVudCBjb250ZXh0XG5cdFx0XHRcdFx0YW5kIGNvbnNpZGVycyBvbmx5IHRob3NlIGV4cHJlc3Npb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLFxuXHRcdFx0XHRcdGJ1dCBjdXJyZW50bHkgbm90IHBvc3NpYmxlIGZyb20gdGhlIG1hbmlmZXN0IGFzIHRoZSB2aXNpYmxlIGtleSBpcyBib3VuZCBvbiB0aGUgcGFyZW50IGVudGl0eS5cblx0XHRcdFx0XHRUcmlja3kgdG8gZGlmZmVyZW50aWF0ZSB0aGUgcGF0aCBhcyBpdCdzIGRvbmUgZm9yIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdFx0XHRGb3IgdGhlIHRpbWUgYmVpbmcgd2UgY29uc2lkZXIgYWxsIHRoZSBwYXRocyBvZiB0aGUgbWFuaWZlc3QqL1xuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGFuZCBrZWVwIGl0IGFzIHNwZWNpZmllZFxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUV4cHJlc3Npb24oaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdH1cblx0Y29uc3QgYk1hc3NFZGl0RW5hYmxlZDogYm9vbGVhbiA9ICFpc0NvbnN0YW50KG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pIHx8IG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24udmFsdWUgIT09IGZhbHNlO1xuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKFxuXHRcdGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpXG5cdCkge1xuXHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHR9XG5cdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHQpO1xuXHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdC8vIE5vIGFjdGlvbiByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHRpZiAoXG5cdFx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHQoY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgYk1hc3NFZGl0RW5hYmxlZClcblx0KSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRcdC8vIEJ1aWxkaW5nIGV4cHJlc3Npb24gZm9yIGRlbGV0ZSBhbmQgbWFzcyBlZGl0XG5cdFx0XHRcdGNvbnN0IGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gb3IoXG5cdFx0XHRcdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSxcblx0XHRcdFx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCB0cnVlLCAvLyBkZWZhdWx0IGRlbGV0ZSB2aXNpYmlsaXR5IGFzIHRydWVcblx0XHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRpZkVsc2UoYW5kKFVJLklzRWRpdGFibGUsIGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLlNpbmdsZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gZXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFubm90YXRpb25BY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRjb25zdCBjb3B5RGF0YUZpZWxkID0gZ2V0Q29weUFjdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTtcblx0XHR9KSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdXG5cdCk7XG5cdGNvbnN0IHNFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRpZiAoY29weURhdGFGaWVsZCkge1xuXHRcdGNvbnN0IHVzZUVuYWJsZWRFeHByZXNzaW9uID0gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIHNFbnRpdHlUeXBlKTtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdC8vIFVzZSBPcGVyYXRpb25BdmFpbGFibGUgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gb25lIHNlbGVjdGVkIGl0ZW1cblx0XHRcdGVuYWJsZWQ6IHVzZUVuYWJsZWRFeHByZXNzaW9uXG5cdFx0XHRcdD8gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgY29weURhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdG5vdChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0Y29weURhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0dGV4dDogY29weURhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSA/PyBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0NPTU1PTl9DT1BZXCIpLFxuXHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHR9KTtcblx0fVxuXHRsaW5lSXRlbUFubm90YXRpb25cblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiAhZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpICE9PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBzRW50aXR5VHlwZSkpIHtcblx0XHRcdFx0XHRcdFx0dGFibGVBY3Rpb24uZW5hYmxlZCA9IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdHJldHVybiB7XG5cdFx0dGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uc1xuXHR9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiBQYXRoIG9yIHZhbHVlIG9mIHRoZSBjcml0aWNhbGl0eVxuICogQHBhcmFtIGlzRHJhZnRSb290T3JOb2RlICBJcyB0aGUgY3VycmVudCBlbnRpdHlTZXQgYW4gRHJhZnQgcm9vdCBvciBhIG5vZGVcbiAqIEBwYXJhbSB0YXJnZXRFbnRpdHlUeXBlIFRoZSB0YXJnZXRlZCBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uQmluZGluZ1xuICovXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IENyaXRpY2FsaXR5IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdE9yTm9kZTogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdHRhcmdldEVudGl0eVR5cGU/LmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lKSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdE9yTm9kZX1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWxdLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCJcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoaW4gdGhlIExpc3QgUmVwb3J0LiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiICYmXG5cdFx0IVtDcmVhdGlvbk1vZGUuTmV3UGFnZSwgQ3JlYXRpb25Nb2RlLklubGluZV0uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIiBpbiBjYXNlIG9mIGEgbm9uLXN1cHBvcnRlZCBtb2RlIGZvciBhIFRyZWVUYWJsZVxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBUcmVlIFRhYmxlLiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH1cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Ly8gbm8gbmF2aWdhdGlvbiBvciBubyByb3V0ZSBzcGVjaWZpZWQgLSBmYWxsYmFjayB0byBpbmxpbmUgY3JlYXRlIGlmIG9yaWdpbmFsIGNyZWF0aW9uIG1vZGUgd2FzICdOZXdQYWdlJ1xuXHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0TG9nLmVycm9yKFwiVGhlIGNyZWF0aW9uIG1vZGUgJ05ld1BhZ2UnIGlzIHVzZWQgYnV0IHRoZSBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlIGlzIG1pc3NpbmcuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSB3YXMgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNyZWF0ZUF0RW5kIHdlIGZvcmNlIGl0IHRvIGZhbHNlXG5cdFx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0TG9nLmluZm8oXCJUaGUgY3JlYXRpb24gbW9kZSB3YXMgY2hhbmdlZCBmcm9tICdOZXdQYWdlJyB0byAnSW5saW5lJyBkdWUgdG8gbWlzc2luZyBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlLlwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHQhIU1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8ICEhTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCksXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9IGAuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJyR7bmF2aWdhdGlvblRhcmdldH0nLCBcXCR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KWA7XG5cdFx0XHRvcGVuSW5OZXdUYWJQcmVzc1Byb3BlcnR5ID0gYC5vbk9wZW5Jbk5ld1RhYk5hdmlnYXRlT3V0Qm91bmQoJyR7bmF2aWdhdGlvblRhcmdldH0nLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCBcIlwiLCAke3NlbGVjdGlvbkxpbWl0Rm9yT3BlbkluTmV3VGFifSlgO1xuXHRcdH1cblx0XHRpZiAoIW5hdmlnYXRpb25UYXJnZXQgJiYgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGUpIHtcblx0XHRcdGNvbnN0IGVkaXRhYmxlID1cblx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldClcblx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRjb25zdCBiUmVjcmVhdGVDb250ZXh0ID0gdGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IFwiLCBiUmVjcmVhdGVDb250ZXh0OiB0cnVlXCIgOiBcIlwiO1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9IGBBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsIFxcJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJyR7dGFyZ2V0UGF0aH0nLCBlZGl0YWJsZTogJHtlZGl0YWJsZX0gJHtiUmVjcmVhdGVDb250ZXh0fSB9KWA7IC8vTmVlZCB0byBhY2Nlc3MgdG8gRHJhZnRSb290IGFuZCBEcmFmdE5vZGUgISEhISEhIVxuXHRcdFx0b3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSA9IGBBUEkub25PcGVuSW5OZXdUYWJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke3RhcmdldFBhdGh9JywgbmF2TW9kZTogJ29wZW5Jbk5ld1RhYicgfSwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYDtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRvcGVuSW5OZXdUYWJQcmVzczogb3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUV4cHJlc3Npb24ocm93TmF2aWdhdGVkRXhwcmVzc2lvbiksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KFVJLklzSW5hY3RpdmUpKVxuXHR9O1xufTtcbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRpZiAoYW5ub3RhdGlvbkNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGFubm90YXRpb25Db2x1bW5zID0gW107XG5cdH1cblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdFx0Y29uc3QgZXhpc3RzID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIEluY2x1ZGUgdGV4dCBwcm9wZXJ0aWVzIGZvdW5kIGR1cmluZyBhbmFseXNpcyBvbiBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZSxcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNJbmZvXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgUHJvcGVydHkgTGFiZWwgd2hlbiBpdCdzIHJlZmVyZW5jZWQgb25seSBvbmNlIGluIGEgY29sdW1uLCBuZXcgbGFiZWwgd2lsbCBiZSB0aGUgbGFiZWwgb2YgdGhlIGNvbHVtblxuXHRcdFx0dXBkYXRlUHJvcGVydHlMYWJlbChhbm5vdGF0aW9uQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCB0aGF0IHBvaW50cyB0byBhIHRleHQgcHJvcGVydHkgKGFuZCBub3QgYSAnaGFyZCBjb2RlZCB0ZXh0JykgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZCBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyA9IG5vblNvcnRhYmxlQ29sdW1ucy5jb25jYXQocHJvcGVydHkubmFtZSk7XG5cdFx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpKSB7XG5cdFx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHQvLyBDcmVhdGUgYSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eS5cblx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdHRhYmxlQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbixcblx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHQpO1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuLyoqXG4gKiBDcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGEgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gdXNlRGF0YUZpZWxkUHJlZml4IFNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIFwiRGF0YUZpZWxkOjpcIiwgZWxzZSBpdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggXCJQcm9wZXJ0eTo6XCJcbiAqIEBwYXJhbSBhdmFpbGFibGVGb3JBZGFwdGF0aW9uIERlY2lkZXMgd2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24tc29ydGFibGUgY29sdW1uIG5hbWVzXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uSGVscGVyIGZvciB0aGUgZW50aXR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZVxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1xuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXSxcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz86IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbiB7XG5cdGNvbnN0IG5hbWUgPSB1c2VEYXRhRmllbGRQcmVmaXggPyByZWxhdGl2ZVBhdGggOiBgUHJvcGVydHk6OiR7cmVsYXRpdmVQYXRofWA7XG5cdGNvbnN0IGtleSA9ICh1c2VEYXRhRmllbGRQcmVmaXggPyBcIkRhdGFGaWVsZDo6XCIgOiBcIlByb3BlcnR5OjpcIikgKyByZXBsYWNlU3BlY2lhbENoYXJzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgcHJvcGVydHkpO1xuXHRjb25zdCBpc0hpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHByb3BlcnR5KTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgbGFiZWwgPSBnZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCk7XG5cdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShwcm9wZXJ0eSk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIGRhdGFUeXBlKTtcblx0Y29uc3QgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uID0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uPy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzb3J0YWJsZSA9ICghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiAhbm9uU29ydGFibGVDb2x1bW5zLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGZpbHRlcmFibGUgPSAhaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uO1xuXHRjb25zdCB0eXBlQ29uZmlnID0ge1xuXHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdH07XG5cdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhwcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0fVxuXHRjb25zdCBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyhyZWxhdGl2ZVBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRrZXk6IGtleSxcblx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0bGFiZWw6IGxhYmVsLFxuXHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBnZXRMYWJlbChwcm9wZXJ0eSkgOiB1bmRlZmluZWQsXG5cdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGZ1bGxQcm9wZXJ0eVBhdGgsXG5cdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdGF2YWlsYWJpbGl0eTogIWF2YWlsYWJsZUZvckFkYXB0YXRpb24gfHwgaXNIaWRkZW4gPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0bmFtZTogbmFtZSxcblx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0ZmlsdGVyYWJsZTogZmlsdGVyYWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/ICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkgOiBzb3J0YWJsZSxcblx0XHRpc0tleTogcHJvcGVydHkuaXNLZXksXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnIGFzIFByb3BlcnR5VHlwZUNvbmZpZyxcblx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCksXG5cdFx0cmVxdWlyZWQ6IGlzUmVxdWlyZWRDb2x1bW4oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHksIHRhYmxlQ3JlYXRpb25Nb2RlKSxcblx0XHRhZGRpdGlvbmFsTGFiZWxzOiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHNcblx0fTtcblx0X2FkZFRvb2xUaXAocHJvcGVydHksIGNvbHVtbik7XG5cdF9zZXRFeHBvcnRTZXR0aW5nc0ZvckRhdGFQb2ludChwcm9wZXJ0eSwgY29sdW1uKTtcblx0cmV0dXJuIGNvbHVtbjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIGZvciBhIGdpdmVuIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBnaXZlbiBjb2x1bW4gZnJvbSBhIGxpbmUgaXRlbSBhcyBhIGRhdGEgZmllbGQgb3IgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZVxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGxpbmtlZCB0byB0aGUgY29sdW1uIChuYW1lZCBhbHNvIGNvbXBsZXggcHJvcGVydHkpXG4gKiBAcmV0dXJucyBUaGUgZXhwb3J0IHNldHRpbmdzIGluIGEgdGhlIGdpdmVuIGNvbHVtblxuICovXG5jb25zdCBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz86IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0bGV0IHVuaXRQcm9wZXJ0eSwgdGltZXpvbmVQcm9wZXJ0eSwgdW5pdFRleHQsIHRpbWV6b25lVGV4dCwgdXRjLCBpc0FUaW1lem9uZSwgY3VycmVuY3lQcm9wZXJ0eSwgc2NhbGU7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvID8gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpIDogW107XG5cdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8gJiYgcmVsYXRlZFByb3BlcnR5TmFtZXM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGJhc2VkIG9uIHRoZSByZWxhdGVkIChjaGlsZCkgcHJvcGVydHkgaW4gY2FzZSB0aGVyZSBpcyBvbmx5IG9uZS5cblx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2UgaGF2ZSBhIHRleHQgb25seSBhbm5vdGF0aW9uIHRvIGNvbXB1dGUgdGhlIGV4cG9ydCBzZXR0aW5ncyBmcm9tIHRoZSB0ZXh0IGluc3RlYWQgb2YgdGhlIHZhbHVlXG5cdFx0Y29sdW1uID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZXNbMF1dO1xuXHR9XG5cdGNvbnN0IGRhdGFUeXBlID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUoY29sdW1uKTtcblx0aWYgKGlzUHJvcGVydHkoY29sdW1uKSkge1xuXHRcdHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkoY29sdW1uKTtcblx0XHRjdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkoY29sdW1uKTtcblx0XHR0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkoY29sdW1uKTtcblx0XHR1bml0VGV4dCA9IGdldFN0YXRpY1VuaXRPckN1cnJlbmN5KGNvbHVtbik7XG5cdFx0dGltZXpvbmVUZXh0ID0gZ2V0U3RhdGljVGltZXpvbmUoY29sdW1uKTtcblx0XHRpc0FUaW1lem9uZSA9IGlzVGltZXpvbmUoY29sdW1uKTtcblx0XHRzY2FsZSA9IGNvbHVtbi5zY2FsZTtcblx0fVxuXHR1bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy51bml0UHJvcGVydHkgPz8gdW5pdFByb3BlcnR5Py5uYW1lID8/IGN1cnJlbmN5UHJvcGVydHk/Lm5hbWU7XG5cdHRpbWV6b25lUHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy50aW1lem9uZVByb3BlcnR5ID8/IHRpbWV6b25lUHJvcGVydHk/Lm5hbWU7XG5cdHNjYWxlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncz8uc2NhbGUgPz8gc2NhbGU7XG5cdGNvbnN0IGV4cG9ydFR5cGUgPSBnZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgaXNBVGltZXpvbmUsICEhY3VycmVuY3lQcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncyk7XG5cdGlmICh0aW1lem9uZVByb3BlcnR5IHx8IChleHBvcnRUeXBlID09PSBcIkRhdGVUaW1lXCIgJiYgIXRpbWV6b25lVGV4dCkpIHtcblx0XHR1dGMgPSBmYWxzZTtcblx0fVxuXHRjb25zdCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRpbnB1dEZvcm1hdDogZ2V0RGF0ZUlucHV0Rm9ybWF0KGRhdGFUeXBlKSxcblx0XHRkZWxpbWl0ZXI6IGdldERlbGltaXRlcihkYXRhVHlwZSksXG5cdFx0c2NhbGU6IHNjYWxlLFxuXHRcdHVuaXRQcm9wZXJ0eTogdW5pdFByb3BlcnR5LFxuXHRcdHVuaXQ6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3MudW5pdCA/PyB1bml0VGV4dCxcblx0XHR0aW1lem9uZVByb3BlcnR5OiB0aW1lem9uZVByb3BlcnR5LFxuXHRcdHRpbWV6b25lOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID8/IHRpbWV6b25lVGV4dD8udG9TdHJpbmcoKSxcblx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSxcblx0XHQvL29ubHkgaW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXMsIHdyYXAgdGhlIGNlbGwgY29udGVudFx0b24gdGhlIGV4Y2VsIGV4cG9ydGVkIGZpbGVcblx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLndyYXAsXG5cdFx0dXRjOiB1dGNcblx0fTtcblx0cmV0dXJuIHJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyhleHBvcnRTZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBHZXRzIHRoZSBleHBvcnQgZm9ybWF0IHRlbXBsYXRlIGZvciBjb2x1bW5zIHdpdGggZGF0ZXMuXG4gKlxuICogQHBhcmFtIGRhdGFUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbHVtblxuICogQHJldHVybnMgVGhlIGlucHV0Rm9ybWF0XG4gKi9cbmNvbnN0IGdldERhdGVJbnB1dEZvcm1hdCA9IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBkYXRhVHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBHZXRzIHRoZSBkZWxpbWl0ZXIgaW4gbnVtZXJpYyBjb2x1bW5zLlxuICogVGhlIGRlbGltaXRlciBpcyB1c2VkIHRvIGRpc3BsYXkgdGhvdXNhbmRzIHNlcGFyYXRvciBpbiBudW1lcmljIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGRhdGFUeXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbHVtblxuICogQHJldHVybnMgVHJ1ZSB0byBkaXNwbGF5IHRob3VzYW5kcyBzZXBhcmF0b3IgaW4gbnVtZXJpYyBjb2x1bW5zXG4gKi9cbmNvbnN0IGdldERlbGltaXRlciA9IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZGF0YVR5cGUgPT09IFwiRWRtLkludDY0XCIgPyB0cnVlIDogdW5kZWZpbmVkO1xufTtcbi8qKlxuICpcbiAqIFJlbW92ZXMgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0IG9mIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgZXhwb3J0IHNldHRpbmdzIGNvbmZpZ3VyYXRpb25zIGZvciBhIGNvbHVtblxuICogQHJldHVybnMgVGhlIGV4cG9ydCBzZXR0aW5ncyBjb25maWd1cmF0aW9ucyB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXNcbiAqL1xuY29uc3QgcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzID0gZnVuY3Rpb24gKGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0Ly9SZW1vdmUgdW5kZWZpbmVkIHNldHRpbmdzIGZyb20gZXhwb3J0U2V0dGluZyBvYmplY3Rcblx0Zm9yIChjb25zdCBzZXR0aW5nIGluIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0aWYgKGV4cG9ydFNldHRpbmdzW3NldHRpbmcgYXMga2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3NdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBleHBvcnRTZXR0aW5nc1tzZXR0aW5nIGFzIGtleW9mIENvbHVtbkV4cG9ydFNldHRpbmdzXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xufTtcbi8qKlxuICogVXBkYXRlIHByb3BlcnR5IGxhYmVsIGluIGNhc2UgaXQncyBvbmx5IHJlZmVyZW5jZWQgaW4gb25lIGNvbHVtbi4gVGhlIGxhYmVsIG9mIHRoZSBjb2x1bW4gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IGxhYmVsLlxuICogVGhpcyB1cGRhdGUgYWxzbyBpcyBhcHBsaWVkIGZvciB0aGUgdG9vbHRpcCBhcyBpdCBpcyBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgbGFiZWxcbiAqXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZFxuICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5TGFiZWwoXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtblxuKTogdm9pZCB7XG5cdGNvbnN0IGxpbmtlZEFubm90YXRpb25Db2x1bW5zID0gYW5ub3RhdGlvbkNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aCkpO1xuXHRpZiAoXG5cdFx0bGlua2VkQW5ub3RhdGlvbkNvbHVtbnM/Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aF0gJiZcblx0XHRsaW5rZWRBbm5vdGF0aW9uQ29sdW1uc1swXS5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDFcblx0KSB7XG5cdFx0Y29sdW1uSW5mby5sYWJlbCA9IGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLmxhYmVsO1xuXHRcdGNvbHVtbkluZm8udG9vbHRpcCA9IGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLnRvb2x0aXA7XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1ucywgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgZGF0YUZpZWxkIG9yIHByb3BlcnR5IHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW4sIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5cbiAqL1xuZnVuY3Rpb24gX2lzRXhwb3J0YWJsZUNvbHVtbihzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRsZXQgcHJvcGVydHlUeXBlLCBwcm9wZXJ0eTtcblx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5ID0gKHNvdXJjZSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnMuVUk/LkRhdGFGaWVsZERlZmF1bHQ7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkpIHtcblx0XHRpZiAoaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oc291cmNlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRwcm9wZXJ0eVR5cGUgPSBkYXRhRmllbGREZWZhdWx0UHJvcGVydHk/LiRUeXBlO1xuXHR9IGVsc2UgaWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydHkgPSBzb3VyY2U7XG5cdFx0cHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSkge1xuXHRcdFx0Ly9Gb3IgQ2hhcnRcblx0XHRcdHByb3BlcnR5VHlwZSA9IChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlO1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkICYmICFVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlLmluY2x1ZGVzKHByb3BlcnR5VHlwZSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uTWVkaWFUeXBlPy50ZXJtID09PSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lZGlhVHlwZVwiICYmXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/LmlzVVJMICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHQvL0ZvciBTdHJlYW1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5VHlwZVxuXHRcdD8gIVtcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdFx0ICBdLmluY2x1ZGVzKHByb3BlcnR5VHlwZSlcblx0XHQ6IHRydWU7XG59XG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDoqLyBjb25zdGFudChmYWxzZSk7XG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ISFwcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRpZiAoZGF0YUZpZWxkR3JvdXA/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGRHcm91cC5hbm5vdGF0aW9ucy5VSS5IaWRkZW4pLCB0cnVlKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcykgPT4ge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMucHVzaChfZ2V0VmlzaWJsZUV4cHJlc3Npb24oeyB0YXJnZXRPYmplY3Q6IGlubmVyRGF0YUZpZWxkIH0gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKG9yKC4uLmZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBbcHJvcGVydHldIFByb3BlcnR5LCBEYXRhRmllbGQgb3IgTmF2aWdhdGlvbiBQcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqL1xuY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNHcm91cCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpIHx8IGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSAocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbCkge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWU7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhwcm9wZXJ0eSkpIHtcblx0XHRpZiAoISFpc0dyb3VwICYmIHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCwgW10sIHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHkuTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSlcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBwcm9wZXJ0eS5MYWJlbD8udG9TdHJpbmcoKTtcblx0fVxufTtcbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24gKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gc291cmNlLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8pKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc291cmNlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gc291cmNlLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0cmV0dXJuIGRhdGFwb2ludFRhcmdldD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvd1N0YXR1c1Zpc2liaWxpdHkoY29sTmFtZTogc3RyaW5nLCBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwPzogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cGF0aEluTW9kZWwoYHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0Y29sTmFtZSxcblx0XHRcdGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXBcblx0XHRdLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXG5cdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1uIG5hbWVzIHdoaWNoIGNhbm5vdCBiZSBzb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdLFxuXHR0YWJsZUNyZWF0aW9uTW9kZT86IENyZWF0aW9uTW9kZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVDcmVhdGlvbk1vZGVcblx0XHRcdCk7XG5cdFx0XHRjb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbSA9IGV4aXN0aW5nQ29sdW1ucy5zb21lKFxuXHRcdFx0XHQoZXhpc3RpbmdDb2x1bW4pID0+IGV4aXN0aW5nQ29sdW1uLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKG5hbWUpICYmIGV4aXN0aW5nQ29sdW1uLmlzUGFydE9mTGluZUl0ZW1cblx0XHRcdCk7XG5cdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHwgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW5cblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7bmFtZX1gO1xuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXgsXG5cdFx0XHRcdC8vIFNldCBpdCB0byBoaWRkZW4gYXMgaXQgaXMgb25seSBjb25zdW1lZCBieSBDb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gcmVsYXRlZENvbHVtbi5pc1BhcnRPZkxpbmVJdGVtO1xuXHRcdFx0XHRjb2x1bW4uZmlsdGVyYWJsZSA9IGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID8/IGNvbHVtbi5maWx0ZXJhYmxlO1xuXHRcdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpICYmXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5pbmNsdWRlcyhuYW1lKSAmJiAhcmVsYXRlZENvbHVtbi5maWx0ZXJhYmxlKSB7XG5cdFx0XHQvLyBDYXNlIDQ6IFRoZSBjb2x1bW4gaXMgYSByZWZlcmVuY2VkIHRleHQgb25seSBwcm9wZXJ0eVxuXHRcdFx0Ly8gQ2FzZSA1OiBUaGUgY29sdW1uIGlzbid0IGFscmVhZHkgYXZhaWxhYmxlIGZvciBmaWx0ZXJpbmcgYXMgaXQgY291bGQgYmUgcmVmZXJlbmNlZCBvbiBhbm90aGVyIGNvbHVtbiAoZS5nLiB0ZXh0IGZpcnN0KVxuXHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXggdG8gY3JlYXRlIHRoZSB0ZXh0IHByb3BlcnR5IG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3Nlc1xuXHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiwgbmVhdGhlciBzb3J0YWJsZSBub3IgZ3JvdXBhYmxlLlxuXHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFtuYW1lXSxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0KTtcblx0XHRcdGNvbHVtbi5pc0dyb3VwYWJsZSA9IGZhbHNlO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuLyoqXG4gKiBHZXR0aW5nIHRoZSBDb2x1bW4gTmFtZVxuICogSWYgaXQgcG9pbnRzIHRvIGEgRGF0YUZpZWxkIHdpdGggb25lIHByb3BlcnR5IG9yIERhdGFQb2ludCB3aXRoIG9uZSBwcm9wZXJ0eSwgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aCkge1xuXHRcdHJldHVybiBkYXRhRmllbGQuVmFsdWU/LnBhdGg7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy5wYXRoKSB7XG5cdFx0Ly8gVGhpcyBpcyBmb3IgcmVtb3ZpbmcgZHVwbGljYXRlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlLCAnUHJvZ3Jlc3MnIFByb3BlcnR5IGlzIHJlbW92ZWQgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgRGF0YVBvaW50XG5cdFx0cmV0dXJuIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0fVxufTtcbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgdGhlIGlkZW50aWZpZWQgYWRkaXRpb25hbCBwcm9wZXJ0eSBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyB0ZWNobmljYWwgcHJvcGVydHkgaW4gdGhlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG9mIENvbXBsZXhQcm9wZXJ0eUluZm8gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGNvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZSBmcm9tIHRoZSB0YWJsZSB2aXN1YWxpemF0aW9uLlxuICogQHBhcmFtIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydHlJbmZvIG9mIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY29sdW1ucy5cbiAqL1xuY29uc3QgY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRjb25zdCBrZXkgPSBgUHJvcGVydHlfVGVjaG5pY2FsOjoke25hbWV9YDtcblx0Ly8gVmFsaWRhdGUgaWYgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBoYXNuJ3QgeWV0IGJlZW4gY3JlYXRlZCBvbiBwcmV2aW91cyBpdGVyYXRpb25zLlxuXHRjb25zdCBjb2x1bW5FeGlzdHMgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KTtcblx0Ly8gUmV0cmlldmUgdGhlIHNpbXBsZSBwcm9wZXJ0eSB1c2VkIGJ5IHRoZSBoaWRkZW4gYW5ub3RhdGlvbiwgaXQgd2lsbCBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIG1hbmRhdG9yeSBhdHRyaWJ1dGVzIG9mIG5ld2x5IGNyZWF0ZWQgdGVjaG5pY2FsIHByb3BlcnR5LiBGb3IgZS5nLiByZWxhdGl2ZVBhdGhcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHQhY29sdW1uRXhpc3RzICYmIChjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUgJiYgIWNvbHVtbi5wcm9wZXJ0eUluZm9zKSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pITtcblx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IHRlY2huaWNhbENvbHVtbjogVGVjaG5pY2FsQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRsYWJlbDogYWRkaXRpb25hbFByb3BlcnR5LmxhYmVsLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGFkZGl0aW9uYWxQcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGF2YWlsYWJpbGl0eTogXCJIaWRkZW5cIixcblx0XHRcdG5hbWU6IGtleSxcblx0XHRcdHJlbGF0aXZlUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LnJlbGF0aXZlUGF0aCxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGlzS2V5OiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBudWxsLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmFsc2UsXG5cdFx0XHRhZ2dyZWdhdGFibGU6IGZhbHNlLFxuXHRcdFx0ZXh0ZW5zaW9uOiB7XG5cdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlLFxuXHRcdFx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29sdW1ucy5wdXNoKHRlY2huaWNhbENvbHVtbik7XG5cdFx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSB0ZWNobmljYWxDb2x1bW4ubmFtZTtcblx0fVxufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YSBmaWVsZCBsYWJlbHMgaGF2ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwTmFtZSBUaGUgYERhdGFGaWVsZGAgbmFtZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgc2hvd0RhdGFGaWVsZHNMYWJlbGAgdmFsdWUgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbiAoZmllbGRHcm91cE5hbWU6IHN0cmluZywgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBvQ29sdW1ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk/LmNvbHVtbnM7XG5cdGNvbnN0IGFDb2x1bW5LZXlzID0gb0NvbHVtbnMgJiYgT2JqZWN0LmtleXMob0NvbHVtbnMpO1xuXHRyZXR1cm4gKFxuXHRcdGFDb2x1bW5LZXlzICYmXG5cdFx0ISFhQ29sdW1uS2V5cy5maW5kKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgb0NvbHVtbnNba2V5XS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGBEYXRhRmllbGRgIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoXG4gKi9cbmNvbnN0IF9nZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aCA9IFwiXCI7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gZGF0YUZpZWxkPy5UYXJnZXQ/LnZhbHVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKSB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IW5vblNvcnRhYmxlQ29sdW1ucy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIC8vIENvbHVtbiBpcyBub3QgbWFya2VkIGFzIG5vbi1zb3J0YWJsZSB2aWEgYW5ub3RhdGlvblxuXHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbilcblx0KTtcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAhKGZpbHRlckZ1bmN0aW9ucyBhcyBTdHJpbmdbXSkuaW5jbHVkZXMoXCJ0b2xvd2VyXCIpIDogdHJ1ZTtcbn07XG5mdW5jdGlvbiBfZ2V0RmlsdGVyRnVuY3Rpb25zKENvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBGaWx0ZXJGdW5jdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRpZiAoVHlwZUd1YXJkcy5pc0VudGl0eVNldChlbnRpdHlTZXQpKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9ucyA/P1xuXHRcdFx0Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9uc1xuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LCBuYW1lOiBzdHJpbmcpIHtcblx0Y29uc3QgYVNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgYlNlbWFudGljS2V5Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleXMubGVuZ3RoOyBpKyspIHtcblx0XHRhU2VtYW50aWNLZXlWYWx1ZXMucHVzaChzZW1hbnRpY0tleXNbaV0udmFsdWUpO1xuXHRcdGlmIChzZW1hbnRpY0tleXNbaV0udmFsdWUgPT09IG5hbWUpIHtcblx0XHRcdGJTZW1hbnRpY0tleUZvdW5kID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZXM6IGFTZW1hbnRpY0tleVZhbHVlcyxcblx0XHRzZW1hbnRpY0tleUZvdW5kOiBiU2VtYW50aWNLZXlGb3VuZFxuXHR9O1xufVxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IHN0cmluZ1tdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluY2x1ZGVzKHRtcCkpKSB7XG5cdFx0XHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRzUHJvcGVydHlQYXRoID0gc2VtYW50aWNLZXlWYWx1ZXNbaV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogc1Byb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBmaXJzdCBwcm9wZXJ0eSBpbiB0aGUgZmllbGRHcm91cCB0aGF0IGlzIHBhcnQgb2YgdGhlIHNlbWFudGljIGtleXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZEdyb3VwXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlWYWx1ZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGEgZmxhZyB0cnVlIGlmIGEgcHJvcGVydHkgaXMgZm91bmQgYW5kIGEgcHJvcGVydHlQYXRoLlxuICovXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgbnVsbCwgc2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdKSB7XG5cdC8vIHRoaXMgaW5mbyBpcyB1c2VkIGluIEZpZWxkSGVscGVyI2lzRHJhZnRJbmRpY2F0b3JWaXNpYmxlSW5GaWVsZEdyb3VwIHRvIHNob3cgYSBkcmFmdCBpbmRpY2F0b3IgYXQgdGhlIGVuZCBvZiBhIGZpZWxkIGdyb3VwXG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoPzogc3RyaW5nIH0gPSB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogZmFsc2UsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cCAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0KSB7XG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGlubmVyRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmXG5cdFx0XHRcdGlubmVyRGF0YUZpZWxkLlZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0YVByb3BlcnRpZXMucHVzaChpbm5lckRhdGFGaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdH1cblx0XHRcdF9wcm9wZXJ0aWVzRm91bmQgPSBfZmluZFByb3BlcnRpZXMoc2VtYW50aWNLZXlWYWx1ZXMsIGFQcm9wZXJ0aWVzKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IF9wcm9wZXJ0aWVzRm91bmQuc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRwcm9wZXJ0eVBhdGg6IF9wcm9wZXJ0aWVzRm91bmQuZmllbGRHcm91cFByb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgd2l0aCBkcmFmdEluZGljYXRvciBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEBwYXJhbSBpc0ZpZWxkR3JvdXBDb2x1bW5cbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihcblx0bmFtZTogc3RyaW5nLFxuXHRzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbik6IFBhcnRpYWw8e1xuXHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZztcblx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG59PiB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHQvL1RPRE8gd2Ugc2hvdWxkIHJhdGhlciBzdG9yZSBoYXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogbmFtZSxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSlcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHt9O1xufVxuZnVuY3Rpb24gX2dldEltcE51bWJlcihkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzKTogbnVtYmVyIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0hpZ2hcIikpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXHRpZiAoaW1wb3J0YW5jZSAmJiBpbXBvcnRhbmNlLmluY2x1ZGVzKFwiVUkuSW1wb3J0YW5jZVR5cGUvTWVkaXVtXCIpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0xvd1wiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cdHJldHVybiAwO1xufVxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGNvbnRhaW5pbmcgZGF0YXBvaW50cy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBnaXZlbiBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cblxuZnVuY3Rpb24gX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50KHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVmcm9tRFAgPSBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KTtcblx0aWYgKFxuXHRcdGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpICYmXG5cdFx0dHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzPy51bml0ICE9PSBcIiVcIlxuXHQpIHtcblx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSB0YXJnZXRWYWx1ZWZyb21EUDtcblx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgPSBcInswfS9cIiArIHRhcmdldFZhbHVlZnJvbURQO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRNYXhJbXBvcnRhbmNlKGZpZWxkczogRGF0YUZpZWxkVHlwZXNbXSk6IEltcG9ydGFuY2Uge1xuXHRpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IG1heEltcE51bWJlciA9IC0xO1xuXHRcdGxldCBpbXBOdW1iZXIgPSAtMTtcblx0XHRsZXQgRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2U7XG5cdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcblx0XHRcdGltcE51bWJlciA9IF9nZXRJbXBOdW1iZXIoZmllbGQpO1xuXHRcdFx0aWYgKGltcE51bWJlciA+IG1heEltcE51bWJlcikge1xuXHRcdFx0XHRtYXhJbXBOdW1iZXIgPSBpbXBOdW1iZXI7XG5cdFx0XHRcdERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlID0gZmllbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdH1cblx0cmV0dXJuIEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW1wb3J0YW5jZSB2YWx1ZSBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZCk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5ID8/IFtdO1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZ2hLZXlzID0gWy4uLnNlbWFudGljS2V5cywgLi4ucmVxdWlyZWRQcm9wZXJ0aWVzXS5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdC8vRXZhbHVhdGUgZGVmYXVsdCBJbXBvcnRhbmNlIGlzIG5vdCBzZXQgZXhwbGljaXRseVxuXHRsZXQgZmllbGRzV2l0aEltcG9ydGFuY2U7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Ly9JZiBhIEZpZWxkR3JvdXAgY29udGFpbnMgYSBzZW1hbnRpY0tleSBvciByZXF1aXJlZCBwcm9wZXJ0eSwgaW1wb3J0YW5jZSBzZXQgdG8gSGlnaFxuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdGlzRGF0YUZpZWxkVHlwZXMoZmllbGRHcm91cERhdGFGaWVsZCkgJiYgaGlnaEtleXMuaW5jbHVkZXMoZmllbGRHcm91cERhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIEltcG9ydGFuY2UuSGlnaDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaGFzIGFuIEltcG9ydGFuY2Ugd2UgdGFrZSBpdFxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGVsc2UgdGhlIGhpZ2hlc3QgaW1wb3J0YW5jZSAoaWYgYW55KSBpcyByZXR1cm5lZFxuXHRcdFx0XHRmaWVsZHNXaXRoSW1wb3J0YW5jZSA9IGZpZWxkR3JvdXBEYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBpdGVtPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoaWdoS2V5cy5pbmNsdWRlcygoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdD8gSW1wb3J0YW5jZS5IaWdoXG5cdFx0OiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG59XG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRjb25zdCB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFibGVDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0Z2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSlcblx0XHQpO1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChsaW5lSXRlbSkgPT4ge1xuXHRcdFx0Ly8gVE9ETzogdmFyaWFibGUgbmFtZSBzaG91bGQgYmUgZGF0YWZpZWxkIGFuZCBub3QgbGluZUl0ZW1cblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWxhdGl2ZVBhdGggPyBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoID8gZ3JvdXBQYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWApIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihuYW1lLCBzZW1hbnRpY0tleXMsIGxpbmVJdGVtKSk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgcmVsYXRpdmVQYXRoKTtcblx0XHRcdC8vIERldGVybWluZSBpZiB3ZSBuZWVkIGEgc2l0dWF0aW9ucyBpbmRpY2F0b3Jcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3BzID0gbmF2aWdhdGlvblByb3BlcnRpZXMuZmlsdGVyKFxuXHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PlxuXHRcdFx0XHRcdCFuYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TQVBPYmplY3ROb2RlVHlwZT8uTmFtZSA9PT0gXCJCdXNpbmVzc1NpdHVhdGlvblwiXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCA9IHNpdHVhdGlvbnNOYXZQcm9wcy5sZW5ndGggPj0gMSA/IHNpdHVhdGlvbnNOYXZQcm9wc1swXSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzaXR1YXRpb25zTmF2UHJvcCAmJiBmb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdC8vZXhjbHVkZSB0aGUgdHlwZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUgRXhwb3J0IChnZW5lcmF0ZXMgZXJyb3Igb24gRXhwb3J0IGFzIFBERilcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhsaW5lSXRlbSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0XHRcdH1cblx0XHRcdGxldCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChkYXRhVHlwZSkge1xuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKGxpbmVJdGVtLCBkYXRhVHlwZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0eXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdFx0XHRcdGNsYXNzTmFtZTogZGF0YVR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Li4ucHJvcGVydHlUeXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiB7IC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uY29uc3RyYWludHMgfVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHZpc3VhbFNldHRpbmdzOiBWaXN1YWxTZXR0aW5ncyA9IHt9O1xuXHRcdFx0aWYgKCFkYXRhVHlwZSB8fCAhdHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gX2lzQ29sdW1uTXVsdGlWYWx1ZWQobGluZUl0ZW0sIHRhYmxlQ29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzb3J0YWJsZSA9ICFpc011bHRpVmFsdWUgJiYgX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKTtcblx0XHRcdGNvbnN0IGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQobGluZUl0ZW0pLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBnZXRMYWJlbChsaW5lSXRlbSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4obGluZUl0ZW0pID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsOiBzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRyZXF1aXJlZDogaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcywgdGFibGVDcmVhdGlvbk1vZGUpLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0c29ydGFibGU6IHNvcnRhYmxlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPyByZWxhdGVkUHJvcGVydHlOYW1lcyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0YWRkaXRpb25hbFByb3BlcnR5SW5mb3M6IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDAgPyBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHR3aWR0aDogKGxpbmVJdGVtLmFubm90YXRpb25zPy5IVE1MNT8uQ3NzRGVmYXVsdHM/LndpZHRoPy52YWx1ZU9mKCkgYXMgc3RyaW5nKSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3MsXG5cdFx0XHRcdHRpbWV6b25lVGV4dDogZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lLFxuXHRcdFx0XHRpc1BhcnRPZkxpbmVJdGVtOiB0cnVlLFxuXHRcdFx0XHRpc011bHRpVmFsdWVcblx0XHRcdH07XG5cdFx0XHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKGxpbmVJdGVtKSB8fCBzTGFiZWw7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLnB1c2goLi4ucmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbik7XG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlIGxpbmVJdGVtIHBvaW50cyB0byBhIG5hdmlnYXRpb24gcHJvcGVydHkgd2l0aCBhIHRleHRBcnJhbmdlbWVudCBUZXh0T25seSwgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGNvbHVtbiB3aXRoIHRoZSB2YWx1ZSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgdGV4dCBwcm9wZXJ0eSBpcyByZWZlcmVuY2VkIG9uIHRoZSByZWxhdGVkIHByb3BlcnRpZXMgb2YgdGhlIGxpbmVJdGVtLCBzbyB3aWxsIGJlIGNyZWF0ZWQgb24gdGhlIF9jcmVhdGVSZWxhdGVkQ29sdW1ucyBtZXRob2QuXG5cdFx0XHRcdGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0bGluZUl0ZW0sXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV07XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgYSBtdWx0aS12YWx1ZSwgcmVsYXRlZCBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBzb3J0ZWQgYXMgd2UgZ28gdGhyb3VnaCBhIDEtbiByZWxhdGlvblxuXHRcdFx0XHRpZiAoaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLnB1c2gocmVsYXRlZFByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdHJldHVybiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xufTtcbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1hdGNoZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRtYXRjaGVkUHJvcGVydGllcyA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbWF0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGZpZWxkIGdyb3VwIGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpZWxkR3JvdXAgVGhlIGZpZWxkR3JvdXAgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkR3JvdXAgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWRGaWVsZEdyb3VwID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRmaWVsZEdyb3VwOiBGaWVsZEdyb3VwLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZmllbGRHcm91cERhdGEgPSBmaWVsZEdyb3VwLkRhdGE7XG5cdHJldHVybiBmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0Ly8gd2UgZXhjbHVkZSBib29sZWFuIHR5cGUsIHRoZSBlbmQtdXNlciBtYXkgd2FudCB0byBrZWVwIHRoZSB1bmRlcmx5aW5nIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdFx0aWYgKGlzRGF0YUZpZWxkKGl0ZW0pICYmIGl0ZW0/LlZhbHVlPy4kdGFyZ2V0LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0aXNTdGF0aWNhbGx5TWFuZGF0b3J5KGl0ZW0pIHx8XG5cdFx0XHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShpdGVtLlZhbHVlLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIFRoZSBwcm9wZXJ0eSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWREYXRhRmllbGRGb3JBbm5vdGF0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSA9IGhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeShkYXRhRmllbGRGb3JBbm5vdGF0aW9uKTtcblx0Ly8gQ2hlY2sgaWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRzIHRvIGEgRmllbGRHcm91cFxuXHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGlmIChpc1JlcXVpcmVkRmllbGRHcm91cChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGRUYXJnZXQgYXMgRmllbGRHcm91cCwgdGFibGVDcmVhdGlvbk1vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSAoZGF0YUZpZWxkVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0cmV0dXJuIGZpZWxkR3JvdXBEYXRhLnNvbWUoKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBpbm5lckRhdGFGaWVsZCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHRcdH0pO1xuXHR9XG5cdC8qSWYgdGhlIHVuZGVybHlpbmcgZGF0YXBvaW50IGlzIGEgcmF0aW5nIGluZGljYXRvciwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIHJhdGluZyBlbXB0eSAodmFsdWUgMCkgb24gcHVycG9zZS5cblx0QmVzaWRlcywgY3VycmVudGx5LCBvbmx5IGEgZmllbGRDb250cm9sIHNldCBvbiBhIGRhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBkYXRhUG9pbnQgaGFzIGFuIGluZmx1ZW5jZSBpbiB0aGUgdGFibGUuXG5cdEFjY29yZGluZ2x5LCBpZiBhIGRhdGFwb2ludCBjb21lcyBmcm9tIGEgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB3aXRoIGEgZmllbGRDb250cm9sIHNldCBhcyBub3QgbWFuZGF0b3J5LCB0aGlzIGRhdGFQb2ludCBtdXN0IG5vdCBiZSBmbGFnZ2VkIGFzIFwicmVxdWlyZWRcIiovXG5cdGlmIChoYXNEYXRhUG9pbnRUYXJnZXQoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiYgKGRhdGFGaWVsZFRhcmdldCBhcyBEYXRhUG9pbnQpLlZpc3VhbGl6YXRpb24gIT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRpZiAoRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoaXNTdGF0aWNhbGx5TWFuZGF0b3J5KGRhdGFGaWVsZEZvckFubm90YXRpb24pKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzUmVxdWlyZWREYXRhUG9pbnQoY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkVGFyZ2V0IGFzIERhdGFQb2ludCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvcGVydHkgaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZFByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5OiBQcm9wZXJ0eSwgdGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdHByb3BlcnR5LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIiAmJlxuXHRcdCFpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiZcblx0XHQoaXNTdGF0aWNhbGx5TWFuZGF0b3J5KHByb3BlcnR5KSB8fFxuXHRcdFx0KHRhYmxlQ3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzICYmXG5cdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YVBvaW50IGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRhdGFQb2ludCBUaGUgZGF0YVBvaW50IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhUG9pbnQgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWREYXRhUG9pbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgZGF0YVBvaW50OiBEYXRhUG9pbnQsIHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRpc1N0YXRpY2FsbHlNYW5kYXRvcnkoZGF0YVBvaW50KSB8fFxuXHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0aXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5KGRhdGFQb2ludC5WYWx1ZS4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHVuZGVybHlpbmcgY29sdW1uIGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3JlcXVpcmVkJyBwcm9wZXJ0eSBvZiB0aGUgdGFibGUgY29sdW1uLlxuICovXG5jb25zdCBpc1JlcXVpcmVkQ29sdW1uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YXJnZXQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSxcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVDcmVhdGlvbk1vZGUgfHwgQ3JlYXRpb25Nb2RlLklubGluZTtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldCkpIHtcblx0XHRyZXR1cm4gaXNSZXF1aXJlZFByb3BlcnR5KGNvbnZlcnRlckNvbnRleHQsIHRhcmdldCwgY3JlYXRpb25Nb2RlKSA/IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpIDogdW5kZWZpbmVkO1xuXHR9XG5cdC8vIENoZWNrIGlmIHRoZSBkYXRhRmllbGQgaXMgb2YgdHlwZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdGlmIChpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0KSkge1xuXHRcdHJldHVybiBpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0LCB0YXJnZXQsIGNyZWF0aW9uTW9kZSkgPyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKSA6IHVuZGVmaW5lZDtcblx0fVxuXHQvL0lmIHRoZSB1bmRlcmx5aW5nIHByb3BlcnR5IGlzIGEgYm9vbGVhbiwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXQpICYmIHRhcmdldC5WYWx1ZT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB7XG5cdFx0cmV0dXJuIGlzU3RhdGljYWxseU1hbmRhdG9yeSh0YXJnZXQpIHx8XG5cdFx0XHQoY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzICYmXG5cdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eSh0YXJnZXQuVmFsdWUuJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gYHske3Byb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSl9fWA7XG5cdFx0fSlcblx0XHQuam9pbihgJHtcIlxcblwifWApO1xufTtcbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4gPSB7fTtcblx0ZnVuY3Rpb24gaXNBbm5vdGF0aW9uQ29sdW1uKFxuXHRcdGNvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdFx0a2V5OiBzdHJpbmdcblx0KTogY29sdW1uIGlzIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5rZXkgPT09IGtleSk7XG5cdH1cblx0ZnVuY3Rpb24gaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gQ29sdW1uVHlwZS5TbG90O1xuXHR9XG5cdGZ1bmN0aW9uIGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSB1bmRlZmluZWQgJiYgISFtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZTtcblx0fVxuXHRmdW5jdGlvbiBfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSwgYW5ub3RhdGlvblRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pIHtcblx0XHRjb25zdCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGFubm90YXRpb25UYWJsZUNvbHVtbnMuZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAocHJvcC5uYW1lID09PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHByb3Auc29ydGFibGUgPSAhbm9uU29ydGFibGVDb2x1bW5zLmluY2x1ZGVzKHByb3BlcnR5LnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpKTtcblx0XHRcdFx0XHRwcm9wLmlzR3JvdXBhYmxlID0gcHJvcC5zb3J0YWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdC8vIEJhc2VUYWJsZUNvbHVtblxuXHRcdGNvbnN0IGJhc2VUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IG1hbmlmZXN0Q29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblx0XHRpZiAoaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uOiBDdXN0b21FbGVtZW50PEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KVxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHRcdFx0c2V0dGluZ3M6IG1hbmlmZXN0Q29sdW1uLnNldHRpbmdzLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShtYW5pZmVzdENvbHVtbi5mb3JtYXRPcHRpb25zKVxuXHRcdFx0fTtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdFx0bWFuaWZlc3RDb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB0b29sdGlwVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi50b29sdGlwKSxcblx0XHRcdFx0aGVhZGVyVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi5oZWFkZXIpO1xuXHRcdFx0Y29uc3QgYmFzZU1hbmlmZXN0Q29sdW1uID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGhlYWRlcjogaGVhZGVyVGV4dCxcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UgfHwgSW1wb3J0YW5jZS5Ob25lLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24gfHwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHkgfHwgXCJEZWZhdWx0XCIsXG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcHJvcGVydHlJbmZvcyxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHByb3BlcnR5SW5mb3Ncblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGU6IF9hcHBlbmRDdXN0b21UZW1wbGF0ZShwcm9wZXJ0eUluZm9zKSxcblx0XHRcdFx0XHRcdFx0d3JhcDogISEocHJvcGVydHlJbmZvcy5sZW5ndGggPiAxKVxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0aWQ6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdG5hbWU6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdC8vTmVlZGVkIGZvciBNREM6XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHsgdGV4dExpbmVzRWRpdDogNCB9LFxuXHRcdFx0XHRpc0dyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBmYWxzZSxcblx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH0sXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXBUZXh0ID8gdG9vbHRpcFRleHQgOiBoZWFkZXJUZXh0LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiBtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRyZXF1aXJlZDpcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbi5yZXF1aXJlZCAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zLCBhbm5vdGF0aW9uQ29sdW1ucyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBBZGRzIGNvbXB1dGVkIGNvbHVtbnMgc3VjaCBhcyB0aGUgZHJhZnQgc3RhdHVzIGFuZCBzaXR1YXRpb25zIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSB0YWJsZSBjb2x1bW5zIGNvbGxlY3RlZCBzbyBmYXJcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBlbnJpY2hlZCBzZXQgb2YgdGFibGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29tcHV0ZWRDb2x1bW5zKFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVUeXBlID0gZ2V0VGFibGVUeXBlKGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyk7XG5cblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJHcmlkVGFibGVcIiAmJiB0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBUb2RheSB3ZSBvbmx5IGRvIHNvbWV0aGluZyBoZXJlIGluIGNhc2Ugb2YgZ3JpZCBvciB0cmVlIHRhYmxlXG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucztcblx0fVxuXG5cdC8vIEluIGNhc2UgYSBncmlkIHRhYmxlIG9yIHRyZWUgdGFibGUgaXMgdXNlZCwgd2UgZGlzcGxheSB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdGNvbnN0IGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCA9IHRhYmxlQ29sdW1ucy5maW5kKFxuXHRcdChjb2x1bW4pID0+IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5oYXNTaXR1YXRpb25zSW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgPT09IHRydWVcblx0KTtcblx0aWYgKGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yPy5mb3JtYXRPcHRpb25zKSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gdGhlIGZvdW5kIGNvbHVtblxuXHRcdGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yLmZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgY29sdW1uXG5cdFx0Y29uc3Qgc2l0dWF0aW9uc0luZGljYXRvckNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleTogXCJzaXR1YXRpb25zSW5kaWNhdG9yXCIsXG5cdFx0XHRuYW1lOiBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIixcblx0XHRcdHByb3BlcnR5S2V5OiBjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvci5uYW1lLFxuXHRcdFx0aXNTaXR1YXRpb25zSW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX1NJVFVBVElPTlNfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19TSVRVQVRJT05TX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQ29tcHV0ZWQsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBudWxsLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cblx0XHQvLyBQbGFjZSB0aGUgZHJhZnQgc3RhdHVzIGNvbHVtbiBhZnRlciB0aGUgZmlyc3QgdmlzaWJsZSBjb2x1bW5cblx0XHRjb25zdCBpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uOiBpbnQgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdHRhYmxlQ29sdW1ucy5zcGxpY2UoaW5kZXhPZkZpcnN0VmlzaWJsZUNvbHVtbiArIDEsIDAsIHNpdHVhdGlvbnNJbmRpY2F0b3JDb2x1bW4pO1xuXHR9XG5cblx0Ly8gSW4gY2FzZSBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBpcyB1c2VkLCB3ZSBkaXNwbGF5IHRoZSBkcmFmdCBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdC8vIFRoZSBhZGRpdGlvbmFsIGNvbHVtbiBpcyBvbmx5IGFkZGVkIGZvciB0YWJsZXMgb24gYSBMUiBhbmQgaW4gY2FzZSB0ZWhlIGVudGl0eSBpcyBkcmFmdCBlbmFibGVkIVxuXHRjb25zdCBjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkID0gdGFibGVDb2x1bW5zLmZpbmQoXG5cdFx0KGNvbHVtbikgPT4gY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdCk7XG5cdGlmIChcblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I/LmZvcm1hdE9wdGlvbnMgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0Tm9kZShjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSB8fCBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSlcblx0KSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgZHJhZnQgaW5kaWNhdG9yIGluIHRoZSBmb3VuZCBjb2x1bW5cblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IuZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgZHJhZnQgaW5kaWNhdG9yIGNvbHVtblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yQ29sdW1uOiBDb21wdXRlZFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRuYW1lOiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRwcm9wZXJ0eUtleTogY29sdW1uV2l0aERyYWZ0SW5kaWNhdG9yLm5hbWUsXG5cdFx0XHRpc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX0RSQUZUX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHRvb2x0aXA6IFwie3NhcC5mZS5pMThuPkNfRFJBRlRfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Db21wdXRlZCxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IG51bGwsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cdFx0bGV0IGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlcjogaW50ID0gMDtcblx0XHRpZiAoY29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3MgYSBzaXR1YXRpb25zIGluZGljYXRvciBjb2x1bW4sIHBsYWNlIHRoZSBkcmFmdCBzdGF0dXMgY29sdW1uIGJlZm9yZSBpdFxuXHRcdFx0Y29sdW1uSW5kZXhUb0luc2VydEFmdGVyID1cblx0XHRcdFx0dGFibGVDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiAoY29sdW1uIGFzIENvbXB1dGVkVGFibGVDb2x1bW4pLmlzU2l0dWF0aW9uc0luZGljYXRvciA9PT0gdHJ1ZSkgLSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPdGhlcndpc2UgcGxhY2UgdGhlIGRyYWZ0IHN0YXR1cyBjb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHZpc2libGUgY29sdW1uXG5cdFx0XHRjb2x1bW5JbmRleFRvSW5zZXJ0QWZ0ZXIgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdH1cblx0XHR0YWJsZUNvbHVtbnMuc3BsaWNlKGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciArIDEsIDAsIGRyYWZ0SW5kaWNhdG9yQ29sdW1uKTtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCI7XG5cdFx0XHRcdGNhc2UgXCJSZXNwb25zaXZlVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXBcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNSZXNwb25zaXZlVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICpcbiAqIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG4gKiBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmXG5cdFx0IWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpICYmXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHRhYmxlVHlwZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGxldCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnk7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0YUdyb3VwQnkgPSBhR3JvdXBCeS5zbGljZSgwLCAxKTtcblx0XHR9XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKSB7XG5cdGNvbnN0IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lID0gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gY29sdW1uLm5hbWUpO1xuXHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzIVthZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0Y29sdW1uLmFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRjb2x1bW4uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRjdXN0b21BZ2dyZWdhdGU6IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5kZWZhdWx0QWdncmVnYXRlID8/IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MubWFwKFxuXHRcdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdGhlIGNvbXBsZXggcHJvcGVydHkgdXNpbmcgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8uY29uY2F0KGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgc2V0IG9uIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCAgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHBhdGhzIG9mIHRoZSByZXN0cmljdGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBQcm9wZXJ0eVBhdGhbXSB7XG5cdHJldHVybiBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHQoY2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcztcblx0XHR9LFxuXHRcdGZhbHNlXG5cdCk7XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb3BlcnR5IGlzIGFubm90YXRlZCBhcyBhIHJlcXVpcmVkIHByb3BlcnR5LlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZFxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkobmFtZTogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdC5pbmNsdWRlcyhuYW1lKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRhZ2dyZWdhdGVzRGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVG90YWwpIHtcblx0XHRjb25zdCBhVG90YWxzID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uVG90YWw7XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdGFnZ3JlZ2F0ZXNba2V5XSA9IHt9O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWdncmVnYXRlcyk7XG59XG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXTtcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdFtrZXkgaW4gXCJjcmVhdGVcIiB8IFwiZGVsZXRlXCIgfCBcInBhc3RlXCIgfCBcIm1hc3NFZGl0XCIgfCBcImluc2lnaHRzXCIgfCBcImNyZWF0aW9uUm93XCIgfCBcImN1dFwiXTogU3RhbmRhcmRBY3Rpb247XG5cdH07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzdGFuZGFyZCBhY3Rpb25zIGFuZCBhZGphY2VudCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBpbiB0aGUgZnVydGhlciBjb252ZXJzaW9uIHByb2Nlc3MuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgdGFibGUgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHZpZXdDb25maWd1cmF0aW9uIFRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgdGVtcGxhdGVkIHZpZXdcbiAqIEByZXR1cm5zIFN0YW5kYXJkIGFjdGlvbnMgYW5kIGNvbm5lY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHQpO1xuXHRjb25zdCBjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkID0gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dClcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zID0ge1xuXHRcdGN1dDogZ2V0U3RhbmRhcmRBY3Rpb25DdXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0aW5zaWdodHM6IGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KVxuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkLFxuXHRcdHN0YW5kYXJkQWN0aW9uc1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdHlwZU5hbWVQbHVyYWwgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWVQbHVyYWw7XG5cdGNvbnN0IHRpdGxlID0gdHlwZU5hbWVQbHVyYWwgJiYgY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHR5cGVOYW1lUGx1cmFsKSk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGhhc0Fic29sdXRlUGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwLFxuXHRcdHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pLFxuXHRcdGlkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IGdldFRhYmxlSUQodmlzdWFsaXphdGlvblBhdGgpIDogZ2V0VGFibGVJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCksIFwiTGluZUl0ZW1cIik7XG5cdGNvbnN0IHRhcmdldENhcGFiaWxpdGllcyA9IGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24ubWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uXG5cdCk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKTtcblx0fSBlbHNlIGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gVG8gbWFrZSBzY3JvbGxpbmcgc21vb3RoLCB3ZSBzZXQgdGhlIHRocmVzaG9sZCB2YWx1ZSBoaWdoZXIgZm9yIHRyZWUgdGFibGVzXG5cdFx0dGhyZXNob2xkID0gMjAwO1xuXHR9XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBpc1NlYXJjaGFibGUgPSBpc1BhdGhTZWFyY2hhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGVudGl0eVR5cGVOYW1lOiBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmVudGl0eVR5cGUgPyBlbnRpdHlTZXQuZW50aXR5VHlwZS5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGgsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0Y3JlYXRlOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgIT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIShpc0NvbnN0YW50KGlzU2VhcmNoYWJsZSkgJiYgaXNTZWFyY2hhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiBnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pLFxuXHRcdHJlcXVpcmVkUHJvcGVydGllczogZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHk/LiR0YXJnZXQ/LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIilcblx0XHRcdC5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS52YWx1ZSlcblx0fTtcbn1cbi8qKlxuICogR2V0cyB0aGUgZGF0YSB0eXBlIG9mIGEgY29sdW1uIGZvciB0aGUgZXhwb3J0LlxuICpcbiAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIGEgcHJvcGVydHksIGNvbHVtblxuICogQHBhcmFtIGlzQVRpbWV6b25lIElzIHRoZSBnaXZlbiBwcm9wZXJ0eSBhIHRpbWV6b25lXG4gKiBAcGFyYW0gaXNDdXJyZW5jeSBJcyB0aGUgZ2l2ZW4gcHJvcGVydHkgYSBjdXJyZW5jeVxuICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBhbHJlYWR5IGRldGVjdGVkIGV4cG9ydCBzZXR0aW5ncyBmcm9tIGRhdGFmaWVsZHNcbiAqIEByZXR1cm5zIFRoZSBzdXBwb3J0ZWQgZXhwb3J0IHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0RXhwb3J0RGF0YVR5cGUoXG5cdGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGlzQVRpbWV6b25lID0gZmFsc2UsXG5cdGlzQ3VycmVuY3kgPSBmYWxzZSxcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5nc1xuKTogc3RyaW5nIHtcblx0bGV0IGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0aWYgKCFkYXRhVHlwZSB8fCBleHBvcnRTZXR0aW5ncz8uZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH1cblx0aWYgKGV4cG9ydFNldHRpbmdzPy5pc0N1cnJlbmN5IHx8IGlzQ3VycmVuY3kpIHtcblx0XHRyZXR1cm4gXCJDdXJyZW5jeVwiO1xuXHR9XG5cdGlmIChpc0FUaW1lem9uZSkge1xuXHRcdHJldHVybiBcIlRpbWV6b25lXCI7XG5cdH1cblx0aWYgKGV4cG9ydFNldHRpbmdzPy53cmFwKSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9XG5cdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRjYXNlIFwiRWRtLkRlY2ltYWxcIjpcblx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdGNhc2UgXCJFZG0uRG91YmxlXCI6XG5cdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVPZlRpbWVcIjpcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiVGltZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiQm9vbGVhblwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG4vKipcbiAqIFNwbGl0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIHNwbGl0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IFt0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0aWYgKHNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gW107XG5cdFx0c2VsZWN0aW9uLlNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lPy52YWx1ZSA/PyBcIlwiO1xuXHRcdFx0aWYgKCFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50IDogNVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAxO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5mdW5jdGlvbiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmZyb3plbkNvbHVtbkNvdW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgdmFsdWUgZnJvbSB0aGUgdGFibGVTZXR0aW5ncyBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgVGFibGVTZXR0aW5ncyBPYmplY3RcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIHZhbHVlIG9mIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIG9yIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWRcbik6IHtcblx0ZmlsdGVyczogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG59IHtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGNvbnN0IGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+ID0ge307XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGlmICh0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHMgPSAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24ucGF0aHMgPz8gW10pLnJlZHVjZShcblx0XHRcdChmaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSwgcGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXRoLmFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdGZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aHM7XG5cdFx0XHR9LFxuXHRcdFx0W11cblx0XHQpO1xuXHRcdGlmIChxdWlja0ZpbHRlclBhdGhzLmxlbmd0aCkge1xuXHRcdFx0ZmlsdGVycy5xdWlja0ZpbHRlcnMgPSB7XG5cdFx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnNob3dDb3VudHMsXG5cdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHQvKipcblx0XHQgKiBQcm92aWRlIFNlbGVjdGlvbiBWYXJpYW50IHRvIGhpZGRlbkZpbHRlcnMgaW4gb3JkZXIgdG8gc2V0IHRoZSBTViBmaWx0ZXJzIHRvIHRoZSB0YWJsZS5cblx0XHQgKiBNREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0ICogYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdCAqIFRvIGF2b2lkIGltcGxlbWVudGluZyBzcGVjaWZpYyBMUiBmZWF0dXJlIHRvIFNBUCBGRSBNYWNybyBUYWJsZSwgdGhlIGZpbHRlcihzKSAgbm90IG1hbmFnZWQgYnkgdGhlIEZpbHRlckJhclxuXHRcdCAqIGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdGFibGUgdmlhIHBhcmFtZXRlci9jb250ZXh0IG5hbWVkIGZpbHRlcnMgYW5kIGtleSBoaWRkZW5GaWx0ZXJzLlxuXHRcdCAqL1xuXHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IHsgcGF0aHM6IFt7IGFubm90YXRpb25QYXRoOiBgQCR7c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gIH1dIH07XG5cdH1cblxuXHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShmaWx0ZXJzPy5xdWlja0ZpbHRlcnMgJiYgaGlkZVRhYmxlVGl0bGUpXG5cdH07XG59XG4vKipcbiAqIEFkZHMgdGhlIHRvb2x0aXAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBjb2x1bW4uXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIG9uIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF9hZGRUb29sVGlwKHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KSA/PyBjb2x1bW4ubGFiZWw7XG5cdGlmICh0b29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSB0b29sdGlwO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0aW9uIHdpbGwgaGF2ZSBhbiBleHByZXNzaW9uIGZvciBlbmFibGVtZW50IGdlbmVyYXRlZC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgY29udGFpbmluZyBhbiBhY3Rpb25cbiAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgZm9yIHRlbXBsYXRpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBpcyB0byBiZSBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHQvLyAxLiBBbiBhY3Rpb24gd2l0aCBhbiBvdmVybG9hZCwgdGhhdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGEgcGFyZW50IGVudGl0eS5cblx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdGxldCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IGZhbHNlO1xuXHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kKSB7XG5cdFx0XHQvLyBVbmJvdW5kIGFjdGlvbi4gSXMgcmVjb2duaXNlZCwgYnV0IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBjaGVja3MgZm9yIGlzQm91bmQgPSB0cnVlLCBzbyBub3QgZ2VuZXJhdGVkLlxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0Ly8gT3ZlcmxvYWQgYWN0aW9uXG5cdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly8gU3RhdGljIGFjdGlvblxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdXNlRW5hYmxlZEV4cHJlc3Npb247XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIHdpdGggVHJlZS1UYWJsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5mdW5jdGlvbiB1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogdm9pZCB7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0Y29uc3QgaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyIVxuXHQpO1xuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlID0gIW5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5pbmNsdWRlcyhoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTm9kZU1vdmFibGUgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc05vZGVNb3ZhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlzQ3JlYXRlRW5hYmxlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy5wcm9wZXJ0eU5hbWUgJiYgdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy52YWx1ZXMpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS52YWx1ZXM7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm5vZGVUeXBlID0ge1xuXHRcdFx0cHJvcGVydHlOYW1lOiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS5wcm9wZXJ0eU5hbWUsXG5cdFx0XHR2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdHRleHQ6IHZhbHVlc1t2YWx1ZV1cblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21GdW5jdGlvbkluZm8odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uKTogRXh0ZXJuYWxNZXRob2RDb25maWcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXZhbHVlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsYXN0RG90SW5kZXggPSB2YWx1ZS5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTE7XG5cdGNvbnN0IG1vZHVsZU5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0Y29uc3QgbWV0aG9kTmFtZSA9IHZhbHVlLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKTtcblxuXHQvLyBBZGQgdGhlIGN1c3RvbSBtb2R1bGUgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlcyBpZiBuZWNlc3Nhcnlcblx0aWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCIvZXh0ZW5zaW9uL1wiKSkge1xuXHRcdGlmICghdGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMpIHtcblx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID0gW21vZHVsZU5hbWVdO1xuXHRcdH0gZWxzZSBpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5wdXNoKG1vZHVsZU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUgfTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIG9wdGltaXN0aWMgYmF0Y2ggaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuIEByZXR1cm5zIFRydWUgaWYgT3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlzIGRpc2FibGVkXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Ly8gT3B0aW1pc3RpYyBiYXRjaCBpcyBzZXQgYnkgZGVmYXVsdFxuXHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5kaXNhYmxlUmVxdWVzdENhY2hlIHx8IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gZmFsc2UsXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogU2VsZWN0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlIDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7IC8vIFBhc3RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0ZWQgZm9yIE9QXG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBsaW5lSXRlbUFubm90YXRpb25cblx0XHQ/IGdldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHQ6IHt9O1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCB0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKTtcblx0Y29uc3QgdGFibGVSb3dNb2RlID0gX2dldFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRsZXQgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUpIHtcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID1cblx0XHRcdHR5cGVvZiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInRydWVcIlxuXHRcdFx0XHQ6IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlO1xuXHR9XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVBZGRDYXJkVG9JbnNpZ2h0czogdGFibGVTZXR0aW5ncz8uZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdGhlYWRlclZpc2libGU6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZVNldHRpbmdzLmhlYWRlcixcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogX2dldFRhYmxlU2VsZWN0aW9uTGltaXQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudDogX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlOiBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlLFxuXHRcdHNob3dSb3dDb3VudDogIXRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyAmJiAhX21hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpPy5zaG93Q291bnRzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHRkaXNhYmxlUmVxdWVzdENhY2hlOiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdGlzQ29tcGFjdFR5cGU6IF9tYW5pZmVzdFdyYXBwZXIuaXNDb21wYWN0VHlwZSgpLFxuXHRcdGJlZm9yZVJlYmluZFRhYmxlOiB0YWJsZVNldHRpbmdzLmJlZm9yZVJlYmluZFRhYmxlXG5cdH07XG5cblx0Y29uc3QgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4udGFibGVSb3dNb2RlLCAuLi5vRmlsdGVyQ29uZmlndXJhdGlvbiB9O1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRhYmxlQ29uZmlndXJhdGlvbiwgdGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkNoYW5nZSkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25DaGFuZ2UgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5zZWxlY3Rpb25DaGFuZ2UsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdH1cblx0aWYgKHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhlYWRlclZpc2libGUgPSB0YWJsZVNldHRpbmdzLmhlYWRlclZpc2libGU7XG5cdH1cblxuXHRyZXR1cm4gdGFibGVDb25maWd1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzPzogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBUYWJsZVR5cGUge1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0Ly8gaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGEgdGFibGUgdHlwZSB3ZSB3aWxsIHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy50eXBlO1xuXHR9XG5cblx0Ly8gY2hlY2sgaWYgVXBsb2FkVGFibGUgc2hhbGwgYmUgdXNlZFxuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uTWVkaWFSZXNvdXJjZT8uU3RyZWFtKSB7XG5cdFx0cmV0dXJuIFwiVXBsb2FkVGFibGVcIjtcblx0fVxuXG5cdC8vIGRlZmF1bHQgaXMgdGhlIFJlc3BvbnNpdmVUYWJsZVxuXHRyZXR1cm4gXCJSZXNwb25zaXZlVGFibGVcIjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJvcGVydHkgdXNpbmcgdGhlIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbiBzZXQgdG8gdGV4dCBvbmx5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggVGhlIGNvcnJlc3BvbmRpbmcgRGF0YU1vZGVsT2JqZWN0UGF0aC5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgY29sdW1uIHRvIGJlIGV2YWx1YXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0LlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0bGluZUl0ZW06IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IGlzUHJvcGVydHlOYXZpZ2F0ZWQgPVxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggIT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0aWYgKGlzUHJvcGVydHlOYXZpZ2F0ZWQgJiYgaXNEYXRhRmllbGQobGluZUl0ZW0pKSB7XG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0aXZlUGF0aF0gPSBsaW5lSXRlbS5WYWx1ZS4kdGFyZ2V0O1xuXHRcdG5vblNvcnRhYmxlQ29sdW1ucy5wdXNoKHJlbGF0aXZlUGF0aCk7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKGxpbmVJdGVtKSAmJiBoYXNGaWVsZEdyb3VwVGFyZ2V0KGxpbmVJdGVtKSkge1xuXHRcdChsaW5lSXRlbS5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRpZiAoaXNEYXRhRmllbGQoZmllbGQpICYmIGdldERpc3BsYXlNb2RlKGZpZWxkLlZhbHVlLiR0YXJnZXQpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0Y29uc3QgaW5oZXJlZFByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdGZpZWxkLlZhbHVlLnBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgaXNJbmhlcmVkUHJvcGVydHlOYXZpZ2F0ZWQgPVxuXHRcdFx0XHRcdGluaGVyZWRQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoICE9PVxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0XHRcdFx0aWYgKGlzSW5oZXJlZFByb3BlcnR5TmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2ZpZWxkLlZhbHVlLnBhdGhdID0gZmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMucHVzaChmaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSAmJiBvVGFyZ2V0TWFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RpZ2l0U2VxdWVuY2V9YF0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IGZhbHNlXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0SW1wb3J0YW5jZSxcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0Um93U3RhdHVzVmlzaWJpbGl0eSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdGdldFR5cGVDb25maWcsXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1U0tBLFVBQVUsRUFNZjtFQUFBLFdBTktBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtFQUFBLEdBQVZBLFVBQVUsS0FBVkEsVUFBVTtFQXFNZjtFQUNBLE1BQU1DLDZCQUE2QixHQUFHLEVBQUU7RUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxlQUFlLENBQzlCQyxrQkFBNEIsRUFDNUJDLGlCQUF5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
|