@sapui5/sap.fe.core 1.93.3 → 1.97.0
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +8 -40
- package/src/sap/fe/core/BusyLocker.js +12 -0
- package/src/sap/fe/core/CommonUtils.js +224 -48
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/PageController.js +13 -2
- package/src/sap/fe/core/RouterProxy.js +52 -64
- package/src/sap/fe/core/TemplateComponent.js +8 -2
- package/src/sap/fe/core/TransactionHelper.js +210 -180
- package/src/sap/fe/core/actions/draft.js +13 -1
- package/src/sap/fe/core/actions/messageHandling.js +80 -4
- package/src/sap/fe/core/actions/operations.js +207 -68
- package/src/sap/fe/core/controllerextensions/EditFlow.js +82 -55
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +13 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +132 -23
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +203 -214
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +834 -170
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +890 -189
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +222 -102
- package/src/sap/fe/core/controllerextensions/PageReady.js +48 -33
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -14
- package/src/sap/fe/core/controllerextensions/Paginator.js +150 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +133 -270
- package/src/sap/fe/core/controllerextensions/Share.js +12 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.js +5 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -12
- package/src/sap/fe/core/controllerextensions/ViewState.js +202 -8
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +39 -34
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +1 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +109 -108
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +15 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +250 -94
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +129 -135
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +325 -0
- package/src/sap/fe/core/controls/filterbar.d.js +8 -0
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
- package/src/sap/fe/core/converters/ConverterContext.js +19 -5
- package/src/sap/fe/core/converters/ConverterContext.ts +13 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +13 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +9 -9
- package/src/sap/fe/core/converters/MetaModelConverter.js +867 -871
- package/src/sap/fe/core/converters/MetaModelConverter.ts +772 -827
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -4
- package/src/sap/fe/core/converters/annotations/DataField.js +57 -7
- package/src/sap/fe/core/converters/annotations/DataField.ts +52 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +146 -85
- package/src/sap/fe/core/converters/controls/Common/Action.js +61 -56
- package/src/sap/fe/core/converters/controls/Common/Action.ts +54 -39
- package/src/sap/fe/core/converters/controls/Common/Chart.js +101 -9
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +100 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -16
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +16 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +77 -29
- package/src/sap/fe/core/converters/controls/Common/Form.ts +79 -21
- package/src/sap/fe/core/converters/controls/Common/KPI.js +287 -109
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +314 -139
- package/src/sap/fe/core/converters/controls/Common/Table.js +521 -166
- package/src/sap/fe/core/converters/controls/Common/Table.ts +519 -115
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +487 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +541 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +364 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +338 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +74 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +50 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +11 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +47 -35
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +45 -29
- package/src/sap/fe/core/converters/helpers/Aggregation.js +31 -32
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +26 -27
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +27 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +22 -2
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +9 -3
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -3
- package/src/sap/fe/core/converters/helpers/IssueManager.js +5 -4
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +4 -3
- package/src/sap/fe/core/converters/helpers/Key.js +3 -3
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +11 -6
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +9 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +14 -14
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +91 -20
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +77 -5
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +87 -714
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +85 -812
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -17
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +121 -16
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
- package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +6 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +4 -4
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +0 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +78 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +2 -2
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +2 -2
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +45 -2
- package/src/sap/fe/core/messagebundle_ar.properties +53 -1
- package/src/sap/fe/core/messagebundle_bg.properties +52 -0
- package/src/sap/fe/core/messagebundle_ca.properties +54 -2
- package/src/sap/fe/core/messagebundle_cs.properties +52 -0
- package/src/sap/fe/core/messagebundle_cy.properties +52 -0
- package/src/sap/fe/core/messagebundle_da.properties +53 -1
- package/src/sap/fe/core/messagebundle_de.properties +55 -3
- package/src/sap/fe/core/messagebundle_el.properties +53 -1
- package/src/sap/fe/core/messagebundle_en.properties +52 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +53 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +49 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +53 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +53 -1
- package/src/sap/fe/core/messagebundle_es.properties +60 -8
- package/src/sap/fe/core/messagebundle_es_MX.properties +55 -3
- package/src/sap/fe/core/messagebundle_et.properties +52 -0
- package/src/sap/fe/core/messagebundle_fi.properties +52 -0
- package/src/sap/fe/core/messagebundle_fr.properties +61 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +52 -0
- package/src/sap/fe/core/messagebundle_hi.properties +53 -1
- package/src/sap/fe/core/messagebundle_hr.properties +53 -1
- package/src/sap/fe/core/messagebundle_hu.properties +52 -0
- package/src/sap/fe/core/messagebundle_id.properties +54 -2
- package/src/sap/fe/core/messagebundle_it.properties +53 -1
- package/src/sap/fe/core/messagebundle_iw.properties +54 -2
- package/src/sap/fe/core/messagebundle_ja.properties +62 -10
- package/src/sap/fe/core/messagebundle_kk.properties +53 -1
- package/src/sap/fe/core/messagebundle_ko.properties +53 -1
- package/src/sap/fe/core/messagebundle_lt.properties +53 -1
- package/src/sap/fe/core/messagebundle_lv.properties +53 -1
- package/src/sap/fe/core/messagebundle_ms.properties +53 -1
- package/src/sap/fe/core/messagebundle_nl.properties +57 -5
- package/src/sap/fe/core/messagebundle_no.properties +54 -2
- package/src/sap/fe/core/messagebundle_pl.properties +53 -1
- package/src/sap/fe/core/messagebundle_pt.properties +54 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +53 -1
- package/src/sap/fe/core/messagebundle_ro.properties +53 -1
- package/src/sap/fe/core/messagebundle_ru.properties +53 -1
- package/src/sap/fe/core/messagebundle_sh.properties +53 -1
- package/src/sap/fe/core/messagebundle_sk.properties +52 -0
- package/src/sap/fe/core/messagebundle_sl.properties +53 -1
- package/src/sap/fe/core/messagebundle_sv.properties +53 -1
- package/src/sap/fe/core/messagebundle_th.properties +52 -0
- package/src/sap/fe/core/messagebundle_tr.properties +52 -0
- package/src/sap/fe/core/messagebundle_uk.properties +52 -0
- package/src/sap/fe/core/messagebundle_vi.properties +53 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +53 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +53 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +154 -78
- package/src/sap/fe/core/services/ShellServicesFactory.js +9 -9
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +11 -12
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +12 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +2 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +2 -4
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -4
- package/src/sap/fe/core/support/CommonHelper.js +2 -4
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +54 -6
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +54 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
- package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +23 -5
- package/src/sap/fe/core/templating/FilterHelper.ts +15 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +8 -8
- package/src/sap/fe/core/templating/UIFormatters.js +72 -4
- package/src/sap/fe/core/templating/UIFormatters.ts +98 -3
- package/src/sap/fe/core/type/Email.js +1 -1
|
@@ -29,7 +29,7 @@ sap.ui.define([], function () {
|
|
|
29
29
|
var isComputed = function (oProperty) {
|
|
30
30
|
var _oProperty$annotation, _oProperty$annotation2, _oProperty$annotation3;
|
|
31
31
|
|
|
32
|
-
return !!((_oProperty$annotation = oProperty.annotations)
|
|
32
|
+
return !!((_oProperty$annotation = oProperty.annotations) !== null && _oProperty$annotation !== void 0 && (_oProperty$annotation2 = _oProperty$annotation.Core) !== null && _oProperty$annotation2 !== void 0 && (_oProperty$annotation3 = _oProperty$annotation2.Computed) !== null && _oProperty$annotation3 !== void 0 && _oProperty$annotation3.valueOf());
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
35
|
* Check whether the property has the Core.Immutable annotation or not.
|
|
@@ -44,7 +44,7 @@ sap.ui.define([], function () {
|
|
|
44
44
|
var isImmutable = function (oProperty) {
|
|
45
45
|
var _oProperty$annotation4, _oProperty$annotation5, _oProperty$annotation6;
|
|
46
46
|
|
|
47
|
-
return !!((_oProperty$annotation4 = oProperty.annotations)
|
|
47
|
+
return !!((_oProperty$annotation4 = oProperty.annotations) !== null && _oProperty$annotation4 !== void 0 && (_oProperty$annotation5 = _oProperty$annotation4.Core) !== null && _oProperty$annotation5 !== void 0 && (_oProperty$annotation6 = _oProperty$annotation5.Immutable) !== null && _oProperty$annotation6 !== void 0 && _oProperty$annotation6.valueOf());
|
|
48
48
|
};
|
|
49
49
|
/**
|
|
50
50
|
* Check whether the property is a key or not.
|
|
@@ -100,7 +100,7 @@ sap.ui.define([], function () {
|
|
|
100
100
|
var hasSemanticObject = function (oProperty) {
|
|
101
101
|
var _oProperty$annotation10, _oProperty$annotation11;
|
|
102
102
|
|
|
103
|
-
return !!((_oProperty$annotation10 = oProperty.annotations)
|
|
103
|
+
return !!((_oProperty$annotation10 = oProperty.annotations) !== null && _oProperty$annotation10 !== void 0 && (_oProperty$annotation11 = _oProperty$annotation10.Common) !== null && _oProperty$annotation11 !== void 0 && _oProperty$annotation11.SemanticObject);
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
_exports.hasSemanticObject = hasSemanticObject;
|
|
@@ -204,7 +204,7 @@ sap.ui.define([], function () {
|
|
|
204
204
|
var hasValueHelp = function (oProperty) {
|
|
205
205
|
var _oProperty$annotation38, _oProperty$annotation39, _oProperty$annotation40, _oProperty$annotation41, _oProperty$annotation42, _oProperty$annotation43, _oProperty$annotation44, _oProperty$annotation45;
|
|
206
206
|
|
|
207
|
-
return !!((_oProperty$annotation38 = oProperty.annotations)
|
|
207
|
+
return !!((_oProperty$annotation38 = oProperty.annotations) !== null && _oProperty$annotation38 !== void 0 && (_oProperty$annotation39 = _oProperty$annotation38.Common) !== null && _oProperty$annotation39 !== void 0 && _oProperty$annotation39.ValueList) || !!((_oProperty$annotation40 = oProperty.annotations) !== null && _oProperty$annotation40 !== void 0 && (_oProperty$annotation41 = _oProperty$annotation40.Common) !== null && _oProperty$annotation41 !== void 0 && _oProperty$annotation41.ValueListReferences) || !!((_oProperty$annotation42 = oProperty.annotations) !== null && _oProperty$annotation42 !== void 0 && (_oProperty$annotation43 = _oProperty$annotation42.Common) !== null && _oProperty$annotation43 !== void 0 && _oProperty$annotation43.ValueListWithFixedValues) || !!((_oProperty$annotation44 = oProperty.annotations) !== null && _oProperty$annotation44 !== void 0 && (_oProperty$annotation45 = _oProperty$annotation44.Common) !== null && _oProperty$annotation45 !== void 0 && _oProperty$annotation45.ValueListMapping);
|
|
208
208
|
};
|
|
209
209
|
/**
|
|
210
210
|
* Check whether the property has a value help with fixed value annotation defined or not.
|
|
@@ -219,7 +219,7 @@ sap.ui.define([], function () {
|
|
|
219
219
|
var hasValueHelpWithFixedValues = function (oProperty) {
|
|
220
220
|
var _oProperty$annotation46, _oProperty$annotation47, _oProperty$annotation48;
|
|
221
221
|
|
|
222
|
-
return !!((_oProperty$annotation46 = oProperty.annotations)
|
|
222
|
+
return !!((_oProperty$annotation46 = oProperty.annotations) !== null && _oProperty$annotation46 !== void 0 && (_oProperty$annotation47 = _oProperty$annotation46.Common) !== null && _oProperty$annotation47 !== void 0 && (_oProperty$annotation48 = _oProperty$annotation47.ValueListWithFixedValues) !== null && _oProperty$annotation48 !== void 0 && _oProperty$annotation48.valueOf());
|
|
223
223
|
};
|
|
224
224
|
/**
|
|
225
225
|
* Check whether the property has a value help for validation annotation defined or not.
|
|
@@ -249,7 +249,7 @@ sap.ui.define([], function () {
|
|
|
249
249
|
var isUnit = function (oProperty) {
|
|
250
250
|
var _oProperty$annotation51, _oProperty$annotation52, _oProperty$annotation53;
|
|
251
251
|
|
|
252
|
-
return !!((_oProperty$annotation51 = oProperty.annotations)
|
|
252
|
+
return !!((_oProperty$annotation51 = oProperty.annotations) !== null && _oProperty$annotation51 !== void 0 && (_oProperty$annotation52 = _oProperty$annotation51.Common) !== null && _oProperty$annotation52 !== void 0 && (_oProperty$annotation53 = _oProperty$annotation52.IsUnit) !== null && _oProperty$annotation53 !== void 0 && _oProperty$annotation53.valueOf());
|
|
253
253
|
};
|
|
254
254
|
/**
|
|
255
255
|
* Checks whether the property has a unit property.
|
|
@@ -279,7 +279,7 @@ sap.ui.define([], function () {
|
|
|
279
279
|
var isCurrency = function (oProperty) {
|
|
280
280
|
var _oProperty$annotation56, _oProperty$annotation57, _oProperty$annotation58;
|
|
281
281
|
|
|
282
|
-
return !!((_oProperty$annotation56 = oProperty.annotations)
|
|
282
|
+
return !!((_oProperty$annotation56 = oProperty.annotations) !== null && _oProperty$annotation56 !== void 0 && (_oProperty$annotation57 = _oProperty$annotation56.Common) !== null && _oProperty$annotation57 !== void 0 && (_oProperty$annotation58 = _oProperty$annotation57.IsCurrency) !== null && _oProperty$annotation58 !== void 0 && _oProperty$annotation58.valueOf());
|
|
283
283
|
};
|
|
284
284
|
/**
|
|
285
285
|
* Checks whether the property has a currency property.
|
|
@@ -300,4 +300,4 @@ sap.ui.define([], function () {
|
|
|
300
300
|
_exports.hasCurrency = hasCurrency;
|
|
301
301
|
return _exports;
|
|
302
302
|
}, false);
|
|
303
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByb3BlcnR5SGVscGVyLnRzIl0sIm5hbWVzIjpbImlzUHJvcGVydHkiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImhhc0RhdGVUeXBlIiwiaW5kZXhPZiIsInR5cGUiLCJnZXRMYWJlbCIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0IiwiaXNQYXRoRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCIkdGFyZ2V0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJwYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJJU09DdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiVGV4dCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJzVGFyZ2V0VmFsdWUiLCJVSSIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsImhhc1ZhbHVlSGVscCIsIlZhbHVlTGlzdCIsIlZhbHVlTGlzdFJlZmVyZW5jZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RNYXBwaW5nIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJpc1VuaXQiLCJJc1VuaXQiLCJoYXNVbml0IiwiaXND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cG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuXG4vKipcbiAqIElkZW50aWZ5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXNzZWQgaXMgYSBcIlByb3BlcnR5XCIgKGhhcyBhIF90eXBlKS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSBBIHRhcmdldCBwcm9wZXJ0eSB0byBldmFsdWF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbGlkYXRlIHRoYXQgcHJvcGVydHkgaXMgYSBQcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShwcm9wZXJ0eTogYW55KTogcHJvcGVydHkgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gcHJvcGVydHkgJiYgKHByb3BlcnR5IGFzIFByb3BlcnR5KS5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmIChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyB0aGUgQ29yZS5JbW11dGFibGUgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBpbW11dGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW1tdXRhYmxlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBhIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNLZXkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGRhdGUgdGltZSBvciBub3QuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIG9mIHR5cGUgZGF0ZSAvIGRhdGV0aW1lIC8gZGF0ZXRpbWVvZmZzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0RhdGVUeXBlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gW1wiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIl0uaW5kZXhPZihvUHJvcGVydHkudHlwZSkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGFiZWwgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgc2VtYW50aWMgb2JqZWN0IGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgaGFzU2VtYW50aWNPYmplY3QgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJQYXRoXCI7XG59O1xuZXhwb3J0IGNvbnN0IGlzQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJBbm5vdGF0aW9uUGF0aFwiO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCB0byB0aGUgcHJvcGVydHksIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtQcm9wZXJ0eSB8IHVuZGVmaW5lZH0gVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KVxuXHRcdD8gKChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LiR0YXJnZXQgYXMgdW5rbm93bikgYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgY3VycmVuY3kgcHJvcGVydHkgZm9yIHRoYXQgcHJvcGVydHkgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7UHJvcGVydHkgfCB1bmRlZmluZWR9IFRoZSB1bml0IHByb3BlcnR5IGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpXG5cdFx0PyAoKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93bikgYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeS5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIENvbW1vbi5UZXh0IHByb3BlcnR5IHBhdGggaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgQ29tbW9uLlRleHQgcHJvcGVydHkgcGF0aCBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBUYXJnZXRWYWx1ZSBmcm9tIGRhdGFwb2ludC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgdGhlIHRhcmdldCBwcm9wZXJ0eS9kYXRhUG9pbnRcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IHRoZSBUYXJnZXRWYWx1ZVxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzVGFyZ2V0VmFsdWUgPVxuXHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVGFyZ2V0VmFsdWU/LnRvU3RyaW5nKCkgfHwgb1Byb3BlcnR5LlRhcmdldFZhbHVlPy50b1N0cmluZygpO1xuXHRyZXR1cm4gc1RhcmdldFZhbHVlID8gc1RhcmdldFZhbHVlIDogdW5kZWZpbmVkO1xufTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3QgfHxcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWZlcmVuY2VzIHx8XG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIHx8XG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0TWFwcGluZ1xuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIHdpdGggZml4ZWQgdmFsdWUgYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBmb3IgdmFsaWRhdGlvbiBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSB1bml0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHVuaXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB1bml0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGhhc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBjdXJyZW5jeVxuICovXG5leHBvcnQgY29uc3QgaXNDdXJyZW5jeSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzQ3VycmVuY3k/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgIT09IHVuZGVmaW5lZDtcbn07XG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByb3BlcnR5SGVscGVyLnRzIl0sIm5hbWVzIjpbImlzUHJvcGVydHkiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiX3R5cGUiLCJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImhhc0RhdGVUeXBlIiwiaW5kZXhPZiIsInR5cGUiLCJnZXRMYWJlbCIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0IiwiaXNQYXRoRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJpc0Fubm90YXRpb25QYXRoRXhwcmVzc2lvbiIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCIkdGFyZ2V0IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJwYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJJU09DdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiVGV4dCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJzVGFyZ2V0VmFsdWUiLCJVSSIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsImhhc1ZhbHVlSGVscCIsIlZhbHVlTGlzdCIsIlZhbHVlTGlzdFJlZmVyZW5jZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RNYXBwaW5nIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJpc1VuaXQiLCJJc1VuaXQiLCJoYXNVbml0IiwiaXND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QUFDTyxNQUFNOEIsVUFBVSxHQUFHLFVBQVNqRCxTQUFULEVBQXVDO0FBQUE7O0FBQ2hFLFdBQU8sQ0FBQyw2QkFBQ0EsU0FBUyxDQUFDQyxXQUFYLCtFQUFDLHdCQUF1QlcsTUFBeEIsK0VBQUMsd0JBQStCc0MsVUFBaEMsb0RBQUMsd0JBQTJDOUMsT0FBM0MsRUFBRCxDQUFSO0FBQ0EsR0FGTTtBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxNQUFNK0MsV0FBVyxHQUFHLFVBQVNuRCxTQUFULEVBQXVDO0FBQUE7O0FBQ2pFLFdBQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBViwrR0FBdUJxQixRQUF2QixvRkFBaUNNLFdBQWpDLE1BQWlEVCxTQUF4RDtBQUNBLEdBRk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuXG4vKipcbiAqIElkZW50aWZ5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXNzZWQgaXMgYSBcIlByb3BlcnR5XCIgKGhhcyBhIF90eXBlKS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSBBIHRhcmdldCBwcm9wZXJ0eSB0byBldmFsdWF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbGlkYXRlIHRoYXQgcHJvcGVydHkgaXMgYSBQcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShwcm9wZXJ0eTogYW55KTogcHJvcGVydHkgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gcHJvcGVydHkgJiYgKHByb3BlcnR5IGFzIFByb3BlcnR5KS5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpICYmIChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyB0aGUgQ29yZS5JbW11dGFibGUgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBpbW11dGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW1tdXRhYmxlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXQncyBhIGtleVxuICovXG5leHBvcnQgY29uc3QgaXNLZXkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGRhdGUgdGltZSBvciBub3QuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIG9mIHR5cGUgZGF0ZSAvIGRhdGV0aW1lIC8gZGF0ZXRpbWVvZmZzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0RhdGVUeXBlID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gW1wiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIl0uaW5kZXhPZihvUHJvcGVydHkudHlwZSkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGFiZWwgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgc2VtYW50aWMgb2JqZWN0IGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgaGFzU2VtYW50aWNPYmplY3QgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJQYXRoXCI7XG59O1xuZXhwb3J0IGNvbnN0IGlzQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb248VD4oZXhwcmVzc2lvbjogYW55KTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gISFleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSAhPT0gdW5kZWZpbmVkICYmIGV4cHJlc3Npb24udHlwZSA9PT0gXCJBbm5vdGF0aW9uUGF0aFwiO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCB0byB0aGUgcHJvcGVydHksIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtQcm9wZXJ0eSB8IHVuZGVmaW5lZH0gVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KVxuXHRcdD8gKChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LiR0YXJnZXQgYXMgdW5rbm93bikgYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgY3VycmVuY3kgcHJvcGVydHkgZm9yIHRoYXQgcHJvcGVydHkgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7UHJvcGVydHkgfCB1bmRlZmluZWR9IFRoZSB1bml0IHByb3BlcnR5IGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpXG5cdFx0PyAoKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93bikgYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeS5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIENvbW1vbi5UZXh0IHByb3BlcnR5IHBhdGggaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgQ29tbW9uLlRleHQgcHJvcGVydHkgcGF0aCBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBUYXJnZXRWYWx1ZSBmcm9tIGRhdGFwb2ludC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgdGhlIHRhcmdldCBwcm9wZXJ0eS9kYXRhUG9pbnRcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IHRoZSBUYXJnZXRWYWx1ZVxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzVGFyZ2V0VmFsdWUgPVxuXHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LlRhcmdldD8uJHRhcmdldD8uVGFyZ2V0VmFsdWU/LnRvU3RyaW5nKCkgfHwgb1Byb3BlcnR5LlRhcmdldFZhbHVlPy50b1N0cmluZygpO1xuXHRyZXR1cm4gc1RhcmdldFZhbHVlID8gc1RhcmdldFZhbHVlIDogdW5kZWZpbmVkO1xufTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3QgfHxcblx0XHQhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWZlcmVuY2VzIHx8XG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIHx8XG5cdFx0ISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0TWFwcGluZ1xuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIHdpdGggZml4ZWQgdmFsdWUgYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBmb3IgdmFsaWRhdGlvbiBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHl9IG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSB1bml0XG4gKi9cbmV4cG9ydCBjb25zdCBpc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHVuaXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB1bml0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGhhc1VuaXQgPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBjdXJyZW5jeVxuICovXG5leHBvcnQgY29uc3QgaXNDdXJyZW5jeSA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzQ3VycmVuY3k/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24ob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgIT09IHVuZGVmaW5lZDtcbn07XG4iXX0=
|
|
@@ -12,6 +12,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
12
12
|
var getPathRelativeLocation = DataModelPathHelper.getPathRelativeLocation;
|
|
13
13
|
var isPathUpdatable = DataModelPathHelper.isPathUpdatable;
|
|
14
14
|
var getTargetEntitySetPath = DataModelPathHelper.getTargetEntitySetPath;
|
|
15
|
+
var isProperty = PropertyHelper.isProperty;
|
|
15
16
|
var isPathExpression = PropertyHelper.isPathExpression;
|
|
16
17
|
var isKey = PropertyHelper.isKey;
|
|
17
18
|
var isImmutable = PropertyHelper.isImmutable;
|
|
@@ -268,7 +269,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
268
269
|
_exports.ifUnitEditable = ifUnitEditable;
|
|
269
270
|
|
|
270
271
|
var getDisplayMode = function (oPropertyPath, oDataModelObjectPath) {
|
|
271
|
-
var _oProperty$annotation, _oProperty$annotation2, _oTextAnnotation$anno, _oTextAnnotation$anno2, _oTextAnnotation$anno3, _oEntityType$annotati, _oEntityType$annotati2, _oEntityType$annotati3;
|
|
272
|
+
var _oProperty$annotation, _oProperty$annotation2, _oTextAnnotation$anno, _oTextAnnotation$anno2, _oTextAnnotation$anno3, _oEntityType$annotati, _oEntityType$annotati2, _oEntityType$annotati3, _oEntityType$annotati4, _oEntityType$annotati5, _oEntityType$annotati6;
|
|
272
273
|
|
|
273
274
|
if (!oPropertyPath || typeof oPropertyPath === "string") {
|
|
274
275
|
return "Value";
|
|
@@ -280,7 +281,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
280
281
|
var oTextArrangementAnnotation = typeof oTextAnnotation !== "string" && (oTextAnnotation === null || oTextAnnotation === void 0 ? void 0 : (_oTextAnnotation$anno = oTextAnnotation.annotations) === null || _oTextAnnotation$anno === void 0 ? void 0 : (_oTextAnnotation$anno2 = _oTextAnnotation$anno.UI) === null || _oTextAnnotation$anno2 === void 0 ? void 0 : (_oTextAnnotation$anno3 = _oTextAnnotation$anno2.TextArrangement) === null || _oTextAnnotation$anno3 === void 0 ? void 0 : _oTextAnnotation$anno3.toString()) || (oEntityType === null || oEntityType === void 0 ? void 0 : (_oEntityType$annotati = oEntityType.annotations) === null || _oEntityType$annotati === void 0 ? void 0 : (_oEntityType$annotati2 = _oEntityType$annotati.UI) === null || _oEntityType$annotati2 === void 0 ? void 0 : (_oEntityType$annotati3 = _oEntityType$annotati2.TextArrangement) === null || _oEntityType$annotati3 === void 0 ? void 0 : _oEntityType$annotati3.toString());
|
|
281
282
|
var sDisplayValue = oTextAnnotation ? "DescriptionValue" : "Value";
|
|
282
283
|
|
|
283
|
-
if (oTextAnnotation && oTextArrangementAnnotation) {
|
|
284
|
+
if (oTextAnnotation && oTextArrangementAnnotation || oEntityType !== null && oEntityType !== void 0 && (_oEntityType$annotati4 = oEntityType.annotations) !== null && _oEntityType$annotati4 !== void 0 && (_oEntityType$annotati5 = _oEntityType$annotati4.UI) !== null && _oEntityType$annotati5 !== void 0 && (_oEntityType$annotati6 = _oEntityType$annotati5.TextArrangement) !== null && _oEntityType$annotati6 !== void 0 && _oEntityType$annotati6.toString()) {
|
|
284
285
|
if (oTextArrangementAnnotation === "UI.TextArrangementType/TextOnly") {
|
|
285
286
|
sDisplayValue = "Description";
|
|
286
287
|
} else if (oTextArrangementAnnotation === "UI.TextArrangementType/TextLast") {
|
|
@@ -366,7 +367,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
366
367
|
|
|
367
368
|
outExpression.formatOptions.parseKeepsEmptyString = true;
|
|
368
369
|
|
|
369
|
-
if ((
|
|
370
|
+
if ((_oTargetMapping$const = oTargetMapping.constraints) !== null && _oTargetMapping$const !== void 0 && _oTargetMapping$const["@com.sap.vocabularies.Common.v1.IsDigitSequence"] && (_oProperty$annotation7 = oProperty.annotations) !== null && _oProperty$annotation7 !== void 0 && (_oProperty$annotation8 = _oProperty$annotation7.Common) !== null && _oProperty$annotation8 !== void 0 && _oProperty$annotation8.IsDigitSequence) {
|
|
370
371
|
outExpression.constraints.isDigitSequence = true;
|
|
371
372
|
}
|
|
372
373
|
}
|
|
@@ -389,6 +390,40 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
389
390
|
|
|
390
391
|
_exports.formatWithTypeInformation = formatWithTypeInformation;
|
|
391
392
|
|
|
393
|
+
var getTypeConfig = function (oProperty, dataType) {
|
|
394
|
+
var _propertyTypeConfig$t, _propertyTypeConfig$t2, _propertyTypeConfig$t3, _propertyTypeConfig$t4;
|
|
395
|
+
|
|
396
|
+
var oTargetMapping = EDM_TYPE_MAPPING[oProperty === null || oProperty === void 0 ? void 0 : oProperty.type] || (dataType ? EDM_TYPE_MAPPING[dataType] : undefined);
|
|
397
|
+
var propertyTypeConfig = {
|
|
398
|
+
type: oTargetMapping.type,
|
|
399
|
+
constraints: {},
|
|
400
|
+
formatOptions: {}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
if (isProperty(oProperty)) {
|
|
404
|
+
var _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oTargetMapping$const6, _oProperty$annotation9, _oProperty$annotation10, _oProperty$annotation11, _oProperty$annotation12, _oTargetMapping$const7, _oProperty$annotation13, _oProperty$annotation14, _oProperty$annotation15, _oProperty$annotation16, _oTargetMapping$const8, _annotations, _annotations$Common;
|
|
405
|
+
|
|
406
|
+
propertyTypeConfig.constraints = {
|
|
407
|
+
scale: (_oTargetMapping$const2 = oTargetMapping.constraints) !== null && _oTargetMapping$const2 !== void 0 && _oTargetMapping$const2.$Scale ? oProperty.scale : undefined,
|
|
408
|
+
precision: (_oTargetMapping$const3 = oTargetMapping.constraints) !== null && _oTargetMapping$const3 !== void 0 && _oTargetMapping$const3.$Precision ? oProperty.precision : undefined,
|
|
409
|
+
maxLength: (_oTargetMapping$const4 = oTargetMapping.constraints) !== null && _oTargetMapping$const4 !== void 0 && _oTargetMapping$const4.$MaxLength ? oProperty.maxLength : undefined,
|
|
410
|
+
nullable: (_oTargetMapping$const5 = oTargetMapping.constraints) !== null && _oTargetMapping$const5 !== void 0 && _oTargetMapping$const5.$Nullable ? oProperty.nullable : undefined,
|
|
411
|
+
minimum: (_oTargetMapping$const6 = oTargetMapping.constraints) !== null && _oTargetMapping$const6 !== void 0 && _oTargetMapping$const6["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_oProperty$annotation9 = oProperty.annotations) === null || _oProperty$annotation9 === void 0 ? void 0 : (_oProperty$annotation10 = _oProperty$annotation9.Validation) === null || _oProperty$annotation10 === void 0 ? void 0 : _oProperty$annotation10.Minimum) ? "".concat((_oProperty$annotation11 = oProperty.annotations) === null || _oProperty$annotation11 === void 0 ? void 0 : (_oProperty$annotation12 = _oProperty$annotation11.Validation) === null || _oProperty$annotation12 === void 0 ? void 0 : _oProperty$annotation12.Minimum) : undefined,
|
|
412
|
+
maximum: (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_oProperty$annotation13 = oProperty.annotations) === null || _oProperty$annotation13 === void 0 ? void 0 : (_oProperty$annotation14 = _oProperty$annotation13.Validation) === null || _oProperty$annotation14 === void 0 ? void 0 : _oProperty$annotation14.Maximum) ? "".concat((_oProperty$annotation15 = oProperty.annotations) === null || _oProperty$annotation15 === void 0 ? void 0 : (_oProperty$annotation16 = _oProperty$annotation15.Validation) === null || _oProperty$annotation16 === void 0 ? void 0 : _oProperty$annotation16.Maximum) : undefined,
|
|
413
|
+
isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const8 = oTargetMapping.constraints) !== null && _oTargetMapping$const8 !== void 0 && _oTargetMapping$const8["@com.sap.vocabularies.Common.v1.IsDigitSequence"] && (_annotations = oProperty.annotations) !== null && _annotations !== void 0 && (_annotations$Common = _annotations.Common) !== null && _annotations$Common !== void 0 && _annotations$Common.IsDigitSequence ? true : undefined
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
propertyTypeConfig.formatOptions = {
|
|
418
|
+
parseAsString: (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t = propertyTypeConfig.type) === null || _propertyTypeConfig$t === void 0 ? void 0 : _propertyTypeConfig$t.indexOf("sap.ui.model.odata.type.Int")) === 0 || (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t2 = propertyTypeConfig.type) === null || _propertyTypeConfig$t2 === void 0 ? void 0 : _propertyTypeConfig$t2.indexOf("sap.ui.model.odata.type.Double")) === 0 ? false : undefined,
|
|
419
|
+
emptyString: (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t3 = propertyTypeConfig.type) === null || _propertyTypeConfig$t3 === void 0 ? void 0 : _propertyTypeConfig$t3.indexOf("sap.ui.model.odata.type.Int")) === 0 || (propertyTypeConfig === null || propertyTypeConfig === void 0 ? void 0 : (_propertyTypeConfig$t4 = propertyTypeConfig.type) === null || _propertyTypeConfig$t4 === void 0 ? void 0 : _propertyTypeConfig$t4.indexOf("sap.ui.model.odata.type.Double")) === 0 ? "" : undefined,
|
|
420
|
+
parseKeepsEmptyString: propertyTypeConfig.type === "sap.ui.model.odata.type.String" ? true : undefined
|
|
421
|
+
};
|
|
422
|
+
return propertyTypeConfig;
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
_exports.getTypeConfig = getTypeConfig;
|
|
426
|
+
|
|
392
427
|
var getBindingWithUnitOrCurrency = function (oPropertyDataModelPath, propertyBindingExpression) {
|
|
393
428
|
var _oPropertyDefinition$5, _oPropertyDefinition$6, _unit, _oPropertyDefinition$7, _oPropertyDefinition$8;
|
|
394
429
|
|
|
@@ -487,6 +522,39 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers
|
|
|
487
522
|
};
|
|
488
523
|
|
|
489
524
|
_exports.getTargetEntitySet = getTargetEntitySet;
|
|
525
|
+
|
|
526
|
+
var isCollectionField = function (oDataModelPath) {
|
|
527
|
+
var _oDataModelPath$navig;
|
|
528
|
+
|
|
529
|
+
if ((_oDataModelPath$navig = oDataModelPath.navigationProperties) !== null && _oDataModelPath$navig !== void 0 && _oDataModelPath$navig.length) {
|
|
530
|
+
var hasOneToManyNavigation = (oDataModelPath === null || oDataModelPath === void 0 ? void 0 : oDataModelPath.navigationProperties.findIndex(function (oNav) {
|
|
531
|
+
if (oNav.isCollection) {
|
|
532
|
+
var _oDataModelPath$conte, _oDataModelPath$conte2;
|
|
533
|
+
|
|
534
|
+
if ((_oDataModelPath$conte = oDataModelPath.contextLocation) !== null && _oDataModelPath$conte !== void 0 && (_oDataModelPath$conte2 = _oDataModelPath$conte.navigationProperties) !== null && _oDataModelPath$conte2 !== void 0 && _oDataModelPath$conte2.length) {
|
|
535
|
+
var _oDataModelPath$conte3;
|
|
536
|
+
|
|
537
|
+
//we check the one to many nav is not already part of the context
|
|
538
|
+
return ((_oDataModelPath$conte3 = oDataModelPath.contextLocation) === null || _oDataModelPath$conte3 === void 0 ? void 0 : _oDataModelPath$conte3.navigationProperties.findIndex(function (oContextNav) {
|
|
539
|
+
return oContextNav.name === oNav.name;
|
|
540
|
+
})) === -1;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return true;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
return false;
|
|
547
|
+
})) > -1;
|
|
548
|
+
|
|
549
|
+
if (hasOneToManyNavigation) {
|
|
550
|
+
return true;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
return false;
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
_exports.isCollectionField = isCollectionField;
|
|
490
558
|
return _exports;
|
|
491
559
|
}, false);
|
|
492
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJuYW1lcyI6WyJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJvRGF0YU1vZGVsT2JqZWN0UGF0aCIsImJBc09iamVjdCIsImNvbXBpbGVCaW5kaW5nIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJVSSIsIklzRWRpdGFibGUiLCJvUHJvcGVydHkiLCJpc1BhdGhFeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJvciIsIm5vdCIsImlzQ29tcHV0ZWQiLCJpc0tleSIsImlzSW1tdXRhYmxlIiwiSXNUcmFuc2llbnRCaW5kaW5nIiwiYW5kIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsImJNZWFzdXJlUmVhZE9ubHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsInJlYWRPbmx5RXhwcmVzc2lvbiIsImVkaXRNb2RlRXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0T2JqZWN0IiwiY3VycmVuY3kiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJtZWFzdXJlIiwiVW5pdCIsImlzVHJ1dGh5IiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJJc1RvdGFsIiwiY29uc3RhbnQiLCJpZlVuaXRFZGl0YWJsZSIsInNFZGl0YWJsZVZhbHVlIiwic05vbkVkaXRhYmxlVmFsdWUiLCJnZXREaXNwbGF5TW9kZSIsIm9FbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5VHlwZSIsIm9UZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwic0Rpc3BsYXlWYWx1ZSIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsIm91dEV4cHJlc3Npb24iLCJfdHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiJFNjYWxlIiwic2NhbGUiLCJ1bmRlZmluZWQiLCIkUHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiJE1heExlbmd0aCIsIm1heExlbmd0aCIsIiROdWxsYWJsZSIsIm51bGxhYmxlIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJpc05hTiIsIm1pbmltdW0iLCJNYXhpbXVtIiwibWF4aW11bSIsImluZGV4T2YiLCJmb3JtYXRPcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiSXNEaWdpdFNlcXVlbmNlIiwiaXNEaWdpdFNlcXVlbmNlIiwiZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoUGVyY2VudGFnZSIsImNvbXBsZXhUeXBlIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0RXhwcmVzc2lvbkJpbmRpbmciLCJleHByZXNzaW9uIiwiZ2V0VGFyZ2V0RW50aXR5U2V0Iiwib0RhdGFNb2RlbFBhdGgiLCJnZXRUYXJnZXRFbnRpdHlTZXRQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbURPLE1BQU1BLGdCQUFxQyxHQUFHO0FBQ3BELG1CQUFlO0FBQUVDLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBRHFDO0FBRXBELGdCQUFZO0FBQUVBLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBRndDO0FBR3BELGdCQUFZO0FBQUVBLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBSHdDO0FBSXBELDBCQUFzQjtBQUNyQkMsTUFBQUEsV0FBVyxFQUFFO0FBQ1osc0JBQWM7QUFERixPQURRO0FBSXJCRCxNQUFBQSxJQUFJLEVBQUU7QUFKZSxLQUo4QjtBQVVwRCxtQkFBZTtBQUNkQyxNQUFBQSxXQUFXLEVBQUU7QUFDWixxREFBNkMsU0FEakM7QUFFWiw4RUFBc0Usa0JBRjFEO0FBR1oscURBQTZDLFNBSGpDO0FBSVosOEVBQXNFLGtCQUoxRDtBQUtaLHNCQUFjLFdBTEY7QUFNWixrQkFBVTtBQU5FLE9BREM7QUFTZEQsTUFBQUEsSUFBSSxFQUFFO0FBVFEsS0FWcUM7QUFxQnBELGtCQUFjO0FBQUVBLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBckJzQztBQXNCcEQsZ0JBQVk7QUFBRUEsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0F0QndDO0FBdUJwRCxpQkFBYTtBQUFFQSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQXZCdUM7QUF3QnBELGlCQUFhO0FBQUVBLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBeEJ1QztBQXlCcEQsaUJBQWE7QUFBRUEsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0F6QnVDO0FBMEJwRCxpQkFBYTtBQUFFQSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQTFCdUM7QUEyQnBELGtCQUFjO0FBQUVBLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBM0JzQztBQTRCcEQsa0JBQWM7QUFBRUEsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0E1QnNDO0FBNkJwRCxrQkFBYztBQUNiQyxNQUFBQSxXQUFXLEVBQUU7QUFDWiwyREFBbUQsaUJBRHZDO0FBRVosc0JBQWMsV0FGRjtBQUdaLHFCQUFhO0FBSEQsT0FEQTtBQU1iRCxNQUFBQSxJQUFJLEVBQUU7QUFOTyxLQTdCc0M7QUFxQ3BELHFCQUFpQjtBQUNoQkMsTUFBQUEsV0FBVyxFQUFFO0FBQ1osc0JBQWM7QUFERixPQURHO0FBSWhCRCxNQUFBQSxJQUFJLEVBQUU7QUFKVTtBQXJDbUMsR0FBOUM7QUE2Q1A7Ozs7Ozs7Ozs7OztBQVNPLE1BQU1FLHFCQUFxQixHQUFHLFVBQ3BDQyxhQURvQyxFQUswQjtBQUFBLFFBSDlEQyxtQkFHOEQsdUVBSG5DLElBR21DO0FBQUEsUUFGOURDLG9CQUU4RDtBQUFBLFFBRDlEQyxTQUM4RCx1RUFEekMsS0FDeUM7O0FBQzlELFFBQUksQ0FBQ0gsYUFBRCxJQUFrQixPQUFPQSxhQUFQLEtBQXlCLFFBQS9DLEVBQXlEO0FBQ3hELGFBQU9JLGNBQWMsQ0FBQyxLQUFELENBQXJCO0FBQ0E7O0FBQ0QsUUFBSUMsMkJBQXdGLEdBQUcsSUFBL0Y7O0FBQ0EsUUFBSUosbUJBQW1CLEtBQUssSUFBNUIsRUFBa0M7QUFDakNJLE1BQUFBLDJCQUEyQixHQUFHQyxNQUFNLENBQUNDLHVCQUF1QixDQUFDTixtQkFBRCxDQUF4QixFQUErQyxLQUEvQyxFQUFzRE8sRUFBRSxDQUFDQyxVQUF6RCxDQUFwQztBQUNBOztBQUVELFFBQU1DLFNBQW1CLEdBQUlDLGdCQUFnQixDQUFDWCxhQUFELENBQWhCLElBQW1DQSxhQUFhLENBQUNZLE9BQWxELElBQStEWixhQUEzRixDQVQ4RCxDQVU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxRQUFNYSx5QkFBeUIsR0FBR0MsZUFBZSxDQUFDWixvQkFBRCxFQUF1QkYsYUFBdkIsQ0FBakQ7QUFDQSxRQUFNZSxrQkFBa0IsR0FBR1QsTUFBTSxDQUNoQ1UsRUFBRSxDQUNEQyxHQUFHLENBQUNKLHlCQUFELENBREYsRUFFREssVUFBVSxDQUFDUixTQUFELENBRlQsRUFHRFMsS0FBSyxDQUFDVCxTQUFELENBSEosRUFJRFUsV0FBVyxDQUFDVixTQUFELENBSlYsRUFLREgsdUJBQXVCLENBQUNHLFNBQUQsQ0FMdEIsQ0FEOEIsRUFRaENKLE1BQU0sQ0FBQ1UsRUFBRSxDQUFDRSxVQUFVLENBQUNSLFNBQUQsQ0FBWCxFQUF3QkgsdUJBQXVCLENBQUNHLFNBQUQsQ0FBL0MsQ0FBSCxFQUFnRSxLQUFoRSxFQUF1RUYsRUFBRSxDQUFDYSxrQkFBMUUsQ0FSMEIsRUFTaENiLEVBQUUsQ0FBQ0MsVUFUNkIsQ0FBakM7O0FBV0EsUUFBSU4sU0FBSixFQUFlO0FBQ2QsYUFBT21CLEdBQUcsQ0FBQ1Asa0JBQUQsRUFBcUJWLDJCQUFyQixDQUFWO0FBQ0E7O0FBQ0QsV0FBT0QsY0FBYyxDQUFDa0IsR0FBRyxDQUFDUCxrQkFBRCxFQUFxQlYsMkJBQXJCLENBQUosQ0FBckI7QUFDQSxHQXpDTTtBQTJDUDs7Ozs7Ozs7Ozs7O0FBUU8sTUFBTWtCLG9CQUFvQixHQUFHLFVBQ25DdkIsYUFEbUMsRUFFbkNDLG1CQUZtQyxFQUkyQjtBQUFBLFFBRDlERSxTQUM4RCx1RUFEekMsS0FDeUM7O0FBQzlELFFBQUksQ0FBQ0gsYUFBRCxJQUFrQixPQUFPQSxhQUFQLEtBQXlCLFFBQS9DLEVBQXlEO0FBQ3hELGFBQU9JLGNBQWMsQ0FBQyxJQUFELENBQXJCO0FBQ0E7O0FBQ0QsUUFBSW9CLDBCQUF1RixHQUFHLElBQTlGOztBQUNBLFFBQUl2QixtQkFBbUIsS0FBSyxJQUE1QixFQUFrQztBQUNqQ3VCLE1BQUFBLDBCQUEwQixHQUFHbEIsTUFBTSxDQUFDbUIsb0JBQW9CLENBQUN4QixtQkFBRCxDQUFyQixFQUE0QyxLQUE1QyxFQUFtRCxJQUFuRCxDQUFuQztBQUNBOztBQUVELFFBQU1TLFNBQW1CLEdBQUlDLGdCQUFnQixDQUFDWCxhQUFELENBQWhCLElBQW1DQSxhQUFhLENBQUNZLE9BQWxELElBQStEWixhQUEzRixDQVQ4RCxDQVU5RDtBQUNBOztBQUNBLFFBQU0wQixpQkFBaUIsR0FBR3BCLE1BQU0sQ0FBQ21CLG9CQUFvQixDQUFDZixTQUFELENBQXJCLEVBQWtDLEtBQWxDLEVBQXlDLElBQXpDLENBQWhDOztBQUNBLFFBQUlQLFNBQUosRUFBZTtBQUNkLGFBQU9tQixHQUFHLENBQUNJLGlCQUFELEVBQW9CRiwwQkFBcEIsQ0FBVjtBQUNBOztBQUNELFdBQU9wQixjQUFjLENBQUNrQixHQUFHLENBQUNJLGlCQUFELEVBQW9CRiwwQkFBcEIsQ0FBSixDQUFyQjtBQUNBLEdBckJNO0FBdUJQOzs7Ozs7Ozs7Ozs7O0FBU08sTUFBTUcsV0FBVyxHQUFHLFVBQzFCM0IsYUFEMEIsRUFFMUJFLG9CQUYwQixFQU1rQztBQUFBLFFBSDVEMEIsZ0JBRzRELHVFQUhoQyxLQUdnQztBQUFBLFFBRjVEekIsU0FFNEQsdUVBRnZDLEtBRXVDO0FBQUEsUUFENURGLG1CQUM0RCx1RUFEakMsSUFDaUM7O0FBQzVELFFBQUksQ0FBQ0QsYUFBRCxJQUFrQixPQUFPQSxhQUFQLEtBQXlCLFFBQS9DLEVBQXlEO0FBQ3hELGFBQU8sU0FBUDtBQUNBOztBQUNELFFBQU1VLFNBQW1CLEdBQUlDLGdCQUFnQixDQUFDWCxhQUFELENBQWhCLElBQW1DQSxhQUFhLENBQUNZLE9BQWxELElBQStEWixhQUEzRixDQUo0RCxDQUs1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsUUFBTWUsa0JBQWtCLEdBQUdoQixxQkFBcUIsQ0FDL0NDLGFBRCtDLEVBRS9DQyxtQkFGK0MsRUFHL0NDLG9CQUgrQyxFQUkvQyxJQUorQyxDQUFoRDtBQU9BLFFBQU13QixpQkFBaUIsR0FBR0gsb0JBQW9CLENBQUN2QixhQUFELEVBQWdCQyxtQkFBaEIsRUFBcUMsSUFBckMsQ0FBOUM7QUFDQSxRQUFNNEIsMEJBQTBCLEdBQUdDLDZCQUE2QixDQUFDcEIsU0FBRCxDQUFoRTtBQUNBLFFBQU1xQixZQUFZLEdBQUdGLDBCQUEwQixJQUFJRyx5QkFBeUIsQ0FBQ3RCLFNBQUQsQ0FBNUU7QUFDQSxRQUFJdUIsZ0JBQStDLEdBQUcsVUFBdEQ7O0FBQ0EsUUFBSUYsWUFBSixFQUFrQjtBQUNqQkUsTUFBQUEsZ0JBQWdCLEdBQUczQixNQUFNLENBQ3hCVSxFQUFFLENBQUNrQixvQkFBb0IsQ0FBQ0gsWUFBRCxDQUFyQixFQUFxQ2IsVUFBVSxDQUFDYSxZQUFELENBQS9DLEVBQStESCxnQkFBL0QsQ0FEc0IsRUFFeEIsa0JBRndCLEVBR3hCLFVBSHdCLENBQXpCO0FBS0E7O0FBQ0QsUUFBTU8sa0JBQWtCLEdBQUduQixFQUFFLENBQUNrQixvQkFBb0IsQ0FBQ3hCLFNBQUQsQ0FBckIsRUFBa0N3QixvQkFBb0IsQ0FBQ2pDLG1CQUFELENBQXRELENBQTdCLENBN0I0RCxDQStCNUQ7QUFDQTs7QUFDQSxRQUFNbUMsa0JBQWtCLEdBQUc5QixNQUFNLENBQ2hDb0IsaUJBRGdDLEVBRWhDcEIsTUFBTSxDQUNMUyxrQkFESyxFQUVMa0IsZ0JBRkssRUFHTDNCLE1BQU0sQ0FBQ2dCLEdBQUcsQ0FBQyxDQUFDZSxVQUFVLENBQUNGLGtCQUFELENBQVgsSUFBbUNBLGtCQUFwQyxFQUF3RDNCLEVBQUUsQ0FBQ0MsVUFBM0QsQ0FBSixFQUE0RSxVQUE1RSxFQUF3RixTQUF4RixDQUhELENBRjBCLEVBT2hDSCxNQUFNLENBQUNFLEVBQUUsQ0FBQ0MsVUFBSixFQUFnQixVQUFoQixFQUE0QixTQUE1QixDQVAwQixDQUFqQzs7QUFTQSxRQUFJTixTQUFKLEVBQWU7QUFDZCxhQUFPaUMsa0JBQVA7QUFDQTs7QUFDRCxXQUFPaEMsY0FBYyxDQUFDZ0Msa0JBQUQsQ0FBckI7QUFDQSxHQXBETTs7OztBQXNEQSxNQUFNRSxnQ0FBZ0MsR0FBRyxVQUFTQyw0QkFBVCxFQUF1RjtBQUFBOztBQUN0SSxRQUFNQyxtQkFBbUIsR0FBR0QsNEJBQTRCLENBQUNFLFlBQXpEO0FBQ0EsUUFBTUMsUUFBUSw0QkFBR0YsbUJBQW1CLENBQUNHLFdBQXZCLG9GQUFHLHNCQUFpQ0MsUUFBcEMsMkRBQUcsdUJBQTJDQyxXQUE1RDtBQUNBLFFBQU1DLE9BQU8sR0FBR0osUUFBUSxHQUFHQSxRQUFILDZCQUFjRixtQkFBbUIsQ0FBQ0csV0FBbEMscUZBQWMsdUJBQWlDQyxRQUEvQywyREFBYyx1QkFBMkNHLElBQWpGOztBQUNBLFFBQUlELE9BQUosRUFBYTtBQUNaLGFBQU8xQyxjQUFjLENBQUNZLEVBQUUsQ0FBQ2dDLFFBQVEsQ0FBQ0Msb0JBQW9CLENBQUNILE9BQUQsQ0FBckIsQ0FBVCxFQUFnRTdCLEdBQUcsQ0FBQ1QsRUFBRSxDQUFDMEMsT0FBSixDQUFuRSxDQUFILENBQXJCO0FBQ0EsS0FGRCxNQUVPO0FBQ04sYUFBTzlDLGNBQWMsQ0FBQytDLFFBQVEsQ0FBQyxJQUFELENBQVQsQ0FBckI7QUFDQTtBQUNELEdBVE07Ozs7QUFXQSxNQUFNQyxjQUFjLEdBQUcsVUFDN0JwRCxhQUQ2QixFQUU3QnFELGNBRjZCLEVBRzdCQyxpQkFINkIsRUFJRDtBQUM1QixRQUFNNUMsU0FBUyxHQUFJQyxnQkFBZ0IsQ0FBQ1gsYUFBRCxDQUFoQixJQUFtQ0EsYUFBYSxDQUFDWSxPQUFsRCxJQUErRFosYUFBakY7QUFDQSxRQUFNK0IsWUFBWSxHQUFHRCw2QkFBNkIsQ0FBQ3BCLFNBQUQsQ0FBN0IsSUFBNENzQix5QkFBeUIsQ0FBQ3RCLFNBQUQsQ0FBMUY7O0FBQ0EsUUFBSSxDQUFDcUIsWUFBTCxFQUFtQjtBQUNsQixhQUFPM0IsY0FBYyxDQUFDa0QsaUJBQUQsQ0FBckI7QUFDQTs7QUFDRCxRQUFNdkMsa0JBQWtCLEdBQUdPLEdBQUcsQ0FBQ0wsR0FBRyxDQUFDaUIsb0JBQW9CLENBQUNILFlBQUQsQ0FBckIsQ0FBSixFQUEwQ2QsR0FBRyxDQUFDQyxVQUFVLENBQUNhLFlBQUQsQ0FBWCxDQUE3QyxDQUE5QjtBQUNBLFdBQU8zQixjQUFjLENBQUNFLE1BQU0sQ0FBQ1Msa0JBQUQsRUFBcUJzQyxjQUFyQixFQUFxQ0MsaUJBQXJDLENBQVAsQ0FBckI7QUFDQSxHQVpNOzs7O0FBZUEsTUFBTUMsY0FBYyxHQUFHLFVBQVN2RCxhQUFULEVBQWtERSxvQkFBbEQsRUFBMkc7QUFBQTs7QUFDeEksUUFBSSxDQUFDRixhQUFELElBQWtCLE9BQU9BLGFBQVAsS0FBeUIsUUFBL0MsRUFBeUQ7QUFDeEQsYUFBTyxPQUFQO0FBQ0E7O0FBQ0QsUUFBTVUsU0FBUyxHQUFJQyxnQkFBZ0IsQ0FBQ1gsYUFBRCxDQUFoQixJQUFtQ0EsYUFBYSxDQUFDWSxPQUFsRCxJQUErRFosYUFBakY7QUFDQSxRQUFNd0QsV0FBVyxHQUFHdEQsb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDdUQsZ0JBQWpFO0FBQ0EsUUFBTUMsZUFBZSw0QkFBR2hELFNBQVMsQ0FBQ2lDLFdBQWIsb0ZBQUcsc0JBQXVCZ0IsTUFBMUIsMkRBQUcsdUJBQStCQyxJQUF2RDtBQUNBLFFBQU1DLDBCQUEwQixHQUM5QixPQUFPSCxlQUFQLEtBQTJCLFFBQTNCLEtBQXVDQSxlQUF2QyxhQUF1Q0EsZUFBdkMsZ0RBQXVDQSxlQUFlLENBQUVmLFdBQXhELG9GQUF1QyxzQkFBOEJuQyxFQUFyRSxxRkFBdUMsdUJBQWtDc0QsZUFBekUsMkRBQXVDLHVCQUFtREMsUUFBbkQsRUFBdkMsQ0FBRCxLQUNBUCxXQURBLGFBQ0FBLFdBREEsZ0RBQ0FBLFdBQVcsQ0FBRWIsV0FEYixvRkFDQSxzQkFBMEJuQyxFQUQxQixxRkFDQSx1QkFBOEJzRCxlQUQ5QiwyREFDQSx1QkFBK0NDLFFBQS9DLEVBREEsQ0FERDtBQUlBLFFBQUlDLGFBQWEsR0FBR04sZUFBZSxHQUFHLGtCQUFILEdBQXdCLE9BQTNEOztBQUNBLFFBQUlBLGVBQWUsSUFBSUcsMEJBQXZCLEVBQW1EO0FBQ2xELFVBQUlBLDBCQUEwQixLQUFLLGlDQUFuQyxFQUFzRTtBQUNyRUcsUUFBQUEsYUFBYSxHQUFHLGFBQWhCO0FBQ0EsT0FGRCxNQUVPLElBQUlILDBCQUEwQixLQUFLLGlDQUFuQyxFQUFzRTtBQUM1RUcsUUFBQUEsYUFBYSxHQUFHLGtCQUFoQjtBQUNBLE9BRk0sTUFFQSxJQUFJSCwwQkFBMEIsS0FBSyxxQ0FBbkMsRUFBMEU7QUFDaEZHLFFBQUFBLGFBQWEsR0FBRyxPQUFoQjtBQUNBLE9BRk0sTUFFQTtBQUNOO0FBQ0FBLFFBQUFBLGFBQWEsR0FBRyxrQkFBaEI7QUFDQTtBQUNEOztBQUNELFdBQU9BLGFBQVA7QUFDQSxHQXpCTTs7OztBQTJCQSxNQUFNQyxlQUFlLEdBQUcsVUFDOUJqRSxhQUQ4QixFQUU5QmtFLGtCQUY4QixFQUc5QkMsaUJBSDhCLEVBSUY7QUFDNUIsUUFBTXpELFNBQVMsR0FBSUMsZ0JBQWdCLENBQUNYLGFBQUQsQ0FBaEIsSUFBbUNBLGFBQWEsQ0FBQ1ksT0FBbEQsSUFBK0RaLGFBQWpGO0FBRUEsV0FBT29FLFlBQVksQ0FBQzFELFNBQUQsQ0FBWixHQUNKTixjQUFjLENBQUM4RCxrQkFBRCxDQURWLEdBRUo5RCxjQUFjLENBQUNFLE1BQU0sQ0FBQytELEtBQUssQ0FBQ0YsaUJBQUQsRUFBb0IsVUFBcEIsQ0FBTixFQUF1QyxPQUF2QyxFQUFnREQsa0JBQWhELENBQVAsQ0FGakI7QUFHQSxHQVZNOzs7O0FBWUEsTUFBTUkseUJBQXlCLEdBQUcsVUFBUzVELFNBQVQsRUFBOEI2RCx5QkFBOUIsRUFBaUc7QUFDekksUUFBTUMsYUFBK0MsR0FBR0QseUJBQXhEOztBQUNBLFFBQUk3RCxTQUFTLENBQUMrRCxLQUFWLEtBQW9CLFVBQXhCLEVBQW9DO0FBQ25DLFVBQU1DLGNBQWMsR0FBRzlFLGdCQUFnQixDQUFFYyxTQUFELENBQXdCYixJQUF6QixDQUF2Qzs7QUFDQSxVQUFJNkUsY0FBSixFQUFvQjtBQUFBOztBQUNuQkYsUUFBQUEsYUFBYSxDQUFDM0UsSUFBZCxHQUFxQjZFLGNBQWMsQ0FBQzdFLElBQXBDOztBQUNBLFlBQUk2RSxjQUFjLENBQUM1RSxXQUFuQixFQUFnQztBQUFBOztBQUMvQjBFLFVBQUFBLGFBQWEsQ0FBQzFFLFdBQWQsR0FBNEIsRUFBNUI7O0FBQ0EsY0FBSTRFLGNBQWMsQ0FBQzVFLFdBQWYsQ0FBMkI2RSxNQUEzQixJQUFxQ2pFLFNBQVMsQ0FBQ2tFLEtBQVYsS0FBb0JDLFNBQTdELEVBQXdFO0FBQ3ZFTCxZQUFBQSxhQUFhLENBQUMxRSxXQUFkLENBQTBCOEUsS0FBMUIsR0FBa0NsRSxTQUFTLENBQUNrRSxLQUE1QztBQUNBOztBQUNELGNBQUlGLGNBQWMsQ0FBQzVFLFdBQWYsQ0FBMkJnRixVQUEzQixJQUF5Q3BFLFNBQVMsQ0FBQ3FFLFNBQVYsS0FBd0JGLFNBQXJFLEVBQWdGO0FBQy9FTCxZQUFBQSxhQUFhLENBQUMxRSxXQUFkLENBQTBCaUYsU0FBMUIsR0FBc0NyRSxTQUFTLENBQUNxRSxTQUFoRDtBQUNBOztBQUNELGNBQUlMLGNBQWMsQ0FBQzVFLFdBQWYsQ0FBMkJrRixVQUEzQixJQUF5Q3RFLFNBQVMsQ0FBQ3VFLFNBQVYsS0FBd0JKLFNBQXJFLEVBQWdGO0FBQy9FTCxZQUFBQSxhQUFhLENBQUMxRSxXQUFkLENBQTBCbUYsU0FBMUIsR0FBc0N2RSxTQUFTLENBQUN1RSxTQUFoRDtBQUNBOztBQUNELGNBQUlQLGNBQWMsQ0FBQzVFLFdBQWYsQ0FBMkJvRixTQUEzQixJQUF3Q3hFLFNBQVMsQ0FBQ3lFLFFBQVYsS0FBdUIsS0FBbkUsRUFBMEU7QUFDekVYLFlBQUFBLGFBQWEsQ0FBQzFFLFdBQWQsQ0FBMEJxRixRQUExQixHQUFxQ3pFLFNBQVMsQ0FBQ3lFLFFBQS9DO0FBQ0E7O0FBQ0QsY0FDQ1QsY0FBYyxDQUFDNUUsV0FBZixDQUEyQiwyQ0FBM0IsS0FDQSwyQkFBQVksU0FBUyxDQUFDaUMsV0FBViw0R0FBdUJ5QyxVQUF2QixrRkFBbUNDLE9BQW5DLE1BQStDUixTQUQvQyxJQUVBLENBQUNTLEtBQUssQ0FBQzVFLFNBQVMsQ0FBQ2lDLFdBQVYsQ0FBc0J5QyxVQUF0QixDQUFpQ0MsT0FBbEMsQ0FIUCxFQUlFO0FBQ0RiLFlBQUFBLGFBQWEsQ0FBQzFFLFdBQWQsQ0FBMEJ5RixPQUExQixhQUF1QzdFLFNBQVMsQ0FBQ2lDLFdBQVYsQ0FBc0J5QyxVQUF0QixDQUFpQ0MsT0FBeEU7QUFDQTs7QUFDRCxjQUNDWCxjQUFjLENBQUM1RSxXQUFmLENBQTJCLDJDQUEzQixLQUNBLDJCQUFBWSxTQUFTLENBQUNpQyxXQUFWLDRHQUF1QnlDLFVBQXZCLGtGQUFtQ0ksT0FBbkMsTUFBK0NYLFNBRC9DLElBRUEsQ0FBQ1MsS0FBSyxDQUFDNUUsU0FBUyxDQUFDaUMsV0FBVixDQUFzQnlDLFVBQXRCLENBQWlDSSxPQUFsQyxDQUhQLEVBSUU7QUFDRGhCLFlBQUFBLGFBQWEsQ0FBQzFFLFdBQWQsQ0FBMEIyRixPQUExQixhQUF1Qy9FLFNBQVMsQ0FBQ2lDLFdBQVYsQ0FBc0J5QyxVQUF0QixDQUFpQ0ksT0FBeEU7QUFDQTtBQUNEOztBQUNELFlBQUksQ0FBQWhCLGFBQWEsU0FBYixJQUFBQSxhQUFhLFdBQWIsbUNBQUFBLGFBQWEsQ0FBRTNFLElBQWYsNEVBQXFCNkYsT0FBckIsQ0FBNkIsNkJBQTdCLE9BQWdFLENBQXBFLEVBQXVFO0FBQ3RFLGNBQUksQ0FBQ2xCLGFBQWEsQ0FBQ21CLGFBQW5CLEVBQWtDO0FBQ2pDbkIsWUFBQUEsYUFBYSxDQUFDbUIsYUFBZCxHQUE4QixFQUE5QjtBQUNBOztBQUNEbkIsVUFBQUEsYUFBYSxDQUFDbUIsYUFBZCxHQUE4QkMsTUFBTSxDQUFDQyxNQUFQLENBQWNyQixhQUFhLENBQUNtQixhQUE1QixFQUEyQztBQUN4RUcsWUFBQUEsYUFBYSxFQUFFLEtBRHlEO0FBRXhFQyxZQUFBQSxXQUFXLEVBQUU7QUFGMkQsV0FBM0MsQ0FBOUI7QUFJQTs7QUFDRCxZQUFJdkIsYUFBYSxDQUFDM0UsSUFBZCxLQUF1QixnQ0FBM0IsRUFBNkQ7QUFBQTs7QUFDNUQsY0FBSSxDQUFDMkUsYUFBYSxDQUFDbUIsYUFBbkIsRUFBa0M7QUFDakNuQixZQUFBQSxhQUFhLENBQUNtQixhQUFkLEdBQThCLEVBQTlCO0FBQ0E7O0FBQ0RuQixVQUFBQSxhQUFhLENBQUNtQixhQUFkLENBQTRCSyxxQkFBNUIsR0FBb0QsSUFBcEQ7O0FBRUEsY0FDQywwQkFBQXRCLGNBQWMsQ0FBQzVFLFdBQWYsZ0ZBQTZCLGlEQUE3QixpQ0FDQVksU0FBUyxDQUFDaUMsV0FEVixxRkFDQSx1QkFBdUJnQixNQUR2QiwyREFDQSx1QkFBK0JzQyxlQUQvQixDQURELEVBR0U7QUFDRHpCLFlBQUFBLGFBQWEsQ0FBQzFFLFdBQWQsQ0FBMEJvRyxlQUExQixHQUE0QyxJQUE1QztBQUNBO0FBQ0Q7O0FBQ0QsWUFBSSxDQUFBMUIsYUFBYSxTQUFiLElBQUFBLGFBQWEsV0FBYixvQ0FBQUEsYUFBYSxDQUFFM0UsSUFBZiw4RUFBcUI2RixPQUFyQixDQUE2QixnQ0FBN0IsT0FBbUUsQ0FBdkUsRUFBMEU7QUFDekUsY0FBSSxDQUFDbEIsYUFBYSxDQUFDbUIsYUFBbkIsRUFBa0M7QUFDakNuQixZQUFBQSxhQUFhLENBQUNtQixhQUFkLEdBQThCLEVBQTlCO0FBQ0E7O0FBQ0RuQixVQUFBQSxhQUFhLENBQUNtQixhQUFkLEdBQThCQyxNQUFNLENBQUNDLE1BQVAsQ0FBY3JCLGFBQWEsQ0FBQ21CLGFBQTVCLEVBQTJDO0FBQ3hFRyxZQUFBQSxhQUFhLEVBQUUsS0FEeUQ7QUFFeEVDLFlBQUFBLFdBQVcsRUFBRTtBQUYyRCxXQUEzQyxDQUE5QjtBQUlBO0FBQ0Q7QUFDRDs7QUFDRCxXQUFPdkIsYUFBUDtBQUNBLEdBckVNOzs7O0FBdUVBLE1BQU0yQiw0QkFBNEIsR0FBRyxVQUMzQ0Msc0JBRDJDLEVBRTNDN0IseUJBRjJDLEVBR3RCO0FBQUE7O0FBQ3JCLFFBQU0vQixtQkFBbUIsR0FBRzRELHNCQUFzQixDQUFDM0QsWUFBbkQ7QUFDQSxRQUFJNEQsSUFBSSw2QkFBRzdELG1CQUFtQixDQUFDRyxXQUF2QixxRkFBRyx1QkFBaUNDLFFBQXBDLDJEQUFHLHVCQUEyQ0csSUFBdEQ7QUFDQSxRQUFNdUQsZ0JBQWdCLEdBQUdDLHVCQUF1QixDQUMvQ0gsc0JBQXNCLENBQUNJLGVBRHdCLEVBRS9DSixzQkFBc0IsQ0FBQ0ssb0JBRndCLENBQXZCLENBR3ZCQyxHQUh1QixDQUduQixVQUFBQyxFQUFFO0FBQUEsYUFBSUEsRUFBRSxDQUFDQyxJQUFQO0FBQUEsS0FIaUIsQ0FBekI7QUFJQXJDLElBQUFBLHlCQUF5QixHQUFHRCx5QkFBeUIsQ0FBQzlCLG1CQUFELEVBQXNCK0IseUJBQXRCLENBQXJEOztBQUNBLFFBQUksVUFBQThCLElBQUksVUFBSixzQ0FBTXRDLFFBQU4sUUFBcUIsR0FBekIsRUFBOEI7QUFDN0IsYUFBTzhDLFlBQVksQ0FBQyxDQUFDdEMseUJBQUQsQ0FBRCxFQUE4QnVDLGVBQWUsQ0FBQ0Msb0JBQTlDLENBQW5CO0FBQ0E7O0FBQ0QsUUFBTUMsV0FBVyxHQUFHWCxJQUFJLEdBQUcsOEJBQUgsR0FBb0Msa0NBQTVEO0FBQ0FBLElBQUFBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFILDZCQUFVN0QsbUJBQW1CLENBQUNHLFdBQTlCLHFGQUFVLHVCQUFpQ0MsUUFBM0MsMkRBQVUsdUJBQTJDQyxXQUFoRTtBQUNBLFFBQU1vRSxxQkFBcUIsR0FBSVosSUFBRCxDQUFjekYsT0FBZCxHQUMzQjBELHlCQUF5QixDQUFFK0IsSUFBRCxDQUFjekYsT0FBZixFQUF3QnFDLG9CQUFvQixDQUFDb0QsSUFBRCxFQUFPQyxnQkFBUCxDQUE1QyxDQURFLEdBRTFCckQsb0JBQW9CLENBQUNvRCxJQUFELEVBQU9DLGdCQUFQLENBRnhCO0FBR0EsV0FBT1ksa0JBQWtCLENBQUMsQ0FBQzNDLHlCQUFELEVBQTRCMEMscUJBQTVCLENBQUQsRUFBcURELFdBQXJELENBQXpCO0FBQ0EsR0FwQk07Ozs7QUFzQkEsTUFBTUcsc0JBQXNCLEdBQUcsVUFDckNoRCxpQkFEcUMsRUFJWTtBQUFBLFFBRmpEaUQsYUFFaUQsdUVBRnpCLE9BRXlCO0FBQUEsUUFEakRDLFVBQ2lELHVFQUQ1QixPQUM0QjtBQUNqRCxXQUFPakgsY0FBYyxDQUFDRSxNQUFNLENBQUMrRCxLQUFLLENBQUNGLGlCQUFELEVBQW9CLFNBQXBCLENBQU4sRUFBc0NpRCxhQUF0QyxFQUFxREMsVUFBckQsQ0FBUCxDQUFyQjtBQUNBLEdBTk07QUFRUDs7Ozs7Ozs7Ozs7QUFPTyxNQUFNQyxtQkFBbUIsR0FBRyxVQUFTQyxRQUFULEVBQXFDQyxVQUFyQyxFQUE2RjtBQUMvSCxRQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsT0FBN0IsRUFBc0M7QUFDckMsYUFBT0MsdUJBQXVCLENBQUNGLFVBQVUsQ0FBQ0MsT0FBWixDQUE5QjtBQUNBOztBQUNELFdBQU8sSUFBUDtBQUNBLEdBTE07O0FBTVBILEVBQUFBLG1CQUFtQixDQUFDSyxnQkFBcEIsR0FBdUMsSUFBdkM7QUFFQTs7Ozs7Ozs7OztBQU9PLE1BQU1DLHNCQUFzQixHQUFHLFVBQ3JDTCxRQURxQyxFQUVyQ0MsVUFGcUMsRUFHUjtBQUM3QixRQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0MsT0FBN0IsRUFBc0M7QUFDckMsYUFBT0ksMkJBQTJCLENBQUNMLFVBQVUsQ0FBQ0MsT0FBWixDQUFsQztBQUNBOztBQUNELFdBQU8sSUFBUDtBQUNBLEdBUk07O0FBU1BHLEVBQUFBLHNCQUFzQixDQUFDRCxnQkFBdkIsR0FBMEMsSUFBMUM7QUFFQTs7Ozs7Ozs7O0FBTU8sTUFBTUcsb0JBQW9CLEdBQUcsVUFBU0MsVUFBVCxFQUFpRTtBQUNwRyxXQUFPM0gsY0FBYyxDQUFDMkgsVUFBRCxDQUFyQjtBQUNBLEdBRk07QUFJUDs7Ozs7Ozs7OztBQU1PLE1BQU1DLGtCQUFrQixHQUFHLFVBQVNULFFBQVQsRUFBMkM7QUFDNUUsUUFBSUEsUUFBSixFQUFjO0FBQ2IsVUFBTVUsY0FBYyxHQUFHSiwyQkFBMkIsQ0FBQ04sUUFBRCxDQUFsRDtBQUNBLGFBQU9XLHNCQUFzQixDQUFDRCxjQUFELENBQTdCO0FBQ0E7O0FBRUQsV0FBTyxJQUFQO0FBQ0EsR0FQTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjRcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0aGFzVmFsdWVIZWxwLFxuXHRpc0NvbXB1dGVkLFxuXHRpc0ltbXV0YWJsZSxcblx0aXNLZXksXG5cdGlzUGF0aEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy90eXBlcy9FZG1cIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGdldFRhcmdldEVudGl0eVNldFBhdGgsXG5cdGlzUGF0aFVwZGF0YWJsZSxcblx0Z2V0UGF0aFJlbGF0aXZlTG9jYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNSZWFkT25seUV4cHJlc3Npb24sIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uLCBpc0Rpc2FibGVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eU9yUGF0aDxQPiA9IHN0cmluZyB8IFAgfCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxDb250ZXh0ID0ge1xuXHQka2luZDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSA9IHtcblx0Y29udGV4dDogQ29udGV4dDtcblx0YXJndW1lbnRzOiBhbnlbXTtcblx0JCR2YWx1ZUFzUHJvbWlzZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcIkVkbS5Cb29sZWFuXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Cb29sZWFuXCIgfSxcblx0XCJFZG0uQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiIH0sXG5cdFwiRWRtLkRhdGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVcIiB9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiJFByZWNpc2lvblwiOiBcInByZWNpc2lvblwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIjogXCJtaW5pbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1pbmltdW1FeGNsdXNpdmVcIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIjogXCJtYXhpbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1heGltdW1FeGNsdXNpdmVcIixcblx0XHRcdFwiJFByZWNpc2lvblwiOiBcInByZWNpc2lvblwiLFxuXHRcdFx0XCIkU2NhbGVcIjogXCJzY2FsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIlxuXHR9LFxuXHRcIkVkbS5Eb3VibGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiIH0sXG5cdFwiRWRtLkd1aWRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkd1aWRcIiB9LFxuXHRcIkVkbS5JbnQxNlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIiB9LFxuXHRcIkVkbS5JbnQzMlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIiB9LFxuXHRcIkVkbS5JbnQ2NFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB9LFxuXHRcIkVkbS5TQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIiB9LFxuXHRcIkVkbS5TaW5nbGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNpbmdsZVwiIH0sXG5cdFwiRWRtLlN0cmVhbVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uU3RyaW5nXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiOiBcImlzRGlnaXRTZXF1ZW5jZVwiLFxuXHRcdFx0XCIkTWF4TGVuZ3RoXCI6IFwibWF4TGVuZ3RoXCIsXG5cdFx0XHRcIiROdWxsYWJsZVwiOiBcIm51bGxhYmxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCJcblx0fSxcblx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCIkUHJlY2lzaW9uXCI6IFwicHJlY2lzaW9uXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVGltZU9mRGF5XCJcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0YWJsZVwiIGJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eVBhdGh9IG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIG9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIHtEYXRhTW9kZWxPYmplY3RQYXRofSBvRGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byB0aGlzIHByb3BlcnR5IG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlZGl0YWJsZSBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSA9IG51bGwsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0YkFzT2JqZWN0OiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiA9IHRydWU7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSBudWxsKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgVUkuSXNFZGl0YWJsZSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwgb1Byb3BlcnR5UGF0aCk7XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihcblx0XHRcdG5vdChpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSxcblx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5KVxuXHRcdCksXG5cdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5KSksIGZhbHNlLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdFVJLklzRWRpdGFibGVcblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlQmluZGluZyhhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIGJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eVBhdGh9IG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0ge2FueX0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIE9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIHtib29sZWFufSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0YkFzT2JqZWN0OiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKHRydWUpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPSB0cnVlO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgdHJ1ZSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5KSwgZmFsc2UsIHRydWUpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlQmluZGluZyhhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqIEBwYXJhbSB7UHJvcGVydHlQYXRofSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIHtEYXRhTW9kZWxPYmplY3RQYXRofSBvRGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIHtib29sZWFufSBiTWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIHtib29sZWFufSBiQXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtvYmplY3R9IG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEByZXR1cm5zIHtCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Yk1lYXN1cmVSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSxcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIFwiRGlzcGxheVwiO1xuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBlbmFibGVkID0+IERpc2FibGVkXG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkICYmIG5vdCBlZGl0YWJsZSA9PiBSZWFkT25seVxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZW5hYmxlZCAmJiBlZGl0YWJsZSA9PiBFZGl0YWJsZVxuXHQvLyBJZiB0aGVyZSBpcyBhbiBhc3NvY2lhdGVkIHVuaXQsIGFuZCBpdCBoYXMgYSBmaWVsZCBjb250cm9sIGFsc28gdXNlIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmdcblx0Ly8gaWYgdGhlIHVuaXQgZmllbGQgY29udHJvbCBpcyByZWFkb25seSAtPiBFZGl0YWJsZVJlYWRPbmx5XG5cdC8vIG90aGVyd2lzZSAtPiBFZGl0YWJsZVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWVcblx0KSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj47XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlKSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj47XG5cdGNvbnN0IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4gPSBcIkVkaXRhYmxlXCI7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5KSwgaXNDb21wdXRlZCh1bml0UHJvcGVydHkpLCBiTWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHRcdFx0XCJFZGl0YWJsZVwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCByZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihvUHJvcGVydHkpLCBpc1JlYWRPbmx5RXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSk7XG5cblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGZyb20gYSBub24tdXBkYXRhYmxlIGVudGl0eSA9PiBSZWFkIG9ubHkgbW9kZSwgcHJldmlvdXNseSBjYWxjdWxhdGVkIGVkaXQgTW9kZSBpcyBpZ25vcmVkXG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBmcm9tIGFuIHVwZGF0YWJsZSBlbnRpdHkgPT4gcHJldmlvdXNseSBjYWxjdWxhdGVkIGVkaXQgTW9kZSBleHByZXNzaW9uXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRlbmFibGVkRXhwcmVzc2lvbixcblx0XHRpZkVsc2UoXG5cdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRyZXN1bHRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgVUkuSXNFZGl0YWJsZSksIFwiUmVhZE9ubHlcIiwgXCJEaXNwbGF5XCIpXG5cdFx0KSxcblx0XHRpZkVsc2UoVUkuSXNFZGl0YWJsZSwgXCJEaXNhYmxlZFwiLCBcIkRpc3BsYXlcIilcblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgY3VycmVuY3kgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGNvbnN0IG1lYXN1cmUgPSBjdXJyZW5jeSA/IGN1cnJlbmN5IDogb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKG9yKGlzVHJ1dGh5KGFubm90YXRpb25FeHByZXNzaW9uKG1lYXN1cmUpIGFzIEV4cHJlc3Npb248c3RyaW5nPiksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBpZlVuaXRFZGl0YWJsZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdHNFZGl0YWJsZVZhbHVlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPixcblx0c05vbkVkaXRhYmxlVmFsdWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRpZiAoIXVuaXRQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhzTm9uRWRpdGFibGVWYWx1ZSk7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKG5vdChpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpKSwgbm90KGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSkpO1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaWZFbHNlKGVkaXRhYmxlRXhwcmVzc2lvbiwgc0VkaXRhYmxlVmFsdWUsIHNOb25FZGl0YWJsZVZhbHVlKSk7XG59O1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZSA9IFwiVmFsdWVcIiB8IFwiRGVzY3JpcHRpb25cIiB8IFwiRGVzY3JpcHRpb25WYWx1ZVwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbihvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sIG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERpc3BsYXlNb2RlIHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0fVxuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aCAmJiBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlO1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdCh0eXBlb2Ygb1RleHRBbm5vdGF0aW9uICE9PSBcInN0cmluZ1wiICYmIG9UZXh0QW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCkpIHx8XG5cdFx0b0VudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpO1xuXG5cdGxldCBzRGlzcGxheVZhbHVlID0gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG5cdGlmIChvVGV4dEFubm90YXRpb24gJiYgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRzRGlzcGxheVZhbHVlID0gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRzRGlzcGxheVZhbHVlID0gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRzRGlzcGxheVZhbHVlID0gXCJWYWx1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdFx0c0Rpc3BsYXlWYWx1ZSA9IFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gc0Rpc3BsYXlWYWx1ZSBhcyBEaXNwbGF5TW9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+XG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIGhhc1ZhbHVlSGVscChvUHJvcGVydHkpXG5cdFx0PyBjb21waWxlQmluZGluZyhzVGFyZ2V0RGlzcGxheU1vZGUpXG5cdFx0OiBjb21waWxlQmluZGluZyhpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRWRpdGFibGVcIiksIFwiVmFsdWVcIiwgc1RhcmdldERpc3BsYXlNb2RlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHksIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPik6IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxhbnk+ID0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248YW55Pjtcblx0aWYgKG9Qcm9wZXJ0eS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpLnR5cGVdO1xuXHRcdGlmIChvVGFyZ2V0TWFwcGluZykge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gb1RhcmdldE1hcHBpbmcudHlwZTtcblx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cykge1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kU2NhbGUgJiYgb1Byb3BlcnR5LnNjYWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLnNjYWxlID0gb1Byb3BlcnR5LnNjYWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kUHJlY2lzaW9uICYmIG9Qcm9wZXJ0eS5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMucHJlY2lzaW9uID0gb1Byb3BlcnR5LnByZWNpc2lvbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMuJE1heExlbmd0aCAmJiBvUHJvcGVydHkubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLm1heExlbmd0aCA9IG9Qcm9wZXJ0eS5tYXhMZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzLiROdWxsYWJsZSAmJiBvUHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cy5udWxsYWJsZSA9IG9Qcm9wZXJ0eS5udWxsYWJsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWluaW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1pbmltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHNbXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubWF4aW11bSA9IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5WYWxpZGF0aW9uLk1heGltdW19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIikge1xuXHRcdFx0XHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDApIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPlxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllc1xuXHQpLm1hcChucCA9PiBucC5uYW1lKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbigodW5pdCBhcyBhbnkpLiR0YXJnZXQsIGFubm90YXRpb25FeHByZXNzaW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPilcblx0XHQ6IChhbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5OiBzdHJpbmcgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQ6IHN0cmluZyA9IFwiQmVnaW5cIlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB8IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0ge0NvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZX0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHtDb250ZXh0fSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgT0RhdGFNZXRhTW9kZWwgY29udGV4dFxuICogQHBhcmFtIHtDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2V9IG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyB7b2JqZWN0W119IEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb25CaW5kaW5nIGNyZWF0ZWQgb3V0IG9mIGEgYmluZGluZyBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxhbnk+fSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIGNvbXBpbGVkXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25CaW5kaW5nID0gZnVuY3Rpb24oZXhwcmVzc2lvbjogRXhwcmVzc2lvbjxhbnk+KTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhleHByZXNzaW9uKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRhcmdldCBlbnRpdHlzZXQgZm9yIGEgY29udGV4dCBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRFbnRpdHlTZXQgPSBmdW5jdGlvbihvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IG51bGwge1xuXHRpZiAob0NvbnRleHQpIHtcblx0XHRjb25zdCBvRGF0YU1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvQ29udGV4dCk7XG5cdFx0cmV0dXJuIGdldFRhcmdldEVudGl0eVNldFBhdGgob0RhdGFNb2RlbFBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuIl19
|
|
560
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJuYW1lcyI6WyJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJvRGF0YU1vZGVsT2JqZWN0UGF0aCIsImJBc09iamVjdCIsImNvbXBpbGVCaW5kaW5nIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJVSSIsIklzRWRpdGFibGUiLCJvUHJvcGVydHkiLCJpc1BhdGhFeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJvciIsIm5vdCIsImlzQ29tcHV0ZWQiLCJpc0tleSIsImlzSW1tdXRhYmxlIiwiSXNUcmFuc2llbnRCaW5kaW5nIiwiYW5kIiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsImJNZWFzdXJlUmVhZE9ubHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsInJlYWRPbmx5RXhwcmVzc2lvbiIsImVkaXRNb2RlRXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidGFyZ2V0T2JqZWN0IiwiY3VycmVuY3kiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJtZWFzdXJlIiwiVW5pdCIsImlzVHJ1dGh5IiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJJc1RvdGFsIiwiY29uc3RhbnQiLCJpZlVuaXRFZGl0YWJsZSIsInNFZGl0YWJsZVZhbHVlIiwic05vbkVkaXRhYmxlVmFsdWUiLCJnZXREaXNwbGF5TW9kZSIsIm9FbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5VHlwZSIsIm9UZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwic0Rpc3BsYXlWYWx1ZSIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsIm91dEV4cHJlc3Npb24iLCJfdHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiJFNjYWxlIiwic2NhbGUiLCJ1bmRlZmluZWQiLCIkUHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiJE1heExlbmd0aCIsIm1heExlbmd0aCIsIiROdWxsYWJsZSIsIm51bGxhYmxlIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJpc05hTiIsIm1pbmltdW0iLCJNYXhpbXVtIiwibWF4aW11bSIsImluZGV4T2YiLCJmb3JtYXRPcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiSXNEaWdpdFNlcXVlbmNlIiwiaXNEaWdpdFNlcXVlbmNlIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiaXNQcm9wZXJ0eSIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbiIsImNvbnRleHRMb2NhdGlvbiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibnAiLCJuYW1lIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJjb21wbGV4VHlwZSIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImFkZFR5cGVJbmZvcm1hdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEV4cHJlc3Npb25CaW5kaW5nIiwiZXhwcmVzc2lvbiIsImdldFRhcmdldEVudGl0eVNldCIsIm9EYXRhTW9kZWxQYXRoIiwiZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCIsImlzQ29sbGVjdGlvbkZpZWxkIiwibGVuZ3RoIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJpc0NvbGxlY3Rpb24iLCJvQ29udGV4dE5hdiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5RU8sTUFBTUEsZ0JBQXFDLEdBQUc7QUFDcEQsbUJBQWU7QUFBRUMsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FEcUM7QUFFcEQsZ0JBQVk7QUFBRUEsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FGd0M7QUFHcEQsZ0JBQVk7QUFBRUEsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FId0M7QUFJcEQsMEJBQXNC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bXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0YWRkVHlwZUluZm9ybWF0aW9uLFxuXHRhbmQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdGZvcm1hdFJlc3VsdCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvclxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNQYXRoRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdHlwZXMvRWRtXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRFbnRpdHlTZXRQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGUsXG5cdGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50czogYW55W107XG5cdCQkdmFsdWVBc1Byb21pc2U6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgRURNX1RZUEVfTUFQUElORzogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcblx0XCJFZG0uQm9vbGVhblwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQm9vbGVhblwiIH0sXG5cdFwiRWRtLkJ5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIiB9LFxuXHRcIkVkbS5EYXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlXCIgfSxcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIiRQcmVjaXNpb25cIjogXCJwcmVjaXNpb25cIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlVGltZU9mZnNldFwiXG5cdH0sXG5cdFwiRWRtLkRlY2ltYWxcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI6IFwibWluaW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtaW5pbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI6IFwibWF4aW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtYXhpbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHRcIiRQcmVjaXNpb25cIjogXCJwcmVjaXNpb25cIixcblx0XHRcdFwiJFNjYWxlXCI6IFwic2NhbGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCJcblx0fSxcblx0XCJFZG0uRG91YmxlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIiB9LFxuXHRcIkVkbS5HdWlkXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5HdWlkXCIgfSxcblx0XCJFZG0uSW50MTZcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIgfSxcblx0XCJFZG0uSW50MzJcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIgfSxcblx0XCJFZG0uSW50NjRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfSxcblx0XCJFZG0uU0J5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCIgfSxcblx0XCJFZG0uU2luZ2xlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIiB9LFxuXHRcIkVkbS5TdHJlYW1cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLlN0cmluZ1wiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIjogXCJpc0RpZ2l0U2VxdWVuY2VcIixcblx0XHRcdFwiJE1heExlbmd0aFwiOiBcIm1heExlbmd0aFwiLFxuXHRcdFx0XCIkTnVsbGFibGVcIjogXCJudWxsYWJsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiXG5cdH0sXG5cdFwiRWRtLlRpbWVPZkRheVwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiJFByZWNpc2lvblwiOiBcInByZWNpc2lvblwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlRpbWVPZkRheVwiXG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBib29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlQYXRofSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIHtvYmplY3R9IG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBvYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4gPSB0cnVlO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIFVJLklzRWRpdGFibGUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFZGl0YWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEga2V5IC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb24gaWYgbm90IGNvbXB1dGVkXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1cGRhdGFibGUgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBpbW11dGFibGUgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBhIHBhdGggcmVzb2x2aW5nIHRvIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpICg8PSAxKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gRWxzZSwgdG8gYmUgZWRpdGFibGUgeW91IG5lZWRcblx0Ly8gaW1tdXRhYmxlIGFuZCBrZXkgd2hpbGUgaW4gdGhlIGNyZWF0aW9uIHJvd1xuXHQvLyB1aS9pc0VkaXRhYmxlXG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUob0RhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0b3IoXG5cdFx0XHRub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksXG5cdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSlcblx0XHQpLFxuXHRcdGlmRWxzZShvcihpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRVSS5Jc0VkaXRhYmxlXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVuYWJsZWRcIiBib29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlQYXRofSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIHthbnl9IG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVuYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBhbnksXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyh0cnVlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSksIGZhbHNlLCB0cnVlKTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbikpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0TW9kZVwiIGVudW0gdmFsdWUuXG4gKiBAcGFyYW0ge1Byb3BlcnR5UGF0aH0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYk1lYXN1cmVSZWFkT25seSBXaGV0aGVyIHdlIHNob3VsZCBzZXQgVW9NIC8gY3VycmVuY3kgZmllbGQgbW9kZSB0byByZWFkIG9ubHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBkYXRhRmllbGQgb2JqZWN0XG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB8IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBlZGl0IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBlZGl0TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRNb2RlID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJNZWFzdXJlUmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcblx0YkFzT2JqZWN0OiBib29sZWFuID0gZmFsc2UsXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSA9IG51bGxcbik6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBcIkRpc3BsYXlcIjtcblx0fVxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZW5hYmxlZCA9PiBEaXNhYmxlZFxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZW5hYmxlZCAmJiBub3QgZWRpdGFibGUgPT4gUmVhZE9ubHlcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQgJiYgZWRpdGFibGUgPT4gRWRpdGFibGVcblx0Ly8gSWYgdGhlcmUgaXMgYW4gYXNzb2NpYXRlZCB1bml0LCBhbmQgaXQgaGFzIGEgZmllbGQgY29udHJvbCBhbHNvIHVzZSBjb25zaWRlciB0aGUgZm9sbG93aW5nXG5cdC8vIGlmIHRoZSB1bml0IGZpZWxkIGNvbnRyb2wgaXMgcmVhZG9ubHkgLT4gRWRpdGFibGVSZWFkT25seVxuXHQvLyBvdGhlcndpc2UgLT4gRWRpdGFibGVcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlXG5cdCkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+O1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gZ2V0RW5hYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgdHJ1ZSkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+O1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0bGV0IHJlc3VsdEV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+ID0gXCJFZGl0YWJsZVwiO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYk1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRcIkVkaXRhYmxlUmVhZE9ubHlcIixcblx0XHRcdFwiRWRpdGFibGVcIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ob1Byb3BlcnR5KSwgaXNSZWFkT25seUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCkpO1xuXG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBmcm9tIGEgbm9uLXVwZGF0YWJsZSBlbnRpdHkgPT4gUmVhZCBvbmx5IG1vZGUsIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBlZGl0IE1vZGUgaXMgaWdub3JlZFxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZnJvbSBhbiB1cGRhdGFibGUgZW50aXR5ID0+IHByZXZpb3VzbHkgY2FsY3VsYXRlZCBlZGl0IE1vZGUgZXhwcmVzc2lvblxuXHRjb25zdCBlZGl0TW9kZUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdGlmRWxzZShhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIFVJLklzRWRpdGFibGUpLCBcIlJlYWRPbmx5XCIsIFwiRGlzcGxheVwiKVxuXHRcdCksXG5cdFx0aWZFbHNlKFVJLklzRWRpdGFibGUsIFwiRGlzYWJsZWRcIiwgXCJEaXNwbGF5XCIpXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gZWRpdE1vZGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlQmluZGluZyhlZGl0TW9kZUV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0ID0gZnVuY3Rpb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhvcihpc1RydXRoeShhbm5vdGF0aW9uRXhwcmVzc2lvbihtZWFzdXJlKSBhcyBFeHByZXNzaW9uPHN0cmluZz4pLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgaWZVbml0RWRpdGFibGUgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzRWRpdGFibGVWYWx1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4sXG5cdHNOb25FZGl0YWJsZVZhbHVlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoc05vbkVkaXRhYmxlVmFsdWUpO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGFuZChub3QoaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5KSksIG5vdChpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSkpKTtcblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGlmRWxzZShlZGl0YWJsZUV4cHJlc3Npb24sIHNFZGl0YWJsZVZhbHVlLCBzTm9uRWRpdGFibGVWYWx1ZSkpO1xufTtcblxuZXhwb3J0IHR5cGUgRGlzcGxheU1vZGUgPSBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlNb2RlID0gZnVuY3Rpb24ob1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LCBvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGgpOiBEaXNwbGF5TW9kZSB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdH1cblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb0RhdGFNb2RlbE9iamVjdFBhdGggJiYgb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID1cblx0XHQodHlwZW9mIG9UZXh0QW5ub3RhdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBvVGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpKSB8fFxuXHRcdG9FbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKTtcblxuXHRsZXQgc0Rpc3BsYXlWYWx1ZSA9IG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xuXHRpZiAoKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikgfHwgb0VudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0c0Rpc3BsYXlWYWx1ZSA9IFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0c0Rpc3BsYXlWYWx1ZSA9IFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIikge1xuXHRcdFx0c0Rpc3BsYXlWYWx1ZSA9IFwiVmFsdWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRcdHNEaXNwbGF5VmFsdWUgPSBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHNEaXNwbGF5VmFsdWUgYXMgRGlzcGxheU1vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGREaXNwbGF5ID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c1RhcmdldERpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXG5cdHJldHVybiBoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KVxuXHRcdD8gY29tcGlsZUJpbmRpbmcoc1RhcmdldERpc3BsYXlNb2RlKVxuXHRcdDogY29tcGlsZUJpbmRpbmcoaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkVkaXRhYmxlXCIpLCBcIlZhbHVlXCIsIHNUYXJnZXREaXNwbGF5TW9kZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24gPSBmdW5jdGlvbihvUHJvcGVydHk6IFByb3BlcnR5LCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPHN0cmluZz4pOiBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvdXRFeHByZXNzaW9uOiBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248YW55PiA9IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gYXMgQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPGFueT47XG5cdGlmIChvUHJvcGVydHkuX3R5cGUgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdGNvbnN0IG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1sob1Byb3BlcnR5IGFzIFByb3BlcnR5KS50eXBlXTtcblx0XHRpZiAob1RhcmdldE1hcHBpbmcpIHtcblx0XHRcdG91dEV4cHJlc3Npb24udHlwZSA9IG9UYXJnZXRNYXBwaW5nLnR5cGU7XG5cdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMpIHtcblx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cyA9IHt9O1xuXHRcdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMuJFNjYWxlICYmIG9Qcm9wZXJ0eS5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cy5zY2FsZSA9IG9Qcm9wZXJ0eS5zY2FsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RhcmdldE1hcHBpbmcuY29uc3RyYWludHMuJFByZWNpc2lvbiAmJiBvUHJvcGVydHkucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLnByZWNpc2lvbiA9IG9Qcm9wZXJ0eS5wcmVjaXNpb247XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzLiRNYXhMZW5ndGggJiYgb1Byb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cy5tYXhMZW5ndGggPSBvUHJvcGVydHkubWF4TGVuZ3RoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cy4kTnVsbGFibGUgJiYgb1Byb3BlcnR5Lm51bGxhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMubnVsbGFibGUgPSBvUHJvcGVydHkubnVsbGFibGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnMuVmFsaWRhdGlvbi5NaW5pbXVtKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLm1pbmltdW0gPSBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnMuVmFsaWRhdGlvbi5NaW5pbXVtfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnMuVmFsaWRhdGlvbi5NYXhpbXVtKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLm1heGltdW0gPSBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnMuVmFsaWRhdGlvbi5NYXhpbXVtfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvdXRFeHByZXNzaW9uPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwKSB7XG5cdFx0XHRcdGlmICghb3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRlbXB0eVN0cmluZzogXCJcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIpIHtcblx0XHRcdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLmlzRGlnaXRTZXF1ZW5jZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvdXRFeHByZXNzaW9uPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwKSB7XG5cdFx0XHRcdGlmICghb3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRlbXB0eVN0cmluZzogXCJcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHQob1Byb3BlcnR5IGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2Vcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH1cblx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0cGFyc2VBc1N0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0ZW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IFwiXCJcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiA/IHRydWUgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIHByb3BlcnR5VHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPlxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UGF0aFJlbGF0aXZlTG9jYXRpb24oXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllc1xuXHQpLm1hcChucCA9PiBucC5uYW1lKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbigodW5pdCBhcyBhbnkpLiR0YXJnZXQsIGFubm90YXRpb25FeHByZXNzaW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPilcblx0XHQ6IChhbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogRXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5OiBzdHJpbmcgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQ6IHN0cmluZyA9IFwiQmVnaW5cIlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB8IEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0ge0NvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZX0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHtDb250ZXh0fSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgT0RhdGFNZXRhTW9kZWwgY29udGV4dFxuICogQHBhcmFtIHtDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2V9IG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyB7b2JqZWN0W119IEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb25CaW5kaW5nIGNyZWF0ZWQgb3V0IG9mIGEgYmluZGluZyBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7RXhwcmVzc2lvbjxhbnk+fSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIGNvbXBpbGVkXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248c3RyaW5nPn0gVGhlIGV4cHJlc3Npb24tYmluZGluZyBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25CaW5kaW5nID0gZnVuY3Rpb24oZXhwcmVzc2lvbjogRXhwcmVzc2lvbjxhbnk+KTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlQmluZGluZyhleHByZXNzaW9uKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRhcmdldCBlbnRpdHlzZXQgZm9yIGEgY29udGV4dCBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRFbnRpdHlTZXQgPSBmdW5jdGlvbihvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IG51bGwge1xuXHRpZiAob0NvbnRleHQpIHtcblx0XHRjb25zdCBvRGF0YU1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvQ29udGV4dCk7XG5cdFx0cmV0dXJuIGdldFRhcmdldEVudGl0eVNldFBhdGgob0RhdGFNb2RlbFBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb2xsZWN0aW9uRmllbGQgPSBmdW5jdGlvbihvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IGJvb2xlYW4ge1xuXHRpZiAob0RhdGFNb2RlbFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdGNvbnN0IGhhc09uZVRvTWFueU5hdmlnYXRpb24gPVxuXHRcdFx0b0RhdGFNb2RlbFBhdGg/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleCgob05hdjogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGlmIChvTmF2LmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vd2UgY2hlY2sgdGhlIG9uZSB0byBtYW55IG5hdiBpcyBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjb250ZXh0XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmRJbmRleChcblx0XHRcdFx0XHRcdFx0XHQob0NvbnRleHROYXY6IE5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
|