@sapui5/sap.fe.core 1.136.10 → 1.136.11
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/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +23 -13
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +34 -13
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +15 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +21 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
- package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +75 -18
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +79 -25
- package/src/sap/fe/core/helpers/MetaModelFunction.js +10 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +9 -3
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_es.properties +1 -1
- package/src/sap/fe/core/messagebundle_fr.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +1 -1
- package/src/sap/fe/core/messagebundle_no.properties +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +4 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +5 -2
- package/ui5.yaml +1 -0
|
@@ -555,11 +555,12 @@ const getColumnDefinitionFromProperty = function (
|
|
|
555
555
|
const isAPropertyFromTextOnlyAnnotation = displayModeOfDescriptionPropertiesMap[relativePath] === "Description";
|
|
556
556
|
const sortable =
|
|
557
557
|
(!isHidden || isAPropertyFromTextOnlyAnnotation) && !restrictionsOnProperties?.nonSortableProperties.includes(relativePath);
|
|
558
|
+
const isAnalyticalTable = aggregationHelper.isAnalyticsSupported() && tableType === "AnalyticalTable";
|
|
558
559
|
const filterable = !restrictionsOnProperties?.nonFilterableProperties.includes(relativePath);
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
560
|
+
// groupable properties on an analytical table should consider hidden properties and text only annotations as other table types do
|
|
561
|
+
const groupable = isAnalyticalTable
|
|
562
|
+
? !!aggregationHelper.isPropertyGroupable(property) && (!isHidden || isAPropertyFromTextOnlyAnnotation)
|
|
563
|
+
: sortable;
|
|
563
564
|
const typeConfig = {
|
|
564
565
|
className: property.type || dataType,
|
|
565
566
|
formatOptions: propertyTypeConfig.formatOptions,
|
|
@@ -602,20 +603,41 @@ const getColumnDefinitionFromProperty = function (
|
|
|
602
603
|
};
|
|
603
604
|
_addToolTip(property, column);
|
|
604
605
|
_setExportSettingsForDataPoint(property, column);
|
|
606
|
+
if (isAnalyticalTable) {
|
|
607
|
+
setTechnicalExtension(column, property, aggregationHelper, converterContext, relativePath);
|
|
608
|
+
}
|
|
609
|
+
return column;
|
|
610
|
+
};
|
|
605
611
|
|
|
612
|
+
/**
|
|
613
|
+
* Sets the technical extension for analytics scenarios.
|
|
614
|
+
* @param column The table column
|
|
615
|
+
* @param property The property linked to the column
|
|
616
|
+
* @param aggregationHelper The aggregation helper
|
|
617
|
+
* @param converterContext The converter context
|
|
618
|
+
* @param relativePath The relative path of the property
|
|
619
|
+
*/
|
|
620
|
+
const setTechnicalExtension = function (
|
|
621
|
+
column: AnnotationTableColumn,
|
|
622
|
+
property: Property,
|
|
623
|
+
aggregationHelper: AggregationHelper,
|
|
624
|
+
converterContext: ConverterContext<PageContextPathTarget>,
|
|
625
|
+
relativePath: string
|
|
626
|
+
): void {
|
|
627
|
+
const isDraftSupported = ModelHelper.isObjectPathDraftSupported(converterContext.getDataModelObjectPath());
|
|
628
|
+
const draftProperties = ["HasActiveEntity", "HasDraftEntity", "IsActiveEntity"];
|
|
629
|
+
const isDraftProperty = draftProperties.includes(relativePath);
|
|
630
|
+
const isGroupableProperty = !!aggregationHelper.isPropertyGroupable(property);
|
|
606
631
|
if (
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
(
|
|
632
|
+
(isDraftSupported && isDraftProperty) ||
|
|
633
|
+
// column.isGroupable can be false when the property is hidden but it could be technically groupable
|
|
634
|
+
(isGroupableProperty && !column.isGroupable)
|
|
610
635
|
) {
|
|
611
|
-
// In case of analytical table on a draft-enabled entity, we always consider the HasDraftEntity, HasActiveEntity and IsActiveEntity properties as
|
|
612
|
-
// technically groupable, as we need to load them for our internal logic.
|
|
613
636
|
column.extension = {
|
|
614
637
|
technicallyAggregatable: false,
|
|
615
638
|
technicallyGroupable: true
|
|
616
639
|
};
|
|
617
640
|
}
|
|
618
|
-
return column;
|
|
619
641
|
};
|
|
620
642
|
|
|
621
643
|
/**
|
|
@@ -28,6 +28,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
28
28
|
var lessOrEqual = BindingToolkit.lessOrEqual;
|
|
29
29
|
var length = BindingToolkit.length;
|
|
30
30
|
var isPathInModelExpression = BindingToolkit.isPathInModelExpression;
|
|
31
|
+
var isExpressionStaticallyResolvable = BindingToolkit.isExpressionStaticallyResolvable;
|
|
31
32
|
var isConstant = BindingToolkit.isConstant;
|
|
32
33
|
var ifElse = BindingToolkit.ifElse;
|
|
33
34
|
var greaterThan = BindingToolkit.greaterThan;
|
|
@@ -483,23 +484,16 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
483
484
|
*/
|
|
484
485
|
_exports.getCreateVisibility = getCreateVisibility;
|
|
485
486
|
function getDeleteVisibility(converterContext, standardActionsContext) {
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
// - Otherwise
|
|
497
|
-
// - If we're on OP -> depending if UI is editable and restrictions on deletable
|
|
498
|
-
// - Otherwise
|
|
499
|
-
// - If UI.DeleteHidden points to a property path -> provide a negated binding to this path
|
|
500
|
-
// - Otherwise, delete is visible
|
|
501
|
-
|
|
502
|
-
return ifElse(converterContext.getTemplateType() === TemplateType.AnalyticalListPage || hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext), false, ifElse(and(isConstant(pathDeletableExpression), equal(pathDeletableExpression, false)), false, ifElse(and(isConstant(isDeleteHidden), equal(isDeleteHidden, constant(true))), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), UI.IsEditable), not(and(isPathInModelExpression(isDeleteHidden), isDeleteHidden))))));
|
|
487
|
+
let isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
|
|
488
|
+
let pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
|
|
489
|
+
//we check if there is no relative path dependent on the context
|
|
490
|
+
if (!isExpressionStaticallyResolvable(isDeleteHidden)) {
|
|
491
|
+
isDeleteHidden = constant(false);
|
|
492
|
+
}
|
|
493
|
+
if (!isExpressionStaticallyResolvable(pathDeletableExpression)) {
|
|
494
|
+
pathDeletableExpression = constant(true);
|
|
495
|
+
}
|
|
496
|
+
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)));
|
|
503
497
|
}
|
|
504
498
|
|
|
505
499
|
/**
|
|
@@ -759,4 +753,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
759
753
|
_exports.isInDisplayMode = isInDisplayMode;
|
|
760
754
|
return _exports;
|
|
761
755
|
}, false);
|
|
762
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwidXBkYXRlT25OYXZpZ2F0aW9uIiwiX3R5cGUiLCJub3RFcXVhbCIsImVuYWJsZVBhc3RlIiwiaW5jbHVkZXMiLCJpc1VwZGF0ZUhpZGRlbiIsIm1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3QiLCJtYXNzRWRpdCIsIk9iamVjdFBhZ2UiLCJGcmVlU3R5bGVQYWdlIiwicmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSIsImluZGV4T2YiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxhc3ROYXYiLCJwYXJ0bmVyIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZm9ybWF0UmVzdWx0IiwidGFibGVGb3JtYXR0ZXJzIiwidmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcyIsImZvckNvbnRleHRNZW51IiwiY29uZGl0aW9ucyIsImNvbnRleHRQYXRoIiwicHVzaCIsIkNvbGxlY3Rpb25UeXBlIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImxlc3NPckVxdWFsIiwiY3JlYXRlRW5hYmxlbWVudCIsImRlbGV0YWJsZUNvbnRleHRzIiwidW5TYXZlZENvbnRleHRzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJncmVhdGVyVGhhbiIsInNlbGVjdGVkQ29udGV4dHNQYXRoIiwicGFzdGVFbmFibGVtZW50UGF0aCIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5IiwidXBkYXRhYmxlQ29udGV4dFByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJjdXRhYmxlQ29udGV4dHNQYXRoIiwiY29weWFibGVDb250ZXh0c1BhdGgiLCJtb3ZlVXBEb3duVmlzaWJpbGl0eSIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc0lubGluZUVkaXQiLCJ0ZW1wbGF0ZVR5cGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdGFuZGFyZEFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuLCBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0Z3JlYXRlck9yRXF1YWwsXG5cdGdyZWF0ZXJUaGFuLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRsZW5ndGgsXG5cdGxlc3NPckVxdWFsLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aEluc2VydGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBDcmVhdGlvbk1vZGUsIFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQsIGdldEluc2lnaHRzVmlzaWJpbGl0eSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0luc2lnaHRzSGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL1RhYmxlXCI7XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uID0gQmFzZUFjdGlvbiAmIHtcblx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZDtcblx0aXNUZW1wbGF0ZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRlbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZEZvckNvbnRleHRNZW51PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG5hdmlnYXRpb25FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xudHlwZSBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlID0gUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0ge1xuXHRjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0ZGVsZXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0dXBkYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0YXZhaWxhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRyZXN0cmljdGlvbnM6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgU3RhbmRhcmRBY3Rpb25LZXlzID0ge1xuXHRDdXQ6IFwiU3RhbmRhcmRBY3Rpb246OkN1dFwiLFxuXHRDb3B5OiBcIlN0YW5kYXJkQWN0aW9uOjpDb3B5XCIsXG5cdENyZWF0ZTogXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRlXCIsXG5cdERlbGV0ZTogXCJTdGFuZGFyZEFjdGlvbjo6RGVsZXRlXCIsXG5cdENyZWF0aW9uUm93OiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGlvblJvd1wiLFxuXHRQYXN0ZTogXCJTdGFuZGFyZEFjdGlvbjo6UGFzdGVcIixcblx0TWFzc0VkaXQ6IFwiU3RhbmRhcmRBY3Rpb246Ok1hc3NFZGl0XCIsXG5cdEluc2lnaHRzOiBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiLFxuXHRNb3ZlVXA6IFwiU3RhbmRhcmRBY3Rpb246Ok1vdmVVcFwiLFxuXHRNb3ZlRG93bjogXCJTdGFuZGFyZEFjdGlvbjo6TW92ZURvd25cIlxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgY29udGV4dCBmb3IgdGhlIHN0YW5kYXJkIGFjdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uTW9kZVxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyAgVGhlIGNvbnRleHQgZm9yIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIpLFxuXHRcdFx0ZGVsZXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkRlbGV0ZUhpZGRlblwiKSxcblx0XHRcdHVwZGF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJVcGRhdGVIaWRkZW5cIilcblx0XHR9LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZDogaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdG5ld0FjdGlvbjogZ2V0TmV3QWN0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRyZXN0cmljdGlvbnM6IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBzdGlja3kgb3IgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gKGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcblx0XHQ/IHRydWVcblx0XHQ6IGZhbHNlO1xuXG5cdHJldHVybiBiSXNEcmFmdFN1cHBvcnRlZCB8fCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgbmV3QWN0aW9uIGludG8gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbmV3IGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyBuYW1lOiBzdHJpbmc7IGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IH0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gaXNFbnRpdHlTZXQoY3VycmVudEVudGl0eVNldClcblx0XHQ/IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiA/P1xuXHRcdCAgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb25cblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgbmV3QWN0aW9uTmFtZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBuZXdBY3Rpb24/LnRvU3RyaW5nKCk7XG5cdGlmIChuZXdBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgYXZhaWxhYmxlUHJvcGVydHkgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYWN0aW9uc1tuZXdBY3Rpb25OYW1lXT8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogbmV3QWN0aW9uTmFtZSxcblx0XHRcdGF2YWlsYWJsZTogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPEJvb2xlYW4+KGF2YWlsYWJsZVByb3BlcnR5LCBbXSwgdHJ1ZSlcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgYWN0aW9uIHZpc2liaWxpdHkgY29uZmlndXJlZCBpbnRvIGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c0Fubm90YXRpb25UZXJtOiBcIkNyZWF0ZUhpZGRlblwiIHwgXCJVcGRhdGVIaWRkZW5cIiB8IFwiRGVsZXRlSGlkZGVuXCIsXG5cdGJXaXRoTmF2aWdhdGlvblBhdGggPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBUaGUgYW5ub3RhdGlvbnMgaW4gcXVlc3Rpb24gKENyZWF0ZUhpZGRlbiwgRGVsZXRlSGlkZGVuLCBVcGRhdGVIaWRkZW4pIG1vc3Qgc3BlY2lmaWNhbGx5IGNhbiBiZSBkZWZpbmVkIG9uIEVudGl0eVNldC5cblx0Ly8gSW4gc2V2ZXJhbCBjYXNlcywgZmFsbGJhY2sgdG8gRW50aXR5VHlwZSBuZWVkcyB0byBiZSBjaGVja2VkOlxuXHQvLyAtIEluIGNhc2Ugb2Ygc2luZ2xldG9uIChhbm5vdGF0aW9ucyBkbyBub3QgYXBwbHkpXG5cdC8vIC0gRW50aXR5U2V0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChjb250YWlubWVudCBvciBubyBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHQvLyAtIEVudGl0eVNldCBjYW4gYmUgZGV0ZXJtaW5lZCwgYnV0IHRoZSBhbm5vdGF0aW9uIGlzIG5vdCBkZWZpbmVkIHRoZXJlXG5cblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGFjdGlvbkFubm90YXRpb25WYWx1ZSA9XG5cdFx0KCFpc1NpbmdsZXRvbihjdXJyZW50RW50aXR5U2V0KSAmJiBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uW3NBbm5vdGF0aW9uVGVybV0pIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dO1xuXG5cdGlmICghYWN0aW9uQW5ub3RhdGlvblZhbHVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFubm90YXRlZCByZXN0cmljdGlvbnMgZm9yIHRoZSBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHJlc3RyaWN0aW9uc0RlZiA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNJbnNlcnRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoSW5zZXJ0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzVXBkYXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdGZ1bmN0aW9uOiBpc1BhdGhEZWxldGFibGVcblx0XHR9XG5cdF07XG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+ID0ge307XG5cdHJlc3RyaWN0aW9uc0RlZi5mb3JFYWNoKGZ1bmN0aW9uIChkZWYpIHtcblx0XHRjb25zdCBkZWZGdW5jdGlvbiA9IGRlZltcImZ1bmN0aW9uXCJdO1xuXHRcdHJlc3VsdFtkZWYua2V5XSA9IHtcblx0XHRcdGV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pLFxuXHRcdFx0bmF2aWdhdGlvbkV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0XHRcdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pXG5cdFx0fTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRlbXBsYXRpbmcgZm9yIGluc2VydC91cGRhdGUgYWN0aW9ucyBpcyBtYW5kYXRvcnkuXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRHJhZnRPclN0aWNreVxuICogQHJldHVybnMgVHJ1ZSBpZiB3ZSBuZWVkIHRvIHRlbXBsYXRlIGluc2VydCBvciB1cGRhdGUgYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3k6IGJvb2xlYW4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0dmlzaWJsZUV4cHJlc3Npb246IGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3V0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGN1dFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjdXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ29weShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNvcHlWaXNpYmlsaXR5ID0gZ2V0Q29weVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGNvcHlWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY29weVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENvcHlFbmFibGVtZW50KGNvcHlWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q29weUVuYWJsZW1lbnQoY29weVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01vdmUgdXAnIGFuZCAnTW92ZSBkb3duJyBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yVXBcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25Nb3ZlVXBEb3duKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvclVwOiBib29sZWFuXG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNhbkNoYW5nZVNpYmxpbmcgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XHRdPy5DaGFuZ2VOZXh0U2libGluZ0FjdGlvbiAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlVmlzaWJpbGl0eSA9IGFuZChnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLCBjYW5DaGFuZ2VTaWJsaW5nKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobW92ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtb3ZlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQobW92ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZvclVwKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNb3ZlVXBEb3duRW5hYmxlbWVudChtb3ZlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZm9yVXAsIHRydWUpKSxcblx0XHRrZXk6IGZvclVwID8gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCA6IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bixcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGRlbGV0ZVZpc2liaWxpdHkgPSBnZXREZWxldGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGRlbGV0ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkZWxldGVWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRpb25Sb3cnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgdGVtcGxhdGVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFN0YW5kYXJkQWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvdyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/LmV4cHJlc3Npb247XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShcblx0XHRlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSxcblx0XHRhbmQoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSEsXG5cdFx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0KSxcblx0XHRmYWxzZVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGF2YWlsYWJsZUNvcHlBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XT8uQ29weUFjdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0aWYgKCFhdmFpbGFibGVDb3B5QWN0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSwgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgZGlzcGxheWVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjdXRWaXNpYmlsaXR5ID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY29weVZpc2liaWxpdHkgPSBnZXRDb3B5VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UsIHRydWUpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0Y3V0VmlzaWJpbGl0eSxcblx0XHRjb3B5VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50ID0gZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBwYXN0ZUVuYWJsZW1lbnRGb3JDb250ZXh0TWVudSA9IGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXHRyZXR1cm4ge1xuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24ocGFzdGVFbmFibGVtZW50KSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlRW5hYmxlbWVudEZvckNvbnRleHRNZW51KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdFx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdFx0Ly8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5cdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGFuZChtYXNzRWRpdFZpc2liaWxpdHksIGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSlcblx0XHQpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBpbnNpZ2h0c1Zpc2liaWxpdHkgPSBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXCJUYWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGluc2lnaHRzRW5hYmxlbWVudCA9IGFuZChpbnNpZ2h0c1Zpc2liaWxpdHksIGdldEluc2lnaHRzRW5hYmxlbWVudCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoaW5zaWdodHNWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihpbnNpZ2h0c0VuYWJsZW1lbnQpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkluc2lnaHRzLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVGVtcGxhdGluZyhcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0ZvckNyZWF0aW9uUm93ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vVGVtcGxhdGluZyBvZiBDcmVhdGUgQnV0dG9uIGlzIG5vdCBkb25lOlxuXHQvLyBcdCAtIElmIEJ1dHRvbiBpcyBuZXZlciB2aXNpYmxlKGNvdmVyZWQgdGhlIEV4dGVybmFsIGNyZWF0ZSBidXR0b24sIG5ldyBBY3Rpb24pXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0ZSBCdXR0b25cblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBub3Qgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0aW9uUm93IEJ1dHRvblxuXG5cdHJldHVybiBhbmQoXG5cdFx0Ly9YTk9SIGdhdGVcblx0XHRvcihcblx0XHRcdGFuZChpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSxcblx0XHRcdGFuZCghaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdylcblx0XHQpLFxuXHRcdG9yKG5vdChpc0NvbnN0YW50KGNyZWF0ZVZpc2liaWxpdHkpKSwgY3JlYXRlVmlzaWJpbGl0eSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9uVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRUZW1wbGF0aW5nKGFjdGlvblZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBDcmVhdGUvRGVsZXRlIGJ1dHRvbnMgc2hhbGwgYmUgaGlkZGVuIGluIGFuIGFuYWx5dGljYWwuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRydWUgaWYgYnV0dG9ucyBzaGFsbCBiZSBoaWRkZW4sIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IGJvb2xlYW4ge1xuXHQvLyBXZSBzaG93IENyZWF0ZS9EZWxldGUgYnV0dG9ucyBpbiBBbmFseXRpY2FsIHRhYmxlcyBvbmx5IGluIGEgTGlzdFJlcG9ydC5cblx0cmV0dXJuIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCJcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBpc0ZvclBhc3RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZSxcblx0aXNGb3JQYXN0ZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPVxuXHRcdGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSB8fFxuXHRcdChpc0ZvckNyZWF0aW9uUm93XG5cdFx0XHQ/IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIsIGZhbHNlKVxuXHRcdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5uZXdBY3Rpb247XG5cdC8vIENyZWF0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgLSBGb3IgYW5hbHl0aWNhbCB0YWJsZXM6IG9ubHkgaW4gYSBMaXN0UmVwb3J0XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgVUkuSXNFZGl0YWJsZVxuXHQvL1x0IC0gT3RoZXJ3aXNlXG5cdC8vXHRcdC0gSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB2YWxpZCB0aGVuIGNyZWF0ZSBidXR0b24gaXNuJ3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gbm8gbmV3QWN0aW9uIGF2YWlsYWJsZVxuXHQvL1x0XHRcdC0gSXQncyBub3QgaW5zZXJ0YWJsZSBhbmQgdGhlcmUgaXMgbm90IGEgbmV3IGFjdGlvblxuXHQvL1x0XHRcdC0gY3JlYXRlIGlzIGhpZGRlblxuXHQvL1x0XHRcdC0gVGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zXG5cdC8vXHRcdFx0LSBJdCdzIGFuIEFuYWx5dGljYWwgTGlzdCBQYWdlXG5cdC8vXHRcdFx0LSBVc2VzIElubGluZUNyZWF0aW9uUm93cyBtb2RlIGFuZCBhIFJlc3BvbnNpdmUgdGFibGUgdHlwZSwgd2l0aCB0aGUgcGFyYW1ldGVyIGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgdG8gdHJ1ZSB3aGlsZSBub3QgaW4gY3JlYXRlIG1vZGVcblx0Ly8gICAgICAgICAgXHQtIHdoZW4gY2FsY3VsYXRpbmcgcGFzdGUgYnV0dG9uIHZpc2liaWxpdHksICB3ZSBmb3JjZSB0aGUgY29uZGl0aW9uIHRvIGZhbHNlIHdpdGggdGhlIGlzRm9yUGFzdGUgcHJvcGVydHlcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCxcblx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFVJLklzRWRpdGFibGUpKSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQobmV3QWN0aW9uPy5hdmFpbGFibGUpLCBlcXVhbChuZXdBY3Rpb24/LmF2YWlsYWJsZSwgZmFsc2UpKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNJbnNlcnRhYmxlKSwgZXF1YWwoaXNJbnNlcnRhYmxlLCBmYWxzZSksICFuZXdBY3Rpb24pLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0NyZWF0ZUhpZGRlbiksIGVxdWFsKGlzQ3JlYXRlSGlkZGVuLCB0cnVlKSksXG5cdFx0XHRcdGFuZChcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyxcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGFuZChcblx0XHRcdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dD8udGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRub3QoaXNGb3JQYXN0ZSlcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0VUkuSXNDcmVhdGVNb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNDcmVhdGVIaWRkZW4pKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGNvbnN0IHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbjtcblxuXHQvL0RlbGV0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgUHJlcmVxdWlzaXRlczpcblx0Ly9cdCAtIElmIHdlJ3JlIG5vdCBvbiBBTFBcblx0Ly8gICAtIElmIHJlc3RyaWN0aW9ucyBvbiBkZWxldGFibGUgc2V0IHRvIGZhbHNlIC0+IG5vdCB2aXNpYmxlXG5cdC8vXHQgLSBBbmFseXRpY2FsIHRhYmxlIG5vdCBpbiBhIExpc3RSZXBvcnQgLT4gbm90IHZpc2libGVcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvL1x0XHRcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIGlzIHRydWUgLT4gbm90IHZpc2libGVcblx0Ly9cdFx0XHQtIE90aGVyd2lzZVxuXHQvLyBcdCBcdFx0XHQtIElmIHdlJ3JlIG9uIE9QIC0+IGRlcGVuZGluZyBpZiBVSSBpcyBlZGl0YWJsZSBhbmQgcmVzdHJpY3Rpb25zIG9uIGRlbGV0YWJsZVxuXHQvL1x0XHRcdFx0LSBPdGhlcndpc2Vcblx0Ly9cdFx0XHRcdCBcdC0gSWYgVUkuRGVsZXRlSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5IHBhdGggLT4gcHJvdmlkZSBhIG5lZ2F0ZWQgYmluZGluZyB0byB0aGlzIHBhdGhcblx0Ly9cdCBcdCBcdFx0IFx0LSBPdGhlcndpc2UsIGRlbGV0ZSBpcyB2aXNpYmxlXG5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0XHRoaWRlQ3JlYXRlRGVsZXRlSW5BbmFseXRpY2FsVGFibGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0ZmFsc2UsXG5cdFx0aWZFbHNlKFxuXHRcdFx0YW5kKGlzQ29uc3RhbnQocGF0aERlbGV0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0RlbGV0ZUhpZGRlbiksIGVxdWFsKGlzRGVsZXRlSGlkZGVuLCBjb25zdGFudCh0cnVlKSkpLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdFx0XHRub3QoYW5kKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGlzRGVsZXRlSGlkZGVuKSwgaXNEZWxldGVIaWRkZW4pKVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY3V0VmlzaWJpbGl0eVxuICogQHBhcmFtIGNvcHlWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGN1dFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y29weVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL0lmIGl0IGlzbid0IGRlYWN0aXZhdGVkIHdpdGhpbiB0aGUgbWFuaWZlc3QgYW5kIHdlJ3JlIG9wZXJhdGluZyBpbiBPUC9ibG9ja3Mgb3V0c2lkZSBGaW9yaSBlbGVtZW50cyB0ZW1wbGF0ZXMsXG5cdC8vdGhlIHRyZWVUYWJsZSdzIHZpc2liaWxpdHkgcmVsaWVzIG9uIHRoZSBjdXR2aXNpYmlsaXR5LFxuXHQvL3doaWxlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBvdGhlciB0YWJsZSBpcyBkZXRlcm1pbmVkIGJ5IGluc2VydGFibGUgcmVzdHJpY3Rpb25zIGFuZCBjcmVhdGUgdmlzaWJpbGl0eS5cblx0bGV0IHVwZGF0ZU9uTmF2aWdhdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8ubmF2aWdhdGlvbkV4cHJlc3Npb247XG5cdGlmICh1cGRhdGVPbk5hdmlnYXRpb24/Ll90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0dXBkYXRlT25OYXZpZ2F0aW9uID0gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblx0cmV0dXJuIGFuZChcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdD8gb3IoY3V0VmlzaWJpbGl0eSwgY29weVZpc2liaWxpdHkpXG5cdFx0XHQ6IGFuZChcblx0XHRcdFx0XHRvcihcblx0XHRcdFx0XHRcdGFuZChjcmVhdGVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgdXBkYXRlT25OYXZpZ2F0aW9uKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0bm90RXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5lbmFibGVQYXN0ZSwgZmFsc2UpLFxuXHRcdFx0XHRcdCFbVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpXG5cdFx0XHQgICksXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNVcGRhdGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24udXBkYXRlLFxuXHRcdHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvbixcblx0XHRtYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0OiBib29sZWFuID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8ubWFzc0VkaXQuZW5hYmxlZCB8fCBmYWxzZTtcblx0Y29uc3QgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2Vcblx0XHRcdD8gVUkuSXNFZGl0YWJsZVxuXHRcdFx0OiBbVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFRlbXBsYXRlVHlwZS5GcmVlU3R5bGVQYWdlXS5pbmNsdWRlcyhjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKTtcblx0Ly9NYXNzRWRpdCBpcyB2aXNpYmxlXG5cdC8vIElmXG5cdC8vXHRcdC0gdGhlcmUgaXMgbm8gc3RhdGljIHJlc3RyaWN0aW9ucyBzZXQgdG8gZmFsc2Vcblx0Ly9cdFx0LSBhbmQgZW5hYmxlTWFzc0VkaXQgaXMgbm90IHNldCB0byBmYWxzZSBpbnRvIHRoZSBtYW5pZmVzdFxuXHQvL1x0XHQtIGFuZCB0aGUgc2VsZWN0aW9uTW9kZSBpcyByZWxldmFudFxuXHQvL1x0VGhlbiBNYXNzRWRpdCBpcyBhbHdheXMgdmlzaWJsZSBpbiBMUiBvciBkeW5hbWljYWxseSB2aXNpYmxlIGluIE9QIGFjY29yZGluZyB0byB1aT5FZGl0YWJsZSBhbmQgaGlkZGVuQW5ub3RhdGlvblxuXHQvLyAgQnV0dG9uIGlzIGhpZGRlbiBmb3IgYWxsIG90aGVyIGNhc2VzXG5cdHJldHVybiBhbmQoXG5cdFx0bm90KGFuZChpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSkpLFxuXHRcdG1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3QsXG5cdFx0dGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRub3QoaXNVcGRhdGVIaWRkZW4pXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uUm93VmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgY3JlYXRpb25Sb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlc3RyaWN0aW9uc0luc2VydGFibGUgPSBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+IHtcblx0XHRcdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdHBhdGggPSBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIG5hdmlnYXRpb25QYXRocyk7XG5cdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0XHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0XHRjb25zdCBsYXN0TmF2ID0gbmF2aWdhdGlvblByb3BlcnRpZXNbbmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGNvbnN0IHBhcnRuZXIgPSBpc05hdmlnYXRpb25Qcm9wZXJ0eShsYXN0TmF2KSAmJiBsYXN0TmF2LnBhcnRuZXI7XG5cdFx0XHRcdGlmIChwYXJ0bmVyKSB7XG5cdFx0XHRcdFx0cGF0aCA9IGAke3BhcnRuZXJ9LyR7cGF0aH1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGF0aDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBpc0luc2VydGFibGUgPVxuXHRcdHJlc3RyaWN0aW9uc0luc2VydGFibGUuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdD8gaXNQYXRoSW5zZXJ0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwge1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHRcdFx0ICB9KVxuXHRcdFx0OiByZXN0cmljdGlvbnNJbnNlcnRhYmxlO1xuXG5cdHJldHVybiBhbmQoXG5cdFx0Y3JlYXRpb25Sb3dWaXNpYmlsaXR5LFxuXHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRvcihcblx0XHRcdCFzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0XHRmb3JtYXRSZXN1bHQoW3BhdGhJbk1vZGVsKFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIFwiaW50ZXJuYWxcIildLCB0YWJsZUZvcm1hdHRlcnMudmFsaWRhdGVDcmVhdGlvblJvd0ZpZWxkcylcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjb25kaXRpb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBjb250ZXh0UGF0aDogc3RyaW5nID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0Ly8gZm9yIElubGluZSBjcmVhdGlvbiByb3dzIGNyZWF0ZSBjYW4gYmUgaGlkZGVuIHZpYSBtYW5pZmVzdCBhbmQgdGhpcyBzaG91bGQgbm90IGltcGFjdCBpdHMgZW5hYmxlbWVudFxuXHRcdGNvbmRpdGlvbnMucHVzaChhbmQobm90KHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5jcmVhdGUpLCBVSS5Jc0VkaXRhYmxlKSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uZGl0aW9ucy5wdXNoKGNyZWF0ZVZpc2liaWxpdHkpO1xuXHR9XG5cblx0Y29uc3QgaXNJbnNlcnRhYmxlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNJbnNlcnRhYmxlLmV4cHJlc3Npb247XG5cdGNvbnN0IENvbGxlY3Rpb25UeXBlID0gY29udmVydGVyQ29udGV4dC5yZXNvbHZlQWJzb2x1dGVQYXRoPEVudGl0eVNldD4oc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jb2xsZWN0aW9uUGF0aCkudGFyZ2V0O1xuXHRjb25kaXRpb25zLnB1c2goXG5cdFx0b3IoXG5cdFx0XHRpc0VudGl0eVNldChDb2xsZWN0aW9uVHlwZSksXG5cdFx0XHRhbmQoaXNJbnNlcnRhYmxlLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSwgVUkuSXNFZGl0YWJsZSkpXG5cdFx0KVxuXHQpO1xuXG5cdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBJbiBjYXNlIG9mIGEgVHJlZVRhYmxlLCB0aGUgY3JlYXRlIGJ1dHRvbiBzaGFsbCBiZSBhY3RpdmUgb25seSBpZiAwIG9yIDEgaXRlbXMgYXJlIHNlbGVjdGVkIChwYXJlbnQgbm9kZSlcblx0XHQvLyBXZSBkbyBub3QgbmVlZCB0aGlzIGNvbmRpdGlvbiBvbiB0aGUgQ29udGV4dE1lbnUsIGFzIHdlIG9ubHkgY3JlYXRlIG9uIHRoZSBzZWxlY3RlZCBub2RlXG5cdFx0Y29uZGl0aW9ucy5wdXNoKGxlc3NPckVxdWFsKHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpO1xuXG5cdFx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlRW5hYmxlbWVudCkge1xuXHRcdFx0Ly8gVGhlcmUncyBhIGNyZWF0ZUVuYWJsZW1lbnQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFkZGl0aW9ubmFsIGNvbmRpdGlvbnNcblx0XHRcdC8vIFRoZXNlIGNvbmRpdGlvbnMgd2lsbCBiZSByZWZsZWN0ZWQgaW4gdGhlIGludGVybmFsIG1vZGVsXG5cdFx0XHRjb25kaXRpb25zLnB1c2gobm90RXF1YWwocGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImNyZWF0ZUVuYWJsZW1lbnQvQ3JlYXRlXCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFuZCguLi5jb25kaXRpb25zKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGRlbGV0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0ZGVsZXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBUaGUgZm9sbG93aW5nIGNvbnRleHRzIGFyZSBmaWxsZWQgYXQgcnVudGltZSB3aGVuIGEgdXNlciBzZWxlY3RzIG9uZSBvciBtb3JlIGl0ZW1zIGZyb20gYSBsaXN0LlxuXHQvLyBDaGVja3MgYXJlIHRoZW4gbWFkZSBpbiBmdW5jdGlvbiB1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyBpbiBmaWxlIERlbGV0ZUhlbHBlciB0byBzZWUgaWYgdGhlcmVcblx0Ly8gYXJlIGl0ZW1zIHRoYXQgY2FuIGJlIGRlbGV0ZWQsIHRodXMgdGhlIGRlbGV0ZSBidXR0b24gc2hvdWxkIGJlIGVuYWJsZWQgaW4gdGhlc2UgY2FzZXMuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRlbGV0YWJsZUNvbnRleHRzXCIsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IHVuU2F2ZWRDb250ZXh0cyA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJ1blNhdmVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVwiLCBcImludGVybmFsXCIpO1xuXG5cdC8vIFwiVW5yZXNvbHZhYmxlXCIgaW4gbmF2aWdhdGlvbkV4cHJlc3Npb24gaXMgaW50ZXJwcmV0ZWQgdG8gbWVhbiB0aGF0IHRoZXJlIGFyZSBubyBuYXZpZ2F0aW9uRXhwcmVzc2lvbnNcblx0Ly8gZGVmaW5lZC5cblx0Ly8gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvbiBpcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IGNvbWVzXG5cdC8vIGZyb20gdGhlIERlbGV0ZSByZXN0cmljdGlvbnMgZGVmaW5lZCBpbiBOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIGZvciB0aGlzIGVudGl0eS4gSW4gb3JkZXIgdG9cblx0Ly8gYmUgZGVsZXRhYmxlLCB0aGUgaXRlbSBtdXN0IGFsc28gYmUgYWxsb3dlZCB0byBiZSBkZWxldGFibGUgYWNjb3JkaW5nIHRvIHRoZSBEZWxldGUgUmVzdHJpY3Rpb25zXG5cdC8vIG9uIHRoZSBlbnRpdHkgaXRzZWxmLlxuXHRyZXR1cm4gYW5kKFxuXHRcdGRlbGV0ZVZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdG9yKFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKGRlbGV0YWJsZUNvbnRleHRzLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSwgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aCh1blNhdmVkQ29udGV4dHMsIHRydWUpLCAwKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICogQHBhcmFtIHBhc3RlVmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXN0ZUVuYWJsZW1lbnQoXG5cdHBhc3RlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0c1BhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcInNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCBwYXN0ZUVuYWJsZW1lbnRQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vcGFzdGVFbmFibGVtZW50XCIgOiBcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9wYXN0ZUVuYWJsZW1lbnRcIjtcblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHRwYXN0ZVZpc2liaWxpdHksXG5cdFx0XHRvcihcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGxlc3NPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbChzZWxlY3RlZENvbnRleHRzUGF0aCwgXCJpbnRlcm5hbFwiKSksIDEpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChwYXN0ZUVuYWJsZW1lbnRQYXRoLCBcImludGVybmFsXCIpLCB0cnVlKSxcblxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0bGV0IHVwZGF0ZU9uTmF2aWdhdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8ubmF2aWdhdGlvbkV4cHJlc3Npb247XG5cdGlmICh1cGRhdGVPbk5hdmlnYXRpb24/Ll90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0dXBkYXRlT25OYXZpZ2F0aW9uID0gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblx0cmV0dXJuIGFuZCh1cGRhdGVPbk5hdmlnYXRpb24sIHBhc3RlVmlzaWJpbGl0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIG1hc3NFZGl0VmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ01hc3NFZGl0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdEVuYWJsZW1lbnQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0bWFzc0VkaXRWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9XG5cdFx0IWlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pICYmXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIjtcblx0Y29uc3QgdXBkYXRhYmxlQ29udGV4dFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJ1cGRhdGFibGVDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS91cGRhdGFibGVDb250ZXh0c1wiO1xuXHRjb25zdCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSBncmVhdGVyT3JFcXVhbChwYXRoSW5Nb2RlbChudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5LCBcImludGVybmFsXCIpLCAxKTtcblx0Y29uc3QgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbCh1cGRhdGFibGVDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIikpLCAxKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGJEaXNwbGF5TW9kZSA9IGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBiaW5kaW5nIGluIGNhc2Vcblx0Ly8gMS4gVXBkYXRlIGlzIGRlcGVuZGVudCBvbiBjdXJyZW50IGVudGl0eSBwcm9wZXJ0eSAoaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSBpcyB0cnVlKS5cblx0Ly8gMi4gVGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZChsaWtlIExSKSwgaW4gdGhpcyBjYXNlIG9ubHkgYWN0aXZlIGNvbnRleHRzIGNhbiBiZSBtYXNzIGVkaXRlZC5cblx0Ly8gICAgU28sIHVwZGF0ZSBkZXBlbmRzIG9uICdJc0FjdGl2ZUVudGl0eScgdmFsdWUgd2hpY2ggbmVlZHMgdG8gYmUgY2hlY2tlZCBydW50aW1lLlxuXHRjb25zdCBydW50aW1lQmluZGluZyA9IGlmRWxzZShcblx0XHRvcihhbmQoYkRpc3BsYXlNb2RlLCBiSXNEcmFmdFN1cHBvcnRlZCksIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkpLFxuXHRcdGFuZChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMpLFxuXHRcdGFuZChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMpXG5cdCk7XG5cblx0cmV0dXJuIGFuZChtYXNzRWRpdFZpc2liaWxpdHksIGlmRWxzZShpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5LCBydW50aW1lQmluZGluZywgYW5kKHJ1bnRpbWVCaW5kaW5nLCBwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dEVuYWJsZW1lbnQoXG5cdGN1dFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGN1dGFibGVDb250ZXh0c1BhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIgOiBcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gcGF0aEluTW9kZWwoY3V0YWJsZUNvbnRleHRzUGF0aCwgXCJpbnRlcm5hbFwiKTtcblx0cmV0dXJuIGFuZChcblx0XHRjdXRWaXNpYmlsaXR5LFxuXHRcdG9yKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uXG5cdFx0KSxcblx0XHRydW50aW1lQmluZGluZ1xuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb3B5VmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29weUVuYWJsZW1lbnQoXG5cdGNvcHlWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBjb3B5YWJsZUNvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIgOiBcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IHBhdGhJbk1vZGVsKGNvcHlhYmxlQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpO1xuXHRyZXR1cm4gYW5kKGNvcHlWaXNpYmlsaXR5LCBydW50aW1lQmluZGluZyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTW92ZSB1cCcgYW5kICdNb3ZlIGRvd24nIGFjdGlvbnMuXG4gKiBAcGFyYW0gbW92ZVVwRG93blZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yVXBcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRNb3ZlVXBEb3duRW5hYmxlbWVudChcblx0bW92ZVVwRG93blZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Zm9yVXA6IGJvb2xlYW4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHNpbmdsZUNvbnRleHRNb3ZhYmxlVXAgPSAhZm9yQ29udGV4dE1lbnUgPyBcInNpbmdsZUNvbnRleHRNb3ZhYmxlVXBcIiA6IFwiY29udGV4dG1lbnUvc2luZ2xlQ29udGV4dE1vdmFibGVVcFwiO1xuXHRjb25zdCBzaW5nbGVDb250ZXh0TW92YWJsZURvd24gPSAhZm9yQ29udGV4dE1lbnUgPyBcInNpbmdsZUNvbnRleHRNb3ZhYmxlRG93blwiIDogXCJjb250ZXh0bWVudS9zaW5nbGVDb250ZXh0TW92YWJsZURvd25cIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBmb3JVcFxuXHRcdD8gZXF1YWwocGF0aEluTW9kZWwoc2luZ2xlQ29udGV4dE1vdmFibGVVcCwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHQ6IGVxdWFsKHBhdGhJbk1vZGVsKHNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSk7XG5cdHJldHVybiBhbmQoXG5cdFx0bW92ZVVwRG93blZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdHJ1bnRpbWVCaW5kaW5nXG5cdCk7XG59XG5cbi8qKlxuICogVGVsbHMgaWYgdGhlIHRhYmxlIGluIHRlbXBsYXRlIGlzIGluIGRpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFibGUgaXMgaW4gZGlzcGxheSBtb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LCBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiA9IGZhbHNlKTogYm9vbGVhbiB7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc0lubGluZUVkaXQoKSkge1xuXHRcdC8vaWYgdGhlcmUgaXMgaW5saW5lIGVkaXQgaW4gdGhlIHBhZ2Ugd2UgY2Fubm90IGZvcmNlIHRoZSB0YWJsZSB0byBkaXNwbGF5IGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSB0eXBlXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGlmIChcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0KGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyB1cGRhdGFibGUgd2lsbCBiZSBoYW5kbGVkIGF0IHRoZSBwcm9wZXJ0eSBsZXZlbFxuXHRyZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnQ0E7RUF3Q08sTUFBTUEsa0JBQWtCLEdBQUc7SUFDakNDLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUJDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUNDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFFBQVEsRUFBRTtFQUNYLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQUMsUUFBQSxDQUFBWCxrQkFBQSxHQUFBQSxrQkFBQTtFQU9PLFNBQVNZLDhCQUE4QkEsQ0FDN0NDLGdCQUF5RCxFQUN6REMsWUFBMEIsRUFDMUJDLDBCQUFxRCxFQUM1QjtJQUN6QixPQUFPO01BQ05DLGNBQWMsRUFBRUMsbUJBQW1CLENBQUNKLGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7TUFDOUVDLGdCQUFnQixFQUFFO1FBQ2pCQyxNQUFNLEVBQUVDLHVCQUF1QixDQUFDUixnQkFBZ0IsRUFBRSxjQUFjLENBQUM7UUFDakVTLE1BQU0sRUFBRUQsdUJBQXVCLENBQUNSLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztRQUNqRVUsTUFBTSxFQUFFRix1QkFBdUIsQ0FBQ1IsZ0JBQWdCLEVBQUUsY0FBYztNQUNqRSxDQUFDO01BQ0RDLFlBQVksRUFBRUEsWUFBWTtNQUMxQlUsd0JBQXdCLEVBQUVBLHdCQUF3QixDQUFDWCxnQkFBZ0IsQ0FBQztNQUNwRVksU0FBUyxFQUFFQyxZQUFZLENBQUNiLGdCQUFnQixD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
|
|
756
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJ1cGRhdGVPbk5hdmlnYXRpb24iLCJfdHlwZSIsIm5vdEVxdWFsIiwiZW5hYmxlUGFzdGUiLCJpbmNsdWRlcyIsImlzVXBkYXRlSGlkZGVuIiwibWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCIsIm1hc3NFZGl0IiwiT2JqZWN0UGFnZSIsIkZyZWVTdHlsZVBhZ2UiLCJyZXN0cmljdGlvbnNJbnNlcnRhYmxlIiwiaW5kZXhPZiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGFzdE5hdiIsInBhcnRuZXIiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJmb3JtYXRSZXN1bHQiLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZm9yQ29udGV4dE1lbnUiLCJjb25kaXRpb25zIiwiY29udGV4dFBhdGgiLCJwdXNoIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwibGVzc09yRXF1YWwiLCJjcmVhdGVFbmFibGVtZW50IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImdyZWF0ZXJUaGFuIiwic2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJwYXN0ZUVuYWJsZW1lbnRQYXRoIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHkiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJncmVhdGVyT3JFcXVhbCIsIm51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMiLCJiRGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJydW50aW1lQmluZGluZyIsImN1dGFibGVDb250ZXh0c1BhdGgiLCJjb3B5YWJsZUNvbnRleHRzUGF0aCIsIm1vdmVVcERvd25WaXNpYmlsaXR5Iiwic2luZ2xlQ29udGV4dE1vdmFibGVVcCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biIsImNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzSW5saW5lRWRpdCIsInRlbXBsYXRlVHlwZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJvb2xlYW4sIEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRsZW5ndGgsXG5cdGxlc3NPckVxdWFsLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aEluc2VydGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBDcmVhdGlvbk1vZGUsIFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQsIGdldEluc2lnaHRzVmlzaWJpbGl0eSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0luc2lnaHRzSGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL1RhYmxlXCI7XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uID0gQmFzZUFjdGlvbiAmIHtcblx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZDtcblx0aXNUZW1wbGF0ZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRlbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZEZvckNvbnRleHRNZW51PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG5hdmlnYXRpb25FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xudHlwZSBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlID0gUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0ge1xuXHRjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0ZGVsZXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0dXBkYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0YXZhaWxhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRyZXN0cmljdGlvbnM6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgU3RhbmRhcmRBY3Rpb25LZXlzID0ge1xuXHRDdXQ6IFwiU3RhbmRhcmRBY3Rpb246OkN1dFwiLFxuXHRDb3B5OiBcIlN0YW5kYXJkQWN0aW9uOjpDb3B5XCIsXG5cdENyZWF0ZTogXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRlXCIsXG5cdERlbGV0ZTogXCJTdGFuZGFyZEFjdGlvbjo6RGVsZXRlXCIsXG5cdENyZWF0aW9uUm93OiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGlvblJvd1wiLFxuXHRQYXN0ZTogXCJTdGFuZGFyZEFjdGlvbjo6UGFzdGVcIixcblx0TWFzc0VkaXQ6IFwiU3RhbmRhcmRBY3Rpb246Ok1hc3NFZGl0XCIsXG5cdEluc2lnaHRzOiBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiLFxuXHRNb3ZlVXA6IFwiU3RhbmRhcmRBY3Rpb246Ok1vdmVVcFwiLFxuXHRNb3ZlRG93bjogXCJTdGFuZGFyZEFjdGlvbjo6TW92ZURvd25cIlxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgY29udGV4dCBmb3IgdGhlIHN0YW5kYXJkIGFjdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uTW9kZVxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyAgVGhlIGNvbnRleHQgZm9yIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIpLFxuXHRcdFx0ZGVsZXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkRlbGV0ZUhpZGRlblwiKSxcblx0XHRcdHVwZGF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJVcGRhdGVIaWRkZW5cIilcblx0XHR9LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZDogaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdG5ld0FjdGlvbjogZ2V0TmV3QWN0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRyZXN0cmljdGlvbnM6IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBzdGlja3kgb3IgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gKGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcblx0XHQ/IHRydWVcblx0XHQ6IGZhbHNlO1xuXG5cdHJldHVybiBiSXNEcmFmdFN1cHBvcnRlZCB8fCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgbmV3QWN0aW9uIGludG8gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbmV3IGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyBuYW1lOiBzdHJpbmc7IGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IH0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gaXNFbnRpdHlTZXQoY3VycmVudEVudGl0eVNldClcblx0XHQ/IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiA/P1xuXHRcdCAgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb25cblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgbmV3QWN0aW9uTmFtZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBuZXdBY3Rpb24/LnRvU3RyaW5nKCk7XG5cdGlmIChuZXdBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgYXZhaWxhYmxlUHJvcGVydHkgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYWN0aW9uc1tuZXdBY3Rpb25OYW1lXT8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogbmV3QWN0aW9uTmFtZSxcblx0XHRcdGF2YWlsYWJsZTogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPEJvb2xlYW4+KGF2YWlsYWJsZVByb3BlcnR5LCBbXSwgdHJ1ZSlcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgYWN0aW9uIHZpc2liaWxpdHkgY29uZmlndXJlZCBpbnRvIGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c0Fubm90YXRpb25UZXJtOiBcIkNyZWF0ZUhpZGRlblwiIHwgXCJVcGRhdGVIaWRkZW5cIiB8IFwiRGVsZXRlSGlkZGVuXCIsXG5cdGJXaXRoTmF2aWdhdGlvblBhdGggPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBUaGUgYW5ub3RhdGlvbnMgaW4gcXVlc3Rpb24gKENyZWF0ZUhpZGRlbiwgRGVsZXRlSGlkZGVuLCBVcGRhdGVIaWRkZW4pIG1vc3Qgc3BlY2lmaWNhbGx5IGNhbiBiZSBkZWZpbmVkIG9uIEVudGl0eVNldC5cblx0Ly8gSW4gc2V2ZXJhbCBjYXNlcywgZmFsbGJhY2sgdG8gRW50aXR5VHlwZSBuZWVkcyB0byBiZSBjaGVja2VkOlxuXHQvLyAtIEluIGNhc2Ugb2Ygc2luZ2xldG9uIChhbm5vdGF0aW9ucyBkbyBub3QgYXBwbHkpXG5cdC8vIC0gRW50aXR5U2V0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChjb250YWlubWVudCBvciBubyBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHQvLyAtIEVudGl0eVNldCBjYW4gYmUgZGV0ZXJtaW5lZCwgYnV0IHRoZSBhbm5vdGF0aW9uIGlzIG5vdCBkZWZpbmVkIHRoZXJlXG5cblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGFjdGlvbkFubm90YXRpb25WYWx1ZSA9XG5cdFx0KCFpc1NpbmdsZXRvbihjdXJyZW50RW50aXR5U2V0KSAmJiBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uW3NBbm5vdGF0aW9uVGVybV0pIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dO1xuXG5cdGlmICghYWN0aW9uQW5ub3RhdGlvblZhbHVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFubm90YXRlZCByZXN0cmljdGlvbnMgZm9yIHRoZSBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHJlc3RyaWN0aW9uc0RlZiA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNJbnNlcnRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoSW5zZXJ0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzVXBkYXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdGZ1bmN0aW9uOiBpc1BhdGhEZWxldGFibGVcblx0XHR9XG5cdF07XG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+ID0ge307XG5cdHJlc3RyaWN0aW9uc0RlZi5mb3JFYWNoKGZ1bmN0aW9uIChkZWYpIHtcblx0XHRjb25zdCBkZWZGdW5jdGlvbiA9IGRlZltcImZ1bmN0aW9uXCJdO1xuXHRcdHJlc3VsdFtkZWYua2V5XSA9IHtcblx0XHRcdGV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pLFxuXHRcdFx0bmF2aWdhdGlvbkV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0XHRcdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pXG5cdFx0fTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRlbXBsYXRpbmcgZm9yIGluc2VydC91cGRhdGUgYWN0aW9ucyBpcyBtYW5kYXRvcnkuXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRHJhZnRPclN0aWNreVxuICogQHJldHVybnMgVHJ1ZSBpZiB3ZSBuZWVkIHRvIHRlbXBsYXRlIGluc2VydCBvciB1cGRhdGUgYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3k6IGJvb2xlYW4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0dmlzaWJsZUV4cHJlc3Npb246IGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3V0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGN1dFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjdXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ29weShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNvcHlWaXNpYmlsaXR5ID0gZ2V0Q29weVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGNvcHlWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY29weVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENvcHlFbmFibGVtZW50KGNvcHlWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q29weUVuYWJsZW1lbnQoY29weVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01vdmUgdXAnIGFuZCAnTW92ZSBkb3duJyBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yVXBcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25Nb3ZlVXBEb3duKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvclVwOiBib29sZWFuXG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNhbkNoYW5nZVNpYmxpbmcgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XHRdPy5DaGFuZ2VOZXh0U2libGluZ0FjdGlvbiAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlVmlzaWJpbGl0eSA9IGFuZChnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLCBjYW5DaGFuZ2VTaWJsaW5nKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobW92ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtb3ZlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQobW92ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZvclVwKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNb3ZlVXBEb3duRW5hYmxlbWVudChtb3ZlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZm9yVXAsIHRydWUpKSxcblx0XHRrZXk6IGZvclVwID8gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCA6IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bixcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGRlbGV0ZVZpc2liaWxpdHkgPSBnZXREZWxldGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGRlbGV0ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkZWxldGVWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRpb25Sb3cnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgdGVtcGxhdGVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFN0YW5kYXJkQWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvdyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/LmV4cHJlc3Npb247XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShcblx0XHRlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSxcblx0XHRhbmQoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSEsXG5cdFx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0KSxcblx0XHRmYWxzZVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGF2YWlsYWJsZUNvcHlBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XT8uQ29weUFjdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0aWYgKCFhdmFpbGFibGVDb3B5QWN0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSwgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgZGlzcGxheWVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjdXRWaXNpYmlsaXR5ID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY29weVZpc2liaWxpdHkgPSBnZXRDb3B5VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UsIHRydWUpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0Y3V0VmlzaWJpbGl0eSxcblx0XHRjb3B5VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50ID0gZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBwYXN0ZUVuYWJsZW1lbnRGb3JDb250ZXh0TWVudSA9IGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXHRyZXR1cm4ge1xuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24ocGFzdGVFbmFibGVtZW50KSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlRW5hYmxlbWVudEZvckNvbnRleHRNZW51KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdFx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdFx0Ly8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5cdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGFuZChtYXNzRWRpdFZpc2liaWxpdHksIGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSlcblx0XHQpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBpbnNpZ2h0c1Zpc2liaWxpdHkgPSBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXCJUYWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGluc2lnaHRzRW5hYmxlbWVudCA9IGFuZChpbnNpZ2h0c1Zpc2liaWxpdHksIGdldEluc2lnaHRzRW5hYmxlbWVudCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoaW5zaWdodHNWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihpbnNpZ2h0c0VuYWJsZW1lbnQpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkluc2lnaHRzLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVGVtcGxhdGluZyhcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0ZvckNyZWF0aW9uUm93ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vVGVtcGxhdGluZyBvZiBDcmVhdGUgQnV0dG9uIGlzIG5vdCBkb25lOlxuXHQvLyBcdCAtIElmIEJ1dHRvbiBpcyBuZXZlciB2aXNpYmxlKGNvdmVyZWQgdGhlIEV4dGVybmFsIGNyZWF0ZSBidXR0b24sIG5ldyBBY3Rpb24pXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0ZSBCdXR0b25cblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBub3Qgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0aW9uUm93IEJ1dHRvblxuXG5cdHJldHVybiBhbmQoXG5cdFx0Ly9YTk9SIGdhdGVcblx0XHRvcihcblx0XHRcdGFuZChpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSxcblx0XHRcdGFuZCghaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdylcblx0XHQpLFxuXHRcdG9yKG5vdChpc0NvbnN0YW50KGNyZWF0ZVZpc2liaWxpdHkpKSwgY3JlYXRlVmlzaWJpbGl0eSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9uVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRUZW1wbGF0aW5nKGFjdGlvblZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBDcmVhdGUvRGVsZXRlIGJ1dHRvbnMgc2hhbGwgYmUgaGlkZGVuIGluIGFuIGFuYWx5dGljYWwuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRydWUgaWYgYnV0dG9ucyBzaGFsbCBiZSBoaWRkZW4sIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IGJvb2xlYW4ge1xuXHQvLyBXZSBzaG93IENyZWF0ZS9EZWxldGUgYnV0dG9ucyBpbiBBbmFseXRpY2FsIHRhYmxlcyBvbmx5IGluIGEgTGlzdFJlcG9ydC5cblx0cmV0dXJuIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCJcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBpc0ZvclBhc3RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZSxcblx0aXNGb3JQYXN0ZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPVxuXHRcdGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSB8fFxuXHRcdChpc0ZvckNyZWF0aW9uUm93XG5cdFx0XHQ/IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIsIGZhbHNlKVxuXHRcdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5uZXdBY3Rpb247XG5cdC8vIENyZWF0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgLSBGb3IgYW5hbHl0aWNhbCB0YWJsZXM6IG9ubHkgaW4gYSBMaXN0UmVwb3J0XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgVUkuSXNFZGl0YWJsZVxuXHQvL1x0IC0gT3RoZXJ3aXNlXG5cdC8vXHRcdC0gSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB2YWxpZCB0aGVuIGNyZWF0ZSBidXR0b24gaXNuJ3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gbm8gbmV3QWN0aW9uIGF2YWlsYWJsZVxuXHQvL1x0XHRcdC0gSXQncyBub3QgaW5zZXJ0YWJsZSBhbmQgdGhlcmUgaXMgbm90IGEgbmV3IGFjdGlvblxuXHQvL1x0XHRcdC0gY3JlYXRlIGlzIGhpZGRlblxuXHQvL1x0XHRcdC0gVGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zXG5cdC8vXHRcdFx0LSBJdCdzIGFuIEFuYWx5dGljYWwgTGlzdCBQYWdlXG5cdC8vXHRcdFx0LSBVc2VzIElubGluZUNyZWF0aW9uUm93cyBtb2RlIGFuZCBhIFJlc3BvbnNpdmUgdGFibGUgdHlwZSwgd2l0aCB0aGUgcGFyYW1ldGVyIGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgdG8gdHJ1ZSB3aGlsZSBub3QgaW4gY3JlYXRlIG1vZGVcblx0Ly8gICAgICAgICAgXHQtIHdoZW4gY2FsY3VsYXRpbmcgcGFzdGUgYnV0dG9uIHZpc2liaWxpdHksICB3ZSBmb3JjZSB0aGUgY29uZGl0aW9uIHRvIGZhbHNlIHdpdGggdGhlIGlzRm9yUGFzdGUgcHJvcGVydHlcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCxcblx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFVJLklzRWRpdGFibGUpKSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQobmV3QWN0aW9uPy5hdmFpbGFibGUpLCBlcXVhbChuZXdBY3Rpb24/LmF2YWlsYWJsZSwgZmFsc2UpKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNJbnNlcnRhYmxlKSwgZXF1YWwoaXNJbnNlcnRhYmxlLCBmYWxzZSksICFuZXdBY3Rpb24pLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0NyZWF0ZUhpZGRlbiksIGVxdWFsKGlzQ3JlYXRlSGlkZGVuLCB0cnVlKSksXG5cdFx0XHRcdGFuZChcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyxcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGFuZChcblx0XHRcdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dD8udGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRub3QoaXNGb3JQYXN0ZSlcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0VUkuSXNDcmVhdGVNb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNDcmVhdGVIaWRkZW4pKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRsZXQgaXNEZWxldGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uZGVsZXRlO1xuXHRsZXQgcGF0aERlbGV0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uO1xuXHQvL3dlIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHJlbGF0aXZlIHBhdGggZGVwZW5kZW50IG9uIHRoZSBjb250ZXh0XG5cdGlmICghaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUoaXNEZWxldGVIaWRkZW4pKSB7XG5cdFx0aXNEZWxldGVIaWRkZW4gPSBjb25zdGFudChmYWxzZSk7XG5cdH1cblx0aWYgKCFpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZShwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbikpIHtcblx0XHRwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdFx0aGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY29weVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb3B5VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vSWYgaXQgaXNuJ3QgZGVhY3RpdmF0ZWQgd2l0aGluIHRoZSBtYW5pZmVzdCBhbmQgd2UncmUgb3BlcmF0aW5nIGluIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlcyxcblx0Ly90aGUgdHJlZVRhYmxlJ3MgdmlzaWJpbGl0eSByZWxpZXMgb24gdGhlIGN1dHZpc2liaWxpdHksXG5cdC8vd2hpbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG90aGVyIHRhYmxlIGlzIGRldGVybWluZWQgYnkgaW5zZXJ0YWJsZSByZXN0cmljdGlvbnMgYW5kIGNyZWF0ZSB2aXNpYmlsaXR5LlxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0PyBvcihjdXRWaXNpYmlsaXR5LCBjb3B5VmlzaWJpbGl0eSlcblx0XHRcdDogYW5kKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKGNyZWF0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uKSxcblx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCB1cGRhdGVPbk5hdmlnYXRpb24pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0XHRcdFx0IVtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSlcblx0XHRcdCAgKSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5tYXNzRWRpdC5lbmFibGVkIHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IFtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkZyZWVTdHlsZVBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpO1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0bWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGNyZWF0aW9uUm93LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGlvblJvd1Zpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3ROYXYgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxhc3ROYXYpICYmIGxhc3ROYXYucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXIpIHtcblx0XHRcdFx0XHRwYXRoID0gYCR7cGFydG5lcn0vJHtwYXRofWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9XG5cdFx0cmVzdHJpY3Rpb25zSW5zZXJ0YWJsZS5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0PyBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQgIH0pXG5cdFx0XHQ6IHJlc3RyaWN0aW9uc0luc2VydGFibGU7XG5cblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGlvblJvd1Zpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRhYmxlLFxuXHRcdG9yKFxuXHRcdFx0IXN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgXCJpbnRlcm5hbFwiKV0sIHRhYmxlRm9ybWF0dGVycy52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvbmRpdGlvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHQvLyBmb3IgSW5saW5lIGNyZWF0aW9uIHJvd3MgY3JlYXRlIGNhbiBiZSBoaWRkZW4gdmlhIG1hbmlmZXN0IGFuZCB0aGlzIHNob3VsZCBub3QgaW1wYWN0IGl0cyBlbmFibGVtZW50XG5cdFx0Y29uZGl0aW9ucy5wdXNoKGFuZChub3Qoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmNyZWF0ZSksIFVJLklzRWRpdGFibGUpKTtcblx0fSBlbHNlIHtcblx0XHRjb25kaXRpb25zLnB1c2goY3JlYXRlVmlzaWJpbGl0eSk7XG5cdH1cblxuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgQ29sbGVjdGlvblR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGg8RW50aXR5U2V0PihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNvbGxlY3Rpb25QYXRoKS50YXJnZXQ7XG5cdGNvbmRpdGlvbnMucHVzaChcblx0XHRvcihcblx0XHRcdGlzRW50aXR5U2V0KENvbGxlY3Rpb25UeXBlKSxcblx0XHRcdGFuZChpc0luc2VydGFibGUsIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBVSS5Jc0VkaXRhYmxlKSlcblx0XHQpXG5cdCk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUsIHRoZSBjcmVhdGUgYnV0dG9uIHNoYWxsIGJlIGFjdGl2ZSBvbmx5IGlmIDAgb3IgMSBpdGVtcyBhcmUgc2VsZWN0ZWQgKHBhcmVudCBub2RlKVxuXHRcdC8vIFdlIGRvIG5vdCBuZWVkIHRoaXMgY29uZGl0aW9uIG9uIHRoZSBDb250ZXh0TWVudSwgYXMgd2Ugb25seSBjcmVhdGUgb24gdGhlIHNlbGVjdGVkIG5vZGVcblx0XHRjb25kaXRpb25zLnB1c2gobGVzc09yRXF1YWwocGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSk7XG5cblx0XHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHQvLyBUaGVyZSdzIGEgY3JlYXRlRW5hYmxlbWVudCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRkaXRpb25uYWwgY29uZGl0aW9uc1xuXHRcdFx0Ly8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRcdGNvbmRpdGlvbnMucHVzaChub3RFcXVhbChwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiY3JlYXRlRW5hYmxlbWVudC9DcmVhdGVcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYW5kKC4uLmNvbmRpdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBmb2xsb3dpbmcgY29udGV4dHMgYXJlIGZpbGxlZCBhdCBydW50aW1lIHdoZW4gYSB1c2VyIHNlbGVjdHMgb25lIG9yIG1vcmUgaXRlbXMgZnJvbSBhIGxpc3QuXG5cdC8vIENoZWNrcyBhcmUgdGhlbiBtYWRlIGluIGZ1bmN0aW9uIHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIGluIGZpbGUgRGVsZXRlSGVscGVyIHRvIHNlZSBpZiB0aGVyZVxuXHQvLyBhcmUgaXRlbXMgdGhhdCBjYW4gYmUgZGVsZXRlZCwgdGh1cyB0aGUgZGVsZXRlIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGVzZSBjYXNlcy5cblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgZGVsZXRhYmxlQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgdW5TYXZlZENvbnRleHRzID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0Ly8gXCJVbnJlc29sdmFibGVcIiBpbiBuYXZpZ2F0aW9uRXhwcmVzc2lvbiBpcyBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlcmUgYXJlIG5vIG5hdmlnYXRpb25FeHByZXNzaW9uc1xuXHQvLyBkZWZpbmVkLlxuXHQvLyBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uIGlzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY29tZXNcblx0Ly8gZnJvbSB0aGUgRGVsZXRlIHJlc3RyaWN0aW9ucyBkZWZpbmVkIGluIE5hdmlnYXRpb25SZXN0cmljdGlvbnMgZm9yIHRoaXMgZW50aXR5LiBJbiBvcmRlciB0b1xuXHQvLyBiZSBkZWxldGFibGUsIHRoZSBpdGVtIG11c3QgYWxzbyBiZSBhbGxvd2VkIHRvIGJlIGRlbGV0YWJsZSBhY2NvcmRpbmcgdG8gdGhlIERlbGV0ZSBSZXN0cmljdGlvbnNcblx0Ly8gb24gdGhlIGVudGl0eSBpdHNlbGYuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0b3IoXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZGVsZXRhYmxlQ29udGV4dHMsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKHVuU2F2ZWRDb250ZXh0cywgdHJ1ZSksIDApXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChcblx0cGFzdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBzZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9wYXN0ZUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL3Bhc3RlRW5hYmxlbWVudFwiO1xuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdHBhc3RlVmlzaWJpbGl0eSxcblx0XHRcdG9yKFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0bGVzc09yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHNlbGVjdGVkQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpKSwgMSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKHBhc3RlRW5hYmxlbWVudFBhdGgsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKHVwZGF0ZU9uTmF2aWdhdGlvbiwgcGFzdGVWaXNpYmlsaXR5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID1cblx0XHQhaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCB1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcInVwZGF0YWJsZUNvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3VwZGF0YWJsZUNvbnRleHRzXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpO1xuXHRjb25zdCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSksIDEpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgYkRpc3BsYXlNb2RlID0gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGJpbmRpbmcgaW4gY2FzZVxuXHQvLyAxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5IChpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IGlzIHRydWUpLlxuXHQvLyAyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkKGxpa2UgTFIpLCBpbiB0aGlzIGNhc2Ugb25seSBhY3RpdmUgY29udGV4dHMgY2FuIGJlIG1hc3MgZWRpdGVkLlxuXHQvLyAgICBTbywgdXBkYXRlIGRlcGVuZHMgb24gJ0lzQWN0aXZlRW50aXR5JyB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkIHJ1bnRpbWUuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gaWZFbHNlKFxuXHRcdG9yKGFuZChiRGlzcGxheU1vZGUsIGJJc0RyYWZ0U3VwcG9ydGVkKSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cylcblx0KTtcblxuXHRyZXR1cm4gYW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgaWZFbHNlKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHksIHJ1bnRpbWVCaW5kaW5nLCBhbmQocnVudGltZUJpbmRpbmcsIHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3V0RW5hYmxlbWVudChcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3V0YWJsZUNvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBwYXRoSW5Nb2RlbChjdXRhYmxlQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpO1xuXHRyZXR1cm4gYW5kKFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdHJ1bnRpbWVCaW5kaW5nXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvcHlWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5RW5hYmxlbWVudChcblx0Y29weVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvcHlhYmxlQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gcGF0aEluTW9kZWwoY29weWFibGVDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIik7XG5cdHJldHVybiBhbmQoY29weVZpc2liaWxpdHksIHJ1bnRpbWVCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBtb3ZlVXBEb3duVmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JVcFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldE1vdmVVcERvd25FbmFibGVtZW50KFxuXHRtb3ZlVXBEb3duVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhbixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVVcFwiIDogXCJjb250ZXh0bWVudS9zaW5nbGVDb250ZXh0TW92YWJsZVVwXCI7XG5cdGNvbnN0IHNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duXCIgOiBcImNvbnRleHRtZW51L3NpbmdsZUNvbnRleHRNb3ZhYmxlRG93blwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IGZvclVwXG5cdFx0PyBlcXVhbChwYXRoSW5Nb2RlbChzaW5nbGVDb250ZXh0TW92YWJsZVVwLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdDogZXF1YWwocGF0aEluTW9kZWwoc2luZ2xlQ29udGV4dE1vdmFibGVEb3duLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0cmV0dXJuIGFuZChcblx0XHRtb3ZlVXBEb3duVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBUZWxscyBpZiB0aGUgdGFibGUgaW4gdGVtcGxhdGUgaXMgaW4gZGlzcGxheSBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YWJsZSBpcyBpbiBkaXNwbGF5IG1vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uID0gZmFsc2UpOiBib29sZWFuIHtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzSW5saW5lRWRpdCgpKSB7XG5cdFx0Ly9pZiB0aGVyZSBpcyBpbmxpbmUgZWRpdCBpbiB0aGUgcGFnZSB3ZSBjYW5ub3QgZm9yY2UgdGhlIHRhYmxlIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIHRlbXBsYXRlIHR5cGVcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQoY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ0E7RUF3Q08sTUFBTUEsa0JBQWtCLEdBQUc7SUFDakNDLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUJDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUNDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFFBQVEsRUFBRTtFQUNYLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQUMsUUFBQSxDQUFBWCxrQkFBQSxHQUFBQSxrQkFBQTtFQU9PLFNBQVNZLDhCQUE4QkEsQ0FDN0NDLGdCQUF5RCxFQUN6REMsWUFBMEIsRUFDMUJDLDBCQUFxRCxFQUM1QjtJQUN6QixPQUFPO01BQ05DLGNBQWMsRUFBRUMsbUJBQW1CLENBQUNKLGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7TUFDOUVDLGdCQUFnQixFQUFFO1FBQ2pCQyxNQUFNLEVBQUVDLHVCQUF1QixDQUFDUixnQkFBZ0IsRUFBRSxjQUFjLENBQUM7UUFDakVTLE1BQU0sRUFBRUQsdUJBQXVCLENBQUNSLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztRQUNqRVUsTUFBTSxFQUFFRix1QkFBdUIsQ0FBQ1IsZ0JBQWdCLEVBQUUsY0FBYztNQUNqRSxDQUFDO01BQ0RDLFlBQVksRUFBRUEsWUFBWTtNQUMxQlUsd0JBQXdCLEVBQUVBLHdCQUF3QixDQUFDWCxnQkFBZ0IsQ0FBQztNQUNwRVksU0FBUyxFQUFFQyxZQUFZLENBQUNiLGdCQUFnQixDQUFDO01BQ3pDRSwwQkFBMEIsRUFBRUEsMEJBQTBCO01BQ3REWSxZQUFZLEVBQUVDLGVBQWUsQ0FBQ2YsZ0JBQWdCO0lBQy9DLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFGLFFBQUEsQ0FBQUMsOEJBQUEsR0FBQUEsOEJBQUE7RUFLTyxTQUFTWSx3QkFBd0JBLENBQUNYLGdCQUF5RCxFQUFXO0lBQzVHLE1BQU1nQixtQkFBbUIsR0FBR2hCLGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JFLE1BQU1ZLGlCQUFpQixHQUFHQyxXQUFXLENBQUNDLDBCQUEwQixDQUFDSCxtQkFBbUIsQ0FBQztJQUNyRixNQUFNSSx5QkFBeUIsR0FBSUosbUJBQW1CLENBQUNLLGlCQUFpQixFQUFnQkMsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLHNCQUFzQixHQUNqSSxJQUFJLEdBQ0osS0FBSztJQUVSLE9BQU9QLGlCQUFpQixJQUFJRyx5QkFBeUI7RUFDdEQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBdEIsUUFBQSxDQUFBYSx3QkFBQSxHQUFBQSx3QkFBQTtFQUtPLFNBQVNFLFlBQVlBLENBQzNCYixnQkFBeUQsRUFDb0I7SUFDN0UsTUFBTXlCLGdCQUFnQixHQUFHekIsZ0JBQWdCLENBQUMwQixZQUFZLENBQUMsQ0FBQztJQUN4RCxNQUFNZCxTQUFTLEdBQUdlLFdBQVcsQ0FBQ0YsZ0JBQWdCLENBQUMsR0FDNUNBLGdCQUFnQixDQUFDSCxXQUFXLENBQUNNLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxTQUFTLElBQ3pETCxnQkFBZ0IsQ0FBQ0gsV0FBVyxDQUFDQyxPQUFPLEVBQUVDLHNCQUFzQixFQUFFTSxTQUFTLEdBQ3ZFQyxTQUFTO0lBQ1osTUFBTUMsYUFBK0MsR0FBR3BCLFNBQVMsRUFBRXFCLFFBQVEsQ0FBQyxDQUFDO0lBQzdFLElBQUlELGFBQWEsRUFBRTtNQUNsQixNQUFNRSxpQkFBaUIsR0FBR2xDLGdCQUFnQixFQUFFbUMsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDSixhQUFhLENBQUMsRUFBRVYsV0FBVyxFQUFFZSxJQUFJLEVBQUVDLGtCQUFrQjtNQUN6SCxPQUFPO1FBQ05DLElBQUksRUFBRVAsYUFBYTtRQUNuQlEsU0FBUyxFQUFFQywyQkFBMkIsQ0FBVVAsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLElBQUk7TUFDNUUsQ0FBQztJQUNGO0lBQ0EsT0FBT0gsU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BakMsUUFBQSxDQUFBZSxZQUFBLEdBQUFBLFlBQUE7RUFPTyxTQUFTTCx1QkFBdUJBLENBQ3RDUixnQkFBeUQsRUFDekQwQyxlQUFpRSxFQUU3QjtJQUFBLElBRHBDQyxtQkFBbUIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWIsU0FBQSxHQUFBYSxTQUFBLE1BQUcsSUFBSTtJQUUxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBLE1BQU1uQixnQkFBZ0IsR0FBR3pCLGdCQUFnQixDQUFDMEIsWUFBWSxDQUFDLENBQUM7SUFDeEQsTUFBTW9CLHFCQUFxQixHQUN6QixDQUFDQyxXQUFXLENBQUN0QixnQkFBZ0IsQ0FBQyxJQUFJQSxnQkFBZ0IsRUFBRUgsV0FBVyxDQUFDMEIsRUFBRSxHQUFHTixlQUFlLENBQUMsSUFDdEYxQyxnQkFBZ0IsQ0FBQ21DLGFBQWEsQ0FBQyxDQUFDLENBQUNiLFdBQVcsQ0FBQzBCLEVBQUUsR0FBR04sZUFBZSxDQUFDO0lBRW5FLElBQUksQ0FBQ0kscUJBQXFCLEVBQUU7TUFDM0IsT0FBT0csUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN2QjtJQUVBLE1BQU1qQyxtQkFBbUIsR0FBR2hCLGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JFLE1BQU02QyxzQkFBc0IsR0FBR0MsZ0JBQWdCLENBQUNuQyxtQkFBbUIsQ0FBQztJQUNwRSxPQUFPeUIsMkJBQTJCLENBQUNLLHFCQUFxQixFQUFFSSxzQkFBc0IsRUFBRW5CLFNBQVMsRUFBR3FCLElBQVksSUFDekdDLG9CQUFvQixDQUFDRCxJQUFJLEVBQUVwRCxnQkFBZ0IsQ0FBQ3NELGlCQUFpQixDQUFDLENBQUMsRUFBRUosc0JBQXNCLENBQ3hGLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFwRCxRQUFBLENBQUFVLHVCQUFBLEdBQUFBLHVCQUFBO0VBS08sU0FBU08sZUFBZUEsQ0FBQ2YsZ0JBQXlELEVBQW1DO0lBQzNILE1BQU1nQixtQkFBbUIsR0FBR2hCLGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JFLE1BQU1rRCxlQUFlLEdBQUcsQ0FDdkI7TUFDQ0MsR0FBRyxFQUFFLGNBQWM7TUFDbkJDLFFBQVEsRUFBRUM7SUFDWCxDQUFDLEVBQ0Q7TUFDQ0YsR0FBRyxFQUFFLGFBQWE7TUFDbEJDLFFBQVEsRUFBRUU7SUFDWCxDQUFDLEVBQ0Q7TUFDQ0gsR0FBRyxFQUFFLGFBQWE7TUFDbEJDLFFBQVEsRUFBRUc7SUFDWCxDQUFDLENBQ0Q7SUFDRCxNQUFNQyxNQUFrRCxHQUFHLENBQUMsQ0FBQztJQUM3RE4sZUFBZSxDQUFDTyxPQUFPLENBQUMsVUFBVUMsR0FBRyxFQUFFO01BQ3RDLE1BQU1DLFdBQVcsR0FBR0QsR0FBRyxDQUFDLFVBQVUsQ0FBQztNQUNuQ0YsTUFBTSxDQUFDRSxHQUFHLENBQUNQLEdBQUcsQ0FBQyxHQUFHO1FBQ2pCUyxVQUFVLEVBQUVELFdBQVcsQ0FBQ0UsS0FBSyxDQUFDLElBQUksRUFBRSxDQUNuQ2xELG1CQUFtQixFQUNuQjtVQUNDbUQsV0FBVyxFQUFFQSxDQUFDZixJQUFZLEVBQUVnQixlQUF5QixLQUNwRGYsb0JBQW9CLENBQUNELElBQUksRUFBRXBELGdCQUFnQixDQUFDc0QsaUJBQWlCLENBQUMsQ0FBQyxFQUFFYyxlQUFlO1FBQ2xGLENBQUMsQ0FDRCxDQUFDO1FBQ0ZDLG9CQUFvQixFQUFFTCxXQUFXLENBQUNFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDN0NsRCxtQkFBbUIsRUFDbkI7VUFDQ3NELHNCQUFzQixFQUFFLElBQUk7VUFDNUJDLHFCQUFxQixFQUFFLElBQUk7VUFDM0JKLFdBQVcsRUFBRUEsQ0FBQ2YsSUFBWSxFQUFFZ0IsZUFBeUIsS0FDcERmLG9CQUFvQixDQUFDRCxJQUFJLEVBQUVwRCxnQkFBZ0IsQ0FBQ3NELGlCQUFpQixDQUFDLENBQUMsRUFBRWMsZUFBZTtRQUNsRixDQUFDLENBQ0Q7TUFDRixDQUFDO0lBQ0YsQ0FBQyxDQUFDO0lBQ0YsT0FBT1AsTUFBTTtFQUNkOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBL0QsUUFBQSxDQUFBaUIsZUFBQSxHQUFBQSxlQUFBO0VBTU8sU0FBU3lELGdDQUFnQ0EsQ0FBQ0Msc0JBQThDLEVBQUVDLGVBQXdCLEVBQVc7SUFDbkksT0FBT0EsZUFBZSxJQUFJRCxzQkFBc0IsQ0FBQ3hFLFlBQVksS0FBSzBFLFlBQVksQ0FBQ0MsUUFBUTtFQUN4Rjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTlFLFFBQUEsQ0FBQTBFLGdDQUFBLEdBQUFBLGdDQUFBO0VBTU8sU0FBU0ssdUJBQXVCQSxDQUN0QzdFLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM3QjtJQUNqQixNQUFNSyxnQkFBZ0IsR0FBR0MsbUJBQW1CLENBQUMvRSxnQkFBZ0IsRUFBRXlFLHNCQUFzQixDQUFDO0lBQ3RGLE9BQU87TUFDTk8sV0FBVyxFQUFFQyxpQkFBaUIsQ0FBQ0MsbUJBQW1CLENBQUNULHNCQUFzQixFQUFFSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzdGSyxPQUFPLEVBQUVGLGlCQUFpQixDQUFDSCxnQkFBZ0IsQ0FBQztNQUM1Q00saUJBQWlCLEVBQUVOLGdCQUFnQjtNQUNuQ08sT0FBTyxFQUFFSixpQkFBaUIsQ0FBQ0ssbUJBQW1CLENBQUN0RixnQkFBZ0IsRUFBRXlFLHNCQUFzQixFQUFFSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzNHUyxxQkFBcUIsRUFBRU4saUJBQWlCLENBQUNLLG1CQUFtQixDQUFDdEYsZ0JBQWdCLEVBQUV5RSxzQkFBc0IsRUFBRUssZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDL0h0QixHQUFHLEVBQUVyRSxrQkFBa0IsQ0FBQ0csTUFBTTtNQUM5QmtHLElBQUksRUFBRUMsVUFBVSxDQUFDQztJQUNsQixDQUFDO0VBQ0Y7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTVGLFFBQUEsQ0FBQStFLHVCQUFBLEdBQUFBLHVCQUFBO0VBTU8sU0FBU2Msb0JBQW9CQSxDQUNuQzNGLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM3QjtJQUNqQixNQUFNbUIsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQzdGLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUM7SUFDaEYsT0FBTztNQUNOTyxXQUFXLEVBQUVDLGlCQUFpQixDQUFDYSxvQkFBb0IsQ0FBQ0YsYUFBYSxDQUFDLENBQUM7TUFDbkVULE9BQU8sRUFBRUYsaUJBQWlCLENBQUNXLGFBQWEsQ0FBQztNQUN6Q1AsT0FBTyxFQUFFSixpQkFBaUIsQ0FBQ2MsZ0JBQWdCLENBQUNILGFBQWEsRUFBRW5CLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO01BQzFGYyxxQkFBcUIsRUFBRU4saUJBQWlCLENBQUNjLGdCQUFnQixDQUFDSCxhQUFhLEVBQUVuQixzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2R2pCLEdBQUcsRUFBRXJFLGtCQUFrQixDQUFDQyxHQUFHO01BQzNCb0csSUFBSSxFQUFFQyxVQUFVLENBQUNDO0lBQ2xCLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTVGLFFBQUEsQ0FBQTZGLG9CQUFBLEdBQUFBLG9CQUFBO0VBTU8sU0FBU0sscUJBQXFCQSxDQUNwQ2hHLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM3QjtJQUNqQixNQUFNd0IsY0FBYyxHQUFHQyxpQkFBaUIsQ0FBQ2xHLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUM7SUFDbEYsT0FBTztNQUNOTyxXQUFXLEVBQUVDLGlCQUFpQixDQUFDYSxvQkFBb0IsQ0FBQ0csY0FBYyxDQUFDLENBQUM7TUFDcEVkLE9BQU8sRUFBRUYsaUJBQWlCLENBQUNnQixjQUFjLENBQUM7TUFDMUNaLE9BQU8sRUFBRUosaUJBQWlCLENBQUNrQixpQkFBaUIsQ0FBQ0YsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO01BQ3BFVixxQkFBcUIsRUFBRU4saUJBQWlCLENBQUNrQixpQkFBaUIsQ0FBQ0YsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2pGekMsR0FBRyxFQUFFckUsa0JBQWtCLENBQUNFLElBQUk7TUFDNUJtRyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ0M7SUFDbEIsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkE1RixRQUFBLENBQUFrRyxxQkFBQSxHQUFBQSxxQkFBQTtFQU9PLFNBQVNJLDJCQUEyQkEsQ0FDMUNwRyxnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDOUM0QixLQUFjLEVBQ0c7SUFDakIsTUFBTUMsZ0JBQWdCLEdBQ3JCdEcsZ0JBQWdCLENBQUNtQyxhQUFhLENBQUMsQ0FBQyxDQUFDYixXQUFXLENBQUNpRixTQUFTLEdBQ3JELDZCQUE2QjlCLHNCQUFzQixDQUFDdkUsMEJBQTBCLENBQUNzRyxrQkFBa0IsSUFBSSxFQUFFLEVBQUUsQ0FDekcsRUFBRUMsdUJBQXVCLEtBQUsxRSxTQUFTO0lBQ3pDLE1BQU0yRSxjQUFjLEdBQUdDLEdBQUcsQ0FBQ2QsZ0JBQWdCLENBQUM3RixnQkFBZ0IsRUFBRXlFLHNCQUFzQixDQUFDLEVBQUU2QixnQkFBZ0IsQ0FBQztJQUN4RyxPQUFPO01BQ050QixXQUFXLEVBQUVDLGlCQUFpQixDQUFDYSxvQkFBb0IsQ0FBQ1ksY0FBYyxDQUFDLENBQUM7TUFDcEV2QixPQUFPLEVBQUVGLGlCQUFpQixDQUFDeUIsY0FBYyxDQUFDO01BQzFDckIsT0FBTyxFQUFFSixpQkFBaUIsQ0FBQzJCLHVCQUF1QixDQUFDRixjQUFjLEVBQUVqQyxzQkFBc0IsRUFBRTRCLEtBQUssQ0FBQyxDQUFDO01BQ2xHZCxxQkFBcUIsRUFBRU4saUJBQWlCLENBQUMyQix1QkFBdUIsQ0FBQ0YsY0FBYyxFQUFFakMsc0JBQXNCLEVBQUU0QixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDdEg3QyxHQUFHLEVBQUU2QyxLQUFLLEdBQUdsSCxrQkFBa0IsQ0FBQ1MsTUFBTSxHQUFHVCxrQkFBa0IsQ0FBQ1UsUUFBUTtNQUNwRTJGLElBQUksRUFBRUMsVUFBVSxDQUFDQztJQUNsQixDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE1RixRQUFBLENBQUFzRywyQkFBQSxHQUFBQSwyQkFBQTtFQU1PLFNBQVNTLHVCQUF1QkEsQ0FDdEM3RyxnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDN0I7SUFDakIsTUFBTXFDLGdCQUFnQixHQUFHQyxtQkFBbUIsQ0FBQy9HLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUM7SUFFdEYsT0FBTztNQUNOTyxXQUFXLEVBQUVDLGlCQUFpQixDQUFDYSxvQkFBb0IsQ0FBQ2dCLGdCQUFnQixDQUFDLENBQUM7TUFDdEUzQixPQUFPLEVBQUVGLGlCQUFpQixDQUFDNkIsZ0JBQWdCLENBQUM7TUFDNUN6QixPQUFPLEVBQUVKLGlCQUFpQixDQUFDK0IsbUJBQW1CLENBQUNoSCxnQkFBZ0IsRUFBRXlFLHNCQUFzQixFQUFFcUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbEh2QixxQkFBcUIsRUFBRU4saUJBQWlCLENBQUMrQixtQkFBbUIsQ0FBQ2hILGdCQUFnQixFQUFFeUUsc0JBQXNCLEVBQUVxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUMvSHRELEdBQUcsRUFBRXJFLGtCQUFrQixDQUFDSSxNQUFNO01BQzlCaUcsSUFBSSxFQUFFQyxVQUFVLENBQUNDO0lBQ2xCLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEE1RixRQUFBLENBQUErRyx1QkFBQSxHQUFBQSx1QkFBQTtFQVFPLFNBQVNJLGNBQWNBLENBQzdCakgsZ0JBQXlELEVBQ3pEeUUsc0JBQThDLEVBQzdCO0lBQ2pCLE1BQU15QyxxQkFBcUIsR0FBR25DLG1CQUFtQixDQUFDL0UsZ0JBQWdCLEVBQUV5RSxzQkFBc0IsRUFBRSxJQUFJLENBQUM7SUFFakcsT0FBTztNQUNOTyxXQUFXLEVBQUVDLGlCQUFpQixDQUFDQyxtQkFBbUIsQ0FBQ1Qsc0JBQXNCLEVBQUV5QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN4Ry9CLE9BQU8sRUFBRUYsaUJBQWlCLENBQUNpQyxxQkFBcUIsQ0FBQztNQUNqRDdCLE9BQU8sRUFBRUosaUJBQWlCLENBQUNrQyx3QkFBd0IsQ0FBQ25ILGdCQUFnQixFQUFFeUUsc0JBQXNCLEVBQUV5QyxxQkFBcUIsQ0FBQyxDQUFDO01BQ3JIMUQsR0FBRyxFQUFFckUsa0JBQWtCLENBQUNLLFdBQVc7TUFDbkNnRyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ0M7SUFDbEIsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBNUYsUUFBQSxDQUFBbUgsY0FBQSxHQUFBQSxjQUFBO0VBTU8sU0FBU3BCLGdCQUFnQkEsQ0FDL0I3RixnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDVjtJQUNwQyxNQUFNMkMsdUJBQXVCLEdBQUczQyxzQkFBc0IsQ0FBQzNELFlBQVksRUFBRXVHLFdBQVcsRUFBRXBELFVBQVU7SUFDNUYsTUFBTXFELHlCQUF5QixHQUM5QnRILGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDQyxVQUFVLEdBQzNEekUsRUFBRSxDQUFDMEUsVUFBVSxHQUNaMUgsZ0JBQWdCLENBQUMwQixZQUFZLENBQUMsQ0FBQyxFQUFnQkosV0FBVyxDQUFDTSxNQUFNLEVBQUVDLFNBQVMsS0FBS0UsU0FBUyxDQUFDLENBQUM7SUFDakcsT0FBTzRGLE1BQU0sQ0FDWkMsS0FBSyxDQUFDbkQsc0JBQXNCLENBQUN2RSwwQkFBMEIsRUFBRXNGLElBQUksRUFBRSxXQUFXLENBQUMsRUFDM0VtQixHQUFHLENBQ0ZsQyxzQkFBc0IsQ0FBQ3ZFLDBCQUEwQixDQUFDMkgsOEJBQThCLEVBQ2hGQyxHQUFHLENBQUNuQixHQUFHLENBQUNvQixVQUFVLENBQUNYLHVCQUF1QixDQUFDLEVBQUVRLEtBQUssQ0FBQ1IsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNwRkUseUJBQ0QsQ0FBQyxFQUNELEtBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBeEgsUUFBQSxDQUFBK0YsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFNTyxTQUFTSyxpQkFBaUJBLENBQ2hDbEcsZ0JBQXlELEVBQ3pEeUUsc0JBQThDLEVBQ1Y7SUFDcEMsTUFBTXVELG1CQUFtQixHQUFHaEksZ0JBQWdCLEVBQUVtQyxhQUFhLENBQUMsQ0FBQyxDQUFDYixXQUFXLENBQUNpRixTQUFTLEdBQ2xGLDZCQUE2QjlCLHNCQUFzQixDQUFDdkUsMEJBQTBCLENBQUNzRyxrQkFBa0IsSUFBSSxFQUFFLEVBQUUsQ0FDekcsRUFBRXlCLFVBQWdDO0lBRW5DLElBQUksQ0FBQ0QsbUJBQW1CLEVBQUU7TUFDekIsT0FBTy9FLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDdkI7SUFFQSxNQUFNcUUseUJBQXlCLEdBQzlCdEgsZ0JBQWdCLENBQUN1SCxlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNDLFVBQVUsR0FDM0R6RSxFQUFFLENBQUMwRSxVQUFVLEdBQ1oxSCxnQkFBZ0IsQ0FBQzBCLFlBQVksQ0FBQyxDQUFDLEVBQWdCSixXQUFXLENBQUNNLE1BQU0sRUFBRUMsU0FBUyxLQUFLRSxTQUFTLENBQUMsQ0FBQztJQUNqRyxPQUFPNEYsTUFBTSxDQUFDQyxLQUFLLENBQUNuRCxzQkFBc0IsQ0FBQ3ZFLDBCQUEwQixFQUFFc0YsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFOEIseUJBQXlCLEVBQUUsS0FBSyxDQUFDO0VBQzdIOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBeEgsUUFBQSxDQUFBb0csaUJBQUEsR0FBQUEsaUJBQUE7RUFTTyxTQUFTZ0Msc0JBQXNCQSxDQUNyQ2xJLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM5QzBELDhCQUF1QyxFQUN0QjtJQUNqQixNQUFNdkMsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQzdGLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUM7SUFDaEYsTUFBTXdCLGNBQWMsR0FBR0MsaUJBQWlCLENBQUNsRyxnQkFBZ0IsRUFBRXlFLHNCQUFzQixDQUFDO0lBQ2xGLE1BQU1LLGdCQUFnQixHQUFHQyxtQkFBbUIsQ0FBQy9FLGdCQUFnQixFQUFFeUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztJQUNuRyxNQUFNMkQsZUFBZSxHQUFHQyxrQkFBa0IsQ0FDekNySSxnQkFBZ0IsRUFDaEJ5RSxzQkFBc0IsRUFDdEJLLGdCQUFnQixFQUNoQmMsYUFBYSxFQUNiSyxjQUFjLEVBQ2RrQyw4QkFDRCxDQUFDO0lBQ0QsTUFBTUcsZUFBZSxHQUFHQyxrQkFBa0IsQ0FBQ0gsZUFBZSxFQUFFM0Qsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO0lBQzFGLE1BQU0rRCw2QkFBNkIsR0FBR0Qsa0JBQWtCLENBQUNILGVBQWUsRUFBRTNELHNCQUFzQixFQUFFLElBQUksQ0FBQztJQUN2RyxPQUFPO01BQ05VLE9BQU8sRUFBRUYsaUJBQWlCLENBQUNtRCxlQUFlLENBQUM7TUFDM0MvQyxPQUFPLEVBQUVKLGlCQUFpQixDQUFDcUQsZUFBZSxDQUFDO01BQzNDL0MscUJBQXFCLEVBQUVOLGlCQUFpQixDQUFDdUQsNkJBQTZCLENBQUM7TUFDdkVoRixHQUFHLEVBQUVyRSxrQkFBa0IsQ0FBQ00sS0FBSztNQUM3QitGLElBQUksRUFBRUMsVUFBVSxDQUFDQztJQUNsQixDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE1RixRQUFBLENBQUFvSSxzQkFBQSxHQUFBQSxzQkFBQTtFQU1PLFNBQVNPLHlCQUF5QkEsQ0FDeEN6SSxnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDN0I7SUFDakIsTUFBTWlFLGtCQUFrQixHQUFHQyxxQkFBcUIsQ0FBQzNJLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUM7SUFFMUYsT0FBTztNQUNOTyxXQUFXLEVBQUVDLGlCQUFpQixDQUFDYSxvQkFBb0IsQ0FBQzRDLGtCQUFrQixDQUFDLENBQUM7TUFDeEV2RCxPQUFPLEVBQUVGLGlCQUFpQixDQUFDeUQsa0JBQWtCLENBQUM7TUFDOUM7TUFDQTtNQUNBO01BQ0FFLHFCQUFxQixFQUFFM0QsaUJBQWlCLENBQ3ZDMEIsR0FBRyxDQUFDK0Isa0JBQWtCLEVBQUVkLEtBQUssQ0FBQ2lCLFdBQVcsQ0FBQyw2QkFBNkIsRUFBRSxVQUFVLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FDN0YsQ0FBQztNQUNEeEQsT0FBTyxFQUFFSixpQkFBaUIsQ0FBQzZELHFCQUFxQixDQUFDOUksZ0JBQWdCLEVBQUV5RSxzQkFBc0IsRUFBRWlFLGtCQUFrQixDQUFDLENBQUM7TUFDL0duRCxxQkFBcUIsRUFBRU4saUJBQWlCLENBQUM2RCxxQkFBcUIsQ0FBQzlJLGdCQUFnQixFQUFFeUUsc0JBQXNCLEVBQUVpRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNuSWxGLEdBQUcsRUFBRXJFLGtCQUFrQixDQUFDTyxRQUFRO01BQ2hDOEYsSUFBSSxFQUFFQyxVQUFVLENBQUNDO0lBQ2xCLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BNUYsUUFBQSxDQUFBMkkseUJBQUEsR0FBQUEseUJBQUE7RUFPTyxTQUFTTSx5QkFBeUJBLENBQ3hDL0ksZ0JBQXlELEVBQ3pEeUUsc0JBQThDLEVBQzlDdUUsaUJBQXlCLEVBQ1I7SUFDakIsTUFBTUMsa0JBQWtCLEdBQUdDLHFCQUFxQixDQUFDLE9BQU8sRUFBRWxKLGdCQUFnQixFQUFFZ0osaUJBQWlCLEVBQUV2RSxzQkFBc0IsQ0FBQztJQUN0SCxNQUFNMEUsa0JBQWtCLEdBQUd4QyxHQUFHLENBQUNzQyxrQkFBa0IsRUFBRUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE9BQU87TUFDTnBFLFdBQVcsRUFBRUMsaUJBQWlCLENBQUNhLG9CQUFvQixDQUFDbUQsa0JBQWtCLENBQUMsQ0FBQztNQUN4RTlELE9BQU8sRUFBRUYsaUJBQWlCLENBQUNnRSxrQkFBa0IsQ0FBQztNQUM5QzVELE9BQU8sRUFBRUosaUJBQWlCLENBQUNrRSxrQkFBa0IsQ0FBQztNQUM5QzNGLEdBQUcsRUFBRXJFLGtCQUFrQixDQUFDUSxRQUFRO01BQ2hDNkYsSUFBSSxFQUFFQyxVQUFVLENBQUNDO0lBQ2xCLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BNUYsUUFBQSxDQUFBaUoseUJBQUEsR0FBQUEseUJBQUE7RUFPTyxTQUFTN0QsbUJBQW1CQSxDQUNsQ1Qsc0JBQThDLEVBQzlDSyxnQkFBbUQsRUFFZjtJQUFBLElBRHBDdUUsZ0JBQWdCLEdBQUF6RyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBYixTQUFBLEdBQUFhLFNBQUEsTUFBRyxLQUFLO0lBRXhCO0lBQ0E7SUFDQTtJQUNBOztJQUVBLE9BQU8rRCxHQUFHO0lBQ1Q7SUFDQTJDLEVBQUUsQ0FDRDNDLEdBQUcsQ0FBQzBDLGdCQUFnQixFQUFFNUUsc0JBQXNCLENBQUN4RSxZQUFZLEtBQUswRSxZQUFZLENBQUNuRixXQUFXLENBQUMsRUFDdkZtSCxHQUFHLENBQUMsQ0FBQzBDLGdCQUFnQixFQUFFNUUsc0JBQXNCLENBQUN4RSxZQUFZLEtBQUswRSxZQUFZLENBQUNuRixXQUFXLENBQ3hGLENBQUMsRUFDRDhKLEVBQUUsQ0FBQ3hCLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDakQsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFQSxnQkFBZ0IsQ0FDdkQsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQWhGLFFBQUEsQ0FBQW9GLG1CQUFBLEdBQUFBLG1CQUFBO0VBS08sU0FBU1ksb0JBQW9CQSxDQUFDeUQsZ0JBQW1ELEVBQXFDO0lBQzVILE9BQU9ELEVBQUUsQ0FBQ3hCLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDd0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFQSxnQkFBZ0IsQ0FBQztFQUMvRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQXpKLFFBQUEsQ0FBQWdHLG9CQUFBLEdBQUFBLG9CQUFBO0VBTUEsU0FBUzBELGlDQUFpQ0EsQ0FDekN4SixnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDcEM7SUFDVjtJQUNBLE9BQ0N6RSxnQkFBZ0IsQ0FBQ3VILGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ0MsVUFBVSxJQUM5RGhELHNCQUFzQixDQUFDdkUsMEJBQTBCLEVBQUVzRixJQUFJLEtBQUssaUJBQWlCO0VBRS9FOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTVCxtQkFBbUJBLENBQ2xDL0UsZ0JBQXlELEVBQ3pEeUUsc0JBQThDLEVBR1Y7SUFBQSxJQUZwQzRFLGdCQUFnQixHQUFBekcsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWIsU0FBQSxHQUFBYSxTQUFBLE1BQUcsS0FBSztJQUFBLElBQ3hCNkcsVUFBVSxHQUFBN0csU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWIsU0FBQSxHQUFBYSxTQUFBLE1BQUcsS0FBSztJQUVsQixNQUFNOEcsWUFBWSxHQUFHakYsc0JBQXNCLENBQUMzRCxZQUFZLENBQUM0SSxZQUFZLENBQUN6RixVQUFVO0lBQ2hGLE1BQU0wRixjQUFjLEdBQ25CSCxpQ0FBaUMsQ0FBQ3hKLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUMsS0FDMUU0RSxnQkFBZ0IsR0FDZDdJLHVCQUF1QixDQUFDUixnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQ2hFeUUsc0JBQXNCLENBQUNuRSxnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDO0lBQ25ELE1BQU1LLFNBQVMsR0FBRzZELHNCQUFzQixDQUFDN0QsU0FBUztJQUNsRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsT0FBTytHLE1BQU0sQ0FDWmxELHNCQUFzQixDQUFDeEUsWUFBWSxLQUFLMEUsWUFBWSxDQUFDQyxRQUFRLEVBQzdEK0IsR0FBRyxDQUFDbUIsR0FBRyxDQUFDNkIsY0FBYyxDQUFDLEVBQUVMLEVBQUUsQ0FBQ3RKLGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDQyxVQUFVLEVBQUV6RSxFQUFFLENBQUMwRSxVQUFVLENBQUMsQ0FBQyxFQUMzR0MsTUFBTSxDQUNMMkIsRUFBRSxDQUNEM0MsR0FBRyxDQUFDb0IsVUFBVSxDQUFDbkgsU0FBUyxFQUFFNEIsU0FBUyxDQUFDLEVBQUVvRixLQUFLLENBQUNoSCxTQUFTLEVBQUU0QixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDekVtRSxHQUFHLENBQUNvQixVQUFVLENBQUMyQixZQUFZLENBQUMsRUFBRTlCLEtBQUssQ0FBQzhCLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDOUksU0FBUyxDQUFDLEVBQ3JFK0YsR0FBRyxDQUFDb0IsVUFBVSxDQUFDNEIsY0FBYyxDQUFDLEVBQUUvQixLQUFLLENBQUMrQixjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDNURoRCxHQUFHLENBQ0ZsQyxzQkFBc0IsQ0FBQ3hFLFlBQVksS0FBSzBFLFlBQVksQ0FBQ2lGLGtCQUFrQixFQUN2RW5GLHNCQUFzQixDQUFDdkUsMEJBQTBCLEVBQUVzRixJQUFJLEtBQUssaUJBQWlCLEVBQzdFbUMsTUFBTSxDQUNMaEIsR0FBRyxDQUNGbEMsc0JBQXNCLEVBQUV2RSwwQkFBMEIsRUFBRTJKLGtDQUFrQyxLQUFLLEtBQUssRUFDaEcvQixHQUFHLENBQUMyQixVQUFVLENBQ2YsQ0FBQyxFQUNELElBQUksRUFDSnpHLEVBQUUsQ0FBQzhHLFlBQ0osQ0FDRCxDQUNELENBQUMsRUFDRCxLQUFLLEVBQ0xuQyxNQUFNLENBQ0wzSCxnQkFBZ0IsQ0FBQ3VILGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ0MsVUFBVSxFQUM5RDZCLEVBQUUsQ0FBQ3hCLEdBQUcsQ0FBQ2lDLHVCQUF1QixDQUFDSixjQUFjLENBQUMsQ0FBQyxFQUFFN0IsR0FBRyxDQUFDNkIsY0FBYyxDQUFDLENBQUMsRUFDckVoRCxHQUFHLENBQUNtQixHQUFHLENBQUM2QixjQUFjLENBQUMsRUFBRTNHLEVBQUUsQ0FBQzBFLFVBQVUsQ0FDdkMsQ0FDRCxDQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTVILFFBQUEsQ0FBQWlGLG1CQUFBLEdBQUFBLG1CQUFBO0VBTU8sU0FBU2dDLG1CQUFtQkEsQ0FDbEMvRyxnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDVjtJQUNwQyxJQUFJdUYsY0FBYyxHQUFHdkYsc0JBQXNCLENBQUNuRSxnQkFBZ0IsQ0FBQ0csTUFBTTtJQUNuRSxJQUFJd0osdUJBQXVCLEdBQUd4RixzQkFBc0IsQ0FBQzNELFlBQVksQ0FBQ29KLFdBQVcsQ0FBQ2pHLFVBQVU7SUFDeEY7SUFDQSxJQUFJLENBQUNrRyxnQ0FBZ0MsQ0FBQ0gsY0FBYyxDQUFDLEVBQUU7TUFDdERBLGNBQWMsR0FBRy9HLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDakM7SUFDQSxJQUFJLENBQUNrSCxnQ0FBZ0MsQ0FBQ0YsdUJBQXVCLENBQUMsRUFBRTtNQUMvREEsdUJBQXVCLEdBQUdoSCxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3pDO0lBQ0EsT0FBTzBFLE1BQU0sQ0FDWjNILGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDNEMsa0JBQWtCLElBQ3JFWixpQ0FBaUMsQ0FBQ3hKLGdCQUFnQixFQUFFeUUsc0JBQXNCLENBQUMsRUFDNUUsS0FBSyxFQUNMa0QsTUFBTSxDQUNMM0gsZ0JBQWdCLENBQUN1SCxlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNDLFVBQVUsRUFDOURkLEdBQUcsQ0FBQ21CLEdBQUcsQ0FBQ2tDLGNBQWMsQ0FBQyxFQUFFQyx1QkFBdUIsRUFBRWpILEVBQUUsQ0FBQzBFLFVBQVUsQ0FBQyxFQUNoRWYsR0FBRyxDQUFDbUIsR0FBRyxDQUFDa0MsY0FBYyxDQUFDLEVBQUVDLHVCQUF1QixDQUNqRCxDQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBbkssUUFBQSxDQUFBaUgsbUJBQUEsR0FBQUEsbUJBQUE7RUFVTyxTQUFTc0Isa0JBQWtCQSxDQUNqQ3JJLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM5Q0ssZ0JBQW1ELEVBQ25EYyxhQUFnRCxFQUNoREssY0FBaUQsRUFDakRrQyw4QkFBdUMsRUFDSDtJQUNwQztJQUNBO0lBQ0E7SUFDQSxJQUFJa0Msa0JBQWtCLEdBQUc1RixzQkFBc0IsQ0FBQzNELFlBQVksRUFBRXVHLFdBQVcsRUFBRWhELG9CQUFvQjtJQUMvRixJQUFJZ0csa0JBQWtCLEVBQUVDLEtBQUssS0FBSyxjQUFjLEVBQUU7TUFDakRELGtCQUFrQixHQUFHcEgsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNwQztJQUNBLE9BQU8wRCxHQUFHLENBQ1RsQyxzQkFBc0IsQ0FBQ3ZFLDBCQUEwQixDQUFDc0YsSUFBSSxLQUFLLFdBQVcsR0FDbkU4RCxFQUFFLENBQUMxRCxhQUFhLEVBQUVLLGNBQWMsQ0FBQyxHQUNqQ1UsR0FBRyxDQUNIMkMsRUFBRSxDQUNEM0MsR0FBRyxDQUFDN0IsZ0JBQWdCLEVBQUVMLHNCQUFzQixDQUFDM0QsWUFBWSxDQUFDNEksWUFBWSxDQUFDekYsVUFBVSxDQUFDLEVBQ2xGMEMsR0FBRyxDQUFDM0QsRUFBRSxDQUFDMEUsVUFBVSxFQUFFMkMsa0JBQWtCLENBQ3RDLENBQUMsRUFDREUsUUFBUSxDQUFDOUYsc0JBQXNCLENBQUN2RSwwQkFBMEIsQ0FBQ3NLLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFDOUUsQ0FBQyxDQUFDaEQsWUFBWSxDQUFDQyxVQUFVLEVBQUVELFlBQVksQ0FBQzRDLGtCQUFrQixDQUFDLENBQUNLLFFBQVEsQ0FBQ3pLLGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsQ0FDdkcsQ0FBQyxFQUNKWSw4QkFDRCxDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFySSxRQUFBLENBQUF1SSxrQkFBQSxHQUFBQSxrQkFBQTtFQU1PLFNBQVNNLHFCQUFxQkEsQ0FDcEMzSSxnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDVjtJQUNwQyxNQUFNaUcsY0FBYyxHQUFHakcsc0JBQXNCLENBQUNuRSxnQkFBZ0IsQ0FBQ0ksTUFBTTtNQUNwRTBHLHVCQUF1QixHQUFHM0Msc0JBQXNCLENBQUMzRCxZQUFZLENBQUN1RyxXQUFXLENBQUNwRCxVQUFVO01BQ3BGMEcseUJBQWtDLEdBQUdsRyxzQkFBc0IsQ0FBQ3ZFLDBCQUEwQixFQUFFMEssUUFBUSxDQUFDdkYsT0FBTyxJQUFJLEtBQUs7SUFDbEgsTUFBTWlDLHlCQUF5QixHQUM5QnRILGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDcUQsVUFBVSxHQUMzRDdILEVBQUUsQ0FBQzBFLFVBQVUsR0FDYixDQUFDRixZQUFZLENBQUNDLFVBQVUsRUFBRUQsWUFBWSxDQUFDc0QsYUFBYSxDQUFDLENBQUNMLFFBQVEsQ0FBQ3pLLGdCQUFnQixDQUFDdUgsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN0RztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLE9BQU9aLEdBQUcsQ0FDVG1CLEdBQUcsQ0FBQ25CLEdBQUcsQ0FBQ29CLFVBQVUsQ0FBQ1gsdUJBQXVCLENBQUMsRUFBRVEsS0FBSyxDQUFDUix1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3BGdUQseUJBQXlCLEVBQ3pCckQseUJBQXlCLEVBQ3pCUSxHQUFHLENBQUM0QyxjQUFjLENBQ25CLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BNUssUUFBQSxDQUFBNkkscUJBQUEsR0FBQUEscUJBQUE7RUFPTyxTQUFTeEIsd0JBQXdCQSxDQUN2Q25ILGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM5Q3lDLHFCQUF3RCxFQUNwQjtJQUNwQyxNQUFNNkQsc0JBQXNCLEdBQUdySCxnQkFBZ0IsQ0FBQzFELGdCQUFnQixDQUFDSyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUU7TUFDMUZpRSxzQkFBc0IsRUFBRSxJQUFJO01BQzVCQyxxQkFBcUIsRUFBRSxJQUFJO01BQzNCSixXQUFXLEVBQUVBLENBQUNmLElBQVksRUFBRWdCLGVBQXlCLEtBQUs7UUFDekQsSUFBSWhCLElBQUksQ0FBQzRILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDNUI1SCxJQUFJLEdBQUdDLG9CQUFvQixDQUFDRCxJQUFJLEVBQUVwRCxnQkFBZ0IsQ0FBQ3NELGlCQUFpQixDQUFDLENBQUMsRUFBRWMsZUFBZSxDQUFDO1VBQ3hGLE9BQU9oQixJQUFJO1FBQ1o7UUFDQSxNQUFNNkgsb0JBQW9CLEdBQUdqTCxnQkFBZ0IsQ0FBQ0ssc0JBQXNCLENBQUMsQ0FBQyxDQUFDNEssb0JBQW9CO1FBQzNGLElBQUlBLG9CQUFvQixFQUFFO1VBQ3pCLE1BQU1DLE9BQU8sR0FBR0Qsb0JBQW9CLENBQUNBLG9CQUFvQixDQUFDcEksTUFBTSxHQUFHLENBQUMsQ0FBQztVQUNyRSxNQUFNc0ksT0FBTyxHQUFHQyxvQkFBb0IsQ0FBQ0YsT0FBTyxDQUFDLElBQUlBLE9BQU8sQ0FBQ0MsT0FBTztVQUNoRSxJQUFJQSxPQUFPLEVBQUU7WUFDWi9ILElBQUksR0FBRyxHQUFHK0gsT0FBTyxJQUFJL0gsSUFBSSxFQUFFO1VBQzVCO1FBQ0Q7UUFDQSxPQUFPQSxJQUFJO01BQ1o7SUFDRCxDQUFDLENBQUM7SUFDRixNQUFNc0csWUFBWSxHQUNqQnFCLHNCQUFzQixDQUFDVCxLQUFLLEtBQUssY0FBYyxHQUM1QzVHLGdCQUFnQixDQUFDMUQsZ0JBQWdCLENBQUNLLHNCQUFzQixDQUFDLENBQUMsRUFBRTtNQUM1RDhELFdBQVcsRUFBR2YsSUFBWSxJQUFLQyxvQkFBb0IsQ0FBQ0QsSUFBSSxFQUFFcEQsZ0JBQWdCLENBQUNzRCxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNsRyxDQUFDLENBQUMsR0FDRnlILHNCQUFzQjtJQUUxQixPQUFPcEUsR0FBRyxDQUNUTyxxQkFBcUIsRUFDckJ3QyxZQUFZLEVBQ1pKLEVBQUUsQ0FDRCxDQUFDN0Usc0JBQXNCLENBQUN2RSwwQkFBMEIsQ0FBQ21MLCtCQUErQixFQUNsRkMsWUFBWSxDQUFDLENBQUN6QyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTBDLGVBQWUsQ0FBQ0MseUJBQXlCLENBQzlHLENBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQTFMLFFBQUEsQ0FBQXFILHdCQUFBLEdBQUFBLHdCQUFBO0VBUU8sU0FBUzdCLG1CQUFtQkEsQ0FDbEN0RixnQkFBeUQsRUFDekR5RSxzQkFBOEMsRUFDOUNLLGdCQUFtRCxFQUVmO0lBQUEsSUFEcEMyRyxjQUFjLEdBQUE3SSxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBYixTQUFBLEdBQUFhLFNBQUEsTUFBRyxLQUFLO0lBRXRCLE1BQU04SSxVQUErQyxHQUFHLEVBQUU7SUFDMUQsTUFBTUMsV0FBbUIsR0FBRyxDQUFDRixjQUFjLEdBQUcsRUFBRSxHQUFHLGNBQWM7SUFFakUsSUFBSWhILHNCQUFzQixDQUFDeEUsWUFBWSxLQUFLMEUsWUFBWSxDQUFDaUYsa0JBQWtCLEVBQUU7TUFDNUU7TUFDQThCLFVBQVUsQ0FBQ0UsSUFBSSxDQUFDakYsR0FBRyxDQUFDbUIsR0FBRyxDQUFDckQsc0JBQXNCLENBQUNuRSxnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDLEVBQUV5QyxFQUFFLENBQUMwRSxVQUFVLENBQUMsQ0FBQztJQUN6RixDQUFDLE1BQU07TUFDTmdFLFVBQVUsQ0FBQ0UsSUFBSSxDQUFDOUcsZ0JBQWdCLENBQUM7SUFDbEM7SUFFQSxNQUFNNEUsWUFBWSxHQUFHakYsc0JBQXNCLENBQUMzRCxZQUFZLENBQUM0SSxZQUFZLENBQUN6RixVQUFVO0lBQ2hGLE1BQU00SCxjQUFjLEdBQUc3TCxnQkFBZ0IsQ0FBQzhMLG1CQUFtQixDQUFZckgsc0JBQXNCLENBQUN0RSxjQUFjLENBQUMsQ0FBQzRMLE1BQU07SUFDcEhMLFVBQVUsQ0FBQ0UsSUFBSSxDQUNkdEMsRUFBRSxDQUNEM0gsV0FBVyxDQUFDa0ssY0FBYyxDQUFDLEVBQzNCbEYsR0FBRyxDQUFDK0MsWUFBWSxFQUFFSixFQUFFLENBQUN0SixnQkFBZ0IsQ0FBQ3VILGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ3FELFVBQVUsRUFBRTdILEVBQUUsQ0FBQzBFLFVBQVUsQ0FBQyxDQUNwRyxDQUNELENBQUM7SUFFRCxJQUFJakQsc0JBQXNCLENBQUN2RSwwQkFBMEIsQ0FBQ3NGLElBQUksS0FBSyxXQUFXLEVBQUU7TUFDM0U7TUFDQTtNQUNBa0csVUFBVSxDQUFDRSxJQUFJLENBQUNJLFdBQVcsQ0FBQ25ELFdBQVcsQ0FBQzhDLFdBQVcsR0FBRywwQkFBMEIsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUVsRyxJQUFJbEgsc0JBQXNCLENBQUN2RSwwQkFBMEIsQ0FBQytMLGdCQUFnQixFQUFFO1FBQ3ZFO1FBQ0E7UUFDQVAsVUFBVSxDQUFDRSxJQUFJLENBQUNyQixRQUFRLENBQUMxQixXQUFXLENBQUM4QyxXQUFXLEdBQUcseUJBQXlCLEVBQUUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDbkc7SUFDRDtJQUVBLE9BQU9oRixHQUFHLENBQUMsR0FBRytFLFVBQVUsQ0FBQztFQUMxQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEE1TCxRQUFBLENBQUF3RixtQkFBQSxHQUFBQSxtQkFBQTtFQVFPLFNBQVMwQixtQkFBbUJBLENBQ2xDaEgsZ0JBQXlELEVBQ3pEeUUsc0JBQThDLEVBQzlDcUMsZ0JBQW1ELEVBRWY7SUFBQSxJQURwQzJFLGNBQWMsR0FBQTdJLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFiLFNBQUEsR0FBQWEsU0FBQSxNQUFHLEtBQUs7SUFFdEI7SUFDQTtJQUNBO0lBQ0EsTUFBTStJLFdBQVcsR0FBRyxDQUFDRixjQUFjLEdBQUcsRUFBRSxHQUFHLGNBQWM7SUFDekQsTUFBTVMsaUJBQWlCLEdBQUdyRCxXQUFXLENBQUM4QyxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsVUFBVSxDQUFDO0lBQ3BGLE1BQU1RLGVBQWUsR0FBR3RELFdBQVcsQ0FBQzhDLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7SUFDaEYsTUFBTVMseUJBQXlCLEdBQUd2RCxXQUFXLENBQUM4QyxXQUFXLEdBQUcsMkJBQTJCLEVBQUUsVUFBVSxDQUFDO0lBQ3BHLE1BQU1VLDRCQUE0QixHQUFHeEQsV0FBVyxDQUFDOEMsV0FBVyxHQUFHLDhCQUE4QixFQUFFLFVBQVUsQ0FBQzs7SUFFMUc7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsT0FBT2hGLEdBQUcsQ0FDVEcsZ0JBQWdCLEVBQ2hCd0MsRUFBRSxDQUNEN0Usc0JBQXNCLENBQUMzRCxZQUFZLENBQUNvSixXQUFXLENBQUM3RixvQkFBb0IsQ0FBQ2lHLEtBQUssS0FBSyxjQUFjLEVBQzdGN0Ysc0JBQXNCLENBQUMzRCxZQUFZLENBQUNvSixXQUFXLENBQUNqRyxVQUNqRCxDQUFDLEVBQ0RxRixFQUFFLENBQ0RnRCxXQUFXLENBQUN6SixNQUFNLENBQUNxSixpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDL0NJLFdBQVcsQ0FBQ3pKLE1BQU0sQ0FBQ3VKLHlCQUF5QixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN2REUsV0FBVyxDQUFDekosTUFBTSxDQUFDd0osNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzFEQyxXQUFXLENBQUN6SixNQUFNLENBQUNzSixlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM3QyxDQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5Bck0sUUFBQSxDQUFBa0gsbUJBQUEsR0FBQUEsbUJBQUE7RUFPTyxTQUFTdUIsa0JBQWtCQSxDQUNqQ0gsZUFBa0QsRUFDbEQzRCxzQkFBOEMsRUFDOUNnSCxjQUF1QixFQUNhO0lBQ3BDLE1BQU1jLG9CQUFvQixHQUFHLENBQUNkLGNBQWMsR0FBRyxrQkFBa0IsR0FBRyw4QkFBOEI7SUFDbEcsTUFBTWUsbUJBQW1CLEdBQUcsQ0FBQ2YsY0FBYyxHQUFHLGlDQUFpQyxHQUFHLDZDQUE2QztJQUMvSCxJQUFJaEgsc0JBQXNCLENBQUN2RSwwQkFBMEIsQ0FBQ3NGLElBQUksS0FBSyxXQUFXLEVBQUU7TUFDM0UsT0FBT21CLEdBQUcsQ0FDVHlCLGVBQWUsRUFDZmtCLEVBQUUsQ0FDRDdFLHNCQUFzQixDQUFDM0QsWUFBWSxDQUFDdUcsV0FBVyxDQUFDaEQsb0JBQW9CLENBQUNpRyxLQUFLLEtBQUssY0FBYyxFQUM3RjdGLHNCQUFzQixDQUFDM0QsWUFBWSxDQUFDdUcsV0FBVyxDQUFDcEQsVUFDakQsQ0FBQyxFQUNEMEQsTUFBTSxDQUNMcUUsV0FBVyxDQUFDbkosTUFBTSxDQUFDZ0csV0FBVyxDQUFDMEQsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDckUzRSxLQUFLLENBQUNpQixXQUFXLENBQUMyRCxtQkFBbUIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFFekQsS0FDRCxDQUNELENBQUM7SUFDRjtJQUNBLElBQUluQyxrQkFBa0IsR0FBRzVGLHNCQUFzQixDQUFDM0QsWUFBWSxFQUFFdUcsV0FBVyxFQUFFaEQsb0JBQW9CO0lBQy9GLElBQUlnRyxrQkFBa0IsRUFBRUMsS0FBSyxLQUFLLGNBQWMsRUFBRTtNQUNqREQsa0JBQWtCLEdBQUdwSCxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3BDO0lBQ0EsT0FBTzBELEdBQUcsQ0FBQzBELGtCQUFrQixFQUFFakMsZUFBZSxDQUFDO0VBQ2hEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQXRJLFFBQUEsQ0FBQXlJLGtCQUFBLEdBQUFBLGtCQUFBO0VBUU8sU0FBU08scUJBQXFCQSxDQUNwQzlJLGdCQUF5RCxFQUN6RHlFLHNCQUE4QyxFQUM5Q2lFLGtCQUFxRCxFQUVqQjtJQUFBLElBRHBDK0MsY0FBYyxHQUFBN0ksU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWIsU0FBQSxHQUFBYSxTQUFBLE1BQUcsS0FBSztJQUV0QixNQUFNd0UsdUJBQXVCLEdBQUczQyxzQkFBc0IsQ0FBQzNELFlBQVksQ0FBQ3VHLFdBQVcsQ0FBQ3BELFVBQVU7SUFDMUYsTUFBTXdJLDRCQUE0QixHQUNqQyxDQUFDMUUsVUFBVSxDQUFDWCx1QkFBdUIsQ0FBQyxJQUNwQzNDLHNCQUFzQixDQUFDM0QsWUFBWSxDQUFDdUcsV0FBVyxDQUFDaEQsb0JBQW9CLENBQUNpRyxLQUFLLEtBQUssY0FBYztJQUM5RixNQUFNb0MsK0JBQStCLEdBQUcsQ0FBQ2pCLGNBQWMsR0FBRywwQkFBMEIsR0FBRyxzQ0FBc0M7SUFDN0gsTUFBTWtCLHdCQUF3QixHQUFHLENBQUNsQixjQUFjLEdBQUcsbUJBQW1CLEdBQUcsK0JBQStCO0lBQ3hHLE1BQU1tQix3QkFBd0IsR0FBR0MsY0FBYyxDQUFDaEUsV0FBVyxDQUFDNkQsK0JBQStCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLE1BQU1JLHlCQUF5QixHQUFHRCxjQUFjLENBQUNoSyxNQUFNLENBQUNnRyxXQUFXLENBQUM4RCx3QkFBd0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RyxNQUFNMUwsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0MsMEJBQTBCLENBQUNuQixnQkFBZ0IsQ0FBQ0ssc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE1BQU0wTSxZQUFZLEdBQUdDLGVBQWUsQ0FBQ2hOLGdCQUFnQixDQUFDOztJQUV0RDtJQUNBO0lBQ0E7SUFDQTtJQUNBLE1BQU1pTixjQUFjLEdBQUd0RixNQUFNLENBQzVCMkIsRUFBRSxDQUFDM0MsR0FBRyxDQUFDb0csWUFBWSxFQUFFOUwsaUJBQWlCLENBQUMsRUFBRXdMLDRCQUE0QixDQUFDLEVBQ3RFOUYsR0FBRyxDQUFDaUcsd0JBQXdCLEVBQUVFLHlCQUF5QixDQUFDLEVBQ3hEbkcsR0FBRyxDQUFDaUcsd0JBQXdCLENBQzdCLENBQUM7SUFFRCxPQUFPakcsR0FBRyxDQUFDK0Isa0JBQWtCLEVBQUVmLE1BQU0sQ0FBQzhFLDRCQUE0QixFQUFFUSxjQUFjLEVBQUV0RyxHQUFHLENBQUNzRyxjQUFjLEVBQUU3Rix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7RUFDbkk7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQXRILFFBQUEsQ0FBQWdKLHFCQUFBLEdBQUFBLHFCQUFBO0VBT08sU0FBUy9DLGdCQUFnQkEsQ0FDL0JILGFBQWdELEVBQ2hEbkIsc0JBQThDLEVBQzlDZ0gsY0FBdUIsRUFDYTtJQUNwQyxNQUFNeUIsbUJBQW1CLEdBQUcsQ0FBQ3pCLGNBQWMsR0FBRywrQkFBK0IsR0FBRywyQ0FBMkM7SUFDM0gsTUFBTXdCLGNBQWMsR0FBR3BFLFdBQVcsQ0FBQ3FFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQztJQUNuRSxPQUFPdkcsR0FBRyxDQUNUZixhQUFhLEVBQ2IwRCxFQUFFLENBQ0Q3RSxzQkFBc0IsQ0FBQzNELFlBQVksQ0FBQ3VHLFdBQVcsQ0FBQ2hELG9CQUFvQixDQUFDaUcsS0FBSyxLQUFLLGNBQWMsRUFDN0Y3RixzQkFBc0IsQ0FBQzNELFlBQVksQ0FBQ3VHLFdBQVcsQ0FBQ3BELFVBQ2pELENBQUMsRUFDRGdKLGNBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBbk4sUUFBQSxDQUFBaUcsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFNTyxTQUFTSSxpQkFBaUJBLENBQ2hDRixjQUFpRCxFQUNqRHdGLGNBQXVCLEVBQ2E7SUFDcEMsTUFBTTBCLG9CQUFvQixHQUFHLENBQUMxQixjQUFjLEdBQUcsZ0NBQWdDLEdBQUcsNENBQTRDO0lBQzlILE1BQU13QixjQUFjLEdBQUdwRSxXQUFXLENBQUNzRSxvQkFBb0IsRUFBRSxVQUFVLENBQUM7SUFDcEUsT0FBT3hHLEdBQUcsQ0FBQ1YsY0FBYyxFQUFFZ0gsY0FBYyxDQUFDO0VBQzNDOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQW5OLFFBQUEsQ0FBQXFHLGlCQUFBLEdBQUFBLGlCQUFBO0VBUUEsU0FBU1MsdUJBQXVCQSxDQUMvQndHLG9CQUF1RCxFQUN2RDNJLHNCQUE4QyxFQUM5QzRCLEtBQWMsRUFFc0I7SUFBQSxJQURwQ29GLGNBQWMsR0FBQTdJLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFiLFNBQUEsR0FBQWEsU0FBQSxNQUFHLEtBQUs7SUFFdEIsTUFBTXlLLHNCQUFzQixHQUFHLENBQUM1QixjQUFjLEdBQUcsd0JBQXdCLEdBQUcsb0NBQW9DO0lBQ2hILE1BQU02Qix3QkFBd0IsR0FBRyxDQUFDN0IsY0FBYyxHQUFHLDBCQUEwQixHQUFHLHNDQUFzQztJQUN0SCxNQUFNd0IsY0FBYyxHQUFHNUcsS0FBSyxHQUN6QnVCLEtBQUssQ0FBQ2lCLFdBQVcsQ0FBQ3dFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUM1RHpGLEtBQUssQ0FBQ2lCLFdBQVcsQ0FBQ3lFLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNqRSxPQUFPM0csR0FBRyxDQUNUeUcsb0JBQW9CLEVBQ3BCOUQsRUFBRSxDQUNEN0Usc0JBQXNCLENBQUMzRCxZQUFZLENBQUN1RyxXQUFXLENBQUNoRCxvQkFBb0IsQ0FBQ2lHLEtBQUssS0FBSyxjQUFjLEVBQzdGN0Ysc0JBQXNCLENBQUMzRCxZQUFZLENBQUN1RyxXQUFXLENBQUNwRCxVQUNqRCxDQUFDLEVBQ0RnSixjQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTRCxlQUFlQSxDQUFDaE4sZ0JBQXlELEVBQStDO0lBQUEsSUFBN0N1TiwwQkFBMEIsR0FBQTNLLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFiLFNBQUEsR0FBQWEsU0FBQSxNQUFHLEtBQUs7SUFDNUgsSUFBSTVDLGdCQUFnQixDQUFDd04sa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxFQUFFO01BQzFEO01BQ0EsT0FBTyxLQUFLO0lBQ2I7SUFDQSxNQUFNQyxZQUFZLEdBQUcxTixnQkFBZ0IsQ0FBQ3VILGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELElBQ0NtRyxZQUFZLEtBQUtsRyxZQUFZLENBQUNDLFVBQVUsSUFDeENpRyxZQUFZLEtBQUtsRyxZQUFZLENBQUM0QyxrQkFBa0IsSUFDL0NtRCwwQkFBMEIsSUFBSXZOLGdCQUFnQixDQUFDd04sa0JBQWtCLENBQUMsQ0FBQyxDQUFDRyx5QkFBeUIsQ0FBQyxDQUFFLEVBQ2hHO01BQ0QsT0FBTyxJQUFJO0lBQ1o7SUFDQTtJQUNBLE9BQU8sS0FBSztFQUNiO0VBQUM3TixRQUFBLENBQUFrTixlQUFBLEdBQUFBLGVBQUE7RUFBQSxPQUFBbE4sUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|