@sapui5/sap.fe.core 1.103.0 → 1.104.1
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 +3 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +12 -5
- package/src/sap/fe/core/AppComponent.ts +9 -3
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/CommonUtils.js +10 -34
- package/src/sap/fe/core/CommonUtils.ts +10 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
- package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Share.js +153 -122
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
- package/src/sap/fe/core/controls/FileWrapper.js +6 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
- package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
- package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
- package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
- package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
- package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -37
- package/src/sap/fe/core/messagebundle_ar.properties +20 -40
- package/src/sap/fe/core/messagebundle_bg.properties +20 -40
- package/src/sap/fe/core/messagebundle_ca.properties +20 -40
- package/src/sap/fe/core/messagebundle_cs.properties +20 -40
- package/src/sap/fe/core/messagebundle_cy.properties +20 -40
- package/src/sap/fe/core/messagebundle_da.properties +20 -40
- package/src/sap/fe/core/messagebundle_de.properties +20 -40
- package/src/sap/fe/core/messagebundle_el.properties +20 -40
- package/src/sap/fe/core/messagebundle_en.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
- package/src/sap/fe/core/messagebundle_es.properties +22 -42
- package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
- package/src/sap/fe/core/messagebundle_et.properties +20 -40
- package/src/sap/fe/core/messagebundle_fi.properties +20 -40
- package/src/sap/fe/core/messagebundle_fr.properties +21 -41
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
- package/src/sap/fe/core/messagebundle_hi.properties +20 -40
- package/src/sap/fe/core/messagebundle_hr.properties +20 -40
- package/src/sap/fe/core/messagebundle_hu.properties +20 -40
- package/src/sap/fe/core/messagebundle_id.properties +20 -40
- package/src/sap/fe/core/messagebundle_it.properties +20 -40
- package/src/sap/fe/core/messagebundle_iw.properties +20 -40
- package/src/sap/fe/core/messagebundle_ja.properties +20 -40
- package/src/sap/fe/core/messagebundle_kk.properties +20 -40
- package/src/sap/fe/core/messagebundle_ko.properties +25 -45
- package/src/sap/fe/core/messagebundle_lt.properties +20 -40
- package/src/sap/fe/core/messagebundle_lv.properties +20 -40
- package/src/sap/fe/core/messagebundle_ms.properties +20 -40
- package/src/sap/fe/core/messagebundle_nl.properties +22 -42
- package/src/sap/fe/core/messagebundle_no.properties +20 -40
- package/src/sap/fe/core/messagebundle_pl.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
- package/src/sap/fe/core/messagebundle_ro.properties +20 -40
- package/src/sap/fe/core/messagebundle_ru.properties +20 -40
- package/src/sap/fe/core/messagebundle_sh.properties +20 -40
- package/src/sap/fe/core/messagebundle_sk.properties +20 -40
- package/src/sap/fe/core/messagebundle_sl.properties +20 -40
- package/src/sap/fe/core/messagebundle_sv.properties +20 -40
- package/src/sap/fe/core/messagebundle_th.properties +20 -40
- package/src/sap/fe/core/messagebundle_tr.properties +20 -40
- package/src/sap/fe/core/messagebundle_uk.properties +20 -40
- package/src/sap/fe/core/messagebundle_vi.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
- package/src/sap/fe/core/templating/FilterHelper.js +7 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
|
@@ -273,7 +273,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
273
273
|
paths: []
|
|
274
274
|
};
|
|
275
275
|
|
|
276
|
-
if (!config.
|
|
276
|
+
if (!config.keepPreviousPersonalization) {
|
|
277
277
|
// Need to override Table Id to match with Tab Key (currently only table is managed in multiple view mode)
|
|
278
278
|
tableVisualization.annotation.id = getTableID(config.key || "", "LineItem");
|
|
279
279
|
}
|
|
@@ -397,7 +397,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
397
397
|
converterContext: viewConverterContext,
|
|
398
398
|
annotation: annotation,
|
|
399
399
|
annotationPath: path.annotationPath,
|
|
400
|
-
|
|
400
|
+
keepPreviousPersonalization: path.keepPreviousPersonalization,
|
|
401
401
|
key: path.key,
|
|
402
402
|
visible: path.visible
|
|
403
403
|
});
|
|
@@ -424,6 +424,21 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
424
424
|
});
|
|
425
425
|
};
|
|
426
426
|
|
|
427
|
+
var getMultiViewsControl = function (converterContext, views) {
|
|
428
|
+
var manifestWrapper = converterContext.getManifestWrapper();
|
|
429
|
+
var viewsDefinition = manifestWrapper.getViewConfiguration();
|
|
430
|
+
|
|
431
|
+
if (views.length > 1 && !hasMultiVisualizations(converterContext)) {
|
|
432
|
+
return {
|
|
433
|
+
showTabCounts: viewsDefinition ? (viewsDefinition === null || viewsDefinition === void 0 ? void 0 : viewsDefinition.showCounts) || manifestWrapper.hasMultipleEntitySets() : undefined,
|
|
434
|
+
// with multi EntitySets, tab counts are displayed by default
|
|
435
|
+
id: getIconTabBarID()
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
return undefined;
|
|
440
|
+
};
|
|
441
|
+
|
|
427
442
|
function getAlpViewConfig(converterContext, viewConfigs) {
|
|
428
443
|
var entityType = converterContext.getEntityType();
|
|
429
444
|
var annotation = getCompliantVisualizationAnnotation(entityType, converterContext, true);
|
|
@@ -457,6 +472,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
457
472
|
return viewConfigs;
|
|
458
473
|
}
|
|
459
474
|
|
|
475
|
+
function hasMultiVisualizations(converterContext) {
|
|
476
|
+
return converterContext.getManifestWrapper().hasMultipleVisualizations() || converterContext.getTemplateType() === TemplateType.AnalyticalListPage;
|
|
477
|
+
}
|
|
478
|
+
|
|
460
479
|
var getHeaderActions = function (converterContext) {
|
|
461
480
|
var manifestWrapper = converterContext.getManifestWrapper();
|
|
462
481
|
return insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext));
|
|
@@ -499,8 +518,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
499
518
|
var viewsDefinition = manifestWrapper.getViewConfiguration();
|
|
500
519
|
var hasMultipleEntitySets = manifestWrapper.hasMultipleEntitySets();
|
|
501
520
|
var views = getViews(converterContext, viewsDefinition);
|
|
502
|
-
var showTabCounts = viewsDefinition ? (viewsDefinition === null || viewsDefinition === void 0 ? void 0 : viewsDefinition.showCounts) || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
|
|
503
|
-
|
|
504
521
|
var lrTableVisualizations = getTableVisualizations(views);
|
|
505
522
|
var lrChartVisualizations = getChartVisualizations(views);
|
|
506
523
|
var showPinnableToggle = lrTableVisualizations.some(function (table) {
|
|
@@ -532,7 +549,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
532
549
|
var defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {}; // Sort header actions according to position attributes in manifest
|
|
533
550
|
|
|
534
551
|
var headerActions = getHeaderActions(converterContext);
|
|
535
|
-
var
|
|
552
|
+
var multiViewControl = getMultiViewsControl(converterContext, views);
|
|
536
553
|
|
|
537
554
|
if (hasMultipleEntitySets) {
|
|
538
555
|
checkChartFilterBarId(views, filterBarId);
|
|
@@ -543,19 +560,15 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
543
560
|
}).concat(lrChartVisualizations.map(function (visualization) {
|
|
544
561
|
return visualization.id;
|
|
545
562
|
}));
|
|
546
|
-
var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(
|
|
547
|
-
var
|
|
548
|
-
var displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
|
|
549
|
-
var stickySubheaderProvider = displayMultiVisualizations && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? iconTabBarId : undefined;
|
|
563
|
+
var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(multiViewControl ? [multiViewControl.id] : []));
|
|
564
|
+
var stickySubheaderProvider = multiViewControl && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? multiViewControl.id : undefined;
|
|
550
565
|
return {
|
|
551
566
|
mainEntitySet: sContextPath,
|
|
552
567
|
mainEntityType: "".concat(sContextPath, "/"),
|
|
553
|
-
|
|
554
|
-
iconTabBarId: iconTabBarId,
|
|
568
|
+
multiViewsControl: multiViewControl,
|
|
555
569
|
stickySubheaderProvider: stickySubheaderProvider,
|
|
556
570
|
singleTableId: singleTableId,
|
|
557
571
|
singleChartId: singleChartId,
|
|
558
|
-
showTabCounts: showTabCounts,
|
|
559
572
|
headerActions: headerActions,
|
|
560
573
|
showPinnableToggle: showPinnableToggle,
|
|
561
574
|
filterBar: {
|
|
@@ -573,8 +586,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
573
586
|
id: filterVariantManagementID,
|
|
574
587
|
targetControlIds: targetControlIds.join(",")
|
|
575
588
|
},
|
|
576
|
-
|
|
577
|
-
hasMultiVisualizations: hasMultiVisualizations,
|
|
589
|
+
hasMultiVisualizations: hasMultiVisualizations(converterContext),
|
|
578
590
|
templateType: manifestWrapper.getTemplateType(),
|
|
579
591
|
useSemanticDateRange: useSemanticDateRange,
|
|
580
592
|
filterInitialLayout: filterInitialLayout,
|
|
@@ -650,4 +662,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
650
662
|
|
|
651
663
|
return _exports;
|
|
652
664
|
}, false);
|
|
653
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3VycmVudENvbmZpZyIsImtleSIsImNyZWF0ZVZpc3VhbGl6YXRpb24iLCJjdXJyZW50UHJlc2VudGF0aW9uIiwiaXNQcmltYXJ5IiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0UHJlc2VudGF0aW9uIiwiaXRlbSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiY3JlYXRlQWxwVmlldyIsInByZXNlbnRhdGlvbnMiLCJkZWZhdWx0UGF0aCIsImlkIiwidmlzaWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24iLCJnZXRUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZ2V0RmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJnZXRJY29uVGFiQmFySUQiLCJpY29uVGFiQmFySWQiLCJkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyIsInN0aWNreVN1YmhlYWRlclByb3ZpZGVyIiwiZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsImlzTXVsdGlFbnRpdHlTZXRzIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVNBLHNCQUFULENBQWdDQyxLQUFoQyxFQUF5RjtBQUN4RixRQUFNQyxN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QSxNQUFJLEdBQUdBLE1BQVA7O0FBQ0EsY0FBSSxDQUFDd0ksYUFBRCxJQUFtQnhJLE1BQUQsQ0FBb0MrQyxjQUExRCxFQUEwRTtBQUN6RXlGLFlBQUFBLGFBQWEsR0FBSXhJLE1BQUQsQ0FBb0MrQyxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUksQ0FBQzBGLGFBQUQsSUFBbUJ6SSxNQUFELENBQW9DZ0QsY0FBMUQsRUFBMEU7QUFDekV5RixZQUFBQSxhQUFhLEdBQUl6SSxNQUFELENBQW9DZ0QsY0FBcEMsSUFBc0QsRUFBdEU7QUFDQTs7QUFDRCxjQUFJeUYsYUFBYSxJQUFJRCxhQUFyQixFQUFvQztBQUNuQztBQUNBO0FBQ0Q7QUFaSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYU47O0FBQ0QsUUFBSUEsYUFBYSxJQUFJQyxhQUFyQixFQUFvQztBQUNuQyxhQUFPO0FBQ05jLFFBQUFBLE9BQU8sRUFBRWQsYUFESDtBQUVOZSxRQUFBQSxPQUFPLEVBQUVoQjtBQUZILE9BQVA7QUFJQTs7QUFDRCxXQUFPdEcsU0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCwgRmlsdGVyRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLCBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgS1BJRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRDaGFydElELCBnZXRDdXN0b21UYWJJRCwgZ2V0RmlsdGVyQmFySUQsIGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsIGdldEljb25UYWJCYXJJRCwgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0ZGlzcGxheU11bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdGljb25UYWJCYXJJZDogc3RyaW5nO1xuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZTtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG5cdGhpZGVGaWx0ZXJCYXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVmlld0RlZmluaXRpb24gPSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHRjaGFydENvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJJc0FMUFxuICogQHJldHVybnMgQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YklzQUxQOiBCb29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBiUFZDb21wbGFpbnQgPSBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdGlmICghYlBWQ29tcGxhaW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWJJc0FMUCkge1xuXHRcdGNvbnN0IGRlZmF1bHRMaW5lSXRlbSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoZGVmYXVsdExpbmVJdGVtKSB7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExpbmVJdGVtO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBnZXRWaWV3ID0gZnVuY3Rpb24gKHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRsZXQgY29uZmlnID0gdmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb247XG5cdGlmIChjb25maWcuY29udmVydGVyQ29udGV4dCkge1xuXHRcdGxldCBjb252ZXJ0ZXJDb250ZXh0ID0gY29uZmlnLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRsZXQgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRjb25maWcuYW5ub3RhdGlvblxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChjb25maWcuYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHR0cnVlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHQpO1xuXHRcdGxldCB0YWJsZUNvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IGNoYXJ0Q29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY3VycmVudENvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjdXJyZW50Q29uZmlnIGlzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24ge1xuXHRcdFx0cmV0dXJuIChjdXJyZW50Q29uZmlnIGFzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24pLmtleSAhPT0gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50UHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBjdXJyZW50UHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGlmIChpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudFByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFByZXNlbnRhdGlvbiA9IGZ1bmN0aW9uIChpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24gKFxuXHRcdFx0cHJlc2VudGF0aW9uczogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uW10sXG5cdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCIgfCBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKHByZXNlbnRhdGlvbnNbMF0sIHRydWUpO1xuXHRcdFx0Y2hhcnRDb250cm9sSWQgPSAocHJpbWFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbikuaWQ7XG5cdFx0XHRjb25zdCBzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKFxuXHRcdFx0XHRwcmVzZW50YXRpb25zWzFdID8gcHJlc2VudGF0aW9uc1sxXSA6IHByZXNlbnRhdGlvbnNbMF1cblx0XHRcdCk7XG5cdFx0XHR0YWJsZUNvbnRyb2xJZCA9IChzZWNvbmRhcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmFubm90YXRpb24uaWQ7XG5cdFx0XHRpZiAocHJpbWFyeVZpc3VhbGl6YXRpb24gJiYgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdFx0XHRkZWZhdWx0UGF0aCxcblx0XHRcdFx0XHR2aXNpYmxlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnM/Lmxlbmd0aCA9PT0gMiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIpO1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdGlmIChwcmltYXJ5ICYmIHByaW1hcnkubGVuZ3RoICYmIHNlY29uZGFyeSAmJiBzZWNvbmRhcnkubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFxuXHRcdFx0XHRcdFtnZXRQcmVzZW50YXRpb24ocHJpbWFyeVswXSksIGdldFByZXNlbnRhdGlvbihzZWNvbmRhcnlbMF0pXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0dGl0bGUgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IGdldFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChcblx0XHRcdFx0XHRcdFx0XHRjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG5cdFx0XHRcdFx0XHRcdCkuU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gZ2V0Q2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoLFxuXHRcdFx0dmlzaWJsZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IGdldEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIiksXG5cdFx0XHR2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIGAvJHtwYXRoLmVudGl0eVNldH1gKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cblx0XHRcdFx0aWYgKGVudGl0eVR5cGUgJiYgdmlld0NvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSBnZXREZWZhdWx0TGluZUl0ZW0odmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSBhcyBMaW5lSXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAoKHZpZXdDb252ZXJ0ZXJDb25maWcpID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuXG5mdW5jdGlvbiBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSk6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbiAodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdLCBmaWx0ZXJCYXJJZDogc3RyaW5nKSB7XG5cdHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdGlmICghc0NvbnRleHRQYXRoKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbnRpdHlTZXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGlzc3VlIEknZCBzYXlcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkFuIEVudGl0eVNldCBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgYSBMaXN0UmVwb3J0LCBwbGVhc2UgYWRqdXN0IHlvdXIgYGVudGl0eVNldGAgcHJvcGVydHkgdG8gcG9pbnQgdG8gb25lLlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdID0gZ2V0Vmlld3MoY29udmVydGVyQ29udGV4dCwgdmlld3NEZWZpbml0aW9uKTtcblx0Y29uc3Qgc2hvd1RhYkNvdW50cyA9IHZpZXdzRGVmaW5pdGlvbiA/IHZpZXdzRGVmaW5pdGlvbj8uc2hvd0NvdW50cyB8fCBoYXNNdWx0aXBsZUVudGl0eVNldHMgOiB1bmRlZmluZWQ7IC8vIHdpdGggbXVsdGkgRW50aXR5U2V0cywgdGFiIGNvdW50cyBhcmUgZGlzcGxheWVkIGJ5IGRlZmF1bHRcblx0Y29uc3QgbHJUYWJsZVZpc3VhbGl6YXRpb25zID0gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IGxyQ2hhcnRWaXN1YWxpemF0aW9ucyA9IGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSgodGFibGUpID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IGdldEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBmaWx0ZXJJbml0aWFsTGF5b3V0ID0gZmJDb25maWc/LmluaXRpYWxMYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgZmlsdGVyTGF5b3V0ID0gZmJDb25maWc/LmxheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmxheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IHVzZVNlbWFudGljRGF0ZVJhbmdlID0gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlIDogdHJ1ZTtcblxuXHRjb25zdCBvQ29uZmlnID0gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGlmIChvQ29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IG9Db25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gb0NvbmZpZy50YWJsZUlkO1xuXHR9XG5cblx0Ly8gQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cblx0Ly8gVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuXHRjb25zdCBoaWRlRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiYgc2luZ2xlQ2hhcnRJZCA9PT0gXCJcIjtcblx0Y29uc3QgbHJGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0U2VsZWN0aW9uRmllbGRzKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVWaXN1YWxpemF0aW9ucyk7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zZWxlY3Rpb25GaWVsZHM7XG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zUHJvcGVydHlJbmZvO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gobHJUYWJsZVZpc3VhbGl6YXRpb25zLCBsckNoYXJ0VmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW4gPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKCFoYXNNdWx0aVZpc3VhbGl6YXRpb25zICYmIHZpZXdzLmxlbmd0aCA+IDEgPyBbZ2V0SWNvblRhYkJhcklEKCldIDogW10pXG5cdF07XG5cblx0Y29uc3QgaWNvblRhYkJhcklkID0gXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCI7XG5cdGNvbnN0IGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zID0gdmlld3MubGVuZ3RoID4gMSAmJiAhaGFzTXVsdGlWaXN1YWxpemF0aW9ucztcblx0Y29uc3Qgc3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIgPVxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zICYmIG1hbmlmZXN0V3JhcHBlci5nZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24oKSA/IGljb25UYWJCYXJJZCA6IHVuZGVmaW5lZDtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdGljb25UYWJCYXJJZCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
665
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3VycmVudENvbmZpZyIsImtleSIsImNyZWF0ZVZpc3VhbGl6YXRpb24iLCJjdXJyZW50UHJlc2VudGF0aW9uIiwiaXNQcmltYXJ5IiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0UHJlc2VudGF0aW9uIiwiaXRlbSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiY3JlYXRlQWxwVmlldyIsInByZXNlbnRhdGlvbnMiLCJkZWZhdWx0UGF0aCIsImlkIiwidmlzaWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24iLCJnZXRUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsImdldE11bHRpVmlld3NDb250cm9sIiwidmlld3NEZWZpbml0aW9uIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwic2hvd1RhYkNvdW50cyIsInNob3dDb3VudHMiLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJnZXRJY29uVGFiQmFySUQiLCJ2aWV3Q29uZmlncyIsImNoYXJ0IiwidGFibGUiLCJnZXREZWZhdWx0Q2hhcnQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwic0NvbnRleHRQYXRoIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZ2V0RmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJtdWx0aVZpZXdDb250cm9sIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJzdGlja3lTdWJoZWFkZXJQcm92aWRlciIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsIm1haW5FbnRpdHlTZXQiLCJtYWluRW50aXR5VHlwZSIsIm11bHRpVmlld3NDb250cm9sIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTQSxzQkFBVCxDQUFnQ0MsS0FBaEMsRUFBeUY7QUFDeEYsUUFBTUMsTUFB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Q0FBQ2dELGNBQUwsSUFBdUJoRCxJQUFJLENBQUMrQyxjQUFoQyxFQUFnRDtBQUMvQzZGLFlBQUFBLGFBQWEsR0FBRzVJLElBQUksQ0FBQ2dELGNBQXJCO0FBQ0EyRixZQUFBQSxhQUFhLEdBQUczSSxJQUFJLENBQUMrQyxjQUFyQjtBQUNBO0FBQ0E7QUFDRDtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTRCxLQVpELE1BWU87QUFBQSxrREFDV2xELEtBRFg7QUFBQTs7QUFBQTtBQUNOLCtEQUF3QjtBQUFBLGNBQWZHLE1BQWU7QUFDdkJBLFVBQUFBLE1BQUksR0FBR0EsTUFBUDs7QUFDQSxjQUFJLENBQUMySSxhQUFELElBQW1CM0ksTUFBRCxDQUFvQytDLGNBQTFELEVBQTBFO0FBQ3pFNEYsWUFBQUEsYUFBYSxHQUFJM0ksTUFBRCxDQUFvQytDLGNBQXBDLElBQXNELEVBQXRFO0FBQ0E7O0FBQ0QsY0FBSSxDQUFDNkYsYUFBRCxJQUFtQjVJLE1BQUQsQ0FBb0NnRCxjQUExRCxFQUEwRTtBQUN6RTRGLFlBQUFBLGFBQWEsR0FBSTVJLE1BQUQsQ0FBb0NnRCxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUk0RixhQUFhLElBQUlELGFBQXJCLEVBQW9DO0FBQ25DO0FBQ0E7QUFDRDtBQVpLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhTjs7QUFDRCxRQUFJQSxhQUFhLElBQUlDLGFBQXJCLEVBQW9DO0FBQ25DLGFBQU87QUFDTmMsUUFBQUEsT0FBTyxFQUFFZCxhQURIO0FBRU5lLFFBQUFBLE9BQU8sRUFBRWhCO0FBRkgsT0FBUDtBQUlBOztBQUNELFdBQU96RyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLCBGaWx0ZXJGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRTZWxlY3Rpb25GaWVsZHNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnMsIERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLUElEZWZpbml0aW9uIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IGdldEtQSURlZmluaXRpb25zIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IGdldENoYXJ0SUQsIGdldEN1c3RvbVRhYklELCBnZXRGaWx0ZXJCYXJJRCwgZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCwgZ2V0SWNvblRhYkJhcklELCBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWYXJpYW50TWFuYWdlbWVudFR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxudHlwZSBWaWV3QW5ub3RhdGlvbnMgPSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uVmFyaWFudDtcbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBWaWV3UGF0aENvbmZpZ3VyYXRpb24gJiB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiA9IHtcblx0YW5ub3RhdGlvbj86IERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uID0gQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbiAmIHtcblx0dHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3Q29uZmlndXJhdGlvbiA9IE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gfCBTaW5nbGVWaWV3Q29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xudHlwZSBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb247XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gVmlld0NvbmZpZ3VyYXRpb24gJiB7XG5cdGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0O1xufTtcblxudHlwZSBEZWZhdWx0U2VtYW50aWNEYXRlID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRvcGVyYXRvcjogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0bXVsdGlWaWV3c0NvbnRyb2w/OiBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb247IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcblx0aGlkZUZpbHRlckJhcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21WaWV3RGVmaW5pdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGZyYWdtZW50OiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0Y3VzdG9tVGFiSWQ6IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHR0YWJsZUNvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogVGFibGVWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCB0YWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnNlY29uZGFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHRcdHRhYmxlcy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENoYXJ0VmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgY2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvblxuXHRcdFx0XHQ/ICh2aWV3IGFzIENvbWJpbmVkVmlld0RlZmluaXRpb24pLnByaW1hcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblxuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGNoYXJ0cy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY2hhcnRzO1xufVxuXG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4pOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0U2VtYW50aWNEYXRlPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG5cbi8qKlxuICogRmluZCBhIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gYklzQUxQXG4gKiBAcmV0dXJucyBBIGNvbXBsaWFudCBhbm5vdGF0aW9uIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRiSXNBTFA6IEJvb2xlYW5cbik6IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJQVkNvbXBsYWludCA9IGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudCk7XG5cdFx0aWYgKCFiUFZDb21wbGFpbnQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlKTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICghYklzQUxQKSB7XG5cdFx0Y29uc3QgZGVmYXVsdExpbmVJdGVtID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChkZWZhdWx0TGluZUl0ZW0pIHtcblx0XHRcdHJldHVybiBkZWZhdWx0TGluZUl0ZW07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGdldFZpZXcgPSBmdW5jdGlvbiAodmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb246IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiB7XG5cdGxldCBjb25maWcgPSB2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjtcblx0aWYgKGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0bGV0IGNvbnZlcnRlckNvbnRleHQgPSBjb25maWcuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRcdGxldCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGNvbmZpZy5hbm5vdGF0aW9uXG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGNvbmZpZy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdDogXCJcIixcblx0XHRcdHRydWUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdCk7XG5cdFx0bGV0IHRhYmxlQ29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgY2hhcnRDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gXCJcIjtcblx0XHRsZXQgc2VsZWN0aW9uVmFyaWFudFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50Q29uZmlnOiBWaWV3Q29uZmlndXJhdGlvbik6IGN1cnJlbnRDb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGN1cnJlbnRDb25maWcgYXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbikua2V5ICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnRQcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbikge1xuXHRcdFx0bGV0IGRlZmF1bHRWaXN1YWxpemF0aW9uO1xuXHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGN1cnJlbnRQcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50UHJlc2VudGF0aW9uKTtcblx0XHRcdGlmIChkZWZhdWx0VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRwcmVzZW50YXRpb25DcmVhdGVkLnZpc3VhbGl6YXRpb25zID0gW2RlZmF1bHRWaXN1YWxpemF0aW9uXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25DcmVhdGVkO1xuXHRcdH07XG5cdFx0Y29uc3QgZ2V0UHJlc2VudGF0aW9uID0gZnVuY3Rpb24gKGl0ZW06IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGl0ZW0uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRcdGFubm90YXRpb25cblx0XHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdFx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbjtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZUFscFZpZXcgPSBmdW5jdGlvbiAoXG5cdFx0XHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIiB8IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdFx0XHRjaGFydENvbnRyb2xJZCA9IChwcmltYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uKS5pZDtcblx0XHRcdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlQ29udHJvbElkID0gKHNlY29uZGFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbikuYW5ub3RhdGlvbi5pZDtcblx0XHRcdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0XHRcdGNoYXJ0Q29udHJvbElkLFxuXHRcdFx0XHRcdGRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdHZpc2libGVcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAocHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucz8ubGVuZ3RoID09PSAyICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIik7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHx8XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0aWYgKHByaW1hcnkgJiYgcHJpbWFyeS5sZW5ndGggJiYgc2Vjb25kYXJ5ICYmIHNlY29uZGFyeS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoXG5cdFx0XHRcdFx0W2dldFByZXNlbnRhdGlvbihwcmltYXJ5WzBdKSwgZ2V0UHJlc2VudGF0aW9uKHNlY29uZGFyeVswXSldLFxuXHRcdFx0XHRcdChjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmRlZmF1bHRQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlY29uZGFyeUl0ZW1zIGluIHRoZSBWaWV3cyBpcyBub3QgcHJlc2VudFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbihjb25maWcpKSB7XG5cdFx0XHQvLyBrZXkgZXhpc3RzIG9ubHkgb24gbXVsdGkgdGFibGVzIG1vZGVcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbigoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgdmlld0Fubm90YXRpb246IFZpZXdBbm5vdGF0aW9ucyA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb247XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHZpZXdBbm5vdGF0aW9uLlRleHQpKTtcblx0XHRcdC8vIE5lZWQgdG8gbG9vcCBvbiB0YWJsZSBpbnRvIHZpZXdzIHNpbmNlIG11bHRpIHRhYmxlIG1vZGUgZ2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKGhpZGRlbiBmaWx0ZXJzIG9yIFRhYmxlIElkKVxuXHRcdFx0cHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlOlxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBUYWJsZVZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyB8fCB7fTtcblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IGZpbHRlcnMuaGlkZGVuRmlsdGVycyB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0XHRcdFx0aWYgKCEoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdC8vIE5lZWQgdG8gb3ZlcnJpZGUgVGFibGUgSWQgdG8gbWF0Y2ggd2l0aCBUYWIgS2V5IChjdXJyZW50bHkgb25seSB0YWJsZSBpcyBtYW5hZ2VkIGluIG11bHRpcGxlIHZpZXcgbW9kZSlcblx0XHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQgPSBnZXRUYWJsZUlEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJMaW5lSXRlbVwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0XHRpZiAoY29uZmlnICYmIGNvbmZpZy5hbm5vdGF0aW9uICYmIGNvbmZpZy5hbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSBjb25maWcuYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0XHRcdFx0XHQvL01EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHRcdFx0XHRcdC8vYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdFx0XHRcdFx0Ly9UbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgcmVsYXRlZCB0byB0aGUgVGFiIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRcdFx0XHRcdFx0Ly9jYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHRcdFx0XHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycy5wYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvblZhcmlhbnRQYXRoIH0pO1xuXHRcdFx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyA9IGZpbHRlcnM7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0OlxuXHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zW2luZGV4XSBhcyBDaGFydFZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24uaWQgPSBnZXRDaGFydElEKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0XHRcdGNoYXJ0VmlzdWFsaXphdGlvbi5tdWx0aVZpZXdzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbi5pZDtcblx0XHRcdH0gZWxzZSBpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0Y2hhcnRDb250cm9sSWQgPSB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5pZDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJlc2VudGF0aW9uLFxuXHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdHRpdGxlLFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGgsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRjb25maWcgPSBjb25maWcgYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb247XG5cdFx0Y29uc3QgdGl0bGUgPSBjb25maWcubGFiZWwsXG5cdFx0XHRmcmFnbWVudCA9IGNvbmZpZy50ZW1wbGF0ZSxcblx0XHRcdHR5cGUgPSBjb25maWcudHlwZSxcblx0XHRcdGN1c3RvbVRhYklkID0gZ2V0Q3VzdG9tVGFiSUQoY29uZmlnLmtleSB8fCBcIlwiKSxcblx0XHRcdHZpc2libGUgPSBjb25maWcudmlzaWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGUsXG5cdFx0XHRmcmFnbWVudCxcblx0XHRcdHR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCxcblx0XHRcdHZpc2libGVcblx0XHR9O1xuXHR9XG59O1xuXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c2V0dGluZ3NWaWV3czogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRpZiAoc2V0dGluZ3NWaWV3cykge1xuXHRcdHNldHRpbmdzVmlld3MucGF0aHMuZm9yRWFjaCgocGF0aDogVmlld1BhdGhDb25maWd1cmF0aW9uIHwgQ3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbikgPT4ge1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikpIHtcblx0XHRcdFx0aWYgKHNldHRpbmdzVmlld3MucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoKHBhdGggYXMgQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24pLnRlbXBsYXRlKSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFwiQ3VzdG9tXCIsXG5cdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcdFx0cGF0aC5jb250ZXh0UGF0aCB8fCAocGF0aC5lbnRpdHlTZXQgJiYgYC8ke3BhdGguZW50aXR5U2V0fWApIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCgodmlld0NvbnZlcnRlckNvbmZpZykgPT4ge1xuXHRcdHJldHVybiBnZXRWaWV3KHZpZXdDb252ZXJ0ZXJDb25maWcpO1xuXHR9KTtcbn07XG5cbmNvbnN0IGdldE11bHRpVmlld3NDb250cm9sID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW11cbik6IE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0aWYgKHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hvd1RhYkNvdW50czogdmlld3NEZWZpbml0aW9uID8gdmlld3NEZWZpbml0aW9uPy5zaG93Q291bnRzIHx8IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSA6IHVuZGVmaW5lZCwgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRcdFx0aWQ6IGdldEljb25UYWJCYXJJRCgpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gZ2V0QWxwVmlld0NvbmZpZyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10pOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYW5ub3RhdGlvbiA9IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRsZXQgY2hhcnQsIHRhYmxlO1xuXHRpZiAoYW5ub3RhdGlvbikge1xuXHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0YW5ub3RhdGlvbjogYW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjaGFydCA9IGdldERlZmF1bHRDaGFydChlbnRpdHlUeXBlKTtcblx0XHR0YWJsZSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoY2hhcnQgJiYgdGFibGUpIHtcblx0XHRcdGNvbnN0IHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdID0gW3sgYW5ub3RhdGlvblBhdGg6IHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cblxuZnVuY3Rpb24gaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uICh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgJiYgdmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgIT09IGZpbHRlckJhcklkKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgPSBmaWx0ZXJCYXJJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIG11bHRpcGxlIGVudGl0eSBzZXRzIChtdWx0aXBsZSB0YWJsZSBtb2RlKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCBkZWZpbml0aW9uIGJhc2VkIG9uIGFubm90YXRpb24gKyBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IExpc3RSZXBvcnREZWZpbml0aW9uIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVudGl0eVNldCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaXNzdWUgSSdkIHNheVxuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiQW4gRW50aXR5U2V0IGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGlzcGxheSBhIExpc3RSZXBvcnQsIHBsZWFzZSBhZGp1c3QgeW91ciBgZW50aXR5U2V0YCBwcm9wZXJ0eSB0byBwb2ludCB0byBvbmUuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbjogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaGFzTXVsdGlwbGVFbnRpdHlTZXRzID0gbWFuaWZlc3RXcmFwcGVyLmhhc011bHRpcGxlRW50aXR5U2V0cygpO1xuXHRjb25zdCB2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10gPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKCh0YWJsZSkgPT4gdGFibGUuY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKTtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiO1xuXHRsZXQgc2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGNvbnN0IGZpbHRlckJhcklkID0gZ2V0RmlsdGVyQmFySUQoc0NvbnRleHRQYXRoKTtcblx0Y29uc3QgZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCA9IGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQoZmlsdGVyQmFySWQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXG5cdGNvbnN0IG9Db25maWcgPSBnZXRDb250ZW50QXJlYUlkKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKG9Db25maWcpIHtcblx0XHRzaW5nbGVDaGFydElkID0gb0NvbmZpZy5jaGFydElkO1xuXHRcdHNpbmdsZVRhYmxlSWQgPSBvQ29uZmlnLnRhYmxlSWQ7XG5cdH1cblxuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSBtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IHVzZVNlbWFudGljRGF0ZVJhbmdlID8gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMoZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCkpIDoge307XG5cblx0Ly8gU29ydCBoZWFkZXIgYWN0aW9ucyBhY2NvcmRpbmcgdG8gcG9zaXRpb24gYXR0cmlidXRlcyBpbiBtYW5pZmVzdFxuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gZ2V0SGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbXVsdGlWaWV3Q29udHJvbCA9IGdldE11bHRpVmlld3NDb250cm9sKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzKTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKG11bHRpVmlld0NvbnRyb2wgPyBbbXVsdGlWaWV3Q29udHJvbC5pZF0gOiBbXSlcblx0XTtcblxuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiB7XG5cdFx0bWFpbkVudGl0eVNldDogc0NvbnRleHRQYXRoLFxuXHRcdG1haW5FbnRpdHlUeXBlOiBgJHtzQ29udGV4dFBhdGh9L2AsXG5cdFx0bXVsdGlWaWV3c0NvbnRyb2w6IG11bHRpVmlld0NvbnRyb2wsXG5cdFx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIsXG5cdFx0c2luZ2xlVGFibGVJZCxcblx0XHRzaW5nbGVDaGFydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaFxuXHRcdH0sXG5cdFx0dmlld3M6IHZpZXdzLFxuXHRcdGZpbHRlckJhcklkOiBoaWRlRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { EntityType } from "@sap-ux/vocabularies-types";
|
|
2
2
|
import type {
|
|
3
3
|
LineItem,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
PresentationVariant,
|
|
5
|
+
SelectionPresentationVariant,
|
|
6
|
+
SelectionVariant
|
|
7
7
|
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
8
8
|
import { UIAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
9
9
|
import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
@@ -43,7 +43,7 @@ import type {
|
|
|
43
43
|
} from "../ManifestSettings";
|
|
44
44
|
import { TemplateType, VariantManagementType, VisualizationType } from "../ManifestSettings";
|
|
45
45
|
|
|
46
|
-
type
|
|
46
|
+
type ViewAnnotations = SelectionPresentationVariant | SelectionVariant;
|
|
47
47
|
type VariantManagementDefinition = {
|
|
48
48
|
id: string;
|
|
49
49
|
targetControlIds: string;
|
|
@@ -72,15 +72,18 @@ type DefaultSemanticDate = ConfigurableObject & {
|
|
|
72
72
|
operator: string;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
+
type MultiViewsControlConfiguration = {
|
|
76
|
+
id: string;
|
|
77
|
+
showTabCounts?: boolean;
|
|
78
|
+
};
|
|
79
|
+
|
|
75
80
|
export type ListReportDefinition = {
|
|
76
81
|
mainEntitySet: string;
|
|
77
82
|
mainEntityType: string; // entityType> at the start of LR templating
|
|
78
83
|
singleTableId?: string; // only with single Table mode
|
|
79
84
|
singleChartId?: string; // only with single Table mode
|
|
80
|
-
displayMultiVisualizations: boolean;
|
|
81
|
-
iconTabBarId: string;
|
|
82
85
|
stickySubheaderProvider?: string;
|
|
83
|
-
|
|
86
|
+
multiViewsControl?: MultiViewsControlConfiguration; // only with multi Table mode
|
|
84
87
|
headerActions: BaseAction[];
|
|
85
88
|
showPinnableToggle?: boolean;
|
|
86
89
|
filterBar: {
|
|
@@ -90,7 +93,6 @@ export type ListReportDefinition = {
|
|
|
90
93
|
};
|
|
91
94
|
views: ListReportViewDefinition[];
|
|
92
95
|
filterConditions: object;
|
|
93
|
-
isMultiEntitySets: boolean;
|
|
94
96
|
filterBarId: string;
|
|
95
97
|
variantManagement: VariantManagementDefinition;
|
|
96
98
|
hasMultiVisualizations: boolean;
|
|
@@ -209,7 +211,7 @@ function getCompliantVisualizationAnnotation(
|
|
|
209
211
|
entityType: EntityType,
|
|
210
212
|
converterContext: ConverterContext,
|
|
211
213
|
bIsALP: Boolean
|
|
212
|
-
): LineItem |
|
|
214
|
+
): LineItem | PresentationVariant | SelectionPresentationVariant | undefined {
|
|
213
215
|
const annotationPath = converterContext.getManifestWrapper().getDefaultTemplateAnnotationPath();
|
|
214
216
|
const selectionPresentationVariant = getSelectionPresentationVariant(entityType, annotationPath, converterContext);
|
|
215
217
|
if (annotationPath && selectionPresentationVariant) {
|
|
@@ -346,7 +348,7 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
|
|
|
346
348
|
} else if (isMultipleViewConfiguration(config)) {
|
|
347
349
|
// key exists only on multi tables mode
|
|
348
350
|
const resolvedTarget = converterContext.getEntityTypeAnnotation((config as SingleViewPathConfiguration).annotationPath);
|
|
349
|
-
const viewAnnotation:
|
|
351
|
+
const viewAnnotation: ViewAnnotations = resolvedTarget.annotation;
|
|
350
352
|
converterContext = resolvedTarget.converterContext;
|
|
351
353
|
title = compileExpression(getExpressionFromAnnotation(viewAnnotation.Text));
|
|
352
354
|
// Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
|
|
@@ -356,15 +358,13 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
|
|
|
356
358
|
const tableVisualization = presentation.visualizations[index] as TableVisualization;
|
|
357
359
|
const filters = tableVisualization.control.filters || {};
|
|
358
360
|
filters.hiddenFilters = filters.hiddenFilters || { paths: [] };
|
|
359
|
-
if (!(config as SingleViewPathConfiguration).
|
|
361
|
+
if (!(config as SingleViewPathConfiguration).keepPreviousPersonalization) {
|
|
360
362
|
// Need to override Table Id to match with Tab Key (currently only table is managed in multiple view mode)
|
|
361
363
|
tableVisualization.annotation.id = getTableID((config as SingleViewPathConfiguration).key || "", "LineItem");
|
|
362
364
|
}
|
|
363
365
|
config = config as ViewAnnotationConfiguration;
|
|
364
366
|
if (config && config.annotation && config.annotation.term === UIAnnotationTerms.SelectionPresentationVariant) {
|
|
365
|
-
selectionVariantPath = (
|
|
366
|
-
config.annotation as SelectionPresentationVariantTypeTypes
|
|
367
|
-
).SelectionVariant.fullyQualifiedName.split("@")[1];
|
|
367
|
+
selectionVariantPath = config.annotation.SelectionVariant.fullyQualifiedName.split("@")[1];
|
|
368
368
|
} else {
|
|
369
369
|
selectionVariantPath = (config as SingleViewPathConfiguration).annotationPath;
|
|
370
370
|
}
|
|
@@ -480,7 +480,7 @@ const getViews = function (
|
|
|
480
480
|
converterContext: viewConverterContext,
|
|
481
481
|
annotation,
|
|
482
482
|
annotationPath: path.annotationPath,
|
|
483
|
-
|
|
483
|
+
keepPreviousPersonalization: path.keepPreviousPersonalization,
|
|
484
484
|
key: path.key,
|
|
485
485
|
visible: path.visible
|
|
486
486
|
});
|
|
@@ -506,6 +506,21 @@ const getViews = function (
|
|
|
506
506
|
});
|
|
507
507
|
};
|
|
508
508
|
|
|
509
|
+
const getMultiViewsControl = function (
|
|
510
|
+
converterContext: ConverterContext,
|
|
511
|
+
views: ListReportViewDefinition[]
|
|
512
|
+
): MultiViewsControlConfiguration | undefined {
|
|
513
|
+
const manifestWrapper = converterContext.getManifestWrapper();
|
|
514
|
+
const viewsDefinition: MultipleViewsConfiguration | undefined = manifestWrapper.getViewConfiguration();
|
|
515
|
+
if (views.length > 1 && !hasMultiVisualizations(converterContext)) {
|
|
516
|
+
return {
|
|
517
|
+
showTabCounts: viewsDefinition ? viewsDefinition?.showCounts || manifestWrapper.hasMultipleEntitySets() : undefined, // with multi EntitySets, tab counts are displayed by default
|
|
518
|
+
id: getIconTabBarID()
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
return undefined;
|
|
522
|
+
};
|
|
523
|
+
|
|
509
524
|
function getAlpViewConfig(converterContext: ConverterContext, viewConfigs: ViewConverterSettings[]): ViewConverterSettings[] {
|
|
510
525
|
const entityType = converterContext.getEntityType();
|
|
511
526
|
const annotation = getCompliantVisualizationAnnotation(entityType, converterContext, true);
|
|
@@ -532,6 +547,13 @@ function getAlpViewConfig(converterContext: ConverterContext, viewConfigs: ViewC
|
|
|
532
547
|
return viewConfigs;
|
|
533
548
|
}
|
|
534
549
|
|
|
550
|
+
function hasMultiVisualizations(converterContext: ConverterContext): boolean {
|
|
551
|
+
return (
|
|
552
|
+
converterContext.getManifestWrapper().hasMultipleVisualizations() ||
|
|
553
|
+
converterContext.getTemplateType() === TemplateType.AnalyticalListPage
|
|
554
|
+
);
|
|
555
|
+
}
|
|
556
|
+
|
|
535
557
|
export const getHeaderActions = function (converterContext: ConverterContext): BaseAction[] {
|
|
536
558
|
const manifestWrapper = converterContext.getManifestWrapper();
|
|
537
559
|
return insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext));
|
|
@@ -570,7 +592,6 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
|
|
|
570
592
|
const viewsDefinition: MultipleViewsConfiguration | undefined = manifestWrapper.getViewConfiguration();
|
|
571
593
|
const hasMultipleEntitySets = manifestWrapper.hasMultipleEntitySets();
|
|
572
594
|
const views: ListReportViewDefinition[] = getViews(converterContext, viewsDefinition);
|
|
573
|
-
const showTabCounts = viewsDefinition ? viewsDefinition?.showCounts || hasMultipleEntitySets : undefined; // with multi EntitySets, tab counts are displayed by default
|
|
574
595
|
const lrTableVisualizations = getTableVisualizations(views);
|
|
575
596
|
const lrChartVisualizations = getChartVisualizations(views);
|
|
576
597
|
const showPinnableToggle = lrTableVisualizations.some((table) => table.control.type === "ResponsiveTable");
|
|
@@ -601,8 +622,7 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
|
|
|
601
622
|
|
|
602
623
|
// Sort header actions according to position attributes in manifest
|
|
603
624
|
const headerActions = getHeaderActions(converterContext);
|
|
604
|
-
const
|
|
605
|
-
manifestWrapper.hasMultipleVisualizations() || converterContext.getTemplateType() === TemplateType.AnalyticalListPage;
|
|
625
|
+
const multiViewControl = getMultiViewsControl(converterContext, views);
|
|
606
626
|
if (hasMultipleEntitySets) {
|
|
607
627
|
checkChartFilterBarId(views, filterBarId);
|
|
608
628
|
}
|
|
@@ -619,23 +639,19 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
|
|
|
619
639
|
const targetControlIds = [
|
|
620
640
|
...(hideFilterBar ? [] : [filterBarId]),
|
|
621
641
|
...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []),
|
|
622
|
-
...(
|
|
642
|
+
...(multiViewControl ? [multiViewControl.id] : [])
|
|
623
643
|
];
|
|
624
644
|
|
|
625
|
-
const iconTabBarId = "fe::TabMultipleMode";
|
|
626
|
-
const displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
|
|
627
645
|
const stickySubheaderProvider =
|
|
628
|
-
|
|
646
|
+
multiViewControl && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? multiViewControl.id : undefined;
|
|
629
647
|
|
|
630
648
|
return {
|
|
631
649
|
mainEntitySet: sContextPath,
|
|
632
650
|
mainEntityType: `${sContextPath}/`,
|
|
633
|
-
|
|
634
|
-
iconTabBarId,
|
|
651
|
+
multiViewsControl: multiViewControl,
|
|
635
652
|
stickySubheaderProvider,
|
|
636
653
|
singleTableId,
|
|
637
654
|
singleChartId,
|
|
638
|
-
showTabCounts,
|
|
639
655
|
headerActions,
|
|
640
656
|
showPinnableToggle: showPinnableToggle,
|
|
641
657
|
filterBar: {
|
|
@@ -653,8 +669,7 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
|
|
|
653
669
|
id: filterVariantManagementID,
|
|
654
670
|
targetControlIds: targetControlIds.join(",")
|
|
655
671
|
},
|
|
656
|
-
|
|
657
|
-
hasMultiVisualizations: hasMultiVisualizations,
|
|
672
|
+
hasMultiVisualizations: hasMultiVisualizations(converterContext),
|
|
658
673
|
templateType: manifestWrapper.getTemplateType(),
|
|
659
674
|
useSemanticDateRange,
|
|
660
675
|
filterInitialLayout,
|