| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -898,6 +898,10 @@ export function generateComparisonYaml(comparison: DataComparison): string { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * ``` | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * I recommend using the existing contact import view to migrate contacts. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export async function migrateContacts( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  overwriteExisting: boolean = false, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					): Promise<MigrationResult> { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -976,6 +980,8 @@ export async function migrateContacts( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * Migrates specific settings fields from Dexie to SQLite database | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -991,13 +997,12 @@ export async function migrateContacts( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @async | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @function migrateSettings | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @param {boolean} [overwriteExisting=false] - Whether to overwrite existing settings in SQLite | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @returns {Promise<MigrationResult>} Detailed results of the migration operation | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @throws {Error} If the migration process fails completely | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @example | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * ```typescript
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   const result = await migrateSettings(true); // Overwrite existing
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   const result = await migrateSettings(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   if (result.success) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *     console.log(`Successfully migrated ${result.settingsMigrated} settings`); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   } else { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1008,12 +1013,8 @@ export async function migrateContacts( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * ``` | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  overwriteExisting: boolean = false, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					): Promise<MigrationResult> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  logger.info("[MigrationService] Starting settings migration", { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    overwriteExisting, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export async function migrateSettings(): Promise<MigrationResult> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  logger.info("[MigrationService] Starting settings migration"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  const result: MigrationResult = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    success: true, | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1026,19 +1027,34 @@ export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const dexieSettings = await getDexieSettings(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.info("[MigrationService] Migrating settings", { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      dexieSettings: dexieSettings.length, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const platformService = PlatformServiceFactory.getInstance(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // loop through dexieSettings,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // load the one with the matching accountDid from sqlite,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // and if one doesn't exist then insert it,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // otherwise, update the fields
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    dexieSettings.forEach(async (setting) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const sqliteSettingRaw = await platformService.dbQuery( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Create an array of promises for all settings migrations
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const migrationPromises = dexieSettings.map(async (setting) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      logger.info("[MigrationService] Starting to migrate settings", setting); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      let sqliteSettingRaw: { columns: string[], values: unknown[][] } | undefined; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (!setting.accountDid) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        sqliteSettingRaw = await platformService.dbQuery( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "SELECT * FROM settings WHERE accountDid is null" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        sqliteSettingRaw = await platformService.dbQuery( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "SELECT * FROM settings WHERE accountDid = ?", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          [setting.accountDid] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      logger.info("[MigrationService] Migrating one set of settings:", { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        setting, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        sqliteSettingRaw, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (sqliteSettingRaw?.values?.length) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // should cover the master settings, were accountDid is null
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const sqliteSetting = mapColumnsToValues(sqliteSettingRaw.columns, sqliteSettingRaw.values) as unknown as Settings; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const sqliteSettings = mapColumnsToValues(sqliteSettingRaw.columns, sqliteSettingRaw.values) as unknown as Settings[]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const sqliteSetting = sqliteSettings[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console.log('sqliteSetting', sqliteSetting) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        let conditional: string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        let preparams: unknown[]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (!setting.accountDid) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1054,7 +1070,7 @@ export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          conditional, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          preparams | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        await platformService.dbExec(sql, params); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        await platformService.dbExec(sql, params) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        result.settingsMigrated++; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // insert new setting
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1068,12 +1084,17 @@ export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Wait for all migrations to complete
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const updatedSettings = await Promise.all(migrationPromises); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.info("[MigrationService] Finished migrating settings", updatedSettings, result); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.error("[MigrationService] Complete settings migration failed:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const errorMessage = `Settings migration failed: ${error}`; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.errors.push(errorMessage); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.success = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.error("[MigrationService] Complete settings migration failed:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1083,7 +1104,7 @@ export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * This function transfers all accounts from the Dexie database to the | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * SQLite database. It handles both new accounts (INSERT) and existing | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * accounts (UPDATE) based on the overwriteExisting parameter. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * accounts (UPDATE). | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * For accounts with mnemonic data, the function uses importFromMnemonic | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * to ensure proper key derivation and identity creation during migration. | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1100,7 +1121,7 @@ export async function migrateSettings( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @example | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * ```typescript
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   const result = await migrateAccounts(true); // Overwrite existing
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   const result = await migrateAccounts(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   if (result.success) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *     console.log(`Successfully migrated ${result.accountsMigrated} accounts`); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 *   } else { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1199,12 +1220,9 @@ export async function migrateAccounts(): Promise<MigrationResult> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * The migration runs within a transaction to ensure atomicity. If any step fails, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * the entire migration is rolled back. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @param overwriteExisting - Whether to overwrite existing records in SQLite | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * @returns Promise<MigrationResult> - Detailed result of the migration operation | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export async function migrateAll( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  overwriteExisting: boolean = false, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					): Promise<MigrationResult> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export async function migrateAll(): Promise<MigrationResult> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  const result: MigrationResult = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    success: false, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    contactsMigrated: 0, | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1233,7 +1251,7 @@ export async function migrateAll( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Step 2: Migrate Settings (depends on accounts)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.info("[MigrationService] Step 2: Migrating settings..."); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const settingsResult = await migrateSettings(overwriteExisting); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const settingsResult = await migrateSettings(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (!settingsResult.success) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      result.errors.push( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        `Settings migration failed: ${settingsResult.errors.join(", ")}`, | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -1244,16 +1262,17 @@ export async function migrateAll( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.warnings.push(...settingsResult.warnings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Step 3: Migrate Contacts (independent, but after accounts for consistency)
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    logger.info("[MigrationService] Step 3: Migrating contacts..."); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const contactsResult = await migrateContacts(overwriteExisting); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (!contactsResult.success) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      result.errors.push( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        `Contact migration failed: ${contactsResult.errors.join(", ")}`, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.contactsMigrated = contactsResult.contactsMigrated; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.warnings.push(...contactsResult.warnings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // ... but which is better done through the contact import view
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // logger.info("[MigrationService] Step 3: Migrating contacts...");
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // const contactsResult = await migrateContacts();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // if (!contactsResult.success) {
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //   result.errors.push(
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     `Contact migration failed: ${contactsResult.errors.join(", ")}`,
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //   );
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //   return result;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // }
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // result.contactsMigrated = contactsResult.contactsMigrated;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // result.warnings.push(...contactsResult.warnings);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // All migrations successful
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    result.success = true; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |