@sapui5/sap.fe.core 1.136.12 → 1.136.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppStateHandler.js +6 -1
- package/src/sap/fe/core/AppStateHandler.ts +5 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +12 -4
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +15 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +29 -35
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +43 -56
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
|
@@ -299,14 +299,24 @@ class EditFlow extends BaseControllerExtension {
|
|
|
299
299
|
ignoreTransientContexts = false
|
|
300
300
|
): boolean {
|
|
301
301
|
if (parentContext) {
|
|
302
|
-
const
|
|
303
|
-
|
|
302
|
+
const listBindingRelativePathToPage = ModelHelper.getRelativeMetaPathForListBinding(parentContext, listBinding);
|
|
303
|
+
const listBindingRelativePath = ModelHelper.getRelativeMetaPathForListBinding(listBinding.getContext(), listBinding);
|
|
304
|
+
if (ignoreTransientContexts || !CommonUtils.hasTransientContext(listBinding)) {
|
|
304
305
|
// if there are transient contexts (and we don't ignore this check), we must avoid requesting side effects
|
|
305
306
|
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
306
307
|
// if list binding is refreshed, transient contexts might be lost
|
|
307
|
-
|
|
308
|
-
.
|
|
309
|
-
|
|
308
|
+
if (listBindingRelativePath) {
|
|
309
|
+
this.getAppComponent()
|
|
310
|
+
.getSideEffectsService()
|
|
311
|
+
.requestSideEffectsForNavigationProperty(listBindingRelativePath, listBinding.getContext());
|
|
312
|
+
}
|
|
313
|
+
// if we are triggering side effects for a multivaluefield within a table, listBindingRelativePathToPage is different to listBindingRelativePath
|
|
314
|
+
// so we also ensure page side effects are triggered if need be
|
|
315
|
+
if (listBindingRelativePathToPage && listBindingRelativePathToPage !== listBindingRelativePath) {
|
|
316
|
+
this.getAppComponent()
|
|
317
|
+
.getSideEffectsService()
|
|
318
|
+
.requestSideEffectsForNavigationProperty(listBindingRelativePathToPage, parentContext);
|
|
319
|
+
}
|
|
310
320
|
|
|
311
321
|
return true;
|
|
312
322
|
}
|
|
@@ -27,12 +27,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
27
27
|
var not = BindingToolkit.not;
|
|
28
28
|
var lessOrEqual = BindingToolkit.lessOrEqual;
|
|
29
29
|
var length = BindingToolkit.length;
|
|
30
|
-
var isPathInModelExpression = BindingToolkit.isPathInModelExpression;
|
|
31
|
-
var isExpressionStaticallyResolvable = BindingToolkit.isExpressionStaticallyResolvable;
|
|
32
30
|
var isConstant = BindingToolkit.isConstant;
|
|
33
31
|
var ifElse = BindingToolkit.ifElse;
|
|
34
32
|
var greaterThan = BindingToolkit.greaterThan;
|
|
35
33
|
var greaterOrEqual = BindingToolkit.greaterOrEqual;
|
|
34
|
+
var getStaticallyResolvableExpression = BindingToolkit.getStaticallyResolvableExpression;
|
|
36
35
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
37
36
|
var formatResult = BindingToolkit.formatResult;
|
|
38
37
|
var equal = BindingToolkit.equal;
|
|
@@ -450,30 +449,22 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
450
449
|
function getCreateVisibility(converterContext, standardActionsContext) {
|
|
451
450
|
let isForCreationRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
452
451
|
let isForPaste = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
453
|
-
|
|
454
|
-
const isCreateHidden = hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext) || (isForCreationRow ? isActionAnnotatedHidden(converterContext, "CreateHidden", false) : standardActionsContext.hiddenAnnotation.create);
|
|
452
|
+
let isInsertable = standardActionsContext.restrictions.isInsertable.expression;
|
|
455
453
|
const newAction = standardActionsContext.newAction;
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
//
|
|
468
|
-
//
|
|
469
|
-
|
|
470
|
-
// - Otherwise
|
|
471
|
-
// - If we're on the list report ->
|
|
472
|
-
// - If UI.CreateHidden points to a property path -> provide a negated binding to this path
|
|
473
|
-
// - Otherwise, create is visible
|
|
474
|
-
// - Otherwise
|
|
475
|
-
// - This depends on the value of the UI.IsEditable
|
|
476
|
-
return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction?.available), equal(newAction?.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable", ifElse(and(standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false, not(isForPaste)), true, UI.IsCreateMode))), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(isPathInModelExpression(isCreateHidden)), not(isCreateHidden)), and(not(isCreateHidden), UI.IsEditable))));
|
|
454
|
+
if (newAction) {
|
|
455
|
+
// if there is a new action, we consider the action availability instead of insertable
|
|
456
|
+
isInsertable = newAction.available === undefined ? constant(true) : newAction.available;
|
|
457
|
+
}
|
|
458
|
+
isInsertable = getStaticallyResolvableExpression(isInsertable, constant(true));
|
|
459
|
+
const isCreateHidden = hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext) || (isForCreationRow ? isActionAnnotatedHidden(converterContext, "CreateHidden", false) : standardActionsContext.hiddenAnnotation.create);
|
|
460
|
+
if (standardActionsContext.creationMode === CreationMode.External) {
|
|
461
|
+
// if creation mode is external we do not consider insertable restrictions
|
|
462
|
+
return and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable));
|
|
463
|
+
}
|
|
464
|
+
return ifElse(and(
|
|
465
|
+
//If InlineCreationRows mode and a Responsive table type, with the parameter inlineCreationRowsHiddenInEditMode to true while not in create mode
|
|
466
|
+
// when calculating paste button visibility, we force the condition to false with the isForPaste property
|
|
467
|
+
standardActionsContext.creationMode === CreationMode.InlineCreationRows, standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable", ifElse(and(standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false, not(isForPaste)), true, UI.IsCreateMode)), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, and(not(isCreateHidden), isInsertable), and(not(isCreateHidden), isInsertable, UI.IsEditable)));
|
|
477
468
|
}
|
|
478
469
|
|
|
479
470
|
/**
|
|
@@ -487,12 +478,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
487
478
|
let isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
|
|
488
479
|
let pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
|
|
489
480
|
//we check if there is no relative path dependent on the context
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
493
|
-
if (!isExpressionStaticallyResolvable(pathDeletableExpression)) {
|
|
494
|
-
pathDeletableExpression = constant(true);
|
|
495
|
-
}
|
|
481
|
+
isDeleteHidden = getStaticallyResolvableExpression(isDeleteHidden, constant(false));
|
|
482
|
+
pathDeletableExpression = getStaticallyResolvableExpression(pathDeletableExpression, constant(true));
|
|
496
483
|
return ifElse(converterContext.getTemplateType() === TemplateType.AnalyticalListPage || hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), pathDeletableExpression, UI.IsEditable), and(not(isDeleteHidden), pathDeletableExpression)));
|
|
497
484
|
}
|
|
498
485
|
|
|
@@ -650,14 +637,21 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
650
637
|
function getPasteEnablement(pasteVisibility, standardActionsContext, forContextMenu) {
|
|
651
638
|
const selectedContextsPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
|
|
652
639
|
const pasteEnablementPath = !forContextMenu ? "nodeUpdatesInfo/pasteEnablement" : "contextmenu/nodeUpdatesInfo/pasteEnablement";
|
|
653
|
-
|
|
654
|
-
|
|
640
|
+
let isInsertable = standardActionsContext.restrictions.isInsertable.expression;
|
|
641
|
+
const tableType = standardActionsContext.tableManifestConfiguration.type;
|
|
642
|
+
const hasCellSelector = ["ResponsiveTable", "GridTable", "TreeTable"].includes(tableType);
|
|
643
|
+
if (hasCellSelector) {
|
|
644
|
+
// If table is not insertable, we only enable the paste button when there is a selection (To edit data)
|
|
645
|
+
isInsertable = or(standardActionsContext.restrictions.isInsertable.expression, equal(pathInModel("cellSelectorHasSelection", "internal"), true));
|
|
646
|
+
}
|
|
647
|
+
if (tableType === "TreeTable") {
|
|
648
|
+
return and(pasteVisibility, or(standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable", standardActionsContext.restrictions.isUpdatable.expression), isInsertable, ifElse(lessOrEqual(length(pathInModel(selectedContextsPath, "internal")), 1), equal(pathInModel(pasteEnablementPath, "internal"), true), false));
|
|
655
649
|
}
|
|
656
650
|
let updateOnNavigation = standardActionsContext.restrictions?.isUpdatable?.navigationExpression;
|
|
657
651
|
if (updateOnNavigation?._type === "Unresolvable") {
|
|
658
652
|
updateOnNavigation = constant(true);
|
|
659
653
|
}
|
|
660
|
-
return and(updateOnNavigation, pasteVisibility);
|
|
654
|
+
return and(updateOnNavigation, pasteVisibility, isInsertable);
|
|
661
655
|
}
|
|
662
656
|
|
|
663
657
|
/**
|
|
@@ -754,4 +748,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
754
748
|
_exports.isInDisplayMode = isInDisplayMode;
|
|
755
749
|
return _exports;
|
|
756
750
|
}, false);
|
|
757
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJ1cGRhdGVPbk5hdmlnYXRpb24iLCJfdHlwZSIsIm5vdEVxdWFsIiwiZW5hYmxlUGFzdGUiLCJpbmNsdWRlcyIsImlzVXBkYXRlSGlkZGVuIiwibWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCIsIm1hc3NFZGl0IiwiT2JqZWN0UGFnZSIsIkZyZWVTdHlsZVBhZ2UiLCJyZXN0cmljdGlvbnNJbnNlcnRhYmxlIiwiaW5kZXhPZiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGFzdE5hdiIsInBhcnRuZXIiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJmb3JtYXRSZXN1bHQiLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZm9yQ29udGV4dE1lbnUiLCJjb25kaXRpb25zIiwiY29udGV4dFBhdGgiLCJpc0RyYWZ0RW5hYmxlZCIsInB1c2giLCJDb2xsZWN0aW9uVHlwZSIsInJlc29sdmVBYnNvbHV0ZVBhdGgiLCJ0YXJnZXQiLCJsZXNzT3JFcXVhbCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJkZWxldGFibGVDb250ZXh0cyIsInVuU2F2ZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwiZ3JlYXRlclRoYW4iLCJzZWxlY3RlZENvbnRleHRzUGF0aCIsInBhc3RlRW5hYmxlbWVudFBhdGgiLCJpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSIsInVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyIsImdyZWF0ZXJPckVxdWFsIiwibnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyIsImJEaXNwbGF5TW9kZSIsImlzSW5EaXNwbGF5TW9kZSIsInJ1bnRpbWVCaW5kaW5nIiwiY3V0YWJsZUNvbnRleHRzUGF0aCIsImNvcHlhYmxlQ29udGV4dHNQYXRoIiwibW92ZVVwRG93blZpc2liaWxpdHkiLCJzaW5nbGVDb250ZXh0TW92YWJsZVVwIiwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duIiwiY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24iLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJoYXNJbmxpbmVFZGl0IiwidGVtcGxhdGVUeXBlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU3RhbmRhcmRBY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQm9vbGVhbiwgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGdyZWF0ZXJPckVxdWFsLFxuXHRncmVhdGVyVGhhbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZSxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdGxlbmd0aCxcblx0bGVzc09yRXF1YWwsXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7XG5cdGdldFJlbGF0aXZlUGF0aHMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoSW5zZXJ0YWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIENyZWF0aW9uTW9kZSwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEluc2lnaHRzRW5hYmxlbWVudCwgZ2V0SW5zaWdodHNWaXNpYmlsaXR5IH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvSW5zaWdodHNIZWxwZXJzXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vVGFibGVcIjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb24gPSBCYXNlQWN0aW9uICYge1xuXHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkO1xuXHRpc1RlbXBsYXRlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZUV4cHJlc3Npb24/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGVuYWJsZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbmFibGVkRm9yQ29udGV4dE1lbnU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbnR5cGUgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGUgPSB7XG5cdGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bmF2aWdhdGlvbkV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG50eXBlIFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUgPSBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZT47XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSB7XG5cdGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRjcmVhdGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRkZWxldGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHR1cGRhdGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0fTtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzoge1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHRhdmFpbGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0fTtcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdHJlc3RyaWN0aW9uczogU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBTdGFuZGFyZEFjdGlvbktleXMgPSB7XG5cdEN1dDogXCJTdGFuZGFyZEFjdGlvbjo6Q3V0XCIsXG5cdENvcHk6IFwiU3RhbmRhcmRBY3Rpb246OkNvcHlcIixcblx0Q3JlYXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGVcIixcblx0RGVsZXRlOiBcIlN0YW5kYXJkQWN0aW9uOjpEZWxldGVcIixcblx0Q3JlYXRpb25Sb3c6IFwiU3RhbmRhcmRBY3Rpb246OkNyZWF0aW9uUm93XCIsXG5cdFBhc3RlOiBcIlN0YW5kYXJkQWN0aW9uOjpQYXN0ZVwiLFxuXHRNYXNzRWRpdDogXCJTdGFuZGFyZEFjdGlvbjo6TWFzc0VkaXRcIixcblx0SW5zaWdodHM6IFwiU3RhbmRhcmRBY3Rpb246Okluc2lnaHRzXCIsXG5cdE1vdmVVcDogXCJTdGFuZGFyZEFjdGlvbjo6TW92ZVVwXCIsXG5cdE1vdmVEb3duOiBcIlN0YW5kYXJkQWN0aW9uOjpNb3ZlRG93blwiXG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBjb250ZXh0IGZvciB0aGUgc3RhbmRhcmQgYWN0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zICBUaGUgY29udGV4dCBmb3IgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCB7XG5cdHJldHVybiB7XG5cdFx0Y29sbGVjdGlvblBhdGg6IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdGhpZGRlbkFubm90YXRpb246IHtcblx0XHRcdGNyZWF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJDcmVhdGVIaWRkZW5cIiksXG5cdFx0XHRkZWxldGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiRGVsZXRlSGlkZGVuXCIpLFxuXHRcdFx0dXBkYXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIlVwZGF0ZUhpZGRlblwiKVxuXHRcdH0sXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCksXG5cdFx0bmV3QWN0aW9uOiBnZXROZXdBY3Rpb24oY29udmVydGVyQ29udGV4dCksXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdHJlc3RyaWN0aW9uczogZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHN0aWNreSBvciBkcmFmdCBpcyBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIHN1cHBvcnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgPSAoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFxuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG5cblx0cmV0dXJuIGJJc0RyYWZ0U3VwcG9ydGVkIHx8IGJJc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29uZmlndXJlZCBuZXdBY3Rpb24gaW50byBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBuZXcgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0FjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiB7IG5hbWU6IHN0cmluZzsgYXZhaWxhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBpc0VudGl0eVNldChjdXJyZW50RW50aXR5U2V0KVxuXHRcdD8gY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uID8/XG5cdFx0ICBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvblxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBuZXdBY3Rpb25OYW1lOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG5ld0FjdGlvbj8udG9TdHJpbmcoKTtcblx0aWYgKG5ld0FjdGlvbk5hbWUpIHtcblx0XHRjb25zdCBhdmFpbGFibGVQcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lOiBuZXdBY3Rpb25OYW1lLFxuXHRcdFx0YXZhaWxhYmxlOiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248Qm9vbGVhbj4oYXZhaWxhYmxlUHJvcGVydHksIFtdLCB0cnVlKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eSBjb25maWd1cmVkIGludG8gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc0Fubm90YXRpb25UZXJtXG4gKiBAcGFyYW0gYldpdGhOYXZpZ2F0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGFjdGlvbiB2aXNpYmlsaXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzQW5ub3RhdGlvblRlcm06IFwiQ3JlYXRlSGlkZGVuXCIgfCBcIlVwZGF0ZUhpZGRlblwiIHwgXCJEZWxldGVIaWRkZW5cIixcblx0YldpdGhOYXZpZ2F0aW9uUGF0aCA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBhbm5vdGF0aW9ucyBpbiBxdWVzdGlvbiAoQ3JlYXRlSGlkZGVuLCBEZWxldGVIaWRkZW4sIFVwZGF0ZUhpZGRlbikgbW9zdCBzcGVjaWZpY2FsbHkgY2FuIGJlIGRlZmluZWQgb24gRW50aXR5U2V0LlxuXHQvLyBJbiBzZXZlcmFsIGNhc2VzLCBmYWxsYmFjayB0byBFbnRpdHlUeXBlIG5lZWRzIHRvIGJlIGNoZWNrZWQ6XG5cdC8vIC0gSW4gY2FzZSBvZiBzaW5nbGV0b24gKGFubm90YXRpb25zIGRvIG5vdCBhcHBseSlcblx0Ly8gLSBFbnRpdHlTZXQgY2Fubm90IGJlIGRldGVybWluZWQgKGNvbnRhaW5tZW50IG9yIG5vIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdC8vIC0gRW50aXR5U2V0IGNhbiBiZSBkZXRlcm1pbmVkLCBidXQgdGhlIGFubm90YXRpb24gaXMgbm90IGRlZmluZWQgdGhlcmVcblxuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgYWN0aW9uQW5ub3RhdGlvblZhbHVlID1cblx0XHQoIWlzU2luZ2xldG9uKGN1cnJlbnRFbnRpdHlTZXQpICYmIGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5bc0Fubm90YXRpb25UZXJtXSkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5VST8uW3NBbm5vdGF0aW9uVGVybV07XG5cblx0aWYgKCFhY3Rpb25Bbm5vdGF0aW9uVmFsdWUpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhY3Rpb25Bbm5vdGF0aW9uVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHVuZGVmaW5lZCwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYW5ub3RhdGVkIHJlc3RyaWN0aW9ucyBmb3IgdGhlIGFjdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcmVzdHJpY3Rpb25zRGVmID0gW1xuXHRcdHtcblx0XHRcdGtleTogXCJpc0luc2VydGFibGVcIixcblx0XHRcdGZ1bmN0aW9uOiBpc1BhdGhJbnNlcnRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNVcGRhdGFibGVcIixcblx0XHRcdGZ1bmN0aW9uOiBpc1BhdGhVcGRhdGFibGVcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJpc0RlbGV0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aERlbGV0YWJsZVxuXHRcdH1cblx0XTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZT4gPSB7fTtcblx0cmVzdHJpY3Rpb25zRGVmLmZvckVhY2goZnVuY3Rpb24gKGRlZikge1xuXHRcdGNvbnN0IGRlZkZ1bmN0aW9uID0gZGVmW1wiZnVuY3Rpb25cIl07XG5cdFx0cmVzdWx0W2RlZi5rZXldID0ge1xuXHRcdFx0ZXhwcmVzc2lvbjogZGVmRnVuY3Rpb24uYXBwbHkobnVsbCwgW1xuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHRcdFx0fVxuXHRcdFx0XSksXG5cdFx0XHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogZGVmRnVuY3Rpb24uYXBwbHkobnVsbCwgW1xuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRcdFx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRcdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocylcblx0XHRcdFx0fVxuXHRcdFx0XSlcblx0XHR9O1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGVtcGxhdGluZyBmb3IgaW5zZXJ0L3VwZGF0ZSBhY3Rpb25zIGlzIG1hbmRhdG9yeS5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNEcmFmdE9yU3RpY2t5XG4gKiBAcmV0dXJucyBUcnVlIGlmIHdlIG5lZWQgdG8gdGVtcGxhdGUgaW5zZXJ0IG9yIHVwZGF0ZSBhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzRHJhZnRPclN0aWNreTogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNEcmFmdE9yU3RpY2t5IHx8IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNyZWF0ZVZpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGVWaXNpYmlsaXR5KSxcblx0XHR2aXNpYmxlRXhwcmVzc2lvbjogY3JlYXRlVmlzaWJpbGl0eSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHkpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DdXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjdXRWaXNpYmlsaXR5ID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoY3V0VmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGN1dFZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldEN1dEVuYWJsZW1lbnQoY3V0VmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldEN1dEVuYWJsZW1lbnQoY3V0VmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25Db3B5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY29weVZpc2liaWxpdHkgPSBnZXRDb3B5VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoY29weVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjb3B5VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q29weUVuYWJsZW1lbnQoY29weVZpc2liaWxpdHksIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDb3B5RW5hYmxlbWVudChjb3B5VmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHksXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnTW92ZSB1cCcgYW5kICdNb3ZlIGRvd24nIGFjdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JVcFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Zm9yVXA6IGJvb2xlYW5cbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY2FuQ2hhbmdlU2libGluZyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3N0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uICE9PSB1bmRlZmluZWQ7XG5cdGNvbnN0IG1vdmVWaXNpYmlsaXR5ID0gYW5kKGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksIGNhbkNoYW5nZVNpYmxpbmcpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtb3ZlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG1vdmVWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRNb3ZlVXBEb3duRW5hYmxlbWVudChtb3ZlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZm9yVXApKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1vdmVVcERvd25FbmFibGVtZW50KG1vdmVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmb3JVcCwgdHJ1ZSkpLFxuXHRcdGtleTogZm9yVXAgPyBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwIDogU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgZGVsZXRlVmlzaWJpbGl0eSA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoZGVsZXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGRlbGV0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlbGV0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZGVsZXRlVmlzaWJpbGl0eSwgZmFsc2UpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlbGV0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZGVsZXRlVmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDcmVhdGlvblJvdycgYWN0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhY3R1YWxseSBhbiBhY3Rpb24gdGhhdCBpcyB0ZW1wbGF0ZWQgYXMgYSBidXR0b24gYnV0IGl0cyBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSBhbiBNREMgZmVhdHVyZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgU3RhbmRhcmRBY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25Sb3dWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVUZW1wbGF0aW5nKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0aW9uUm93VmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0aW9uUm93VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRpb25Sb3dFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0aW9uUm93VmlzaWJpbGl0eSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0aW9uUm93LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3V0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8uZXhwcmVzc2lvbjtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHRcdD8gVUkuSXNFZGl0YWJsZVxuXHRcdFx0OiAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCAhPT0gdW5kZWZpbmVkOyAvLyBUbyBhbGxvdyBjdXQvcGFzdGUgZm9yIGEgZHJhZnQgVHJlZVRhYmxlIGluIGEgTGlzdFJlcG9ydFxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUsIFwiVHJlZVRhYmxlXCIpLFxuXHRcdGFuZChcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlISxcblx0XHRcdG5vdChhbmQoaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBmYWxzZSkpKSxcblx0XHRcdHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb25cblx0XHQpLFxuXHRcdGZhbHNlXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29weVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYXZhaWxhYmxlQ29weUFjdGlvbiA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3N0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRdPy5Db3B5QWN0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRpZiAoIWF2YWlsYWJsZUNvcHlBY3Rpb24pIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHRcdD8gVUkuSXNFZGl0YWJsZVxuXHRcdFx0OiAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCAhPT0gdW5kZWZpbmVkOyAvLyBUbyBhbGxvdyBjdXQvcGFzdGUgZm9yIGEgZHJhZnQgVHJlZVRhYmxlIGluIGEgTGlzdFJlcG9ydFxuXHRyZXR1cm4gaWZFbHNlKGVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUsIFwiVHJlZVRhYmxlXCIpLCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLCBmYWxzZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhY3R1YWxseSBhbiBhY3Rpb24gdGhhdCBpcyBkaXNwbGF5ZWQgYXMgYSBidXR0b24gYnV0IGl0cyBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSBhbiBNREMgZmVhdHVyZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuXG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGN1dFZpc2liaWxpdHkgPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBjb3B5VmlzaWJpbGl0eSA9IGdldENvcHlWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSwgdHJ1ZSk7XG5cdGNvbnN0IHBhc3RlVmlzaWJpbGl0eSA9IGdldFBhc3RlVmlzaWJpbGl0eShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0Y3JlYXRlVmlzaWJpbGl0eSxcblx0XHRjdXRWaXNpYmlsaXR5LFxuXHRcdGNvcHlWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuXHQpO1xuXHRjb25zdCBwYXN0ZUVuYWJsZW1lbnQgPSBnZXRQYXN0ZUVuYWJsZW1lbnQocGFzdGVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudEZvckNvbnRleHRNZW51ID0gZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cdHJldHVybiB7XG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24ocGFzdGVWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZUVuYWJsZW1lbnQpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24ocGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgbWFzc0VkaXRWaXNpYmlsaXR5ID0gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKG1hc3NFZGl0VmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG1hc3NFZGl0VmlzaWJpbGl0eSksXG5cdFx0Ly8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcblx0XHQvLyBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIHNlbGVjdGVkIGNvbnRleHQgaXMgYWN0aXZlIChpLmUuIFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIgaXMgZmFsc2UpLCB0aGUgYWN0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGluIHRoZSBjb250ZXh0IG1lbnVcblx0XHQvLyBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKVxuXHRcdCksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0TWFzc0VkaXRFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIG1hc3NFZGl0VmlzaWJpbGl0eSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0TWFzc0VkaXRFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIG1hc3NFZGl0VmlzaWJpbGl0eSwgdHJ1ZSkpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLk1hc3NFZGl0LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0FkZENhcmRzVG9JbnNpZ2h0cycgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0FkZENhcmRzVG9JbnNpZ2h0cycgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nXG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGluc2lnaHRzVmlzaWJpbGl0eSA9IGdldEluc2lnaHRzVmlzaWJpbGl0eShcIlRhYmxlXCIsIGNvbnZlcnRlckNvbnRleHQsIHZpc3VhbGl6YXRpb25QYXRoLCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaW5zaWdodHNFbmFibGVtZW50ID0gYW5kKGluc2lnaHRzVmlzaWJpbGl0eSwgZ2V0SW5zaWdodHNFbmFibGVtZW50KCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhpbnNpZ2h0c1Zpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpbnNpZ2h0c1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGluc2lnaHRzRW5hYmxlbWVudCksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuSW5zaWdodHMsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVUZW1wbGF0aW5nKFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly9UZW1wbGF0aW5nIG9mIENyZWF0ZSBCdXR0b24gaXMgbm90IGRvbmU6XG5cdC8vIFx0IC0gSWYgQnV0dG9uIGlzIG5ldmVyIHZpc2libGUoY292ZXJlZCB0aGUgRXh0ZXJuYWwgY3JlYXRlIGJ1dHRvbiwgbmV3IEFjdGlvbilcblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBvbiBDcmVhdGlvblJvdyBmb3IgQ3JlYXRlIEJ1dHRvblxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG5vdCBvbiBDcmVhdGlvblJvdyBmb3IgQ3JlYXRpb25Sb3cgQnV0dG9uXG5cblx0cmV0dXJuIGFuZChcblx0XHQvL1hOT1IgZ2F0ZVxuXHRcdG9yKFxuXHRcdFx0YW5kKGlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpLFxuXHRcdFx0YW5kKCFpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KVxuXHRcdCksXG5cdFx0b3Iobm90KGlzQ29uc3RhbnQoY3JlYXRlVmlzaWJpbGl0eSkpLCBjcmVhdGVWaXNpYmlsaXR5KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25WaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFRlbXBsYXRpbmcoYWN0aW9uVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG9yKG5vdChpc0NvbnN0YW50KGFjdGlvblZpc2liaWxpdHkpKSwgYWN0aW9uVmlzaWJpbGl0eSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIENyZWF0ZS9EZWxldGUgYnV0dG9ucyBzaGFsbCBiZSBoaWRkZW4gaW4gYW4gYW5hbHl0aWNhbC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVHJ1ZSBpZiBidXR0b25zIHNoYWxsIGJlIGhpZGRlbiwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoaWRlQ3JlYXRlRGVsZXRlSW5BbmFseXRpY2FsVGFibGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdC8vIFdlIHNob3cgQ3JlYXRlL0RlbGV0ZSBidXR0b25zIGluIEFuYWx5dGljYWwgdGFibGVzIG9ubHkgaW4gYSBMaXN0UmVwb3J0LlxuXHRyZXR1cm4gKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIlxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHBhcmFtIGlzRm9yUGFzdGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlLFxuXHRpc0ZvclBhc3RlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc0NyZWF0ZUhpZGRlbiA9XG5cdFx0aGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpIHx8XG5cdFx0KGlzRm9yQ3JlYXRpb25Sb3dcblx0XHRcdD8gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJDcmVhdGVIaWRkZW5cIiwgZmFsc2UpXG5cdFx0XHQ6IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5jcmVhdGUpO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0Ly8gQ3JlYXRlIEJ1dHRvbiBpcyB2aXNpYmxlOlxuXHQvLyBcdCAtIEZvciBhbmFseXRpY2FsIHRhYmxlczogb25seSBpbiBhIExpc3RSZXBvcnRcblx0Ly8gXHQgLSBJZiB0aGUgY3JlYXRpb24gbW9kZSBpcyBleHRlcm5hbFxuXHQvLyAgICAgIC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IGFuZCBjcmVhdGUgaXMgbm90IGhpZGRlblxuXHQvL1x0XHQtIE90aGVyd2lzZSB0aGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdC8vXHQgLSBPdGhlcndpc2Vcblx0Ly9cdFx0LSBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHZhbGlkIHRoZW4gY3JlYXRlIGJ1dHRvbiBpc24ndCB2aXNpYmxlXG5cdC8vXHRcdFx0LSBubyBuZXdBY3Rpb24gYXZhaWxhYmxlXG5cdC8vXHRcdFx0LSBJdCdzIG5vdCBpbnNlcnRhYmxlIGFuZCB0aGVyZSBpcyBub3QgYSBuZXcgYWN0aW9uXG5cdC8vXHRcdFx0LSBjcmVhdGUgaXMgaGlkZGVuXG5cdC8vXHRcdFx0LSBUaGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0Ly9cdFx0XHQtIEl0J3MgYW4gQW5hbHl0aWNhbCBMaXN0IFBhZ2Vcblx0Ly9cdFx0XHQtIFVzZXMgSW5saW5lQ3JlYXRpb25Sb3dzIG1vZGUgYW5kIGEgUmVzcG9uc2l2ZSB0YWJsZSB0eXBlLCB3aXRoIHRoZSBwYXJhbWV0ZXIgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSB0byB0cnVlIHdoaWxlIG5vdCBpbiBjcmVhdGUgbW9kZVxuXHQvLyAgICAgICAgICBcdC0gd2hlbiBjYWxjdWxhdGluZyBwYXN0ZSBidXR0b24gdmlzaWJpbGl0eSwgIHdlIGZvcmNlIHRoZSBjb25kaXRpb24gdG8gZmFsc2Ugd2l0aCB0aGUgaXNGb3JQYXN0ZSBwcm9wZXJ0eVxuXHQvLyAgIC0gT3RoZXJ3aXNlXG5cdC8vIFx0IFx0LSBJZiB3ZSdyZSBvbiB0aGUgbGlzdCByZXBvcnQgLT5cblx0Ly8gXHQgXHRcdC0gSWYgVUkuQ3JlYXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly8gXHQgXHRcdC0gT3RoZXJ3aXNlLCBjcmVhdGUgaXMgdmlzaWJsZVxuXHQvLyBcdCBcdC0gT3RoZXJ3aXNlXG5cdC8vIFx0ICBcdCAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIFVJLklzRWRpdGFibGVcblx0cmV0dXJuIGlmRWxzZShcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsLFxuXHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVUkuSXNFZGl0YWJsZSkpLFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChuZXdBY3Rpb24/LmF2YWlsYWJsZSksIGVxdWFsKG5ld0FjdGlvbj8uYXZhaWxhYmxlLCBmYWxzZSkpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgIW5ld0FjdGlvbiksXG5cdFx0XHRcdGFuZChpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSwgZXF1YWwoaXNDcmVhdGVIaWRkZW4sIHRydWUpKSxcblx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzLFxuXHRcdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0YW5kKFxuXHRcdFx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0Py50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdG5vdChpc0ZvclBhc3RlKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRVSS5Jc0NyZWF0ZU1vZGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRmYWxzZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRcdG9yKG5vdChpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihpc0NyZWF0ZUhpZGRlbikpLCBub3QoaXNDcmVhdGVIaWRkZW4pKSxcblx0XHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGxldCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGxldCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cdC8vd2UgY2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVsYXRpdmUgcGF0aCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHRcblx0aWYgKCFpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZShpc0RlbGV0ZUhpZGRlbikpIHtcblx0XHRpc0RlbGV0ZUhpZGRlbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXHRpZiAoIWlzRXhwcmVzc2lvblN0YXRpY2FsbHlSZXNvbHZhYmxlKHBhdGhEZWxldGFibGVFeHByZXNzaW9uKSkge1xuXHRcdHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblx0cmV0dXJuIGlmRWxzZShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0XHRoaWRlQ3JlYXRlRGVsZXRlSW5BbmFseXRpY2FsVGFibGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0ZmFsc2UsXG5cdFx0aWZFbHNlKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRhbmQobm90KGlzRGVsZXRlSGlkZGVuKSwgcGF0aERlbGV0YWJsZUV4cHJlc3Npb24sIFVJLklzRWRpdGFibGUpLFxuXHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIHBhdGhEZWxldGFibGVFeHByZXNzaW9uKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBjb3B5VmlzaWJpbGl0eVxuICogQHBhcmFtIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjdXRWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGNvcHlWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly9JZiBpdCBpc24ndCBkZWFjdGl2YXRlZCB3aXRoaW4gdGhlIG1hbmlmZXN0IGFuZCB3ZSdyZSBvcGVyYXRpbmcgaW4gT1AvYmxvY2tzIG91dHNpZGUgRmlvcmkgZWxlbWVudHMgdGVtcGxhdGVzLFxuXHQvL3RoZSB0cmVlVGFibGUncyB2aXNpYmlsaXR5IHJlbGllcyBvbiB0aGUgY3V0dmlzaWJpbGl0eSxcblx0Ly93aGlsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgb3RoZXIgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSBpbnNlcnRhYmxlIHJlc3RyaWN0aW9ucyBhbmQgY3JlYXRlIHZpc2liaWxpdHkuXG5cdGxldCB1cGRhdGVPbk5hdmlnYXRpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/Lm5hdmlnYXRpb25FeHByZXNzaW9uO1xuXHRpZiAodXBkYXRlT25OYXZpZ2F0aW9uPy5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHVwZGF0ZU9uTmF2aWdhdGlvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cdHJldHVybiBhbmQoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdFx0XHQ/IG9yKGN1dFZpc2liaWxpdHksIGNvcHlWaXNpYmlsaXR5KVxuXHRcdFx0OiBhbmQoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQoY3JlYXRlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIHVwZGF0ZU9uTmF2aWdhdGlvbilcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdG5vdEVxdWFsKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZW5hYmxlUGFzdGUsIGZhbHNlKSxcblx0XHRcdFx0XHQhW1RlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXS5pbmNsdWRlcyhjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKVxuXHRcdFx0ICApLFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZFxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzVXBkYXRlSGlkZGVuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLnVwZGF0ZSxcblx0XHRwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdDogYm9vbGVhbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/Lm1hc3NFZGl0LmVuYWJsZWQgfHwgZmFsc2U7XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlXG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogW1RlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LCBUZW1wbGF0ZVR5cGUuRnJlZVN0eWxlUGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSk7XG5cdC8vTWFzc0VkaXQgaXMgdmlzaWJsZVxuXHQvLyBJZlxuXHQvL1x0XHQtIHRoZXJlIGlzIG5vIHN0YXRpYyByZXN0cmljdGlvbnMgc2V0IHRvIGZhbHNlXG5cdC8vXHRcdC0gYW5kIGVuYWJsZU1hc3NFZGl0IGlzIG5vdCBzZXQgdG8gZmFsc2UgaW50byB0aGUgbWFuaWZlc3Rcblx0Ly9cdFx0LSBhbmQgdGhlIHNlbGVjdGlvbk1vZGUgaXMgcmVsZXZhbnRcblx0Ly9cdFRoZW4gTWFzc0VkaXQgaXMgYWx3YXlzIHZpc2libGUgaW4gTFIgb3IgZHluYW1pY2FsbHkgdmlzaWJsZSBpbiBPUCBhY2NvcmRpbmcgdG8gdWk+RWRpdGFibGUgYW5kIGhpZGRlbkFubm90YXRpb25cblx0Ly8gIEJ1dHRvbiBpcyBoaWRkZW4gZm9yIGFsbCBvdGhlciBjYXNlc1xuXHRyZXR1cm4gYW5kKFxuXHRcdG5vdChhbmQoaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGVxdWFsKHBhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBmYWxzZSkpKSxcblx0XHRtYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0LFxuXHRcdHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0bm90KGlzVXBkYXRlSGlkZGVuKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGlvblJvd1Zpc2liaWxpdHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGNyZWF0aW9uUm93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3dFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0aW9uUm93VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZXN0cmljdGlvbnNJbnNlcnRhYmxlID0gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PiB7XG5cdFx0XHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRwYXRoID0gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdFx0XHRpZiAobmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgbGFzdE5hdiA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzW25hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRjb25zdCBwYXJ0bmVyID0gaXNOYXZpZ2F0aW9uUHJvcGVydHkobGFzdE5hdikgJiYgbGFzdE5hdi5wYXJ0bmVyO1xuXHRcdFx0XHRpZiAocGFydG5lcikge1xuXHRcdFx0XHRcdHBhdGggPSBgJHtwYXJ0bmVyfS8ke3BhdGh9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlID1cblx0XHRyZXN0cmljdGlvbnNJbnNlcnRhYmxlLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHQ/IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHRcdCAgfSlcblx0XHRcdDogcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZTtcblxuXHRyZXR1cm4gYW5kKFxuXHRcdGNyZWF0aW9uUm93VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydGFibGUsXG5cdFx0b3IoXG5cdFx0XHQhc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtwYXRoSW5Nb2RlbChcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCBcImludGVybmFsXCIpXSwgdGFibGVGb3JtYXR0ZXJzLnZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY29uZGl0aW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0Y29uc3QgY29udGV4dFBhdGg6IHN0cmluZyA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRjb25zdCBpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHQvLyBmb3IgSW5saW5lIGNyZWF0aW9uIHJvd3MgY3JlYXRlIGNhbiBiZSBoaWRkZW4gdmlhIG1hbmlmZXN0IGFuZCB0aGlzIHNob3VsZCBub3QgaW1wYWN0IGl0cyBlbmFibGVtZW50XG5cdFx0Y29uZGl0aW9ucy5wdXNoKFxuXHRcdFx0YW5kKG5vdChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKSwgaXNEcmFmdEVuYWJsZWQsIFVJLklzRWRpdGFibGUsIG5vdChwYXRoSW5Nb2RlbChcIklzQWN0aXZlRW50aXR5XCIpKSlcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbmRpdGlvbnMucHVzaChjcmVhdGVWaXNpYmlsaXR5KTtcblx0fVxuXG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBDb2xsZWN0aW9uVHlwZSA9IGNvbnZlcnRlckNvbnRleHQucmVzb2x2ZUFic29sdXRlUGF0aDxFbnRpdHlTZXQ+KHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY29sbGVjdGlvblBhdGgpLnRhcmdldDtcblx0Y29uZGl0aW9ucy5wdXNoKFxuXHRcdG9yKFxuXHRcdFx0aXNFbnRpdHlTZXQoQ29sbGVjdGlvblR5cGUpLFxuXHRcdFx0YW5kKGlzSW5zZXJ0YWJsZSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsIFVJLklzRWRpdGFibGUpKVxuXHRcdClcblx0KTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gSW4gY2FzZSBvZiBhIFRyZWVUYWJsZSwgdGhlIGNyZWF0ZSBidXR0b24gc2hhbGwgYmUgYWN0aXZlIG9ubHkgaWYgMCBvciAxIGl0ZW1zIGFyZSBzZWxlY3RlZCAocGFyZW50IG5vZGUpXG5cdFx0Ly8gV2UgZG8gbm90IG5lZWQgdGhpcyBjb25kaXRpb24gb24gdGhlIENvbnRleHRNZW51LCBhcyB3ZSBvbmx5IGNyZWF0ZSBvbiB0aGUgc2VsZWN0ZWQgbm9kZVxuXHRcdGNvbmRpdGlvbnMucHVzaChsZXNzT3JFcXVhbChwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKTtcblxuXHRcdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQpIHtcblx0XHRcdC8vIFRoZXJlJ3MgYSBjcmVhdGVFbmFibGVtZW50IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhZGRpdGlvbm5hbCBjb25kaXRpb25zXG5cdFx0XHQvLyBUaGVzZSBjb25kaXRpb25zIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBpbnRlcm5hbCBtb2RlbFxuXHRcdFx0Y29uZGl0aW9ucy5wdXNoKG5vdEVxdWFsKHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJjcmVhdGVFbmFibGVtZW50L0NyZWF0ZVwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhbmQoLi4uY29uZGl0aW9ucyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBkZWxldGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGRlbGV0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGZvbGxvd2luZyBjb250ZXh0cyBhcmUgZmlsbGVkIGF0IHJ1bnRpbWUgd2hlbiBhIHVzZXIgc2VsZWN0cyBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cblx0Ly8gQ2hlY2tzIGFyZSB0aGVuIG1hZGUgaW4gZnVuY3Rpb24gdXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMgaW4gZmlsZSBEZWxldGVIZWxwZXIgdG8gc2VlIGlmIHRoZXJlXG5cdC8vIGFyZSBpdGVtcyB0aGF0IGNhbiBiZSBkZWxldGVkLCB0aHVzIHRoZSBkZWxldGUgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkIGluIHRoZXNlIGNhc2VzLlxuXHRjb25zdCBjb250ZXh0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRjb25zdCBkZWxldGFibGVDb250ZXh0cyA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkZWxldGFibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCB1blNhdmVkQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwidW5TYXZlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblxuXHQvLyBcIlVucmVzb2x2YWJsZVwiIGluIG5hdmlnYXRpb25FeHByZXNzaW9uIGlzIGludGVycHJldGVkIHRvIG1lYW4gdGhhdCB0aGVyZSBhcmUgbm8gbmF2aWdhdGlvbkV4cHJlc3Npb25zXG5cdC8vIGRlZmluZWQuXG5cdC8vIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb24gaXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCBjb21lc1xuXHQvLyBmcm9tIHRoZSBEZWxldGUgcmVzdHJpY3Rpb25zIGRlZmluZWQgaW4gTmF2aWdhdGlvblJlc3RyaWN0aW9ucyBmb3IgdGhpcyBlbnRpdHkuIEluIG9yZGVyIHRvXG5cdC8vIGJlIGRlbGV0YWJsZSwgdGhlIGl0ZW0gbXVzdCBhbHNvIGJlIGFsbG93ZWQgdG8gYmUgZGVsZXRhYmxlIGFjY29yZGluZyB0byB0aGUgRGVsZXRlIFJlc3RyaWN0aW9uc1xuXHQvLyBvbiB0aGUgZW50aXR5IGl0c2VsZi5cblx0cmV0dXJuIGFuZChcblx0XHRkZWxldGVWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRvcihcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkZWxldGFibGVDb250ZXh0cywgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgodW5TYXZlZENvbnRleHRzLCB0cnVlKSwgMClcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBwYXN0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVFbmFibGVtZW50KFxuXHRwYXN0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHNlbGVjdGVkQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJzZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHNcIjtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL3Bhc3RlRW5hYmxlbWVudFwiIDogXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vcGFzdGVFbmFibGVtZW50XCI7XG5cdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0cGFzdGVWaXNpYmlsaXR5LFxuXHRcdFx0b3IoXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uXG5cdFx0XHQpLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRsZXNzT3JFcXVhbChsZW5ndGgocGF0aEluTW9kZWwoc2VsZWN0ZWRDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIikpLCAxKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwocGFzdGVFbmFibGVtZW50UGF0aCwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdGxldCB1cGRhdGVPbk5hdmlnYXRpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/Lm5hdmlnYXRpb25FeHByZXNzaW9uO1xuXHRpZiAodXBkYXRlT25OYXZpZ2F0aW9uPy5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHVwZGF0ZU9uTmF2aWdhdGlvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cdHJldHVybiBhbmQodXBkYXRlT25OYXZpZ2F0aW9uLCBwYXN0ZVZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBtYXNzRWRpdFZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzc0VkaXRFbmFibGVtZW50KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdG1hc3NFZGl0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPVxuXHRcdCFpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwidXBkYXRhYmxlQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvdXBkYXRhYmxlQ29udGV4dHNcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwocGF0aEluTW9kZWwobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSwgMSk7XG5cdGNvbnN0IG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChsZW5ndGgocGF0aEluTW9kZWwodXBkYXRhYmxlQ29udGV4dFByb3BlcnR5LCBcImludGVybmFsXCIpKSwgMSk7XG5cdGNvbnN0IGJJc0RyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBiRGlzcGxheU1vZGUgPSBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgYmluZGluZyBpbiBjYXNlXG5cdC8vIDEuIFVwZGF0ZSBpcyBkZXBlbmRlbnQgb24gY3VycmVudCBlbnRpdHkgcHJvcGVydHkgKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgaXMgdHJ1ZSkuXG5cdC8vIDIuIFRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWQobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQuXG5cdC8vICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgcnVudGltZS5cblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBpZkVsc2UoXG5cdFx0b3IoYW5kKGJEaXNwbGF5TW9kZSwgYklzRHJhZnRTdXBwb3J0ZWQpLCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5KSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzKSxcblx0XHRhbmQobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzKVxuXHQpO1xuXG5cdHJldHVybiBhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBpZkVsc2UoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSwgcnVudGltZUJpbmRpbmcsIGFuZChydW50aW1lQmluZGluZywgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY3V0VmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXRFbmFibGVtZW50KFxuXHRjdXRWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjdXRhYmxlQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiIDogXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IHBhdGhJbk1vZGVsKGN1dGFibGVDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIik7XG5cdHJldHVybiBhbmQoXG5cdFx0Y3V0VmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29weVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlFbmFibGVtZW50KFxuXHRjb3B5VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY29weWFibGVDb250ZXh0c1BhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiIDogXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBwYXRoSW5Nb2RlbChjb3B5YWJsZUNvbnRleHRzUGF0aCwgXCJpbnRlcm5hbFwiKTtcblx0cmV0dXJuIGFuZChjb3B5VmlzaWJpbGl0eSwgcnVudGltZUJpbmRpbmcpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ01vdmUgdXAnIGFuZCAnTW92ZSBkb3duJyBhY3Rpb25zLlxuICogQHBhcmFtIG1vdmVVcERvd25WaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvclVwXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQoXG5cdG1vdmVVcERvd25WaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvclVwOiBib29sZWFuLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBzaW5nbGVDb250ZXh0TW92YWJsZVVwID0gIWZvckNvbnRleHRNZW51ID8gXCJzaW5nbGVDb250ZXh0TW92YWJsZVVwXCIgOiBcImNvbnRleHRtZW51L3NpbmdsZUNvbnRleHRNb3ZhYmxlVXBcIjtcblx0Y29uc3Qgc2luZ2xlQ29udGV4dE1vdmFibGVEb3duID0gIWZvckNvbnRleHRNZW51ID8gXCJzaW5nbGVDb250ZXh0TW92YWJsZURvd25cIiA6IFwiY29udGV4dG1lbnUvc2luZ2xlQ29udGV4dE1vdmFibGVEb3duXCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gZm9yVXBcblx0XHQ/IGVxdWFsKHBhdGhJbk1vZGVsKHNpbmdsZUNvbnRleHRNb3ZhYmxlVXAsIFwiaW50ZXJuYWxcIiksIHRydWUpXG5cdFx0OiBlcXVhbChwYXRoSW5Nb2RlbChzaW5nbGVDb250ZXh0TW92YWJsZURvd24sIFwiaW50ZXJuYWxcIiksIHRydWUpO1xuXHRyZXR1cm4gYW5kKFxuXHRcdG1vdmVVcERvd25WaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRydW50aW1lQmluZGluZ1xuXHQpO1xufVxuXG4vKipcbiAqIFRlbGxzIGlmIHRoZSB0YWJsZSBpbiB0ZW1wbGF0ZSBpcyBpbiBkaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhYmxlIGlzIGluIGRpc3BsYXkgbW9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiwgY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gPSBmYWxzZSk6IGJvb2xlYW4ge1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNJbmxpbmVFZGl0KCkpIHtcblx0XHQvL2lmIHRoZXJlIGlzIGlubGluZSBlZGl0IGluIHRoZSBwYWdlIHdlIGNhbm5vdCBmb3JjZSB0aGUgdGFibGUgdG8gZGlzcGxheSBiYXNlZCBvbiB0aGUgdGVtcGxhdGUgdHlwZVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRpZiAoXG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCB8fFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdChjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDQTtFQXdDTyxNQUFNQSxrQkFBa0IsR0FBRztJQUNqQ0MsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkMsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQ0MsS0FB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
|
|
751
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbiIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzRGVsZXRlSGlkZGVuIiwicGF0aERlbGV0YWJsZUV4cHJlc3Npb24iLCJpc0RlbGV0YWJsZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsInVwZGF0ZU9uTmF2aWdhdGlvbiIsIl90eXBlIiwibm90RXF1YWwiLCJlbmFibGVQYXN0ZSIsImluY2x1ZGVzIiwiaXNVcGRhdGVIaWRkZW4iLCJtYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwibWFzc0VkaXQiLCJPYmplY3RQYWdlIiwiRnJlZVN0eWxlUGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJpbmRleE9mIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsYXN0TmF2IiwicGFydG5lciIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImZvcm1hdFJlc3VsdCIsInRhYmxlRm9ybWF0dGVycyIsInZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMiLCJmb3JDb250ZXh0TWVudSIsImNvbmRpdGlvbnMiLCJjb250ZXh0UGF0aCIsImlzRHJhZnRFbmFibGVkIiwicHVzaCIsIkNvbGxlY3Rpb25UeXBlIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImxlc3NPckVxdWFsIiwiY3JlYXRlRW5hYmxlbWVudCIsImRlbGV0YWJsZUNvbnRleHRzIiwidW5TYXZlZENvbnRleHRzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJncmVhdGVyVGhhbiIsInNlbGVjdGVkQ29udGV4dHNQYXRoIiwicGFzdGVFbmFibGVtZW50UGF0aCIsInRhYmxlVHlwZSIsImhhc0NlbGxTZWxlY3RvciIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5IiwidXBkYXRhYmxlQ29udGV4dFByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJjdXRhYmxlQ29udGV4dHNQYXRoIiwiY29weWFibGVDb250ZXh0c1BhdGgiLCJtb3ZlVXBEb3duVmlzaWJpbGl0eSIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc0lubGluZUVkaXQiLCJ0ZW1wbGF0ZVR5cGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdGFuZGFyZEFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuLCBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0Z2V0U3RhdGljYWxseVJlc29sdmFibGVFeHByZXNzaW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bGVuZ3RoLFxuXHRsZXNzT3JFcXVhbCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHtcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhJbnNlcnRhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgQ3JlYXRpb25Nb2RlLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmQ7XG5cdGlzVGVtcGxhdGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZWRGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxudHlwZSBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZSA9IHtcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbnR5cGUgU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZSA9IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IHtcblx0Y29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdGNyZWF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGRlbGV0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IFN0YW5kYXJkQWN0aW9uS2V5cyA9IHtcblx0Q3V0OiBcIlN0YW5kYXJkQWN0aW9uOjpDdXRcIixcblx0Q29weTogXCJTdGFuZGFyZEFjdGlvbjo6Q29weVwiLFxuXHRDcmVhdGU6IFwiU3RhbmRhcmRBY3Rpb246OkNyZWF0ZVwiLFxuXHREZWxldGU6IFwiU3RhbmRhcmRBY3Rpb246OkRlbGV0ZVwiLFxuXHRDcmVhdGlvblJvdzogXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRpb25Sb3dcIixcblx0UGFzdGU6IFwiU3RhbmRhcmRBY3Rpb246OlBhc3RlXCIsXG5cdE1hc3NFZGl0OiBcIlN0YW5kYXJkQWN0aW9uOjpNYXNzRWRpdFwiLFxuXHRJbnNpZ2h0czogXCJTdGFuZGFyZEFjdGlvbjo6SW5zaWdodHNcIixcblx0TW92ZVVwOiBcIlN0YW5kYXJkQWN0aW9uOjpNb3ZlVXBcIixcblx0TW92ZURvd246IFwiU3RhbmRhcmRBY3Rpb246Ok1vdmVEb3duXCJcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0IHtcblx0cmV0dXJuIHtcblx0XHRjb2xsZWN0aW9uUGF0aDogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdFx0Y3JlYXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkNyZWF0ZUhpZGRlblwiKSxcblx0XHRcdGRlbGV0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJEZWxldGVIaWRkZW5cIiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiVXBkYXRlSGlkZGVuXCIpXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgc3RpY2t5IG9yIGRyYWZ0IGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgc3VwcG9ydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdFx0PyB0cnVlXG5cdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRTdXBwb3J0ZWQgfHwgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIG5ld0FjdGlvbiBpbnRvIGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIG5ldyBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgbmFtZTogc3RyaW5nOyBhdmFpbGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB9IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG5ld0FjdGlvbiA9IGlzRW50aXR5U2V0KGN1cnJlbnRFbnRpdHlTZXQpXG5cdFx0PyBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gPz9cblx0XHQgIGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gbmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRpZiAobmV3QWN0aW9uTmFtZSkge1xuXHRcdGNvbnN0IGF2YWlsYWJsZVByb3BlcnR5ID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFjdGlvbnNbbmV3QWN0aW9uTmFtZV0/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IG5ld0FjdGlvbk5hbWUsXG5cdFx0XHRhdmFpbGFibGU6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxCb29sZWFuPihhdmFpbGFibGVQcm9wZXJ0eSwgW10sIHRydWUpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGFjdGlvbiB2aXNpYmlsaXR5IGNvbmZpZ3VyZWQgaW50byBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzQW5ub3RhdGlvblRlcm1cbiAqIEBwYXJhbSBiV2l0aE5hdmlnYXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgYWN0aW9uIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNBbm5vdGF0aW9uVGVybTogXCJDcmVhdGVIaWRkZW5cIiB8IFwiVXBkYXRlSGlkZGVuXCIgfCBcIkRlbGV0ZUhpZGRlblwiLFxuXHRiV2l0aE5hdmlnYXRpb25QYXRoID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGFubm90YXRpb25zIGluIHF1ZXN0aW9uIChDcmVhdGVIaWRkZW4sIERlbGV0ZUhpZGRlbiwgVXBkYXRlSGlkZGVuKSBtb3N0IHNwZWNpZmljYWxseSBjYW4gYmUgZGVmaW5lZCBvbiBFbnRpdHlTZXQuXG5cdC8vIEluIHNldmVyYWwgY2FzZXMsIGZhbGxiYWNrIHRvIEVudGl0eVR5cGUgbmVlZHMgdG8gYmUgY2hlY2tlZDpcblx0Ly8gLSBJbiBjYXNlIG9mIHNpbmdsZXRvbiAoYW5ub3RhdGlvbnMgZG8gbm90IGFwcGx5KVxuXHQvLyAtIEVudGl0eVNldCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoY29udGFpbm1lbnQgb3Igbm8gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZylcblx0Ly8gLSBFbnRpdHlTZXQgY2FuIGJlIGRldGVybWluZWQsIGJ1dCB0aGUgYW5ub3RhdGlvbiBpcyBub3QgZGVmaW5lZCB0aGVyZVxuXG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBhY3Rpb25Bbm5vdGF0aW9uVmFsdWUgPVxuXHRcdCghaXNTaW5nbGV0b24oY3VycmVudEVudGl0eVNldCkgJiYgY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLlVJPy5bc0Fubm90YXRpb25UZXJtXTtcblxuXHRpZiAoIWFjdGlvbkFubm90YXRpb25WYWx1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFjdGlvbkFubm90YXRpb25WYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgdW5kZWZpbmVkLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhbm5vdGF0ZWQgcmVzdHJpY3Rpb25zIGZvciB0aGUgYWN0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aEluc2VydGFibGVcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJpc1VwZGF0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aFVwZGF0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzRGVsZXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0RyYWZ0T3JTdGlja3lcbiAqIEByZXR1cm5zIFRydWUgaWYgd2UgbmVlZCB0byB0ZW1wbGF0ZSBpbnNlcnQgb3IgdXBkYXRlIGFjdGlvbnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNEcmFmdE9yU3RpY2t5OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0RyYWZ0T3JTdGlja3kgfHwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0ZVZpc2liaWxpdHkpLFxuXHRcdHZpc2libGVFeHByZXNzaW9uOiBjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkN1dChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGN1dFZpc2liaWxpdHkgPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhjdXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3V0VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3V0RW5hYmxlbWVudChjdXRWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3V0RW5hYmxlbWVudChjdXRWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3V0LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkNvcHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjb3B5VmlzaWJpbGl0eSA9IGdldENvcHlWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhjb3B5VmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNvcHlWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDb3B5RW5hYmxlbWVudChjb3B5VmlzaWJpbGl0eSwgZmFsc2UpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldENvcHlFbmFibGVtZW50KGNvcHlWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ29weSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvclVwXG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjYW5DaGFuZ2VTaWJsaW5nID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24gIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZVZpc2liaWxpdHkgPSBhbmQoZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSwgY2FuQ2hhbmdlU2libGluZyk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKG1vdmVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obW92ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1vdmVVcERvd25FbmFibGVtZW50KG1vdmVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmb3JVcCkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQobW92ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZvclVwLCB0cnVlKSksXG5cdFx0a2V5OiBmb3JVcCA/IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXAgOiBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24sXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0aW9uUm93JyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIHRlbXBsYXRlZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFuZGFyZEFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3coXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGlvblJvd1Zpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3csXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXRWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5leHByZXNzaW9uO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQ7IC8vIFRvIGFsbG93IGN1dC9wYXN0ZSBmb3IgYSBkcmFmdCBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSwgXCJUcmVlVGFibGVcIiksXG5cdFx0YW5kKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhLFxuXHRcdFx0bm90KGFuZChpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSkpLFxuXHRcdFx0dGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvblxuXHRcdCksXG5cdFx0ZmFsc2Vcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhdmFpbGFibGVDb3B5QWN0aW9uID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdF0/LkNvcHlBY3Rpb24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGlmICghYXZhaWxhYmxlQ29weUFjdGlvbikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQ7IC8vIFRvIGFsbG93IGN1dC9wYXN0ZSBmb3IgYSBkcmFmdCBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0XG5cdHJldHVybiBpZkVsc2UoZXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSwgXCJUcmVlVGFibGVcIiksIHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24sIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIGRpc3BsYXllZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNvcHlWaXNpYmlsaXR5ID0gZ2V0Q29weVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZVZpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlLCB0cnVlKTtcblx0Y29uc3QgcGFzdGVWaXNpYmlsaXR5ID0gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0Y29weVZpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG5cdCk7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudCA9IGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUgPSBnZXRQYXN0ZUVuYWJsZW1lbnQocGFzdGVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlRW5hYmxlbWVudCksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZUVuYWJsZW1lbnRGb3JDb250ZXh0TWVudSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBtYXNzRWRpdFZpc2liaWxpdHkgPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obWFzc0VkaXRWaXNpYmlsaXR5KSxcblx0XHQvLyBGb3IgdGhlIGNvbnRleHQgbWVudSwgdGhlIHZpc2liaWxpdHkgc2hvdWxkIGFsc28gY29uc2lkZXIgdGhlICdpbmFjdGl2ZUNvbnRleHQnIHByb3BlcnR5OlxuXHRcdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHRcdC8vIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpXG5cdFx0KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuTWFzc0VkaXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmdcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgaW5zaWdodHNWaXNpYmlsaXR5ID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiVGFibGVcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpbnNpZ2h0c0VuYWJsZW1lbnQgPSBhbmQoaW5zaWdodHNWaXNpYmlsaXR5LCBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGluc2lnaHRzVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGluc2lnaHRzVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNFbmFibGVtZW50KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0cyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMgVGhlIGNyZWF0ZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL1RlbXBsYXRpbmcgb2YgQ3JlYXRlIEJ1dHRvbiBpcyBub3QgZG9uZTpcblx0Ly8gXHQgLSBJZiBCdXR0b24gaXMgbmV2ZXIgdmlzaWJsZShjb3ZlcmVkIHRoZSBFeHRlcm5hbCBjcmVhdGUgYnV0dG9uLCBuZXcgQWN0aW9uKVxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGUgQnV0dG9uXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgbm90IG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGlvblJvdyBCdXR0b25cblxuXHRyZXR1cm4gYW5kKFxuXHRcdC8vWE5PUiBnYXRlXG5cdFx0b3IoXG5cdFx0XHRhbmQoaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyksXG5cdFx0XHRhbmQoIWlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpXG5cdFx0KSxcblx0XHRvcihub3QoaXNDb25zdGFudChjcmVhdGVWaXNpYmlsaXR5KSksIGNyZWF0ZVZpc2liaWxpdHkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICogQHBhcmFtIGFjdGlvblZpc2liaWxpdHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGluZyhhY3Rpb25WaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gb3Iobm90KGlzQ29uc3RhbnQoYWN0aW9uVmlzaWJpbGl0eSkpLCBhY3Rpb25WaXNpYmlsaXR5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgQ3JlYXRlL0RlbGV0ZSBidXR0b25zIHNoYWxsIGJlIGhpZGRlbiBpbiBhbiBhbmFseXRpY2FsLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIGJ1dHRvbnMgc2hhbGwgYmUgaGlkZGVuLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gV2Ugc2hvdyBDcmVhdGUvRGVsZXRlIGJ1dHRvbnMgaW4gQW5hbHl0aWNhbCB0YWJsZXMgb25seSBpbiBhIExpc3RSZXBvcnQuXG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcGFyYW0gaXNGb3JQYXN0ZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0ZvckNyZWF0aW9uUm93ID0gZmFsc2UsXG5cdGlzRm9yUGFzdGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0bGV0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0aWYgKG5ld0FjdGlvbikge1xuXHRcdC8vIGlmIHRoZXJlIGlzIGEgbmV3IGFjdGlvbiwgd2UgY29uc2lkZXIgdGhlIGFjdGlvbiBhdmFpbGFiaWxpdHkgaW5zdGVhZCBvZiBpbnNlcnRhYmxlXG5cdFx0aXNJbnNlcnRhYmxlID0gbmV3QWN0aW9uLmF2YWlsYWJsZSA9PT0gdW5kZWZpbmVkID8gY29uc3RhbnQodHJ1ZSkgOiBuZXdBY3Rpb24uYXZhaWxhYmxlO1xuXHR9XG5cdGlzSW5zZXJ0YWJsZSA9IGdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbihpc0luc2VydGFibGUsIGNvbnN0YW50KHRydWUpKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPVxuXHRcdGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSB8fFxuXHRcdChpc0ZvckNyZWF0aW9uUm93XG5cdFx0XHQ/IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIsIGZhbHNlKVxuXHRcdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdC8vIGlmIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWwgd2UgZG8gbm90IGNvbnNpZGVyIGluc2VydGFibGUgcmVzdHJpY3Rpb25zXG5cdFx0cmV0dXJuIGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVUkuSXNFZGl0YWJsZSkpO1xuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0YW5kKFxuXHRcdFx0Ly9JZiBJbmxpbmVDcmVhdGlvblJvd3MgbW9kZSBhbmQgYSBSZXNwb25zaXZlIHRhYmxlIHR5cGUsIHdpdGggdGhlIHBhcmFtZXRlciBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIHRvIHRydWUgd2hpbGUgbm90IGluIGNyZWF0ZSBtb2RlXG5cdFx0XHQvLyB3aGVuIGNhbGN1bGF0aW5nIHBhc3RlIGJ1dHRvbiB2aXNpYmlsaXR5LCAgd2UgZm9yY2UgdGhlIGNvbmRpdGlvbiB0byBmYWxzZSB3aXRoIHRoZSBpc0ZvclBhc3RlIHByb3BlcnR5XG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChzdGFuZGFyZEFjdGlvbnNDb250ZXh0Py50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gZmFsc2UsIG5vdChpc0ZvclBhc3RlKSksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdFVJLklzQ3JlYXRlTW9kZVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFsc2UsXG5cdFx0aWZFbHNlKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgaXNJbnNlcnRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBpc0luc2VydGFibGUsIFVJLklzRWRpdGFibGUpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGxldCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGxldCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cdC8vd2UgY2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVsYXRpdmUgcGF0aCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHRcblx0aXNEZWxldGVIaWRkZW4gPSBnZXRTdGF0aWNhbGx5UmVzb2x2YWJsZUV4cHJlc3Npb24oaXNEZWxldGVIaWRkZW4sIGNvbnN0YW50KGZhbHNlKSk7XG5cdHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gZ2V0U3RhdGljYWxseVJlc29sdmFibGVFeHByZXNzaW9uKHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBjb25zdGFudCh0cnVlKSk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdFx0aGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY29weVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb3B5VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vSWYgaXQgaXNuJ3QgZGVhY3RpdmF0ZWQgd2l0aGluIHRoZSBtYW5pZmVzdCBhbmQgd2UncmUgb3BlcmF0aW5nIGluIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlcyxcblx0Ly90aGUgdHJlZVRhYmxlJ3MgdmlzaWJpbGl0eSByZWxpZXMgb24gdGhlIGN1dHZpc2liaWxpdHksXG5cdC8vd2hpbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG90aGVyIHRhYmxlIGlzIGRldGVybWluZWQgYnkgaW5zZXJ0YWJsZSByZXN0cmljdGlvbnMgYW5kIGNyZWF0ZSB2aXNpYmlsaXR5LlxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0PyBvcihjdXRWaXNpYmlsaXR5LCBjb3B5VmlzaWJpbGl0eSlcblx0XHRcdDogYW5kKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKGNyZWF0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uKSxcblx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCB1cGRhdGVPbk5hdmlnYXRpb24pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0XHRcdFx0IVtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSlcblx0XHRcdCAgKSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5tYXNzRWRpdC5lbmFibGVkIHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IFtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkZyZWVTdHlsZVBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpO1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0bWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGNyZWF0aW9uUm93LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGlvblJvd1Zpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3ROYXYgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxhc3ROYXYpICYmIGxhc3ROYXYucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXIpIHtcblx0XHRcdFx0XHRwYXRoID0gYCR7cGFydG5lcn0vJHtwYXRofWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9XG5cdFx0cmVzdHJpY3Rpb25zSW5zZXJ0YWJsZS5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0PyBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQgIH0pXG5cdFx0XHQ6IHJlc3RyaWN0aW9uc0luc2VydGFibGU7XG5cblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGlvblJvd1Zpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRhYmxlLFxuXHRcdG9yKFxuXHRcdFx0IXN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgXCJpbnRlcm5hbFwiKV0sIHRhYmxlRm9ybWF0dGVycy52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvbmRpdGlvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgaXNEcmFmdEVuYWJsZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0Ly8gZm9yIElubGluZSBjcmVhdGlvbiByb3dzIGNyZWF0ZSBjYW4gYmUgaGlkZGVuIHZpYSBtYW5pZmVzdCBhbmQgdGhpcyBzaG91bGQgbm90IGltcGFjdCBpdHMgZW5hYmxlbWVudFxuXHRcdGNvbmRpdGlvbnMucHVzaChcblx0XHRcdGFuZChub3Qoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmNyZWF0ZSksIGlzRHJhZnRFbmFibGVkLCBVSS5Jc0VkaXRhYmxlLCBub3QocGF0aEluTW9kZWwoXCJJc0FjdGl2ZUVudGl0eVwiKSkpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25kaXRpb25zLnB1c2goY3JlYXRlVmlzaWJpbGl0eSk7XG5cdH1cblxuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgQ29sbGVjdGlvblR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGg8RW50aXR5U2V0PihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNvbGxlY3Rpb25QYXRoKS50YXJnZXQ7XG5cdGNvbmRpdGlvbnMucHVzaChcblx0XHRvcihcblx0XHRcdGlzRW50aXR5U2V0KENvbGxlY3Rpb25UeXBlKSxcblx0XHRcdGFuZChpc0luc2VydGFibGUsIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBVSS5Jc0VkaXRhYmxlKSlcblx0XHQpXG5cdCk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUsIHRoZSBjcmVhdGUgYnV0dG9uIHNoYWxsIGJlIGFjdGl2ZSBvbmx5IGlmIDAgb3IgMSBpdGVtcyBhcmUgc2VsZWN0ZWQgKHBhcmVudCBub2RlKVxuXHRcdC8vIFdlIGRvIG5vdCBuZWVkIHRoaXMgY29uZGl0aW9uIG9uIHRoZSBDb250ZXh0TWVudSwgYXMgd2Ugb25seSBjcmVhdGUgb24gdGhlIHNlbGVjdGVkIG5vZGVcblx0XHRjb25kaXRpb25zLnB1c2gobGVzc09yRXF1YWwocGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSk7XG5cblx0XHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHQvLyBUaGVyZSdzIGEgY3JlYXRlRW5hYmxlbWVudCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRkaXRpb25uYWwgY29uZGl0aW9uc1xuXHRcdFx0Ly8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRcdGNvbmRpdGlvbnMucHVzaChub3RFcXVhbChwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiY3JlYXRlRW5hYmxlbWVudC9DcmVhdGVcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYW5kKC4uLmNvbmRpdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBmb2xsb3dpbmcgY29udGV4dHMgYXJlIGZpbGxlZCBhdCBydW50aW1lIHdoZW4gYSB1c2VyIHNlbGVjdHMgb25lIG9yIG1vcmUgaXRlbXMgZnJvbSBhIGxpc3QuXG5cdC8vIENoZWNrcyBhcmUgdGhlbiBtYWRlIGluIGZ1bmN0aW9uIHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIGluIGZpbGUgRGVsZXRlSGVscGVyIHRvIHNlZSBpZiB0aGVyZVxuXHQvLyBhcmUgaXRlbXMgdGhhdCBjYW4gYmUgZGVsZXRlZCwgdGh1cyB0aGUgZGVsZXRlIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGVzZSBjYXNlcy5cblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgZGVsZXRhYmxlQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgdW5TYXZlZENvbnRleHRzID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0Ly8gXCJVbnJlc29sdmFibGVcIiBpbiBuYXZpZ2F0aW9uRXhwcmVzc2lvbiBpcyBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlcmUgYXJlIG5vIG5hdmlnYXRpb25FeHByZXNzaW9uc1xuXHQvLyBkZWZpbmVkLlxuXHQvLyBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uIGlzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY29tZXNcblx0Ly8gZnJvbSB0aGUgRGVsZXRlIHJlc3RyaWN0aW9ucyBkZWZpbmVkIGluIE5hdmlnYXRpb25SZXN0cmljdGlvbnMgZm9yIHRoaXMgZW50aXR5LiBJbiBvcmRlciB0b1xuXHQvLyBiZSBkZWxldGFibGUsIHRoZSBpdGVtIG11c3QgYWxzbyBiZSBhbGxvd2VkIHRvIGJlIGRlbGV0YWJsZSBhY2NvcmRpbmcgdG8gdGhlIERlbGV0ZSBSZXN0cmljdGlvbnNcblx0Ly8gb24gdGhlIGVudGl0eSBpdHNlbGYuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0b3IoXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZGVsZXRhYmxlQ29udGV4dHMsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKHVuU2F2ZWRDb250ZXh0cywgdHJ1ZSksIDApXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChcblx0cGFzdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBzZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9wYXN0ZUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL3Bhc3RlRW5hYmxlbWVudFwiO1xuXHRsZXQgaXNJbnNlcnRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgdGFibGVUeXBlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlO1xuXHRjb25zdCBoYXNDZWxsU2VsZWN0b3IgPSBbXCJSZXNwb25zaXZlVGFibGVcIiwgXCJHcmlkVGFibGVcIiwgXCJUcmVlVGFibGVcIl0uaW5jbHVkZXModGFibGVUeXBlKTtcblx0aWYgKGhhc0NlbGxTZWxlY3Rvcikge1xuXHRcdC8vIElmIHRhYmxlIGlzIG5vdCBpbnNlcnRhYmxlLCB3ZSBvbmx5IGVuYWJsZSB0aGUgcGFzdGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgYSBzZWxlY3Rpb24gKFRvIGVkaXQgZGF0YSlcblx0XHRpc0luc2VydGFibGUgPSBvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uLFxuXHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjZWxsU2VsZWN0b3JIYXNTZWxlY3Rpb25cIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHRwYXN0ZVZpc2liaWxpdHksXG5cdFx0XHRvcihcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHRcdCksXG5cdFx0XHRpc0luc2VydGFibGUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGxlc3NPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbChzZWxlY3RlZENvbnRleHRzUGF0aCwgXCJpbnRlcm5hbFwiKSksIDEpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChwYXN0ZUVuYWJsZW1lbnRQYXRoLCBcImludGVybmFsXCIpLCB0cnVlKSxcblxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0bGV0IHVwZGF0ZU9uTmF2aWdhdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8ubmF2aWdhdGlvbkV4cHJlc3Npb247XG5cdGlmICh1cGRhdGVPbk5hdmlnYXRpb24/Ll90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0dXBkYXRlT25OYXZpZ2F0aW9uID0gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblx0cmV0dXJuIGFuZCh1cGRhdGVPbk5hdmlnYXRpb24sIHBhc3RlVmlzaWJpbGl0eSwgaXNJbnNlcnRhYmxlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID1cblx0XHQhaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCB1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcInVwZGF0YWJsZUNvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3VwZGF0YWJsZUNvbnRleHRzXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpO1xuXHRjb25zdCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSksIDEpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgYkRpc3BsYXlNb2RlID0gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGJpbmRpbmcgaW4gY2FzZVxuXHQvLyAxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5IChpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IGlzIHRydWUpLlxuXHQvLyAyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkKGxpa2UgTFIpLCBpbiB0aGlzIGNhc2Ugb25seSBhY3RpdmUgY29udGV4dHMgY2FuIGJlIG1hc3MgZWRpdGVkLlxuXHQvLyAgICBTbywgdXBkYXRlIGRlcGVuZHMgb24gJ0lzQWN0aXZlRW50aXR5JyB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkIHJ1bnRpbWUuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gaWZFbHNlKFxuXHRcdG9yKGFuZChiRGlzcGxheU1vZGUsIGJJc0RyYWZ0U3VwcG9ydGVkKSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cylcblx0KTtcblxuXHRyZXR1cm4gYW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgaWZFbHNlKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHksIHJ1bnRpbWVCaW5kaW5nLCBhbmQocnVudGltZUJpbmRpbmcsIHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3V0RW5hYmxlbWVudChcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3V0YWJsZUNvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBwYXRoSW5Nb2RlbChjdXRhYmxlQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpO1xuXHRyZXR1cm4gYW5kKFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdHJ1bnRpbWVCaW5kaW5nXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvcHlWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5RW5hYmxlbWVudChcblx0Y29weVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvcHlhYmxlQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gcGF0aEluTW9kZWwoY29weWFibGVDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIik7XG5cdHJldHVybiBhbmQoY29weVZpc2liaWxpdHksIHJ1bnRpbWVCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBtb3ZlVXBEb3duVmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JVcFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldE1vdmVVcERvd25FbmFibGVtZW50KFxuXHRtb3ZlVXBEb3duVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhbixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVVcFwiIDogXCJjb250ZXh0bWVudS9zaW5nbGVDb250ZXh0TW92YWJsZVVwXCI7XG5cdGNvbnN0IHNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duXCIgOiBcImNvbnRleHRtZW51L3NpbmdsZUNvbnRleHRNb3ZhYmxlRG93blwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IGZvclVwXG5cdFx0PyBlcXVhbChwYXRoSW5Nb2RlbChzaW5nbGVDb250ZXh0TW92YWJsZVVwLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdDogZXF1YWwocGF0aEluTW9kZWwoc2luZ2xlQ29udGV4dE1vdmFibGVEb3duLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0cmV0dXJuIGFuZChcblx0XHRtb3ZlVXBEb3duVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBUZWxscyBpZiB0aGUgdGFibGUgaW4gdGVtcGxhdGUgaXMgaW4gZGlzcGxheSBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YWJsZSBpcyBpbiBkaXNwbGF5IG1vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uID0gZmFsc2UpOiBib29sZWFuIHtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzSW5saW5lRWRpdCgpKSB7XG5cdFx0Ly9pZiB0aGVyZSBpcyBpbmxpbmUgZWRpdCBpbiB0aGUgcGFnZSB3ZSBjYW5ub3QgZm9yY2UgdGhlIHRhYmxlIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIHRlbXBsYXRlIHR5cGVcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQoY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdDQTtFQXdDTyxNQUFNQSxrQkFBa0IsR0FBRztJQUNqQ0MsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkMsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQ0MsS0FBSyxFQUFFLHVCQUF1QjtJQUM5QkMsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQ0MsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQ0MsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsUUFBUSxFQUFFO0VBQ1gsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BQyxRQUFBLENBQUFYLGtCQUFBLEdBQUFBLGtCQUFBO0VBT08sU0FBU1ksOEJBQThCQSxDQUM3Q0MsZ0JBQXlELEVBQ3pEQyxZQUEwQixFQUMxQkMsMEJBQXFELEVBQzVCO0lBQ3pCLE9BQU87TUFDTkMsY0FBYyxFQUFFQyxtQkFBbUIsQ0FBQ0osZ0JBQWdCLENBQUNLLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUM5RUMsZ0JBQWdCLEVBQUU7UUFD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
|