@tiba-spark/client-shared-lib 25.1.0-1235 → 25.1.0-1240

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.
@@ -267,7 +267,11 @@ let FacilityState = FacilityState_1 = class FacilityState {
267
267
  zone.vacancy = zone.capacity - zone.occupancy;
268
268
  selected.zones[zoneIndex] = zone;
269
269
  selected.zones = clone(selected.zones);
270
+ const facilityDictionary = ctx.getState().dictionary;
271
+ const guid = ctx.getState().guid;
272
+ facilityDictionary[guid][selected.id].zones = selected.zones;
270
273
  ctx.patchState({
274
+ dictionary: facilityDictionary,
271
275
  selected,
272
276
  zones: selected.zones,
273
277
  });
@@ -866,4 +870,4 @@ export { FacilityState };
866
870
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FacilityState, decorators: [{
867
871
  type: Injectable
868
872
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.BaseFacilityCommandsService }, { type: i3.LocalStorageService }, { type: i4.FacilityMenuService }, { type: i5.FacilityServiceProxy }, { type: i5.RemoteCommandServiceProxy }, { type: i5.GroupServiceProxy }, { type: i5.CategoryServiceProxy }, { type: i5.JobTitleServiceProxy }, { type: i5.ZoneServiceProxy }, { type: i5.ZServiceProxy }, { type: i6.GlobalErrorService }, { type: i7.CommandNotificationService }, { type: i8.TranslateService }, { type: i9.AppConfigService }]; }, propDecorators: { onClearFacilityDictionary: [], onSetSmartparkBasicAllAction: [], onSetSmartparkBasicAction: [], onLoadParkingLotAction: [], onLoadRemoteCommandsRefAction: [], onLoadFacilityRemoteCommandsRefAction: [], onLoadFacilityAction: [], onUnloadParkingLotAction: [], onSetDeviceRemoteCommandsMapAction: [], onSetFacilityRemoteCommandsMapAction: [], onZoneChangedAction: [], onServicesRunningStatusChangedAction: [], onFacilityChangedAction: [], onSetBasicMenuAction: [], onLoadGroupsAction: [], onLoadCategoriesAction: [], onLoadJobTitlesAction: [], onLoadZonesAction: [], onLoadZsAction: [], onClearGroupsAction: [], onClearCategoriesAction: [], onClearJobTitlesAction: [], onClearZonesAction: [], onClearZsAction: [], onSetSelectedParkAction: [], onClearSelectedFacilityAction: [], onClearInactiveSelectedParkAction: [], onFacilityRemoteCommandExecutedAction: [], onLoadMacroCommandsAction: [], onClearMacroCommandsAction: [] } });
869
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxSCxPQUFPLEVBQUUsU0FBUyxFQUFnRSxXQUFXLEVB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ekIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtLQUNULENBQUM7R0FDVyxhQUFhLENBZzBCekI7U0FoMEJZLGFBQWE7NEZBQWIsYUFBYTtrQkFMekIsVUFBVTs4akJBOElULHlCQUF5QixNQU96Qiw0QkFBNEIsTUFPNUIseUJBQXlCLE1BS3pCLHNCQUFzQixNQTBCdEIsNkJBQTZCLE1Bc0I3QixxQ0FBcUMsTUEyQnJDLG9CQUFvQixNQWdCcEIsd0JBQXdCLE1BV3hCLGtDQUFrQyxNQVlsQyxvQ0FBb0MsTUFZcEMsbUJBQW1CLE1BY25CLG9DQUFvQyxNQXNCcEMsdUJBQXVCLE1BK0J2QixvQkFBb0IsTUFLcEIsa0JBQWtCLE1BYWxCLHNCQUFzQixNQVl0QixxQkFBcUIsTUFhckIsaUJBQWlCLE1BYWpCLGNBQWMsTUFhZCxtQkFBbUIsTUFPbkIsdUJBQXVCLE1BT3ZCLHNCQUFzQixNQU90QixrQkFBa0IsTUFPbEIsZUFBZSxNQU9mLHVCQUF1QixNQWF2Qiw2QkFBNkIsTUFZN0IsaUNBQWlDLE1Ba0JqQyxxQ0FBcUMsTUFtQnJDLHlCQUF5QixNQVd6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl84XzRfMCwgVkVSU0lPTl85XzFfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWVudUl0ZW1zIH0gZnJvbSAnLi4vLi4vZW51bXMvZmFjaWxpdHktY29tbWFuZC5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBDYXRlZ29yeUR0bywgQ2F0ZWdvcnlTZXJ2aWNlUHJveHksIERldmljZVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgRmFjaWxpdHlTZXJ2aWNlUHJveHksIEdyb3VwRHRvLCBHcm91cFNlcnZpY2VQcm94eSwgSm9iVGl0bGVEdG8sIEpvYlRpdGxlU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSZW1vdGVDb21tYW5kU2VydmljZVByb3h5LCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIFNtYXJ0cGFya0Jhc2ljRHRvLCBTdHJpbmdEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvSUVudW1lcmFibGVEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSwgU3RyaW5nRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvSUVudW1lcmFibGVEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSwgWkR0bywgWm9uZUR0bywgWm9uZVNlcnZpY2VQcm94eSwgWlNlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWNpbGl0eS1jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUcnV0aHksIE51bWJlck1hcCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcgfSBmcm9tICcuLi9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBNZW51TG9hZEFjdGlvbiB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBTZXRTbWFydFBhcmtBY3Rpb24gfSBmcm9tICcuLi9zbWFydHBhcmtzL3NtYXJ0cGFyay5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5TWVudVNlcnZpY2UgfSBmcm9tICcuL2ZhY2lsaXR5LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSwgQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnksIERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSwgRmFjaWxpdHlEaWN0aW9uYXJ5LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSB9IGZyb20gJy4vZmFjaWxpdHktbW9kYWwnO1xuaW1wb3J0IHsgQ2xlYXJDYXRlZ29yaWVzQWN0aW9uLCBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbiwgQ2xlYXJHcm91cHNBY3Rpb24sIENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24sIENsZWFySm9iVGl0bGVzQWN0aW9uLCBDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24sIENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbiwgQ2xlYXJab25lc0FjdGlvbiwgQ2xlYXJac0FjdGlvbiwgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbiwgTG9hZENhdGVnb3JpZXNBY3Rpb24sIExvYWRGYWNpbGl0eUFjdGlvbiwgTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRHcm91cHNBY3Rpb24sIExvYWRKb2JUaXRsZXNBY3Rpb24sIExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCBMb2FkUGFya2luZ0xvdEFjdGlvbiwgTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkWm9uZXNBY3Rpb24sIExvYWRac0FjdGlvbiwgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbiwgU2V0QmFzaWNNZW51QWN0aW9uLCBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0U2VsZWN0ZWRQYXJrQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24sIFVubG9hZFBhcmtpbmdMb3RBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi9mYWNpbGl0eS5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFNlcnZpY2U6IFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2VQcm94eTogR3JvdXBTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVNlcnZpY2VQcm94eTogSm9iVGl0bGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZVByb3h5OiBab25lU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelNlcnZpY2VQcm94eTogWlNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgaWYgKGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMV8wKSkge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldERldmljZVJlbW90ZUNvbW1hbmRzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldERldmljZVJlbW90ZUNvbW1hbmRzQnlQYXJrSWQocGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgICBpZiAoaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8xXzApKSB7XG4gICAgICAgIHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFNlcnZpY2UuZ2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kcyhwYXJrSWQsIGd1aWQpO1xuICAgICAgfSBlbHNlIGlmIChpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl84XzRfMCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gbmV3IFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgY29tbWFuZFJlc3BvbnNlLmRhdGEgPSB7IFtndWlkXTogRmFjaWxpdHlSZW1vdGVDb21tYW5kc01lbnVJdGVtcyB9O1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSBvZihjb21tYW5kUmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3RlQ29tbWFuZHNSZWYkKSB7XG4gICAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkLCBpc1N1cGVyUGFyaywgYXBwTW9kdWxlIH06IExvYWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGlmIChpc1N1cGVyUGFyaykge1xuICAgICAgY29uc3QgYWxsR3VpZEZhY2lsaXRpZXMkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0aWVzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICByZXR1cm4gYWxsR3VpZEZhY2lsaXRpZXMkLnBpcGUodGFwKGZhY2lsaXRpZXNNYXAgPT4ge1xuICAgICAgICBjb25zdCBmYWNpbGl0eSA9IGZhY2lsaXRpZXNNYXAuZGF0YVtndWlkXS5maW5kKGYgPT4gZi5pZCA9IHBhcmtJZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eSwgZmFjaWxpdGllc01hcC5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEZhY2lsaXR5JCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0lkLCBndWlkKTtcbiAgICAgIHJldHVybiBmdWxsRmFjaWxpdHkkLnBpcGUodGFwKGZhY2lsaXR5ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oVW5sb2FkUGFya2luZ0xvdEFjdGlvbilcbiAgb25VbmxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogVW5sb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFpvbmVDaGFuZ2VkQWN0aW9uKVxuICBvblpvbmVDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgem9uZSwgcGFya0lkIH06IFpvbmVDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcbiAgICBjb25zdCB6b25lSW5kZXggPSBzZWxlY3RlZC56b25lcz8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gem9uZS5pZCAmJiBpdGVtLnBhcmtJRCA9PT0gcGFya0lkKTtcbiAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICBzZWxlY3RlZC56b25lc1t6b25lSW5kZXhdID0gem9uZTtcbiAgICBzZWxlY3RlZC56b25lcyA9IGNsb25lKHNlbGVjdGVkLnpvbmVzKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHpvbmVzOiBzZWxlY3RlZC56b25lcyxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbilcbiAgb25TZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sXG4gICAgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQgfTogU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzID0gdGhpcy51cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1cyk7XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBpZiAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5LCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICB9XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKVxuICBvbkZhY2lsaXR5Q2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5LCBndWlkIH06IEZhY2lsaXR5Q2hhbmdlZEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGYWNpbGl0eSA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA/IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gOiBudWxsO1xuICAgIGlmICghc2VsZWN0ZWRGYWNpbGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlZEZhY2lsaXR5ID0gdGhpcy5hc3NpZ25GYWNpbGl0eShzZWxlY3RlZEZhY2lsaXR5LCBmYWNpbGl0eSk7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IGNvbXBsZXRlZEZhY2lsaXR5O1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoeyBkaWN0aW9uYXJ5OiBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KSB9KTtcblxuICAgIGlmICh0aGlzLmlzUGFya0FjdGl2ZShjdHgsIGd1aWQsIGZhY2lsaXR5LmlkKSkge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogY29tcGxldGVkRmFjaWxpdHksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGluZyBQYXJrQ29ubmVjdGlvblN0YXR1cyBmb3IgcGFya3NcbiAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IGNsb25lRGVlcChjdHguZ2V0U3RhdGUoKS5jb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdKTtcbiAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA9IHRoaXMuZ2xvYmFsRXJyb3JTZXJ2aWNlLmdldFBhcmtDb25uZWN0aW9uU3RhdHVzKGd1aWQsIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0sIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKFNldEJhc2ljTWVudUFjdGlvbilcbiAgb25TZXRCYXNpY01lbnVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBzbWFydHBhcmtNYXAsIGFwcE1vZHVsZSB9OiBTZXRCYXNpY01lbnVBY3Rpb24pIHtcbiAgICBjdHguZGlzcGF0Y2gobmV3IE1lbnVMb2FkQWN0aW9uKHRoaXMudG9CYXNpY01lbnVJdGVtcyhjdHgsIHNtYXJ0cGFya01hcCwgY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeSwgYXBwTW9kdWxlKSwgYXBwTW9kdWxlKSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRHcm91cHNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkR3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZEdyb3Vwc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEdyb3VwcyQgPSB0aGlzLmdyb3VwU2VydmljZVByb3h5LmdldEd1ZXN0R3JvdXAoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldEdyb3VwcyQucGlwZSh0YXAoZ3JvdXBzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3JvdXBzOiBncm91cHMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENhdGVnb3JpZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRDYXRlZ29yaWVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Q2F0ZWdvcmllcyQgPSB0aGlzLmNhdGVnb3J5U2VydmljZVByb3h5LmdldENhdGVnb3JpZXMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuICAgIHJldHVybiBnZXRDYXRlZ29yaWVzJC5waXBlKHRhcChjYXRlZ29yaWVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkSm9iVGl0bGVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRKb2JUaXRsZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRKb2JUaXRsZXMkID0gdGhpcy5qb2JUaXRsZVNlcnZpY2VQcm94eS5nZXRKb2JUaXRsZXMoYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbiwgYWN0aW9uLmd1aWQpO1xuXG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lU2VydmljZVByb3h5LmdldEJ5U2VhcmNoUGFyYW1zKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZFpzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFpzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0WnMkID0gdGhpcy56U2VydmljZVByb3h5LmdldFpzKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRacyQucGlwZSh0YXAoeiA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHo6IHouZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJHcm91cHNBY3Rpb24pXG4gIG9uQ2xlYXJHcm91cHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGdyb3VwczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKVxuICBvbkNsZWFyQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2F0ZWdvcmllczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJKb2JUaXRsZXNBY3Rpb24pXG4gIG9uQ2xlYXJKb2JUaXRsZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGpvYlRpdGxlczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJab25lc0FjdGlvbilcbiAgb25DbGVhclpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6b25lczogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJac0FjdGlvbilcbiAgb25DbGVhclpzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB6OiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZ3VpZCwgZmFjaWxpdHkgfTogU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKSB7XG4gICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5Py5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQsXG4gICAgICBwYXJrSWQ6IGZhY2lsaXR5Py5pZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBmYWNpbGl0eT8ubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICB6b25lczogZmFjaWxpdHk/LnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKVxuICBvbkNsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IH06IENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pXG4gIG9uQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuXG4gICAgLy8gSWYgdGhlIHNlbGVjdGVkIGZhY2lsaXR5IGlzIEluYWN0aXZlIGFuZCBub3QgYSBTdXBlcnBhcmssIHdlIGRlc2VsZWN0XG4gICAgLy8gVGhpcyBtZWFuIHdlIHdvbid0IGNhcnJ5IGFuIEluYWN0aXZlIHBhcmsgdG8gdGhlIG5leHQgbW9kdWxlIGFzIHNlbGVjdGVkXG4gICAgaWYgKCFzZWxlY3RlZD8uYWN0aXZlICYmICFzZWxlY3RlZD8uaXNNdWx0aVBhcmspIHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbilcbiAgb25GYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50IH06IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5W2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50Lmd1aWRdW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnBhcmtJZF07XG5cbiAgICBjb25zdCBvcGVyYXRpb25UeXBlS2V5ID0gRmFjaWxpdHlSZW1vdGVDb21tYW5kc0xvY2FsaXphdGlvbktleVtGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlc1tmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlXV07XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7IHZhbHVlOiBmYWNpbGl0eS5uYW1lLCBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3MuYm9keSB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG9wZXJhdGlvblR5cGVLZXkpXG4gICAgfTtcblxuICAgIGlmIChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpLnBpcGUoc3dpdGNoTWFwKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50ID0+IHtcbiAgICAgIHJldHVybiBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzID8gb2YoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcykgOiB0aHJvd0Vycm9yKCdGYWlsZWQgZXhlY3V0aW5nIGNvbW1hbmQnKTtcbiAgICB9KSwgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5kaXNwbGF5KGNvbmZpZykpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkTWFjcm9Db21tYW5kc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkIH06IExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uKSB7XG4gICAgY29uc3QgbWFjcm9Db21tYW5kcyQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldE1hY3JvQ29tbWFuZHMocGFya0lkLCBndWlkKTtcblxuICAgIHJldHVybiBtYWNyb0NvbW1hbmRzJC5waXBlKHRhcChtYWNyb0NvbW1hbmRzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbWFjcm9Db21tYW5kczogbWFjcm9Db21tYW5kcy5kYXRhXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbilcbiAgb25DbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIG1hY3JvQ29tbWFuZHM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0aWVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIsIGFwcE1vZHVsZTogQXBwTW9kdWxlLFxuICAgIGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgZmFjaWxpdGllc01hcD86IFN0cmluZ01hcDxGYWNpbGl0eUR0b1tdPikge1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBub3dNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIGlmIChmYWNpbGl0aWVzTWFwKSB7XG4gICAgICBmYWNpbGl0aWVzTWFwW2d1aWRdLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGYuY2xvdWRJZCA9IGYuY2xvdWRJZCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5jbG91ZElkO1xuICAgICAgICBmLmZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGYucGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0ucGVybWlzc2lvbnM7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0sIGYpO1xuICAgICAgICByZXR1cm4gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY2lsaXR5LmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmNsb3VkSWQ7XG4gICAgICBmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5LnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5wZXJtaXNzaW9ucztcbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdID0gdGhpcy51cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBmYWNpbGl0eSk7XG4gICAgfVxuXG4gICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSB0aGlzLmdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5LCBub3dNb21lbnQpO1xuICAgIHRoaXMucGF0Y2hEaWZmRGljdGluYXJ5VG9TdG9yZShjdHgsIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KTtcbiAgICB0aGlzLnBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4LCBmYWNpbGl0eURpY3Rpb25hcnksIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtwYXJrSWRdLCBhcHBNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGYWNpbGl0eUNvbm5lY3Rpdml0eUZsYWdzKHN0b3JlZEZhY2lsaXR5OiBGYWNpbGl0eUR0bywgaW5jb21pbmdGYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSAhaW5jb21pbmdGYWNpbGl0eS5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgcmV0dXJuIGluY29taW5nRmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmFjaWxpdGllc1RvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGFwcE1vZHVsZTogQXBwTW9kdWxlKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeSxcbiAgICB9KTtcblxuICAgIGlmIChhcHBNb2R1bGUgPT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgY29uc3QgYWxsb3dlZEFjdGlvbnMgPSBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5KGZhY2lsaXR5LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgICAgem9uZXM6IGZhY2lsaXR5LnpvbmVzLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudFNlcnZlclRpbWVEaWZmKGZhY2lsaXR5OiBGYWNpbGl0eUR0bywgbm93TW9tZW50OiBtb21lbnQuTW9tZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gbm93TW9tZW50LnR6KGZhY2lsaXR5LnNwVGltZVpvbmUpLmRpZmYodGhpcy5zeW5jU2VydmVyRGF0ZUdsb2JhbFdvcmxkVGltZVpvbmUoZmFjaWxpdHkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5OiBGYWNpbGl0eUR0bykge1xuICAgIC8vIGZpeCBmb3Igc2VydmVycyB0aGF0IG5vdCBzeW5jIHRvIGdsb2JhbCB3b3JsZCBjbG9ja1xuICAgIGxldCBzZXJ2ZXJEYXRlVGltZTogc3RyaW5nID0gZmFjaWxpdHkuc2VydmVyRGF0ZVRpbWVbJ19pJ107XG4gICAgaWYgKCFzZXJ2ZXJEYXRlVGltZS5lbmRzV2l0aCgnKzAwOjAwJykpIHtcbiAgICAgIHNlcnZlckRhdGVUaW1lID0gc2VydmVyRGF0ZVRpbWUuc2xpY2UoMCwgc2VydmVyRGF0ZVRpbWUuaW5kZXhPZignLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbWVudC50eihzZXJ2ZXJEYXRlVGltZSwgZmFjaWxpdHkuc3BUaW1lWm9uZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3MoY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byk6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPyBudWxsIDogY3VycmVudFNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICByZXR1cm4gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25GYWNpbGl0eShzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKTogRmFjaWxpdHlEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBsZXQgY3VycmVudEZhY2lsaXR5ID0gbmV3IEZhY2lsaXR5RHRvKHN0b3JlZEZhY2lsaXR5KTtcbiAgICBjdXJyZW50RmFjaWxpdHkubmFtZSA9IGluY29taW5nRmFjaWxpdHkubmFtZTtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNMUFJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICBjdXJyZW50RmFjaWxpdHkuaXNNdWx0aVBhcmsgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTXVsdGlQYXJrO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50aW1lRHJpZnQgPSBpbmNvbWluZ0ZhY2lsaXR5LnRpbWVEcmlmdDtcbiAgICBjdXJyZW50RmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkuc21hcnRQYXJrUG9pbnRlcjtcbiAgICBjdXJyZW50RmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyID0gaW5jb21pbmdGYWNpbGl0eS5tYWluQ29udHJvbGxlclBvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5LmFjdGl2ZSA9IGluY29taW5nRmFjaWxpdHkuYWN0aXZlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS50b3RhbFNwYWNlID0gaW5jb21pbmdGYWNpbGl0eS50b3RhbFNwYWNlO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTFBSRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBjdXJyZW50RmFjaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3VkRGF0ZVRpbWVVdGMoKSB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgcmV0dXJuIG1vbWVudC51dGMoKS5zdWJ0cmFjdChjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeVtndWlkXSwgJ21pbGxpc2Vjb25kcycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2ljTWVudUl0ZW1zKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgdGliYUtleXMgPSBjdHguZ2V0U3RhdGUoKS50aWJhS2V5cztcbiAgICBjb25zdCBtZW51SXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgY29uc3QgdGliYUtleSA9IHRpYmFLZXlzW2d1aWRdO1xuICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5jcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrTWFwW2d1aWRdLCBndWlkLCB0aWJhS2V5LCBmYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGlzUGFya0FjdGl2ZSA9IChjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PlxuICAgIGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkPy5pZCA9PT0gcGFya0lkICYmIGN0eC5nZXRTdGF0ZSgpLmd1aWQgPT09IGd1aWQ7XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZW51SXRlbXMoc21hcnRwYXJrQmFzaWM6IFNtYXJ0cGFya0Jhc2ljRHRvLCBndWlkOiBzdHJpbmcsIHRpYmFLZXk6IG51bWJlciwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGFwcE1vZHVsZTogQXBwTW9kdWxlKTogTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgc21hcnRwYXJrQmFzaWMuZmFjaWxpdGllcy5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICBpZiAobG90Lm11bHRpUGFya1BhcmVudElEID4gMCkge1xuICAgICAgICAvLyBkbyBub3QgcHVzaCBjaGlsZHJlbnMgdG8gbWVudSBpdGVtcyBhcnJheVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmNyZWF0ZU1lbnUoZ3VpZCwgdGliYUtleSwgc21hcnRwYXJrQmFzaWMsIGxvdCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpO1xuICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPik6IHZvaWQge1xuICAgIC8vIFdlIGRvbnQgcnVuIG1lbnUgdXBkYXRlIGlmIHdlIGFyZSBub3QgaW4gQ0NcbiAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoY3VycmVudE1vZHVsZSAhPT0gQXBwTW9kdWxlLkNjKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG5cbiAgICBmb3IgKGNvbnN0IFtndWlkLCBsb3RzTWFwXSBvZiBPYmplY3QuZW50cmllcyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eS5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgICBtZW51SXRlbSA9IG1lbnVJdGVtc1xuICAgICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQpPy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbmQoc3ViSXRlbSA9PiBzdWJJdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBpdGVtLmlkID09PSBmYWNpbGl0eS5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBiYWRnZUNsYXNzID0gdGhpcy5mYWNpbGl0eU1lbnVTZXJ2aWNlLmdldEJhZGdlUHJpb3JpdHkoZ3VpZCwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHksIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgICAgbWVudUl0ZW0uaGFzQmFkZ2UgPSBiYWRnZUNsYXNzICE9PSBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzLkNvbm5lY3RlZDtcbiAgICAgICAgICBtZW51SXRlbS5iYWRnZUNsYXNzID0gYmFkZ2VDbGFzcztcbiAgICAgICAgICBtZW51SXRlbS5uYW1lID0gZmFjaWxpdHkubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbihbLi4ubWVudUl0ZW1zXSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPiwgZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPiA9IHt9O1xuICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwOiBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhzbWFydHBhcmtNYXApKSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLnNlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwW2d1aWRdID0gc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMucmVkdWNlKChmYWNpbGl0aWVzLCBsb3QpID0+IHtcbiAgICAgICAgY29uc3QgcGFya0Nvbm5lY3Rpb25TdGF0dXMgPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBsb3QsIHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICAgIGZhY2lsaXRpZXNbbG90LmlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICBzdGFydERhdGU6IHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXJ0RGF0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRwYXJrTWFwOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KTogeyBkaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9IHtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSA9IHt9O1xuICAgIGNvbnN0IGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBsb3Qgb2Ygc21hcnRwYXJrTWFwW2d1aWRdLmZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29uc3QgY2xvdCA9IG5ldyBGYWNpbGl0eUR0bygpO1xuICAgICAgICBjbG90LmlkID0gbG90LmlkO1xuICAgICAgICBjbG90LmNsb3VkSWQgPSBsb3QuY2xvdWRJZDtcbiAgICAgICAgY2xvdC5hY3RpdmUgPSBsb3QuYWN0aXZlO1xuICAgICAgICBjbG90LmZlYXR1cmVQZXJtaXNzaW9ucyA9IGxvdC5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QucGVybWlzc2lvbnMgPSBsb3QucGVybWlzc2lvbnM7XG4gICAgICAgIGNsb3QubmFtZSA9IGxvdC5uYW1lO1xuICAgICAgICBjbG90LnNpdGVDb2RlID0gbG90LnNpdGVDb2RlO1xuICAgICAgICBjbG90Lm11bHRpUGFya1BhcmVudElEID0gbG90Lm11bHRpUGFya1BhcmVudElEO1xuICAgICAgICBjbG90LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID0gbG90LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGxvdC5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA7XG4gICAgICAgIGNsb3QuaXNMUFJDb25uZWN0ZWQgPSBsb3QuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuaXNMUFJFbmFibGVkID0gbG90LmlzTFBSRW5hYmxlZDtcbiAgICAgICAgY2xvdC5pc1RpY2tldExlc3NFbmFibGVkID0gbG90LmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGNsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0Jhc2ljID0gbG90LmlzQmFzaWM7XG4gICAgICAgIGNsb3QuaXNNdWx0aVBhcmsgPSBsb3QuaXNNdWx0aVBhcms7XG4gICAgICAgIGNsb3QudGltZURyaWZ0ID0gbG90LnRpbWVEcmlmdDtcbiAgICAgICAgY2xvdC5zcFRpbWVab25lID0gbG90LnNwVGltZVpvbmU7XG4gICAgICAgIGNsb3Quc2VydmVyRGF0ZVRpbWUgPSBsb3Quc2VydmVyRGF0ZVRpbWU7XG4gICAgICAgIGNsb3QudG90YWxTcGFjZSA9IGxvdC50b3RhbFNwYWNlO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bbG90LmlkXSA9IGNsb3Q7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaWZmIG9mIDAgZm9yIGluaXRpYWwgc2V0dXBcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBkaWN0aW9uYXJ5OiBmYWNpbGl0eURpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH07XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgc21hcnRQYXJrczogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPikge1xuICAgIC8vIGtlZXAgZGVmYXVsdCB2YWx1ZXMgd2hlbiBuYXZpZ2F0ZSB0byBjb21tYW5kIGNlbnRlciBmb3J3YXJkIGFuZCBiYWNrLlxuICAgIGNvbnN0IHsgZ3VpZCwgcGFya0lkLCBtdWx0aVBhcmtQYXJlbnRJRCwgc2VsZWN0ZWQgfSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGRlZmF1bHRzLmd1aWQgPSBndWlkO1xuICAgIGRlZmF1bHRzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgZGVmYXVsdHMucGFya0lkID0gcGFya0lkO1xuICAgIGRlZmF1bHRzLm11bHRpUGFya1BhcmVudElEID0gbXVsdGlQYXJrUGFyZW50SUQ7XG5cbiAgICBjdHguc2V0U3RhdGUoZGVmYXVsdHMpO1xuXG4gICAgY29uc3QgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+ID0gT2JqZWN0LmtleXMoc21hcnRQYXJrcykucmVkdWNlKChrZXlzLCBndWlkLCBpbmRleCkgPT4ge1xuICAgICAga2V5c1tndWlkXSA9IGluZGV4O1xuICAgICAgcmV0dXJuIGtleXM7XG4gICAgfSwge30pO1xuXG4gICAgY29uc3QgeyBkaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB9ID0gdGhpcy5jb252ZXJ0VG9GYWNpbGl0eURpY3Rpb25hcnkoc21hcnRQYXJrcyk7XG5cbiAgICBjb25zdCBzdGF0ZVVwZGF0ZXM6IFBhcnRpYWw8RmFjaWxpdHlTdGF0ZU1vZGVsPiA9IHtcbiAgICAgIHRpYmFLZXlzLFxuICAgICAgZGljdGlvbmFyeSxcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH07XG5cbiAgICBpZiAoIWRpY3Rpb25hcnlbZ3VpZF0gfHwgIWRpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVVwZGF0ZXMsIHtcbiAgICAgICAgZ3VpZDogJycsXG4gICAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgICB6b25lczogbnVsbCxcbiAgICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGN0eC5wYXRjaFN0YXRlKHN0YXRlVXBkYXRlcyk7XG5cbiAgICAvL3VzZXMgZmFjaWxpdHkgZGljdGlvbmFyeSBmcm9tIHN0b3JlLCB0aGVyZWZvcmUgcGxhY2VkIGFmdGVyXG4gICAgY29uc3QgeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcCB9ID0gdGhpcy5nZXRTbWFydHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKHNtYXJ0UGFya3MsIGRpY3Rpb25hcnkpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwOiBOdW1iZXJNYXA8RHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8+ID0gSlNPTi5wYXJzZShcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04pXG4gICAgKSA/PyB7fTtcblxuICAgIGNvbnN0IGRwYzogRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8gPSBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc291cmNlSWRlbnRpZmllcl07XG4gICAgaWYgKGRwYykge1xuICAgICAgY29uc3QgZmFjaWxpdHk6IEZhY2lsaXR5RHRvID0gbnVsbDtcbiAgICAgIGNvbmZpZy5kdXJhdGlvbiA9IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbiAgICAgIGNvbmZpZy5tZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKFxuICAgICAgICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLFxuICAgICAgICBmYWNpbGl0eSxcbiAgICAgICAgZHBjXG4gICAgICApO1xuXG4gICAgICAvLyBDbG9zZSBkeW5hbWljIHByaWNpbmcgbm90aWZpY2F0aW9uXG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0byA9IG5ldyBOb3RpZmljYXRpb25EdG8oKTtcbiAgICAgIG5vdGlmaWNhdGlvbi50eXBlID0gTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiA9IGRwYztcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3Npbmcobm90aWZpY2F0aW9uLCBkcGMuZ3VpZCkpO1xuXG4gICAgICBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXBbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF0gPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXG4gICAgICAgIERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04sXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
873
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxSCxPQUFPLEVBQUUsU0FBUyxFQUFnRSxXQUFXLEVB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QVEsRUFBRTttQ0FHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzJEQUdWO0FBR007SUFETixRQUFRLEVBQUU7NkRBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtpQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3FDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7b0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTs0QkFHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3dDQUdWO0FBdElVLGFBQWE7SUFKekIsS0FBSyxDQUFxQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO0tBQ1QsQ0FBQztHQUNXLGFBQWEsQ0FzMEJ6QjtTQXQwQlksYUFBYTs0RkFBYixhQUFhO2tCQUx6QixVQUFVOzhqQkE4SVQseUJBQXlCLE1BT3pCLDRCQUE0QixNQU81Qix5QkFBeUIsTUFLekIsc0JBQXNCLE1BMEJ0Qiw2QkFBNkIsTUFzQjdCLHFDQUFxQyxNQTJCckMsb0JBQW9CLE1BZ0JwQix3QkFBd0IsTUFXeEIsa0NBQWtDLE1BWWxDLG9DQUFvQyxNQVlwQyxtQkFBbUIsTUFvQm5CLG9DQUFvQyxNQXNCcEMsdUJBQXVCLE1BK0J2QixvQkFBb0IsTUFLcEIsa0JBQWtCLE1BYWxCLHNCQUFzQixNQVl0QixxQkFBcUIsTUFhckIsaUJBQWlCLE1BYWpCLGNBQWMsTUFhZCxtQkFBbUIsTUFPbkIsdUJBQXVCLE1BT3ZCLHNCQUFzQixNQU90QixrQkFBa0IsTUFPbEIsZUFBZSxNQU9mLHVCQUF1QixNQWF2Qiw2QkFBNkIsTUFZN0IsaUNBQWlDLE1Ba0JqQyxxQ0FBcUMsTUFtQnJDLHlCQUF5QixNQVd6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lLCBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IERZTkFNSUNfUFJJQ0lOR19DT05ESVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl84XzRfMCwgVkVSU0lPTl85XzFfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWVudUl0ZW1zIH0gZnJvbSAnLi4vLi4vZW51bXMvZmFjaWxpdHktY29tbWFuZC5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bywgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBDYXRlZ29yeUR0bywgQ2F0ZWdvcnlTZXJ2aWNlUHJveHksIERldmljZVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgRmFjaWxpdHlTZXJ2aWNlUHJveHksIEdyb3VwRHRvLCBHcm91cFNlcnZpY2VQcm94eSwgSm9iVGl0bGVEdG8sIEpvYlRpdGxlU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSZW1vdGVDb21tYW5kU2VydmljZVByb3h5LCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIFNtYXJ0cGFya0Jhc2ljRHRvLCBTdHJpbmdEZXZpY2VSZW1vdGVDb21tYW5kUmVmRHRvSUVudW1lcmFibGVEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSwgU3RyaW5nRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvSUVudW1lcmFibGVEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSwgWkR0bywgWm9uZUR0bywgWm9uZVNlcnZpY2VQcm94eSwgWlNlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvZWRnZS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mYWNpbGl0eS1jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUcnV0aHksIE51bWJlck1hcCwgU3RyaW5nTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcgfSBmcm9tICcuLi9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBNZW51TG9hZEFjdGlvbiB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBTZXRTbWFydFBhcmtBY3Rpb24gfSBmcm9tICcuLi9zbWFydHBhcmtzL3NtYXJ0cGFyay5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5TWVudVNlcnZpY2UgfSBmcm9tICcuL2ZhY2lsaXR5LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSwgQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnksIERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSwgRmFjaWxpdHlEaWN0aW9uYXJ5LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSB9IGZyb20gJy4vZmFjaWxpdHktbW9kYWwnO1xuaW1wb3J0IHsgQ2xlYXJDYXRlZ29yaWVzQWN0aW9uLCBDbGVhckZhY2lsaXR5RGljdGlvbmFyeUFjdGlvbiwgQ2xlYXJHcm91cHNBY3Rpb24sIENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24sIENsZWFySm9iVGl0bGVzQWN0aW9uLCBDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24sIENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbiwgQ2xlYXJab25lc0FjdGlvbiwgQ2xlYXJac0FjdGlvbiwgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbiwgTG9hZENhdGVnb3JpZXNBY3Rpb24sIExvYWRGYWNpbGl0eUFjdGlvbiwgTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRHcm91cHNBY3Rpb24sIExvYWRKb2JUaXRsZXNBY3Rpb24sIExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCBMb2FkUGFya2luZ0xvdEFjdGlvbiwgTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkWm9uZXNBY3Rpb24sIExvYWRac0FjdGlvbiwgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbiwgU2V0QmFzaWNNZW51QWN0aW9uLCBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbiwgU2V0U2VsZWN0ZWRQYXJrQWN0aW9uLCBTZXRTbWFydHBhcmtCYXNpY0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBbGxBY3Rpb24sIFVubG9hZFBhcmtpbmdMb3RBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi9mYWNpbGl0eS5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFNlcnZpY2U6IFJlbW90ZUNvbW1hbmRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2VQcm94eTogR3JvdXBTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVNlcnZpY2VQcm94eTogSm9iVGl0bGVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZVByb3h5OiBab25lU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelNlcnZpY2VQcm94eTogWlNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0RldmljZVJlbW90ZUNvbW1hbmRSZWZEdG9JRW51bWVyYWJsZURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgaWYgKGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMV8wKSkge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRTZXJ2aWNlLmdldERldmljZVJlbW90ZUNvbW1hbmRzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldERldmljZVJlbW90ZUNvbW1hbmRzQnlQYXJrSWQocGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgdGliYUtleUluZGV4IH06IExvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKSB7XG4gICAgY29uc3QgZ3VpZCA9IE9iamVjdC5rZXlzKGN0eC5nZXRTdGF0ZSgpLnRpYmFLZXlzKVt0aWJhS2V5SW5kZXhdO1xuXG4gICAgLy8gV2UgZmV0Y2ggZnJvbSB0aGUgc2VydmVyIG9ubHkgaWYgd2UgZGlkbid5IGZldGNoIGJlZm9yZSBmb3IgdGhhdCBndWlkXG4gICAgY29uc3QgcmVtb3RlQ29tbWFuZHNSZWZBbGwgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBsZXQgcmVtb3RlQ29tbWFuZHNSZWYkOiBPYnNlcnZhYmxlPFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgICBpZiAoaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIFZFUlNJT05fOV8xXzApKSB7XG4gICAgICAgIHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFNlcnZpY2UuZ2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kcyhwYXJrSWQsIGd1aWQpO1xuICAgICAgfSBlbHNlIGlmIChpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl84XzRfMCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gbmV3IFN0cmluZ0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFJlZkR0b0lFbnVtZXJhYmxlRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgY29tbWFuZFJlc3BvbnNlLmRhdGEgPSB7IFtndWlkXTogRmFjaWxpdHlSZW1vdGVDb21tYW5kc01lbnVJdGVtcyB9O1xuICAgICAgICByZW1vdGVDb21tYW5kc1JlZiQgPSBvZihjb21tYW5kUmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3RlQ29tbWFuZHNSZWYkKSB7XG4gICAgICAgIHJldHVybiByZW1vdGVDb21tYW5kc1JlZiQucGlwZSh0YXAocmVtb3RlQ29tbWFuZHNSZWYgPT4ge1xuICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihyZW1vdGVDb21tYW5kc1JlZi5kYXRhLCBndWlkLCBwYXJrSWQpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEZhY2lsaXR5QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCBndWlkLCBpc1N1cGVyUGFyaywgYXBwTW9kdWxlIH06IExvYWRGYWNpbGl0eUFjdGlvbikge1xuICAgIGlmIChpc1N1cGVyUGFyaykge1xuICAgICAgY29uc3QgYWxsR3VpZEZhY2lsaXRpZXMkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0aWVzKHBhcmtJZCwgZ3VpZCk7XG4gICAgICByZXR1cm4gYWxsR3VpZEZhY2lsaXRpZXMkLnBpcGUodGFwKGZhY2lsaXRpZXNNYXAgPT4ge1xuICAgICAgICBjb25zdCBmYWNpbGl0eSA9IGZhY2lsaXRpZXNNYXAuZGF0YVtndWlkXS5maW5kKGYgPT4gZi5pZCA9IHBhcmtJZCk7XG4gICAgICAgIHRoaXMudXBkYXRlRmFjaWxpdGllcyhjdHgsIGd1aWQsIHBhcmtJZCwgYXBwTW9kdWxlLCBmYWNpbGl0eSwgZmFjaWxpdGllc01hcC5kYXRhKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEZhY2lsaXR5JCA9IHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0RmFjaWxpdHkocGFya0lkLCBndWlkKTtcbiAgICAgIHJldHVybiBmdWxsRmFjaWxpdHkkLnBpcGUodGFwKGZhY2lsaXR5ID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oVW5sb2FkUGFya2luZ0xvdEFjdGlvbilcbiAgb25VbmxvYWRQYXJraW5nTG90QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogVW5sb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGd1aWQ6ICcnLFxuICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbikge1xuICAgIGNvbnN0IGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0pIHtcbiAgICAgIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKVxuICBvblNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5mYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIWZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdID0ge307XG4gICAgfVxuICAgIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXVthY3Rpb24ucGFya0lkXSA9IGFjdGlvbi5yZW1vdGVDb21tYW5kc1thY3Rpb24uZ3VpZF07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFpvbmVDaGFuZ2VkQWN0aW9uKVxuICBvblpvbmVDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgem9uZSwgcGFya0lkIH06IFpvbmVDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcbiAgICBjb25zdCB6b25lSW5kZXggPSBzZWxlY3RlZC56b25lcz8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gem9uZS5pZCAmJiBpdGVtLnBhcmtJRCA9PT0gcGFya0lkKTtcbiAgICB6b25lLm9jY3VwYW5jeSA9IHpvbmUubW9udGhsaWVzT2NjdXBhbmN5ICsgem9uZS50cmFuc2llbnRzT2NjdXBhbmN5O1xuICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICBzZWxlY3RlZC56b25lc1t6b25lSW5kZXhdID0gem9uZTtcbiAgICBzZWxlY3RlZC56b25lcyA9IGNsb25lKHNlbGVjdGVkLnpvbmVzKTtcblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3QgZ3VpZCA9IGN0eC5nZXRTdGF0ZSgpLmd1aWQ7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3NlbGVjdGVkLmlkXS56b25lcyA9IHNlbGVjdGVkLnpvbmVzO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24pXG4gIG9uU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LFxuICAgIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkIH06IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cyA9IHRoaXMudXBkYXRlU2VydmljZVJ1bm5pbmdTdGF0dXNGbGFncyhzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdLCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMpO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0gPSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5IH0pO1xuXG4gICAgLy8gVXBkYXRpbmcgUGFya0Nvbm5lY3Rpb25TdGF0dXMgZm9yIHBhcmtzXG4gICAgaWYgKGZhY2lsaXR5RGljdGlvbmFyeSkge1xuICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSBjbG9uZURlZXAoY3R4LmdldFN0YXRlKCkuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkpO1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdKTtcbiAgICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBmYWNpbGl0eSwgc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgfVxuICAgICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5Q2hhbmdlZEFjdGlvbilcbiAgb25GYWNpbGl0eUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBmYWNpbGl0eSwgZ3VpZCB9OiBGYWNpbGl0eUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkRmFjaWxpdHkgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0gPyBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdIDogbnVsbDtcbiAgICBpZiAoIXNlbGVjdGVkRmFjaWxpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZWRGYWNpbGl0eSA9IHRoaXMuYXNzaWduRmFjaWxpdHkoc2VsZWN0ZWRGYWNpbGl0eSwgZmFjaWxpdHkpO1xuICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSBjb21wbGV0ZWRGYWNpbGl0eTtcblxuICAgIGN0eC5wYXRjaFN0YXRlKHsgZGljdGlvbmFyeTogY2xvbmVEZWVwKGZhY2lsaXR5RGljdGlvbmFyeSkgfSk7XG5cbiAgICBpZiAodGhpcy5pc1BhcmtBY3RpdmUoY3R4LCBndWlkLCBmYWNpbGl0eS5pZCkpIHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWQ6IGNvbXBsZXRlZEZhY2lsaXR5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRpbmcgUGFya0Nvbm5lY3Rpb25TdGF0dXMgZm9yIHBhcmtzXG4gICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSBjbG9uZURlZXAoY3R4LmdldFN0YXRlKCkuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkpO1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgZm9yIChjb25zdCBmYWNpbGl0eSBvZiBmYWNpbGl0aWVzKSB7XG4gICAgICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0gPSB0aGlzLmdsb2JhbEVycm9yU2VydmljZS5nZXRQYXJrQ29ubmVjdGlvblN0YXR1cyhndWlkLCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdLCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgIH1cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0pO1xuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRCYXNpY01lbnVBY3Rpb24pXG4gIG9uU2V0QmFzaWNNZW51QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgc21hcnRwYXJrTWFwLCBhcHBNb2R1bGUgfTogU2V0QmFzaWNNZW51QWN0aW9uKSB7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBNZW51TG9hZEFjdGlvbih0aGlzLnRvQmFzaWNNZW51SXRlbXMoY3R4LCBzbWFydHBhcmtNYXAsIGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnksIGFwcE1vZHVsZSksIGFwcE1vZHVsZSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkR3JvdXBzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRHcm91cHNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRHcm91cHMkID0gdGhpcy5ncm91cFNlcnZpY2VQcm94eS5nZXRHdWVzdEdyb3VwKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRHcm91cHMkLnBpcGUodGFwKGdyb3VwcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGdyb3VwczogZ3JvdXBzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRDYXRlZ29yaWVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZENhdGVnb3JpZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQ2F0ZWdvcmllc0FjdGlvbikge1xuICAgIGNvbnN0IGdldENhdGVnb3JpZXMkID0gdGhpcy5jYXRlZ29yeVNlcnZpY2VQcm94eS5nZXRDYXRlZ29yaWVzKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcbiAgICByZXR1cm4gZ2V0Q2F0ZWdvcmllcyQucGlwZSh0YXAoY2F0ZWdvcmllcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEpvYlRpdGxlc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRKb2JUaXRsZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkSm9iVGl0bGVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Sm9iVGl0bGVzJCA9IHRoaXMuam9iVGl0bGVTZXJ2aWNlUHJveHkuZ2V0Sm9iVGl0bGVzKGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24sIGFjdGlvbi5ndWlkKTtcblxuICAgIHJldHVybiBnZXRKb2JUaXRsZXMkLnBpcGUodGFwKGpvYlRpdGxlcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGpvYlRpdGxlczogam9iVGl0bGVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRab25lc0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRab25lc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFpvbmVzJCA9IHRoaXMuem9uZVNlcnZpY2VQcm94eS5nZXRCeVNlYXJjaFBhcmFtcyhhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uLCBhY3Rpb24uZ3VpZCk7XG5cbiAgICByZXR1cm4gZ2V0Wm9uZXMkLnBpcGUodGFwKHpvbmVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgem9uZXM6IHpvbmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRac0FjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRac0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRac0FjdGlvbikge1xuICAgIGNvbnN0IGdldFpzJCA9IHRoaXMuelNlcnZpY2VQcm94eS5nZXRacyhhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uLCBhY3Rpb24uZ3VpZCk7XG5cbiAgICByZXR1cm4gZ2V0WnMkLnBpcGUodGFwKHogPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6OiB6LmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyR3JvdXBzQWN0aW9uKVxuICBvbkNsZWFyR3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBncm91cHM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyQ2F0ZWdvcmllc0FjdGlvbilcbiAgb25DbGVhckNhdGVnb3JpZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNhdGVnb3JpZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFySm9iVGl0bGVzQWN0aW9uKVxuICBvbkNsZWFySm9iVGl0bGVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBqb2JUaXRsZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyWm9uZXNBY3Rpb24pXG4gIG9uQ2xlYXJab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgem9uZXM6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyWnNBY3Rpb24pXG4gIG9uQ2xlYXJac0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgejogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U2VsZWN0ZWRQYXJrQWN0aW9uKVxuICBvblNldFNlbGVjdGVkUGFya0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IGd1aWQsIGZhY2lsaXR5IH06IFNldFNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eT8uZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBndWlkLFxuICAgICAgcGFya0lkOiBmYWNpbGl0eT8uaWQsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogZmFjaWxpdHk/Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgc2VsZWN0ZWQ6IGZhY2lsaXR5LFxuICAgICAgem9uZXM6IGZhY2lsaXR5Py56b25lcyxcbiAgICAgIGFsbG93ZWRBY3Rpb25zXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyU2VsZWN0ZWRGYWNpbGl0eUFjdGlvbilcbiAgb25DbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB9OiBDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBndWlkOiAnJyxcbiAgICAgIHBhcmtJZDogbnVsbCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICB6b25lczogbnVsbCxcbiAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKVxuICBvbkNsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBDbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZDtcblxuICAgIC8vIElmIHRoZSBzZWxlY3RlZCBmYWNpbGl0eSBpcyBJbmFjdGl2ZSBhbmQgbm90IGEgU3VwZXJwYXJrLCB3ZSBkZXNlbGVjdFxuICAgIC8vIFRoaXMgbWVhbiB3ZSB3b24ndCBjYXJyeSBhbiBJbmFjdGl2ZSBwYXJrIHRvIHRoZSBuZXh0IG1vZHVsZSBhcyBzZWxlY3RlZFxuICAgIGlmICghc2VsZWN0ZWQ/LmFjdGl2ZSAmJiAhc2VsZWN0ZWQ/LmlzTXVsdGlQYXJrKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGd1aWQ6ICcnLFxuICAgICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICAgIG11bHRpUGFya1BhcmVudElEOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgICAgem9uZXM6IG51bGwsXG4gICAgICAgIGFsbG93ZWRBY3Rpb25zOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCB9OiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZEFjdGlvbikge1xuICAgIGNvbnN0IGZhY2lsaXR5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeVtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXVtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5wYXJrSWRdO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uVHlwZUtleSA9IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXlbRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXNbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZV1dO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzOiBbeyB2YWx1ZTogZmFjaWxpdHkubmFtZSwgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLmJvZHkgfV0sXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChvcGVyYXRpb25UeXBlS2V5KVxuICAgIH07XG5cbiAgICBpZiAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuU2V0QWN0aXZlUmF0ZSkge1xuICAgICAgdGhpcy5wcm9jZXNzRHluYW1pY1ByaWNpbmdTZXRBY3RpdmVSYXRlKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWcpO1xuICAgIH1cblxuICAgIG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KS5waXBlKHN3aXRjaE1hcChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCA9PiB7XG4gICAgICByZXR1cm4gZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuc3VjY2VzcyA/IG9mKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MpIDogdGhyb3dFcnJvcignRmFpbGVkIGV4ZWN1dGluZyBjb21tYW5kJyk7XG4gICAgfSksIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheShjb25maWcpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkTWFjcm9Db21tYW5kc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHBhcmtJZCwgZ3VpZCB9OiBMb2FkTWFjcm9Db21tYW5kc0FjdGlvbikge1xuICAgIGNvbnN0IG1hY3JvQ29tbWFuZHMkID0gdGhpcy5yZW1vdGVDb21tYW5kU2VydmljZS5nZXRNYWNyb0NvbW1hbmRzKHBhcmtJZCwgZ3VpZCk7XG5cbiAgICByZXR1cm4gbWFjcm9Db21tYW5kcyQucGlwZSh0YXAobWFjcm9Db21tYW5kcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG1hY3JvQ29tbWFuZHM6IG1hY3JvQ29tbWFuZHMuZGF0YVxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24pXG4gIG9uQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBtYWNyb0NvbW1hbmRzOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdGllcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSxcbiAgICBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGZhY2lsaXRpZXNNYXA/OiBTdHJpbmdNYXA8RmFjaWxpdHlEdG9bXT4pIHtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgbm93TW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICBpZiAoZmFjaWxpdGllc01hcCkge1xuICAgICAgZmFjaWxpdGllc01hcFtndWlkXS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBmLmNsb3VkSWQgPSBmLmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uY2xvdWRJZDtcbiAgICAgICAgZi5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBmLnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLCBmKTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0eS5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5jbG91ZElkO1xuICAgICAgZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eS5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0ucGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgZmFjaWxpdHkpO1xuICAgIH1cblxuICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gdGhpcy5nZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eSwgbm93TW9tZW50KTtcbiAgICB0aGlzLnBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgdGhpcy5wYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgYXBwTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIGluY29taW5nRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBpbmNvbWluZ0ZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgfSk7XG5cbiAgICBpZiAoYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICAgIHpvbmVzOiBmYWNpbGl0eS56b25lcyxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgICBhbGxvd2VkQWN0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eTogRmFjaWxpdHlEdG8sIG5vd01vbWVudDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vd01vbWVudC50eihmYWNpbGl0eS5zcFRpbWVab25lKS5kaWZmKHRoaXMuc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICAvLyBmaXggZm9yIHNlcnZlcnMgdGhhdCBub3Qgc3luYyB0byBnbG9iYWwgd29ybGQgY2xvY2tcbiAgICBsZXQgc2VydmVyRGF0ZVRpbWU6IHN0cmluZyA9IGZhY2lsaXR5LnNlcnZlckRhdGVUaW1lWydfaSddO1xuICAgIGlmICghc2VydmVyRGF0ZVRpbWUuZW5kc1dpdGgoJyswMDowMCcpKSB7XG4gICAgICBzZXJ2ZXJEYXRlVGltZSA9IHNlcnZlckRhdGVUaW1lLnNsaWNlKDAsIHNlcnZlckRhdGVUaW1lLmluZGV4T2YoJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQudHooc2VydmVyRGF0ZVRpbWUsIGZhY2lsaXR5LnNwVGltZVpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU21hcnRQYXJrQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgcmV0dXJuIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduRmFjaWxpdHkoc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0byk6IEZhY2lsaXR5RHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgbGV0IGN1cnJlbnRGYWNpbGl0eSA9IG5ldyBGYWNpbGl0eUR0byhzdG9yZWRGYWNpbGl0eSk7XG4gICAgY3VycmVudEZhY2lsaXR5Lm5hbWUgPSBpbmNvbWluZ0ZhY2lsaXR5Lm5hbWU7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTXVsdGlQYXJrID0gaW5jb21pbmdGYWNpbGl0eS5pc011bHRpUGFyaztcbiAgICBjdXJyZW50RmFjaWxpdHkudGltZURyaWZ0ID0gaW5jb21pbmdGYWNpbGl0eS50aW1lRHJpZnQ7XG4gICAgY3VycmVudEZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXIgPSBpbmNvbWluZ0ZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5hY3RpdmUgPSBpbmNvbWluZ0ZhY2lsaXR5LmFjdGl2ZTtcbiAgICBjdXJyZW50RmFjaWxpdHkudG90YWxTcGFjZSA9IGluY29taW5nRmFjaWxpdHkudG90YWxTcGFjZTtcbiAgICBjdXJyZW50RmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gY3VycmVudEZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZERhdGVUaW1lVXRjKCkge1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIHJldHVybiBtb21lbnQudXRjKCkuc3VidHJhY3QoY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0sICdtaWxsaXNlY29uZHMnKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9CYXNpY01lbnVJdGVtcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IHRpYmFLZXlzID0gY3R4LmdldFN0YXRlKCkudGliYUtleXM7XG4gICAgY29uc3QgbWVudUl0ZW1zID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGNvbnN0IHRpYmFLZXkgPSB0aWJhS2V5c1tndWlkXTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya01hcFtndWlkXSwgZ3VpZCwgdGliYUtleSwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhcmtBY3RpdmUgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZD8uaWQgPT09IHBhcmtJZCAmJiBjdHguZ2V0U3RhdGUoKS5ndWlkID09PSBndWlkO1xuXG4gIHByaXZhdGUgY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya0Jhc2ljOiBTbWFydHBhcmtCYXNpY0R0bywgZ3VpZDogc3RyaW5nLCB0aWJhS2V5OiBudW1iZXIsIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHNtYXJ0cGFya0Jhc2ljLmZhY2lsaXRpZXMuZm9yRWFjaChsb3QgPT4ge1xuICAgICAgaWYgKGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgLy8gZG8gbm90IHB1c2ggY2hpbGRyZW5zIHRvIG1lbnUgaXRlbXMgYXJyYXlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5jcmVhdGVNZW51KGd1aWQsIHRpYmFLZXksIHNtYXJ0cGFya0Jhc2ljLCBsb3QsIGZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlKTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBXZSBkb250IHJ1biBtZW51IHVwZGF0ZSBpZiB3ZSBhcmUgbm90IGluIENDXG4gICAgY29uc3QgY3VycmVudE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgaWYgKGN1cnJlbnRNb2R1bGUgIT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUubWVudUl0ZW1zKTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuXG4gICAgZm9yIChjb25zdCBbZ3VpZCwgbG90c01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZmFjaWxpdHlEaWN0aW9uYXJ5KSkge1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMobG90c01hcCk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgbGV0IG1lbnVJdGVtOiBNZW51SXRlbTtcblxuICAgICAgICBpZiAoZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQgPiAwKSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXNcbiAgICAgICAgICAgIC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkKT8uY2hpbGRyZW5cbiAgICAgICAgICAgIC5maW5kKHN1Ykl0ZW0gPT4gc3ViSXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lbnVJdGVtID0gbWVudUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQgJiYgaXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtKSB7XG4gICAgICAgICAgY29uc3QgYmFkZ2VDbGFzcyA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5nZXRCYWRnZVByaW9yaXR5KGd1aWQsIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5LCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICAgIG1lbnVJdGVtLmhhc0JhZGdlID0gYmFkZ2VDbGFzcyAhPT0gUGFya0Nvbm5lY3Rpb25TdGF0dXNDbGFzcy5Db25uZWN0ZWQ7XG4gICAgICAgICAgbWVudUl0ZW0uYmFkZ2VDbGFzcyA9IGJhZGdlQ2xhc3M7XG4gICAgICAgICAgbWVudUl0ZW0ubmFtZSA9IGZhY2lsaXR5Lm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24oWy4uLm1lbnVJdGVtc10sIEFwcE1vZHVsZS5DYykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz4gPSB7fTtcbiAgICBjb25zdCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcDogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgICBwYXJrQ29ubmVjdGlvblN0YXR1c01hcFtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzLnJlZHVjZSgoZmFjaWxpdGllcywgbG90KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgbG90LCBzbWFydHBhcmtNYXBbZ3VpZF0uc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICBmYWNpbGl0aWVzW2xvdC5pZF0gPSB7XG4gICAgICAgICAgc3RhdHVzOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgc3RhcnREYXRlOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGFydERhdGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPik6IHsgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5ID0ge307XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID0ge307XG4gICAgICBmb3IgKGNvbnN0IGxvdCBvZiBzbWFydHBhcmtNYXBbZ3VpZF0uZmFjaWxpdGllcykge1xuICAgICAgICBjb25zdCBjbG90ID0gbmV3IEZhY2lsaXR5RHRvKCk7XG4gICAgICAgIGNsb3QuaWQgPSBsb3QuaWQ7XG4gICAgICAgIGNsb3QuY2xvdWRJZCA9IGxvdC5jbG91ZElkO1xuICAgICAgICBjbG90LmFjdGl2ZSA9IGxvdC5hY3RpdmU7XG4gICAgICAgIGNsb3QuZmVhdHVyZVBlcm1pc3Npb25zID0gbG90LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5wZXJtaXNzaW9ucyA9IGxvdC5wZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5uYW1lID0gbG90Lm5hbWU7XG4gICAgICAgIGNsb3Quc2l0ZUNvZGUgPSBsb3Quc2l0ZUNvZGU7XG4gICAgICAgIGNsb3QubXVsdGlQYXJrUGFyZW50SUQgPSBsb3QubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGNsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGxvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0xQUkNvbm5lY3RlZCA9IGxvdC5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5pc0xQUkVuYWJsZWQgPSBsb3QuaXNMUFJFbmFibGVkO1xuICAgICAgICBjbG90LmlzVGlja2V0TGVzc0VuYWJsZWQgPSBsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgY2xvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQmFzaWMgPSBsb3QuaXNCYXNpYztcbiAgICAgICAgY2xvdC5pc011bHRpUGFyayA9IGxvdC5pc011bHRpUGFyaztcbiAgICAgICAgY2xvdC50aW1lRHJpZnQgPSBsb3QudGltZURyaWZ0O1xuICAgICAgICBjbG90LnNwVGltZVpvbmUgPSBsb3Quc3BUaW1lWm9uZTtcbiAgICAgICAgY2xvdC5zZXJ2ZXJEYXRlVGltZSA9IGxvdC5zZXJ2ZXJEYXRlVGltZTtcbiAgICAgICAgY2xvdC50b3RhbFNwYWNlID0gbG90LnRvdGFsU3BhY2U7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtsb3QuaWRdID0gY2xvdDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpZmYgb2YgMCBmb3IgaW5pdGlhbCBzZXR1cFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydFBhcmtzOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KSB7XG4gICAgLy8ga2VlcCBkZWZhdWx0IHZhbHVlcyB3aGVuIG5hdmlnYXRlIHRvIGNvbW1hbmQgY2VudGVyIGZvcndhcmQgYW5kIGJhY2suXG4gICAgY29uc3QgeyBndWlkLCBwYXJrSWQsIG11bHRpUGFya1BhcmVudElELCBzZWxlY3RlZCB9ID0gY3R4LmdldFN0YXRlKCk7XG4gICAgZGVmYXVsdHMuZ3VpZCA9IGd1aWQ7XG4gICAgZGVmYXVsdHMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICBkZWZhdWx0cy5wYXJrSWQgPSBwYXJrSWQ7XG4gICAgZGVmYXVsdHMubXVsdGlQYXJrUGFyZW50SUQgPSBtdWx0aVBhcmtQYXJlbnRJRDtcblxuICAgIGN0eC5zZXRTdGF0ZShkZWZhdWx0cyk7XG5cbiAgICBjb25zdCB0aWJhS2V5czogU3RyaW5nTWFwPG51bWJlcj4gPSBPYmplY3Qua2V5cyhzbWFydFBhcmtzKS5yZWR1Y2UoKGtleXMsIGd1aWQsIGluZGV4KSA9PiB7XG4gICAgICBrZXlzW2d1aWRdID0gaW5kZXg7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCB7IGRpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH0gPSB0aGlzLmNvbnZlcnRUb0ZhY2lsaXR5RGljdGlvbmFyeShzbWFydFBhcmtzKTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlczogUGFydGlhbDxGYWNpbGl0eVN0YXRlTW9kZWw+ID0ge1xuICAgICAgdGliYUtleXMsXG4gICAgICBkaWN0aW9uYXJ5LFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfTtcblxuICAgIGlmICghZGljdGlvbmFyeVtndWlkXSB8fCAhZGljdGlvbmFyeVtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlVXBkYXRlcywge1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoc3RhdGVVcGRhdGVzKTtcblxuICAgIC8vdXNlcyBmYWNpbGl0eSBkaWN0aW9uYXJ5IGZyb20gc3RvcmUsIHRoZXJlZm9yZSBwbGFjZWQgYWZ0ZXJcbiAgICBjb25zdCB7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0gPSB0aGlzLmdldFNtYXJ0cGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc21hcnRQYXJrcywgZGljdGlvbmFyeSk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXA6IE51bWJlck1hcDxEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bz4gPSBKU09OLnBhcnNlKFxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTilcbiAgICApID8/IHt9O1xuXG4gICAgY29uc3QgZHBjOiBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zb3VyY2VJZGVudGlmaWVyXTtcbiAgICBpZiAoZHBjKSB7XG4gICAgICBjb25zdCBmYWNpbGl0eTogRmFjaWxpdHlEdG8gPSBudWxsO1xuICAgICAgY29uZmlnLmR1cmF0aW9uID0gNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTO1xuICAgICAgY29uZmlnLm1lc3NhZ2VzID0gdGhpcy5mYWNpbGl0eUNvbW1hbmRzU2VydmljZS5nZXRDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnTWVzc2FnZXMoXG4gICAgICAgIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsXG4gICAgICAgIGZhY2lsaXR5LFxuICAgICAgICBkcGNcbiAgICAgICk7XG5cbiAgICAgIC8vIENsb3NlIGR5bmFtaWMgcHJpY2luZyBub3RpZmljYXRpb25cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvID0gbmV3IE5vdGlmaWNhdGlvbkR0bygpO1xuICAgICAgbm90aWZpY2F0aW9uLnR5cGUgPSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uID0gZHBjO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhub3RpZmljYXRpb24sIGRwYy5ndWlkKSk7XG5cbiAgICAgIGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShcbiAgICAgICAgRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==