@tiba-spark/client-shared-lib 25.3.0-9 → 25.3.0-90
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/esm2022/libraries/constants/version-constants.mjs +2 -1
- package/esm2022/libraries/enums/localization.enum.mjs +2 -1
- package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.mjs +3 -9
- package/esm2022/libraries/modules/auth/auth-route-guard.mjs +7 -4
- package/esm2022/libraries/utils/index.mjs +2 -1
- package/esm2022/libraries/utils/sort.util.mjs +23 -0
- package/fesm2022/tiba-spark-client-shared-lib.mjs +3145 -3125
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/constants/version-constants.d.ts +1 -0
- package/libraries/constants/version-constants.d.ts.map +1 -1
- package/libraries/enums/localization.enum.d.ts +1 -0
- package/libraries/enums/localization.enum.d.ts.map +1 -1
- package/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.d.ts.map +1 -1
- package/libraries/modules/auth/auth-route-guard.d.ts +3 -1
- package/libraries/modules/auth/auth-route-guard.d.ts.map +1 -1
- package/libraries/utils/index.d.ts +1 -0
- package/libraries/utils/index.d.ts.map +1 -1
- package/libraries/utils/sort.util.d.ts +2 -0
- package/libraries/utils/sort.util.d.ts.map +1 -0
- package/package.json +9 -3
- package/src/libraries/theme/_variables.scss +2 -1
- package/src/libraries/theme/mat-components/_mat-nav-list.scss +1 -0
package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.mjs
CHANGED
|
@@ -85,27 +85,21 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
|
|
|
85
85
|
const alertsAndNotifications$ = this.alertsAndNotificationsServiceProxy.getAlertsAndNotifications(minutesAgo);
|
|
86
86
|
return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
|
|
87
87
|
const populateNotifications = await this.alertsAndNotificationsService.populateAlertsAndNotifications(alertsAndNotifications.data);
|
|
88
|
-
const badgeValue = populateNotifications.alerts.length + populateNotifications.notifications.length;
|
|
89
88
|
ctx.patchState({
|
|
90
|
-
aggregatedNotificationSeverity: populateNotifications.aggregatedNotificationSeverity,
|
|
91
89
|
alerts: populateNotifications.alerts ?? [],
|
|
92
90
|
notifications: populateNotifications.notifications ?? [],
|
|
93
|
-
badgeValue,
|
|
94
|
-
displayBadge: badgeValue > 0
|
|
95
91
|
});
|
|
92
|
+
this.recalculateBadgeAndSeverity(ctx);
|
|
96
93
|
}));
|
|
97
94
|
}
|
|
98
95
|
onLoadMobileNotificationsAction(ctx, { minutesAgo }) {
|
|
99
96
|
const alertsAndNotifications$ = this.mobileServiceProxy.getMobileAlertsAndNotification(minutesAgo, VERSION_V1);
|
|
100
97
|
return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
|
|
101
|
-
const badgeValue = alertsAndNotifications.data.alerts.length + alertsAndNotifications.data.notifications.length;
|
|
102
98
|
ctx.patchState({
|
|
103
|
-
aggregatedNotificationSeverity: alertsAndNotifications.data.aggregatedNotificationSeverity,
|
|
104
99
|
alerts: alertsAndNotifications.data.alerts ?? [],
|
|
105
100
|
notifications: alertsAndNotifications.data.notifications ?? [],
|
|
106
|
-
badgeValue,
|
|
107
|
-
displayBadge: badgeValue > 0
|
|
108
101
|
});
|
|
102
|
+
this.recalculateBadgeAndSeverity(ctx);
|
|
109
103
|
}));
|
|
110
104
|
}
|
|
111
105
|
onClearAlertsAndNotificationsAction(ctx, _) {
|
|
@@ -675,4 +669,4 @@ export { AlertsAndNotificationsState };
|
|
|
675
669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState, decorators: [{
|
|
676
670
|
type: Injectable
|
|
677
671
|
}], ctorParameters: function () { return [{ type: i1.AppConfigService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Store }, { type: i5.AlertsAndNotificationsServiceProxy }, { type: i6.AlertNotificationService }, { type: i7.AlertsAndNotificationsService }, { type: i8.CommandNotificationService }, { type: i9.BaseFacilityCommandsService }, { type: i10.FacilityService }, { type: i11.FacilityServiceProxy }, { type: i1.AppConfigService }, { type: i5.MobileServiceProxy }]; }, propDecorators: { onUpdateUserAlertsPreferencesAction: [], onUpdateUserNotificaitonsPreferencesAction: [], onLoadAlertsAndNotificationsAction: [], onLoadMobileNotificationsAction: [], onClearAlertsAndNotificationsAction: [], onRemoveExpiredAlertsAndNotificationsAction: [], onAlertChangedAction: [], onNotificationChangeAction: [], onHandledNotificationAction: [], onHandleNotificationAction: [], onHandleAlertsAction: [] } });
|
|
678
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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QVEsRUFBRTtzREFHVjtBQUdNO0lBRE4sUUFBUSxFQUFFO3VFQUdWO0FBR007SUFETixRQUFRLEVBQUU7bURBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTtxREFHVjtBQXpDVSwyQkFBMkI7SUFadkMsS0FBSyxDQUE4QjtRQUNsQyxJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsOEJBQThCLEVBQUUsb0JBQW9CLENBQUMsR0FBRztZQUN4RCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxLQUFLO1lBQ25CLGdCQUFnQixFQUFFLEVBQUU7U0FDckI7S0FDRixDQUFDO0dBRVcsMkJBQTJCLENBd3NCdkM7U0F4c0JZLDJCQUEyQjs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVOytnQkE2Q1QsbUNBQW1DLE1BVW5DLDBDQUEwQyxNQVUxQyxrQ0FBa0MsTUFrQmxDLCtCQUErQixNQWdCL0IsbUNBQW1DLE1BWW5DLDJDQUEyQyxNQWEzQyxvQkFBb0IsTUFpQ3BCLDBCQUEwQixNQWUxQiwyQkFBMkIsTUEwQjNCLDBCQUEwQixNQXFCMUIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9hbGVydC1ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MsIENvbW1hbmROb3RpZmljYXRpb25Db25maWcsIENvbW1hbmROb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24tY29uZmlnJztcclxuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzLCBOb3RpZmljYXRpb25IUG9zaXRpb25zLCBOb3RpZmljYXRpb25WUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XHJcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBWRVJTSU9OXzlfMl8wLCBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nIH0gZnJvbSAnLi4vLi4vZW51bXMvYWxlcnRzLWRldmljZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2xvdWQtY29uZmlybS1kaWFsb2ctZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE1vYmlsZVNlcnZpY2VQcm94eSwgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XHJcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5zdGF0ZSc7XHJcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZSB9IGZyb20gJy4uL2ZhY2lsaXR5JztcclxuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcclxuaW1wb3J0IHsgUGFya01hbmFnZXJTdGF0ZSB9IGZyb20gJy4uL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuc3RhdGUnO1xyXG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xyXG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQWxlcnRDaGFuZ2VkQWN0aW9uLFxyXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXHJcbiAgTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sXHJcbiAgTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24sXHJcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcclxuICBSZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uLFxyXG4gIFVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb25cclxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcclxuaW1wb3J0IHsgQWxlcnRzUHJlZmVyZW5jZXNNYXAsIEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwLCBGYWNpbGl0eVByZWZlcmVuY2VzTWFwIH0gZnJvbSAnLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsIHtcclxuICBhbGVydHM6IEFsZXJ0RHRvW107XHJcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XHJcbiAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eTtcclxuICBiYWRnZVZhbHVlOiBudW1iZXIsXHJcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxyXG4gIG5vdGlmaWNhdGlvbnNNYXA6IE51bWJlck1hcDxudW1iZXI+O1xyXG59XHJcblxyXG5AU3RhdGU8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPih7XHJcbiAgbmFtZTogJ2FsZXJ0c0FuZE5vdGlmaWNhdGlvbnMnLFxyXG4gIGRlZmF1bHRzOiB7XHJcbiAgICBhbGVydHM6IFtdLFxyXG4gICAgbm90aWZpY2F0aW9uczogW10sXHJcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcclxuICAgIGJhZGdlVmFsdWU6IDAsXHJcbiAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxyXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXHJcbiAgfSxcclxufSlcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWxlcnRzQW5kTm90aWZpY2F0aW9uc1N0YXRlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eSxcclxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2U6IEZhY2lsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2JpbGVTZXJ2aWNlUHJveHk6IE1vYmlsZVNlcnZpY2VQcm94eSkge1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBzdGF0aWMgYWxlcnRzKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBBbGVydER0b1tdIHtcclxuICAgIHJldHVybiBzdGF0ZS5hbGVydHM7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHN0YXRpYyBub3RpZmljYXRpb25zKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBOb3RpZmljYXRpb25EdG9bXSB7XHJcbiAgICByZXR1cm4gc3RhdGUubm90aWZpY2F0aW9ucztcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uU2V2ZXJpdHkge1xyXG4gICAgcmV0dXJuIHN0YXRlLmFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGJhZGdlVmFsdWUoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gc3RhdGUuYmFkZ2VWYWx1ZTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGRpc3BsYXlCYWRnZShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3RhdGUuZGlzcGxheUJhZGdlO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pXHJcbiAgb25VcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XHJcbiAgICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzLFxyXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbilcclxuICBvblVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyTm90aWZpY2FpdG9uc1ByZWZlcmVuY2VzQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xyXG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyxcclxuICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnN0cmluZ2lmeShhY3Rpb24udXNlck5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjdHguZGlzcGF0Y2gobmV3IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbihzZXR0aW5nKSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxyXG4gIG9uTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XHJcbiAgICBjb25zdCBhbGVydHNBbmROb3RpZmljYXRpb25zJCA9IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5nZXRBbGVydHNBbmROb3RpZmljYXRpb25zKG1pbnV0ZXNBZ28pO1xyXG5cclxuICAgIHJldHVybiBhbGVydHNBbmROb3RpZmljYXRpb25zJC5waXBlKHRhcChhc3luYyBhbGVydHNBbmROb3RpZmljYXRpb25zID0+IHtcclxuICAgICAgY29uc3QgcG9wdWxhdGVOb3RpZmljYXRpb25zOiBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvID0gYXdhaXQgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZUFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMoYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhZGdlVmFsdWUgPSBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMuYWxlcnRzLmxlbmd0aCArIHBvcHVsYXRlTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25zLmxlbmd0aDtcclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogcG9wdWxhdGVOb3RpZmljYXRpb25zLmFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eSxcclxuICAgICAgICBhbGVydHM6IHBvcHVsYXRlTm90aWZpY2F0aW9ucy5hbGVydHMgPz8gW10sXHJcbiAgICAgICAgbm90aWZpY2F0aW9uczogcG9wdWxhdGVOb3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnMgPz8gW10sXHJcbiAgICAgICAgYmFkZ2VWYWx1ZSxcclxuICAgICAgICBkaXNwbGF5QmFkZ2U6IGJhZGdlVmFsdWUgPiAwXHJcbiAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbilcclxuICBvbkxvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbWludXRlc0FnbyB9OiBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbikge1xyXG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5nZXRNb2JpbGVBbGVydHNBbmROb3RpZmljYXRpb24obWludXRlc0FnbywgVkVSU0lPTl9WMSk7XHJcblxyXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xyXG4gICAgICBjb25zdCBiYWRnZVZhbHVlID0gYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFsZXJ0cy5sZW5ndGggKyBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEubm90aWZpY2F0aW9ucy5sZW5ndGg7XHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YS5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHksXHJcbiAgICAgICAgYWxlcnRzOiBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEuYWxlcnRzID8/IFtdLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YS5ub3RpZmljYXRpb25zID8/IFtdLFxyXG4gICAgICAgIGJhZGdlVmFsdWUsXHJcbiAgICAgICAgZGlzcGxheUJhZGdlOiBiYWRnZVZhbHVlID4gMFxyXG4gICAgICB9KTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxyXG4gIG9uQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIF86IENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbikge1xyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBhbGVydHM6IFtdLFxyXG4gICAgICBub3RpZmljYXRpb25zOiBbXSxcclxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Mb3csXHJcbiAgICAgIGJhZGdlVmFsdWU6IDAsXHJcbiAgICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXHJcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pXHJcbiAgb25SZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XHJcbiAgICBjb25zdCBub3dVdGMgPSBtb21lbnQudXRjKCk7IC8vIEN1cnJlbnQgVVRDIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcclxuICAgIGNvbnN0IG1pbnV0ZXNBZ28gPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hY3RpdmVOb3RpZmljYXRpb25zLm1pbnV0ZXNBZ287XHJcbiAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHMuZmlsdGVyKGFsZXJ0ID0+IG1vbWVudC51dGMoYWxlcnQuY2xvdWRFdmVudERhdGVUaW1lKS5hZGQobWludXRlc0FnbywgJ21pbnV0ZXMnKS5pc0FmdGVyKG5vd1V0YykpO1xyXG5cclxuICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgYWxlcnRzXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihBbGVydENoYW5nZWRBY3Rpb24pXHJcbiAgb25BbGVydENoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBhbGVydCwgZ3VpZCB9OiBBbGVydENoYW5nZWRBY3Rpb24pIHtcclxuICAgIGlmIChhbGVydCAmJiB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLmlzQWxlcnRUeXBlRGVmaW5lZChhbGVydC5ldmVudERlc2NyaXB0aW9uKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHgsIGFsZXJ0LCBndWlkKTtcclxuXHJcbiAgICAgIGlmIChhbGVydC5ldmVudFN0YXRlICYmIHRoaXMuaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0LCBndWlkKSkge1xyXG5cclxuICAgICAgICBpZiAoIWFsZXJ0LmRldmljZU5hbWUpIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmtEZXZpY2VzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChQYXJrTWFuYWdlclN0YXRlLmRldmljZXMpO1xyXG4gICAgICAgICAgYWxlcnQuZGV2aWNlTmFtZSA9IHBhcmtEZXZpY2VzPy5maW5kKGQgPT4gZC5pZCA9PT0gYWxlcnQuZGV2aWNlSUQpPy5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhbGVydC5wYXJrTmFtZSkge1xyXG4gICAgICAgICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xyXG4gICAgICAgICAgaWYgKGxvdHNNYXApIHtcclxuICAgICAgICAgICAgYWxlcnQucGFya05hbWUgPSBsb3RzTWFwW2FsZXJ0LnBhcmtJZF0/Lm5hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XHJcblxyXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyBhbGVydCB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcclxuICAgICAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHM7XHJcbiAgICAgICAgYWxlcnRzLnVuc2hpZnQoYWxlcnQpO1xyXG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICAgIGFsZXJ0c1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24pXHJcbiAgb25Ob3RpZmljYXRpb25DaGFuZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbikge1xyXG4gICAgc3dpdGNoIChub3RpZmljYXRpb24udHlwZSkge1xyXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCkpIHtcclxuICAgICAgICAgIHRoaXMub25EeW5hbWljUHJpY2luZ0NvbmRpdGlvbkNoYW5nZShjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKVxyXG4gIG9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xyXG5cclxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25FeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcclxuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcclxuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xyXG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcclxuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XHJcbiAgICAgICAgISh0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBub3RpZmljYXRpb25QSykpO1xyXG5cclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXHJcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XHJcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKVxyXG4gIG9uSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbikge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBoYW5kbGUgdXNlciAtIGFuZCBzYXZlIGluIHN0YXRlXHJcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XHJcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcclxuICAgICAgICB0aGlzLnVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oY3R4LCBub3RpZmljYXRpb25zLCBub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLKTtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsb3NlIGNyaXRpY2FsIGFsZXJ0IG1vZGFsXHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEhhbmRsZUFsZXJ0c0FjdGlvbilcclxuICBvbkhhbmRsZUFsZXJ0c0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IGFsZXJ0RHRvLCBndWlkIH06IEhhbmRsZUFsZXJ0c0FjdGlvbikge1xyXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XHJcbiAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHM7XHJcbiAgICBjb25zdCBleGlzdEFsZXJ0SW5kZXggPSBhbGVydHMuZmluZEluZGV4KGFsZXJ0ID0+IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCkgPT09IGFsZXJ0UEsgJiZcclxuICAgICAgdGhpcy5zdGF0ZU1hdGNoZXMoYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpKTtcclxuXHJcbiAgICBpZiAoZXhpc3RBbGVydEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBhbGVydHNbZXhpc3RBbGVydEluZGV4XS5oYW5kbGluZ0J5VXNlciA9IGFsZXJ0RHRvLmhhbmRsaW5nQnlVc2VyO1xyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgYWxlcnRzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgYWxlcnRUeXBlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvclthbGVydC5ldmVudERlc2NyaXB0aW9uXSk7XHJcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xyXG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY3JpdGljYWxfYWxlcnRfbWVzc2FnZSwge1xyXG4gICAgICAgIGFsZXJ0VHlwZU5hbWVcclxuICAgICAgfSldLFxyXG4gICAgICBjb25maXJtVGl0bGU6IGFsZXJ0VHlwZU5hbWUsXHJcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXHJcbiAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYW5jZWwpLFxyXG4gICAgICBkZXZpY2U6IHtcclxuICAgICAgICBjb21tSWQ6IGFsZXJ0LnJlYWRlcklELnRvU3RyaW5nKCksXHJcbiAgICAgICAgbmFtZTogYWxlcnQuZGV2aWNlTmFtZVxyXG4gICAgICB9LFxyXG4gICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXHJcbiAgICAgIHpvbmVOYW1lOiBhbGVydC5wYXJrWm9uZU5hbWUsXHJcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Dcml0aWNhbCxcclxuICAgICAgbm90aWZpY2F0aW9uU2V2ZXJpdHlJbnZlcnQ6IHRydWUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBhbGVydC5kZXNjcmlwdGlvbixcclxuICAgICAgY2FyUGxhdGU6IGFsZXJ0LmNhclBsYXRlLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1jcml0aWNhbC1tb2RhbC0ke2FsZXJ0UEt9YCxcclxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcclxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHthbGVydFBLfWAsXHJcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXHJcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZUFsZXJ0OiBIYW5kbGluZ0FsZXJ0RHRvID0gbmV3IEhhbmRsaW5nQWxlcnREdG8oe1xyXG4gICAgICAgICAgZ3VpZDogZ3VpZCxcclxuICAgICAgICAgIHBhcmtJZDogYWxlcnQucGFya0lkLFxyXG4gICAgICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxyXG4gICAgICAgICAgZGV2aWNlSWQ6IGFsZXJ0LmRldmljZUlELFxyXG4gICAgICAgICAgZXZlbnREZXNjcmlwdGlvbjogYWxlcnQuZXZlbnREZXNjcmlwdGlvbixcclxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICBpZDogYWxlcnQuaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LmhhbmRsZUFsZXJ0Tm90aWZpY2F0aW9uKGhhbmRsZUFsZXJ0KS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckFsZXJ0VG9hc3RFdmVudChyZXMuZGF0YSB8fCBhbGVydCwgZ3VpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9tZXNzYWdlKV0sXHJcbiAgICAgIGNvbmZpcm1UaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF90aXRsZSksXHJcbiAgICAgIGNvbmZpcm1TdWJUaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9zdWJfdGl0bGUsIHsgY29uZGl0aW9uTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNvbmRpdGlvbk5hbWUgfSksXHJcbiAgICAgIHBhcmtOYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdE5hbWUsXHJcbiAgICAgIHpvbmVOYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uem9uZT8ubmFtZSxcclxuICAgICAgb2tUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ueWVzKSxcclxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIGd1aWQpO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgcGFuZWxDbGFzczogYHRiLWR5bmFtaWMtcHJpY2luZy1jb25kaXRpb24tbW9kYWwtJHtub3RpZmljYXRpb24uaWR9YCxcclxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcclxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxyXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxyXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcclxuICAgICAgICBjb25zdCBoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvOiBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gbmV3IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8oe1xyXG4gICAgICAgICAgY2xvdWRQYXJrSWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCxcclxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICBpZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5oYW5kbGVEeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IGRwYyA9IHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcclxuICAgICAgICAgIGNvbnN0IHJhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEJhc2VSYXRlQnlJZChkcGMucGFya2luZ0xvdElkLCBkcGMucmF0ZUlkLCBkcGMuZ3VpZCkpO1xyXG4gICAgICAgICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcclxuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckR5bmFtaWNQcmljaW5nVG9hc3RFdmVudChkcGMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5QWxlcnQoYWxlcnQsIGd1aWQpO1xyXG4gICAgaWYgKG5vdGlmaWNhdGlvbikge1xyXG4gICAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XHJcbiAgICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xyXG4gICAgICBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdID0gbm90aWZpY2F0aW9uLnRvYXN0SWQ7XHJcblxyXG4gICAgICBub3RpZmljYXRpb24ub25UYXAucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckFsZXJ0VG9hc3RFdmVudChhbGVydCwgZ3VpZCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZURpYWxvZ3MoZGlhbG9nSWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKT8uZm9yRWFjaChkaWFsb2cgPT4ge1xyXG4gICAgICBpZiAoZGlhbG9nSWRzLmhhcyhkaWFsb2cuaWQpKSB7XHJcbiAgICAgICAgZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZURpYWxvZ0J5SWQoZGlhbG9nSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgb3BlbkRpYWxvZ3MgPSB0aGlzLm1vZGFsU2VydmljZS5nZXRPcGVuRGlhbG9ncygpO1xyXG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XHJcblxyXG4gICAgaWYgKGRpYWxvZykge1xyXG4gICAgICBkaWFsb2cuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VBbGVydERpYWxvZ3MoYWxlcnRQSzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RhbEtleXMgPSBuZXcgU2V0PHN0cmluZz4oW1xyXG4gICAgICBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxyXG4gICAgICBgbHByLW1pc21hdGNoLW1vZGFsLSR7YWxlcnRQS31gLFxyXG4gICAgICBgbG9zdC10aWNrZXQtbW9kYWwtJHthbGVydFBLfWAsXHJcbiAgICBdKTtcclxuXHJcbiAgICB0aGlzLmNsb3NlRGlhbG9ncyhtb2RhbEtleXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZU5vdGlmaWNhdGlvbkRpYWxvZ3Mobm90aWZpY2F0aW9uUEs6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kYWxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICAgYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWAsXHJcbiAgICAgIGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcclxuICAgIF0pO1xyXG5cclxuICAgIHRoaXMuY2xvc2VEaWFsb2dzKG1vZGFsS2V5cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xyXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XHJcblxyXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcclxuICAgIGNvbnN0IGFsZXJ0RXhpc3RzID0gYWxlcnRzLmZpbmQoYWxlcnQgPT5cclxuICAgICAgdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJiB0aGlzLnN0YXRlTWF0Y2hlcyhhbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XHJcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdO1xyXG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcclxuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZEFsZXJ0cyA9IGFsZXJ0cy5maWx0ZXIoYWxlcnQgPT4gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSAhPT0gYWxlcnRQSyk7XHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxyXG4gICAgICAgIGFsZXJ0czogZmlsdGVyZWRBbGVydHNcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xyXG5cclxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25FeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcclxuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XHJcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcclxuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XHJcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcclxuXHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxyXG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcclxuXHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGZpbHRlcmVkTm90aWZpY2F0aW9ucyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25zKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xyXG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xyXG5cclxuICAgIC8vIGZpbmQgYWxsIHRoZSBkeW5hbWljIHByaWNpbmcgdHJpZ2dlcmVkIGNvbmRpdGlvbnMgb2Ygc2FtZSBndWlkIGFuZCBwYXJrSWQgdG8gYmUgY2xvc2VcclxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmXHJcbiAgICAgIG5vdGlmaWNhdGlvbi5ndWlkID09PSBndWlkICYmIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJrSWQgPT09IHBhcmtJZCk7XHJcblxyXG4gICAgaWYgKGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChjb25zdCBkcCBvZiBkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cykge1xyXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhkcCwgZ3VpZCk7XHJcbiAgICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uIHx8ICEobm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKSk7XHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGZpbHRlcmVkTm90aWZpY2F0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvKSB7XHJcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XHJcbiAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRCYXNlUmF0ZUJ5SWQoZHBjLnBhcmtpbmdMb3RJZCwgZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcclxuICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XHJcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XHJcbiAgICAgIG1lc3NhZ2VzLFxyXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcclxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxyXG4gICAgICB2UG9zaXRpb246IE5vdGlmaWNhdGlvblZQb3NpdGlvbnMuQm90dG9tLFxyXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxyXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXHJcbiAgICAgIHR5cGU6IENvbW1hbmROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5zaG93KGNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcclxuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19yZXZlcnRlZF90b19kZWZhdWx0X3JhdGUpO1xyXG4gICAgY29uc3Qgc3ViVGl0bGUgPSBgJHtkcGMucGFya2luZ0xvdE5hbWV9JHtkcGMuem9uZT8ubmFtZSA/ICcgfCAnICsgZHBjLnpvbmU/Lm5hbWUgOiAnJ31gO1xyXG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xyXG4gICAgICBtZXNzYWdlczogW3tcclxuICAgICAgICB2YWx1ZTogdGl0bGUsXHJcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxyXG4gICAgICAgIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5zdWJUaXRsZSxcclxuICAgICAgfV0sXHJcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxyXG4gICAgICBoUG9zaXRpb246IE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMuUmlnaHQsXHJcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXHJcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXHJcbiAgICAgIGNsYXNzOiBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MuU3VjY2VzcyxcclxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLm1hcHBlZFVzZXJTZXR0aW5ncyk7XHJcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XHJcblxyXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gdXNlckFsZXJ0c1ByZWZlcmVuY2VzIHdlIGRvbid0IGZpbHRlciBhdCBhbGxcclxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xyXG4gICAgICAvLyBJZiB0aGUgdXNlciBlbmFibGVkIHRoZSBub3RpZmljYXRpb25zXHJcbiAgICAgIC8vIEVsc2UgdGhlIHVzZXIgZGlzYWJsZWQgYWxsIHRoZSBub3RpZmljYXRpb25zXHJcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XHJcbiAgICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XHJcbiAgICAgICAgY29uc3QgaXNBbGVydEZpbHRlclZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl85XzJfMCk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIDkuMS4wIG9yIGJlbG93LCBhbGwgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZFxyXG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIDkuMi4wIGFuZCBhYm92ZSwgd2UgZmlsdGVyIGJ5IHRoZSBwcmVmZXJlbmNlc1xyXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xyXG4gICAgbGV0IGlzQWxlcnRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcclxuICAgIC8vIEVsc2Ugd2UgYWxsb3cgYWxsIHRvIHBhc3MgYXMgdGhlIHVzZXIgZGlkbid0IHNldCBwcmVmZXJlbmNlcyB5ZXRcclxuICAgIGlmIChPYmplY3Qua2V5cyh1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXApLmxlbmd0aCkge1xyXG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gR2V0cyB0aGUgdHJlZUlkIG9mIHRoZSB0ZW5hbnQgLSBJbiBjYXNlIHRoZSB1c2VyIHNlbGVjdGVkIFwiQWxsIFRlbmFudCBQYXJraW5nIExvdHNcIlxyXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xyXG5cclxuICAgICAgLy8gR2V0cyB0aGUgdHJlZSBwYXJrIElkIG9mIHRoZSBhbGVydFxyXG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcclxuXHJcbiAgICAgIC8vIFdlIEdldCB0aGUgc2V0dGluZyBvZiB0aGUgUGFyaywgUGFyZW50UGFyayBvciBQYXJrc1RyZWVSb290XHJcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcclxuXHJcbiAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBmYWNpbGl0eSB3YXMgc2VsZWN0ZWRcclxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcclxuICAgICAgICBjb25zdCBhbGVydFR5cGVQcmVmZXJlbmNlc01hcDogQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXAgPSBmYWNpbGl0eVByZWZlcmVuY2VzTWFwW2FsZXJ0LmV2ZW50RGVzY3JpcHRpb25dO1xyXG5cclxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcclxuICAgICAgICBpZiAoYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXApIHtcclxuICAgICAgICAgIGNvbnN0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZSA9IHRoaXMuZ2V0QWxlcnRzRGV2aWNlVHlwZShhbGVydCk7XHJcblxyXG4gICAgICAgICAgLy8gV2UgY2hlY2sgdGhlIGlmIHRoZSBkZXZpY2UgdHlwZSB3YXMgc2VsZWN0ZWRcclxuICAgICAgICAgIGlzQWxlcnRFbmFibGVkID0gYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnREZXZpY2VUeXBlXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFsZXJ0c0RldmljZVR5cGUoYWxlcnQ6IEFsZXJ0RHRvKTogQWxlcnRzRGV2aWNlVHlwZSB7XHJcbiAgICBsZXQgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlO1xyXG4gICAgY29uc3QgYWxlcnRzRGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZVtdID0gRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nLmdldChhbGVydC5kZXZpY2VUeXBlKTtcclxuXHJcbiAgICBzd2l0Y2ggKGFsZXJ0LmRldmljZVR5cGUpIHtcclxuICAgICAgY2FzZSBEZXZpY2VUeXBlLkNhc2g6XHJcbiAgICAgICAgYWxlcnREZXZpY2VUeXBlID0gYWxlcnQucmVhZGVySUQgPT09IDAgPyBBbGVydHNEZXZpY2VUeXBlLk1hc3RlciA6IEFsZXJ0c0RldmljZVR5cGUuQ2FzaFJlZ2lzdGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0c0RldmljZVR5cGU/LlswXTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWxlcnREZXZpY2VUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25IYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKGN0eCwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfSk7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XHJcblxyXG4gICAgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc1RyaWdnZXJlZCkge1xyXG4gICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCwgY3R4KTtcclxuICAgIH0gZWxzZSBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzQWN0aXZhdGVkKSB7XHJcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgZmFsbGVuIGJhY2sgdG8gdGhlIGRlZmF1bHQgcmF0ZVxyXG4gICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uRHRvKS50aGVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi50cmlnZ2VyQWN0aW9uID09PSBEeW5hbWljUHJpY2luZ1RyaWdnZXJBY3Rpb24uQXV0b21hdGljU3dpdGNoUmF0ZSkge1xyXG4gICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uIGluZGljYXRpbmcgdGhlIHJhdGUgaGFzIGF1dG9tYXRpYyBzd2l0Y2hcclxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb25EdG8pLnRoZW4oKTtcclxuICAgICAgdGhpcy5jbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsb3VkUGFya0lkKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFsZXJ0UGFya0lkID0gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgPiAwID8gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgOiBhbGVydC5wYXJrSWQ7XHJcbiAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XHJcbiAgICByZXR1cm4gbG90c01hcFthbGVydFBhcmtJZF0/LmNsb3VkSWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBrTWF0Y2hlcyA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uUEs6IHN0cmluZykgPT4gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvbkR0by5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEs7XHJcbiAgcHJpdmF0ZSBzdGF0ZU1hdGNoZXMgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBldmVudFN0YXRlOiBib29sZWFuKSA9PiBhbGVydER0by5ldmVudFN0YXRlID09PSBldmVudFN0YXRlO1xyXG4gIHByaXZhdGUgYWxlcnRQSyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cclxuICAgIGAke2d1aWR9XyR7YWxlcnREdG8ucGFya0lkfV8ke2FsZXJ0RHRvLnJlYWRlcklEfV8ke2FsZXJ0RHRvLmRldmljZUlEfV8ke2FsZXJ0RHRvLmV2ZW50RGVzY3JpcHRpb259YDtcclxuICBwcml2YXRlIG5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xyXG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xyXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XHJcbiAgICAgICAgY29uc3QgeyBpZCwgem9uZSB9ID0gbm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xyXG4gICAgICAgIGtleSA9IHpvbmUgPyBgJHtndWlkfV8ke2lkfV8ke3pvbmUuaWR9YCA6IGAke2d1aWR9XyR7aWR9YDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPik6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RhdGUgPSBjdHguZ2V0U3RhdGUoKTtcclxuICAgIGNvbnN0IGFsZXJ0cyA9IHN0YXRlLmFsZXJ0cztcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zO1xyXG5cclxuICAgIGNvbnN0IGJhZGdlVmFsdWUgPSBhbGVydHMubGVuZ3RoICsgbm90aWZpY2F0aW9ucy5sZW5ndGg7XHJcbiAgICBjb25zdCBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHkgPSB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZWROb3RpZmljYXRpb25UeXBlKGFsZXJ0cywgbm90aWZpY2F0aW9ucyk7XHJcblxyXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICBiYWRnZVZhbHVlLFxyXG4gICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHksXHJcbiAgICAgIGRpc3BsYXlCYWRnZTogYmFkZ2VWYWx1ZSA+IDBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgYWxlcnQgYmFzZWQgb24gY29uZGl0aW9uc1xyXG4gIHByaXZhdGUgcHJvY2Vzc0FuZERpc3BsYXlBbGVydChjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xyXG4gICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcclxuXHJcbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlKSB7XHJcbiAgICAgIHN3aXRjaCAoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxPU1RfVElDS0VUOlxyXG4gICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxSUF9OT1RfTUFUQ0g6XHJcbiAgICAgICAgICB0aGlzLm9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0LCBndWlkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdGhhdCBwcm9jZXNzZXMgYW5kIGRpc3BsYXlzIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gY29uZGl0aW9uc1xyXG4gIHByaXZhdGUgcHJvY2Vzc0FuZERpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZywgY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPik6IHZvaWQge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb25cclxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpO1xyXG4gICAgY29uc3QgZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW25vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90SWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcclxuICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBmZWF0dXJlUGVybWlzc2lvbnM/LmluY2x1ZGVzKFBlcm1pc3Npb25UeXBlLlNldEFjdGl2ZVJhdGUpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgaXMgaW4gbW9iaWxlIG1vZGUgb3IgaWYgaXQncyBpbiB0aGUgY29ycmVjdCBtb2R1bGVcclxuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcclxuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XHJcblxyXG4gICAgLy8gUHJvY2VlZCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbWV0XHJcbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlICYmIGhhc1Blcm1pc3Npb24pIHtcclxuICAgICAgdGhpcy5vcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcclxuXHJcbiAgICAgIC8vIFB1c2ggdGhlIG5ldyBub3RpZmljYXRpb24gdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXHJcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xyXG4gICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uRHRvKTtcclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gUmVjYWxjdWxhdGUgYmFkZ2UgYW5kIHNldmVyaXR5XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oXHJcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LFxyXG4gICAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW10sXHJcbiAgICBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0byxcclxuICAgIG5vdGlmaWNhdGlvblBLOiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChub3RpZmljYXRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGV4aXN0Tm90aWZpY2F0aW9uSW5kZXggPSBub3RpZmljYXRpb25zLmZpbmRJbmRleChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xyXG5cclxuICAgICAgaWYgKGV4aXN0Tm90aWZpY2F0aW9uSW5kZXggIT09IC0xICYmIG5vdGlmaWNhdGlvbnNbZXhpc3ROb3RpZmljYXRpb25JbmRleF0uZHluYW1pY1ByaWNpbmdDb25kaXRpb24pIHtcclxuICAgICAgICBub3RpZmljYXRpb25zW2V4aXN0Tm90aWZpY2F0aW9uSW5kZXhdLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmhhbmRsaW5nQnlVc2VyID1cclxuICAgICAgICAgIG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LmhhbmRsaW5nQnlVc2VyO1xyXG5cclxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7IG5vdGlmaWNhdGlvbnMgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZmFjaWxpdHlJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNOb3RpZmljYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcclxuICAgIGNvbnN0IHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlczogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyk7XHJcblxyXG4gICAgaWYgKHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcz8uaXNFbmFibGVkKSB7XHJcbiAgICAgIC8vIEdldHMgdGhlIGdyb3VwIGZhY2lsaXR5IElkIG9mIHRoZSB0ZW5hbnQgLSBJbiBjYXNlIHRoZSB1c2VyIHNlbGVjdGVkIFwiQWxsIFRlbmFudCBQYXJraW5nIExvdHNcIlxyXG4gICAgICBjb25zdCB0ZW5hbnRGYWNpbGl0eUlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk/LnRyZWVJZDtcclxuXHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBuZXcgdXNlcnM6IGVtcHR5IHByZWZlcmVuY2VzIG1lYW5zIGRlZmF1bHQgYWNjZXNzIHRvIGFsbCBub3RpZmljYXRpb25zXHJcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgbmV3IHVzZXJzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyB1bnRpbCB0aGV5IGV4cGxpY2l0bHkgY29uZmlndXJlIHRoZWlyIHByZWZlcmVuY2VzXHJcbiAgICAgICAgaXNOb3RpZmljYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBGb3IgdXNlcnMgd2l0aCBjb25maWd1cmVkIHByZWZlcmVuY2VzLCBjaGVjayBpZiB0aGUgc3BlY2lmaWMgZmFjaWxpdHkgYW5kIG5vdGlmaWNhdGlvbiB0eXBlIGFyZSBlbmFibGVkXHJcbiAgICAgICAgLy8gVXNlIHRlbmFudCBmYWNpbGl0eSBwcmVmZXJlbmNlcyBmaXJzdCwgZmFsbGJhY2sgdG8gc3BlY2lmaWMgZmFjaWxpdHkgcHJlZmVyZW5jZXNcclxuICAgICAgICBjb25zdCBmYWNpbGl0eVByZWZlcmVuY2VzID0gdXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzW3RlbmFudEZhY2lsaXR5SWRdID8/XHJcbiAgICAgICAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXNbZmFjaWxpdHlJZF07XHJcblxyXG4gICAgICAgIGlmIChmYWNpbGl0eVByZWZlcmVuY2VzPy5bbm90aWZpY2F0aW9uLnR5cGVdKSB7XHJcbiAgICAgICAgICBpc05vdGlmaWNhdGlvbkVuYWJsZWQgPSBmYWNpbGl0eVByZWZlcmVuY2VzW25vdGlmaWNhdGlvbi50eXBlXS5lbmFibGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzTm90aWZpY2F0aW9uRW5hYmxlZDtcclxuICB9XHJcbn1cclxuIl19
|
|
672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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WUFDbkIsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQjtLQUNGLENBQUM7R0FFVywyQkFBMkIsQ0Ftc0J2QztTQW5zQlksMkJBQTJCOzRGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVU7K2dCQTZDVCxtQ0FBbUMsTUFVbkMsMENBQTBDLE1BVTFDLGtDQUFrQyxNQWVsQywrQkFBK0IsTUFjL0IsbUNBQW1DLE1BWW5DLDJDQUEyQyxNQWEzQyxvQkFBb0IsTUFpQ3BCLDBCQUEwQixNQWUxQiwyQkFBMkIsTUEwQjNCLDBCQUEwQixNQXFCMUIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9hbGVydC1ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MsIENvbW1hbmROb3RpZmljYXRpb25Db25maWcsIENvbW1hbmROb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24tY29uZmlnJztcclxuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24vY29tbWFuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzLCBOb3RpZmljYXRpb25IUG9zaXRpb25zLCBOb3RpZmljYXRpb25WUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XHJcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBWRVJTSU9OXzlfMl8wLCBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nIH0gZnJvbSAnLi4vLi4vZW51bXMvYWxlcnRzLWRldmljZS10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2xvdWQtY29uZmlybS1kaWFsb2ctZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE1vYmlsZVNlcnZpY2VQcm94eSwgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcclxuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XHJcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5zdGF0ZSc7XHJcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZSB9IGZyb20gJy4uL2ZhY2lsaXR5JztcclxuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcclxuaW1wb3J0IHsgUGFya01hbmFnZXJTdGF0ZSB9IGZyb20gJy4uL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuc3RhdGUnO1xyXG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xyXG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQWxlcnRDaGFuZ2VkQWN0aW9uLFxyXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXHJcbiAgTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sXHJcbiAgTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24sXHJcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcclxuICBSZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uLFxyXG4gIFVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb25cclxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcclxuaW1wb3J0IHsgQWxlcnRzUHJlZmVyZW5jZXNNYXAsIEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwLCBGYWNpbGl0eVByZWZlcmVuY2VzTWFwIH0gZnJvbSAnLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsIHtcclxuICBhbGVydHM6IEFsZXJ0RHRvW107XHJcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XHJcbiAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eTtcclxuICBiYWRnZVZhbHVlOiBudW1iZXIsXHJcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxyXG4gIG5vdGlmaWNhdGlvbnNNYXA6IE51bWJlck1hcDxudW1iZXI+O1xyXG59XHJcblxyXG5AU3RhdGU8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPih7XHJcbiAgbmFtZTogJ2FsZXJ0c0FuZE5vdGlmaWNhdGlvbnMnLFxyXG4gIGRlZmF1bHRzOiB7XHJcbiAgICBhbGVydHM6IFtdLFxyXG4gICAgbm90aWZpY2F0aW9uczogW10sXHJcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcclxuICAgIGJhZGdlVmFsdWU6IDAsXHJcbiAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxyXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXHJcbiAgfSxcclxufSlcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWxlcnRzQW5kTm90aWZpY2F0aW9uc1N0YXRlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eSxcclxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2U6IEZhY2lsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2JpbGVTZXJ2aWNlUHJveHk6IE1vYmlsZVNlcnZpY2VQcm94eSkge1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBzdGF0aWMgYWxlcnRzKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBBbGVydER0b1tdIHtcclxuICAgIHJldHVybiBzdGF0ZS5hbGVydHM7XHJcbiAgfVxyXG5cclxuICBAU2VsZWN0b3IoKVxyXG4gIHN0YXRpYyBub3RpZmljYXRpb25zKHN0YXRlOiBBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWwpOiBOb3RpZmljYXRpb25EdG9bXSB7XHJcbiAgICByZXR1cm4gc3RhdGUubm90aWZpY2F0aW9ucztcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uU2V2ZXJpdHkge1xyXG4gICAgcmV0dXJuIHN0YXRlLmFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGJhZGdlVmFsdWUoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gc3RhdGUuYmFkZ2VWYWx1ZTtcclxuICB9XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIGRpc3BsYXlCYWRnZShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc3RhdGUuZGlzcGxheUJhZGdlO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pXHJcbiAgb25VcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pIHtcclxuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XHJcbiAgICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5LkFsZXJ0c1ByZWZlcmVuY2VzLFxyXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbilcclxuICBvblVwZGF0ZVVzZXJOb3RpZmljYWl0b25zUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyTm90aWZpY2FpdG9uc1ByZWZlcmVuY2VzQWN0aW9uKSB7XHJcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xyXG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyxcclxuICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnN0cmluZ2lmeShhY3Rpb24udXNlck5vdGlmaWNhdGlvbnNQcmVmZXJlbmNlcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjdHguZGlzcGF0Y2gobmV3IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbihzZXR0aW5nKSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxyXG4gIG9uTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XHJcbiAgICBjb25zdCBhbGVydHNBbmROb3RpZmljYXRpb25zJCA9IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5nZXRBbGVydHNBbmROb3RpZmljYXRpb25zKG1pbnV0ZXNBZ28pO1xyXG5cclxuICAgIHJldHVybiBhbGVydHNBbmROb3RpZmljYXRpb25zJC5waXBlKHRhcChhc3luYyBhbGVydHNBbmROb3RpZmljYXRpb25zID0+IHtcclxuICAgICAgY29uc3QgcG9wdWxhdGVOb3RpZmljYXRpb25zOiBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvID0gYXdhaXQgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZUFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMoYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhKTtcclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIGFsZXJ0czogcG9wdWxhdGVOb3RpZmljYXRpb25zLmFsZXJ0cyA/PyBbXSxcclxuICAgICAgICBub3RpZmljYXRpb25zOiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucyA/PyBbXSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbilcclxuICBvbkxvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbWludXRlc0FnbyB9OiBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbikge1xyXG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5nZXRNb2JpbGVBbGVydHNBbmROb3RpZmljYXRpb24obWludXRlc0FnbywgVkVSU0lPTl9WMSk7XHJcblxyXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgYWxlcnRzOiBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEuYWxlcnRzID8/IFtdLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMuZGF0YS5ub3RpZmljYXRpb25zID8/IFtdLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcclxuICBvbkNsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBfOiBDbGVhckFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcclxuICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgYWxlcnRzOiBbXSxcclxuICAgICAgbm90aWZpY2F0aW9uczogW10sXHJcbiAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuTG93LFxyXG4gICAgICBiYWRnZVZhbHVlOiAwLFxyXG4gICAgICBkaXNwbGF5QmFkZ2U6IGZhbHNlLFxyXG4gICAgICBub3RpZmljYXRpb25zTWFwOiB7fVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxyXG4gIG9uUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBSZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbikge1xyXG4gICAgY29uc3Qgbm93VXRjID0gbW9tZW50LnV0YygpOyAvLyBDdXJyZW50IFVUQyB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXHJcbiAgICBjb25zdCBtaW51dGVzQWdvID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYWN0aXZlTm90aWZpY2F0aW9ucy5taW51dGVzQWdvO1xyXG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzLmZpbHRlcihhbGVydCA9PiBtb21lbnQudXRjKGFsZXJ0LmNsb3VkRXZlbnREYXRlVGltZSkuYWRkKG1pbnV0ZXNBZ28sICdtaW51dGVzJykuaXNBZnRlcihub3dVdGMpKTtcclxuXHJcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgIGFsZXJ0c1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oQWxlcnRDaGFuZ2VkQWN0aW9uKVxyXG4gIG9uQWxlcnRDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgYWxlcnQsIGd1aWQgfTogQWxlcnRDaGFuZ2VkQWN0aW9uKSB7XHJcbiAgICBpZiAoYWxlcnQgJiYgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5pc0FsZXJ0VHlwZURlZmluZWQoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikpIHtcclxuICAgICAgdGhpcy5oYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4LCBhbGVydCwgZ3VpZCk7XHJcblxyXG4gICAgICBpZiAoYWxlcnQuZXZlbnRTdGF0ZSAmJiB0aGlzLmlzQWxlcnRFbmFibGVkRm9yVXNlcihhbGVydCwgZ3VpZCkpIHtcclxuXHJcbiAgICAgICAgaWYgKCFhbGVydC5kZXZpY2VOYW1lKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJrRGV2aWNlcyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoUGFya01hbmFnZXJTdGF0ZS5kZXZpY2VzKTtcclxuICAgICAgICAgIGFsZXJ0LmRldmljZU5hbWUgPSBwYXJrRGV2aWNlcz8uZmluZChkID0+IGQuaWQgPT09IGFsZXJ0LmRldmljZUlEKT8ubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWxlcnQucGFya05hbWUpIHtcclxuICAgICAgICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcclxuICAgICAgICAgIGlmIChsb3RzTWFwKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0LnBhcmtOYW1lID0gbG90c01hcFthbGVydC5wYXJrSWRdPy5uYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcm9jZXNzQW5kRGlzcGxheUFsZXJ0KGN0eCwgYWxlcnQsIGd1aWQpO1xyXG5cclxuICAgICAgICAvLyBQdXNoIHRoZSBuZXcgYWxlcnQgdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXHJcbiAgICAgICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xyXG4gICAgICAgIGFsZXJ0cy51bnNoaWZ0KGFsZXJ0KTtcclxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgICBhbGVydHNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihOb3RpZmljYXRpb25DaGFuZ2VkQWN0aW9uKVxyXG4gIG9uTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24pIHtcclxuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxyXG4gICAgICAgIGlmICh0aGlzLmlzTm90aWZpY2F0aW9uRW5hYmxlZEZvclVzZXIobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBBY3Rpb24oSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbilcclxuICBvbkhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfTogSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbikge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcclxuXHJcbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XHJcbiAgICBpZiAobm90aWZpY2F0aW9uRXhpc3RzKSB7XHJcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcclxuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XHJcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcclxuXHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxyXG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcclxuXHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGZpbHRlcmVkTm90aWZpY2F0aW9ucyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbilcclxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pIHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBub3RpZmljYXRpb24gd2l0aCB0aGUgaGFuZGxlIHVzZXIgLSBhbmQgc2F2ZSBpbiBzdGF0ZVxyXG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xyXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XHJcbiAgICAgICAgdGhpcy51cGRhdGVIYW5kbGVkVXNlckZvckR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9ucywgbm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25QSyk7XHJcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbG9zZSBjcml0aWNhbCBhbGVydCBtb2RhbFxyXG4gICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xyXG4gIH1cclxuXHJcbiAgQEFjdGlvbihIYW5kbGVBbGVydHNBY3Rpb24pXHJcbiAgb25IYW5kbGVBbGVydHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBhbGVydER0bywgZ3VpZCB9OiBIYW5kbGVBbGVydHNBY3Rpb24pIHtcclxuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnREdG8sIGd1aWQpO1xyXG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xyXG4gICAgY29uc3QgZXhpc3RBbGVydEluZGV4ID0gYWxlcnRzLmZpbmRJbmRleChhbGVydCA9PiB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpID09PSBhbGVydFBLICYmXHJcbiAgICAgIHRoaXMuc3RhdGVNYXRjaGVzKGFsZXJ0LCBhbGVydER0by5ldmVudFN0YXRlKSk7XHJcblxyXG4gICAgaWYgKGV4aXN0QWxlcnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgYWxlcnRzW2V4aXN0QWxlcnRJbmRleF0uaGFuZGxpbmdCeVVzZXIgPSBhbGVydER0by5oYW5kbGluZ0J5VXNlcjtcclxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xyXG4gICAgICAgIGFsZXJ0cyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbG9zZUFsZXJ0RGlhbG9ncyhhbGVydFBLKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlbkNyaXRpY2FsQWxlcnREaWFsb2coYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFsZXJ0VHlwZU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3JbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl0pO1xyXG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNyaXRpY2FsX2FsZXJ0X21lc3NhZ2UsIHtcclxuICAgICAgICBhbGVydFR5cGVOYW1lXHJcbiAgICAgIH0pXSxcclxuICAgICAgY29uZmlybVRpdGxlOiBhbGVydFR5cGVOYW1lLFxyXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxyXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FuY2VsKSxcclxuICAgICAgZGV2aWNlOiB7XHJcbiAgICAgICAgY29tbUlkOiBhbGVydC5yZWFkZXJJRC50b1N0cmluZygpLFxyXG4gICAgICAgIG5hbWU6IGFsZXJ0LmRldmljZU5hbWVcclxuICAgICAgfSxcclxuICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxyXG4gICAgICB6b25lTmFtZTogYWxlcnQucGFya1pvbmVOYW1lLFxyXG4gICAgICBub3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuQ3JpdGljYWwsXHJcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5SW52ZXJ0OiB0cnVlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogYWxlcnQuZGVzY3JpcHRpb24sXHJcbiAgICAgIGNhclBsYXRlOiBhbGVydC5jYXJQbGF0ZSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuPGJvb2xlYW4+KENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBwYW5lbENsYXNzOiBgdGItY3JpdGljYWwtbW9kYWwtJHthbGVydFBLfWAsXHJcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXHJcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxyXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxyXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcclxuICAgICAgICBjb25zdCBoYW5kbGVBbGVydDogSGFuZGxpbmdBbGVydER0byA9IG5ldyBIYW5kbGluZ0FsZXJ0RHRvKHtcclxuICAgICAgICAgIGd1aWQ6IGd1aWQsXHJcbiAgICAgICAgICBwYXJrSWQ6IGFsZXJ0LnBhcmtJZCxcclxuICAgICAgICAgIHBhcmtOYW1lOiBhbGVydC5wYXJrTmFtZSxcclxuICAgICAgICAgIGRldmljZUlkOiBhbGVydC5kZXZpY2VJRCxcclxuICAgICAgICAgIGV2ZW50RGVzY3JpcHRpb246IGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24sXHJcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgaWQ6IGFsZXJ0LmlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5oYW5kbGVBbGVydE5vdGlmaWNhdGlvbihoYW5kbGVBbGVydCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQocmVzLmRhdGEgfHwgYWxlcnQsIGd1aWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfbWVzc2FnZSldLFxyXG4gICAgICBjb25maXJtVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfdGl0bGUpLFxyXG4gICAgICBjb25maXJtU3ViVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfc3ViX3RpdGxlLCB7IGNvbmRpdGlvbk5hbWU6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jb25kaXRpb25OYW1lIH0pLFxyXG4gICAgICBwYXJrTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtpbmdMb3ROYW1lLFxyXG4gICAgICB6b25lTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnpvbmU/Lm5hbWUsXHJcbiAgICAgIG9rVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnllcyksXHJcbiAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYW5jZWwpLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBndWlkKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1keW5hbWljLXByaWNpbmctY29uZGl0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uLmlkfWAsXHJcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXHJcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcclxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcclxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XHJcbiAgICAgICAgY29uc3QgaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bzogSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IG5ldyBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKHtcclxuICAgICAgICAgIGNsb3VkUGFya0lkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQsXHJcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlUHJveHkuaGFuZGxlRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bykuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkcGMgPSByZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XHJcbiAgICAgICAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRCYXNlUmF0ZUJ5SWQoZHBjLnBhcmtpbmdMb3RJZCwgZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcclxuICAgICAgICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJEeW5hbWljUHJpY2luZ1RvYXN0RXZlbnQoZHBjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3BsYXlBbGVydChjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheUFsZXJ0KGFsZXJ0LCBndWlkKTtcclxuICAgIGlmIChub3RpZmljYXRpb24pIHtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xyXG4gICAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcclxuICAgICAgbm90aWZpY2F0aW9uc01hcFthbGVydFBLXSA9IG5vdGlmaWNhdGlvbi50b2FzdElkO1xyXG5cclxuICAgICAgbm90aWZpY2F0aW9uLm9uVGFwLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQoYWxlcnQsIGd1aWQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dzKGRpYWxvZ0lkczogU2V0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk/LmZvckVhY2goZGlhbG9nID0+IHtcclxuICAgICAgaWYgKGRpYWxvZ0lkcy5oYXMoZGlhbG9nLmlkKSkge1xyXG4gICAgICAgIGRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9wZW5EaWFsb2dzID0gdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKTtcclxuICAgIGNvbnN0IGRpYWxvZyA9IG9wZW5EaWFsb2dzLmZpbmQoZGlhbG9nID0+IGRpYWxvZy5pZCA9PT0gZGlhbG9nSWQpO1xyXG5cclxuICAgIGlmIChkaWFsb2cpIHtcclxuICAgICAgZGlhbG9nLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEs6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kYWxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICAgYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCxcclxuICAgICAgYGxwci1taXNtYXRjaC1tb2RhbC0ke2FsZXJ0UEt9YCxcclxuICAgICAgYGxvc3QtdGlja2V0LW1vZGFsLSR7YWxlcnRQS31gLFxyXG4gICAgXSk7XHJcblxyXG4gICAgdGhpcy5jbG9zZURpYWxvZ3MobW9kYWxLZXlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vZGFsS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbXHJcbiAgICAgIGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxyXG4gICAgICBgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWAsXHJcbiAgICBdKTtcclxuXHJcbiAgICB0aGlzLmNsb3NlRGlhbG9ncyhtb2RhbEtleXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cztcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcclxuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnREdG8sIGd1aWQpO1xyXG5cclxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XHJcbiAgICBjb25zdCBhbGVydEV4aXN0cyA9IGFsZXJ0cy5maW5kKGFsZXJ0ID0+XHJcbiAgICAgIHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCkgPT09IGFsZXJ0UEsgJiYgdGhpcy5zdGF0ZU1hdGNoZXMoYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghYWxlcnREdG8uZXZlbnRTdGF0ZSB8fCBhbGVydEV4aXN0cykge1xyXG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcclxuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XHJcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWRBbGVydHMgPSBhbGVydHMuZmlsdGVyKGFsZXJ0ID0+IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCkgIT09IGFsZXJ0UEspO1xyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcclxuICAgICAgICBhbGVydHM6IGZpbHRlcmVkQWxlcnRzXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcclxuICAgICAgdGhpcy5jbG9zZUFsZXJ0RGlhbG9ncyhhbGVydFBLKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcclxuXHJcbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XHJcbiAgICBpZiAobm90aWZpY2F0aW9uRXhpc3RzKSB7XHJcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25FeGlzdHMsIGd1aWQpO1xyXG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XHJcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xyXG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT5cclxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XHJcblxyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcclxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcclxuICAgICAgdGhpcy5jbG9zZU5vdGlmaWNhdGlvbkRpYWxvZ3Mobm90aWZpY2F0aW9uUEspO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcclxuICAgIGNvbnN0IHBhcmtJZCA9IG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LnBhcmtJZDtcclxuXHJcbiAgICAvLyBmaW5kIGFsbCB0aGUgZHluYW1pYyBwcmljaW5nIHRyaWdnZXJlZCBjb25kaXRpb25zIG9mIHNhbWUgZ3VpZCBhbmQgcGFya0lkIHRvIGJlIGNsb3NlXHJcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiAmJlxyXG4gICAgICBub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpO1xyXG5cclxuICAgIGlmIChkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZHAgb2YgZHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb25FeGlzdHMpIHtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsoZHAsIGd1aWQpO1xyXG4gICAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcclxuXHJcbiAgICAgICAgdGhpcy5jbG9zZU5vdGlmaWNhdGlvbkRpYWxvZ3Mobm90aWZpY2F0aW9uUEspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT4gIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiB8fCAhKG5vdGlmaWNhdGlvbi5ndWlkID09PSBndWlkICYmIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJrSWQgPT09IHBhcmtJZCkpO1xyXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcclxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xyXG4gICAgY29uc3QgZHBjID0gbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xyXG4gICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0QmFzZVJhdGVCeUlkKGRwYy5wYXJraW5nTG90SWQsIGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XHJcbiAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLmdldENvbW1hbmROb3RpZmljYXRpb25Db25maWdNZXNzYWdlcyhGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLCBudWxsLCBkcGMpO1xyXG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xyXG4gICAgICBtZXNzYWdlcyxcclxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhY2lsaXR5X3JlbW90ZV9jb21tYW5kX3NldF9hY3RpdmVfcmF0ZSksXHJcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcclxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcclxuICAgICAgZHVyYXRpb246IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyxcclxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxyXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUZhbGxlbkJhY2tUb0RlZmF1bHRSYXRlVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvKSB7XHJcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XHJcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcclxuICAgIGNvbnN0IHN1YlRpdGxlID0gYCR7ZHBjLnBhcmtpbmdMb3ROYW1lfSR7ZHBjLnpvbmU/Lm5hbWUgPyAnIHwgJyArIGRwYy56b25lPy5uYW1lIDogJyd9YDtcclxuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcclxuICAgICAgbWVzc2FnZXM6IFt7XHJcbiAgICAgICAgdmFsdWU6IHRpdGxlLFxyXG4gICAgICAgIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy50aXRsZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHZhbHVlOiBzdWJUaXRsZSxcclxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXHJcbiAgICAgIH1dLFxyXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcclxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxyXG4gICAgICB2UG9zaXRpb246IE5vdGlmaWNhdGlvblZQb3NpdGlvbnMuQm90dG9tLFxyXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxyXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXHJcbiAgICAgIHR5cGU6IENvbW1hbmROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5zaG93KGNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkRm9yVXNlcihhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzQWxlcnRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS5tYXBwZWRVc2VyU2V0dGluZ3MpO1xyXG4gICAgY29uc3QgdXNlckFsZXJ0c1ByZWZlcmVuY2VzOiBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMpO1xyXG5cclxuICAgIC8vIElmIHRoZXJlIGlzIG5vIHVzZXJBbGVydHNQcmVmZXJlbmNlcyB3ZSBkb24ndCBmaWx0ZXIgYXQgYWxsXHJcbiAgICBpZiAoISF1c2VyQWxlcnRzUHJlZmVyZW5jZXMpIHtcclxuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xyXG4gICAgICAvLyBFbHNlIHRoZSB1c2VyIGRpc2FibGVkIGFsbCB0aGUgbm90aWZpY2F0aW9uc1xyXG4gICAgICBpZiAodXNlckFsZXJ0c1ByZWZlcmVuY2VzLmlzRW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xyXG4gICAgICAgIGNvbnN0IGlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkID0gaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8yXzApO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcclxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjIuMCBhbmQgYWJvdmUsIHdlIGZpbHRlciBieSB0aGUgcHJlZmVyZW5jZXNcclxuICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9ICFpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCB8fCB0aGlzLmlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydCwgZ3VpZCwgdXNlckFsZXJ0c1ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEluUHJlZmVyZW5jZXMoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcsIHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcDogQWxlcnRzUHJlZmVyZW5jZXNNYXApIHtcclxuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLy8gSWYgd2UgaGF2ZSBhbnkgZmFjaWxpdHkgc2VsZWN0ZWQsIHdlIGNvbnRpbnVlIHRvIGNoZWNrXHJcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XHJcbiAgICBpZiAoT2JqZWN0LmtleXModXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKS5sZW5ndGgpIHtcclxuICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIEdldHMgdGhlIHRyZWVJZCBvZiB0aGUgdGVuYW50IC0gSW4gY2FzZSB0aGUgdXNlciBzZWxlY3RlZCBcIkFsbCBUZW5hbnQgUGFya2luZyBMb3RzXCJcclxuICAgICAgY29uc3QgdGVuYW50VHJlZUlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk/LnRyZWVJZDtcclxuXHJcbiAgICAgIC8vIEdldHMgdGhlIHRyZWUgcGFyayBJZCBvZiB0aGUgYWxlcnRcclxuICAgICAgY29uc3QgYWxlcnRUcmVlUGFya0lkID0gdGhpcy5nZXRDbG91ZFBhcmtJZChhbGVydCwgZ3VpZCk7XHJcblxyXG4gICAgICAvLyBXZSBHZXQgdGhlIHNldHRpbmcgb2YgdGhlIFBhcmssIFBhcmVudFBhcmsgb3IgUGFya3NUcmVlUm9vdFxyXG4gICAgICBjb25zdCBmYWNpbGl0eVByZWZlcmVuY2VzTWFwOiBGYWNpbGl0eVByZWZlcmVuY2VzTWFwID0gdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0VHJlZVBhcmtJZF0gfHwgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW3RlbmFudFRyZWVJZF07XHJcblxyXG4gICAgICAvLyBXZSBjaGVjayBpZiB0aGUgZmFjaWxpdHkgd2FzIHNlbGVjdGVkXHJcbiAgICAgIGlmIChmYWNpbGl0eVByZWZlcmVuY2VzTWFwKSB7XHJcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcclxuXHJcbiAgICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGFsZXJ0IHR5cGUgd2FzIHNlbGVjdGVkXHJcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XHJcbiAgICAgICAgICBjb25zdCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGUgPSB0aGlzLmdldEFsZXJ0c0RldmljZVR5cGUoYWxlcnQpO1xyXG5cclxuICAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBpZiB0aGUgZGV2aWNlIHR5cGUgd2FzIHNlbGVjdGVkXHJcbiAgICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9IGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0RGV2aWNlVHlwZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0OiBBbGVydER0byk6IEFsZXJ0c0RldmljZVR5cGUge1xyXG4gICAgbGV0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZTtcclxuICAgIGNvbnN0IGFsZXJ0c0RldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGVbXSA9IERldmljZVR5cGVzQWxlcnRzTWFwcGluZy5nZXQoYWxlcnQuZGV2aWNlVHlwZSk7XHJcblxyXG4gICAgc3dpdGNoIChhbGVydC5kZXZpY2VUeXBlKSB7XHJcbiAgICAgIGNhc2UgRGV2aWNlVHlwZS5DYXNoOlxyXG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0LnJlYWRlcklEID09PSAwID8gQWxlcnRzRGV2aWNlVHlwZS5NYXN0ZXIgOiBBbGVydHNEZXZpY2VUeXBlLkNhc2hSZWdpc3RlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydHNEZXZpY2VUeXBlPy5bMF07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFsZXJ0RGV2aWNlVHlwZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25EeW5hbWljUHJpY2luZ0NvbmRpdGlvbkNoYW5nZShjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHgsIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH0pO1xyXG5cclxuICAgIHRoaXMuaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xyXG5cclxuICAgIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaXNUcmlnZ2VyZWQpIHtcclxuICAgICAgdGhpcy5wcm9jZXNzQW5kRGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25EdG8sIGd1aWQsIGN0eCk7XHJcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc0FjdGl2YXRlZCkge1xyXG4gICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uIGluZGljYXRpbmcgdGhlIHJhdGUgaGFzIGZhbGxlbiBiYWNrIHRvIHRoZSBkZWZhdWx0IHJhdGVcclxuICAgICAgdGhpcy5zaG93UmF0ZUZhbGxlbkJhY2tUb0RlZmF1bHRSYXRlVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbkR0bykudGhlbigpO1xyXG4gICAgfSBlbHNlIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24udHJpZ2dlckFjdGlvbiA9PT0gRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLkF1dG9tYXRpY1N3aXRjaFJhdGUpIHtcclxuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBhdXRvbWF0aWMgc3dpdGNoXHJcbiAgICAgIHRoaXMuc2hvd1JhdGVBdXRvbWF0aWNTd2l0Y2hUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uRHRvKS50aGVuKCk7XHJcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbG91ZFBhcmtJZChhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBjb25zdCBhbGVydFBhcmtJZCA9IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkID4gMCA/IGFsZXJ0Lm11bHRpUGFya1BhcmVudElkIDogYWxlcnQucGFya0lkO1xyXG4gICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xyXG4gICAgcmV0dXJuIGxvdHNNYXBbYWxlcnRQYXJrSWRdPy5jbG91ZElkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwa01hdGNoZXMgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpID0+IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25EdG8uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLO1xyXG4gIHByaXZhdGUgc3RhdGVNYXRjaGVzID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZXZlbnRTdGF0ZTogYm9vbGVhbikgPT4gYWxlcnREdG8uZXZlbnRTdGF0ZSA9PT0gZXZlbnRTdGF0ZTtcclxuICBwcml2YXRlIGFsZXJ0UEsgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpID0+XHJcbiAgICBgJHtndWlkfV8ke2FsZXJ0RHRvLnBhcmtJZH1fJHthbGVydER0by5yZWFkZXJJRH1fJHthbGVydER0by5kZXZpY2VJRH1fJHthbGVydER0by5ldmVudERlc2NyaXB0aW9ufWA7XHJcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQga2V5OiBzdHJpbmcgPSAnJztcclxuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcclxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxyXG4gICAgICAgIGNvbnN0IHsgaWQsIHpvbmUgfSA9IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcclxuICAgICAgICBrZXkgPSB6b25lID8gYCR7Z3VpZH1fJHtpZH1fJHt6b25lLmlkfWAgOiBgJHtndWlkfV8ke2lkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXRlID0gY3R4LmdldFN0YXRlKCk7XHJcbiAgICBjb25zdCBhbGVydHMgPSBzdGF0ZS5hbGVydHM7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucztcclxuXHJcbiAgICBjb25zdCBiYWRnZVZhbHVlID0gYWxlcnRzLmxlbmd0aCArIG5vdGlmaWNhdGlvbnMubGVuZ3RoO1xyXG4gICAgY29uc3QgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5ID0gdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5nZXRBZ2dyZWdhdGVkTm90aWZpY2F0aW9uVHlwZShhbGVydHMsIG5vdGlmaWNhdGlvbnMpO1xyXG5cclxuICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgYmFkZ2VWYWx1ZSxcclxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5LFxyXG4gICAgICBkaXNwbGF5QmFkZ2U6IGJhZGdlVmFsdWUgPiAwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0aGF0IHByb2Nlc3NlcyBhbmQgZGlzcGxheXMgdGhlIGFsZXJ0IGJhc2VkIG9uIGNvbmRpdGlvbnNcclxuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcclxuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XHJcblxyXG4gICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSkge1xyXG4gICAgICBzd2l0Y2ggKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pIHtcclxuICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MT1NUX1RJQ0tFVDpcclxuICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MUlBfTk9UX01BVENIOlxyXG4gICAgICAgICAgdGhpcy5vcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydCwgZ3VpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGNvbmRpdGlvbnNcclxuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcsIGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uXHJcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KTtcclxuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdElkXS5mZWF0dXJlUGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhQZXJtaXNzaW9uVHlwZS5TZXRBY3RpdmVSYXRlKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgYXBwIGlzIGluIG1vYmlsZSBtb2RlIG9yIGlmIGl0J3MgaW4gdGhlIGNvcnJlY3QgbW9kdWxlXHJcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XHJcbiAgICBjb25zdCBpc0NjTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKSA9PT0gQXBwTW9kdWxlLkNjO1xyXG5cclxuICAgIC8vIFByb2NlZWQgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG1ldFxyXG4gICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSAmJiBoYXNQZXJtaXNzaW9uKSB7XHJcbiAgICAgIHRoaXMub3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XHJcblxyXG4gICAgICAvLyBQdXNoIHRoZSBuZXcgbm90aWZpY2F0aW9uIHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxyXG4gICAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcclxuICAgICAgbm90aWZpY2F0aW9ucy51bnNoaWZ0KG5vdGlmaWNhdGlvbkR0byk7XHJcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcclxuICAgICAgICBub3RpZmljYXRpb25zLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIFJlY2FsY3VsYXRlIGJhZGdlIGFuZCBzZXZlcml0eVxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVIYW5kbGVkVXNlckZvckR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uKFxyXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPixcclxuICAgIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkR0b1tdLFxyXG4gICAgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sXHJcbiAgICBub3RpZmljYXRpb25QSzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAobm90aWZpY2F0aW9ucykge1xyXG4gICAgICBjb25zdCBleGlzdE5vdGlmaWNhdGlvbkluZGV4ID0gbm90aWZpY2F0aW9ucy5maW5kSW5kZXgobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcclxuXHJcbiAgICAgIGlmIChleGlzdE5vdGlmaWNhdGlvbkluZGV4ICE9PSAtMSAmJiBub3RpZmljYXRpb25zW2V4aXN0Tm90aWZpY2F0aW9uSW5kZXhdLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uKSB7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uc1tleGlzdE5vdGlmaWNhdGlvbkluZGV4XS5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5oYW5kbGluZ0J5VXNlciA9XHJcbiAgICAgICAgICBub3RpZmljYXRpb25EdG8/LmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uPy5oYW5kbGluZ0J5VXNlcjtcclxuXHJcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoeyBub3RpZmljYXRpb25zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTm90aWZpY2F0aW9uRW5hYmxlZEZvclVzZXIobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGZhY2lsaXR5SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzTm90aWZpY2F0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLm1hcHBlZFVzZXJTZXR0aW5ncyk7XHJcbiAgICBjb25zdCB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXM6IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMpO1xyXG5cclxuICAgIGlmICh1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXM/LmlzRW5hYmxlZCkge1xyXG4gICAgICAvLyBHZXRzIHRoZSBncm91cCBmYWNpbGl0eSBJZCBvZiB0aGUgdGVuYW50IC0gSW4gY2FzZSB0aGUgdXNlciBzZWxlY3RlZCBcIkFsbCBUZW5hbnQgUGFya2luZyBMb3RzXCJcclxuICAgICAgY29uc3QgdGVuYW50RmFjaWxpdHlJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pPy50cmVlSWQ7XHJcblxyXG4gICAgICBpZiAoT2JqZWN0LmtleXModXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAvLyBIYW5kbGUgbmV3IHVzZXJzOiBlbXB0eSBwcmVmZXJlbmNlcyBtZWFucyBkZWZhdWx0IGFjY2VzcyB0byBhbGwgbm90aWZpY2F0aW9uc1xyXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIG5ldyB1c2VycyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgdW50aWwgdGhleSBleHBsaWNpdGx5IGNvbmZpZ3VyZSB0aGVpciBwcmVmZXJlbmNlc1xyXG4gICAgICAgIGlzTm90aWZpY2F0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRm9yIHVzZXJzIHdpdGggY29uZmlndXJlZCBwcmVmZXJlbmNlcywgY2hlY2sgaWYgdGhlIHNwZWNpZmljIGZhY2lsaXR5IGFuZCBub3RpZmljYXRpb24gdHlwZSBhcmUgZW5hYmxlZFxyXG4gICAgICAgIC8vIFVzZSB0ZW5hbnQgZmFjaWxpdHkgcHJlZmVyZW5jZXMgZmlyc3QsIGZhbGxiYWNrIHRvIHNwZWNpZmljIGZhY2lsaXR5IHByZWZlcmVuY2VzXHJcbiAgICAgICAgY29uc3QgZmFjaWxpdHlQcmVmZXJlbmNlcyA9IHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcy5wcmVmZXJlbmNlc1t0ZW5hbnRGYWNpbGl0eUlkXSA/P1xyXG4gICAgICAgICAgdXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzW2ZhY2lsaXR5SWRdO1xyXG5cclxuICAgICAgICBpZiAoZmFjaWxpdHlQcmVmZXJlbmNlcz8uW25vdGlmaWNhdGlvbi50eXBlXSkge1xyXG4gICAgICAgICAgaXNOb3RpZmljYXRpb25FbmFibGVkID0gZmFjaWxpdHlQcmVmZXJlbmNlc1tub3RpZmljYXRpb24udHlwZV0uZW5hYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc05vdGlmaWNhdGlvbkVuYWJsZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -10,12 +10,14 @@ import * as i1 from "@angular/router";
|
|
|
10
10
|
import * as i2 from "@ngxs/store";
|
|
11
11
|
import * as i3 from "../../services/app-config.service";
|
|
12
12
|
import * as i4 from "@angular/common";
|
|
13
|
+
import * as i5 from "../../services";
|
|
13
14
|
export class AuthRouteGuard {
|
|
14
|
-
constructor(router, store, appConfig, location) {
|
|
15
|
+
constructor(router, store, appConfig, location, sessionStorageService) {
|
|
15
16
|
this.router = router;
|
|
16
17
|
this.store = store;
|
|
17
18
|
this.appConfig = appConfig;
|
|
18
19
|
this.location = location;
|
|
20
|
+
this.sessionStorageService = sessionStorageService;
|
|
19
21
|
}
|
|
20
22
|
canActivate(route, state) {
|
|
21
23
|
const tenant = route.params.tenant;
|
|
@@ -36,6 +38,7 @@ export class AuthRouteGuard {
|
|
|
36
38
|
this.router.navigate([url]);
|
|
37
39
|
return false;
|
|
38
40
|
}
|
|
41
|
+
this.sessionStorageService.updateLoggedTenant();
|
|
39
42
|
const modules = user.permissionInfo.modules?.map(m => m.module);
|
|
40
43
|
if (modules && modules.length > 0) {
|
|
41
44
|
const appRootRoute = tenant ? `/${tenant}` : '/';
|
|
@@ -64,10 +67,10 @@ export class AuthRouteGuard {
|
|
|
64
67
|
canActivateChild(route, state) {
|
|
65
68
|
return this.canActivate(route, state);
|
|
66
69
|
}
|
|
67
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, deps: [{ token: i1.Router }, { token: i2.Store }, { token: i3.AppConfigService }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, deps: [{ token: i1.Router }, { token: i2.Store }, { token: i3.AppConfigService }, { token: i4.Location }, { token: i5.SessionStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
68
71
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard }); }
|
|
69
72
|
}
|
|
70
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, decorators: [{
|
|
71
74
|
type: Injectable
|
|
72
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.AppConfigService }, { type: i4.Location }]; } });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.AppConfigService }, { type: i4.Location }, { type: i5.SessionStorageService }]; } });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yb3V0ZS1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL2F1dGgtcm91dGUtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLE1BQWMsRUFDeEIsS0FBWSxFQUNaLFNBQTJCLEVBQzNCLFFBQWtCLEVBQ2xCLHFCQUE0QztRQUpsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ25FLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDekUs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LE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUMzRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzdKLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FoRVUsY0FBYzttSEFBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xyXG5pbXBvcnQgeyBSRURJUkVDVF9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBcHBTZWN0aW9uUm91dGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtc2VjdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IG5hdmlnYXRlVG9Gb3JiaWRkZW5BY2Nlc3NQYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91dGUudXRpbCc7XHJcbmltcG9ydCB7IFRlbmFudEluZm8gfSBmcm9tICcuL21vZGVsL3RlbmFudC1pbmZvLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi9zZXNzaW9uLnN0YXRlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhSb3V0ZUd1YXJkIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGVuYW50ID0gcm91dGUucGFyYW1zLnRlbmFudDtcclxuICAgIGNvbnN0IGlzQ2xvdWRNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZDtcclxuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xyXG4gICAgaWYgKChpc0Nsb3VkTW9kZSB8fCBpc01vYmlsZUFwcE1vZGUpICYmICF0ZW5hbnQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlcjogVXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XHJcblxyXG4gICAgaWYgKCF1c2VyIHx8ICF1c2VyLnVzZXJJZCB8fCAodXNlciAmJiB1c2VyLmVuYWJsZWQyRkEgJiYgIXVzZXIuYXV0aGVudGljYXRlZDJGQSkpIHtcclxuICAgICAgLy8gdXNlciBpcyBub3QgbG9nZ2VkIGluIHJvdXRlIHRvIGxvZ2luXHJcbiAgICAgIGNvbnN0IGxvZ2luUm91dGUgPSAnL2FjY291bnQvbG9naW4nO1xyXG4gICAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGUgPyAnJyA6ICh0ZW5hbnQgPyBgJHt0ZW5hbnR9JHtsb2dpblJvdXRlfWAgOiBsb2dpblJvdXRlKTtcclxuICAgICAgY29uc3QgcmVkaXJlY3RLZXkgPSAodGVuYW50ID8gdGVuYW50LnRvTG93ZXJDYXNlKCkgOiAnZGVmYXVsdCcpICsgUkVESVJFQ1RfVVJMO1xyXG4gICAgICBpZiAoc3RhdGUudXJsICE9PSB1cmwpIHtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHJlZGlyZWN0S2V5LCBzdGF0ZS51cmwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gdXNlci5wZXJtaXNzaW9uSW5mby5tb2R1bGVzPy5tYXAobSA9PiBtLm1vZHVsZSk7XHJcblxyXG4gICAgaWYgKG1vZHVsZXMgJiYgbW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGFwcFJvb3RSb3V0ZSA9IHRlbmFudCA/IGAvJHt0ZW5hbnR9YCA6ICcvJztcclxuICAgICAgaWYgKHN0YXRlLnVybCA9PT0gYXBwUm9vdFJvdXRlKSB7XHJcbiAgICAgICAgLy8gIHVzZXIgaGFzIG1vZHVsZXMgYW5kIHVzZXIgd2FzIHJvdXRlZCB0byB0aGUgYXBwIHJvb3QgKCcvJylcclxuICAgICAgICAvLyBSb3V0ZSB1c2VyIHRvIGRlZmF1bHQgbW9kdWxlXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZHVsZVJlcm91dGUgPSB0aGlzLmdldERlZmF1bHRNb2R1bGVSb3V0ZSh1c2VyLCBhcHBSb290Um91dGUpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKGRlZmF1bHRNb2R1bGVSZXJvdXRlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXNCYWNrb2ZmaWNlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQmFja29mZmljZTtcclxuICAgICAgY29uc3QgdGVuYW50SW5mbzogVGVuYW50SW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pO1xyXG4gICAgICBuYXZpZ2F0ZVRvRm9yYmlkZGVuQWNjZXNzUGFnZSh0aGlzLnJvdXRlciwgdGhpcy5sb2NhdGlvbiwgc3RhdGUsIGlzQmFja29mZmljZUFwcE1vZGUgPyBudWxsIDogdGVuYW50SW5mbyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdE1vZHVsZVJvdXRlKHVzZXI6IFVzZXJJbmZvLCBhcHBSb290Um91dGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGRlZmF1bHRBcHBNb2R1bGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkVkZ2UgP1xyXG4gICAgICBBcHBNb2R1bGUuTWFuYWdlbWVudCA6IHVzZXIucGVybWlzc2lvbkluZm8uZGVmYXVsdE1vZHVsZTtcclxuICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVSZXJvdXRlID0gYXBwUm9vdFJvdXRlID09PSAnLycgPyBgLyR7QXBwU2VjdGlvblJvdXRlLmdldChkZWZhdWx0QXBwTW9kdWxlKX1gIDogYCR7YXBwUm9vdFJvdXRlfS8ke0FwcFNlY3Rpb25Sb3V0ZS5nZXQoZGVmYXVsdEFwcE1vZHVsZSl9YDtcclxuICAgIHJldHVybiBkZWZhdWx0TW9kdWxlUmVyb3V0ZS5zcGxpdCgnLycpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKHJvdXRlLCBzdGF0ZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -32,7 +32,8 @@ export * from './password.util';
|
|
|
32
32
|
export * from './permission-type-mapper.util';
|
|
33
33
|
export * from './route.util';
|
|
34
34
|
export * from './search-params.util';
|
|
35
|
+
export * from './sort.util';
|
|
35
36
|
export * from './support-version.util';
|
|
36
37
|
export * from './text.util';
|
|
37
38
|
export * from './tooltip.util';
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU87QUFDUCxjQUFjLFFBQVEsQ0FBQztBQUV2QixRQUFRO0FBQ1IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkdYU1xyXG5leHBvcnQgKiBmcm9tICcuL25neHMnO1xyXG5cclxuLy8gVXRpbHNcclxuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC1jb250cm9sLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2ZS1kZXZpY2Utc3RhdHVzLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Flcy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcGktaGVscGVyLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FycmF5LnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jvb2xlYW4udXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVuY3ktaGVscGVyLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS12YWxpZGF0b3IudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9kZXZpY2UudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudC51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9maWxlLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0udXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVyLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2pzb24udXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4va2V5Ym9hcmQtZXZlbnQudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGFuZy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9sYW5ndWFnZS51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2NhbC1zdG9yYWdlLW1pZ3JhdG9yLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xvd2VyLWNhc2UtdXJsLXNlcmlhbGl6ZXIudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZS1iYXIudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbWV0YWRhdGEudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL251bWJlci51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9wYXJrZXItdGFnLWhlbHBlci51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9wYXJrZXItdHlwZXMtdGV4dC51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9wYXNzd29yZC51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC1wYXJhbXMudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc29ydC51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXZlcnNpb24udXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGV4dC51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi90b29sdGlwLnV0aWwnO1xyXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ENGLISH_LANGUAGE } from '../constants/global-constants';
|
|
2
|
+
export function compareValues(valueA, valueB, isAsc) {
|
|
3
|
+
// Convert display nulls to actual nulls
|
|
4
|
+
valueA = valueA === '-' ? null : valueA;
|
|
5
|
+
valueB = valueB === '-' ? null : valueB;
|
|
6
|
+
// Handle null/undefined values first
|
|
7
|
+
if (valueA == null && valueB == null)
|
|
8
|
+
return 0;
|
|
9
|
+
if (valueA == null)
|
|
10
|
+
return isAsc ? 1 : -1; // null values go to end
|
|
11
|
+
if (valueB == null)
|
|
12
|
+
return isAsc ? -1 : 1;
|
|
13
|
+
const keyType = typeof valueA;
|
|
14
|
+
const multiplier = isAsc ? 1 : -1;
|
|
15
|
+
switch (keyType) {
|
|
16
|
+
case 'string':
|
|
17
|
+
return valueA.localeCompare(valueB, ENGLISH_LANGUAGE, { numeric: true }) * multiplier;
|
|
18
|
+
case 'number':
|
|
19
|
+
default:
|
|
20
|
+
return (valueA - valueB) * multiplier;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9zb3J0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLEtBQWM7SUFDcEUsd0NBQXdDO0lBQ3hDLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFeEMscUNBQXFDO0lBQ3JDLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLHdCQUF3QjtJQUNwRSxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDOUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLFFBQVEsT0FBTyxFQUFFO1FBQ2YsS0FBSyxRQUFRO1lBQ1gsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN4RixLQUFLLFFBQVEsQ0FBQztRQUNkO1lBQ0UsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDekM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVmFsdWVzKHZhbHVlQTogYW55LCB2YWx1ZUI6IGFueSwgaXNBc2M6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gIC8vIENvbnZlcnQgZGlzcGxheSBudWxscyB0byBhY3R1YWwgbnVsbHNcclxuICB2YWx1ZUEgPSB2YWx1ZUEgPT09ICctJyA/IG51bGwgOiB2YWx1ZUE7XHJcbiAgdmFsdWVCID0gdmFsdWVCID09PSAnLScgPyBudWxsIDogdmFsdWVCO1xyXG5cclxuICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWQgdmFsdWVzIGZpcnN0XHJcbiAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSByZXR1cm4gMDtcclxuICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiBpc0FzYyA/IDEgOiAtMTsgIC8vIG51bGwgdmFsdWVzIGdvIHRvIGVuZFxyXG4gIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIGlzQXNjID8gLTEgOiAxO1xyXG5cclxuICBjb25zdCBrZXlUeXBlID0gdHlwZW9mIHZhbHVlQTtcclxuICBjb25zdCBtdWx0aXBsaWVyID0gaXNBc2MgPyAxIDogLTE7XHJcblxyXG4gIHN3aXRjaCAoa2V5VHlwZSkge1xyXG4gICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgcmV0dXJuIHZhbHVlQS5sb2NhbGVDb21wYXJlKHZhbHVlQiwgRU5HTElTSF9MQU5HVUFHRSwgeyBudW1lcmljOiB0cnVlIH0pICogbXVsdGlwbGllcjtcclxuICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICByZXR1cm4gKHZhbHVlQSAtIHZhbHVlQikgKiBtdWx0aXBsaWVyO1xyXG4gIH1cclxufVxyXG4iXX0=
|