From 1d9b7d48c543e390ab2693353f66ff6b809c7eaf Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Sun, 27 Nov 2016 19:51:32 -0700 Subject: [PATCH 01/11] Migrate from Properties to Commons-Configuration - Added loading of properties file before database initialization Signed-off-by: Andrew DeMaria --- libresonic-main/pom.xml | 13 + .../ApacheCommonsConfigurationService.java | 103 +++++++ .../player/service/SettingsService.java | 260 ++++++++---------- .../AdditionalPropertySourceConfigurer.java | 20 ++ .../CommonsConfigurationPropertySource.java | 19 ++ .../src/main/resources/log4j.properties | 4 + .../WEB-INF/applicationContext-service.xml | 3 + .../src/main/webapp/WEB-INF/web.xml | 5 + 8 files changed, 275 insertions(+), 152 deletions(-) create mode 100644 libresonic-main/src/main/java/org/libresonic/player/service/ApacheCommonsConfigurationService.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/CommonsConfigurationPropertySource.java diff --git a/libresonic-main/pom.xml b/libresonic-main/pom.xml index 3f820085..499b9ffc 100644 --- a/libresonic-main/pom.xml +++ b/libresonic-main/pom.xml @@ -353,6 +353,19 @@ + + org.apache.commons + commons-configuration2 + 2.1 + + + commons-beanutils + commons-beanutils + 1.9.2 + + runtime + + diff --git a/libresonic-main/src/main/java/org/libresonic/player/service/ApacheCommonsConfigurationService.java b/libresonic-main/src/main/java/org/libresonic/player/service/ApacheCommonsConfigurationService.java new file mode 100644 index 00000000..dc8e0f6e --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/service/ApacheCommonsConfigurationService.java @@ -0,0 +1,103 @@ +package org.libresonic.player.service; + +import com.google.common.collect.Lists; +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.configuration2.FileBasedConfiguration; +import org.apache.commons.configuration2.ImmutableConfiguration; +import org.apache.commons.configuration2.MapConfiguration; +import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.commons.configuration2.PropertiesConfigurationLayout; +import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; +import org.apache.commons.configuration2.builder.fluent.Parameters; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.commons.configuration2.sync.ReadWriteSynchronizer; +import org.apache.commons.io.FileUtils; +import org.libresonic.player.Logger; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; + +public class ApacheCommonsConfigurationService { + + private static final Logger LOG = Logger.getLogger(ApacheCommonsConfigurationService.class); + + private final FileBasedConfigurationBuilder builder; + + private final Configuration config; + + public static final String HEADER_COMMENT = "Libresonic preferences. NOTE: This file is automatically generated." + + " Do not modify while application is running"; + + public ApacheCommonsConfigurationService() { + File propertyFile = SettingsService.getPropertyFile(); + if(!propertyFile.exists()) { + try { + FileUtils.touch(propertyFile); + } catch (IOException e) { + throw new RuntimeException("Could not create new property file", e); + } + } + Parameters params = new Parameters(); + PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(); + // https://issues.apache.org/jira/browse/CONFIGURATION-644 +// layout.setHeaderComment(HEADER_COMMENT); + layout.setGlobalSeparator("="); + builder = new FileBasedConfigurationBuilder(PropertiesConfiguration.class).configure( + params.properties() + .setFile(propertyFile) + .setSynchronizer(new ReadWriteSynchronizer()) + .setLayout(layout)); + try { + config = builder.getConfiguration(); + } catch (ConfigurationException e) { + throw new RuntimeException("Could not load property file at " + propertyFile, e); + } + } + + public void save() { + try { + builder.save(); + } catch (ConfigurationException e) { + LOG.error("Unable to write to property file.", e); + } + } + + public Object getProperty(String key) { + return config.getProperty(key); + } + + public boolean containsKey(String key) { + return config.containsKey(key); + } + + public void clearProperty(String key) { + config.clearProperty(key); + } + + public String getString(String key, String defaultValue) { + return config.getString(key, defaultValue); + } + + public void setProperty(String key, Object value) { + config.setProperty(key, value); + } + + public long getLong(String key, long defaultValue) { + return config.getLong(key, defaultValue); + } + + public int getInteger(String key, int defaultValue) { + return config.getInteger(key, defaultValue); + } + + public boolean getBoolean(String key, boolean defaultValue) { + return config.getBoolean(key, defaultValue); + } + + public ImmutableConfiguration getImmutableSnapshot() { + MapConfiguration mapConfiguration = new MapConfiguration(new HashMap<>()); + mapConfiguration.copy(config); + return mapConfiguration; + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/service/SettingsService.java b/libresonic-main/src/main/java/org/libresonic/player/service/SettingsService.java index 1f7185b7..25c8e534 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/service/SettingsService.java +++ b/libresonic-main/src/main/java/org/libresonic/player/service/SettingsService.java @@ -19,29 +19,6 @@ */ package org.libresonic.player.service; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Properties; -import java.util.StringTokenizer; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.libresonic.player.Logger; @@ -61,6 +38,12 @@ import org.libresonic.player.util.FileUtil; import org.libresonic.player.util.StringUtil; import org.libresonic.player.util.Util; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.concurrent.*; + /** * Provides persistent storage of application settings and preferences. * @@ -219,13 +202,13 @@ public class SettingsService { private static final Logger LOG = Logger.getLogger(SettingsService.class); - private Properties properties = new Properties(); private List themes; private List locales; private InternetRadioDao internetRadioDao; private MusicFolderDao musicFolderDao; private UserDao userDao; private AvatarDao avatarDao; + private ApacheCommonsConfigurationService configurationService; private VersionService versionService; private String[] cachedCoverArtFileTypesArray; @@ -234,34 +217,33 @@ public class SettingsService { private List cachedMusicFolders; private final ConcurrentMap> cachedMusicFoldersPerUser = new ConcurrentHashMap>(); - private static File libresonicHome; - - private static final long LOCAL_IP_LOOKUP_DELAY_SECONDS = 60; private String localIpAddress; - public SettingsService() { - File propertyFile = getPropertyFile(); + private void removeObseleteProperties() { - if (propertyFile.exists()) { - FileInputStream in = null; - try { - in = new FileInputStream(propertyFile); - properties.load(in); - } catch (Exception x) { - LOG.error("Unable to read from property file.", x); - } finally { - IOUtils.closeQuietly(in); + OBSOLETE_KEYS.forEach( oKey -> { + if(configurationService.containsKey(oKey)) { + LOG.info("Removing obsolete property [" + oKey + ']'); + configurationService.clearProperty(oKey); } + }); - // Remove obsolete properties. - for (Iterator iterator = properties.keySet().iterator(); iterator.hasNext();) { - String key = (String) iterator.next(); - if (OBSOLETE_KEYS.contains(key)) { - LOG.info("Removing obsolete property [" + key + ']'); - iterator.remove(); - } - } + } + + public static synchronized File getLibresonicHome() { + + File home; + + String overrideHome = System.getProperty("libresonic.home"); + if (overrideHome != null) { + home = new File(overrideHome); + } else { + boolean isWindows = System.getProperty("os.name", "Windows").toLowerCase().startsWith("windows"); + home = isWindows ? LIBRESONIC_HOME_WINDOWS : LIBRESONIC_HOME_OTHER; } + ensureDirectoryPresent(home); + + return home; } @@ -284,92 +266,58 @@ public class SettingsService { save(true); } - public void save(boolean updateChangedDate) { - if (updateChangedDate) { - setProperty(KEY_SETTINGS_CHANGED, String.valueOf(System.currentTimeMillis())); - } - - OutputStream out = null; - try { - out = new FileOutputStream(getPropertyFile()); - properties.store(out, "Libresonic preferences. NOTE: This file is automatically generated."); - } catch (Exception x) { - LOG.error("Unable to write to property file.", x); - } finally { - IOUtils.closeQuietly(out); + public void save(boolean updateSettingsChanged) { + if(updateSettingsChanged) { + removeObseleteProperties(); + this.setLong(KEY_SETTINGS_CHANGED, System.currentTimeMillis()); } + configurationService.save(); } - private File getPropertyFile() { - return new File(getLibresonicHome(), "libresonic.properties"); - } - - /** - * Returns the Libresonic home directory. - * - * @return The Libresonic home directory, if it exists. - * @throws RuntimeException If directory doesn't exist. - */ - public static synchronized File getLibresonicHome() { - - if (libresonicHome != null) { - return libresonicHome; - } - - File home; - - String overrideHome = System.getProperty("libresonic.home"); - if (overrideHome != null) { - home = new File(overrideHome); - } else { - boolean isWindows = System.getProperty("os.name", "Windows").toLowerCase().startsWith("windows"); - home = isWindows ? LIBRESONIC_HOME_WINDOWS : LIBRESONIC_HOME_OTHER; - } - + private static void ensureDirectoryPresent(File home) { // Attempt to create home directory if it doesn't exist. if (!home.exists() || !home.isDirectory()) { boolean success = home.mkdirs(); - if (success) { - libresonicHome = home; - } else { + if (!success) { String message = "The directory " + home + " does not exist. Please create it and make it writable. " + "(You can override the directory location by specifying -Dlibresonic.home=... when " + "starting the servlet container.)"; - System.err.println("ERROR: " + message); + throw new RuntimeException(message); } - } else { - libresonicHome = home; } + } - return home; + public static File getPropertyFile() { + File propertyFile = getLibresonicHome(); + return new File(propertyFile, "libresonic.properties"); } private int getInt(String key, int defaultValue) { - return Integer.valueOf(properties.getProperty(key, String.valueOf(defaultValue))); + return configurationService.getInteger(key, defaultValue); } - private void setInt(String key, int value) { - setProperty(key, String.valueOf(value)); + private void setInt(String key, Integer value) { + setProperty(key, value); } private long getLong(String key, long defaultValue) { - return Long.valueOf(properties.getProperty(key, String.valueOf(defaultValue))); + return configurationService.getLong(key, defaultValue); } - private void setLong(String key, long value) { - setProperty(key, String.valueOf(value)); + private void setLong(String key, Long value) { + setProperty(key, value); } private boolean getBoolean(String key, boolean defaultValue) { - return Boolean.valueOf(properties.getProperty(key, String.valueOf(defaultValue))); + return configurationService.getBoolean(key, defaultValue); } - private void setBoolean(String key, boolean value) { - setProperty(key, String.valueOf(value)); + private void setBoolean(String key, Boolean value) { + setProperty(key, value); } private String getString(String key, String defaultValue) { - return properties.getProperty(key, defaultValue); + return getProperty(key, defaultValue); } private void setString(String key, String value) { @@ -377,7 +325,11 @@ public class SettingsService { } public String getIndexString() { - return properties.getProperty(KEY_INDEX_STRING, DEFAULT_INDEX_STRING); + return getProperty(KEY_INDEX_STRING, DEFAULT_INDEX_STRING); + } + + private String getProperty(String key, String defaultValue) { + return configurationService.getString(key, defaultValue); } public void setIndexString(String indexString) { @@ -385,7 +337,7 @@ public class SettingsService { } public String getIgnoredArticles() { - return properties.getProperty(KEY_IGNORED_ARTICLES, DEFAULT_IGNORED_ARTICLES); + return getProperty(KEY_IGNORED_ARTICLES, DEFAULT_IGNORED_ARTICLES); } public String[] getIgnoredArticlesAsArray() { @@ -397,7 +349,7 @@ public class SettingsService { } public String getShortcuts() { - return properties.getProperty(KEY_SHORTCUTS, DEFAULT_SHORTCUTS); + return getProperty(KEY_SHORTCUTS, DEFAULT_SHORTCUTS); } public String[] getShortcutsAsArray() { @@ -409,7 +361,7 @@ public class SettingsService { } public String getPlaylistFolder() { - return properties.getProperty(KEY_PLAYLIST_FOLDER, DEFAULT_PLAYLIST_FOLDER); + return getProperty(KEY_PLAYLIST_FOLDER, DEFAULT_PLAYLIST_FOLDER); } public void setPlaylistFolder(String playlistFolder) { @@ -417,7 +369,7 @@ public class SettingsService { } public String getMusicFileTypes() { - return properties.getProperty(KEY_MUSIC_FILE_TYPES, DEFAULT_MUSIC_FILE_TYPES); + return getProperty(KEY_MUSIC_FILE_TYPES, DEFAULT_MUSIC_FILE_TYPES); } public synchronized void setMusicFileTypes(String fileTypes) { @@ -433,7 +385,7 @@ public class SettingsService { } public String getVideoFileTypes() { - return properties.getProperty(KEY_VIDEO_FILE_TYPES, DEFAULT_VIDEO_FILE_TYPES); + return getProperty(KEY_VIDEO_FILE_TYPES, DEFAULT_VIDEO_FILE_TYPES); } public synchronized void setVideoFileTypes(String fileTypes) { @@ -449,7 +401,7 @@ public class SettingsService { } public String getCoverArtFileTypes() { - return properties.getProperty(KEY_COVER_ART_FILE_TYPES, DEFAULT_COVER_ART_FILE_TYPES); + return getProperty(KEY_COVER_ART_FILE_TYPES, DEFAULT_COVER_ART_FILE_TYPES); } public synchronized void setCoverArtFileTypes(String fileTypes) { @@ -469,7 +421,7 @@ public class SettingsService { } public String getWelcomeTitle() { - return StringUtils.trimToNull(properties.getProperty(KEY_WELCOME_TITLE, DEFAULT_WELCOME_TITLE)); + return StringUtils.trimToNull(getProperty(KEY_WELCOME_TITLE, DEFAULT_WELCOME_TITLE)); } public void setWelcomeTitle(String title) { @@ -477,7 +429,7 @@ public class SettingsService { } public String getWelcomeSubtitle() { - return StringUtils.trimToNull(properties.getProperty(KEY_WELCOME_SUBTITLE, DEFAULT_WELCOME_SUBTITLE)); + return StringUtils.trimToNull(getProperty(KEY_WELCOME_SUBTITLE, DEFAULT_WELCOME_SUBTITLE)); } public void setWelcomeSubtitle(String subtitle) { @@ -485,7 +437,7 @@ public class SettingsService { } public String getWelcomeMessage() { - return StringUtils.trimToNull(properties.getProperty(KEY_WELCOME_MESSAGE, DEFAULT_WELCOME_MESSAGE)); + return StringUtils.trimToNull(getProperty(KEY_WELCOME_MESSAGE, DEFAULT_WELCOME_MESSAGE)); } public void setWelcomeMessage(String message) { @@ -493,7 +445,7 @@ public class SettingsService { } public String getLoginMessage() { - return StringUtils.trimToNull(properties.getProperty(KEY_LOGIN_MESSAGE, DEFAULT_LOGIN_MESSAGE)); + return StringUtils.trimToNull(getProperty(KEY_LOGIN_MESSAGE, DEFAULT_LOGIN_MESSAGE)); } public void setLoginMessage(String message) { @@ -586,7 +538,7 @@ public class SettingsService { * Returns the Podcast download folder. */ public String getPodcastFolder() { - return properties.getProperty(KEY_PODCAST_FOLDER, DEFAULT_PODCAST_FOLDER); + return getProperty(KEY_PODCAST_FOLDER, DEFAULT_PODCAST_FOLDER); } /** @@ -600,7 +552,7 @@ public class SettingsService { * @return The download bitrate limit in Kbit/s. Zero if unlimited. */ public long getDownloadBitrateLimit() { - return Long.parseLong(properties.getProperty(KEY_DOWNLOAD_BITRATE_LIMIT, "" + DEFAULT_DOWNLOAD_BITRATE_LIMIT)); + return Long.parseLong(getProperty(KEY_DOWNLOAD_BITRATE_LIMIT, "" + DEFAULT_DOWNLOAD_BITRATE_LIMIT)); } /** @@ -625,7 +577,7 @@ public class SettingsService { } public String getDownsamplingCommand() { - return properties.getProperty(KEY_DOWNSAMPLING_COMMAND, DEFAULT_DOWNSAMPLING_COMMAND); + return getProperty(KEY_DOWNSAMPLING_COMMAND, DEFAULT_DOWNSAMPLING_COMMAND); } public void setDownsamplingCommand(String command) { @@ -633,7 +585,7 @@ public class SettingsService { } public String getHlsCommand() { - return properties.getProperty(KEY_HLS_COMMAND, DEFAULT_HLS_COMMAND); + return getProperty(KEY_HLS_COMMAND, DEFAULT_HLS_COMMAND); } public void setHlsCommand(String command) { @@ -641,10 +593,10 @@ public class SettingsService { } public String getJukeboxCommand() { - return properties.getProperty(KEY_JUKEBOX_COMMAND, DEFAULT_JUKEBOX_COMMAND); + return getProperty(KEY_JUKEBOX_COMMAND, DEFAULT_JUKEBOX_COMMAND); } public String getVideoImageCommand() { - return properties.getProperty(KEY_VIDEO_IMAGE_COMMAND, DEFAULT_VIDEO_IMAGE_COMMAND); + return getProperty(KEY_VIDEO_IMAGE_COMMAND, DEFAULT_VIDEO_IMAGE_COMMAND); } public boolean isRewriteUrlEnabled() { @@ -664,31 +616,31 @@ public class SettingsService { } public String getLdapUrl() { - return properties.getProperty(KEY_LDAP_URL, DEFAULT_LDAP_URL); + return getProperty(KEY_LDAP_URL, DEFAULT_LDAP_URL); } public void setLdapUrl(String ldapUrl) { - properties.setProperty(KEY_LDAP_URL, ldapUrl); + setProperty(KEY_LDAP_URL, ldapUrl); } public String getLdapSearchFilter() { - return properties.getProperty(KEY_LDAP_SEARCH_FILTER, DEFAULT_LDAP_SEARCH_FILTER); + return getProperty(KEY_LDAP_SEARCH_FILTER, DEFAULT_LDAP_SEARCH_FILTER); } public void setLdapSearchFilter(String ldapSearchFilter) { - properties.setProperty(KEY_LDAP_SEARCH_FILTER, ldapSearchFilter); + setProperty(KEY_LDAP_SEARCH_FILTER, ldapSearchFilter); } public String getLdapManagerDn() { - return properties.getProperty(KEY_LDAP_MANAGER_DN, DEFAULT_LDAP_MANAGER_DN); + return getProperty(KEY_LDAP_MANAGER_DN, DEFAULT_LDAP_MANAGER_DN); } public void setLdapManagerDn(String ldapManagerDn) { - properties.setProperty(KEY_LDAP_MANAGER_DN, ldapManagerDn); + setProperty(KEY_LDAP_MANAGER_DN, ldapManagerDn); } public String getLdapManagerPassword() { - String s = properties.getProperty(KEY_LDAP_MANAGER_PASSWORD, DEFAULT_LDAP_MANAGER_PASSWORD); + String s = getProperty(KEY_LDAP_MANAGER_PASSWORD, DEFAULT_LDAP_MANAGER_PASSWORD); try { return StringUtil.utf8HexDecode(s); } catch (Exception x) { @@ -703,7 +655,7 @@ public class SettingsService { } catch (Exception x) { LOG.warn("Failed to encode LDAP manager password.", x); } - properties.setProperty(KEY_LDAP_MANAGER_PASSWORD, ldapManagerPassword); + setProperty(KEY_LDAP_MANAGER_PASSWORD, ldapManagerPassword); } public boolean isLdapAutoShadowing() { @@ -762,43 +714,43 @@ public class SettingsService { } public String getUrlRedirectFrom() { - return properties.getProperty(KEY_URL_REDIRECT_FROM, DEFAULT_URL_REDIRECT_FROM); + return getProperty(KEY_URL_REDIRECT_FROM, DEFAULT_URL_REDIRECT_FROM); } public void setUrlRedirectFrom(String urlRedirectFrom) { - properties.setProperty(KEY_URL_REDIRECT_FROM, urlRedirectFrom); + setProperty(KEY_URL_REDIRECT_FROM, urlRedirectFrom); } public UrlRedirectType getUrlRedirectType() { - return UrlRedirectType.valueOf(properties.getProperty(KEY_URL_REDIRECT_TYPE, DEFAULT_URL_REDIRECT_TYPE.name())); + return UrlRedirectType.valueOf(getProperty(KEY_URL_REDIRECT_TYPE, DEFAULT_URL_REDIRECT_TYPE.name())); } public void setUrlRedirectType(UrlRedirectType urlRedirectType) { - properties.setProperty(KEY_URL_REDIRECT_TYPE, urlRedirectType.name()); + setProperty(KEY_URL_REDIRECT_TYPE, urlRedirectType.name()); } public String getUrlRedirectContextPath() { - return properties.getProperty(KEY_URL_REDIRECT_CONTEXT_PATH, DEFAULT_URL_REDIRECT_CONTEXT_PATH); + return getProperty(KEY_URL_REDIRECT_CONTEXT_PATH, DEFAULT_URL_REDIRECT_CONTEXT_PATH); } public void setUrlRedirectContextPath(String contextPath) { - properties.setProperty(KEY_URL_REDIRECT_CONTEXT_PATH, contextPath); + setProperty(KEY_URL_REDIRECT_CONTEXT_PATH, contextPath); } public String getUrlRedirectCustomUrl() { - return StringUtils.trimToNull(properties.getProperty(KEY_URL_REDIRECT_CUSTOM_URL, DEFAULT_URL_REDIRECT_CUSTOM_URL)); + return StringUtils.trimToNull(getProperty(KEY_URL_REDIRECT_CUSTOM_URL, DEFAULT_URL_REDIRECT_CUSTOM_URL)); } public void setUrlRedirectCustomUrl(String customUrl) { - properties.setProperty(KEY_URL_REDIRECT_CUSTOM_URL, customUrl); + setProperty(KEY_URL_REDIRECT_CUSTOM_URL, customUrl); } public String getServerId() { - return properties.getProperty(KEY_SERVER_ID, DEFAULT_SERVER_ID); + return getProperty(KEY_SERVER_ID, DEFAULT_SERVER_ID); } public void setServerId(String serverId) { - properties.setProperty(KEY_SERVER_ID, serverId); + setProperty(KEY_SERVER_ID, serverId); } public long getSettingsChanged() { @@ -806,13 +758,13 @@ public class SettingsService { } public Date getLastScanned() { - String lastScanned = properties.getProperty(KEY_LAST_SCANNED); + String lastScanned = getProperty(KEY_LAST_SCANNED, null); return lastScanned == null ? null : new Date(Long.parseLong(lastScanned)); } public void setLastScanned(Date date) { if (date == null) { - properties.remove(KEY_LAST_SCANNED); + setProperty(KEY_LAST_SCANNED, null); } else { setLong(KEY_LAST_SCANNED, date.getTime()); } @@ -848,9 +800,9 @@ public class SettingsService { * @return The locale. */ public Locale getLocale() { - String language = properties.getProperty(KEY_LOCALE_LANGUAGE, DEFAULT_LOCALE_LANGUAGE); - String country = properties.getProperty(KEY_LOCALE_COUNTRY, DEFAULT_LOCALE_COUNTRY); - String variant = properties.getProperty(KEY_LOCALE_VARIANT, DEFAULT_LOCALE_VARIANT); + String language = getProperty(KEY_LOCALE_LANGUAGE, DEFAULT_LOCALE_LANGUAGE); + String country = getProperty(KEY_LOCALE_COUNTRY, DEFAULT_LOCALE_COUNTRY); + String variant = getProperty(KEY_LOCALE_VARIANT, DEFAULT_LOCALE_VARIANT); return new Locale(language, country, variant); } @@ -872,7 +824,7 @@ public class SettingsService { * @return The theme ID. */ public String getThemeId() { - return properties.getProperty(KEY_THEME_ID, DEFAULT_THEME_ID); + return getProperty(KEY_THEME_ID, DEFAULT_THEME_ID); } /** @@ -1309,11 +1261,11 @@ public class SettingsService { getPort()); } - private void setProperty(String key, String value) { + private void setProperty(String key, Object value) { if (value == null) { - properties.remove(key); + configurationService.clearProperty(key); } else { - properties.setProperty(key, value); + configurationService.setProperty(key, value); } } @@ -1356,7 +1308,7 @@ public class SettingsService { } public String getSmtpServer() { - return properties.getProperty(KEY_SMTP_SERVER, DEFAULT_SMTP_SERVER); + return getProperty(KEY_SMTP_SERVER, DEFAULT_SMTP_SERVER); } public void setSmtpServer(String smtpServer) { @@ -1372,7 +1324,7 @@ public class SettingsService { } public String getSmtpEncryption() { - return properties.getProperty(KEY_SMTP_ENCRYPTION, DEFAULT_SMTP_ENCRYPTION); + return getProperty(KEY_SMTP_ENCRYPTION, DEFAULT_SMTP_ENCRYPTION); } public void setSmtpEncryption(String encryptionMethod) { @@ -1380,7 +1332,7 @@ public class SettingsService { } public String getSmtpUser() { - return properties.getProperty(KEY_SMTP_USER, DEFAULT_SMTP_USER); + return getProperty(KEY_SMTP_USER, DEFAULT_SMTP_USER); } public void setSmtpUser(String smtpUser) { @@ -1388,7 +1340,7 @@ public class SettingsService { } public String getSmtpPassword() { - String s = properties.getProperty(KEY_SMTP_PASSWORD, DEFAULT_SMTP_PASSWORD); + String s = getProperty(KEY_SMTP_PASSWORD, DEFAULT_SMTP_PASSWORD); try { return StringUtil.utf8HexDecode(s); } catch (Exception x) { @@ -1402,14 +1354,18 @@ public class SettingsService { } catch (Exception x) { LOG.warn("Failed to encode Smtp password.", x); } - properties.setProperty(KEY_SMTP_PASSWORD, smtpPassword); + setProperty(KEY_SMTP_PASSWORD, smtpPassword); } public String getSmtpFrom() { - return properties.getProperty(KEY_SMTP_FROM, DEFAULT_SMTP_FROM); + return getProperty(KEY_SMTP_FROM, DEFAULT_SMTP_FROM); } public void setSmtpFrom(String smtpFrom) { setString(KEY_SMTP_FROM, smtpFrom); } + + public void setConfigurationService(ApacheCommonsConfigurationService configurationService) { + this.configurationService = configurationService; + } } diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java b/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java new file mode 100644 index 00000000..cb7ff9a6 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java @@ -0,0 +1,20 @@ +package org.libresonic.player.spring; + +import org.apache.commons.configuration2.ImmutableConfiguration; +import org.libresonic.player.service.ApacheCommonsConfigurationService; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.core.env.PropertySource; +import org.springframework.web.context.ConfigurableWebApplicationContext; + +public class AdditionalPropertySourceConfigurer implements + ApplicationContextInitializer { + + public void initialize(ConfigurableWebApplicationContext ctx) { + + ApacheCommonsConfigurationService configurationService = new ApacheCommonsConfigurationService(); + ImmutableConfiguration snapshot = configurationService.getImmutableSnapshot(); + + PropertySource ps = new CommonsConfigurationPropertySource("libresonic-pre-init-configs", snapshot); + ctx.getEnvironment().getPropertySources().addLast(ps); + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/CommonsConfigurationPropertySource.java b/libresonic-main/src/main/java/org/libresonic/player/spring/CommonsConfigurationPropertySource.java new file mode 100644 index 00000000..3e9b02a0 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/CommonsConfigurationPropertySource.java @@ -0,0 +1,19 @@ +package org.libresonic.player.spring; + +import org.apache.commons.configuration2.ImmutableConfiguration; +import org.springframework.core.env.PropertySource; + +public class CommonsConfigurationPropertySource extends PropertySource { + + private final ImmutableConfiguration configuration; + + public CommonsConfigurationPropertySource(String name, ImmutableConfiguration configuration) { + super(name); + this.configuration = configuration; + } + + @Override + public Object getProperty(String s) { + return configuration.getProperty(s); + } +} diff --git a/libresonic-main/src/main/resources/log4j.properties b/libresonic-main/src/main/resources/log4j.properties index 4908ba27..a8078146 100644 --- a/libresonic-main/src/main/resources/log4j.properties +++ b/libresonic-main/src/main/resources/log4j.properties @@ -7,3 +7,7 @@ log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%d{ISO8601}] %-5p %c - %m%n + +# TODO remove this once https://issues.apache.org/jira/browse/CONFIGURATION-627 is fixed +log4j.logger.org.apache.commons.beanutils.FluentPropertyBeanIntrospector=ERROR, A1 +log4j.additivity.org.apache.commons.beanutils.FluentPropertyBeanIntrospector=false diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml index 45e6f641..7eb2a74d 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml @@ -86,12 +86,15 @@ + + + diff --git a/libresonic-main/src/main/webapp/WEB-INF/web.xml b/libresonic-main/src/main/webapp/WEB-INF/web.xml index 5bd36336..5f820afe 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/web.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/web.xml @@ -16,6 +16,11 @@ + + contextInitializerClasses + org.libresonic.player.spring.AdditionalPropertySourceConfigurer + + org.springframework.web.context.ContextLoaderListener From 4b34bc0139111974f0106c7494e570059742ea85 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Wed, 30 Nov 2016 15:16:04 -0700 Subject: [PATCH 02/11] Convert to liquibase from handrolled migration tool Signed-off-by: Andrew DeMaria --- libresonic-main/pom.xml | 13 + .../player/dao/DaoHelperFactory.java | 31 - .../player/dao/GenericDaoHelper.java | 28 + .../libresonic/player/dao/HsqlDaoHelper.java | 133 --- .../org/libresonic/player/dao/PlayerDao.java | 2 +- .../org/libresonic/player/dao/UserDao.java | 22 +- .../libresonic/player/dao/schema/Schema.java | 77 -- .../player/dao/schema/hsql/Schema25.java | 88 -- .../player/dao/schema/hsql/Schema26.java | 112 --- .../player/dao/schema/hsql/Schema27.java | 57 -- .../player/dao/schema/hsql/Schema28.java | 113 --- .../player/dao/schema/hsql/Schema29.java | 58 -- .../player/dao/schema/hsql/Schema30.java | 58 -- .../player/dao/schema/hsql/Schema31.java | 55 - .../player/dao/schema/hsql/Schema32.java | 96 -- .../player/dao/schema/hsql/Schema33.java | 50 - .../player/dao/schema/hsql/Schema34.java | 56 -- .../player/dao/schema/hsql/Schema35.java | 154 --- .../player/dao/schema/hsql/Schema36.java | 51 - .../player/dao/schema/hsql/Schema37.java | 80 -- .../player/dao/schema/hsql/Schema38.java | 57 -- .../player/dao/schema/hsql/Schema40.java | 49 - .../player/dao/schema/hsql/Schema43.java | 67 -- .../player/dao/schema/hsql/Schema45.java | 79 -- .../player/dao/schema/hsql/Schema46.java | 89 -- .../player/dao/schema/hsql/Schema47.java | 263 ----- .../player/dao/schema/hsql/Schema49.java | 72 -- .../player/dao/schema/hsql/Schema50.java | 66 -- .../player/dao/schema/hsql/Schema51.java | 62 -- .../player/dao/schema/hsql/Schema52.java | 87 -- .../player/dao/schema/hsql/Schema53.java | 83 -- .../player/dao/schema/hsql/Schema61.java | 54 - .../player/dao/schema/hsql/Schema62.java | 48 - .../AdditionalPropertySourceConfigurer.java | 4 +- .../player/spring/DataSourceConfigType.java | 7 + ...asourceProfileActivatorPropertySource.java | 40 + .../player/spring/HsqlDatabase.java | 19 + .../player/spring/SpringLiquibase.java | 74 ++ .../main/resources/liquibase/db-changelog.xml | 11 + .../liquibase/legacy/legacy-changelog.xml | 31 + .../resources/liquibase/legacy/schema25.xml | 131 +++ .../resources/liquibase/legacy/schema26.xml | 163 +++ .../resources/liquibase/legacy/schema27.xml | 37 + .../resources/liquibase/legacy/schema28.xml | 232 +++++ .../resources/liquibase/legacy/schema29.xml | 44 + .../resources/liquibase/legacy/schema30.xml | 44 + .../resources/liquibase/legacy/schema31.xml | 42 + .../resources/liquibase/legacy/schema32.xml | 120 +++ .../resources/liquibase/legacy/schema33.xml | 30 + .../resources/liquibase/legacy/schema34.xml | 42 + .../resources/liquibase/legacy/schema35.xml | 945 ++++++++++++++++++ .../resources/liquibase/legacy/schema36.xml | 30 + .../resources/liquibase/legacy/schema37.xml | 81 ++ .../resources/liquibase/legacy/schema38.xml | 40 + .../resources/liquibase/legacy/schema40.xml | 22 + .../resources/liquibase/legacy/schema43.xml | 130 +++ .../resources/liquibase/legacy/schema45.xml | 84 ++ .../resources/liquibase/legacy/schema46.xml | 94 ++ .../resources/liquibase/legacy/schema47.xml | 450 +++++++++ .../resources/liquibase/legacy/schema49.xml | 65 ++ .../resources/liquibase/legacy/schema50.xml | 64 ++ .../resources/liquibase/legacy/schema51.xml | 54 + .../resources/liquibase/legacy/schema52.xml | 96 ++ .../resources/liquibase/legacy/schema53.xml | 84 ++ .../resources/liquibase/legacy/schema61.xml | 42 + .../resources/liquibase/legacy/schema62.xml | 30 + .../WEB-INF/applicationContext-db-embed.xml | 17 + .../WEB-INF/applicationContext-db-jndi.xml | 12 + .../WEB-INF/applicationContext-db-legacy.xml | 18 + .../webapp/WEB-INF/applicationContext-db.xml | 44 + .../WEB-INF/applicationContext-service.xml | 11 +- .../player/dao/DaoTestCaseBase.java | 43 +- .../service/SettingsServiceTestCase.java | 10 +- .../applicationContext-service.xml | 46 +- 74 files changed, 3630 insertions(+), 2363 deletions(-) delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelperFactory.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/HsqlDaoHelper.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/Schema.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema25.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema26.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema27.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema28.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema29.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema30.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema31.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema32.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema33.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema34.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema35.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema36.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema37.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema38.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema40.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema43.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema45.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema46.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema47.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema49.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema50.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema51.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema52.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema53.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema61.java delete mode 100644 libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema62.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/DataSourceConfigType.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/DatasourceProfileActivatorPropertySource.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/HsqlDatabase.java create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java create mode 100644 libresonic-main/src/main/resources/liquibase/db-changelog.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/legacy-changelog.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema25.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema26.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema27.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema28.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema29.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema30.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema31.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema32.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema33.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema34.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema35.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema36.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema37.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema38.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema40.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema43.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema45.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema46.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema47.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema49.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema50.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema51.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema52.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema53.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema61.xml create mode 100644 libresonic-main/src/main/resources/liquibase/legacy/schema62.xml create mode 100644 libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-embed.xml create mode 100644 libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-jndi.xml create mode 100644 libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-legacy.xml create mode 100644 libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml diff --git a/libresonic-main/pom.xml b/libresonic-main/pom.xml index 499b9ffc..9232f483 100644 --- a/libresonic-main/pom.xml +++ b/libresonic-main/pom.xml @@ -125,6 +125,12 @@ 2.1 + + org.apache.commons + commons-lang3 + 3.3.2 + + com.google.guava guava @@ -366,6 +372,13 @@ runtime + + org.liquibase + liquibase-core + + 3.5.1 + + diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelperFactory.java b/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelperFactory.java deleted file mode 100644 index e3287d37..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelperFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - * - * Copyright 2015 (C) Sindre Mehus - */ - -package org.libresonic.player.dao; - -/** - * @author Sindre Mehus - * @version $Id$ - */ -public class DaoHelperFactory { - - public static DaoHelper create() { - return new HsqlDaoHelper(); - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java b/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java new file mode 100644 index 00000000..d4007f80 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java @@ -0,0 +1,28 @@ +package org.libresonic.player.dao; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +public class GenericDaoHelper implements DaoHelper { + + JdbcTemplate jdbcTemplate; + + NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + public GenericDaoHelper( + JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate + ) { + this.jdbcTemplate = jdbcTemplate; + this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; + } + + @Override + public JdbcTemplate getJdbcTemplate() { + return jdbcTemplate; + } + + @Override + public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() { + return namedParameterJdbcTemplate; + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/HsqlDaoHelper.java b/libresonic-main/src/main/java/org/libresonic/player/dao/HsqlDaoHelper.java deleted file mode 100644 index 43880551..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/HsqlDaoHelper.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - * - * Copyright 2015 (C) Sindre Mehus - */ -package org.libresonic.player.dao; - -import java.io.File; - -import javax.sql.DataSource; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import org.springframework.jdbc.datasource.DriverManagerDataSource; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; -import org.libresonic.player.dao.schema.hsql.Schema25; -import org.libresonic.player.dao.schema.hsql.Schema26; -import org.libresonic.player.dao.schema.hsql.Schema27; -import org.libresonic.player.dao.schema.hsql.Schema28; -import org.libresonic.player.dao.schema.hsql.Schema29; -import org.libresonic.player.dao.schema.hsql.Schema30; -import org.libresonic.player.dao.schema.hsql.Schema31; -import org.libresonic.player.dao.schema.hsql.Schema32; -import org.libresonic.player.dao.schema.hsql.Schema33; -import org.libresonic.player.dao.schema.hsql.Schema34; -import org.libresonic.player.dao.schema.hsql.Schema35; -import org.libresonic.player.dao.schema.hsql.Schema36; -import org.libresonic.player.dao.schema.hsql.Schema37; -import org.libresonic.player.dao.schema.hsql.Schema38; -import org.libresonic.player.dao.schema.hsql.Schema40; -import org.libresonic.player.dao.schema.hsql.Schema43; -import org.libresonic.player.dao.schema.hsql.Schema45; -import org.libresonic.player.dao.schema.hsql.Schema46; -import org.libresonic.player.dao.schema.hsql.Schema47; -import org.libresonic.player.dao.schema.hsql.Schema49; -import org.libresonic.player.dao.schema.hsql.Schema50; -import org.libresonic.player.dao.schema.hsql.Schema51; -import org.libresonic.player.dao.schema.hsql.Schema52; -import org.libresonic.player.dao.schema.hsql.Schema53; -import org.libresonic.player.dao.schema.hsql.Schema61; -import org.libresonic.player.dao.schema.hsql.Schema62; -import org.libresonic.player.service.SettingsService; - -/** - * DAO helper class which creates the data source, and updates the database schema. - * - * @author Sindre Mehus - */ -public class HsqlDaoHelper implements DaoHelper { - - private static final Logger LOG = Logger.getLogger(HsqlDaoHelper.class); - - private Schema[] schemas = {new Schema25(), new Schema26(), new Schema27(), new Schema28(), new Schema29(), - new Schema30(), new Schema31(), new Schema32(), new Schema33(), new Schema34(), - new Schema35(), new Schema36(), new Schema37(), new Schema38(), new Schema40(), - new Schema43(), new Schema45(), new Schema46(), new Schema47(), new Schema49(), - new Schema50(), new Schema51(), new Schema52(), new Schema53(), new Schema61(), - new Schema62()}; - private DataSource dataSource; - private static boolean shutdownHookAdded; - - public HsqlDaoHelper() { - dataSource = createDataSource(); - checkDatabase(); - addShutdownHook(); - } - - private void addShutdownHook() { - if (shutdownHookAdded) { - return; - } - shutdownHookAdded = true; - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - System.err.println("Shutting down database..."); - getJdbcTemplate().execute("shutdown"); - System.err.println("Shutting down database - Done!"); - } - }); - } - - /** - * Returns a JDBC template for performing database operations. - * - * @return A JDBC template. - */ - public JdbcTemplate getJdbcTemplate() { - return new JdbcTemplate(dataSource); - } - - public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() { - return new NamedParameterJdbcTemplate(dataSource); - } - - private DataSource createDataSource() { - File libresonicHome = SettingsService.getLibresonicHome(); - DriverManagerDataSource ds = new DriverManagerDataSource(); - ds.setDriverClassName("org.hsqldb.jdbcDriver"); - ds.setUrl("jdbc:hsqldb:file:" + libresonicHome.getPath() + "/db/libresonic"); - ds.setUsername("sa"); - ds.setPassword(""); - - return ds; - } - - private void checkDatabase() { - LOG.info("Checking database schema."); - try { - for (Schema schema : schemas) { - schema.execute(getJdbcTemplate()); - } - LOG.info("Done checking database schema."); - } catch (Exception x) { - LOG.error("Failed to initialize database.", x); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java index 37d9f6a4..4dc8dc2a 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java @@ -153,7 +153,7 @@ public class PlayerDao extends AbstractDao { update(sql, player.getName(), player.getType(), player.getUsername(), player.getIpAddress(), player.isAutoControlEnabled(), player.isM3uBomEnabled(), player.getLastSeen(), player.getTranscodeScheme().name(), player.isDynamicIp(), - player.getTechnology(), player.getClientId(), player.getId()); + player.getTechnology().name(), player.getClientId(), player.getId()); } private void addPlaylist(Player player) { diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/UserDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/UserDao.java index b8aa5e45..f9b05984 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/UserDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/UserDao.java @@ -61,6 +61,8 @@ public class UserDao extends AbstractDao { private UserRowMapper userRowMapper = new UserRowMapper(); private UserSettingsRowMapper userSettingsRowMapper = new UserSettingsRowMapper(); + String userTableQuote = ""; + /** * Returns the user with the given username. * @@ -68,7 +70,7 @@ public class UserDao extends AbstractDao { * @return The user, or null if not found. */ public User getUserByName(String username) { - String sql = "select " + USER_COLUMNS + " from user where username=?"; + String sql = "select " + USER_COLUMNS + " from " + getUserTable() + " where username=?"; return queryOne(sql, userRowMapper, username); } @@ -79,7 +81,7 @@ public class UserDao extends AbstractDao { * @return The user, or null if not found. */ public User getUserByEmail(String email) { - String sql = "select " + USER_COLUMNS + " from user where email=?"; + String sql = "select " + USER_COLUMNS + " from " + getUserTable() + " where email=?"; return queryOne(sql, userRowMapper, email); } @@ -89,7 +91,7 @@ public class UserDao extends AbstractDao { * @return Possibly empty array of all users. */ public List getAllUsers() { - String sql = "select " + USER_COLUMNS + " from user"; + String sql = "select " + USER_COLUMNS + " from " + getUserTable(); return query(sql, userRowMapper); } @@ -99,7 +101,7 @@ public class UserDao extends AbstractDao { * @param user The user to create. */ public void createUser(User user) { - String sql = "insert into user (" + USER_COLUMNS + ") values (" + questionMarks(USER_COLUMNS) + ')'; + String sql = "insert into " + getUserTable() + " (" + USER_COLUMNS + ") values (" + questionMarks(USER_COLUMNS) + ')'; update(sql, user.getUsername(), encrypt(user.getPassword()), user.getEmail(), user.isLdapAuthenticated(), user.getBytesStreamed(), user.getBytesDownloaded(), user.getBytesUploaded()); writeRoles(user); @@ -117,7 +119,7 @@ public class UserDao extends AbstractDao { update("delete from user_role where username=?", username); update("delete from player where username=?", username); - update("delete from user where username=?", username); + update("delete from " + getUserTable() + " where username=?", username); } /** @@ -126,7 +128,7 @@ public class UserDao extends AbstractDao { * @param user The user to update. */ public void updateUser(User user) { - String sql = "update user set password=?, email=?, ldap_authenticated=?, bytes_streamed=?, bytes_downloaded=?, bytes_uploaded=? " + + String sql = "update " + getUserTable() + " set password=?, email=?, ldap_authenticated=?, bytes_streamed=?, bytes_downloaded=?, bytes_uploaded=? " + "where username=?"; getJdbcTemplate().update(sql, new Object[]{encrypt(user.getPassword()), user.getEmail(), user.isLdapAuthenticated(), user.getBytesStreamed(), user.getBytesDownloaded(), user.getBytesUploaded(), @@ -355,4 +357,12 @@ public class UserDao extends AbstractDao { return settings; } } + + private String getUserTable() { + return userTableQuote + "user" + userTableQuote; + } + + public void setUserTableQuote(String userTableQuote) { + this.userTableQuote = userTableQuote; + } } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/Schema.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/Schema.java deleted file mode 100644 index 13872a82..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/Schema.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema; - -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * - * @author Sindre Mehus - */ -public abstract class Schema { - - /** - * Executes this schema. - * @param template The JDBC template to use. - */ - public abstract void execute(JdbcTemplate template); - - /** - * Returns whether the given table exists. - * @param template The JDBC template to use. - * @param table The table in question. - * @return Whether the table exists. - */ - protected boolean tableExists(JdbcTemplate template, String table) { - try { - template.execute("select 1 from " + table); - } catch (Exception x) { - return false; - } - return true; - } - - /** - * Returns whether the given column in the given table exists. - * @param template The JDBC template to use. - * @param column The column in question. - * @param table The table in question. - * @return Whether the column exists. - */ - protected boolean columnExists(JdbcTemplate template, String column, String table) { - try { - template.execute("select " + column + " from " + table + " where 1 = 0"); - } catch (Exception x) { - return false; - } - return true; - } - - - protected boolean rowExists(JdbcTemplate template, String whereClause, String table) { - try { - int rowCount = template.queryForObject("select count(*) from " + table + " where " + whereClause,Integer.class); - return rowCount > 0; - } catch (Exception x) { - return false; - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema25.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema25.java deleted file mode 100644 index 14dc996d..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema25.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 2.5. - * - * @author Sindre Mehus - */ -public class Schema25 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema25.class); - - public void execute(JdbcTemplate template) { - if (!tableExists(template, "version")) { - - // Increase data file limit. See http://www.hsqldb.org/doc/guide/ch04.html - template.execute("set property \"hsqldb.cache_file_scale\" 8"); - - LOG.info("Database table 'version' not found. Creating it."); - template.execute("create table version (version int not null)"); - template.execute("insert into version values (1)"); - LOG.info("Database table 'version' was created successfully."); - } - - if (!tableExists(template, "role")) { - LOG.info("Database table 'role' not found. Creating it."); - template.execute("create table role (" + - "id int not null," + - "name varchar not null," + - "primary key (id))"); - template.execute("insert into role values (1, 'admin')"); - template.execute("insert into role values (2, 'download')"); - template.execute("insert into role values (3, 'upload')"); - template.execute("insert into role values (4, 'playlist')"); - template.execute("insert into role values (5, 'coverart')"); - LOG.info("Database table 'role' was created successfully."); - } - - if (!tableExists(template, "user")) { - LOG.info("Database table 'user' not found. Creating it."); - template.execute("create table user (" + - "username varchar not null," + - "password varchar not null," + - "primary key (username))"); - template.execute("insert into user values ('admin', 'admin')"); - LOG.info("Database table 'user' was created successfully."); - } - - if (!tableExists(template, "user_role")) { - LOG.info("Database table 'user_role' not found. Creating it."); - template.execute("create table user_role (" + - "username varchar not null," + - "role_id int not null," + - "primary key (username, role_id)," + - "foreign key (username) references user(username)," + - "foreign key (role_id) references role(id))"); - template.execute("insert into user_role values ('admin', 1)"); - template.execute("insert into user_role values ('admin', 2)"); - template.execute("insert into user_role values ('admin', 3)"); - template.execute("insert into user_role values ('admin', 4)"); - template.execute("insert into user_role values ('admin', 5)"); - LOG.info("Database table 'user_role' was created successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema26.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema26.java deleted file mode 100644 index 05413aaf..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema26.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.*; -import org.libresonic.player.dao.schema.Schema; -import org.libresonic.player.util.Util; -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 2.6. - * - * @author Sindre Mehus - */ -public class Schema26 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema26.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 2",Integer.class) == 0) { - LOG.info("Updating database schema to version 2."); - template.execute("insert into version values (2)"); - } - - if (!tableExists(template, "music_folder")) { - LOG.info("Database table 'music_folder' not found. Creating it."); - template.execute("create table music_folder (" + - "id identity," + - "path varchar not null," + - "name varchar not null," + - "enabled boolean not null)"); - template.execute("insert into music_folder values (null, '" + Util.getDefaultMusicFolder() + "', 'Music', true)"); - LOG.info("Database table 'music_folder' was created successfully."); - } - - if (!tableExists(template, "music_file_info")) { - LOG.info("Database table 'music_file_info' not found. Creating it."); - template.execute("create cached table music_file_info (" + - "id identity," + - "path varchar not null," + - "rating int," + - "comment varchar," + - "play_count int," + - "last_played datetime)"); - template.execute("create index idx_music_file_info_path on music_file_info(path)"); - LOG.info("Database table 'music_file_info' was created successfully."); - } - - if (!tableExists(template, "internet_radio")) { - LOG.info("Database table 'internet_radio' not found. Creating it."); - template.execute("create table internet_radio (" + - "id identity," + - "name varchar not null," + - "stream_url varchar not null," + - "homepage_url varchar," + - "enabled boolean not null)"); - LOG.info("Database table 'internet_radio' was created successfully."); - } - - if (!tableExists(template, "player")) { - LOG.info("Database table 'player' not found. Creating it."); - template.execute("create table player (" + - "id int not null," + - "name varchar," + - "type varchar," + - "username varchar," + - "ip_address varchar," + - "auto_control_enabled boolean not null," + - "last_seen datetime," + - "cover_art_scheme varchar not null," + - "transcode_scheme varchar not null," + - "primary key (id))"); - LOG.info("Database table 'player' was created successfully."); - } - - // 'dynamic_ip' was added in 2.6.beta2 - if (!columnExists(template, "dynamic_ip", "player")) { - LOG.info("Database column 'player.dynamic_ip' not found. Creating it."); - template.execute("alter table player " + - "add dynamic_ip boolean default true not null"); - LOG.info("Database column 'player.dynamic_ip' was added successfully."); - } - - if (template.queryForObject("select count(*) from role where id = 6",Integer.class) == 0) { - LOG.info("Role 'comment' not found in database. Creating it."); - template.execute("insert into role values (6, 'comment')"); - template.execute("insert into user_role " + - "select distinct u.username, 6 from user u, user_role ur " + - "where u.username = ur.username and ur.role_id in (1, 5)"); - LOG.info("Role 'comment' was created successfully."); - } - } - -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema27.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema27.java deleted file mode 100644 index 08ae2aa4..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema27.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.*; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 2.7. - * - * @author Sindre Mehus - */ -public class Schema27 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema27.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 3",Integer.class) == 0) { - LOG.info("Updating database schema to version 3."); - template.execute("insert into version values (3)"); - - LOG.info("Converting database column 'music_file_info.path' to varchar_ignorecase."); - template.execute("drop index idx_music_file_info_path"); - template.execute("alter table music_file_info alter column path varchar_ignorecase not null"); - template.execute("create index idx_music_file_info_path on music_file_info(path)"); - LOG.info("Database column 'music_file_info.path' was converted successfully."); - } - - if (!columnExists(template, "bytes_streamed", "user")) { - LOG.info("Database columns 'user.bytes_streamed/downloaded/uploaded' not found. Creating them."); - template.execute("alter table user add bytes_streamed bigint default 0 not null"); - template.execute("alter table user add bytes_downloaded bigint default 0 not null"); - template.execute("alter table user add bytes_uploaded bigint default 0 not null"); - LOG.info("Database columns 'user.bytes_streamed/downloaded/uploaded' were added successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema28.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema28.java deleted file mode 100644 index 515a4c0f..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema28.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.*; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 2.8. - * - * @author Sindre Mehus - */ -public class Schema28 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema28.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 4",Integer.class) == 0) { - LOG.info("Updating database schema to version 4."); - template.execute("insert into version values (4)"); - } - - if (!tableExists(template, "user_settings")) { - LOG.info("Database table 'user_settings' not found. Creating it."); - template.execute("create table user_settings (" + - "username varchar not null," + - "locale varchar," + - "theme_id varchar," + - "final_version_notification boolean default true not null," + - "beta_version_notification boolean default false not null," + - "main_caption_cutoff int default 35 not null," + - "main_track_number boolean default true not null," + - "main_artist boolean default true not null," + - "main_album boolean default false not null," + - "main_genre boolean default false not null," + - "main_year boolean default false not null," + - "main_bit_rate boolean default false not null," + - "main_duration boolean default true not null," + - "main_format boolean default false not null," + - "main_file_size boolean default false not null," + - "playlist_caption_cutoff int default 35 not null," + - "playlist_track_number boolean default false not null," + - "playlist_artist boolean default true not null," + - "playlist_album boolean default true not null," + - "playlist_genre boolean default false not null," + - "playlist_year boolean default true not null," + - "playlist_bit_rate boolean default false not null," + - "playlist_duration boolean default true not null," + - "playlist_format boolean default true not null," + - "playlist_file_size boolean default true not null," + - "primary key (username)," + - "foreign key (username) references user(username) on delete cascade)"); - LOG.info("Database table 'user_settings' was created successfully."); - } - - if (!tableExists(template, "transcoding")) { - LOG.info("Database table 'transcoding' not found. Creating it."); - template.execute("create table transcoding (" + - "id identity," + - "name varchar not null," + - "source_format varchar not null," + - "target_format varchar not null," + - "step1 varchar not null," + - "step2 varchar," + - "step3 varchar," + - "enabled boolean not null)"); - - template.execute("insert into transcoding values(null,'wav > mp3', 'wav', 'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'flac > mp3','flac','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'ogg > mp3' ,'ogg' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'wma > mp3' ,'wma' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'m4a > mp3' ,'m4a' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,false)"); - template.execute("insert into transcoding values(null,'aac > mp3' ,'aac' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,false)"); - template.execute("insert into transcoding values(null,'ape > mp3' ,'ape' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'mpc > mp3' ,'mpc' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'mv > mp3' ,'mv' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - template.execute("insert into transcoding values(null,'shn > mp3' ,'shn' ,'mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',null,true)"); - - LOG.info("Database table 'transcoding' was created successfully."); - } - - if (!tableExists(template, "player_transcoding")) { - LOG.info("Database table 'player_transcoding' not found. Creating it."); - template.execute("create table player_transcoding (" + - "player_id int not null," + - "transcoding_id int not null," + - "primary key (player_id, transcoding_id)," + - "foreign key (player_id) references player(id) on delete cascade," + - "foreign key (transcoding_id) references transcoding(id) on delete cascade)"); - LOG.info("Database table 'player_transcoding' was created successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema29.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema29.java deleted file mode 100644 index bef298f9..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema29.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.*; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 2.9. - * - * @author Sindre Mehus - */ -public class Schema29 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema29.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 5",Integer.class) == 0) { - LOG.info("Updating database schema to version 5."); - template.execute("insert into version values (5)"); - } - - if (!tableExists(template, "user_rating")) { - LOG.info("Database table 'user_rating' not found. Creating it."); - template.execute("create table user_rating (" + - "username varchar not null," + - "path varchar not null," + - "rating double not null," + - "primary key (username, path)," + - "foreign key (username) references user(username) on delete cascade)"); - LOG.info("Database table 'user_rating' was created successfully."); - - template.execute("insert into user_rating select 'admin', path, rating from music_file_info " + - "where rating is not null and rating > 0"); - LOG.info("Migrated data from 'music_file_info' to 'user_rating'."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema30.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema30.java deleted file mode 100644 index 18e73175..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema30.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.*; -import org.libresonic.player.dao.schema.Schema; -import org.libresonic.player.domain.TranscodeScheme; -import org.springframework.jdbc.core.*; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.0. - * - * @author Sindre Mehus - */ -public class Schema30 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema30.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 6", Integer.class) == 0) { - LOG.info("Updating database schema to version 6."); - template.execute("insert into version values (6)"); - } - - if (!columnExists(template, "last_fm_enabled", "user_settings")) { - LOG.info("Database columns 'user_settings.last_fm_*' not found. Creating them."); - template.execute("alter table user_settings add last_fm_enabled boolean default false not null"); - template.execute("alter table user_settings add last_fm_username varchar null"); - template.execute("alter table user_settings add last_fm_password varchar null"); - LOG.info("Database columns 'user_settings.last_fm_*' were added successfully."); - } - - if (!columnExists(template, "transcode_scheme", "user_settings")) { - LOG.info("Database column 'user_settings.transcode_scheme' not found. Creating it."); - template.execute("alter table user_settings add transcode_scheme varchar default '" + - TranscodeScheme.OFF.name() + "' not null"); - LOG.info("Database column 'user_settings.transcode_scheme' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema31.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema31.java deleted file mode 100644 index 6019070c..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema31.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.1. - * - * @author Sindre Mehus - */ -public class Schema31 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema31.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 7",Integer.class) == 0) { - LOG.info("Updating database schema to version 7."); - template.execute("insert into version values (7)"); - } - - if (!columnExists(template, "enabled", "music_file_info")) { - LOG.info("Database column 'music_file_info.enabled' not found. Creating it."); - template.execute("alter table music_file_info add enabled boolean default true not null"); - LOG.info("Database column 'music_file_info.enabled' was added successfully."); - } - - if (!columnExists(template, "default_active", "transcoding")) { - LOG.info("Database column 'transcoding.default_active' not found. Creating it."); - template.execute("alter table transcoding add default_active boolean default true not null"); - LOG.info("Database column 'transcoding.default_active' was added successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema32.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema32.java deleted file mode 100644 index 85ad7f50..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema32.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.2. - * - * @author Sindre Mehus - */ -public class Schema32 extends Schema { - private static final Logger LOG = Logger.getLogger(Schema32.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 8",Integer.class) == 0) { - LOG.info("Updating database schema to version 8."); - template.execute("insert into version values (8)"); - } - - if (!columnExists(template, "show_now_playing", "user_settings")) { - LOG.info("Database column 'user_settings.show_now_playing' not found. Creating it."); - template.execute("alter table user_settings add show_now_playing boolean default true not null"); - LOG.info("Database column 'user_settings.show_now_playing' was added successfully."); - } - - if (!columnExists(template, "selected_music_folder_id", "user_settings")) { - LOG.info("Database column 'user_settings.selected_music_folder_id' not found. Creating it."); - template.execute("alter table user_settings add selected_music_folder_id int default -1 not null"); - LOG.info("Database column 'user_settings.selected_music_folder_id' was added successfully."); - } - - if (!tableExists(template, "podcast_channel")) { - LOG.info("Database table 'podcast_channel' not found. Creating it."); - template.execute("create table podcast_channel (" + - "id identity," + - "url varchar not null," + - "title varchar," + - "description varchar," + - "status varchar not null," + - "error_message varchar)"); - LOG.info("Database table 'podcast_channel' was created successfully."); - } - - if (!tableExists(template, "podcast_episode")) { - LOG.info("Database table 'podcast_episode' not found. Creating it."); - template.execute("create table podcast_episode (" + - "id identity," + - "channel_id int not null," + - "url varchar not null," + - "path varchar," + - "title varchar," + - "description varchar," + - "publish_date datetime," + - "duration varchar," + - "bytes_total bigint," + - "bytes_downloaded bigint," + - "status varchar not null," + - "error_message varchar," + - "foreign key (channel_id) references podcast_channel(id) on delete cascade)"); - LOG.info("Database table 'podcast_episode' was created successfully."); - } - - if (template.queryForObject("select count(*) from role where id = 7",Integer.class) == 0) { - LOG.info("Role 'podcast' not found in database. Creating it."); - template.execute("insert into role values (7, 'podcast')"); - template.execute("insert into user_role " + - "select distinct u.username, 7 from user u, user_role ur " + - "where u.username = ur.username and ur.role_id = 1"); - LOG.info("Role 'podcast' was created successfully."); - } - - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema33.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema33.java deleted file mode 100644 index ffb0f4c1..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema33.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.3. - * - * @author Sindre Mehus - */ -public class Schema33 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema33.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 9",Integer.class) == 0) { - LOG.info("Updating database schema to version 9."); - template.execute("insert into version values (9)"); - } - - if (!columnExists(template, "client_side_playlist", "player")) { - LOG.info("Database column 'player.client_side_playlist' not found. Creating it."); - template.execute("alter table player add client_side_playlist boolean default false not null"); - LOG.info("Database column 'player.client_side_playlist' was added successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema34.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema34.java deleted file mode 100644 index 7f3b09c6..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema34.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.4. - * - * @author Sindre Mehus - */ -public class Schema34 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema34.class); - - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 10",Integer.class) == 0) { - LOG.info("Updating database schema to version 10."); - template.execute("insert into version values (10)"); - } - - if (!columnExists(template, "ldap_authenticated", "user")) { - LOG.info("Database column 'user.ldap_authenticated' not found. Creating it."); - template.execute("alter table user add ldap_authenticated boolean default false not null"); - LOG.info("Database column 'user.ldap_authenticated' was added successfully."); - } - - if (!columnExists(template, "party_mode_enabled", "user_settings")) { - LOG.info("Database column 'user_settings.party_mode_enabled' not found. Creating it."); - template.execute("alter table user_settings add party_mode_enabled boolean default false not null"); - LOG.info("Database column 'user_settings.party_mode_enabled' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema35.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema35.java deleted file mode 100644 index 5ed4b9d5..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema35.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.apache.commons.io.IOUtils; -import org.springframework.jdbc.core.JdbcTemplate; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.5. - * - * @author Sindre Mehus - */ -public class Schema35 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema35.class); - - private static final String[] AVATARS = { - "Formal", "Engineer", "Footballer", "Green-Boy", - - "Linux-Zealot", "Mac-Zealot", "Windows-Zealot", "Army-Officer", "Beatnik", - "All-Caps", "Clown", "Commie-Pinko", "Forum-Flirt", "Gamer", "Hopelessly-Addicted", - "Jekyll-And-Hyde", "Joker", "Lurker", "Moderator", "Newbie", "No-Dissent", - "Performer", "Push-My-Button", "Ray-Of-Sunshine", "Red-Hot-Chili-Peppers-1", - "Red-Hot-Chili-Peppers-2", "Red-Hot-Chili-Peppers-3", "Red-Hot-Chili-Peppers-4", - "Ringmaster", "Rumor-Junkie", "Sozzled-Surfer", "Statistician", "Tech-Support", - "The-Guru", "The-Referee", "Troll", "Uptight", - - "Fire-Guitar", "Drum", "Headphones", "Mic", "Turntable", "Vinyl", - - "Cool", "Laugh", "Study" - }; - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 11",Integer.class) == 0) { - LOG.info("Updating database schema to version 11."); - template.execute("insert into version values (11)"); - } - - if (!columnExists(template, "now_playing_allowed", "user_settings")) { - LOG.info("Database column 'user_settings.now_playing_allowed' not found. Creating it."); - template.execute("alter table user_settings add now_playing_allowed boolean default true not null"); - LOG.info("Database column 'user_settings.now_playing_allowed' was added successfully."); - } - - if (!columnExists(template, "web_player_default", "user_settings")) { - LOG.info("Database column 'user_settings.web_player_default' not found. Creating it."); - template.execute("alter table user_settings add web_player_default boolean default false not null"); - LOG.info("Database column 'user_settings.web_player_default' was added successfully."); - } - - if (template.queryForObject("select count(*) from role where id = 8",Integer.class) == 0) { - LOG.info("Role 'stream' not found in database. Creating it."); - template.execute("insert into role values (8, 'stream')"); - template.execute("insert into user_role select distinct u.username, 8 from user u"); - LOG.info("Role 'stream' was created successfully."); - } - - if (!tableExists(template, "system_avatar")) { - LOG.info("Database table 'system_avatar' not found. Creating it."); - template.execute("create table system_avatar (" + - "id identity," + - "name varchar," + - "created_date datetime not null," + - "mime_type varchar not null," + - "width int not null," + - "height int not null," + - "data binary not null)"); - LOG.info("Database table 'system_avatar' was created successfully."); - } - - for (String avatar : AVATARS) { - createAvatar(template, avatar); - } - - if (!tableExists(template, "custom_avatar")) { - LOG.info("Database table 'custom_avatar' not found. Creating it."); - template.execute("create table custom_avatar (" + - "id identity," + - "name varchar," + - "created_date datetime not null," + - "mime_type varchar not null," + - "width int not null," + - "height int not null," + - "data binary not null," + - "username varchar not null," + - "foreign key (username) references user(username) on delete cascade)"); - LOG.info("Database table 'custom_avatar' was created successfully."); - } - - if (!columnExists(template, "avatar_scheme", "user_settings")) { - LOG.info("Database column 'user_settings.avatar_scheme' not found. Creating it."); - template.execute("alter table user_settings add avatar_scheme varchar default 'NONE' not null"); - LOG.info("Database column 'user_settings.avatar_scheme' was added successfully."); - } - - if (!columnExists(template, "system_avatar_id", "user_settings")) { - LOG.info("Database column 'user_settings.system_avatar_id' not found. Creating it."); - template.execute("alter table user_settings add system_avatar_id int"); - template.execute("alter table user_settings add foreign key (system_avatar_id) references system_avatar(id)"); - LOG.info("Database column 'user_settings.system_avatar_id' was added successfully."); - } - - if (!columnExists(template, "jukebox", "player")) { - LOG.info("Database column 'player.jukebox' not found. Creating it."); - template.execute("alter table player add jukebox boolean default false not null"); - LOG.info("Database column 'player.jukebox' was added successfully."); - } - } - - private void createAvatar(JdbcTemplate template, String avatar) { - if (template.queryForObject("select count(*) from system_avatar where name = ?", new Object[]{avatar},Integer.class) == 0) { - - InputStream in = null; - try { - in = getClass().getResourceAsStream("/org/libresonic/player/dao/schema/" + avatar + ".png"); - byte[] imageData = IOUtils.toByteArray(in); - template.update("insert into system_avatar values (null, ?, ?, ?, ?, ?, ?)", - new Object[]{avatar, new Date(), "image/png", 48, 48, imageData}); - LOG.info("Created avatar '" + avatar + "'."); - } catch (IOException x) { - LOG.error("Failed to create avatar '" + avatar + "'.", x); - } finally { - IOUtils.closeQuietly(in); - } - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema36.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema36.java deleted file mode 100644 index 03c71a7b..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema36.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implementes the database schema for Libresonic version 3.6. - * - * @author Sindre Mehus - */ -public class Schema36 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema36.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 12",Integer.class) == 0) { - LOG.info("Updating database schema to version 12."); - template.execute("insert into version values (12)"); - } - - if (!columnExists(template, "technology", "player")) { - LOG.info("Database column 'player.technology' not found. Creating it."); - template.execute("alter table player add technology varchar default 'WEB' not null"); - LOG.info("Database column 'player.technology' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema37.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema37.java deleted file mode 100644 index 7d29d7d6..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema37.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 3.7. - * - * @author Sindre Mehus - */ -public class Schema37 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema37.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 13",Integer.class) == 0) { - LOG.info("Updating database schema to version 13."); - template.execute("insert into version values (13)"); - } - - if (template.queryForObject("select count(*) from role where id = 9",Integer.class) == 0) { - LOG.info("Role 'settings' not found in database. Creating it."); - template.execute("insert into role values (9, 'settings')"); - template.execute("insert into user_role select distinct u.username, 9 from user u"); - LOG.info("Role 'settings' was created successfully."); - } - - if (template.queryForObject("select count(*) from role where id = 10",Integer.class) == 0) { - LOG.info("Role 'jukebox' not found in database. Creating it."); - template.execute("insert into role values (10, 'jukebox')"); - template.execute("insert into user_role " + - "select distinct u.username, 10 from user u, user_role ur " + - "where u.username = ur.username and ur.role_id = 1"); - LOG.info("Role 'jukebox' was created successfully."); - } - - if (!columnExists(template, "changed", "music_folder")) { - LOG.info("Database column 'music_folder.changed' not found. Creating it."); - template.execute("alter table music_folder add changed datetime default 0 not null"); - LOG.info("Database column 'music_folder.changed' was added successfully."); - } - - if (!columnExists(template, "changed", "internet_radio")) { - LOG.info("Database column 'internet_radio.changed' not found. Creating it."); - template.execute("alter table internet_radio add changed datetime default 0 not null"); - LOG.info("Database column 'internet_radio.changed' was added successfully."); - } - - if (!columnExists(template, "changed", "user_settings")) { - LOG.info("Database column 'user_settings.changed' not found. Creating it."); - template.execute("alter table user_settings add changed datetime default 0 not null"); - LOG.info("Database column 'user_settings.changed' was added successfully."); - } - - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema38.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema38.java deleted file mode 100644 index a3fdd4d6..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema38.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 3.8. - * - * @author Sindre Mehus - */ -public class Schema38 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema38.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 14",Integer.class) == 0) { - LOG.info("Updating database schema to version 14."); - template.execute("insert into version values (14)"); - } - - if (!columnExists(template, "client_id", "player")) { - LOG.info("Database column 'player.client_id' not found. Creating it."); - template.execute("alter table player add client_id varchar"); - LOG.info("Database column 'player.client_id' was added successfully."); - } - - if (!columnExists(template, "show_chat", "user_settings")) { - LOG.info("Database column 'user_settings.show_chat' not found. Creating it."); - template.execute("alter table user_settings add show_chat boolean default true not null"); - LOG.info("Database column 'user_settings.show_chat' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema40.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema40.java deleted file mode 100644 index 4beaa679..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema40.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.0. - * - * @author Sindre Mehus - */ -public class Schema40 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema40.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 15",Integer.class) == 0) { - LOG.info("Updating database schema to version 15."); - template.execute("insert into version values (15)"); - - // Reset stream byte count since they have been wrong in earlier releases. - template.execute("update user set bytes_streamed = 0"); - LOG.info("Reset stream byte count statistics."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema43.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema43.java deleted file mode 100644 index a0422784..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema43.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import java.util.Arrays; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.3. - * - * @author Sindre Mehus - */ -public class Schema43 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema43.class); - - @Override - public void execute(JdbcTemplate template) { - - // version 16 was used for 4.3.beta1 - if (template.queryForObject("select count(*) from version where version = 16",Integer.class) == 0) { - LOG.info("Updating database schema to version 16."); - template.execute("insert into version values (16)"); - } - - if (template.queryForObject("select count(*) from version where version = 17",Integer.class) == 0) { - LOG.info("Updating database schema to version 17."); - template.execute("insert into version values (17)"); - - for (String format : Arrays.asList("avi", "mpg", "mpeg", "mp4", "m4v", "mkv", "mov", "wmv", "ogv")) { - template.update("delete from transcoding where source_format=? and target_format=?", new Object[] {format, "flv"}); - template.execute("insert into transcoding values(null,'" + format + " > flv' ,'" + format + "' ,'flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',null,null,true,true)"); - template.execute("insert into player_transcoding select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = '" + format + " > flv'"); - } - LOG.info("Created video transcoding configuration."); - } - - if (!columnExists(template, "email", "user")) { - LOG.info("Database column 'user.email' not found. Creating it."); - template.execute("alter table user add email varchar"); - LOG.info("Database column 'user.email' was added successfully."); - } - - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema45.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema45.java deleted file mode 100644 index e03568ce..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema45.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.5. - * - * @author Sindre Mehus - */ -public class Schema45 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema45.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 18",Integer.class) == 0) { - LOG.info("Updating database schema to version 18."); - template.execute("insert into version values (18)"); - } - - if (template.queryForObject("select count(*) from role where id = 11",Integer.class) == 0) { - LOG.info("Role 'share' not found in database. Creating it."); - template.execute("insert into role values (11, 'share')"); - template.execute("insert into user_role " + - "select distinct u.username, 11 from user u, user_role ur " + - "where u.username = ur.username and ur.role_id = 1"); - LOG.info("Role 'share' was created successfully."); - } - - if (!tableExists(template, "share")) { - LOG.info("Table 'share' not found in database. Creating it."); - template.execute("create cached table share (" + - "id identity," + - "name varchar not null," + - "description varchar," + - "username varchar not null," + - "created datetime not null," + - "expires datetime," + - "last_visited datetime," + - "visit_count int default 0 not null," + - "unique (name)," + - "foreign key (username) references user(username) on delete cascade)"); - template.execute("create index idx_share_name on share(name)"); - - LOG.info("Table 'share' was created successfully."); - LOG.info("Table 'share_file' not found in database. Creating it."); - template.execute("create cached table share_file (" + - "id identity," + - "share_id int not null," + - "path varchar not null," + - "foreign key (share_id) references share(id) on delete cascade)"); - LOG.info("Table 'share_file' was created successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema46.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema46.java deleted file mode 100644 index 814467e5..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema46.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.6. - * - * @author Sindre Mehus - */ -public class Schema46 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema46.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 19",Integer.class) == 0) { - LOG.info("Updating database schema to version 19."); - template.execute("insert into version values (19)"); - } - - if (!tableExists(template, "transcoding2")) { - LOG.info("Database table 'transcoding2' not found. Creating it."); - template.execute("create table transcoding2 (" + - "id identity," + - "name varchar not null," + - "source_formats varchar not null," + - "target_format varchar not null," + - "step1 varchar not null," + - "step2 varchar," + - "step3 varchar)"); - - template.execute("insert into transcoding2(name, source_formats, target_format, step1) values('mp3 audio'," + - "'ogg oga aac m4a flac wav wma aif aiff ape mpc shn', 'mp3', " + - "'ffmpeg -i %s -ab %bk -v 0 -f mp3 -')"); - - template.execute("insert into transcoding2(name, source_formats, target_format, step1) values('flv/h264 video', " + - "'avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts', 'flv', " + - "'ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -vcodec libx264 -preset superfast -threads 0 -')"); - - LOG.info("Database table 'transcoding2' was created successfully."); - } - - if (!tableExists(template, "player_transcoding2")) { - LOG.info("Database table 'player_transcoding2' not found. Creating it."); - template.execute("create table player_transcoding2 (" + - "player_id int not null," + - "transcoding_id int not null," + - "primary key (player_id, transcoding_id)," + - "foreign key (player_id) references player(id) on delete cascade," + - "foreign key (transcoding_id) references transcoding2(id) on delete cascade)"); - - template.execute("insert into player_transcoding2(player_id, transcoding_id) " + - "select distinct p.id, t.id from player p, transcoding2 t"); - - LOG.info("Database table 'player_transcoding2' was created successfully."); - } - - if (!columnExists(template, "default_active", "transcoding2")) { - LOG.info("Database column 'transcoding2.default_active' not found. Creating it."); - template.execute("alter table transcoding2 add default_active boolean default true not null"); - LOG.info("Database column 'transcoding2.default_active' was added successfully."); - } - } - -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema47.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema47.java deleted file mode 100644 index cb23d28b..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema47.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -import org.springframework.jdbc.core.JdbcTemplate; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.7. - * - * @author Sindre Mehus - */ -public class Schema47 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema47.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 20",Integer.class) == 0) { - LOG.info("Updating database schema to version 20."); - template.execute("insert into version values (20)"); - } - - if (!tableExists(template, "media_file")) { - LOG.info("Database table 'media_file' not found. Creating it."); - template.execute("create cached table media_file (" + - "id identity," + - "path varchar not null," + - "folder varchar," + - "type varchar not null," + - "format varchar," + - "title varchar," + - "album varchar," + - "artist varchar," + - "album_artist varchar," + - "disc_number int," + - "track_number int," + - "year int," + - "genre varchar," + - "bit_rate int," + - "variable_bit_rate boolean not null," + - "duration_seconds int," + - "file_size bigint," + - "width int," + - "height int," + - "cover_art_path varchar," + - "parent_path varchar," + - "play_count int not null," + - "last_played datetime," + - "comment varchar," + - "created datetime not null," + - "changed datetime not null," + - "last_scanned datetime not null," + - "children_last_updated datetime not null," + - "present boolean not null," + - "version int not null," + - "unique (path))"); - - template.execute("create index idx_media_file_path on media_file(path)"); - template.execute("create index idx_media_file_parent_path on media_file(parent_path)"); - template.execute("create index idx_media_file_type on media_file(type)"); - template.execute("create index idx_media_file_album on media_file(album)"); - template.execute("create index idx_media_file_artist on media_file(artist)"); - template.execute("create index idx_media_file_album_artist on media_file(album_artist)"); - template.execute("create index idx_media_file_present on media_file(present)"); - template.execute("create index idx_media_file_genre on media_file(genre)"); - template.execute("create index idx_media_file_play_count on media_file(play_count)"); - template.execute("create index idx_media_file_created on media_file(created)"); - template.execute("create index idx_media_file_last_played on media_file(last_played)"); - - LOG.info("Database table 'media_file' was created successfully."); - } - - if (!tableExists(template, "artist")) { - LOG.info("Database table 'artist' not found. Creating it."); - template.execute("create cached table artist (" + - "id identity," + - "name varchar not null," + - "cover_art_path varchar," + - "album_count int default 0 not null," + - "last_scanned datetime not null," + - "present boolean not null," + - "unique (name))"); - - template.execute("create index idx_artist_name on artist(name)"); - template.execute("create index idx_artist_present on artist(present)"); - - LOG.info("Database table 'artist' was created successfully."); - } - - if (!tableExists(template, "album")) { - LOG.info("Database table 'album' not found. Creating it."); - template.execute("create cached table album (" + - "id identity," + - "path varchar not null," + - "name varchar not null," + - "artist varchar not null," + - "song_count int default 0 not null," + - "duration_seconds int default 0 not null," + - "cover_art_path varchar," + - "play_count int default 0 not null," + - "last_played datetime," + - "comment varchar," + - "created datetime not null," + - "last_scanned datetime not null," + - "present boolean not null," + - "unique (artist, name))"); - - template.execute("create index idx_album_artist_name on album(artist, name)"); - template.execute("create index idx_album_play_count on album(play_count)"); - template.execute("create index idx_album_last_played on album(last_played)"); - template.execute("create index idx_album_present on album(present)"); - - LOG.info("Database table 'album' was created successfully."); - } - - // Added in 4.7.beta3 - if (!rowExists(template, "table_name='ALBUM' and column_name='NAME' and ordinal_position=1", - "information_schema.system_indexinfo")) { - template.execute("create index idx_album_name on album(name)"); - } - - if (!tableExists(template, "starred_media_file")) { - LOG.info("Database table 'starred_media_file' not found. Creating it."); - template.execute("create table starred_media_file (" + - "id identity," + - "media_file_id int not null," + - "username varchar not null," + - "created datetime not null," + - "foreign key (media_file_id) references media_file(id) on delete cascade,"+ - "foreign key (username) references user(username) on delete cascade," + - "unique (media_file_id, username))"); - - template.execute("create index idx_starred_media_file_media_file_id on starred_media_file(media_file_id)"); - template.execute("create index idx_starred_media_file_username on starred_media_file(username)"); - - LOG.info("Database table 'starred_media_file' was created successfully."); - } - - if (!tableExists(template, "starred_album")) { - LOG.info("Database table 'starred_album' not found. Creating it."); - template.execute("create table starred_album (" + - "id identity," + - "album_id int not null," + - "username varchar not null," + - "created datetime not null," + - "foreign key (album_id) references album(id) on delete cascade," + - "foreign key (username) references user(username) on delete cascade," + - "unique (album_id, username))"); - - template.execute("create index idx_starred_album_album_id on starred_album(album_id)"); - template.execute("create index idx_starred_album_username on starred_album(username)"); - - LOG.info("Database table 'starred_album' was created successfully."); - } - - if (!tableExists(template, "starred_artist")) { - LOG.info("Database table 'starred_artist' not found. Creating it."); - template.execute("create table starred_artist (" + - "id identity," + - "artist_id int not null," + - "username varchar not null," + - "created datetime not null," + - "foreign key (artist_id) references artist(id) on delete cascade,"+ - "foreign key (username) references user(username) on delete cascade," + - "unique (artist_id, username))"); - - template.execute("create index idx_starred_artist_artist_id on starred_artist(artist_id)"); - template.execute("create index idx_starred_artist_username on starred_artist(username)"); - - LOG.info("Database table 'starred_artist' was created successfully."); - } - - if (!tableExists(template, "playlist")) { - LOG.info("Database table 'playlist' not found. Creating it."); - template.execute("create table playlist (" + - "id identity," + - "username varchar not null," + - "is_public boolean not null," + - "name varchar not null," + - "comment varchar," + - "file_count int default 0 not null," + - "duration_seconds int default 0 not null," + - "created datetime not null," + - "changed datetime not null," + - "foreign key (username) references user(username) on delete cascade)"); - - LOG.info("Database table 'playlist' was created successfully."); - } - - if (!columnExists(template, "imported_from", "playlist")) { - LOG.info("Database column 'playlist.imported_from' not found. Creating it."); - template.execute("alter table playlist add imported_from varchar"); - LOG.info("Database column 'playlist.imported_from' was added successfully."); - } - - if (!tableExists(template, "playlist_file")) { - LOG.info("Database table 'playlist_file' not found. Creating it."); - template.execute("create cached table playlist_file (" + - "id identity," + - "playlist_id int not null," + - "media_file_id int not null," + - "foreign key (playlist_id) references playlist(id) on delete cascade," + - "foreign key (media_file_id) references media_file(id) on delete cascade)"); - - LOG.info("Database table 'playlist_file' was created successfully."); - } - - if (!tableExists(template, "playlist_user")) { - LOG.info("Database table 'playlist_user' not found. Creating it."); - template.execute("create table playlist_user (" + - "id identity," + - "playlist_id int not null," + - "username varchar not null," + - "unique(playlist_id, username)," + - "foreign key (playlist_id) references playlist(id) on delete cascade," + - "foreign key (username) references user(username) on delete cascade)"); - - LOG.info("Database table 'playlist_user' was created successfully."); - } - - if (!tableExists(template, "bookmark")) { - LOG.info("Database table 'bookmark' not found. Creating it."); - template.execute("create table bookmark (" + - "id identity," + - "media_file_id int not null," + - "position_millis bigint not null," + - "username varchar not null," + - "comment varchar," + - "created datetime not null," + - "changed datetime not null," + - "foreign key (media_file_id) references media_file(id) on delete cascade,"+ - "foreign key (username) references user(username) on delete cascade," + - "unique (media_file_id, username))"); - - template.execute("create index idx_bookmark_media_file_id on bookmark(media_file_id)"); - template.execute("create index idx_bookmark_username on bookmark(username)"); - - LOG.info("Database table 'bookmark' was created successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema49.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema49.java deleted file mode 100644 index 59e7b447..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema49.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 4.9. - * - * @author Sindre Mehus - */ -public class Schema49 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema49.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 21",Integer.class) == 0) { - LOG.info("Updating database schema to version 21."); - template.execute("insert into version values (21)"); - } - - if (!columnExists(template, "year", "album")) { - LOG.info("Database column 'album.year' not found. Creating it."); - template.execute("alter table album add year int"); - LOG.info("Database column 'album.year' was added successfully."); - } - - if (!columnExists(template, "genre", "album")) { - LOG.info("Database column 'album.genre' not found. Creating it."); - template.execute("alter table album add genre varchar"); - LOG.info("Database column 'album.genre' was added successfully."); - } - - if (!tableExists(template, "genre")) { - LOG.info("Database table 'genre' not found. Creating it."); - template.execute("create table genre (" + - "name varchar not null," + - "song_count int not null)"); - - LOG.info("Database table 'genre' was created successfully."); - } - - if (!columnExists(template, "album_count", "genre")) { - LOG.info("Database column 'genre.album_count' not found. Creating it."); - template.execute("alter table genre add album_count int default 0 not null"); - LOG.info("Database column 'genre.album_count' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema50.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema50.java deleted file mode 100644 index 6d3c9f52..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema50.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - This file is part of Libresonic. - - Libresonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Libresonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Libresonic. If not, see . - - Copyright 2016 (C) Libresonic Authors - Based upon Subsonic, Copyright 2009 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 5.0. - * - * @author Sindre Mehus - */ -public class Schema50 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema50.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 22",Integer.class) == 0) { - LOG.info("Updating database schema to version 22."); - template.execute("insert into version values (22)"); - - template.execute("insert into transcoding2(name, source_formats, target_format, step1, default_active) values('mkv video', " + - "'avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts', 'mkv', " + - "'ffmpeg -ss %o -i %s -c:v libx264 -preset superfast -b:v %bk -c:a libvorbis -f matroska -threads 0 -', 'true')"); - - template.execute("insert into player_transcoding2(player_id, transcoding_id) " + - "select distinct p.id, t.id from player p, transcoding2 t where t.name='mkv video'"); - LOG.info("Added mkv transcoding."); - } - - if (!columnExists(template, "song_notification", "user_settings")) { - LOG.info("Database column 'user_settings.song_notification' not found. Creating it."); - template.execute("alter table user_settings add song_notification boolean default true not null"); - LOG.info("Database column 'user_settings.song_notification' was added successfully."); - } - - // Added in 5.0.beta2 - if (template.queryForObject("select count(*) from version where version = 23",Integer.class) == 0) { - LOG.info("Updating database schema to version 23."); - template.execute("insert into version values (23)"); - template.execute("update transcoding2 set step1='ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 -' where name='mp3 audio'"); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema51.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema51.java deleted file mode 100644 index 4285d147..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema51.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - * - * Copyright 2014 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 5.1. - * - * @author Sindre Mehus - */ -public class Schema51 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema51.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 23",Integer.class) == 0) { - LOG.info("Updating database schema to version 23."); - template.execute("insert into version values (23)"); - } - - if (!columnExists(template, "show_artist_info", "user_settings")) { - LOG.info("Database column 'user_settings.show_artist_info' not found. Creating it."); - template.execute("alter table user_settings add show_artist_info boolean default true not null"); - LOG.info("Database column 'user_settings.show_artist_info' was added successfully."); - } - - if (!columnExists(template, "auto_hide_play_queue", "user_settings")) { - LOG.info("Database column 'user_settings.auto_hide_play_queue' not found. Creating it."); - template.execute("alter table user_settings add auto_hide_play_queue boolean default true not null"); - LOG.info("Database column 'user_settings.auto_hide_play_queue' was added successfully."); - } - - if (!columnExists(template, "view_as_list", "user_settings")) { - LOG.info("Database column 'user_settings.view_as_list' not found. Creating it."); - template.execute("alter table user_settings add view_as_list boolean default false not null"); - LOG.info("Database column 'user_settings.view_as_list' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema52.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema52.java deleted file mode 100644 index a0c33dec..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema52.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - * - * Copyright 2015 (C) Sindre Mehus - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 5.2. - * - * @author Sindre Mehus - */ -public class Schema52 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema52.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 24",Integer.class) == 0) { - LOG.info("Updating database schema to version 24."); - template.execute("insert into version values (24)"); - } - - if (!tableExists(template, "music_folder_user")) { - LOG.info("Database table 'music_folder_user' not found. Creating it."); - template.execute("create table music_folder_user (" + - "music_folder_id int not null," + - "username varchar not null, " + - "foreign key (username) references user(username) on delete cascade, " + - "foreign key (music_folder_id) references music_folder(id) on delete cascade)"); - template.execute("create index idx_music_folder_user_username on music_folder_user(username)"); - template.execute("insert into music_folder_user select music_folder.id, user.username from music_folder, user"); - LOG.info("Database table 'music_folder_user' was created successfully."); - } - - if (!columnExists(template, "folder_id", "album")) { - LOG.info("Database column 'album.folder_id' not found. Creating it."); - template.execute("alter table album add folder_id int"); - LOG.info("Database column 'album.folder_id' was added successfully."); - } - - if (!tableExists(template, "play_queue")) { - LOG.info("Database table 'play_queue' not found. Creating it."); - template.execute("create table play_queue (" + - "id identity," + - "username varchar not null," + - "current int," + - "position_millis bigint," + - "changed datetime not null," + - "changed_by varchar not null," + - "foreign key (username) references user(username) on delete cascade)"); - LOG.info("Database table 'play_queue' was created successfully."); - } - - if (!tableExists(template, "play_queue_file")) { - LOG.info("Database table 'play_queue_file' not found. Creating it."); - template.execute("create cached table play_queue_file (" + - "id identity," + - "play_queue_id int not null," + - "media_file_id int not null," + - "foreign key (play_queue_id) references play_queue(id) on delete cascade," + - "foreign key (media_file_id) references media_file(id) on delete cascade)"); - - LOG.info("Database table 'play_queue_file' was created successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema53.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema53.java deleted file mode 100644 index caccee78..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema53.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - * - * Copyright 2015 (C) Sindre Mehus - */ - -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; -import org.libresonic.player.domain.AlbumListType; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 5.3. - * - * @author Sindre Mehus - */ -public class Schema53 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema53.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 25",Integer.class) == 0) { - LOG.info("Updating database schema to version 25."); - template.execute("insert into version values (25)"); - } - - if (!rowExists(template, "table_name='PODCAST_EPISODE' and column_name='URL' and ordinal_position=1", - "information_schema.system_indexinfo")) { - template.execute("create index idx_podcast_episode_url on podcast_episode(url)"); - LOG.info("Created index for podcast_episode.url"); - } - - if (!columnExists(template, "default_album_list", "user_settings")) { - LOG.info("Database column 'user_settings.default_album_list' not found. Creating it."); - template.execute("alter table user_settings add default_album_list varchar default '" + - AlbumListType.RANDOM.getId() + "' not null"); - LOG.info("Database column 'user_settings.default_album_list' was added successfully."); - } - - if (!columnExists(template, "queue_following_songs", "user_settings")) { - LOG.info("Database column 'user_settings.queue_following_songs' not found. Creating it."); - template.execute("alter table user_settings add queue_following_songs boolean default true not null"); - LOG.info("Database column 'user_settings.queue_following_songs' was added successfully."); - } - - if (!columnExists(template, "image_url", "podcast_channel")) { - LOG.info("Database column 'podcast_channel.image_url' not found. Creating it."); - template.execute("alter table podcast_channel add image_url varchar"); - LOG.info("Database column 'podcast_channel.image_url' was added successfully."); - } - - if (!columnExists(template, "show_side_bar", "user_settings")) { - LOG.info("Database column 'user_settings.show_side_bar' not found. Creating it."); - template.execute("alter table user_settings add show_side_bar boolean default true not null"); - LOG.info("Database column 'user_settings.show_side_bar' was added successfully."); - } - - if (!columnExists(template, "folder_id", "artist")) { - LOG.info("Database column 'artist.folder_id' not found. Creating it."); - template.execute("alter table artist add folder_id int"); - LOG.info("Database column 'artist.folder_id' was added successfully."); - } - } -} \ No newline at end of file diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema61.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema61.java deleted file mode 100644 index cf61876a..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema61.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 6.1. - * - * @author François-Xavier Thomas - */ -public class Schema61 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema61.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 26",Integer.class) == 0) { - LOG.info("Updating database schema to version 26."); - template.execute("insert into version values (26)"); - } - - if (!columnExists(template, "list_reload_delay", "user_settings")) { - LOG.info("Database column 'user_settings.list_reload_delay' not found. Creating it."); - template.execute("alter table user_settings add list_reload_delay int default 60 not null"); - LOG.info("Database column 'user_settings.list_reload_delay' was added successfully."); - } - - if (!columnExists(template, "keyboard_shortcuts_enabled", "user_settings")) { - LOG.info("Database column 'user_settings.keyboard_shortcuts_enabled' not found. Creating it."); - template.execute("alter table user_settings add keyboard_shortcuts_enabled boolean default false not null"); - LOG.info("Database column 'user_settings.keyboard_shortcuts_enabled' was added successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema62.java b/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema62.java deleted file mode 100644 index cdd233c2..00000000 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/schema/hsql/Schema62.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of Libresonic. - * - * Libresonic is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Libresonic is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Libresonic. If not, see . - */ -package org.libresonic.player.dao.schema.hsql; - -import org.springframework.jdbc.core.JdbcTemplate; - -import org.libresonic.player.Logger; -import org.libresonic.player.dao.schema.Schema; - -/** - * Used for creating and evolving the database schema. - * This class implements the database schema for Libresonic version 6.1. - * - * @author Shen-Ta Hsieh - */ -public class Schema62 extends Schema { - - private static final Logger LOG = Logger.getLogger(Schema62.class); - - @Override - public void execute(JdbcTemplate template) { - - if (template.queryForObject("select count(*) from version where version = 27",Integer.class) == 0) { - LOG.info("Updating database schema to version 27."); - template.execute("insert into version values (27)"); - } - - if (!columnExists(template, "m3u_bom_enabled", "player")) { - LOG.info("Database column 'player.m3u_bom_enabled' not found. Creating it."); - template.execute("alter table player add m3u_bom_enabled boolean default false not null"); - LOG.info("Database column 'player.m3u_bom_enabled' was added successfully."); - } - } -} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java b/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java index cb7ff9a6..fff66516 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/AdditionalPropertySourceConfigurer.java @@ -14,7 +14,9 @@ public class AdditionalPropertySourceConfigurer implements ApacheCommonsConfigurationService configurationService = new ApacheCommonsConfigurationService(); ImmutableConfiguration snapshot = configurationService.getImmutableSnapshot(); - PropertySource ps = new CommonsConfigurationPropertySource("libresonic-pre-init-configs", snapshot); + PropertySource ps = new DatasourceProfileActivatorPropertySource(new CommonsConfigurationPropertySource( + "libresonic-pre-init-configs", + snapshot)); ctx.getEnvironment().getPropertySources().addLast(ps); } } diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/DataSourceConfigType.java b/libresonic-main/src/main/java/org/libresonic/player/spring/DataSourceConfigType.java new file mode 100644 index 00000000..623259e3 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/DataSourceConfigType.java @@ -0,0 +1,7 @@ +package org.libresonic.player.spring; + +public enum DataSourceConfigType { + JNDI, + EMBED, + LEGACY +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/DatasourceProfileActivatorPropertySource.java b/libresonic-main/src/main/java/org/libresonic/player/spring/DatasourceProfileActivatorPropertySource.java new file mode 100644 index 00000000..cbfff912 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/DatasourceProfileActivatorPropertySource.java @@ -0,0 +1,40 @@ +package org.libresonic.player.spring; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.env.PropertySource; + +public class DatasourceProfileActivatorPropertySource extends PropertySource { + public static final String SPRING_PROFILES_ACTIVE = "spring.profiles.active"; + public static final String DATASOURCE_CONFIG_TYPE = "database.config.type"; + final PropertySource parent; + + public DatasourceProfileActivatorPropertySource(PropertySource parent) { + super(parent.getName()); + this.parent = parent; + } + + @Override + public Object getProperty(String name) { + if(StringUtils.equalsIgnoreCase(name, SPRING_PROFILES_ACTIVE)) { + String appendTo = ""; + Object existing = parent.getProperty(SPRING_PROFILES_ACTIVE); + if(existing != null && existing instanceof String) { + appendTo += (String) existing; + } + DataSourceConfigType dataSourceConfigType; + Object rawType = parent.getProperty(DATASOURCE_CONFIG_TYPE); + if(rawType != null && rawType instanceof String) { + dataSourceConfigType = DataSourceConfigType.valueOf(StringUtils.upperCase((String) rawType)); + } else { + dataSourceConfigType = DataSourceConfigType.LEGACY; + } + if(StringUtils.isNotBlank(appendTo)) { + appendTo += ","; + } + appendTo += StringUtils.lowerCase(dataSourceConfigType.name()); + return appendTo; + } else { + return parent.getProperty(name); + } + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/HsqlDatabase.java b/libresonic-main/src/main/java/org/libresonic/player/spring/HsqlDatabase.java new file mode 100644 index 00000000..e169194d --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/HsqlDatabase.java @@ -0,0 +1,19 @@ +package org.libresonic.player.spring; + +import liquibase.exception.DatabaseException; + +public class HsqlDatabase extends liquibase.database.core.HsqlDatabase { + + @Override + public boolean supportsSchemas() { + try { + if(getDatabaseMajorVersion() < 2) { + return false; + } else { + return super.supportsSchemas(); + } + } catch (DatabaseException e) { + return false; + } + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java b/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java new file mode 100644 index 00000000..0ff200b4 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java @@ -0,0 +1,74 @@ +package org.libresonic.player.spring; + +import liquibase.database.Database; +import liquibase.database.DatabaseConnection; +import liquibase.database.DatabaseFactory; +import liquibase.database.OfflineConnection; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.DatabaseException; +import liquibase.exception.LiquibaseException; +import liquibase.resource.ResourceAccessor; +import liquibase.util.StringUtils; +import org.libresonic.player.Logger; + +import java.sql.Connection; +import java.util.Iterator; +import java.util.List; + +public class SpringLiquibase extends liquibase.integration.spring.SpringLiquibase { + private static final Logger logger = Logger.getLogger(SpringLiquibase.class); + + @Override + public void afterPropertiesSet() throws LiquibaseException { + try { + super.afterPropertiesSet(); + } catch(Exception e) { + logger.error("==============================================="); + logger.error("An exception occurred during database migration"); + logger.error("A rollback file has been generated at " + rollbackFile); + logger.error("Execute it within your database to rollback any changes"); + logger.error("The exception is as follows\n", e); + logger.error("==============================================="); + throw(e); + } + } + + @Override + protected Database createDatabase( + Connection c, ResourceAccessor resourceAccessor + ) throws DatabaseException { + DatabaseConnection liquibaseConnection; + if (c == null) { + log.warning("Null connection returned by liquibase datasource. Using offline unknown database"); + liquibaseConnection = new OfflineConnection("offline:unknown", resourceAccessor); + + } else { + liquibaseConnection = new JdbcConnection(c); + } + DatabaseFactory factory = DatabaseFactory.getInstance(); + overrideHsqlDbImplementation(factory); + Database database = factory.findCorrectDatabaseImplementation(liquibaseConnection); + if (StringUtils.trimToNull(this.defaultSchema) != null) { + database.setDefaultSchemaName(this.defaultSchema); + } + return database; + } + + private void overrideHsqlDbImplementation(DatabaseFactory factory) { + List implementedDatabases = factory.getImplementedDatabases(); + factory.clearRegistry(); + removeCurrentHsqlDb(implementedDatabases); + implementedDatabases.forEach(factory::register); + factory.register(new HsqlDatabase()); + } + + private void removeCurrentHsqlDb(List implementedDatabases) { + Iterator iterator = implementedDatabases.iterator(); + while(iterator.hasNext()) { + Database db = iterator.next(); + if(db instanceof liquibase.database.core.HsqlDatabase) { + iterator.remove(); + } + } + } +} diff --git a/libresonic-main/src/main/resources/liquibase/db-changelog.xml b/libresonic-main/src/main/resources/liquibase/db-changelog.xml new file mode 100644 index 00000000..717e118d --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/db-changelog.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/resources/liquibase/legacy/legacy-changelog.xml b/libresonic-main/src/main/resources/liquibase/legacy/legacy-changelog.xml new file mode 100644 index 00000000..f7d2a28a --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/legacy-changelog.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema25.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema25.xml new file mode 100644 index 00000000..32d05582 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema25.xml @@ -0,0 +1,131 @@ + + + + + + + + set property "hsqldb.cache_file_scale" 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema26.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema26.xml new file mode 100644 index 00000000..8f9a7c6d --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema26.xml @@ -0,0 +1,163 @@ + + + + select count(*) from version where version = 2 + + + + + + + version = 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from role where id = 6 + + + + + + + insert into user_role(username, role_id) + select distinct u.username, 6 from ${userTableQuote}user${userTableQuote} u, user_role ur + where u.username = ur.username and ur.role_id in (1, 5) + + + + role_id = 6 + + + id = 6 + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema27.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema27.xml new file mode 100644 index 00000000..39cbd87c --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema27.xml @@ -0,0 +1,37 @@ + + + + + select count(*) from version where version = 3 + + + + + + + version = 3 + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema28.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema28.xml new file mode 100644 index 00000000..0c9fb776 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema28.xml @@ -0,0 +1,232 @@ + + + + select count(*) from version where version = 4 + + + + + + + version = 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema29.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema29.xml new file mode 100644 index 00000000..c9789c3f --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema29.xml @@ -0,0 +1,44 @@ + + + + select count(*) from version where version = 5 + + + + + + + version = 5 + + + + + + + + + + + + + + + + + + + + + + + insert into user_rating select 'admin', path, rating from music_file_info + where rating is not null and rating > 0 + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema30.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema30.xml new file mode 100644 index 00000000..37dedba6 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema30.xml @@ -0,0 +1,44 @@ + + + + select count(*) from version where version = 6 + + + + + + + version = 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema31.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema31.xml new file mode 100644 index 00000000..3d415016 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema31.xml @@ -0,0 +1,42 @@ + + + + select count(*) from version where version = 7 + + + + + + + version = 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml new file mode 100644 index 00000000..e96ab14d --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml @@ -0,0 +1,120 @@ + + + + select count(*) from version where version = 8 + + + + + + + version = 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from role where id = 7 + + + + + + + insert into user_role(username, role_id) + select distinct u.username, 7 from ${userTableQuote}user${userTableQuote} u, user_role ur + where u.username = ur.username and ur.role_id = 1 + + + + role_id = 7 + + + id = 7 + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema33.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema33.xml new file mode 100644 index 00000000..d1119df2 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema33.xml @@ -0,0 +1,30 @@ + + + + select count(*) from version where version = 9 + + + + + + + version = 9 + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema34.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema34.xml new file mode 100644 index 00000000..85b7a3fd --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema34.xml @@ -0,0 +1,42 @@ + + + + select count(*) from version where version = 10 + + + + + + + version = 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema35.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema35.xml new file mode 100644 index 00000000..19d5fc92 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema35.xml @@ -0,0 +1,945 @@ + + + + select count(*) from version where version = 11 + + + + + + + version = 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from role where id = 8 + + + + + + + insert into user_role(username, role_id) select distinct u.username, 8 from ${userTableQuote}user${userTableQuote} u + + + + role_id = 8 + + + id = 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(*) from system_avatar where name = 'Formal' + + + + + + + + + + + name = 'Formal' + + + + + + select count(*) from system_avatar where name = 'Engineer' + + + + + + + + + + + name = 'Engineer' + + + + + + select count(*) from system_avatar where name = 'Footballer' + + + + + + + + + + + name = 'Footballer' + + + + + + select count(*) from system_avatar where name = 'Green-Boy' + + + + + + + + + + + name = 'Green-Boy' + + + + + + select count(*) from system_avatar where name = 'Linux-Zealot' + + + + + + + + + + + name = 'Linux-Zealot' + + + + + + select count(*) from system_avatar where name = 'Mac-Zealot' + + + + + + + + + + + name = 'Mac-Zealot' + + + + + + select count(*) from system_avatar where name = 'Windows-Zealot' + + + + + + + + + + + name = 'Windows-Zealot' + + + + + + select count(*) from system_avatar where name = 'Army-Officer' + + + + + + + + + + + name = 'Army-Officer' + + + + + + select count(*) from system_avatar where name = 'Beatnik' + + + + + + + + + + + name = 'Beatnik' + + + + + + select count(*) from system_avatar where name = 'All-Caps' + + + + + + + + + + + name = 'All-Caps' + + + + + + select count(*) from system_avatar where name = 'Clown' + + + + + + + + + + + name = 'Clown' + + + + + + select count(*) from system_avatar where name = 'Commie-Pinko' + + + + + + + + + + + name = 'Commie-Pinko' + + + + + + select count(*) from system_avatar where name = 'Forum-Flirt' + + + + + + + + + + + name = 'Forum-Flirt' + + + + + + select count(*) from system_avatar where name = 'Gamer' + + + + + + + + + + + name = 'Gamer' + + + + + + select count(*) from system_avatar where name = 'Hopelessly-Addicted' + + + + + + + + + + + name = 'Hopelessly-Addicted' + + + + + + select count(*) from system_avatar where name = 'Jekyll-And-Hyde' + + + + + + + + + + + name = 'Jekyll-And-Hyde' + + + + + + select count(*) from system_avatar where name = 'Joker' + + + + + + + + + + + name = 'Joker' + + + + + + select count(*) from system_avatar where name = 'Lurker' + + + + + + + + + + + name = 'Lurker' + + + + + + select count(*) from system_avatar where name = 'Moderator' + + + + + + + + + + + name = 'Moderator' + + + + + + select count(*) from system_avatar where name = 'Newbie' + + + + + + + + + + + name = 'Newbie' + + + + + + select count(*) from system_avatar where name = 'No-Dissent' + + + + + + + + + + + name = 'No-Dissent' + + + + + + select count(*) from system_avatar where name = 'Performer' + + + + + + + + + + + name = 'Performer' + + + + + + select count(*) from system_avatar where name = 'Push-My-Button' + + + + + + + + + + + name = 'Push-My-Button' + + + + + + select count(*) from system_avatar where name = 'Ray-Of-Sunshine' + + + + + + + + + + + name = 'Ray-Of-Sunshine' + + + + + + select count(*) from system_avatar where name = 'Red-Hot-Chili-Peppers-1' + + + + + + + + + + + name = 'Red-Hot-Chili-Peppers-1' + + + + + + select count(*) from system_avatar where name = 'Red-Hot-Chili-Peppers-2' + + + + + + + + + + + name = 'Red-Hot-Chili-Peppers-2' + + + + + + select count(*) from system_avatar where name = 'Red-Hot-Chili-Peppers-3' + + + + + + + + + + + name = 'Red-Hot-Chili-Peppers-3' + + + + + + select count(*) from system_avatar where name = 'Red-Hot-Chili-Peppers-4' + + + + + + + + + + + name = 'Red-Hot-Chili-Peppers-4' + + + + + + select count(*) from system_avatar where name = 'Ringmaster' + + + + + + + + + + + name = 'Ringmaster' + + + + + + select count(*) from system_avatar where name = 'Rumor-Junkie' + + + + + + + + + + + name = 'Rumor-Junkie' + + + + + + select count(*) from system_avatar where name = 'Sozzled-Surfer' + + + + + + + + + + + name = 'Sozzled-Surfer' + + + + + + select count(*) from system_avatar where name = 'Statistician' + + + + + + + + + + + name = 'Statistician' + + + + + + select count(*) from system_avatar where name = 'Tech-Support' + + + + + + + + + + + name = 'Tech-Support' + + + + + + select count(*) from system_avatar where name = 'The-Guru' + + + + + + + + + + + name = 'The-Guru' + + + + + + select count(*) from system_avatar where name = 'The-Referee' + + + + + + + + + + + name = 'The-Referee' + + + + + + select count(*) from system_avatar where name = 'Troll' + + + + + + + + + + + name = 'Troll' + + + + + + select count(*) from system_avatar where name = 'Uptight' + + + + + + + + + + + name = 'Uptight' + + + + + + select count(*) from system_avatar where name = 'Fire-Guitar' + + + + + + + + + + + name = 'Fire-Guitar' + + + + + + select count(*) from system_avatar where name = 'Drum' + + + + + + + + + + + name = 'Drum' + + + + + + select count(*) from system_avatar where name = 'Headphones' + + + + + + + + + + + name = 'Headphones' + + + + + + select count(*) from system_avatar where name = 'Mic' + + + + + + + + + + + name = 'Mic' + + + + + + select count(*) from system_avatar where name = 'Turntable' + + + + + + + + + + + name = 'Turntable' + + + + + + select count(*) from system_avatar where name = 'Vinyl' + + + + + + + + + + + name = 'Vinyl' + + + + + + select count(*) from system_avatar where name = 'Cool' + + + + + + + + + + + name = 'Cool' + + + + + + select count(*) from system_avatar where name = 'Laugh' + + + + + + + + + + + name = 'Laugh' + + + + + + select count(*) from system_avatar where name = 'Study' + + + + + + + + + + + name = 'Study' + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema36.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema36.xml new file mode 100644 index 00000000..813405cd --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema36.xml @@ -0,0 +1,30 @@ + + + + select count(*) from version where version = 12 + + + + + + + version = 12 + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema37.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema37.xml new file mode 100644 index 00000000..66791bd0 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema37.xml @@ -0,0 +1,81 @@ + + + + + select count(*) from version where version = 13 + + + + + + + version = 13 + + + + + + select count(*) from role where id = 9 + + + + + + + insert into user_role(username, role_id) select distinct u.username, 9 from ${userTableQuote}user${userTableQuote} u + + + + + + select count(*) from role where id = 10 + + + + + + + insert into user_role(username, role_id) select distinct u.username, 10 from ${userTableQuote}user${userTableQuote} u + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema38.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema38.xml new file mode 100644 index 00000000..1ab6c9ad --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema38.xml @@ -0,0 +1,40 @@ + + + + select count(*) from version where version = 14 + + + + + + + version = 14 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema40.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema40.xml new file mode 100644 index 00000000..8a324603 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema40.xml @@ -0,0 +1,22 @@ + + + + select count(*) from version where version = 15 + + + + + + + + + + + version = 15 + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema43.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema43.xml new file mode 100644 index 00000000..eadf978a --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema43.xml @@ -0,0 +1,130 @@ + + + + select count(*) from version where version = 16 + + + + + + + version = 16 + + + + + + select count(*) from version where version = 17 + + + + + + target_format = 'flv' and source_format in ('avi', 'mpg', 'mpeg', 'mp4', 'm4v', 'mkv', 'mov', 'wmv', 'ogv') + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'avi > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'mpg > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'mpeg > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'mp4 > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'm4v > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'mkv > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'mov > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'wmv > flv' + + + + + + + + + + insert into player_transcoding(player_id, transcoding_id) select p.id as player_id, t.id as transaction_id from player p, transcoding t where t.name = 'ogv > flv' + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema45.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema45.xml new file mode 100644 index 00000000..ebfdbde6 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema45.xml @@ -0,0 +1,84 @@ + + + + select count(*) from version where version = 18 + + + + + + + version = 18 + + + + + + select count(*) from role where id = 11 + + + + + + + insert into user_role(username, role_id) + select distinct u.username, 11 from ${userTableQuote}user${userTableQuote} u, user_role ur + where u.username = ur.username and ur.role_id = 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table share type cached + + + + + + + + + + + + + + set table share_file type cached + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema46.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema46.xml new file mode 100644 index 00000000..fd009415 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema46.xml @@ -0,0 +1,94 @@ + + + + select count(*) from version where version = 19 + + + + + + + version = 19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into player_transcoding2(player_id, transcoding_id) + select distinct p.id, t.id from player p, transcoding2 t + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml new file mode 100644 index 00000000..603c06ea --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml @@ -0,0 +1,450 @@ + + + + select count(*) from version where version = 20 + + + + + + + version = 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table media_file type cached + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table artist type cached + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table album type cached + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table playlist_file type cached + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema49.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema49.xml new file mode 100644 index 00000000..b5dd5b22 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema49.xml @@ -0,0 +1,65 @@ + + + + select count(*) from version where version = 21 + + + + + + + version = 21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema50.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema50.xml new file mode 100644 index 00000000..327f4764 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema50.xml @@ -0,0 +1,64 @@ + + + + select count(*) from version where version = 22 + + + + + + + + + + + + + insert into player_transcoding2(player_id, transcoding_id) + select distinct p.id, t.id from player p, transcoding2 t where t.name='mkv video' + + + + version = 22 + + + transcoding_id in (select id from transcoding_2 where name = 'mkv video') + + + name = 'mkv video' + + + + + + + + + + + + + + + + + + select count(*) from version where version = 23 + + + + + + + name='mp3 audio' + + + + version = 23 + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema51.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema51.xml new file mode 100644 index 00000000..0d644555 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema51.xml @@ -0,0 +1,54 @@ + + + + select count(*) from version where version = 23 + + + + + + + version = 23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema52.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema52.xml new file mode 100644 index 00000000..13652962 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema52.xml @@ -0,0 +1,96 @@ + + + + select count(*) from version where version = 24 + + + + + + + version = 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + set table play_queue_file type cached + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml new file mode 100644 index 00000000..1a9f1a23 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml @@ -0,0 +1,84 @@ + + + + select count(*) from version where version = 25 + + + + + + + version = 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema61.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema61.xml new file mode 100644 index 00000000..85fe2513 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema61.xml @@ -0,0 +1,42 @@ + + + + select count(*) from version where version = 26 + + + + + + + version = 26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema62.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema62.xml new file mode 100644 index 00000000..e6d23fc4 --- /dev/null +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema62.xml @@ -0,0 +1,30 @@ + + + + select count(*) from version where version = 27 + + + + + + + version = 27 + + + + + + + + + + + + + + + + diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-embed.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-embed.xml new file mode 100644 index 00000000..5ee2f378 --- /dev/null +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-embed.xml @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-jndi.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-jndi.xml new file mode 100644 index 00000000..19e08839 --- /dev/null +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-jndi.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-legacy.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-legacy.xml new file mode 100644 index 00000000..862a228b --- /dev/null +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db-legacy.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml new file mode 100644 index 00000000..c0e7ebf3 --- /dev/null +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml index 7eb2a74d..44f53be4 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-service.xml @@ -2,7 +2,12 @@ + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> + + + + @@ -44,6 +49,7 @@ + @@ -66,9 +72,6 @@ - - - diff --git a/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java b/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java index 57897cfd..9617d227 100644 --- a/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java +++ b/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java @@ -1,11 +1,21 @@ package org.libresonic.player.dao; +import javax.sql.DataSource; import junit.framework.TestCase; +import liquibase.exception.LiquibaseException; import org.libresonic.player.TestCaseUtils; +import org.libresonic.player.service.SettingsService; +import org.libresonic.player.spring.SpringLiquibase; import org.libresonic.player.util.FileUtil; +import org.libresonic.player.util.Util; +import org.springframework.core.io.DefaultResourceLoader; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; import java.io.File; +import java.util.HashMap; +import java.util.Map; /** * Superclass for all DAO test cases. @@ -32,7 +42,10 @@ public abstract class DaoTestCaseBase extends TestCase { protected PodcastDao podcastDao; protected DaoTestCaseBase() { - daoHelper = new HsqlDaoHelper(); + DataSource dataSource = createDataSource(); + daoHelper = new GenericDaoHelper(new JdbcTemplate(dataSource), new NamedParameterJdbcTemplate(dataSource)); + + runDatabaseMigration(dataSource); playerDao = new PlayerDao(); internetRadioDao = new InternetRadioDao(); @@ -57,6 +70,34 @@ public abstract class DaoTestCaseBase extends TestCase { getJdbcTemplate().execute("shutdown"); } + private void runDatabaseMigration(DataSource dataSource) { + SpringLiquibase springLiquibase = new SpringLiquibase(); + springLiquibase.setDataSource(dataSource); + springLiquibase.setChangeLog("classpath:liquibase/db-changelog.xml"); + springLiquibase.setResourceLoader(new DefaultResourceLoader()); + Map parameters = new HashMap<>(); + parameters.put("defaultMusicFolder", Util.getDefaultMusicFolder()); + parameters.put("varcharLimit", "512"); + parameters.put("userTableQuote", ""); + springLiquibase.setChangeLogParameters(parameters); + try { + springLiquibase.afterPropertiesSet(); + } catch (LiquibaseException e) { + throw new RuntimeException(e); + } + } + + private DataSource createDataSource() { + File libresonicHome = SettingsService.getLibresonicHome(); + DriverManagerDataSource ds = new DriverManagerDataSource(); + ds.setDriverClassName("org.hsqldb.jdbcDriver"); + ds.setUrl("jdbc:hsqldb:file:" + libresonicHome.getPath() + "/db/libresonic"); + ds.setUsername("sa"); + ds.setPassword(""); + + return ds; + } + protected JdbcTemplate getJdbcTemplate() { return daoHelper.getJdbcTemplate(); } diff --git a/libresonic-main/src/test/java/org/libresonic/player/service/SettingsServiceTestCase.java b/libresonic-main/src/test/java/org/libresonic/player/service/SettingsServiceTestCase.java index c5072890..dec43c4f 100644 --- a/libresonic-main/src/test/java/org/libresonic/player/service/SettingsServiceTestCase.java +++ b/libresonic-main/src/test/java/org/libresonic/player/service/SettingsServiceTestCase.java @@ -41,7 +41,13 @@ public class SettingsServiceTestCase extends TestCase { String libresonicHome = TestCaseUtils.libresonicHomePathForTest(); System.setProperty("libresonic.home", libresonicHome); new File(libresonicHome, "libresonic.properties").delete(); - settingsService = new SettingsService(); + settingsService = newSettingsService(); + } + + private SettingsService newSettingsService() { + SettingsService settingsService = new SettingsService(); + settingsService.setConfigurationService(new ApacheCommonsConfigurationService()); + return settingsService; } public void testLibresonicHome() { @@ -97,7 +103,7 @@ public class SettingsServiceTestCase extends TestCase { settingsService.save(); verifySettings(settingsService); - verifySettings(new SettingsService()); + verifySettings(newSettingsService()); } private void verifySettings(SettingsService ss) { diff --git a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml index 2d0b320f..1eaa2d61 100644 --- a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml +++ b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml @@ -1,8 +1,8 @@ - + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> @@ -67,8 +67,45 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87,12 +124,15 @@ + + + From 529cb6c317c4c60ed4eb4f795bd3e3edba58a844 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Sat, 10 Dec 2016 15:58:49 -0700 Subject: [PATCH 03/11] Added documentation Signed-off-by: Andrew DeMaria --- documentation/DATABASE.md | 73 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 documentation/DATABASE.md diff --git a/documentation/DATABASE.md b/documentation/DATABASE.md new file mode 100644 index 00000000..996378a6 --- /dev/null +++ b/documentation/DATABASE.md @@ -0,0 +1,73 @@ +# Database Configuration + +*Before doing anything, make sure your database is properly backed up. Ensure your server is shutdown* + +Libresonic has the capability to override the database settings. If you wish to +continue using the current hsql 1.8 database driver, no action is needed. When +upgrading to a new version of Libresonic powered by liquibase you may see some +liquibase logging to double check old migrations, but on subsequent startups it +will not execute them again. + +For those that wish to change their database, instructions differ based on +whether you wish for your database connection to be managed by your container (tomcat), +or whether you wish Libresonic to manage it for you. The former may offer some performance +gains in the case of many concurrent users with connection pooling while the latter is easiest. + +We will refer to container managed configuration as jndi and libresonic managed configuration as embedded. + +## Embedded +*Before doing anything, make sure your database is properly backed up. Ensure your server is shutdown* + +In your libresonic.properties file, you will need to add the following settings (this is just an example): + +``` +database.config.type=embed +database.config.embed.driver=org.hsqldb.jdbcDriver +database.config.embed.url=jdbc:hsqldb:file:/tmp/libre/db/libresonic +database.config.embed.username=sa +database.config.embed.password= +``` + +In addition, you will need to ensure that a jdbc driver suitable for your +database is on the +[classpath](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html) + +## JNDI +*Before doing anything, make sure your database is properly backed up. Ensure your server is shutdown* + +In your libresonic.properties file, you will need to add the following settings (this is just an example): + +``` +database.config.type=jndi +database.config.jndi.name=jdbc/libresonicDB +``` + +Then in your context.xml in your tomcat directory, add the jndi config: + +``` + + +``` + +Finally, copy the jdbc driver from the database vendor website to the `lib` directory in your tomcat folder. + +## Database Vendor Specific Notes + +### MySQL + +`sessionVariables=sql_mode=ANSI_QUOTES` on your jdbc url string may be necessary. TODO: double check this + +### PostgreSQL + +`stringtype=unspecified` on your jdbc url string is necessary. + +You will also need to add `database.usertable.quote=\"` to your properties +file. This is due to the fact that our `user` table is a keyword for postgres. From f60811e51b7f56bcfd2138eab8b1dc1eccdbea4f Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Sat, 10 Dec 2016 21:01:56 -0700 Subject: [PATCH 04/11] Fix ambigous constructor ref that seems to only happen on debian Signed-off-by: Andrew DeMaria --- .../src/main/webapp/WEB-INF/applicationContext-db.xml | 4 ++-- .../applicationContext-service.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml index c0e7ebf3..cb7109c3 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml @@ -21,8 +21,8 @@ - - + + diff --git a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml index 1eaa2d61..82b5cf60 100644 --- a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml +++ b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml @@ -81,8 +81,8 @@ - - + + Date: Sun, 11 Dec 2016 17:36:14 -0700 Subject: [PATCH 05/11] Make dao layer more db vendor agnostic - Removed usages of TOP - Dont send null for autogenerate columns Signed-off-by: Andrew DeMaria --- .../libresonic/player/dao/AbstractDao.java | 19 ++++++ .../org/libresonic/player/dao/AlbumDao.java | 38 ++++++----- .../org/libresonic/player/dao/ArtistDao.java | 19 +++--- .../org/libresonic/player/dao/AvatarDao.java | 14 ++-- .../libresonic/player/dao/BookmarkDao.java | 13 ++-- .../org/libresonic/player/dao/DaoHelper.java | 2 + .../player/dao/GenericDaoHelper.java | 19 ++++-- .../player/dao/InternetRadioDao.java | 7 +- .../libresonic/player/dao/MediaFileDao.java | 68 +++++++++++-------- .../libresonic/player/dao/MusicFolderDao.java | 9 +-- .../libresonic/player/dao/PlayQueueDao.java | 9 +-- .../org/libresonic/player/dao/PlayerDao.java | 15 ++-- .../libresonic/player/dao/PlaylistDao.java | 25 +++---- .../org/libresonic/player/dao/PodcastDao.java | 31 +++++---- .../org/libresonic/player/dao/ShareDao.java | 13 ++-- .../libresonic/player/dao/TranscodingDao.java | 13 ++-- .../webapp/WEB-INF/applicationContext-db.xml | 9 --- .../player/dao/DaoTestCaseBase.java | 2 +- .../applicationContext-service.xml | 9 --- 19 files changed, 187 insertions(+), 147 deletions(-) diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/AbstractDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/AbstractDao.java index 2da6acb7..d7c7b8e4 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/AbstractDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/AbstractDao.java @@ -19,15 +19,23 @@ */ package org.libresonic.player.dao; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.*; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.libresonic.player.Logger; +import org.springframework.jdbc.support.JdbcUtils; +import org.springframework.jdbc.support.KeyHolder; +import org.springframework.util.Assert; /** * Abstract superclass for all DAO's. @@ -107,6 +115,16 @@ public class AbstractDao { return result; } + protected List namedQueryWithLimit(String sql, RowMapper rowMapper, Map args, int limit) { + long t = System.nanoTime(); + JdbcTemplate jdbcTemplate = new JdbcTemplate(daoHelper.getDataSource()); + jdbcTemplate.setMaxRows(limit); + NamedParameterJdbcTemplate namedTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); + List result = namedTemplate.query(sql, args, rowMapper); + log(sql, t); + return result; + } + protected List queryForStrings(String sql, Object... args) { long t = System.nanoTime(); List result = getJdbcTemplate().queryForList(sql, args, String.class); @@ -173,4 +191,5 @@ public class AbstractDao { public void setDaoHelper(DaoHelper daoHelper) { this.daoHelper = daoHelper; } + } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/AlbumDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/AlbumDao.java index 71cffec2..19644344 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/AlbumDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/AlbumDao.java @@ -41,10 +41,11 @@ import org.libresonic.player.util.FileUtil; * @author Sindre Mehus */ public class AlbumDao extends AbstractDao { - - private static final String COLUMNS = "id, path, name, artist, song_count, duration_seconds, cover_art_path, " + + private static final String INSERT_COLUMNS = "path, name, artist, song_count, duration_seconds, cover_art_path, " + "year, genre, play_count, last_played, comment, created, last_scanned, present, folder_id"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; + private final RowMapper rowMapper = new AlbumMapper(); /** @@ -55,7 +56,7 @@ public class AlbumDao extends AbstractDao { * @return The album or null. */ public Album getAlbum(String artistName, String albumName) { - return queryOne("select " + COLUMNS + " from album where artist=? and name=?", rowMapper, artistName, albumName); + return queryOne("select " + QUERY_COLUMNS + " from album where artist=? and name=?", rowMapper, artistName, albumName); } /** @@ -67,7 +68,7 @@ public class AlbumDao extends AbstractDao { public Album getAlbumForFile(MediaFile file) { // First, get all albums with the correct album name (irrespective of artist). - List candidates = query("select " + COLUMNS + " from album where name=?", rowMapper, file.getAlbumName()); + List candidates = query("select " + QUERY_COLUMNS + " from album where name=?", rowMapper, file.getAlbumName()); if (candidates.isEmpty()) { return null; } @@ -91,7 +92,7 @@ public class AlbumDao extends AbstractDao { } public Album getAlbum(int id) { - return queryOne("select " + COLUMNS + " from album where id=?", rowMapper, id); + return queryOne("select " + QUERY_COLUMNS + " from album where id=?", rowMapper, id); } public List getAlbumsForArtist(final String artist, final List musicFolders) { @@ -102,7 +103,8 @@ public class AlbumDao extends AbstractDao { put("artist", artist); put("folders", MusicFolder.toIdList(musicFolders)); }}; - return namedQuery("select " + COLUMNS + " from album where artist = :artist and present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + + " from album where artist = :artist and present and folder_id in (:folders) " + "order by name", rowMapper, args); } @@ -135,7 +137,7 @@ public class AlbumDao extends AbstractDao { if (n == 0) { - update("insert into album (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")", null, album.getPath(), + update("insert into album (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")", album.getPath(), album.getName(), album.getArtist(), album.getSongCount(), album.getDurationSeconds(), album.getCoverArtPath(), album.getYear(), album.getGenre(), album.getPlayCount(), album.getLastPlayed(), album.getComment(), album.getCreated(), album.getLastScanned(), album.isPresent(), album.getFolderId()); @@ -164,7 +166,7 @@ public class AlbumDao extends AbstractDao { put("offset", offset); }}; String orderBy = byArtist ? "artist, name" : "name"; - return namedQuery("select " + COLUMNS + " from album where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " + "order by " + orderBy + " limit :count offset :offset", rowMapper, args); } @@ -185,7 +187,8 @@ public class AlbumDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from album where play_count > 0 and present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + + " from album where play_count > 0 and present and folder_id in (:folders) " + "order by play_count desc limit :count offset :offset", rowMapper, args); } @@ -206,7 +209,8 @@ public class AlbumDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from album where last_played is not null and present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + + " from album where last_played is not null and present and folder_id in (:folders) " + "order by last_played desc limit :count offset :offset", rowMapper, args); } @@ -227,7 +231,7 @@ public class AlbumDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from album where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " + "order by created desc limit :count offset :offset", rowMapper, args); } @@ -250,7 +254,7 @@ public class AlbumDao extends AbstractDao { put("offset", offset); put("username", username); }}; - return namedQuery("select " + prefix(COLUMNS, "album") + " from starred_album, album where album.id = starred_album.album_id and " + + return namedQuery("select " + prefix(QUERY_COLUMNS, "album") + " from starred_album, album where album.id = starred_album.album_id and " + "album.present and album.folder_id in (:folders) and starred_album.username = :username " + "order by starred_album.created desc limit :count offset :offset", rowMapper, args); @@ -275,7 +279,7 @@ public class AlbumDao extends AbstractDao { put("offset", offset); put("genre", genre); }}; - return namedQuery("select " + COLUMNS + " from album where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " + "and genre = :genre limit :count offset :offset", rowMapper, args); } @@ -302,18 +306,18 @@ public class AlbumDao extends AbstractDao { put("toYear", toYear); }}; if (fromYear <= toYear) { - return namedQuery("select " + COLUMNS + " from album where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " + "and year between :fromYear and :toYear order by year limit :count offset :offset", rowMapper, args); } else { - return namedQuery("select " + COLUMNS + " from album where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " + "and year between :toYear and :fromYear order by year desc limit :count offset :offset", rowMapper, args); } } public void markNonPresent(Date lastScanned) { - int minId = queryForInt("select top 1 id from album where last_scanned != ? and present", 0, lastScanned); + int minId = queryForInt("select min(id) from album where last_scanned != ? and present", 0, lastScanned); int maxId = queryForInt("select max(id) from album where last_scanned != ? and present", 0, lastScanned); final int batchSize = 1000; @@ -323,7 +327,7 @@ public class AlbumDao extends AbstractDao { } public void expunge() { - int minId = queryForInt("select top 1 id from album where not present", 0); + int minId = queryForInt("select min(id) from album where not present", 0); int maxId = queryForInt("select max(id) from album where not present", 0); final int batchSize = 1000; diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/ArtistDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/ArtistDao.java index f7b44367..df293c91 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/ArtistDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/ArtistDao.java @@ -41,7 +41,8 @@ import java.util.Map; public class ArtistDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(ArtistDao.class); - private static final String COLUMNS = "id, name, cover_art_path, album_count, last_scanned, present, folder_id"; + private static final String INSERT_COLUMNS = "name, cover_art_path, album_count, last_scanned, present, folder_id"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final RowMapper rowMapper = new ArtistMapper(); @@ -52,7 +53,7 @@ public class ArtistDao extends AbstractDao { * @return The artist or null. */ public Artist getArtist(String artistName) { - return queryOne("select " + COLUMNS + " from artist where name=?", rowMapper, artistName); + return queryOne("select " + QUERY_COLUMNS + " from artist where name=?", rowMapper, artistName); } /** @@ -71,7 +72,7 @@ public class ArtistDao extends AbstractDao { put("folders", MusicFolder.toIdList(musicFolders)); }}; - return namedQueryOne("select " + COLUMNS + " from artist where name = :name and folder_id in (:folders)", + return namedQueryOne("select " + QUERY_COLUMNS + " from artist where name = :name and folder_id in (:folders)", rowMapper, args); } @@ -82,7 +83,7 @@ public class ArtistDao extends AbstractDao { * @return The artist or null. */ public Artist getArtist(int id) { - return queryOne("select " + COLUMNS + " from artist where id=?", rowMapper, id); + return queryOne("select " + QUERY_COLUMNS + " from artist where id=?", rowMapper, id); } /** @@ -102,7 +103,7 @@ public class ArtistDao extends AbstractDao { int n = update(sql, artist.getCoverArtPath(), artist.getAlbumCount(), artist.getLastScanned(), artist.isPresent(), artist.getFolderId(), artist.getName()); if (n == 0) { - update("insert into artist (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")", null, + update("insert into artist (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")", artist.getName(), artist.getCoverArtPath(), artist.getAlbumCount(), artist.getLastScanned(), artist.isPresent(), artist.getFolderId()); } @@ -128,7 +129,7 @@ public class ArtistDao extends AbstractDao { put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from artist where present and folder_id in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from artist where present and folder_id in (:folders) " + "order by name limit :count offset :offset", rowMapper, args); } @@ -153,7 +154,7 @@ public class ArtistDao extends AbstractDao { put("offset", offset); }}; - return namedQuery("select " + prefix(COLUMNS, "artist") + " from starred_artist, artist " + + return namedQuery("select " + prefix(QUERY_COLUMNS, "artist") + " from starred_artist, artist " + "where artist.id = starred_artist.artist_id and " + "artist.present and starred_artist.username = :username and " + "artist.folder_id in (:folders) " + @@ -166,7 +167,7 @@ public class ArtistDao extends AbstractDao { } public void markNonPresent(Date lastScanned) { - int minId = queryForInt("select top 1 id from artist where last_scanned != ? and present", 0, lastScanned); + int minId = queryForInt("select min(id) from artist where last_scanned != ? and present", 0, lastScanned); int maxId = queryForInt("select max(id) from artist where last_scanned != ? and present", 0, lastScanned); final int batchSize = 1000; @@ -176,7 +177,7 @@ public class ArtistDao extends AbstractDao { } public void expunge() { - int minId = queryForInt("select top 1 id from artist where not present", 0); + int minId = queryForInt("select min(id) from artist where not present", 0); int maxId = queryForInt("select max(id) from artist where not present", 0); final int batchSize = 1000; diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/AvatarDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/AvatarDao.java index 118816ce..45c2ebc9 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/AvatarDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/AvatarDao.java @@ -33,7 +33,8 @@ import java.util.List; */ public class AvatarDao extends AbstractDao { - private static final String COLUMNS = "id, name, created_date, mime_type, width, height, data"; + private static final String INSERT_COLUMNS = "name, created_date, mime_type, width, height, data"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final AvatarRowMapper rowMapper = new AvatarRowMapper(); /** @@ -42,7 +43,7 @@ public class AvatarDao extends AbstractDao { * @return All system avatars. */ public List getAllSystemAvatars() { - String sql = "select " + COLUMNS + " from system_avatar"; + String sql = "select " + QUERY_COLUMNS + " from system_avatar"; return query(sql, rowMapper); } @@ -53,7 +54,7 @@ public class AvatarDao extends AbstractDao { * @return The avatar or null if not found. */ public Avatar getSystemAvatar(int id) { - String sql = "select " + COLUMNS + " from system_avatar where id=" + id; + String sql = "select " + QUERY_COLUMNS + " from system_avatar where id=" + id; return queryOne(sql, rowMapper); } @@ -64,7 +65,7 @@ public class AvatarDao extends AbstractDao { * @return The avatar or null if not found. */ public Avatar getCustomAvatar(String username) { - String sql = "select " + COLUMNS + " from custom_avatar where username=?"; + String sql = "select " + QUERY_COLUMNS + " from custom_avatar where username=?"; return queryOne(sql, rowMapper, username); } @@ -79,8 +80,9 @@ public class AvatarDao extends AbstractDao { update(sql, username); if (avatar != null) { - update("insert into custom_avatar(" + COLUMNS + ", username) values(" + questionMarks(COLUMNS) + ", ?)", - null, avatar.getName(), avatar.getCreatedDate(), avatar.getMimeType(), + update("insert into custom_avatar(" + INSERT_COLUMNS + + ", username) values(" + questionMarks(INSERT_COLUMNS) + ", ?)", + avatar.getName(), avatar.getCreatedDate(), avatar.getMimeType(), avatar.getWidth(), avatar.getHeight(), avatar.getData(), username); } } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/BookmarkDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/BookmarkDao.java index 1ea9ac44..a4917b55 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/BookmarkDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/BookmarkDao.java @@ -34,7 +34,8 @@ import org.libresonic.player.domain.Bookmark; */ public class BookmarkDao extends AbstractDao { - private static final String COLUMNS = "id, media_file_id, position_millis, username, comment, created, changed"; + private static final String INSERT_COLUMNS = "media_file_id, position_millis, username, comment, created, changed"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private BookmarkRowMapper bookmarkRowMapper = new BookmarkRowMapper(); @@ -44,7 +45,7 @@ public class BookmarkDao extends AbstractDao { * @return Possibly empty list of all bookmarks. */ public List getBookmarks() { - String sql = "select " + COLUMNS + " from bookmark"; + String sql = "select " + QUERY_COLUMNS + " from bookmark"; return query(sql, bookmarkRowMapper); } @@ -54,7 +55,7 @@ public class BookmarkDao extends AbstractDao { * @return Possibly empty list of all bookmarks for the user. */ public List getBookmarks(String username) { - String sql = "select " + COLUMNS + " from bookmark where username=?"; + String sql = "select " + QUERY_COLUMNS + " from bookmark where username=?"; return query(sql, bookmarkRowMapper, username); } @@ -66,9 +67,9 @@ public class BookmarkDao extends AbstractDao { bookmark.getPositionMillis(), bookmark.getComment(), bookmark.getChanged(), bookmark.getMediaFileId(), bookmark.getUsername()); if (n == 0) { - update("insert into bookmark (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")", null, - bookmark.getMediaFileId(), bookmark.getPositionMillis(), bookmark.getUsername(), bookmark.getComment(), - bookmark.getCreated(), bookmark.getChanged()); + update("insert into bookmark (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")", + bookmark.getMediaFileId(), bookmark.getPositionMillis(), bookmark.getUsername(), bookmark.getComment(), + bookmark.getCreated(), bookmark.getChanged()); int id = queryForInt("select id from bookmark where media_file_id=? and username=?", 0, bookmark.getMediaFileId(), bookmark.getUsername()); bookmark.setId(id); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelper.java b/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelper.java index b9c8bd0a..e423e2d8 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelper.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/DaoHelper.java @@ -19,6 +19,7 @@ */ package org.libresonic.player.dao; +import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; @@ -43,4 +44,5 @@ public interface DaoHelper { */ NamedParameterJdbcTemplate getNamedParameterJdbcTemplate(); + DataSource getDataSource(); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java b/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java index d4007f80..b860b18e 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/GenericDaoHelper.java @@ -1,19 +1,23 @@ package org.libresonic.player.dao; +import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; public class GenericDaoHelper implements DaoHelper { - JdbcTemplate jdbcTemplate; + final JdbcTemplate jdbcTemplate; - NamedParameterJdbcTemplate namedParameterJdbcTemplate; + final NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + final DataSource dataSource; public GenericDaoHelper( - JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate + DataSource dataSource ) { - this.jdbcTemplate = jdbcTemplate; - this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; + this.dataSource = dataSource; + this.jdbcTemplate = new JdbcTemplate(dataSource); + this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); } @Override @@ -25,4 +29,9 @@ public class GenericDaoHelper implements DaoHelper { public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() { return namedParameterJdbcTemplate; } + + @Override + public DataSource getDataSource() { + return dataSource; + } } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/InternetRadioDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/InternetRadioDao.java index 385e4a90..791436e1 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/InternetRadioDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/InternetRadioDao.java @@ -36,7 +36,8 @@ import org.libresonic.player.domain.InternetRadio; public class InternetRadioDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(InternetRadioDao.class); - private static final String COLUMNS = "id, name, stream_url, homepage_url, enabled, changed"; + private static final String INSERT_COLUMNS = "name, stream_url, homepage_url, enabled, changed"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final InternetRadioRowMapper rowMapper = new InternetRadioRowMapper(); /** @@ -45,7 +46,7 @@ public class InternetRadioDao extends AbstractDao { * @return Possibly empty list of all internet radio stations. */ public List getAllInternetRadios() { - String sql = "select " + COLUMNS + " from internet_radio"; + String sql = "select " + QUERY_COLUMNS + " from internet_radio"; return query(sql, rowMapper); } @@ -55,7 +56,7 @@ public class InternetRadioDao extends AbstractDao { * @param radio The internet radio station to create. */ public void createInternetRadio(InternetRadio radio) { - String sql = "insert into internet_radio (" + COLUMNS + ") values (null, ?, ?, ?, ?, ?)"; + String sql = "insert into internet_radio (" + INSERT_COLUMNS + ") values (?, ?, ?, ?, ?)"; update(sql, radio.getName(), radio.getStreamUrl(), radio.getHomepageUrl(), radio.isEnabled(), radio.getChanged()); LOG.info("Created internet radio station " + radio.getName()); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/MediaFileDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/MediaFileDao.java index 3d964a4b..7dc7ffd5 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/MediaFileDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/MediaFileDao.java @@ -40,15 +40,16 @@ import static org.libresonic.player.domain.MediaFile.MediaType.*; * @author Sindre Mehus */ public class MediaFileDao extends AbstractDao { + private static final String INSERT_COLUMNS = "path, folder, type, format, title, album, artist, album_artist, disc_number, " + + "track_number, year, genre, bit_rate, variable_bit_rate, duration_seconds, file_size, width, height, cover_art_path, " + + "parent_path, play_count, last_played, comment, created, changed, last_scanned, children_last_updated, present, version"; - private static final String COLUMNS = "id, path, folder, type, format, title, album, artist, album_artist, disc_number, " + - "track_number, year, genre, bit_rate, variable_bit_rate, duration_seconds, file_size, width, height, cover_art_path, " + - "parent_path, play_count, last_played, comment, created, changed, last_scanned, children_last_updated, present, version"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private static final String GENRE_COLUMNS = "name, song_count, album_count"; public static final int VERSION = 4; - private final RowMapper rowMapper = new MediaFileMapper(); + private final RowMapper rowMapper = new MediaFileMapper(); private final RowMapper musicFileInfoRowMapper = new MusicFileInfoMapper(); private final RowMapper genreRowMapper = new GenreMapper(); @@ -59,7 +60,7 @@ public class MediaFileDao extends AbstractDao { * @return The media file or null. */ public MediaFile getMediaFile(String path) { - return queryOne("select " + COLUMNS + " from media_file where path=?", rowMapper, path); + return queryOne("select " + QUERY_COLUMNS + " from media_file where path=?", rowMapper, path); } /** @@ -69,7 +70,7 @@ public class MediaFileDao extends AbstractDao { * @return The media file or null. */ public MediaFile getMediaFile(int id) { - return queryOne("select " + COLUMNS + " from media_file where id=?", rowMapper, id); + return queryOne("select " + QUERY_COLUMNS + " from media_file where id=?", rowMapper, id); } /** @@ -79,18 +80,18 @@ public class MediaFileDao extends AbstractDao { * @return The list of children. */ public List getChildrenOf(String path) { - return query("select " + COLUMNS + " from media_file where parent_path=? and present", rowMapper, path); + return query("select " + QUERY_COLUMNS + " from media_file where parent_path=? and present", rowMapper, path); } public List getFilesInPlaylist(int playlistId) { - return query("select " + prefix(COLUMNS, "media_file") + " from playlist_file, media_file where " + + return query("select " + prefix(QUERY_COLUMNS, "media_file") + " from playlist_file, media_file where " + "media_file.id = playlist_file.media_file_id and " + "playlist_file.playlist_id = ? " + "order by playlist_file.id", rowMapper, playlistId); } public List getSongsForAlbum(String artist, String album) { - return query("select " + COLUMNS + " from media_file where album_artist=? and album=? and present " + + return query("select " + QUERY_COLUMNS + " from media_file where album_artist=? and album=? and present " + "and type in (?,?,?) order by disc_number, track_number", rowMapper, artist, album, MUSIC.name(), AUDIOBOOK.name(), PODCAST.name()); } @@ -105,7 +106,8 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and present and folder in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and present and folder in (:folders) " + "order by title limit :count offset :offset", rowMapper, args); } @@ -118,7 +120,7 @@ public class MediaFileDao extends AbstractDao { put("name", name); put("folders", MusicFolder.toPathList(musicFolders)); }}; - return namedQueryOne("select " + COLUMNS + " from media_file where type = :type and artist = :name " + + return namedQueryOne("select " + QUERY_COLUMNS + " from media_file where type = :type and artist = :name " + "and present and folder in (:folders)", rowMapper, args); } @@ -175,7 +177,7 @@ public class MediaFileDao extends AbstractDao { file.setPlayCount(musicFileInfo.getPlayCount()); } - update("insert into media_file (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")", null, + update("insert into media_file (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")", file.getPath(), file.getFolder(), file.getMediaType().name(), file.getFormat(), file.getTitle(), file.getAlbumName(), file.getArtist(), file.getAlbumArtist(), file.getDiscNumber(), file.getTrackNumber(), file.getYear(), file.getGenre(), file.getBitRate(), file.isVariableBitRate(), file.getDurationSeconds(), file.getFileSize(), file.getWidth(), file.getHeight(), @@ -228,7 +230,8 @@ public class MediaFileDao extends AbstractDao { put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and play_count > 0 and present and folder in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and play_count > 0 and present and folder in (:folders) " + "order by play_count desc limit :count offset :offset", rowMapper, args); } @@ -250,7 +253,8 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and last_played is not null and present " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and last_played is not null and present " + "and folder in (:folders) order by last_played desc limit :count offset :offset", rowMapper, args); } @@ -273,7 +277,8 @@ public class MediaFileDao extends AbstractDao { put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and folder in (:folders) and present " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and folder in (:folders) and present " + "order by created desc limit :count offset :offset", rowMapper, args); } @@ -298,7 +303,8 @@ public class MediaFileDao extends AbstractDao { }}; String orderBy = byArtist ? "artist, album" : "album"; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and folder in (:folders) and present " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and folder in (:folders) and present " + "order by " + orderBy + " limit :count offset :offset", rowMapper, args); } @@ -327,11 +333,13 @@ public class MediaFileDao extends AbstractDao { }}; if (fromYear <= toYear) { - return namedQuery("select " + COLUMNS + " from media_file where type = :type and folder in (:folders) and present " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and folder in (:folders) and present " + "and year between :fromYear and :toYear order by year limit :count offset :offset", rowMapper, args); } else { - return namedQuery("select " + COLUMNS + " from media_file where type = :type and folder in (:folders) and present " + + return namedQuery("select " + QUERY_COLUMNS + + " from media_file where type = :type and folder in (:folders) and present " + "and year between :toYear and :fromYear order by year desc limit :count offset :offset", rowMapper, args); } @@ -358,7 +366,7 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + COLUMNS + " from media_file where type = :type and folder in (:folders) " + + return namedQuery("select " + QUERY_COLUMNS + " from media_file where type = :type and folder in (:folders) " + "and present and genre = :genre limit :count offset :offset", rowMapper, args); } @@ -373,13 +381,14 @@ public class MediaFileDao extends AbstractDao { put("offset", offset); put("folders", MusicFolder.toPathList(musicFolders)); }}; - return namedQuery("select " + COLUMNS + " from media_file where type in (:types) and genre = :genre " + + return namedQuery("select " + QUERY_COLUMNS + " from media_file where type in (:types) and genre = :genre " + "and present and folder in (:folders) limit :count offset :offset", rowMapper, args); } public List getSongsByArtist(String artist, int offset, int count) { - return query("select " + COLUMNS + " from media_file where type in (?,?,?) and artist=? and present limit ? offset ?", + return query("select " + QUERY_COLUMNS + + " from media_file where type in (?,?,?) and artist=? and present limit ? offset ?", rowMapper, MUSIC.name(), PODCAST.name(), AUDIOBOOK.name(), artist, count, offset); } @@ -393,7 +402,7 @@ public class MediaFileDao extends AbstractDao { put("type", MUSIC.name()); put("folders", MusicFolder.toPathList(musicFolders)); }}; - return namedQueryOne("select " + COLUMNS + " from media_file where artist = :artist " + + return namedQueryOne("select " + QUERY_COLUMNS + " from media_file where artist = :artist " + "and title = :title and type = :type and present and folder in (:folders)" , rowMapper, args); } @@ -419,7 +428,7 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + prefix(COLUMNS, "media_file") + " from starred_media_file, media_file where media_file.id = starred_media_file.media_file_id and " + + return namedQuery("select " + prefix(QUERY_COLUMNS, "media_file") + " from starred_media_file, media_file where media_file.id = starred_media_file.media_file_id and " + "media_file.present and media_file.type = :type and media_file.folder in (:folders) and starred_media_file.username = :username " + "order by starred_media_file.created desc limit :count offset :offset", rowMapper, args); @@ -446,7 +455,7 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + prefix(COLUMNS, "media_file") + " from starred_media_file, media_file " + + return namedQuery("select " + prefix(QUERY_COLUMNS, "media_file") + " from starred_media_file, media_file " + "where media_file.id = starred_media_file.media_file_id and " + "media_file.present and media_file.type = :type and starred_media_file.username = :username and " + "media_file.folder in (:folders) " + @@ -475,7 +484,7 @@ public class MediaFileDao extends AbstractDao { put("count", count); put("offset", offset); }}; - return namedQuery("select " + prefix(COLUMNS, "media_file") + " from starred_media_file, media_file where media_file.id = starred_media_file.media_file_id and " + + return namedQuery("select " + prefix(QUERY_COLUMNS, "media_file") + " from starred_media_file, media_file where media_file.id = starred_media_file.media_file_id and " + "media_file.present and media_file.type in (:types) and starred_media_file.username = :username and " + "media_file.folder in (:folders) " + "order by starred_media_file.created desc limit :count offset :offset", @@ -490,7 +499,6 @@ public class MediaFileDao extends AbstractDao { Map args = new HashMap() {{ put("folders", MusicFolder.toPathList(criteria.getMusicFolders())); put("username", username); - put("count", criteria.getCount()); put("fromYear", criteria.getFromYear()); put("toYear", criteria.getToYear()); put("genre", criteria.getGenre()); @@ -508,7 +516,7 @@ public class MediaFileDao extends AbstractDao { boolean joinAlbumRating = (criteria.getMinAlbumRating() != null || criteria.getMaxAlbumRating() != null); boolean joinStarred = (criteria.isShowStarredSongs() ^ criteria.isShowUnstarredSongs()); - String query = "select top :count " + prefix(COLUMNS, "media_file") + " from media_file "; + String query = "select " + prefix(QUERY_COLUMNS, "media_file") + " from media_file "; if (joinStarred) { query += "left outer join starred_media_file on media_file.id = starred_media_file.media_file_id and starred_media_file.username = :username "; @@ -587,7 +595,7 @@ public class MediaFileDao extends AbstractDao { query += " order by rand()"; - return namedQuery(query, rowMapper, args); + return namedQueryWithLimit(query, rowMapper, args, criteria.getCount()); } public int getAlbumCount(final List musicFolders) { @@ -649,7 +657,7 @@ public class MediaFileDao extends AbstractDao { } public void markNonPresent(Date lastScanned) { - int minId = queryForInt("select top 1 id from media_file where last_scanned != ? and present", 0, lastScanned); + int minId = queryForInt("select min(id) from media_file where last_scanned != ? and present", 0, lastScanned); int maxId = queryForInt("select max(id) from media_file where last_scanned != ? and present", 0, lastScanned); final int batchSize = 1000; @@ -661,7 +669,7 @@ public class MediaFileDao extends AbstractDao { } public void expunge() { - int minId = queryForInt("select top 1 id from media_file where not present", 0); + int minId = queryForInt("select min(id) from media_file where not present", 0); int maxId = queryForInt("select max(id) from media_file where not present", 0); final int batchSize = 1000; diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/MusicFolderDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/MusicFolderDao.java index 49dcdc3e..e83ee296 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/MusicFolderDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/MusicFolderDao.java @@ -36,7 +36,8 @@ import java.util.List; public class MusicFolderDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(MusicFolderDao.class); - private static final String COLUMNS = "id, path, name, enabled, changed"; + private static final String INSERT_COLUMNS = "path, name, enabled, changed"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final MusicFolderRowMapper rowMapper = new MusicFolderRowMapper(); /** @@ -45,7 +46,7 @@ public class MusicFolderDao extends AbstractDao { * @return Possibly empty list of all music folders. */ public List getAllMusicFolders() { - String sql = "select " + COLUMNS + " from music_folder"; + String sql = "select " + QUERY_COLUMNS + " from music_folder"; return query(sql, rowMapper); } @@ -55,7 +56,7 @@ public class MusicFolderDao extends AbstractDao { * @param musicFolder The music folder to create. */ public void createMusicFolder(MusicFolder musicFolder) { - String sql = "insert into music_folder (" + COLUMNS + ") values (null, ?, ?, ?, ?)"; + String sql = "insert into music_folder (" + INSERT_COLUMNS + ") values (?, ?, ?, ?)"; update(sql, musicFolder.getPath(), musicFolder.getName(), musicFolder.isEnabled(), musicFolder.getChanged()); Integer id = queryForInt("select max(id) from music_folder", 0); @@ -86,7 +87,7 @@ public class MusicFolderDao extends AbstractDao { } public List getMusicFoldersForUser(String username) { - String sql = "select " + prefix(COLUMNS, "music_folder") + " from music_folder, music_folder_user " + + String sql = "select " + prefix(QUERY_COLUMNS, "music_folder") + " from music_folder, music_folder_user " + "where music_folder.id = music_folder_user.music_folder_id and music_folder_user.username = ?"; return query(sql, rowMapper, username); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayQueueDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayQueueDao.java index a098c43b..28e32da7 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayQueueDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayQueueDao.java @@ -33,11 +33,12 @@ import org.libresonic.player.domain.SavedPlayQueue; */ public class PlayQueueDao extends AbstractDao { - private static final String COLUMNS = "id, username, current, position_millis, changed, changed_by"; + private static final String INSERT_COLUMNS = "username, current, position_millis, changed, changed_by"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final RowMapper rowMapper = new PlayQueueMapper(); public synchronized SavedPlayQueue getPlayQueue(String username) { - SavedPlayQueue playQueue = queryOne("select " + COLUMNS + " from play_queue where username=?", rowMapper, username); + SavedPlayQueue playQueue = queryOne("select " + QUERY_COLUMNS + " from play_queue where username=?", rowMapper, username); if (playQueue == null) { return null; } @@ -48,8 +49,8 @@ public class PlayQueueDao extends AbstractDao { public synchronized void savePlayQueue(SavedPlayQueue playQueue) { update("delete from play_queue where username=?", playQueue.getUsername()); - update("insert into play_queue(" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")", - null, playQueue.getUsername(), playQueue.getCurrentMediaFileId(), playQueue.getPositionMillis(), + update("insert into play_queue(" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")", + playQueue.getUsername(), playQueue.getCurrentMediaFileId(), playQueue.getPositionMillis(), playQueue.getChanged(), playQueue.getChangedBy()); int id = queryForInt("select max(id) from play_queue", 0); playQueue.setId(id); diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java index 4dc8dc2a..0754a493 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/PlayerDao.java @@ -35,8 +35,9 @@ import java.util.*; public class PlayerDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(PlayerDao.class); - private static final String COLUMNS = "id, name, type, username, ip_address, auto_control_enabled, m3u_bom_enabled, " + - "last_seen, cover_art_scheme, transcode_scheme, dynamic_ip, technology, client_id"; + private static final String INSERT_COLUMNS = "name, type, username, ip_address, auto_control_enabled, m3u_bom_enabled, " + + "last_seen, cover_art_scheme, transcode_scheme, dynamic_ip, technology, client_id"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private PlayerRowMapper rowMapper = new PlayerRowMapper(); private Map playlists = Collections.synchronizedMap(new HashMap()); @@ -47,7 +48,7 @@ public class PlayerDao extends AbstractDao { * @return Possibly empty list of all users. */ public List getAllPlayers() { - String sql = "select " + COLUMNS + " from player"; + String sql = "select " + QUERY_COLUMNS + " from player"; return query(sql, rowMapper); } @@ -61,10 +62,10 @@ public class PlayerDao extends AbstractDao { */ public List getPlayersForUserAndClientId(String username, String clientId) { if (clientId != null) { - String sql = "select " + COLUMNS + " from player where username=? and client_id=?"; + String sql = "select " + QUERY_COLUMNS + " from player where username=? and client_id=?"; return query(sql, rowMapper, username, clientId); } else { - String sql = "select " + COLUMNS + " from player where username=? and client_id is null"; + String sql = "select " + QUERY_COLUMNS + " from player where username=? and client_id is null"; return query(sql, rowMapper, username); } } @@ -76,7 +77,7 @@ public class PlayerDao extends AbstractDao { * @return The player with the given ID, or null if no such player exists. */ public Player getPlayerById(String id) { - String sql = "select " + COLUMNS + " from player where id=?"; + String sql = "select " + QUERY_COLUMNS + " from player where id=?"; return queryOne(sql, rowMapper, id); } @@ -92,7 +93,7 @@ public class PlayerDao extends AbstractDao { } int id = existingMax + 1; player.setId(String.valueOf(id)); - String sql = "insert into player (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")"; + String sql = "insert into player (" + QUERY_COLUMNS + ") values (" + questionMarks(QUERY_COLUMNS) + ")"; update(sql, player.getId(), player.getName(), player.getType(), player.getUsername(), player.getIpAddress(), player.isAutoControlEnabled(), player.isM3uBomEnabled(), player.getLastSeen(), CoverArtScheme.MEDIUM.name(), diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/PlaylistDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/PlaylistDao.java index e41e3781..e653297b 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/PlaylistDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/PlaylistDao.java @@ -40,18 +40,19 @@ import java.util.TreeMap; public class PlaylistDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(PlaylistDao.class); - private static final String COLUMNS = "id, username, is_public, name, comment, file_count, duration_seconds, " + - "created, changed, imported_from"; + private static final String INSERT_COLUMNS = "username, is_public, name, comment, file_count, duration_seconds, " + + "created, changed, imported_from"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private final RowMapper rowMapper = new PlaylistMapper(); public List getReadablePlaylistsForUser(String username) { List result1 = getWritablePlaylistsForUser(username); - List result2 = query("select " + COLUMNS + " from playlist where is_public", rowMapper); - List result3 = query("select " + prefix(COLUMNS, "playlist") + " from playlist, playlist_user where " + - "playlist.id = playlist_user.playlist_id and " + - "playlist.username != ? and " + - "playlist_user.username = ?", rowMapper, username, username); + List result2 = query("select " + QUERY_COLUMNS + " from playlist where is_public", rowMapper); + List result3 = query("select " + prefix(QUERY_COLUMNS, "playlist") + " from playlist, playlist_user where " + + "playlist.id = playlist_user.playlist_id and " + + "playlist.username != ? and " + + "playlist_user.username = ?", rowMapper, username, username); // Put in sorted map to avoid duplicates. SortedMap map = new TreeMap(); @@ -68,20 +69,20 @@ public class PlaylistDao extends AbstractDao { } public List getWritablePlaylistsForUser(String username) { - return query("select " + COLUMNS + " from playlist where username=?", rowMapper, username); + return query("select " + QUERY_COLUMNS + " from playlist where username=?", rowMapper, username); } public Playlist getPlaylist(int id) { - return queryOne("select " + COLUMNS + " from playlist where id=?", rowMapper, id); + return queryOne("select " + QUERY_COLUMNS + " from playlist where id=?", rowMapper, id); } public List getAllPlaylists() { - return query("select " + COLUMNS + " from playlist", rowMapper); + return query("select " + QUERY_COLUMNS + " from playlist", rowMapper); } public synchronized void createPlaylist(Playlist playlist) { - update("insert into playlist(" + COLUMNS + ") values(" + questionMarks(COLUMNS) + ")", - null, playlist.getUsername(), playlist.isShared(), playlist.getName(), playlist.getComment(), + update("insert into playlist(" + INSERT_COLUMNS + ") values(" + questionMarks(INSERT_COLUMNS) + ")", + playlist.getUsername(), playlist.isShared(), playlist.getName(), playlist.getComment(), 0, 0, playlist.getCreated(), playlist.getChanged(), playlist.getImportedFrom()); int id = queryForInt("select max(id) from playlist", 0); diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/PodcastDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/PodcastDao.java index b61d870b..3940435e 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/PodcastDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/PodcastDao.java @@ -36,9 +36,11 @@ import org.libresonic.player.domain.PodcastStatus; */ public class PodcastDao extends AbstractDao { - private static final String CHANNEL_COLUMNS = "id, url, title, description, image_url, status, error_message"; - private static final String EPISODE_COLUMNS = "id, channel_id, url, path, title, description, publish_date, " + - "duration, bytes_total, bytes_downloaded, status, error_message"; + private static final String CHANNEL_INSERT_COLUMNS = "url, title, description, image_url, status, error_message"; + private static final String CHANNEL_QUERY_COLUMNS = "id, " + CHANNEL_INSERT_COLUMNS; + private static final String EPISODE_INSERT_COLUMNS = "channel_id, url, path, title, description, publish_date, " + + "duration, bytes_total, bytes_downloaded, status, error_message"; + private static final String EPISODE_QUERY_COLUMNS = "id, " + EPISODE_INSERT_COLUMNS; private PodcastChannelRowMapper channelRowMapper = new PodcastChannelRowMapper(); private PodcastEpisodeRowMapper episodeRowMapper = new PodcastEpisodeRowMapper(); @@ -50,8 +52,9 @@ public class PodcastDao extends AbstractDao { * @return The ID of the newly created channel. */ public synchronized int createChannel(PodcastChannel channel) { - String sql = "insert into podcast_channel (" + CHANNEL_COLUMNS + ") values (" + questionMarks(CHANNEL_COLUMNS) + ")"; - update(sql, null, channel.getUrl(), channel.getTitle(), channel.getDescription(), channel.getImageUrl(), + String sql = "insert into podcast_channel (" + CHANNEL_INSERT_COLUMNS + ") values (" + questionMarks( + CHANNEL_INSERT_COLUMNS) + ")"; + update(sql, channel.getUrl(), channel.getTitle(), channel.getDescription(), channel.getImageUrl(), channel.getStatus().name(), channel.getErrorMessage()); return getJdbcTemplate().queryForObject("select max(id) from podcast_channel", Integer.class); @@ -63,7 +66,7 @@ public class PodcastDao extends AbstractDao { * @return Possibly empty list of all Podcast channels. */ public List getAllChannels() { - String sql = "select " + CHANNEL_COLUMNS + " from podcast_channel"; + String sql = "select " + CHANNEL_QUERY_COLUMNS + " from podcast_channel"; return query(sql, channelRowMapper); } @@ -71,7 +74,7 @@ public class PodcastDao extends AbstractDao { * Returns a single Podcast channel. */ public PodcastChannel getChannel(int channelId) { - String sql = "select " + CHANNEL_COLUMNS + " from podcast_channel where id=?"; + String sql = "select " + CHANNEL_QUERY_COLUMNS + " from podcast_channel where id=?"; return queryOne(sql, channelRowMapper, channelId); } @@ -102,8 +105,9 @@ public class PodcastDao extends AbstractDao { * @param episode The Podcast episode to create. */ public void createEpisode(PodcastEpisode episode) { - String sql = "insert into podcast_episode (" + EPISODE_COLUMNS + ") values (" + questionMarks(EPISODE_COLUMNS) + ")"; - update(sql, null, episode.getChannelId(), episode.getUrl(), episode.getPath(), + String sql = "insert into podcast_episode (" + EPISODE_INSERT_COLUMNS + ") values (" + questionMarks( + EPISODE_INSERT_COLUMNS) + ")"; + update(sql, episode.getChannelId(), episode.getUrl(), episode.getPath(), episode.getTitle(), episode.getDescription(), episode.getPublishDate(), episode.getDuration(), episode.getBytesTotal(), episode.getBytesDownloaded(), episode.getStatus().name(), episode.getErrorMessage()); @@ -116,7 +120,7 @@ public class PodcastDao extends AbstractDao { * reverse chronological order (newest episode first). */ public List getEpisodes(int channelId) { - String sql = "select " + EPISODE_COLUMNS + " from podcast_episode where channel_id = ? " + + String sql = "select " + EPISODE_QUERY_COLUMNS + " from podcast_episode where channel_id = ? " + "and status != ? order by publish_date desc"; return query(sql, episodeRowMapper, channelId, PodcastStatus.DELETED); } @@ -128,7 +132,8 @@ public class PodcastDao extends AbstractDao { * reverse chronological order (newest episode first). */ public List getNewestEpisodes(int count) { - String sql = "select " + EPISODE_COLUMNS + " from podcast_episode where status = ? and publish_date is not null " + + String sql = "select " + EPISODE_QUERY_COLUMNS + + " from podcast_episode where status = ? and publish_date is not null " + "order by publish_date desc limit ?"; return query(sql, episodeRowMapper, PodcastStatus.COMPLETED, count); } @@ -140,12 +145,12 @@ public class PodcastDao extends AbstractDao { * @return The episode or null if not found. */ public PodcastEpisode getEpisode(int episodeId) { - String sql = "select " + EPISODE_COLUMNS + " from podcast_episode where id=?"; + String sql = "select " + EPISODE_QUERY_COLUMNS + " from podcast_episode where id=?"; return queryOne(sql, episodeRowMapper, episodeId); } public PodcastEpisode getEpisodeByUrl(String url) { - String sql = "select " + EPISODE_COLUMNS + " from podcast_episode where url=?"; + String sql = "select " + EPISODE_QUERY_COLUMNS + " from podcast_episode where url=?"; return queryOne(sql, episodeRowMapper, url); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/ShareDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/ShareDao.java index 702e4965..dc5ab836 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/ShareDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/ShareDao.java @@ -38,7 +38,8 @@ import org.libresonic.player.domain.Share; */ public class ShareDao extends AbstractDao { - private static final String COLUMNS = "id, name, description, username, created, expires, last_visited, visit_count"; + private static final String INSERT_COLUMNS = "name, description, username, created, expires, last_visited, visit_count"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private ShareRowMapper shareRowMapper = new ShareRowMapper(); private ShareFileRowMapper shareFileRowMapper = new ShareFileRowMapper(); @@ -49,8 +50,8 @@ public class ShareDao extends AbstractDao { * @param share The share to create. The ID of the share will be set by this method. */ public synchronized void createShare(Share share) { - String sql = "insert into share (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")"; - update(sql, null, share.getName(), share.getDescription(), share.getUsername(), share.getCreated(), + String sql = "insert into share (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")"; + update(sql, share.getName(), share.getDescription(), share.getUsername(), share.getCreated(), share.getExpires(), share.getLastVisited(), share.getVisitCount()); int id = getJdbcTemplate().queryForObject("select max(id) from share", Integer.class); @@ -63,17 +64,17 @@ public class ShareDao extends AbstractDao { * @return Possibly empty list of all shares. */ public List getAllShares() { - String sql = "select " + COLUMNS + " from share"; + String sql = "select " + QUERY_COLUMNS + " from share"; return query(sql, shareRowMapper); } public Share getShareByName(String shareName) { - String sql = "select " + COLUMNS + " from share where name=?"; + String sql = "select " + QUERY_COLUMNS + " from share where name=?"; return queryOne(sql, shareRowMapper, shareName); } public Share getShareById(int id) { - String sql = "select " + COLUMNS + " from share where id=?"; + String sql = "select " + QUERY_COLUMNS + " from share where id=?"; return queryOne(sql, shareRowMapper, id); } diff --git a/libresonic-main/src/main/java/org/libresonic/player/dao/TranscodingDao.java b/libresonic-main/src/main/java/org/libresonic/player/dao/TranscodingDao.java index d3d11720..ad7c43e2 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/dao/TranscodingDao.java +++ b/libresonic-main/src/main/java/org/libresonic/player/dao/TranscodingDao.java @@ -36,7 +36,8 @@ import org.libresonic.player.domain.Transcoding; public class TranscodingDao extends AbstractDao { private static final Logger LOG = Logger.getLogger(TranscodingDao.class); - private static final String COLUMNS = "id, name, source_formats, target_format, step1, step2, step3, default_active"; + private static final String INSERT_COLUMNS = "name, source_formats, target_format, step1, step2, step3, default_active"; + private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS; private TranscodingRowMapper rowMapper = new TranscodingRowMapper(); /** @@ -45,7 +46,7 @@ public class TranscodingDao extends AbstractDao { * @return Possibly empty list of all transcodings. */ public List getAllTranscodings() { - String sql = "select " + COLUMNS + " from transcoding2"; + String sql = "select " + QUERY_COLUMNS + " from transcoding2"; return query(sql, rowMapper); } @@ -56,9 +57,9 @@ public class TranscodingDao extends AbstractDao { * @return All active transcodings for the player. */ public List getTranscodingsForPlayer(String playerId) { - String sql = "select " + COLUMNS + " from transcoding2, player_transcoding2 " + - "where player_transcoding2.player_id = ? " + - "and player_transcoding2.transcoding_id = transcoding2.id"; + String sql = "select " + QUERY_COLUMNS + " from transcoding2, player_transcoding2 " + + "where player_transcoding2.player_id = ? " + + "and player_transcoding2.transcoding_id = transcoding2.id"; return query(sql, rowMapper, playerId); } @@ -87,7 +88,7 @@ public class TranscodingDao extends AbstractDao { existingMax = 0; } transcoding.setId(existingMax + 1); - String sql = "insert into transcoding2 (" + COLUMNS + ") values (" + questionMarks(COLUMNS) + ")"; + String sql = "insert into transcoding2 (" + QUERY_COLUMNS + ") values (" + questionMarks(QUERY_COLUMNS) + ")"; update(sql, transcoding.getId(), transcoding.getName(), transcoding.getSourceFormats(), transcoding.getTargetFormat(), transcoding.getStep1(), transcoding.getStep2(), transcoding.getStep3(), transcoding.isDefaultActive()); diff --git a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml index cb7109c3..81b5bb36 100644 --- a/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml +++ b/libresonic-main/src/main/webapp/WEB-INF/applicationContext-db.xml @@ -8,15 +8,6 @@ - - - - - - - - - diff --git a/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java b/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java index 9617d227..f612c2b2 100644 --- a/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java +++ b/libresonic-main/src/test/java/org/libresonic/player/dao/DaoTestCaseBase.java @@ -43,7 +43,7 @@ public abstract class DaoTestCaseBase extends TestCase { protected DaoTestCaseBase() { DataSource dataSource = createDataSource(); - daoHelper = new GenericDaoHelper(new JdbcTemplate(dataSource), new NamedParameterJdbcTemplate(dataSource)); + daoHelper = new GenericDaoHelper(dataSource); runDatabaseMigration(dataSource); diff --git a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml index 82b5cf60..167f8bd1 100644 --- a/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml +++ b/libresonic-main/src/test/resources/org/libresonic/player/service/mediaScannerServiceTestCase/applicationContext-service.xml @@ -68,15 +68,6 @@ - - - - - - - - - From 667367280f11a3b99e6a574aa97d9f854be6525b Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Sun, 18 Dec 2016 22:35:58 -0700 Subject: [PATCH 06/11] Added testcase to reproduce liquibase failure Signed-off-by: Andrew DeMaria --- .../player/service/StartupTestCase.java | 32 + .../org/libresonic/player/util/FileUtils.java | 123 + .../db/pre-liquibase/db/libresonic.data | Bin 0 -> 1048576 bytes .../db/pre-liquibase/db/libresonic.lck | Bin 0 -> 16 bytes .../db/pre-liquibase/db/libresonic.log | 2884 +++++++++++++++++ .../db/pre-liquibase/db/libresonic.properties | 17 + 6 files changed, 3056 insertions(+) create mode 100644 libresonic-main/src/test/java/org/libresonic/player/service/StartupTestCase.java create mode 100644 libresonic-main/src/test/java/org/libresonic/player/util/FileUtils.java create mode 100644 libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.data create mode 100644 libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.lck create mode 100644 libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.log create mode 100644 libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.properties diff --git a/libresonic-main/src/test/java/org/libresonic/player/service/StartupTestCase.java b/libresonic-main/src/test/java/org/libresonic/player/service/StartupTestCase.java new file mode 100644 index 00000000..d183399b --- /dev/null +++ b/libresonic-main/src/test/java/org/libresonic/player/service/StartupTestCase.java @@ -0,0 +1,32 @@ +package org.libresonic.player.service; + +import junit.framework.TestCase; +import org.apache.commons.io.FileUtils; +import org.libresonic.player.TestCaseUtils; +import org.springframework.context.ApplicationContext; + +import java.io.File; + +public class StartupTestCase extends TestCase { + + private static String baseResources = "/org/libresonic/player/service/mediaScannerServiceTestCase/"; + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + public void testStartup() throws Exception { + String homeParent = TestCaseUtils.libresonicHomePathForTest(); + System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest()); + TestCaseUtils.cleanLibresonicHomeForTest(); + File dbDirectory = new File(homeParent, "/db"); + FileUtils.forceMkdir(dbDirectory); + org.libresonic.player.util.FileUtils.copyResourcesRecursively(getClass().getResource("/db/pre-liquibase/db"), new File(homeParent)); + + // load spring context + ApplicationContext context = TestCaseUtils.loadSpringApplicationContext(baseResources); + + } + +} diff --git a/libresonic-main/src/test/java/org/libresonic/player/util/FileUtils.java b/libresonic-main/src/test/java/org/libresonic/player/util/FileUtils.java new file mode 100644 index 00000000..a0d62ad9 --- /dev/null +++ b/libresonic-main/src/test/java/org/libresonic/player/util/FileUtils.java @@ -0,0 +1,123 @@ +package org.libresonic.player.util; + +import org.apache.commons.lang.StringUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.JarURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.Enumeration; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +public class FileUtils { + public static boolean copyFile(final File toCopy, final File destFile) { + try { + return FileUtils.copyStream(new FileInputStream(toCopy), new FileOutputStream(destFile)); + } catch (final FileNotFoundException e) { + e.printStackTrace(); + } + return false; + } + + private static boolean copyFilesRecusively( + final File toCopy, final File destDir + ) { + assert destDir.isDirectory(); + + if (!toCopy.isDirectory()) { + return FileUtils.copyFile(toCopy, new File(destDir, toCopy.getName())); + } else { + final File newDestDir = new File(destDir, toCopy.getName()); + if (!newDestDir.exists() && !newDestDir.mkdir()) { + return false; + } + for (final File child : toCopy.listFiles()) { + if (!FileUtils.copyFilesRecusively(child, newDestDir)) { + return false; + } + } + } + return true; + } + + public static boolean copyJarResourcesRecursively( + final File destDir, final JarURLConnection jarConnection + ) throws IOException { + + final JarFile jarFile = jarConnection.getJarFile(); + + for (final Enumeration e = jarFile.entries(); e.hasMoreElements(); ) { + final JarEntry entry = e.nextElement(); + if (entry.getName().startsWith(jarConnection.getEntryName())) { + final String filename = StringUtils.removeStart( + entry.getName(), // + jarConnection.getEntryName()); + + final File f = new File(destDir, filename); + if (!entry.isDirectory()) { + final InputStream entryInputStream = jarFile.getInputStream(entry); + if (!FileUtils.copyStream(entryInputStream, f)) { + return false; + } + entryInputStream.close(); + } else { + if (!FileUtils.ensureDirectoryExists(f)) { + throw new IOException("Could not create directory: " + f.getAbsolutePath()); + } + } + } + } + return true; + } + + public static boolean copyResourcesRecursively(final URL originUrl, final File destination) { + try { + final URLConnection urlConnection = originUrl.openConnection(); + if (urlConnection instanceof JarURLConnection) { + return FileUtils.copyJarResourcesRecursively(destination, (JarURLConnection) urlConnection); + } else { + return FileUtils.copyFilesRecusively(new File(originUrl.getPath()), destination); + } + } catch (final IOException e) { + e.printStackTrace(); + } + return false; + } + + private static boolean copyStream(final InputStream is, final File f) { + try { + return FileUtils.copyStream(is, new FileOutputStream(f)); + } catch (final FileNotFoundException e) { + e.printStackTrace(); + } + return false; + } + + private static boolean copyStream(final InputStream is, final OutputStream os) { + try { + final byte[] buf = new byte[1024]; + + int len = 0; + while ((len = is.read(buf)) > 0) { + os.write(buf, 0, len); + } + is.close(); + os.close(); + return true; + } catch (final IOException e) { + e.printStackTrace(); + } + return false; + } + + private static boolean ensureDirectoryExists(final File f) { + return f.exists() || f.mkdir(); + } +} diff --git a/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.data b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.data new file mode 100644 index 0000000000000000000000000000000000000000..a0e913a20c6f27f8383a36ad9da9cd19debcae21 GIT binary patch literal 1048576 zcmeIuF%19!48yQO8Gn=mP^k!KFtF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ afB*pk1PBlyK!5-N0t5&UAV7csfg$i5kN_b7 literal 0 HcmV?d00001 diff --git a/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.lck b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.lck new file mode 100644 index 0000000000000000000000000000000000000000..56a95aa565687c714d4111fa99b68e6f5b862f1e GIT binary patch literal 16 XcmeYW4)pQyclKsrV2l*?l+FVHA%g>> literal 0 HcmV?d00001 diff --git a/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.log b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.log new file mode 100644 index 00000000..ac516fd1 --- /dev/null +++ b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.log @@ -0,0 +1,2884 @@ +CREATE USER SA PASSWORD "" ADMIN +/*C1*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C2*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C3*/SET SCHEMA PUBLIC +CONNECT USER SA +set property "hsqldb.cache_file_scale" 8 +DISCONNECT +/*C4*/SET SCHEMA PUBLIC +CONNECT USER SA +create table version (version int not null) +DISCONNECT +/*C5*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(1) +DISCONNECT +/*C6*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C7*/SET SCHEMA PUBLIC +CONNECT USER SA +create table role (id int not null,name varchar not null,primary key (id)) +DISCONNECT +/*C8*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(1,'admin') +DISCONNECT +/*C9*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(2,'download') +DISCONNECT +/*C10*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(3,'upload') +DISCONNECT +/*C11*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(4,'playlist') +DISCONNECT +/*C12*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(5,'coverart') +DISCONNECT +/*C13*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C14*/SET SCHEMA PUBLIC +CONNECT USER SA +create table user (username varchar not null,password varchar not null,primary key (username)) +DISCONNECT +/*C15*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER VALUES('admin','admin') +DISCONNECT +/*C16*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C17*/SET SCHEMA PUBLIC +CONNECT USER SA +create table user_role (username varchar not null,role_id int not null,primary key (username, role_id),foreign key (username) references user(username),foreign key (role_id) references role(id)) +DISCONNECT +/*C18*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER_ROLE VALUES('admin',1) +DISCONNECT +/*C19*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER_ROLE VALUES('admin',2) +DISCONNECT +/*C20*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER_ROLE VALUES('admin',3) +DISCONNECT +/*C21*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER_ROLE VALUES('admin',4) +DISCONNECT +/*C22*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO USER_ROLE VALUES('admin',5) +DISCONNECT +/*C23*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C24*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(2) +DISCONNECT +/*C25*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C26*/SET SCHEMA PUBLIC +CONNECT USER SA +create table music_folder (id identity,path varchar not null,name varchar not null,enabled boolean not null) +DISCONNECT +/*C27*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO MUSIC_FOLDER VALUES(0,'/var/music','Music',TRUE) +DISCONNECT +/*C28*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C29*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table music_file_info (id identity,path varchar not null,rating int,comment varchar,play_count int,last_played datetime) +DISCONNECT +/*C30*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_music_file_info_path on music_file_info(path) +DISCONNECT +/*C31*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C32*/SET SCHEMA PUBLIC +CONNECT USER SA +create table internet_radio (id identity,name varchar not null,stream_url varchar not null,homepage_url varchar,enabled boolean not null) +DISCONNECT +/*C33*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C34*/SET SCHEMA PUBLIC +CONNECT USER SA +create table player (id int not null,name varchar,type varchar,username varchar,ip_address varchar,auto_control_enabled boolean not null,last_seen datetime,cover_art_scheme varchar not null,transcode_scheme varchar not null,primary key (id)) +DISCONNECT +/*C35*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C36*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add dynamic_ip boolean default true not null +DISCONNECT +/*C37*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C38*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(6,'comment') +DISCONNECT +/*C39*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',6) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C40*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C41*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(3) +DISCONNECT +/*C42*/SET SCHEMA PUBLIC +CONNECT USER SA +drop index idx_music_file_info_path +DISCONNECT +/*C43*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table music_file_info alter column path varchar_ignorecase not null +DISCONNECT +/*C44*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_music_file_info_path on music_file_info(path) +DISCONNECT +/*C45*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C46*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user add bytes_streamed bigint default 0 not null +DISCONNECT +/*C47*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user add bytes_downloaded bigint default 0 not null +DISCONNECT +/*C48*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user add bytes_uploaded bigint default 0 not null +DISCONNECT +/*C49*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C50*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(4) +DISCONNECT +/*C51*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C52*/SET SCHEMA PUBLIC +CONNECT USER SA +create table user_settings (username varchar not null,locale varchar,theme_id varchar,final_version_notification boolean default true not null,beta_version_notification boolean default false not null,main_caption_cutoff int default 35 not null,main_track_number boolean default true not null,main_artist boolean default true not null,main_album boolean default false not null,main_genre boolean default false not null,main_year boolean default false not null,main_bit_rate boolean default false not null,main_duration boolean default true not null,main_format boolean default false not null,main_file_size boolean default false not null,playlist_caption_cutoff int default 35 not null,playlist_track_number boolean default false not null,playlist_artist boolean default true not null,playlist_album boolean default true not null,playlist_genre boolean default false not null,playlist_year boolean default true not null,playlist_bit_rate boolean default false not null,playlist_duration boolean default true not null,playlist_format boolean default true not null,playlist_file_size boolean default true not null,primary key (username),foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C53*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C54*/SET SCHEMA PUBLIC +CONNECT USER SA +create table transcoding (id identity,name varchar not null,source_format varchar not null,target_format varchar not null,step1 varchar not null,step2 varchar,step3 varchar,enabled boolean not null) +DISCONNECT +/*C55*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(0,'wav > mp3','wav','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C56*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(1,'flac > mp3','flac','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C57*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(2,'ogg > mp3','ogg','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C58*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(3,'wma > mp3','wma','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C59*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(4,'m4a > mp3','m4a','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,FALSE) +DISCONNECT +/*C60*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(5,'aac > mp3','aac','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,FALSE) +DISCONNECT +/*C61*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(6,'ape > mp3','ape','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C62*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(7,'mpc > mp3','mpc','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C63*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(8,'mv > mp3','mv','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C64*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(9,'shn > mp3','shn','mp3','ffmpeg -i %s -v 0 -f wav -','lame -b %b --tt %t --ta %a --tl %l -S --resample 44.1 - -',NULL,TRUE) +DISCONNECT +/*C65*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C66*/SET SCHEMA PUBLIC +CONNECT USER SA +create table player_transcoding (player_id int not null,transcoding_id int not null,primary key (player_id, transcoding_id),foreign key (player_id) references player(id) on delete cascade,foreign key (transcoding_id) references transcoding(id) on delete cascade) +DISCONNECT +/*C67*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C68*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(5) +DISCONNECT +/*C69*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C70*/SET SCHEMA PUBLIC +CONNECT USER SA +create table user_rating (username varchar not null,path varchar not null,rating double not null,primary key (username, path),foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C71*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C72*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C73*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(6) +DISCONNECT +/*C74*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C75*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add last_fm_enabled boolean default false not null +DISCONNECT +/*C76*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add last_fm_username varchar null +DISCONNECT +/*C77*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add last_fm_password varchar null +DISCONNECT +/*C78*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C79*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add transcode_scheme varchar default 'OFF' not null +DISCONNECT +/*C80*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C81*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(7) +DISCONNECT +/*C82*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C83*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table music_file_info add enabled boolean default true not null +DISCONNECT +/*C84*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C85*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table transcoding add default_active boolean default true not null +DISCONNECT +/*C86*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C87*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(8) +DISCONNECT +/*C88*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C89*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add show_now_playing boolean default true not null +DISCONNECT +/*C90*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C91*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add selected_music_folder_id int default -1 not null +DISCONNECT +/*C92*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C93*/SET SCHEMA PUBLIC +CONNECT USER SA +create table podcast_channel (id identity,url varchar not null,title varchar,description varchar,status varchar not null,error_message varchar) +DISCONNECT +/*C94*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C95*/SET SCHEMA PUBLIC +CONNECT USER SA +create table podcast_episode (id identity,channel_id int not null,url varchar not null,path varchar,title varchar,description varchar,publish_date datetime,duration varchar,bytes_total bigint,bytes_downloaded bigint,status varchar not null,error_message varchar,foreign key (channel_id) references podcast_channel(id) on delete cascade) +DISCONNECT +/*C96*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C97*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(7,'podcast') +DISCONNECT +/*C98*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',7) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C99*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C100*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(9) +DISCONNECT +/*C101*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C102*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add client_side_playlist boolean default false not null +DISCONNECT +/*C103*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C104*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(10) +DISCONNECT +/*C105*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C106*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user add ldap_authenticated boolean default false not null +DISCONNECT +/*C107*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C108*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add party_mode_enabled boolean default false not null +DISCONNECT +/*C109*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C110*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(11) +DISCONNECT +/*C111*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C112*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add now_playing_allowed boolean default true not null +DISCONNECT +/*C113*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C114*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add web_player_default boolean default false not null +DISCONNECT +/*C115*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C116*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(8,'stream') +DISCONNECT +/*C117*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',8) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C118*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C119*/SET SCHEMA PUBLIC +CONNECT USER SA +create table system_avatar (id identity,name varchar,created_date datetime not null,mime_type varchar not null,width int not null,height int not null,data binary not null) +DISCONNECT +/*C120*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C121*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(0,'Formal','2016-12-18 21:12:00.007000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000f004944415478dacd5a7974947596bdb5ef9554964a62c8068190216153028d1a65115004c1010c48cb36f4008ab8701ab4675ac6f634d88b362ed86cb20b38b2c9a2a8806c4dc24e904042c89e54524955a5f6bd6adefb209e33f3c70c1206f872be93a4f22defbee5befb7ebf8870178f0953a617198d89a30c86b85e628958e776791cb6765ba9d7ebdbb96dc3aa0377f35d1d87e86e3c647cd14b0b7af7eebde89911c353928c890887c3b03b9db0586d68b55851595513bd5e51713e120a8eddb26e65d3030360c2e4692ab556bb77c6b4978675cb4a83cfe787a9b90dd7ab6bd0dc62a6df7d884422108bc4088643a8a9aaaed8bee1ef390f0480d1cf1765f4e89e736cce6fa6a7cb241294955fc7c9e2f370793cd06ad408874270b9dc70381df0d0673ebf1f12ba4e25977dfee5a6d5b3ee2b8061cf8ccb1b3cf8d1c3afcc999568369b71b2e41ca58a0d6aa5020d8d4d68ac6b8097bc1f26ef47225184222164656662e0807e38517c0676abe5dd5ddb36bc735f008c1e5fd46ff853c30e4f9b323996721bdf1efc0e959537d0d6da46e9d30c994c019d5e07b1588c50282c78bd575e2e460c1f82d22b65387fa11466734bcdd16f7767dd7300fdfa0fc82e1c31f674d1a4898683878ee2e8a1ef515d791d0e9b0d4a4a1bb54a0d914804b94206954a035d4c0ce2e20c58f0ca1c9c2bbd8c63c74fa2ddee80dbe5b4f7e89a91b479dd4aff3d05f0ec9809e9972e975d932a14aaf8842468f47a448871dc0e3b9c8e7644c8e34a950a0a85026a9d5678fcac195361888bc3ce3dfb60b5b5c346609d0e87272fb77bc617eb57b5dd53007c74cbe9b3aaa9ae76b65c2e87542683442a87482285984e8954422924470c795e229542af9163d1e2c53874ec241aa9369c44adcd9466a150d0dbb35b66e6d68d6bccf71cc0cbb3a7e76624a84afd3e8fd4e7f5c21708c14f67bbd38b16ab0b263a03c1307a754b419fbe7da04ac9c58daa6ad8ed76381c0e026022903277669794d42f377f6ebfe7008effb02fc9a097d728556a659418c6d56e47bbad154ebb15c1801f5eaf1f7ebf0fa90fa5e0f4d506d438e408057c82f11c81b6b636e8b41a4b466a9271cbfad5917b0ee09b3d5f2a0c2ab139ce68d46b7506488875224493edd636b435137dba9c101103494551ec3b721aa5f55e7a49140e970b528958686e7aadeacae103bbf23a6bfc1d01e0e3e8fead4dc624634a4c5c12d5819cf83e8c30793f409e765191ba5d76f8bd4ecafd33d8f4cd594c1cf7341a6a6ea0f84239f454d0d1807b43e9b9e2e9f70dc00fbb37961a13e2f3e392ba50f14a04b9c0e9130a52f30afa110c0661b79870e1c215fc79cdd7d8bb79398a4f1dc7c23f6e208a55a0e0913ed3bfd9bf7bc37d037070e7a64d713af9d48454ee4562201a11a2100a78e96420214aa73a621e138a2f5561c6a4513878f8047effc12624a7a4ba5e7bfde5f4450b5fb7dd3700fb776c9aa793853e4d4eeb7aeb2922d23e41ea03418a449069124d351542312bd51a90bcc6aa8dbbb1f1abbd1836ec9923870e1d187a378cbf63007bb6afcb5089fd15c90fa5c9255403514aa12835b430294e6e6c5e9f074d55150847a9b12995506a0d7871ee1258edf6e8a2458b9f5fb6f4ddddf715001fbbd6ffad2a3535254ba1540b3510a11462e3198cd36143737d8d501f62b1080a8d1eef7db801265bb0bcb1bea2e7dd32be530076acff788d41a798a58b31dc345ca8038a047d599b9b8856cd42776651e7220a4d3026e31fa58d6ffde5e315cb1e08005facfd284f270d5c34c41b256c7c341a1522c1cdcd545b49ddd90f995c063f0d39815004e919e90840b56efc4bafcc7c2000f0b17de5b2cb86186d1ef7024e21117db9287d5a9b1ba150abe1f578616eb1e2e1418310f03a10511983df1797bfb0e2a3bfec7a2000ecd9f2e93879c4bf83c41c73a910014b4b13157310ad660b5a5aad18327c0449ea383435d420be6b7facd8b0c3de2b37a7df3bbf5b547ddf01bc3a7fbeaa77b784ea34a32ec9e37683cfc6ba5ad43798100c45316af4b3e84293588ba9119ac42c68e3bbe093956b71b1b4cc94dd2df3b9afbe587fe6be00983875c658abd5fe626d8369a4541cd64f1dffb4a8202f03ab3ff910519a8533c8e811cf8e819ee6050b89b794ecbe805c4f82ae1de72f5dc1ea8ddba1d3683c08b8df3e537262f93d0130bee8d7329a0136a9343143dc1eaf3144ccd3d8508fccacae786ef433183a281f3bd6bc8f446312d2b3ba09b51016c990dde73104a352b4908cd66ab5f8e96a39feb6622de2e2135079f51a5d9b5ea2d769161cd8b5bde4ff15c092a57f3d626eb33fc99281079986fa7a1a1b5528282840efdc6e18d43f1f677fdc0d8fd38a08199cd9b30f52327261e339804e66a9d8d8182cff6c2dca6fdcbcb7f4fc594815d4e854ca505cac7eb756ad9abb6fe7b65f34a5dd1680d77efb766fb93af6424a7292b8c9d42c88b58af2ab1843696277ba3064503ff4ed9b474ab40df6760be28ca9f46429cdbfed428fe0e256a99428bb568177977d8001830653f49a50567a112eaf0f1a8a0c5fa354c8ed0971b1ef7cb7f7abdb4eabdb02f0ca1b8b17ca35317feed93d1bb5f50d28bbf293903a031ee98fe2e212fcdb9b2f2331310175355548e9920e1f19c57ae866878e404aa3a6dbedc1ccb9afa2e05785e049ced2de8eaba597606e6d855aab1356f30483a2404a4ae2369a1726df3500b3e6bdbed7170c3f9b9393031345e07af9353c5230885e6444c9b11fb165e31a9c3e518c596f2dc3ae8d1f233b2b8d008404a348e709cb2b33e7cc4772972cf4c9cbc599f3972023597db1e43402a49f740603d58c4388ac5ca9405b8b3994d525a5c7c1fd3bff4faabd2d0033e6be5ede35bb7b0f8bc52a0ce5b5b5b5e8d7bf3fe434b8a7c4eb50f4cfcf61fc07dfa2d2aec338f96562a325a4fb95c2bd9cfbf3de789bbe8b316ae4505cabb881d6360b341a0d8e1efa01f189462424250914ec0f0470f6cc695eb5c0938f0f9ebd63eb86357705c09499f35a0a0a061acf9dbf809a9a1ab8e865f9f9f908f8bca8a928c7279f2dc79f9a62f0dd92a598362c1b2386f4c1c8214f40425ae8cddfbd8716730b5e983811a66633da6f799ae6626c59bf1efd0a06424b74ebb03bf0cd817dc2dccc43cfb0271f5bbe6dc39ad73a0d60d6dcf95abbcb6f224f697f2a2d859384196b9fb4b474343736224ea7c4a7ffb9138f9f0840ba7e13de1b9f81c2c27eb0d9ec387ce4288e1f3f89294545a8a9ab07d12fd1673c9212e3b167e76e61a5a270d8506a7c0d3875f2249ae8793727bc28060de87761df8eadfd3b0d60c1c2c5ddca2aaacb7cfe80dc626923752911f25baf8f4173431d268c1e819c37dfc7abe73c4858f331fef0623e664c1e83ef8e1763e91fdfc798316370bdb28a803b91909088a464238e1cfc8118ca86c14f0ca1e6664775d50db4b4b4101be909448350f8f1b1319e195327a52f7c6381a553005e983a7d40557d7331b188384039ca3d20428517136b808964c3a4899370e5a939385fef8674e5fb58bff45f90db330d53a6ce447ad76c989b5b04c09ceb1a1278174a4e214a123bbfdfc39436ed428d586d36646464a0f2fa75345034b87e78b69effaf335e78ebb76f7ed929004f8e1a3bcee670ef626a0c120009018852338b258166a197e53e3e0ae50f4f42c8da0e7cbd051fbe3b0d5f6cdd4ce9e1a162359322f50860991eebababa0d6e990959d0d76869d0cef929e46539b5ab0e4e285f3f0509af1d2a49bfa4bd18471eb3efa60e9cc4e0118583872bedbe7fb88372f424c73f470f628cfb96e9b19a1845e880e7c0e20f589d263e89e2181d7eb24437cc21a90442685cddc4a3469271a4d838e524f22110bc5eaa6827e62d8706114bd515989a6a626a17ff0f224b3d21385bf3abb6dfdea019d02f0f4f393ffa3bab6e1f7dc7c58f3ab6948f7fbfdd0c7e811f4bad1e6d3c1903f02416b2ba4969fd025554d8607040f8ba85e4c75750891bc4e4c7e880c930af4c91b1efc0c0f011832622409be56545555c14d0411161a9f949ee145d7ac0cd3b1835f3fd43900e38b56dda8ae9bed268fb0e7b4d435d9b36aca679e029acc3ee8d30642e4b72125d6c5c44f523a24506513f50b19e5b39634107faea3f4e102e51193320a3e2aec418f1592d06ba22236d3f4767353444e69ca0ea052f1bfbdf0d5bc59d35faabc63008523c69e6c6a691deca290736eb2111c0d5e7dd66ad568a83343199387e4043f342a2018a6a19ee8d16c3241131323ac4a70a1b2e799c19c4e870082d3919762faf67f848c6f160c66d1c7e9c975266c14daacf8c3bf2f9a3867f6ccafee18c0c38f0ebd62b139fe89733626365660128e80c02c090968a86984529d89ec1e1a81bf5b4936b75b2dd0c7c50bbb337c3270def8e0fb387578d077bb88b52884d9dd73042a6553dadb6d0230e92d00ed04e0a921856f6dfafcefcbee18406e5e9f6c8f3ff4b5d71fea1913172f52c8e58211ecb178d2f416731b0c7129484e35a0a1b68e58c745f7f4a6a6e546c07f73038623c0d70b454d8038bd78b59a257597b434e13abea6a336645299b0d2c78d2e3539f1b39263dfcfbb63001d475676ceaf65daf88ddc29d93b9caf3ca0f020cf4a9497cd99321368a03192b66136e16bd85836aa236abc31c2d1646375747f527232783812538418a450fcbcd2479fb1268a37c4ec3ff78fc393c804f646f88e01f0b53d7b0f6809439218216fb131fc22de3e8ad0cf6eb70bfad838a1c9318bc8280df860433a94297b995fc8db4c6c34efa9c51a62859d1d29e926febbff56d4f81e06a0908b2f5ebd50c2d29ad7521db780446f9dbf6c26ee969d932e516a8e05a3920c2e447e8652a912f2564bc5cd80f8e41ceff89923d071f0e77e7f40c879fe1bef17f030a322209c5a0c9c01b065dc343952a2b0bfa2b2ece262fae8329dbccbefed30fe1703e8b023b37beeb2604434472255e8d8282515b6e496d16c047ff6f342177b5d24fa1980b0e94d1c2f128985dfb9c099a9f83ba717af6c476ed58cc765f73badcd4b1aeb6ab6d0ed260e4c6752e87f1e8a8cec9ebf91ca14b3e9cc8e40ac242f8a04cf8b6f1a27bce096f11d916100025592c7d98d9c6a2a5e00a69301b0494e873de276582ba3a1c0f4f2b2d253ff6b5e7702c07f03d32337bf90e86f4c14e247232251063d5ac7db9754f462fe5f890e205e8f3b4a5e0e45c2419b281a6e134b6546920ef4250b69f55abbdb693f66b75a56d4d756ddd69ad1dd02f0f3316ed2d46ceaa605a49d7a7bbdde9ec140302d1c8d281880442cf507033e8b58840af2fc8f14a3eb0430874ebd42aef0242627576f5ebbe2d42f79df7f011f72aa9a9cdb81e50000000049454e44ae426082') +DISCONNECT +/*C122*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C123*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(1,'Engineer','2016-12-18 21:12:00.009000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000010fd4944415478dab55909741455bafe6e2ddd5dbda44327212b6b4890459618135056258aa82c2e6c0ee864c695798a1c9ca3c83c741cde7364c00df4896fdc9efb43054541410185440e6078022a20494c02211b49ba3bbd56d57dffad4e94715c60349553e7767557dffebfffffbe7fa930fc0ac7c2850b110e87c1189363b198c139873825c6664b9274a3a2aa059ac3a16a4ea7ee743a0f1886beda308cd76caa0a499651525202bfdfaf2a921c3769bf8913279ef16fb35f6a7c696929dc6e37229188d88bece6e904e4465aa7d3f54002a0a9aa2a1100b8e83e8fc7637adceeb0cbed3aa2c8f207b2acacb3dbedfb245902d70dd62335853b350dc16007c68e1bd7fd0066ce9c898c8c0c669a26d7757d1219fc32199f86041a1115c8e465070120efc3e512a7050449740af0f4fe3655555645a3b18d142db89d5e84c27e148f1ad5fd0066cf9e4d36324e86f7cdcccc3c108d46dd04264ec6cbb4328b4a92048a02a393db6c36f11ae4754e869b0442eed1a307a353807b9931e916ba3f202b32468c18d9bd00b66cd9828a8a0a292b2bcb2c2b2b7b9e0c9a5f5f5f1f27afaac47141276645800058bfc469a195d1b5c424ae2822321abcc95e9e9a9262f852525487ddbe9c6e5a1a8bc6e4abaebedae85600f3e6cd437b7bbba0495a717171d5debd7b9d74cdbd5e2f230f0b8f83780ea14c4956a092f78570559b6ad18a9b1ca66908eac130395715b996223487f62bf725b9d8927b97f26e05b062c50a890c3683c1e055449f37d6ad5b672a8ac288ef4c705c9c2624e4f89c48f3a870a832458359da881b94a9e8e7756e4546efe991950ccd5c6148f63fea26678ad3cb2fbff1de9fb5e1170158b3668decf3f98ca6a6a6071a1a1aee5dbf7ebd4e46ab82f31401d83527268fc8c125237ac1ed7281eca753b634c1251926a32810a7886026458a19117f80b7d59e03c5511fd465f4bde6cfdd0b60eddab5d2d0a143cd4f3ef9e4a5dadadab9a4099de82313e7598478336648166e993c948cb5c39bdd1faadd61b95be88233c93a49109611f41d9d87fd4ae8c4577f60aa630da55729e7f2bbcc6e05b079f366898a8eb97cf9f2f76a6a6a2edbb973a7210008038906b8737a0146e6661065185c495e7832fb5a858b116d440484f7058344aa62dcd4611a4ab4b9f67f156ffa2c33129403c7bf3406fe6665f70110c58bf8ce172d5ab49d2834bebcbc5c444049a44e867b66162337cb4782a5b449fcd13c3de04ccbb6b2101720ac083002600a102407aec45a4feec99cf8dba278a019d51b1f46b70278efbdf7d8b061c3f8d2a54b3f686d6d2d3970e080a1395db2619a70d814dc338b0064a61000853441f99faaaddde981232513926aa72c6458268838101e9235b5226d8d95eb576f1a906b7ccd73674d46fe752bba0fc0fcf9f3a58103079a3b76ec7833168d4eafacae317afadc320995b504a358327b1406f54ea3682870d813054ca5c82864bccd9b06c5e5a10088689804864a39dd1969ad3ff1ee4db7f5cf1e8268feec456cd0bc553f994a7f11006ac204df8d4020f050dc30176b081b375f3e5c912879563674a07fa60f393d93c9f38a95956caa024ab350c8684131d9e184eaf242b23bc9f70a4500724743f5f1fd6b970e509310e93bf1771856fa58f745a0b0b090480cd326e3e2964074eb98fc647352410eeb08c7909a9cc404f745e17288946a15312a6604401431ab3a5bbd121921db0884664a36a7d4d15277a2eca165b9a9839223bdc7cc6185b73cd97d11e8dfbfbf3086b5fb43b25d73548cece71d32a520d330c8cf1e97936b760773d849c03601200186aa2d194f27e941642bf147ec1115d920edc8f168a8cadf10cc837ecc70a70dc0057f78bafb22909b9b2b168972be49349ee4754a5b665d90a5a7247b6497dbc39cd4b051e5652202a289b329ff188104005812b69a59c3506291e09ed401a38b22edf5cc6ca9e4c50b9eea3e00246090df8409ec78739453dbbfb0a8bfebe14b4766981eaf8f795c2e66c463d01c82ff42c49d1a10cd5c170066b516d416719a737439160ebcc624790e6d2afb9c8a517c5b3702e83a7af7e98b3ea99a14a64844e2bcf4fcbedadae10332594a5a4f16ee08327b6713678958562cfa7c0f0008405c8fc7947838b05892e455223d5db5f4e5eeadc45d87a0d2fcb1994c24c293ade164b726576b2a4bcacd1d60462311895c0b8d6824e8a3746ae03b005600849e793c1696a2ed4d054c562b24c5c6e63df876f776a3a70398372e8b05c3715e7eb02e7fc2c85e7be3d1883b3d3d9d7b9392a5d6d6162b0b25002816ff4f8b80c5203a243d1afa82caf4b9dc88537f1ac74d8f6dfdd9dffe55008ccb03265c381691988eaafaf6e179d9de7da6a1cbc2b939bdfa306a3910ea085863a52277452061bcc8a2d413e9a41525ea3f75bbe2703e4ed752924d317fffc807dd0b60f20890619daf274e9093349b71ec44db2cb7437e55b7b2a229db89fb19995968693d85483864a55431c013086b5ca32088d14d8a4742c7937b0d18d452792848b519391919285db9a97b00dc703110d781b600ad7148465ce1e30acfe3e70dcdb67d79ac658b6e1a630311f1780534171b4c80f0a5a422d011420721a6cc6a35a1b45217c70cf2be6a4442d3a9986c2032496e87622e7d61cf19d972d6007e37498c8796f12c4a86073b4c4423a60034a323823f5d54d87fe4f0bc3cf3789b9fea4362a415854a78d549434d9cd26e9c6e669d204c1a27f568584c2ecb480a2c1aeae059599958f2dcee5f17c0bc0900395d781c7db29854d7a098e1609cda6494b892dc7f3c79323c29d06150b162e6b4b1a324c5aef1e6608845f5ef3221e5f944eb40980cea4489f8754624ba9032eb5bb2e2943dbe154663edeb58f3fe3367ecd03302507ab1f54001fff321d8ccf1628265f0b7f3e2818333970d1e36fab21ee17d28ffac867f75827327b53519291e3e62e068b485a32c188b230122f17885ba3fb8ec2a2ffb6c3fef9bde7e924b584e7b3fed50110fc520519635576d387346fc2c00e179bb422f68908a86c1832189186afef5c2924b6f3f77dc6f113ff4b82937ede28d44ed4f8f02eecea9313b3d0f9ea43cf8c31d0813952c4190f10a651f9fdb894f0e5472553fcaa61603e595d87fd28f9be8e33d6ed2f8500fccf24688e862f5bbbf00c034dadce702d1022c14016f0dda7ba7b9a26f4d9c7643c1c0898b79f3f6dbcd78e54792c34d2324cd5307eb8430c57c4b2725d154df8564b81d510a405ce8803e136d84c7a6f09af6283b72ec133ea7881a201b943dd5d00f37e2f7e4ace75d0a24eafdccf26a60ebde5f00604a21909e0446e2e4b1b89cea73186525d3e6e6e596fc25d6b4f34f6af8e04b8c8ce7aac4190d01a824af09dd12606beed592fb40718f43a8f16b50af4ce2576916302998d43a0cb8887f59b61ae72435b021bd60f823900e9c00a37341af1c3cd1da0469e50698775c013cbaf15f0020bc4f43157af92005fd0ecad991cd13c6155c5238f7a578eb91f56adb8e7bb84363545d3953a544b89bfc3427c7613d3e11cf7fa8de2265ecfd08455371eaab6de0213f42148d2113ae85963b06ef3e3c15b9b6af78af3430fa8e4963043e3f01a92a8ae9861f1b52dc909a0330fd61e0856d6709606a91451fd6da4cde57951b0afaa9cf5e72f32b3a1c3eb9feed6b20851a19b5fb3422720291001021038411e2da7a9a4869cb95de0fbde7ee4228184073431da6aedb8945532fc5a2f38762c5922928747c0ca7064ed461068d051de4b44f8fa1fd4410c34361d426d3d4d9d80efeface7f210261f2663fe4d8a25adda149d3afeb9f77c9725efff13239b0ff79aeb919d1865bde16c68b556c26128ea501a105315c92cb7326df875e1396e1c3434750f2c82bf0fa3cd87edb75f8f0c9db5128bf6e093f6690a3f4c416c7dba19455e2c5ec6ccc534260bbbe06dfb0fb2c015c350a52531bcc18932f9f30c8b9f18adbdf3474c3946bd65fcbe5989f5173099b9cf076e2895b82fb629512b9de02623dd0b5b971eec21adcf7d111dcfffabb5625bcf3b2f1187c781dce8dae8147a3c2181242074d35968ef8fe3af0cfdb911f3a85ca0c2fd853ef839f15807ba743f2b7c0ac0be0d98ba74cbebe68d6137afdeed56ad3ae5520ef5bd4b19d667c1710aa0356dab58c07aca64d0f71f42b59828fd3eec2a50f3d22dec5daebaf86b6fb39e2c9df6826065a098061265a14b2345ed90cb5ec6bdce9d6f008ed29af7c1bc6190398359a0c2103fa7b201df6e3f0d5373f382063c895c6d76ffe468a1caf609aeb7b003a5745bc96129110b4a2e2940022ea98cd83be377d8392bf6fc3d6ddfbf0feddb7e2d4874f22bfe53f886a09ed08ca0aef53c6351a0390f7d5e2953437ae233a4a4b5e8579c600269f47d9e00be054187d6f9ce63b72cd1daf28861ee747d7cd94245d7494ff48992e1022955a40a484889388db34e3c0645481a9180c9cb6020bab2fc2a32fbe88fb4ae76064ed26380e2f83a0a338440448076235dac2902b6ab129af27a6d01eecb667ce824253cf27e51307a3315c7ac58c82cd57defa82d170648b54b5f14e462dfdb7869f0e40392d02726714c429b24a30ca10261ae5e7e5e361df2aacdd548671c505b859fa9c3cf567685ae23b9acda290f8b781d14411f8ac0eaff574638ec8c84b5f3b8b084c2f82d472022689eaa66be6cff8af0973ff6654ed5cadd4ee7818d450fe13ef4f07a09c064078540010f40844885674fd42e6ddd878b2879589ee761d41ea914760d2f77c6e8a180189c6131aa86e81babb128b49032b898af263ef9e85066614410eb4c0881ab87fee2d0bfebd68caa2f8e12dcb95e3e5cf3097e7bbdcff2d90d38c57e40400d1758aba108a75f19bfaa028c7ebb6f1d8e49a2108836b8d0a8c6e7c11a45f0cca0217111014a2289854d0d8e7a790176e47655632d8731f9d0585669c0f294c153014c7eaebefb877c1f0f1d7eb07dfb9473959f1065c6e890098ffe47db5d3f02e10229b884a2e3c6a01a06b46eb41b90fd6fa16d0cd2a069fda8d0995af4276824f1a6a61e614355d78bfa20ecf66f442293181d551217bff47e69b1f0430f302556246dc3c15c07f972e5e559a3bf232e3cbcd0fc875bb5f66ceae08746aa08bf796e74f0321ac69a6d6221849783522c44960daa0e1d1f4c5883a7a22bb6a2bcfddbb0183f318398d1b01126e6dabd50f7d1088e22ad944881a3dde4e7bbcf3e95900985e443e8ec4cdd630deb8f9aebfce18367e9eb17fe3fd4ad58ea7b88b2ab02af31fa44e177d4421139f89c6aeba29110151a175ba8e5154fe9e751b6f4c3e17fd0ebe868cffdb6e5e3186c979991c874e00479bb04a537117ed612ae420d1074509fcbab3692546e78305fd9485202f281ad66bf59c5b1f40dc5fa757acbb47d69c56e3c5c958f67d105604d8771ab0751a70f4a4458d841eda81f7facc34abb32fc239658fcbbdeb0e6114a5eda6103e68e9c0fdb44f99d853a45fb1a788de4b3bf0a3c78f56e23183c11426f17087796b469ab2aab0b0d0a137eca1f6c1d0e9079800403fc0babcdeb57651c86a271835692a383563385003ee8f3229d4c2a53dfd4a5035642686ee5a19d122c16d6e23fca0acb77d9c9a6c20371dac861ac8e344bf6c2f4d81dbf093c70f02e89709dc3a1bd8b61d4c5319ffa6990f76aa5892938a6ba832dabd5a2267db956f75c0bbd267e769ed2ba220a823d2c7c11ae08b5af268188dcd69b9e52d3dcf7b879f93bbb52ee8fcc671bc0ae1b79ec1dcf1600ee2bc467b3eb1196774fc208082dc446f3284806ca7c1a2d8278962487dbd914b39f9ca640d9328670fa1f1af2735741a799980268c175411fffbe56234d0e1a75a729268709878bcafb20e9faa0e54f8e87de741d2c2ae2a48cf3f8d9c6ff648dea37bcca1d96d50699f173e3a33e37f9242e2100fae2a5b812cea89c483fcfa3618f93d81b7b7d3173d748382ac617d90ef71208bc068a27d209e87833134522aaca4ec54fd97a9308f91905b8516280a94559064423945b4da5acb0cf66fffc97b341d46eb2bcf9eb9d5a71dff0fdbc6469a3edca1980000000049454e44ae426082') +DISCONNECT +/*C124*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C125*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(2,'Footballer','2016-12-18 21:12:00.010000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000015294944415478dabd5909741465b6be7f55755757ef593a0b4d02494802831965912d862d2824e80303f3440664646050e31347181165671c6419160175c4e5a9c77100c105104184b006501090350b90908dac74d27b2dffbb7f75a29c33e7cdf8de0cfee754aa53dd5d75bf7bbf7bef77ff26f013d7934f3e094d4d4d10151525689aa6745c9724095a5a5a924d2693d36834065f7e7941c9a953e7201c96a1a4a40cac56b32126265a1b3bb6403d7ae43064df97f3531ff99316f9291f9a397326040201a8acac24c9c9c91401b0cb23f1282084f41504210181982c168b62b7dbeb6d36eb2904b3c3e369dd2b8a629b5134c2a58b17b9f1e3c66966b359bfd78081837e1e00797979909595c5bc0cb1b1b170ebd6ad5c04b0020def4d29053c0302d0238100c066b381ddce0e3b9844b146329bb72198d76a6a6a2e77494e06c12882a6c8307050f6cf0360f8f0e1d0bb776fa2280a45a3fa793c9e63f89a47e3551a5984e338c2bc6c124d08841d660dc11087c3ce33204ea733d4dcdcbc263929699eaa696a3814fab751e99f02183264088b0071b95c505f5fff0d7abb4f281492d1f30655d5310003c0f33c9e09de9050fc9f45854866893a1c0e0dbfcbbbdd6e108de2567cef11834180fe0306d29f05c08c1933b8eaea6a0d0dcdeed5abd791b367cf6a56ab95180c8688e1682c41c33110c00b3c180c4660063210b82887488da2a8582c36c16ab15caeacaee9191be3d4e6ce99f3f34460f5ead57ca74e9dd4f2f2f2958d8d8db38a8a8ad49898188125a3cd6a051e816868bc4512d1c3080a7382e505b41f8aa26a54558855509aab1a5bee4ded147dadd90764c3eb6fdef908646666c2eeddbb496a6a2addb061c3c1e3c78fe79c397346435a70585d88dde104a75582077e99009da390fb02a30eaf830823280d3840f3a9d928d068092b6bb079b053e4be41f671ad01454b99f0ca9d07c0b88f15c45858587865fffefd5db194aa48219ebd2f62e216e66741ef6e89608a4e049e47eaa0d92c0294c38ff0860895085134596131d86e74f71ca7867c9cef7291963a65c39d0780d4411a28b18b162d2a3b78f0a0a3a1a141b398cd9c3fac42f62f12a170f43d20ab00ce3837585c9d80f91d930268fb01144f54d5f015277b6ed662b2a406aa2e8480aa9076a70164646410acfb14ab8d7bdab46925870e1d32b7b6b652c964226d8130fc7a580f1833301d54ca8184fcb7c57506d11e0dd8e930021100fa03b071609e738adfa3dd3ab3275db0c55e15ac4e4819bfe4ce02484f4f67dd9751c2fdc4134f941c3b76ccecf5b6516c50c41b94e1f1fbef82517dd374ae4b4827233634736c2730d8a22220f407b047609a138ecafe56ce5775691027188b092f90d482f9ff7222ff4300ddba7523656565ec210953a64c293d7ffebcb5a9e596260806ce1754605a5e168c1d98118980494400063060128b4e17183112faed2902c15e81b452e5401be7bd71692427885fb1e4481fbf40bba300d2d2d2009b16a050933233334aaf5754754a71895affee89dcf9eb4da447973818d937153dcd472260c41e8089cce35d0d662b18ec31c08b66160906410b7b3d7c6be5853108e073ec7ca4c7238bef6c041880ecec6cae53e7646ddfde3d5f8582fedc27f37ba88951122a5224075619ab59629a074c980322f6048c0e08d89509d13b3402b0002fd9282f59b590f7167febdad9f144306ee39042774f5979c72984a591e76595aa06819b6ee4e1cdc786a5281292dd2299a9cd2211ec0798c09126c600b02ecc6405cff17a2f63b9a031ff7382aac8212ed8da308a70fc5e3cb8fe33d6df590ab1c5129919100c6b166ca897c7f48b75df9316abf28209a581991a0da87910846860148ae480a0eb222ed291a95e49b19269341cf27361bf67005e3fc19278e8339bee6c043a006012721ebfa2b9ddea68e2e5774e18dc15ac363b75d81c84d5730955288b004b62012320b40b3bd691a99e005443d9c7c941bfe26db8da4d30d92b04a309463dffc1bf6aff3f0780bd00e580c6dc486cd15e0a5adae329d65bebefbb2b5172b91289120e11461b1326b091192f745028128108008d290a4e0ef8aa2457725ae3c522b9b9f5163cb5e9dc9d07c016cb05cc03c8cd8ce23b25c5a995376ade8bb7f38f75cfe826a36928ab156034627d8001e888804e219606c820fc1c2f07bdbb4467fc436a284048a091162cfef4efec61d4632a97cd1f78d6a73f76ad7d0afcff03606b52761c377978066cda73f975aa86a7bb626395a8a81883c7d3a25722031a6f688fc00f00222c477b6421ecf314e2c5d7b002f1ceeec3d582a9bfefb081696f954d7ca878f5ef3383d974879d9f1b3870205e6fd066ce7c169a9b5b60c182f9ff37006cad7d32171adafc64c9ac51f40fcb76fe5514c80482d448eed255f0f97ca0c8611d844e9f1f29a40f3c0c831a0e8695a03f15a5750d6f148978f7042acb32f7d4534ffde05a94e9eea6a6a644f4b801ff6d46c97ec3ebf5fa3bde5fb478316115a14fdf3ef0d0830ffe74001f7dfb31b42ddb08755161327fd3ebf4c549330ea16d39aa2cab5889f8e8d8386868a8d7939635339e471aa07420fa0205b594106c6bf9c8648b99180e7848c22f865031310bce9d3bc7c0268f1871ff8ce2e263f94b962cc940cf9bd933f13b2acaf8da79f3e69dc0a8bc5b5757b78bcddd6fbff50e59b8782175bb3bc383a3f3ff098089224c9d5c084363fb80f7e50dbce210d5cf4e7fdf6d78bf9ea7fda1905563e45614cee9b083d96a8786c6065d36600ee893184e6a4c9a52ac3e6a546c42d6cd8acb255189a924b6cfaf683018641dfeb9bcbcbcf9383f3b737347c0e9d3a7f49c89243fd56ddbbaf563183c7808ecdbf7d5aed2b2d2a771c6be8ed320979d7d9f76e0c081ff05c0a3262016bc499b06efff6507e72bb9a129df964155a872588c2a6d345fb9d2a34556357f5861621fb04381c5821d59b2409bd7cbbcc7d291d51fc27620b0e6ffc16c9256515ee43b0f9aac6a7280a0f1ef8d1b376e32dbed409a28e8616efbf6ede4d34f3f0546c97befbd17860e1d467bf4e8411d4e0775774e124a4b4a6aaf5dbb3a16a37432213e81dcacafa77f0f60820907113cd78439be8b591b9692039a41733491e0b3bf4a19b7b05bc04a42df6fd65abc7eae05055d5851f5af696834232887de5798120d85a9c48b6daa12da688f4f79a9b1f61a1930e925c2198cac2fbe939f9fff784545858cb410929292981dba7845f1c8b66ea077ef3ec83d85fabc3e282b2f27b535354ae7a464a1aaaaaaf9d2a50b03ec764729ea34ee4700c3d1f0fd41808744801423c7558635cd1b02106046d2e0ee2fd404abbace7616425763a6666a3ace41fd25da18e6c01b0a93b06e7ce4565453a8d368a1ca3de9e4fdd2adef8941ee71d5a8c1ec216b85861b4d8a2c877f939393f32e8ea54a727232ef743af59289b33361b9d3d4dc0c21a45754740c46a68dcdd47a31c0489192d2126c3bb2d0dcd27c32cee51a180c04db9f3a5cc2428774ed8ec9df287324807da741e9efec1bf7eac4c2e9fdcefbcfc1e16bbb94b1318ff20ba4e7c9b7170e5173c917c41f0a426b5883405846498d9a946d72a111368cc2fdb356d3dceadf72374e9d3989b5f577d603f6b3d1e7ad8e96fa9632a458f4d9b3675979e6d08bacde13563619f76b6b6bf59dbb848444082010ac54c0f285f9a619418c2b182b23288368344ec3cfbd1d01702f7add8ee7288c486398825f2d4ccacf7875d6ec05dce11b45eab6e2b708444b9c55b2d2cb83ce0069359253fb3783e7e456086388fcaa06327a8a0140414769b8958cfed51298df7db7f65ee53a8effce1a522bfc6361a516874f798f6d41620512ba76ed4a1100263b876558d677f7589d6f43cfc7c7c7eb7bb12a36d0103a0aa3843da18d3e3ae111adb2b20231739730d17b121884d4398608479908c4ca14cad4d93139c92bfff4a7d5daf9daefe9fa9d4b7888b1500ee778cde021936267c00777bf01e5d5d5505ab40d1abef944f7bec209e8410e8cd80342de463a72e24af873da01b2ae6d89c2f9ec8256a12ac23372a352138e774639e9b9b3e708e33e9b3750e8811965795b9b1766cf9ecd361160cdda35d81762db41a83a9558d2fefad14700131e55af0169a70c22d01f0124a00b6e0634e220a30c3196ddf3d72c572d560b99fbc1b35c480c52b00b04cc98a0561cd9391f7ce8de0213dde3e04af535a83a530cf5a77741b0a90a0b2626afa6822d1d1bcde45530de3385eed43613a2d929ad558971a202725d08e2131360c78e9de07438f48d300404df9ffb1e66ce7c064be9699d14181d58be6225dbd6846a04e4f178f4345f87c0f6efff5ac32ac621b53611e8879e7762d16d94add4a85d7878e9d4a44923a668f3b7cfe52f561453126f2354c2fcb0e05d2dd85dad6110a9089b5d1fc17fc4e641b3b7152a6bae41c3d5efc157570ea2231ab287fc066a847ae8ebe90f3ede8fe141729560c01ff4b14ac3ad7b751d9d3af5b7a4aeb68e3556b87eed1a3cfc7001964f2fb0f9822d1619d6d1dff8cb5f20b37b0f7dbbde8873475353232d7c72861e25ecd4a50472cd46a8f087f13bcfc6e5a7ad59b56ebdf24df97161fd966514a245025666388900b0e2f3cdecb5cce67498637c1e9e76fe0edcbc1b3485601e68c00b1c94c95760b26f2a9c928e0309588186fd90ece906192f26e903cfe6ad5b305183283788be97c49275f8b0a1505252a28b41d60c196da2a3a361ebb66de074466369f5603207d80e383d70603fecdab1838c7db8a09eb0ca6388014e0e291727ae782a63ccb002eda5779fe7caaabf231087d69bd1fbd67600ec60ffeb20f0ccf9c1aac5c3207e007423a9ba32b94aafc2d7e400c822863c680308e0e74232385be26007d90c264e047797ce20a347397deb518158970b5e983307366edca04780010887c39097970f7f5eb3062b539d0e88552aecfe2c524c3f919b376f9e26e0c6571ed24f1ae93ab1ea6f1bb4daa66ab274fd4b000ebcbb8ddc663c6d078007a39409f58e84896dc25e610846f464473b5225e0035892c3f8d01076082c6cda4d193ee6b64032d719acb1367df8615fd058cea0ea3c7ae4088c1f3f2e22d0225202feb46c398c1c95a7ebac883ed274108d0d0d54329bc99e2fbf584a2081bd03f37a3d3d64c9bc054b94b7be78c3b07bdf474012ed403b8cd669c43ccf45ced83600731f90ae9c01272f03e68680ac8aeca2e09086c9cc7e84f2b203ef11c2d61e6e8517db164281690c044d418876c644f68e987642303535d570fdfa75d6c9f5aece2866b55a21b94b17a44ea8ddfb2a0df80334180ab2b9217cf4f0c174c20f9140ad0c7cfed86bcf3c3872d46875eecad97c65dd25425ce61f01dc1e01663c56242262fa4908c80811e921b4777495ea48ba34a8309dc870b7c41a1d8117abb14fb40e84f7ad6ba185b442923b49d73c02e680cfefd37f014a4d4dd3a9c39a175ba87d30a704888a8ad6afb31df1fafa9b0a870345c5f56bfb727206df4f7e7f7629b76edaf2f38b3e79a58735daa6ce7d71361fe2d07551c26dc677f09ffe0080791f23073df04f8681eace3e6016905204fad6c9f079620812e37f9458456504867dcbc31a712d24b6c681314a8494aea9ba674b4aae405c5cbc4e1d96138ce73886eaff5fbd5a0e292969fa5c517cec28cb05e5aeac2cc3577b760ff1078287186bd35d0fa51c59fac98ab8abd7cab5152f2fe6200a5dcaf8af7bfdb61c90da73008d1fa4c9b0ac7318062650ac2c780d9df6fbab02ac554538e1f441bf6480b9df089069d36052a606158d0432f713e826f4a5bd3e4c25bbf6eea2f70dc941d5d98ff4eb3f80625d278a2e0ca94e2b4da7973e1750e43a292a3a00172f5c9047e5e51b264efcf5bbbffc65d6d483070ff16ceb607cf7a97dde9db7e98fd643270e686fae5ecd41bc2952322db7571f4c2e096f8ee72e9878dff40b802b16e044350197834257cc932dd739585469840b39a8613017d2f649b0b06b18a667a8a8a5080c3d6ca1d85388b4d748836f7bf48d6b16c7254bffc80d1d96ab372b1219e3d070855a2c563871bc98cc7b692eab3a2af605435c5cdc91eeddbb3f10c446919d9dcdd20ee6f49f3362f173cbe68adb766da65b36a13eea64692f9f1dc6131d008fd754146b4fc70561fd1019fc98a8c3bf14e1955e6118dc89c29b253c1ca8e361f380309cb809f0cc77227c322c049db01e2c3c24c0925209671c4c5dbfc691cd0a188fa204228a80430a5df7ea462d21319130dd13f9dd8d67c28ebe306736343735f16cd2c3a8ec448a4d408b7c8c96b366cdd60bdfab0f2c2f7862fa1ffecbf0b74f3e846d6fbe03c46d434f6b918a83dd57e73c82e0ccac121078ff1e3f4cbe5b83337500e38a4db07b781032a29042270cf059b301920d1a9c6c1560a93b00b3faabb4111ddbf7338956a88202b7a8012e2155387e06d91638696ce3578542e1dcfcd1a3e1f1a9d3510fb5ea00d84fb67bbedc0defbef336eb0dd5786d15d269adbe51dc5eb0e7cc79417ff1d183eb1e1d3fed99426efb975bb9f7576ca49068669c273aefcded1190da7300f9fe9003e533569f1bad0446ba557865a80c4597098cb96c069f15016364d2820a3d392200d1a872971e10b40517259e6b45075c51cb41224f8149d80b17c2d0bff51e5661b2070c1c54704fafde0390266e2c91d88ec18315e7f217bb3edfe972c57d8242eed691c3873b7e3c8c0c514c82e3794dfa98ac67677fb810ae555d555f993e0f498d1282f19f799e0161864b2452fb4d78cd4874238f3ed00683d222a5beaa1a81154b7055e0a9d6865eb9cb4f26f4d6b44b754006bc6f26ad37412155ea7afce82210b08e8671ee28e1287f5163c30c3c3a7112bcf5ce0760311163d72e6efe7a4575e0f641313d3d9d2f2d2dd5c7bfdbf78908893600f5c9a33b0feeb67ce0e4a13d3ffdefed201b42141cbc8ade672a94a0d1111022890010b1be61bd5f9d1580d1592a4d7461d142c73cf299916e6930d15c7388ee9d10e2546cd60faf36c0aea3c27687a62df598c91970e13dd605094c3250d2c001dda30f2be4774f149237dfd8a8e5e78d029bdd0e9b376f818cf4543268500ec1294d637da2b8b838326fdfb6089f1305a43a0c4ab3cf0866e1313eda344d15b5fe38dc44869c0e29c12864c2c0228562b0eef74a50a0a69583c1290abc3e56662d810cffab090e5d17e0ec442f243b01f61d84a22dfbf8455da2e8c16f6ff250e4c5aae720141a68a4f1fd2df8537675fee1225c4f2b76489573ff6796767dfb198068460fae3784b53ca4d1103cba2308179e4daceb667652e1ebe782e0c6d9eaa5ad02785502abc6c9d0d40a6ace32b1a9974b2dcf4d508f7f5dcc7daeded48ab233283cb70248ffdf1ac8491faf4117744c19867ffbbf6e7c249bdd46905c1608d4de42ce1b057020bb99b0c16111be93233221514823167257e758d2fdae4c357df9d36a2f26cf377eca5d8c33d086dc9eb4fcc409385ebe174ebcb616342917bfb303603c8e1b9ddd942f1801eaba621eb65760f83efef718deb1fe076927dc111300e2870000000049454e44ae426082') +DISCONNECT +/*C126*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C127*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(3,'Green-Boy','2016-12-18 21:12:00.011000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000d264944415478dacd5a0974145516bd55bd26bd64eb90983d242424186402511044511047458f8a026ea3024119641c7014474545455ce020280e417061d46119ce51116580c1014434ec511292900d02493a1be9eef4de3def5755279d26090d048fff9c4b4275f5ffeffe77dffbef558543df0c9e3098309e30829045882768a4cf2d845ac231c23ec256c25182c76f0e1d2102e0cce0d002afd71bccc2dc251ace0c9c46c86746f33239a7098b40a82e0c4a75286472b97093dbe582c3d68e76d35958ceb6c0e37631e38a0905d21c9308d91cc7c9398ef7d02803bc1fd1b5e584f6cb4180edf8a38405b4685c784c3ca2e353909a9e81ac8c74f44f4a446c8c019ad050e1e6f6f6769c69684445f549149796a3b2bc14c65355686da805198ca8b86444d01c215a3dda9aea51537284483b77d25767124afa9a402ce113c2b8c8d8442e69e060a4a6a622332d05d151916450ef533265189b9a517aa20a159595e4192be40a25389e87a9d9888aa24276dbbb84b9cc79e733e64209309d6f962b5589fd73f2109b90827e8648a894ca8b72a3c3e940bdb119168b19766b3b4a0fec61523b401f5d138cf1174a6008611bb9d93020772474fa70325c715186070ebbc3092b1128fee97b58cd671be9d238c2e1be249040f851add1250cf8c3b514a06af01cdf27c6fb86c7eba1ddb7a1ecd05ed82ca65310b3d9a9be202023fc97743a3a7dc80828d421979cba7a1a2c35392926ca0fff0897d3b18bfe7b23ce23a5606c994d7837317330b4e15197c9f4aec3dcda8493c78ffad65e7e2904c20927b41186c8d8948cdfc478dfa8ab2a85b9a5b1997e4d23b45e2c817974cb1bf1e9d9502855176f8d2fb50a71e36582177fca290990f6e13e57254e871db5e5ece0f63e47ff2cba18026cb5520adc3476d05c94d10c3c85103b916504878d2c7342ade0316e703f7c7da00ed053f560b7126ce74cd174ba9a05f409fa95b9dfd3ed32bd98308cf07358742ca70ed50567301d4682a1cc6005794ca50698e7dacdc0d96661a7e3a342f1c1e3c391db3f0c93dfd9833d2594350db10231985aba78c3d66ec259631d73d7d584fd174ae019c29b913109e06432712799814c063cdf69ac42d1692c9da81da0bc2e18dddc4046392197f1b87fcc40cc9f320ce19161f47daad81aea71cfc2ed385ad90468c3c439e850133c42d2f292d49aeb854cfa2ce1ad0b25b08197c926eac20de22e2a69724aa1c222c2ceaa450db39d77bbc4452905c262a29d6c15afd1502be5b86b542666df3d0c03936340d59e48de6da7ef98d1da64c413cbbec7b785d5e2aa32b100143de1a5a99aa8f8736fa0ffdc172c81a184258451544df2aa106dc0dd015fe9a6ea5591d1a3729231616426193f1006b6e3a1a47515cde525626e078134ef22382cf0d84c58b7f31816acfd19350de62e73d9ad6656cd32fdefa63a6b0ed552077b23701b61e3a00109ea79f977e374631b5e58baae47c92be4328469d448898b4446523fe4a4c761585622f2b21210a26692a26a54ad276f69c46ce3a15df5382402e401975584d322107112916ff61ec7a6dd15d876a4014d26275e7b6a12e20c7a2c2ad8845fcb4ed968dd89b467df744780a59aa3b78c18a8dfb8783a343207f6151ec2b54f6ec4822919b861482219a441884647d043af0f43b85e0fad868c9391947892998ce93f44844c25a54faf78c40ae99376dfe30c2040b1e2243868e79d0c24417b1bd66c2dc1b4f78bf0c3f27b30222f1716b71213e7aec2773f969c855854d6041258ae0f55ce2a5f3713d16a9abcb918872adb903bef200adf1e8d61d9444045bba9d0895220329033d02ecb258319019e6998efccfdfe52635ef03abb4a48206091bc60124104f6179f44dedff6e0d0a25c0c49a57523b360b4a9903e6905dada1defd18c4ffa13603f2b1e1a3b20e5d367c6006d3582566b1a6d489db907b56bc653831243526072d08992506a45e3994c642ca009bc8f404fb9c1237aa183809f8418ec9d1ea8abaf47fcd46da85c310a49069a9ba379f54978f8ad9d58bbbdac8a264bf527405b08e3820773342f4eca161760898036addf439b51b5ea66e8c2281ba92818155a3f0f480498f13e0fb0857a6a6a9817ba48c8d62921261fbb4524e068a3ec63444afe7634acbd1d32df7434ffabeb8e61fe3f8b588f1d4db0fa3e621d8971ee9dfdf5ef3c328832466c871177ccdf8a4f6765233ccadf035a513e0a493e729f0714a2077a25109085fc3dc0e2c02112686daec7c3ef95e0ab05e33bbfdb5e87a73ffe158bbfac68930838fc57da9b9da01951b47838f8c80174b0c40b173ffdf60846c5b5a07f32b504cab04e09f93c20f7f3804f42ecb00be420943f6e3f027e59c81707be40b6b752ff7c0a7bce44e1e13f5e257edf5c0b4f731972e6eec3b15396bd74656460104f27142c7b241d4fde9a44fce88b91036173b851f9d32664a55e41293142dc7d7ffd0b01acee1ac49c4c2adcfc09f8d2a8534aa5f64e0f74109002d9de82e2ca3348bd66221d84345733f5f5c62358bea506b33f2e67b3b12721ab0309b0e8db417a1bfdd2bdc998735b3c342a99187a9c127c28798c81c540870742fc082825028a4e023e29f932902f8d0a711048a05d24c03c606d80a7bd113ccb58342c7637967c538b573654b3b8fc1f5d1a4b700512602392b09e7053b8468621c95ac1068d5a81af5e1c054e9b20eebec24fff3246422549488a810e19719d6780201fc9036e89807f1cb87c044cf0524779c76b7b61b13905ee87aba9e4b00845de7688cf909abb3bc87c836dfb44c283048a68e8a80e33142dbd1e5999141b2106c9f8d0cee0ed904fa0847cd3fb79402825241931e37de9d46915bd6035a2f83869fdafbbe1f68035f8a429fc42f88cb011012d66302d2505044af3c725a856ce1a4e3d5a9a28219f743a765fe9e7810002cc78f86220e034ee52521081d672cc78ef67146c3b451f087d404d6fc605db9faf52c8b86907178fc295d959e49304bfd33760f73b3cc09d1b03fe32ea52134952329dc42fc74a90fbf40f70babd1f4a89a5d771218f558a86678485ef7afd3a2862485921d1e2eef37ec1db617c4f043ca2843c7e32f2916837c2d9f00b463fff03f6959e653d700efae8b18a6fb0d45530fbd6246e69fe5070b1b99456a344c385624ee1673cdf7d0c74784122c108306f589be0ad3b88a7561dc4b22d355e69e7570763d48510e0a4491f7d75723a9e9f9c03ee8a3c4a517101d2f14fa1dd11f079419292f934bc670af1faba22bcf82fd6fe823d959e0a297ff5250136c85ab0862266e6f8442c993a18aad82ba9601a2206b4bff1e7100820c182b6e130ecf54598b3ba082bb60a6aa1fe53e8c54f5ec8ae0633585bc67ae4bf40c1eb9149277266245e1e361633929b11cb7a7e46222a5b2c35e04f40da48aff42885ea1c341d03ea0fa38eceac821a035eda4fe9bd84fae2e3d4d43b3dac255b467893d0d617046e22ac829c4b456e3fe01a2af4b4e243ddc7b226e0a1e41ba16bdd8f54d76144f02d74d8510da54b94ce8b10d17eb6db564ae9a61a3aa46ad1e28d40953c17e68861f8a46a07d6147f2dae642649fd54473e2647b8bcac49662f4efe7329045e20bc8c649d0c77a4008690ae7a2223f74e59253ce8b55a2dc209aa351583379fc089ea42448488a5488bd58db4a43c787469b0e8b2c1511a5687840a0f74affd623a4e3372fea391087f5505549bd8a1b580f02a7a88899e08b014c2ba9e2794e392e11c7b05bc5c37dfa74b0563e6e1de8c9b3a2e39293d3eb6e6efd87c7c17458a44b8de8adb334663cdd48550c83a1fc96f28dd81fc9d8bbab582f37050ec3803c7b66af6f94a5a8bbdad39e7e1564f0416733c3727fa4fb930e5e96075d97b745106d54785933e828a0c73516699fef97c7c51f41dc50405b5567a4462a6acd360c3e49c5bf0e1fd0b20a793da4e44f3d63d8a5273cfa95e4de78cb6b00d4d9f1c626f76961089b9c1107880b03663da759ce986085ab7856a925e9e709317de183a0373afba1f7ffe7221561ddc44c1ac14e3c42f0909fa6e72607aee5d78ffcee7b1f8c8e778eec0ca5e452c23a2067538743b5b50be7a8f97ee7d90e6fabc3702d476a1386dcc9511d14f5f8d520a3a335589e77be3a9810a771a46e2b3235bc0e969d735725184fe8339dfe282b7cd8507aeba155f3652b5095baff3b2f76d1a2a59066813615c5c88ca9dbf529a125ee1d6f744608552a37a62cafa7c14f355a8b3d1f1ee712298e1b57984a7ce9c9a171e1b763be873e13efa5cb82f88a1a00332466d40a63b05eb277d4815b7fd03886f2fcf21c07accaaeba78e0e4dcbef8f3253194c2e53b0ef9b3bebfef3bca514cf032ee8138879412bd7225d9b8e8a824aec5ab39bbd374e21180309cc20fc63deb67c348457a3de761a0e8f3db8552ef35050c1d84f1d87e89624bc7d332b52f138616520817fc70d88bafba92d1350692982d9dd421e0fea4de7651f3cf5585a793852420761e96d5b70a6ac893205ee092450317a5256ea848571687456d1eed361125c3df59b0c251f8228450a363f578b5deb8f57d2a5fefe04d8fb23e37dcf0ed25d378b83c54d4d7570ef997fb3c1bca09119b06bb9171bde2a666d268b59bb8f00fba38686f4a17a4dbf810edaf7dfcfce771d1c1a8a153871d0c49ecc516186f62e04d0f9e731bff7d141e0ff38c1637c1f8f28700000000049454e44ae426082') +DISCONNECT +/*C128*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C129*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(4,'Linux-Zealot','2016-12-18 21:12:00.012000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000011e34944415478dacd59097454559afeaaead5be26a94a52492a212b8bca26a080c8a283603b128833ada8a3d8da3ab66003ae6db76d8f4eb7c77d1945475b195b6d714665845119d4466d811010594212b29090a492aa4a527bd5abbdffff2630ed694f9fe68ca8ef707955efbdbaef7efff2fddf7fa3c8e572f8a68fc71e7b4c5b5d5db3dce12858af566b3cddddc79eedececda76d75d7765bee97729be49000d0d974913274e7c66c18205575556561aec0e2762b28c903f80bebecec0975f1eba7bfdfab5cf7d6f012c5bb66cf925975cfc7679790db43a2b9c4e2d74521a9ea1183cde0806dcdd89279f7ccad9dcdcecffde01d0d1515f5fef993f7f9125993262d952055c156a20abe07f78ea690f01f1e2e30fdffd62efdefd677fef00d4d4543fb26279c37a48a55877e33e14976b909569e5d91c947a05ba8e66f0ebc75d88473bb075eb96cb83c1d0a6ef0d004a548942c733ae7261fecc299f60e5159b918d92e5c7ee2b79987278f1b78bb1fdd3c9e868dbbe6bdfbefd73be37008a8a0aaf6e6858f94a41a103cbcefb1714ea92282e01d28480a7575324b5b702fbdaed78aff16a84465a533b76ec70c462b1e0770ea0b4b4cc3679f2c4fe02c71cc3df2f69c6458bdec26b1b1c70152751680a43a3057c6113b67f2e61d5aa00366d5b828f3e31a0bfb7f1fdeeeee3177fe700aaaa2a37cc993df726395586477ef93bd4370cc262b362edf52af475a6011579a8448d9b7f21a3dc19c796cd662cbcf43c18347d99a3475bede485c0770640a954aace3f7fce90de7486ad616907169cbd03e3e7e641a988c3699771c16c25122990f5b308444c144f6ab4ee08e077ef57e3b9976d94d02dab2899377e67001c0ec7b53367ce7cd9e7b7e1dd97b6e19e7b0378e56d13cc8634a232a7b0420c05b941afa76b3105ce390378eef11c66d757c16c0afa7dbec1e2542a95fcd601e8f5066d4d4d8dd76429b258cd193cbcf6339cbbdc0cab5982d56246269b452c1e478ece4ac261e26ba90cfa07653cffab08ee7bd18c619f0aa984ff964834faccb70ec062b1ce9b30befad3f61e335e7bb8159f7d3e84275ec9c7adebafc325975f8d70288ca7efbf176d870f61d9555761c595ab108f04b0fe9607b070e2e7a8ab95b1e67e1b2ce6e441bf3f30e55b07e074166d53698b1717e5c5f087ad5d9836cb8868dc801b56ff08abd7dd89483289db6ff8271c39b81fcb575e839fdefe33716dcdb5ab70b0690f767e3084332e302195d4a433e9903391480c7d6b00f47afda412a7b3d93da0c2eb0fb931b9268ea92b8a50edd2c06635a3eeac294824641c6d6e86229384ce6042e5c43391a650ef6a3b8c032d313cb46604bbda3278f55d237921b3c5eff75ffaad01c8cfcf7b47a336d487c259746cf7a2e1463d7adc05a829572193c9214996864201b524a1aeb400c3e128fabc0168e8bb4eabc17024070d62b8fe1f4358fdb001f979ca4c2010b053329f32a59e3200954a9208c0b03f90b3cc9f9ec0033f8e61e1cd369c5d6d81d9a2c5e87459a4d239d8cd7a4cad2c46ef7000adfd230480448552851c95e8e64e195b1eebc74f9eb660df111d2404ae89c563af9c760046a361a94e6b782f18ce60df6fc378659b84a7361970c1940218cd06327c16e404629f1ccead75a2b4c0027f44c6a72dc7c93b5932808a582987c64349fce2ba1e941403f57715212f4fee18f20d4dc8d071da0050e152da6c79bde158aec46ea1f0d91dc4a4f3cc181c5261f1f462e4dbf4c831f5d37f090aa3b35d0ecc9a5086fd1d83d8d5e9864eaf15e248a554129dc671a4b71fdb1e8d60ceda7130519d080587af0e87c3af9e36005aad76bec56cde31eccfe2473f48e0be9571545f63814aca61c9e43214179b200a1759384d6e38d8e14191598b915812132a0ba1569142a5faa6a2501a1e8ee19d9d6efcfa7a3f0ef4baf0ce6e1d6cfa48c0ed1e2c3a95c2764a000c06e3bf1b0c861b02410536dd15220be670dfab060296c285935c98302e0f905402844ea344b7378c2f09c4740a2597dd48b22243e0848be01d0ce38dcf7bb1604a18cfad5163ea1d13096c14dd3dddd36539beffb40030994c6f6b74e6e5694ad0d6177c987ea391acab824299c239142e0ba6954132482291b30a25eb384ae60c2952b5a8c8fc2e05bf8ece5d5d7ebcd9d44d50e9f3ef23b8f9b9b370f0b8169ebe969f8542a1df9c160092a4bec5965ff4b456adc2c777f763fa1d6626155a6c06064ace9533ab515161459a623c91cc42a33742d2a8110e47a0a7b05129b841a02497d3787ff771ecee1da442a6c51dcb4270ba6af0ec8e320c7637bd1808046f382d00c8fd168bc5d699d33aec772ef160e38769f4f83530eb80502c81694e3bae3cbf0e925949c05494ac9c0f2a6a6cd262e1d91cd12831516f6f9816db8cac3207993c38bb368a8be7d56263a31ddd4776de9d48a61e3c2d00c640ccd35acb762c9da252ce2eedc53dff6585c99815b42993765e36a9128bcf7141a9a3e0a005d3b245dc2b5999d2bbc25e19afedecc0178343c43c5a44a3c075f36534fb5dd87db0e72055eb79b4a6d0370660c2f809523a9dba841671a55aad9d643219c6f5f5bbf5c1605cb1e2ec3815a82c0eb88d30e9a8029375d304a2617215964c73416d5212a372474cfc4fecded317c1f39fb5a237148596428b7c4343a62c2055aab2e5f28ceae394501f4a6a698346a3d9d7d2d2f2ff033071e2c473a9aefc8fd562c92f2b2b457e4101159c3ca2c22c0e1e3c84c36dfdc857f4a0db9312c9a9d66990c892e5a989595c578a65d32a28f1256469f17b3b87f1df87bad13d1286d1a046361d238fa850523e0e674d9e4a35c444cf65e176f763c0edc94562d1a394f8f74892f411f54d81232d474e0d00318ec3555a363863c60c65a9ab54840133a09a3a74ab95c2c664e41d1334ed3b8cbdbb3e413014216ef709c196a11b592a66c5f4cc925a170efb42d8eff68998d72bd248d3bd027b2166cc9c85458b16c06ecf87c7e383cfe7432412821c4f50510ba3cfdd07afc74bd98327e3b1d8babebebedcdf0ca0b6a6e6fd8a71154be6cd9bc79b5660ee4e5078241271501f2b248186c2c06acbc7a597d6930e32a2f5c85134eddd833dbb3f47f3e1c3e81ff09255d348916599fd2595921a1e032ebbe22afcfce7f7520247f1c61bbf473a9da41a6322a991a2cf5951cd29f8084c8401a0a5a50d47dbdb377a3c9e557f13009bcd367f7c5ddd8e325719eaea6a893e35a0e222ac4f2e452a954620308c9191006efcf14d987bde5cfa3c8260308071e32a858c686b6bc3810307d0dddd83219f172c71f2ed0e2c59b204e7ce9ac9555d5c6b6c6ac29b6fbc01b3d924e6e683afb36ecab1ed6979ec9903870e450f1d3ce820a51bffab0028797413eaea86ea268e376ad41a904e47696989f0822c27e9be449a4825163b63e639b88aba2ddec18ad3bc6ef70059d80c574539583324d369e468216aaace4a492d34108762943c984c24a061cfd2739b366d4263632385a6457896e5f8d0d090287c16bac6ada8bbbf8fc0eebd830cf5f05f0560b65856cc983efdad62a793747f3e71762f060606a803730a10c448c23a56ab0d6bd7ad43515111a29128e70c015320128e416fd0d342a80aa74685a5a0510a1f8e0d2a63048ac5068b2215490e8d98ff89279e24af0ed1bc7944add43ff4f591f235d13082a5914cfdb5bbbf3fd0d6deee48d3f1b5002844d43555552d454e6735691e569f6202f602036110bc98603088e5cb2fc3b5d75e23ee094b592c633a878a5a2844bfd393b7f404363d2a21140a7166061b55430a219b144a0e4b155e7ae9656cddba9904a19312da2342924259cc47eda608af2495f7d6b656a72ccbdeaf054034796f99d3f92b5af9c96b0cc26eb78b977776760a4b1714d8b176fd3a5457d5c04dd673d07dab6dd4d55af2d2f1dee3e26f02955595bc7b21c282979c4e8d82c929476b037b84c34aabd7e1cb2ff6e3d1471f453c1e234f8c90fc08d3bbcc221fd8e03c0777735d5dc79652087ef0170088eb95f9f6825e325009bb8b0f0e19d23f22c11884dbeda609bab0bcbe1e6b7eba965844a6780ea3b6b68efb644428b635f43c17afaeae1eb2581c2e5731142a0dc90909f9160324de71cf30cde604d370b5d6514277f7f4e0c5179fc5debda342344d22509663c44451e13df612879b6768e8ce5030f8d05f0020ebd715d8f2dbc291b06011661c0e1f0e251efc9d2dc1ecb26cd972ac5ebd9a787f1843346a2aab504cad55241486777804ad2d3e04dcbdb09717605cdd38ec6f6c466f5b3b9c95e371eebc0970e4dba0d7e94518a58842a913c3ce9d3bb1674f230e13fd327db2a7cd660b517654846c86dead25e99149a536bb0706977f0500775a14fb1e9dde60cfd0776ec6559474ccf30ab226d3263303f33f27d4e4c953b068c1428c50fc1f3e74880a4e3f2ebae82218e885dbb71dc03573dfc40fd729f1c2bd7578f03f9df8e78b76e1b62732d8f4580ab76fa8c5b4e9e5a8ac2c170b3cde731c3b1b7762c8eb1bcd0f127fdc96e628bc3807d8f3bc8e7492c28f0a614a4ec58e761ccda36793270150024e7214143447297438d6b45a1deff993db488c6573226ea94b2297cae2cc09c5659fbdc5dee1ef9cc432c9e400d5868e26351c134238b64d834f1e5f8805b77d8c7117e630d29e40c999bcedcebb75a3959d17cd9cc4acc60b65239d888ad17a9011ded793f5399f28acb3c78e1daba0c4ee3b09a0b0a8f03e8356f7cb403824740bb784ccf53a72334b06aa0d6320d262bf87598629d3e5728917334b70acc6a84e64937a347fa885a95686b7a90381edd7217fe92ed8a77623d8e247c9ac7ca2cf2cf45ae598b1b4c2d26c2cbf3f48091c38c95a9ce8d9ec2867b121d5d487e453e5f7fabc3785c2a1e705008a1ea9c255e19353495b9aac3bfa63952022b62ceb1e76234fc2fb055ceed92a0c8aef731e70ccc6c97b642b14e59560ef7b5ee81c3d68fe981679740d0ae73e0f6b6514fee30ad4fd5d3134663d4a1c56ea8d25b150f602575bb6fe092a1ef5cc09865488eb0cd84cb5c137ec7b9080de2dee68351aabcb553e44312e71db97c5ff1dcc42959595e2b3d7eb15936a89ca542a4980e0bce0c1a0496c219a51a28abcb6f3233f09640fbef84c82d9fb1358cfda009d3389f488028bafadc500c577a9c3243cccc4c094c9e3cfeb051f7c52881e5431764f28058483e18dde21afd0450acaf615a565a56fb135356aad9880e39cab6d61a1437880adcc2f38510079f1a3d4268921c050680dc524ccca8b63cbebbdc8245368de4bbaa9ef3a944cde087d51123af2e0e5b756e133af1a55c506aa1d79c2001c3a2c124f6821b1b307088b9fc845a6f3d17b09f8bcbe3f78bc9e450280d160584fcaf31193d90a1d71395b982752ab2521e2128918010808f661000c8e3dc1058e13983f2712fcc20c02291b7e38c183dffcab9bc41101ea30e28f5b2ec4dc8bb7c271262d4ea3c09d77d8f042531eaa8b54e0772a95b931838d6e4932518ce6869a0627ad768c9d14024c2c1ac6d18ef67dee7ef70c01801e9e5e5353b3474b19a263dea7a4d23210faa1992a214fcad6e7443d1197a914efb029046bc872626c0119c4b276ac9bd189eb6ff593a954f01e4ea0bffd0a944cda8ca26a6a60d4716c78aa0cf7ef2842ad4b23bccb05304bcce121d9cc55d84e8ab5801a273e8e91924d900ae6c57338f39a64eabd8f757534f50f0ccc1acd0e9a962679d3555a5acf854b6f64d6d1924e514122e5a952aa85551888c46a92aeb3cce5fa90a5669d139bff0a1989caf005b57876693b965c4e2d6d4a81fe2619ffbbaf013f58f8210acbfcc24b1fbc5784bb1be7607ca54e5456063e38e811729da9980b989ac285639d7b013929d3679d50c16ca8110a6792347ff4fa7cf34ed2282134d2e7dbe9dc40b4564e3f2627e8d5349992694e28c92c5396624c93684588d10551ad99a7fdd4e7ca51091fddfa092c6750ae649538f07a0e8bfecd8ac60764d44c898a3ff8858e4958b9f90aa8b45414c9e23279369d64b1a61534c91263acb88a05f3fb38a4b99045e3512a785ef24cf7a3e94ce6b6af4809c5287f695951d360eaa9a371168d0a2a3a2534613171ae85ce465a303988f7a925a546ad5652ee2824f29a827e7ee7d47ed4cf8ec15091c29baf5a70f3d63c6c6808e11fea0388f549d8badb80870e95323ed0b204519e643fdefca265b057385c1900872e45403a93ce2492a964075d7b86d6fc1f34925f01f075874221b6143463a0b8185858f7d12864f9c4cddbd8773eeb469f55e824ca370d55c224c518ef08a9951aab46a9d052ea64923494ca1497276e16c8e0b9042df6c4364a626cc84c3834c234f82f37c769b4d2e8a1e7e53f5fe39f00244714288bb1c94f0000000049454e44ae426082') +DISCONNECT +/*C130*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C131*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(5,'Mac-Zealot','2016-12-18 21:12:00.013000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000012064944415478dacd59099454e595fede52f55eadbd5477f54e370d8ddda0086e20900051e286448dfb92c5c41997c4d1acc74932a346278913338939398e8963124dd051b3a944c5040405010517401ab057e8eeeaa5babaaa6b7deb7cff6bd0e34932c1448d55fcfd1ef55efdf77ef77e777b25b9ae8bf7e2f5ec459fab8837359f8388be4a96e58c359659931d483cb1f0d11fe4df4d39d2bb0d60c349975668f5b17ff337565d1caea9aad5a365700c13c8956067727de3070ffef28d83fb6fb964f313c60712c06fe7adfcaf86fae61bd4b2102c4d81561743a8a202c5fd03480f0da1373d8883033d2bbfd2fdda9a0f1c80abfdd1aab268d9ab35c1cafa867035e65f742e665d7331100d21b3b3133ffec455e8dabf0701d5f7dbef1553e77ee000fc7778f68f5ecb1fb8b64e2bc7a5f7dd8569a77f18abfff7616cdeb2154b972fc371fe30eeb9f45348c18026f93e718f937be00303e0def0311d32a41ddb727bf5e5175f8e13be742d6ebee33b78f057bf866ddbd0023aeefed6b7d1fadc3e3cfeabd5c8c9ceae567f6cf1970bdd990f04803b836d5f2c1ac5ef5af1303efdc8bdb8f6d65bb066ed33288b46c12c8442b188c6a6463cf5fdbbb1f3ba6fe1d1de4d902465e5034eeeef8a857705c0ad7acb8ca26bae8f1872d3e29bae41aaa301575c731d242a2e943ffc2a948ab8e0cc33b1bce0c3c34f3e0c3fb45f3ce616aff88703f8aad6f03fa4c995f16039167def2bb8f9e73fc573dbb6211808bced3edb71100c0671dd9967e0d99faf86eec06954424befb1c69fff870178ac7cd1d1cf17fb5f2a960adab1a72e47625e336ef9c10f11a2a27fee952f16f0d5abaec2e4eebd7871fd1f502785ee7fc4c97ef21f06e03765277fb9b33476874ff361f137afc7377ffb10d66fde82a0ae4d092085241e5df176809269a0bdb5155f38ef7cdcf3edefa26094fafd908f7dde2d4dbcef00562a91da596af90618e6acc6f973d0f6a955b8f1ce3be150e38aca4a2a6c239d4ec3b24c689a867038428912868612b8e2b43390d9b10b2fee7a1905a837bcee1a3f78df012c91b49b5b94f0bf876d60fec567636b2185753b5ec259e79e8765a7af443e9bc1a3f7df8703dddd587cca0a7c68c5e99e2f1efdc5fde8dabd1bff54df810dcf3c8317901ba22a27f4b9d6e0fb0660b11c50fdc0f311575e30b76926da2e3c0db73dbc1aa17000a7ad3a071fffcc3f6392d6ffc91db7a167ff5e2c39f5349c73c595d0741d3ffecf6f61fddaa771e5c91fc1c88617b126b10f3ad4db76b9c637de3700ed92faa100e4678f42503ee58255188afa70df9adfa13a5686caaa2a4c6f3b0aa661a07b6f271cb38850a40cb5cd2df0f9fce8ea7c1d7d070e62d19c796829c9f8fdbaa71191025bc292b2e4313b63bf2f002ef3c5d726adfc8a69b1383efad90bf1d0a6e7b0fb4017626ce224497af33e5596505f1946b668203959f4ae89ab45d382654a583eb3034faefd034cdb751448cb3a5de3b9f71cc0d7f419e717613fb2bd9440e39c36cc9e772cee5df747d456e88884997dbcb4e38a7fa88a0430a3b602a3991c7a46d287a44a1072136359ccae99c618e945cf700226e475bc7aeaa86b1fb1527f13802fea2d3f335dfb93af1a633879d922bc9a99c0f69e2e1c3b3dee01100e10bb2a3c99d318a3072248e58a78ad6f0479c382ec01004653398494089af430d66cd9cc6fc8241d168cb9f62bef1980abfcf581a0ec7bc5b2ec5993952a662d988bbb366f82a64898df1a4759998ec30c725979dbaacbd0d610436f6202bb0792907c0a0e132c355144ef5006ab661f83f52f6e476f721425c837265dfbfbef19808fa9952beae4e05add91119a538791b082d5afed442ca8e3a4193588c518da0a7b206a695a0e06463208fb1514791e8f85e12780c32253a902b6ee4b6066651cd314054fed7c8d00a43dfceaa211d739a2c2f68e011c2f6b7735c8a1cfd72b21d41cd384e726c7f0c2c010ca753f16cfac45637d14aa8fd55792a1d02b43e3391c18cda0395e869a8a201c672a36c49f91d12c36ed194286b45a59d788b17d0318b60ac8b8c60d7b5cf3880adb3b06b052adfc49d6313e1bf669983eab118f250691227305314e6caac2fca3e2d083bea940155c3ae409cda7c28b0c218f2d85437a75f74f60fdeb0348964a58545d8d85590d8554119392f99a01e7c4fb8dc1bf3a37bf630017f96a968c39c50d79d9961b1aabb16e62020ef710ab92fdcfd96ce6ea6a994a49098b5bfb349d2db582125b69328b4085f62e8a050b9b760e620b03db25c8065270a9ca5623514258f61de4471ddf2d7567df750067a815caa853dc9876cd45d36395d8e558c8d19a22306d2ab6a4258e85edb58846fd5055652a1e1810a295761dd7738261d8480c67f1bb97fb3094cd7b334319ef9d0f1fe4091bd5b27edb8f8d03475495ffa6343a5df27d3a07ebbe594c7fd9800fdd544e013c2ff8a8ccb2d65a2ceca84138e29f1a68deaa6bb04d072363793cbb6b103b1249afb0d9bc1e151ecc9510b495dbb63ab9236e298e0840bba297e992b2aa5cd61655ca5a5b99ec6fa16d67a4ad22ba952c3a7df480ec837a180403f8d499f558c47888d01322988514cb709018cde3f7bb0e62f7f0045c59dcef40376db4397ed43ab2c53cbb31e1e4f74d3ac6ef58b39fd96917ecbf0bc05c25f029baf4abd395607b831a465cd651a5e82897035454c14e931da8358a3d520e49c9824157883aaa93f78ba7c5b1a42d8e8a901f0603b97b78121bdf18c6def18ca7bcc2617fb613c2994a3d3ad42892661249a78451d740a7398171d77aa1e83aab2db82fecb68bdbdf31800e455f31472d7beaa3816972192d55e2e636df5554be4209a29c2baa8499f65cec280d61b795c60e2785fdc823a5b86c0d2434b1379a1bafc0c1c93c3a9319e4381bf8e88f48c9c1256a333e1e6cc5747f143e4672c62de0955c2f3aad14eb81d04b222013079d82d36b171e2490eb5fb78be3470460b6a2b787203f755ea0b9f90c0a094a62387730292c646530c97cadc92aead532c47d1528ba16f61ac3bc6e41a48ebd04d3efe471c02d212739c8d2002298cb251fe64be558acc470a2af1ad5a132a8f53128d36a60edea4131398e3c65505988d490e5be7dd624b61923d8648c3cb4c5cc5c72440096f8caee9eab84af3e9a0a2e0b34833100f63f0c5295012b63d22e60d09af082577883cd249e28f462c029e2f2e02cc683846e6b9cc2f3a48249bfb9a49d8616ee374faf436528023fd3b0de5407edcc0550d86e646ffb25acfd0799a62c4f569ee08bb6098306182190c70bfd78be94b860975d78f4ff05d0a16855cbb48697cfd29b1abb8c0495b3717a603a548230b8912e33bb5041932363ce2d328d1691b68ba4808d27d9a11eef2bc7d9c119e833c7f106b95c1494e1771b59bd1bd54a9497c780e366a2fc5faf80da5c2b9eb7007e15e6869dc8dd7a3fdc440a1695ee374691b4b3345098ded3b09531f258e1c0cb834e7ec11ebb68fe45008bd4e88f2e0dceb876a956870a0a7ebe7880d64c6381bf167125e0b153975494a870dacee1a0cda01495586fc4383dd34541eda447253d93e0b50c3f13722a54b61f528474892374d3e5885c782a5ccb9c12cac2577c7c33325fbf17d2609273b289974a031e911a19e006bfdf4b436d3292e656736c21b3d38e3f0be068253067beaf62fbb97a933683162b23728df6decc201d730a38c157e5dde727008b9bf7d2c2db1974adbc77a9d6c40146418aa0b6968631d357492095f4a0ebc5882ee8c7426cb410dced57237cfa42b8c592d77688957f623352b7ff1472ef08869c0c5ea0cc465abf823a64e8e9717abc9320d61b2397bd686557ff59000bd4f04d1ff155fd87a041b9e4f77a9c1029d348ee26a9d8eb0ca6665ef3f1caa893c55354748f9dc759fe38966bf59820c87249c77dc56eec30d3385faba1e7e2a82640998920657206a889a3f2f2b3507ed3156264f35a0b89c0add1140e5e7813e4577bd0674fa0d74ea3529a6acf8b8ca33401f412c8b3e6f8edcf9999afff0900a6cdf63639b8ee645f795d3d5107198a3ab34688e7d5b404e700f41849a4a8a408c6ede6281e30863049eb5ea7b760a12f8e97cd617e4f615cd878a4388009c9c6a9fe18ca5d163a8a3a4e8b231a8c22d8da84d8172e41e0b8a3e070dc045beec4c36b91f9d91a0458ecf24ca42c663018fe22f39528c320a1fa289b00b60c3ac5258c03fb6d0068fd9f1faf967d62b6a00e150f724558b822041012dea02972cccbfdcc2e496efe0af9fd1403758485e746ad05e79042eb8d0318b34b10d9ab10543158c843320dbc219730235881e34a011a4243381046b4a116beda2a38ec9772a51cc67b7aa1b0fd762c1b5df624028cbf564e6c82aa29a6e40c65260866b395caedb373735813fade0440ee1f3d478dbeb4408d693369ed1095172d81c6a378894d4a54be40579ab4c61f999dd6328d0e53f94906f379be1a5c1f98898d0cbc6e2b8755d75d89132fbb005df73c821df73d80d8a52bb1fc4bd7a2e7376bd0ffc3471024f575c5efa5db12f74ed3b2692a97a7c5fbc9f31dcc3e71c6cc296a0c4d0ce2b0a44194d1840864730cdbccd425afdab987de0470ac12fcfc343970d76c2adff626008556170973aa9b14ee3c0c609002f7d12aa230b52851d4ca41d4314325cc0cd2b28d531eb803d3979c84d79f7e1a231b57a3e64397a07dc54731be6f3f1ebefc068c0d24e08af192e24589f4d1bb87658a80a78591a4d90440516b849c3ab24178a5cbc9618795befd252bf7750f00ad1f60c7b481ebc4186f6c63af339dc113e17940c400e9a331ebb021f6b898a7d50d5a5d50ac8e2e0e32c805b572fc9c930afcba8ef67bbf86d8ec3624b66f877f781d9cd6b35139ad0599fe3e3cf8c56f922e0710f307b8bf4aebaa9e85852cd14eec67e5ddc10431220297f2d80fc14f2071c660bdd085e703ae71ef166bf2aac3004e67eff1a4e83d22c45c45d71dc57ea79a1b0a0a55c92144c95b0140545c41277114012eda61e17e11681c05117155c4a231ccb9f35fa0458218e69c3bad7c00296d3e143d887c2a856d773f04eb8d41c4f40895f1791e167b4f52f93e52a7977b09e5053d475dd3bb1ea21f2aa857193d10a1cf32aef5d8266bf26387017c232aa9b75651211e9945640fa546fad4c861cfca256e94616917edb2cacfc5dbe15b7862aaec5b6cba8a88390a87f72a9c70d36748380763bd3d38a6398ffe4c3d4cc507cb34d1fdd05aa4bbe8014d5055f3da8c825096e9b89fca4f70af3116326179ce739e4e512a1ea05ce1891ce50db8a58d04b0d40340feffa245d62f9b414b4778b3088b02b715fd4f03f9cd39895927ef51c4721def51b9f82ba243c488d71b79ee36a1718e8c36c471fc652b098ccddfe828e64d33b17f2c02c3a779b34dcf939bb06fef7e76a16c04193b02408ec6e1a4c7e6cdf6ee111e10c12d5820f82fb2a29fb2c47030c4fbf63bf957375ae9791e80794af0d7ad72e8dc5641152f7daa10254c585a142cc17991fb4dcfe222982def5c83e27158004a1d6ad82a4c19818e261cb56201ad6dc1ca6651139e4062b20cfe288dc1e17ed7ba6d7865e76eb4fa22041098eaab0e7953ac9cb7bf989f151632d58b3fafdb108b3a25e9a1dd76fa8d27cd64db610a7d2e0ce587b50cc64a0649186f05aff08208dc342ba0e0fd94fd5d2f0e84e5459610961e39c4d763dd10621dd3d070523bfb1c0785d43866cc54d13fc03b553f474a03fd9decf97777a1c917422501e8503d3a261def910a039ad3198de9a7ec21671223fc5ce44ae10561d0344dd5e5e63ad79b131d87010870dfd1a15c592efbcaa3b43dcf3d0b6bd2d493b48267e1a9d957f6129f3b35c81f3a0ad77792662dfcd6dcf616d4b4d4d20336269249cc985b89b17e5ad726a0420e669245a92fc53e4b3f5467e841d262c4cd53498d9ffb21065401202d3a5dd24b784934908242c33466b793dfbeddce9ef0b64aac4a92f8adf7c32149991784d41e9494463ab89ac34c88b942953c374a5edef01db2bea8cea2e510028420d17277b4c6118c681e809eb114bbca224eab8af3bbeced0dde6348288e4c6533519c72ae48c153393fe8194cf2a631b167967789ff09835a3c920718a29c2ea7f0d371c7baf24f9a39a64561e408171b7534703573837a6e1ea7b2615e8cf03c20168104095a67b72a9678ac1b08ca8abf29ac6bd5414d0d2a8adc93ce3a3b4dd33d311456aa3966e649a109c3c550c1f4a8e74e7951fc7c664d91131cfd396af048ca9a9c256cf640594e6829ae04d3fd4e12ea05c6e226ea9efbab433d01899f1ba35c212ef1bba9e619e4ad73dfa1a3ff509c79e60b49b214959540c6b10b05d7b139d0c4c2b21262935728ba34213c3630e49913241825d7cd507df124ce9a7a76e73d1bb031759ee34a70255d0feb5bafff03c3faf719120c5d290000000049454e44ae426082') +DISCONNECT +/*C132*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C133*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(6,'Windows-Zealot','2016-12-18 21:12:00.013000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013364944415478dac559097855d5b95dfb9c3bdf9b9be9664e802440421802080a8a4a541441db525bb16a81aa4f706a9daafdb4286a9d5e07adafcfb66a29585bc462f9a8a0421114947934038414c19040869bf98eb9f79cfdd6be372af5593f04dff7eef785909373f6deebffd7fafff59f885153aec7d7f58946c218517916e23282e115a3be9d9e91f50bbbcb7eece8a1fa47eaf7efdfe02b188c86ea1ad8ecf633decb939a860dcb97404cbc6cfed706a0a7a31d43470e5d326ad28cb945e565f06464a2a33504b3a713914013f6ef7af7b9c67f9ef8d1d70560ed9f5e808075e8d773fa580063a74d5b5a5034754e8aab125d193ea40d76a324cb828deffa61f5b7c21dda8ada9ab72b1c2edf0170eb33f9d89d2ed4ecdc08e14a1ffbb59c3f6e74233de54229a353d1e64fc30d8bcec51f1ecefef4f762623550b30136e3a5ddfdf19e09900ac09981100e3b8470559cf1e1254ce8fda1570d317736624350dd7c0346e5034b5ffb33fefb99dfe2b7bfba03159367c355b10db0fd15a2f695cb843563dd990150cfc62034f7a8330f7fac1b3277b2949937e0d29b2fc2da05364cadba18efbdbbe1d35b0ed46fc09d2f4dc6da9f3f0addb91ed2f40b08db99854d7808c035e20cc31fe722da4d866fce8bc89c0ab9fb5c940fc945fdc7adc8f2f9a0eb3a5a5a5b93b74a09317e3dd5be1a7af3ca91d2915577fa096006fa835f030011e6c18648192ac78baf3e852b2e6f415e6a39d2d3d23e3db4c56281bfa30337cd9e82d8373663e9c217a077fc6e8d8cf45d01ed0cb2401004702614322174ac36fa46cf0432d0daff3c2e193b08d575c790999101c33006f61188f5c7100805f1ecca3adcf9500b44c7ef215a3765c09ed975fafb4b0560e41944a01fc2cc9746d88b0bbe791716ccfb08d7ceba093e5f16e2b17e2effd947d72de8ececc05f96fc1c4bbaefc1baff7c0a7af4f5f5b2af7b1af4d3c90257171605e074ab10a32f2cb718c182e701271acc959877de387cb0751f529c0e98a609abdd019dd18f532746bf442012429e075879308649b3a885637f2095b60b69f1fc3f001006a3ef65f40d0c9a380f6bd7cdc588f45464a4b8e14d4b85900622fd14b82e60c462b05b6d0464c7e1a34d78f2c98578655d316a37fe19baebd80d5258ff98ec0b5f1dc4e95348d39e9201e37e8952dcf3c6dfd1faa7e978e5b5b578f0d145b8e6070b10e8edc4c377dd86badd7bf0fd5befc077e6de48316b78f4bebbb0ed9d559832e3692c5756c0ed65450f0a48ed740e719a00182c2165b711ea4fd5cefb25963f5d8ed953ca505298853937df86850b1f460f6f9b7bc5a5d8b76b07aebdf9563cf0e81350445930ff462c7e61311ef8d5623cfec032c4232dd053e433d290779f16114e13805bf69b01196bc282454b5098da86c7eeba0595238ba9471b2ac68ca5338da0eec36a5848358bc58ea2e1c3e07679505fbd0f076beaf1cd1b6f47401b86d79ebf8f96605817ab59066bee573c877e7a0084666936027df9aa95bfbe73279ebe732eda6bd6a2a864280fde8f483894a8d1569b1d638a73d0dad58b23c73b6025853c6e0f62f1385a5ada30f3b6e7f0dbc71770c534e8ee020f7b46f0d40f411ac4a3a703404ce5b31b0d6e3562f264ccbaee4a3c7dfb373065d410b8529c30a4c9026552c0267cfc797259210eb776a0a6d10f97dda2b443203a3351878aaa6bb0b1eb5be8dbfb5796d43d9d5277649eb23f52008cfeaf0a800fc9d81a29b41932d484ab6f7f1c0d1fae45f5a635983ea9020ea7851ec7846a5ff1b889a9230b5198998aee50141baa8f20dc6fc0c62ce89a05cd4d4d301de9c898f147ac59ba8500d640069bec344afda70e20f2d50108614a23d80c97cb859b7fb614cfde7d29b2bc1e5455163303f681eecbba420d9c5f9287a9e34ab0b5a6116fef3f0a6fba5b893f518d7abbc2786f771daebaff0f78f9cd08c28d7ba107b7ce93666ca9e2f6a9c41246fc2b536828a3df2083d59834f35664e61462cde20790939a814b2b8be0cd20003523691231e2d8527d0c83d29d68e98d607c793e7b81ceb941c26ad510e8e9c71b1bf720b3721272c7fc08efae7c07ba59cb04b7334ad6ff2b00e60ad3d4ae82e1c125dfbf0527aa97e200a722774a2a66550e466e8197fd991a808e14b7150dc7bbb1b9e618a68e1e8ce2dc1404c331d57a4823812e7f10abb71f465357372e98fd04dedbe407423ba0f5b7ce87b0bf704a148a87bfc4cc2984aaaca91b3f296f6664b3f48e9f22bd1371e1442bf6acfa311ba805a1988619c3f231797c01e29a80299557d718719a38a6c2c9c929423397b0d38680dd2ef0f1911efc65db610482dd283beb02b46b33e1af5e015dfa2175b700e4171ce8733f9a2a03ce7f63a74d72c0e602a771d00324afc958bab417740ac71094975bd1f8c10bb03abd0829dfc383dd7b6925bc3936440d0d21da08173363b5d8d0ddddc543ebb0210ed56f6dccd09bef7f84b50d4df0586348f50d867bf01538b4731734c14c68d60100ea6ba0434be37f83e0b52f01402ad89c409800bca9a037e0b51860b1f79a9c7ef3ca4720faf1f2c425a843f6867165c5204c3f7b084c9be441549b17b0d00bc5b896c9aaa4aea94fb82382a7dfae46572c0a0ff56a757961cb9e8ce61a0270a63c43a5b32b53079a97342120ddcdbd83ff0a40956b5bda290270f27b6a2e9045e3b7f7a57c16ca6647e678a4a649445b7650735e8a368e40208a6b2b4b71f9b983d16f95d418e994603dcfc2ca63e3ff2214ef9f3634e0fd132d48f778a01bbd34952ef883399051ff355ac139cbd1d1c807f8949642001c177432c10c7d4106cc5300106004ec62169c699cca7d13903e344b7832bdc68e3fc36efa19410a4931cce64590590ef74570fdb8327ce39c22c41dc9894cf9343bff09f8fbf18b776a51dbe24746aa1d96601f82cc60888e583a2740cf0cbc298fd746100d2d84c559c70b5f0e405df952004668266c79ab45eed9300b86012985894cc8542eecc902ea5641ab5e0c57db1ef55602740e8890267d610d575414e3bac9a5bca6a9d101078ff560f18ec338dcd9854c771cf15e0301770e8c0bc896619700dbbac89ce3dcb30b5ac36ec8483d39db760bedcadfc9afc0570710f1678adcf3fd66d58d905d3c705b94e1e54972d2935f3eeaa228552912787f03d0b105a87f03ce965db0ea267ae3400113f8dd51c5d87ea20b5b9bbaa124c095d0c36562950f02d37e0a64334d16250c727c4d0d70b485e9627571d0cf068f40eb616fe8d9bc05f6b4f328eecf5148cd03ce2f1868687444bf479a537e0279e10c4eff32c949d66e1c3901b474026e9ebc98ba281b9aac16b51f53777401311ee0f05688ee3a6e7c9007e341e23dd4b9c18ae446b8b00a183c0f05575f82317cf4ad063ebe93882c6642b73079bf4ef4362d61d670a2117add9b90b5cb7642b79f9d48e74999109aa3ec738727299dae1532adea2a99753e70e9e5402fd317e4c2e9ac0a0e86ab8bc2ae3f82c414959fcd0db9f35beff33a012eb886bae9061a78b2108186c9610a154e969bdc62a0e422644cce44c7a03b80e77fc3404cc7ddd7be8555fb88815dfa505f3b9fe1bdb422b4adc9f2690940dff21c64cdeab3a9c59d9f0330fc73d4e90046cf9262ea1d30d76c631483d0e6ce830c11441705ed4d638a6d89f741e8e1c1fa78683f37d535c84def01a56510dffd1eb09bfb3436415a098eb3b1969905b3a80870e563df9cdda87c6602f017eec798aca8f92156363c87199381575f9158bda71fdaf1bd901f1f038610746e06c4c79ba813020efa599bed2701709f6425d8d9988165a85a780dcaa7d3a6e742bcf51acc9aedd02e9b0dc98184863fd917e8fb456f074ca65833582c2f9a01d1e387b9791db489d320f307330bfb48a576f5e294e4f7c1f09620ab281d6df751338d046ee44116e6206359194656023f1a35078ffe72296a9a9a216ade4b445f1b52cee7b97ee828e9b41e38b42e15f694decf009cec85fa99fafcf324c6cf2755c86f0fa3ede326effe15b2f900f4f3bf0bd9c77b1c4ed52d214e1c8679643f4426ef9d309391a6dbec6a81b1859660dc6590c32726a9d77d1cc2990e232071c5d82842638760c3a30dc82e4a41ebb25cbcbff745b465ed46bce57ecc7e7a089fd90c51fd0eb5323259edba8e5382115626eaece0abd3e1f4ad3da90a950f289ad187fe43945ef56bf8ce22ef5c09bf0d2ba33ee61288b606189bff08fdacab297e72b0fb18e421a6b5e32388d27379cfb728ee5a0a7b0ae49b0f315a3b8091d743545441f84a61a8f7a035eb5135b70a81b8869df39fc16573afc163174d41b4a11153f8f8833b3ec0136f9f0bd1f73ad0540de4b1c098dc2bdac7b384a1c5e8938eae7a04d1ae459f5424021810719c294d2d9332772a2b8087fa246f6d6ce17676431f41a60f83fc27878ef65a68e368186b48ad03cb698f82d0cff921e4b02b616e7f167a5a31ad049fdff22cd76c865e7c250cab8fc264e6cabe87e2718331b1d0c0b8221f7e32cb8f15b7e4e25cca219fc569ecefbbb1bfd6013d9d3aec6963c4db48cba3b465090bc3cc30934d6b7a10f6a77df24a32e946134609eb9073ce34d35b0a9d879776d2c74d6ab8c865576ec2efc064593bbc0a8260cdbea314d93f78c80310a31f27a87bc9ff7b58795aa81536a658a7e224f542bad52d63264b4989ef500b190c500e5c652370e765c0c5c119189fb3176dbe4750f6d05caed7441a6e244d79c622d230d8ca1eb49765bd8d8460936b65b5eb3d2c38b99da48138cb62dec51205e4b1a74cb9abc45b2fd854dbe1a1a3d44cb48d5f1db40d6930ab1741b66e4c1e502d92520e6dc601181f5ccfd46fc14f7ff70c1e9bff4dfce067fbb164e1425c75db34acf8cd1df8f5ebefe0ce7b0e30dc6c0092010ab1049796c01aae45ec431ecce43c201b61b67e400083214aae8356301d92eb23acf66f66a3fb1b707cd5e5b0a6be7d9288e5f7e12a7c1969fc7fea180248496a80b63751996438f127247667f29f870eb222f46c676d1f042defdb90ee0208cf4818ad14de817da83f703f860fcac61bebb7c3feeb4b10ba7b3bbe555501655c6df9ffc1c37442f318a45f3f0d9c7a09403e670c61200a937d2850c7bdda947d6770a9435b3ab4d4b164451ef7667f39b1e197b0b8effd8c42662c2c0d3f494f9e7958779da48dc5c3764eeeda0a0888d1d20824da435e36273ab5e62884cc65977671d3be43105cd83009badb813daf95a274d820fc6d6b23aaf6de8eea49bfc7c81159b410714c9c7803e26d7e883c524a6713b067104c09e9caccf71e80d9ce20f4ec8688f5f158dd496daad7e8d6d444c004e9479abe4611cf1e0030ba92ed7b9f547e5bf14abd684da1fa6d6c1e9219481b4b1ed32fc56389f7a1a06813c6ca5998d44ee74e4aa30522424d68046f1981cdcbcf4390ce6e256df38f6d4bf156ce3d48c9e018234cdc71d78be83e410a179dc5c94b655955132379f81e5a73d5481149081811da1635d0581c0440ed68ce240023ba8ba0260e54a18a8761b12c4a1c3c01800b2aff6b44e93ac7c0e29b0633cca8070f263d8f5a889e068c1058d684d9cf2a1161e9abe631c869eb50ac5c76238e75f4e083bd1fe1a9924d783e72359cf6187c1e0b1ef9f94656dec3b0e48f66972625cc70829a2254c7409c48ccb992de29415db50fcfa5f15c520dfaaaf2703f4e44c738600c1ac840d906cd9957251d2549f1aa07a3ea4f421668d9eca8820ff7ee4856153566aa7ea1eed10852243750165850e4f1501c0e9f0f8f3d722bdadbdb51fbcf0efca27c2b9e6c9f0eaf3d0a1fbdd44b2fbf8ba63dab61299a4aed8c1e08046d74f0a3c4fa8273455c05cc0c3096d9098a49558675ba5693535ea489043842af61b37fd2c80e0acff032b84909e1490a46734126fc065147d8b0d4e289d7188124272585a5f15ebb2f39b632d5821357bcd783a163d23167de7770bcb503fe3e03f3c34bf01b7c0f45f95e14e665e3e5252b50b779392cd91338c49426b3aaa29a7871c075c3c793d454f472d03bd97c030193c9098d1913cabaeb4ef109856ed734f95f92fc4a8a555520d527885ca30ecc6e98aa85abc80b35e498c9aac45e417b9b0025a3edfc752b8f3209e5e70cc3e53326a0939359fd915eac9db209577f78313252ecb0e916ecdab603b51b97919ae3211db40d5a5ab264470e519c74b8f65c5e6267d7536176ad4f561d05c8969da42f052d43cd0383ff6765f425de71a3c6e8c3e24d08474a2e6a75270516691da8f996a4a8942757f3412c9c0025b9810cece2f76c8cbae807183ea618bdc128ea6b4fe04d02b8a96936ac22cc36d283ee480c0d5bb6406777d7784865c9cde86196cefd2c0cacf7f6824452343bdd6bf848b2f693118a4a543dab130d63b499138fcdfa2900fec340ee543fcf617dbc5808e7396c14255cc5aae9ca5624c5a3a9c3ebac4cd2a6a6f444daa5aa56046686c9cd581463675e0787c3a09d37d1b8b70ef6234b9076e51388f5f4b0a47350f2e4e0c8be06ba6fd2d150fcef60f68289436a2c9532f1a72335b4b0f228ca5ad4c49691a491fadb709cbda877d7369e73f21701f8e4a3fe16c19a08356f0e61acd916458a945a26749b5ba8f71cea5584a6bb34b89cd2e224dfecacba6e78078d434a762eecde2cb41dfa107afd62d8c7dd063d63303d5927b3d08ad0f1ed032fcdd40938160ebc0b9588276671c1ef6a244f50d58c86a95a5a007a8c78e41f84f02a7ff3e9df97ff1d80933fca35292ea9a2ad94ed1c00e81828e2ce81eb1a3e7b9dc6ed55171c28ea340c5c82be24a87e0e267929e8511012d038b01a2d03f7c507d68827ef497c98062863c5a4fb58a8686be4672fb0ff0737b2195f3c2c85e80000000049454e44ae426082') +DISCONNECT +/*C134*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C135*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(7,'Army-Officer','2016-12-18 21:12:00.014000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000011474944415478dabd5a099814e5997effbf8ebea68f99e9a19b612ee672064120280a6655f4018f842748dc18c36a10a29b4d343178e0b16659d498c715a3c6f588c926f188c623d7ee93a8314b4c34880704869b01e6bebb67a6cfbafffdaa6648b2c63c0a642c9e7faabbbabbea7dbff3fdaa6038c16ded372e83633b3085c52ccb929eddf873cb3d7ece5717c11162b16999cb8ba636a7a017d482a10dcb5cde369819de5c1cd7b6a1035870c12cbcdbb147a29fd87f3ae9af3ffcf5d9f102bf6cc30a28920c89499038e704ce21a07442564b1f5f6e58c6278b86d658308ae1a251940aba067a0d3a6615752d4bfb0eced866013ce50867e7ff3bf95413587ef35294f843908980cc093ee38e8028178eb8c572acab095c980811580f300afae47ef23d11804b168e87c0a6f528bdba9e96fed11058bf140dd3eb30961b6712978465db173186476cc7aed12d039aa95b9aa133cdd478d1d0ff4cc4dbd37b22a49b860b5fb82ea3bd1b428fd0fa122d4e049c2923b0f4fab31152fd50648522803bf4679de3389bdccf6ce158a66d4a8665320a214120996eea13a04dcd23a19b131ea1cf8410def5ed49144768354da907667eae067367ce764170ba3ae1766e270f6ca4e5b8c6a463dc716ca111814c318f8c96276b173cd0ba174a1a2c9d72d5a493c97471bffb13b2b620ab036f139ad3a79440d3e533918856b84e77d1af25e0dfa53cb0380377dda1db8ec8e80653988d9a6804cd894ad4266a112fab41285a89bc368eeebeedd8defe2e7eb77b97e8e81d65f0c3a03aa0328ebb1c1bff0a379c7efd1715e9ef4960ceda560a75b21a440b81df4925519225377c19cf5a42942b60e7d794636953135a6a4e42383e13885601a14a40494c9e652f79601f30b20d4fbdfaaaf38527b7723d27fa90c53c2431ec219a2a0fb4ae6e6254f20425eb8b047ea522499605497649adac54d89a5909ccaca42a5a321db66f1a74a502ba1c874404fcb12ae4f363181fda8b4cea2044bec3a9891cc1ca275ed913b77d9fc916a4bd2f0f0fb891388539b0aada353f2cdb7a877ac07c8b719b702b37d471b1a2a58c65a40a1cccc6d1938fa123c5a089101255f568686cc2ec9367519c71ecdcb91b7bf7eec7de3dfbadae8edd72aed8fd405559e03a4bc8fc472fbce960d9141288af2cf39257b70a976a823fdb1290714b0513fe50926d1b8e62679f8c8c15463052011f25a94abea9a9a9c2c9b366a1b5f5246f5fc8e7b16b571b0eecdf2ff6ecd9e7b4edd8231d3ed2f52fe170f0d148c4cfb6bcf59638164cc7564697f9110ba8f858fc0c2825814f268d91bbabccb259cffcee301435c0554a878aa80f8b4e69c0fe61db2bf221bf8a868699686d6921122df4ba0103fdfdd8d5d686f6f6767bdfdebd7cfffe03bd17afbcb8f6891f3ee16cdbf1c76382744c04c29f8a781de7c605eba59aaa6abb6deffe6f0ea653eb7fbff915b3bc2ca614750b3393316c58b50807060ad87a781c3d6992174a0027353761ce9c93f1b1f9f3c92bd5e8eae8106d6d6dcedb6fbfc3f7edd9f5cbd3cf387df9a183ed78fcbfbe37751e285f5906aaf3f8a7ea2ba4783c2e0e1d6abfbf582c5eb36ddb76bba4a444d60c0b2dd565b8e91f4f473414842ccb18c9e8e84e17312e82104424180aa3625a82ea16c7e0c08015425eae54735f2a5aec114996a52557fedb872ea1c71e4293dbca952ba54020600f0f0fdf4b6563ddbefded7628e89734d366b58918365e7126756a1541bf0fe160c00b23d917a0725a0a8b29d075dd3384aaaa765095a5e270e7ed4a2072271de3d3967cf143cb88e326b068d1228992d9364df35a8af3077cd0ad55e7b6289a6ea27fccc0b253eb511208c0a72a5015d5f3844cddceddfbc2a5943f3170c5e7e688ad15b252ae67dfdd92afe456422335af583ff51e686d6d65643d110b2af3fbc78aef9ed5522ece5f504dbac7462414625c52100cf8e1575522a19237645a925746992b80a8f9713500295062d32665fbdaef927c01b70bf339976d9c7a0fd4d7d7bbee679a46a1c0a4d74f6b2c5dbc746ec216342144c22111f0f95880c2678280e20a3fb2be373780a4b77755c7b65d3962534f91cc62e666c6e57be8d4d219fffce0d47bc025c0684b654d1150a5336301e7f55567d539b1689845c2514661ed017709a87fe101921feeef30a14704483a5118eadc288c5f4952ea87e43abee42b8f4dbd079a48ebb8005c117778a8e834d4557db5a1247bff79a724edd278822b9ea5e1794155deeb01ba242d57923834739a86c6f5ecc83f3049799d932af9c4fa27a7b091bd67aba96bc0ac1901a9343eddeeeceabee6942affb7e7b5d4d9fe604832b4a297072a8157144a6269320718f73c40d85d0edcd40b19333f3ad3b18c3455227c7ac3f3c784e18408d4d737e0f3674d678e6d229db767fb15ec8804fda8aead43666c8ca904dc4d62af0a49131e9808214a65aa62240a2553cbbfe68f4d5fe2581a53cdacb8f8ebcf7d74041a1b1bf1b93313144e0c47fa47cfa94d84ffd7a4e9abb6a6d61595ccd53d6e181d25c0274268628c14b02ccb94cdfcf897e983872989a56479d4bef8f61f7f3404667ca211bd5a065faf6e66257e851dea1b5b118ff85f20508e8f3236595985d1d1b45b6de0f7a990fe4cc0cd01c7cd21532f8e595aa119c24ec9d4176e78fcf563c6715c04669c9244794b1c3b0787d9bdcd2d386d7695d8fc6ec7b76c38d759966d126839140ab2586939465223b0696a50144570ee850f6d9cbe63296631772b97d5bb291d782c1474d63df6dad412a85f381d0e576168069bfdf12a268f5ace906ea0a222bcfa745bb93fe2b0c8704173ab082780647992129128b2144a866178b30a5170e7676ee9c53729f6cea643a69bcf33a655e06b8ffe766a08d42cacf2be3a4616bca63ec99fdcd3e320a4226719f38325eaa6a8aa2ca90e0770c9b40a31982bb2bc6179df771ccb1b40dd3e6052d1f74992b02976a8f6bf4a99ff790aab412e2b8c2a90f8c6733b3f0c946327d0bc30090354c745960dab51e1331c68a6d932833b37b7c8d2e5e97080eb21bf9dca6bfcbcea0a765a28247a8884613993f7ade0de01805f62e2b7997127992fead258feea02f8d3320d10cf6d1960579e5d2542213f1efa65fbdf9740dda949a812150ca630c3b144e5a8ae7684f886c5a5c1758d25219f9fc4c3c1207752c908cff48c8b9c65636d5d250b10f29466b856f7925622cfc5033e3cd53d24da33692c577d4c2fe83f2301b786cc3f6ad806abaa4a8aaebe3e3cf5dbbebf0f81caf9498424aa78c460b46889a6a05967ebea7367ce283b2d4ed238679896302c694058189993846c08d697caa192e4c267cbca90366c18b6e385904cd527e697c54081b3fbbaba457d85e4cc1b3525d976dafab2f90b0392da1b8f87d9483aed5664fcf0373d274ec0df1c47754c65d99c23b28e31b3b1149b2f4ad6d58678c0d2455e221dc64c4ad836c566765312013a95a69918cc16f1a9f2046653ae8e93475c65ea75602ab9a5b3ce110fbcb90383bc8bcd08f8cdd6114d912d7bb72ea48ffb63d1f1747fa718ca6af8efb752274660fadc6918d5284f61b04426aa5a1169cb6d578dcf4f4c67d6de369f3c7ca854200fec544c369e889260931126ad932f9ac866f334d45762dda20b91d9b7057a6e043e892352331bb3575c8b3beebf1b7fe8febd98511d67c814ac0505c87aa1f83fd36a672def38bc97f5a787c46e3982c36f741c3f81ca39e5989df0f1540a4e57a170dbd5cb70e70dd7158d58bdae6efe4948fceab146b4fbf32c952c858f62dc20854c95088522c53d2579dfc830be70d9cdb8e4d4a5480fb4e3ae8d1b30bd79011e7ef83f71cb869bb079cfcb90638a08fbfdb0c6b2d6693a57de1d1abfba41118fab7e95ff6244778e6ce93c010fcc89a3254065302f97d6d6448f7c6c662cbcf8e21d98516bb0775e0bb2a75f88a3677a0c01d23a6e8216a9c2477c0af507131ac57e763c072514c32f1efc251d0fa3b9e524f47677a0e3c811bcb4f9653cf7ebc7e1944990a9ca3a12777ce90c323d6399b27069e348c14cf5691a3ab7761d1f81c4bc24fccce67de93c45b9b86acddcbaefcc2d495846a253d633413132e8b0ad411b52491432139ece2f386e5b90012a9db9492f74f6f5e2966befc0f2b9cb50dfd4e09dfba61b6fc459e79d8d079fde08512e019a2d5c65640ac7ca0ee7e4eefee27a45e5f744fc322fe60ce7c81f3ed80b7f4560dadc044a2b23ac8894c8f7e2a5652b3fb56c56c8ef64b76ce59534696d298ce2709406752aaf8c625ba165d3598a44c2bd47ede81611b091a15c504b4af1e36f3e8b15cb2ec2fef68378e8db0f61de8279b8e9c1ebe0c404e234f893c7dcb9c0d1758ba77b336f37ce4f9edebd3f85b154011d5b3ed80b7f4d60ce340c770e21e897a215cd5587aebeedf6728773e767dfb987551575960afa60850250e897ae409388884c24dc09462712790aa37c4e070c81eede5e6cdaf010e47e0b575eb5062fbef8226a66d661cd86d5b05413328560221c7475b5200dc5d303b9f4911d83f5924f1a2f4d94a0ebadeee30a2136dc3f209c312c5cb862f1d635eb6e74f66edfc25efdd58b4cf607bc8ae2de6190687f74f1c9f77e45428ed4a74544b244a2b72f8586fa565c75f61558bdea725c7bcd3558bd762dbe7cc795d0988631cd427d65a9fb905058b6c3c686f3f9ae3d234da198afdf17501879e003a7b3bf22905c309d8f0c0c923c71565db4ead34f5ebaf68bf6f71e794cee6d7f17f1b2124f904d00a779d2ddf3c9d793fb3c818f51426b545233398d1a9a85d96573f193c79ec1dcb9a760d37ddfc2c6c7d763d4c84150fe24a3416198b6eb05d703239d6d833395a0928b9405d1fdce0737b4f723206546476dd3306e5dbdee6b7766b49c15e8fbaebcbb2fc8725635c2a189c1dc233169f9a31e10f4cf5138a234078f53432a140ce8a68581ee3cfadfecf446cc3bbf79375efae3f3e8cda410a0e92d4c61649103f4a2c9d3fdd9df94cf082fd38b164bf76545d75bc741a07a719d645b866d1bfa03e75ebaf62b52ea07d693f70cc94fff08f8cac35568ae2b834d5676e39e7be02788b8ef35d7fab100544ae631b27e216fa0a853771ece61e08d1ef7211a2e5c7e2178551e47868744ac2400d955ad4258e3a98292eacd7e9e8cf1841a90394d154ee7d6e3c881c6734fe2be80dfd1c6c7bfdf74e605abcfaf7bc2bc76b5a9ecde6ee3c25bca909c5649a0ed893b0c93d67749b879619107a4808232df510f98b4748c533875ffa11b76c640436b3d9a97548aae549a9505fcee8335333b5e5047070a5b68985b22cbdca0bde8ddd6fb81e0df97c0824b16f14028e40c77763d3f77d9ca952dd226e7dfaf87b4f36d8b9d7f631cd3930977227c0f01e6a94ed70b054a624a40f84995653c2fe8c89b36bab70fc0e8cb89d90b5bd88c856562309d75c2b22c65331acc0c5eb398714921a38f709981ac8f9e778e9340e3b9ad92ae15edfc68e6a7e77e66d50a6bec25e3f9db0f2af73ec1f01f2f54a1ae32ec0eb47f0a9da31e609324dc6379f7c62d2528f3fa81268a3452f61d48a37070549c76de1c119b5522751c1e0275c08296353635d7b76c38d879c07173cb7bda4921f8614ae8fb12083744983351975ba2e5d19f4f6ba86e8e2aede250afb063b10477711d05cd8f3e9e641344e885f0129c568648280e84593044c1b0c460f7989c691bc1924b4f4521220c8cfa7fe0e4539bba87b20772b934c2fe18149fecdd30eb7efb04e474a4298660380493665d1acecb284ceee3c1c815a13098cf3f59f7252efe327426c17baf5d2372f7c60f9d6b9c2a10d76db877ad475279e4768fbe39edcc9a57c652d9e7e72d5cb0ebd46aea17b7becc7f7a72d88986a36479f1a12dff3709949f5ce13d7c280dc6584e64859ea361dcb416c87e75b5ec932f50fc72ada24aee837a48de1de709f093def740d0e0eb36a78261d83d7905fb49adbee1a8fc15894bdb47fa73c0d63e5cb5e96b9ca7768a677e7f40c48584c3af771c13f0bf49c0ddca5ae3de7f7e51c23233759b872b4aec6c6f868674b7d2b3795c62171089c55ce6b3087829f3bcc033246a0e5205d965ead61be9c1fc568c157be6ddb60843bb865ddd06f864961e2ecad831605f72dd679db0dd8befdff99be3027e74fb3fecbc87a9eda7e88a0000000049454e44ae426082') +DISCONNECT +/*C136*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C137*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(8,'Beatnik','2016-12-18 21:12:00.015000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000017894944415478dacd5a77745cf595fedef4ded566d4bb644b9664cb72972d1b5ba6638a0d09a12404424db201422085dd2484906543380708e600bbc09ade023638c6967b53b125d92a569746d248d37b7933b3f73716841a3b39f9639fcf3d337e33f3debdbfdf77bfefbbcfe692c9243e3de2e1307be128c473af228a203b2994c9fef6c5ff4707c70aa0c405f45e4b21a1f050f014d7500c52b45124a980f83f72e1c58b1bc47ebfdf42b7a8e0384805024190e3b823f491b7b3f3e4bfae003e1412cebd5753c43ff75a4ad14e11621f520189f3bde8aa55ab440e87733412099bc56229a80084c311c4e37c522e97ffaf5028bcfed4a9ee7fc98eb20264f41aa5489f5bfd18c5a514551487e62240059cf7456b6b6b373aecceed79f93958b3a6093a9d161e8f1b9d9ddd387dfa149249aecf669bae9248247c43c3e201ab75e2f58e8e930ffcb30568e6563987258ab3f0a9a6f839c57f51ec639f530151821a773ebd5059394fe9f579ed39961c59f3c60db0582ca9f3369b0dadad6de8eeee86dbed79d8ed76eea4d35b29ee8cc5627bfed90258b3b21e60afec4e1b293a284a284e500ccd15c576e9bc0a60874ca5ddc17182668d568334931e0a85023ab51a3289849277636676163e1f5bafe49140c0bf85ce8da612e218e0ce1ec9cf33cc397680314d3d4526ce366e84c24b9141313d1782b902ceab9937d7956dd5a854dffba8670cbe7014f1440c714a2791144265d0218b42241212b4bc08068309da81673d1ecfed3ccf27a906d69789f329e2d326668ddb4861a418a0303124501ca070539c9efbbe800a087fdd8508cfac49cae23c1f59949b71d1b3df5afda84a25144628eb5894928f27d06975616fff14f60eda301d4e22df92096a6accccccd06ef81089441a43a1d03e2a40345740f27c0a602bcb6efe038a198a0a9ced8763143d14fd142e0aff37c1272f3fd77cfbedb71f34646498dbf6ee81a4ef80e4962b57204323c6b4c38d40300e9d4a0583528a80278209ab0f77bf7b04a766dc282d2e02bbe8e4e42468f59de170382b1e8f33b8a676e17c0a90cfadfc4fe70a9052e829dea7f0cdc5299cd582af50a9542a15dc79d71d7de150a8d8e7f7a3a0b41c836d7b51277360e1a2853861e3e170dac1dbc7b1667e1eb2d44ab86c41bcdf3e8ac7f777c29c99058d568dd9593b4837904824be4345bc44bbc03489a7fc13e72a80a9eed5143753ec9fdb3ad60bacb0dd38cb50ef7e13f65736ae6c309a8c474687466030e821932950545a829e432d3014ce072716c3909606211787bfed03dcd8540513a1adbfcf866fbdb21749891499261342a1005c2e0f48f05a084a6b28719657fc7c0a602b5e4b71d11c74c6289854d6e06cf37e48c98f7cd305d6ac69bc2d10083eed76b92096ca30e90ee1868b9642e89fc11bc7ad28b6a4412012c0989983a8630c8d59115c545500a134030fee9bc1abafbe02a3d1c8e0c39a99b1d0116ae8e594388376f25c306205e8e875e15c114cbc7a2958c28c898a28765201dfa8fd6515e57a673831edb68e4a14b4faa5c5167cf4c8d5f8d36b47f0d8ebc750427f177002c8940a44a371acc80ce1a1e60a28965c8fe3a12c34adac67ab0e5267061f76c9c7a880fba810e91c1af87315c09aa57e0e42fa3918155074e2acb0b55101835ffb633a0a4d5afd1d57348db8c35ef50dcd0b6129ca8628ec454bb7039b1e78119168184a9502bc5085ba92748cf49ec6228b020f3ff9324a96ac46fda245e8ecea4a1541879772b550305a673dc09a3979ae02d82f198556cc9d63afac99994a326b314905783fff23b54c22bea034f7c94bab0b36959855badad5d56245d502c4673df07b8308386761d40970b4df869b9fdc0b8f3b80153579b8755506aa2d06bcf9411ba2452b70cddd3f837d7c102b57af453010e0693d9651aead740b25fe269e9f1560d1a8d466b56ac971ebf45f3f5f00533ea6ba0be69ab7967ed242bf68a70bf652f2fc97abde5c5bfa9b872f59fcb398380a0d253aebf060c1c59740205581f7126d3a5d08fb033028a248a8c8074548bc242244c341f0213fa25e1fdadbc7d06b6ec4d2b56bf1dc6f7fd5f3d25f76aea14bcf5268e6e01b9feb8114848a4c3ac36f2e5ed297ad5018ae7ae9a3cc695f703655c09c9d663062aa6ba613f708a4d2170890fb492a635f4ebed0a06bdc76f3869624474d5b5006cbe5f763ecc86ef80efc0f0af374501a8c10c8a4f00512183b338b85cb0b214b2fa4a514201a8b231e20e5b54fc03e6c4547af033e229b8d259ae8f75e3c50b97f687a986ea1985b7d867fc6427106d5add76f18fcf62d4d05bdbb3ad0fcf87b5753016f7ebe00b60b667a6f144a248bbd2ed7ee60383c39383c12ff78d72789939d5df1f7df497d1f5795999f7be8d2c5dff54b129877e753882b4c30696518ec3a81c1b79f84461042c463a3dac588252528aaad80a9a838953c0342321147d469c5d4c0386cd36e4c8d7920932b90ad95b92f797647b63b1c0dcde19f9f63a08445a7aa6e7fe2b68eb4da22c1d0ae56acfcc5b66ba7fcc1573f2b801d6c1728f99ca98989870eb575dc989d9d0d97c71d8b8523e1a9a9a9f1c9c9e9d6975fddf6fc77e7a5bfd7a0e70d9577fd07f4c57538d3d5963268b12487fce20af0e479c4f11866870771fac36d30c9dc98dfb4067c9c233f44a848f2085947e175d809231c3adb2692b96a05e70fc52257bcb033cf1f8db1fe631ac0c01f554b258a576f699edc70f37a2d477b32b4b7038b7ffeca5a5730bcfb0b05cc1da2b7df7a67cbb6773ef8f586e66633f1b398899041a7878f1ad36677e0f8a1bd981d3c8db82a0da1800f541f540a19ec9e20e4091f56966461494d2d8acb8a70eaf04168226398bf6605784e4109c511f37be0991842c817c4d8800bb38168f2853ded6f1e1d77bd4cc933e260b065c41263b9ddb0a472ebd3bfdafc3db9250bb1191b76bcd51adcb2f5437328c67bbeae80d45155351fe634adc4e3f5aa04497e4928e0bf714df3959bf4b9854259d7011a16a6604d2421578a505b960d7f288a695f18322187a9593766bd1c2edcd8441662162651108555e588118dd236c331310e311741ff293bfa5a87e128afc59f0ff43e3dd2baef4e0617823b4b5e40ef79a342aef9e491ebad0bd62e54257c5ef88626d174df2b4f754ccedef9293371df44b1eb2b2402c2ebad2a247eebe314aa5ffcf923919476e2e0d62750ee3e85a2f21cc8146284c9653adc51729cc91465e8f44a4cfb7de89c98859e66812b1a4b53b3004f06930f87303e3683ac4c1d26869ce8eb20e3db7011c2a62cfe77f77cff115b34f1883b980c7daa31ff7ed9f296fbeed9b84a4cde34e6f5e2f937db5db7bfb82b9f72fe8cd6bf52c0ba3291282910fc522e16fca8a650a1442c88a9683abefdd06b24f91ab47cbc13a21dcf61f1d27990eb5464e684884562847d1e116a54b15888b4343586ec1e48e9ce1579c694022758500b0c5a1d189ef020472b857f6414b1c5d76050a4c4e9377e8a84501a3c3ee83de8f14b1ffdc1fa65b7dcb0b668b3c64c43905404bf238a75f76dfbd9f1d1a947be20649f2fa0799e544b0bda6fd088d3cd7a31d2b5623688636c2a84d5b76f457ddd620c4e4fe1c3df3f8c0b7305a8dfd008899a619b4722124482b9496a60214129198d100f0a4098a073c4407461b20870d8c33870b40fc70362d4d6d5a2ea82ab3136780ceddb1f8746436308e9ea96752b50bd71252263564c9fe943767126c29e187ef8c4cea75e3ddcf3637f241af94a01eb2ba94c8e9b5c54284b53ca45504a08cf6e1e1aa51893532ec4cd4db8ff77ff0d93468217defa0bda5efb33fef0fdd5505872c9068828c118ad921d111a4c7c561b86c627a1346a613628c025388218b9517f146eeb0c760eb85179db8358585b436097e1cda7ef429976188a50119a1aeba12e3441c068572ac7a99dfb906e92406b31c131eac0e4a83ff29da7b6379db6d90f7da1800b2a250fa66944bf9e97a3809030a75788b0b72f0c3941a43c3d8ef1a01e0d9b1fc7ca2575d48c313cfff607a8711fc0da8516247416daa9389c34a0d8fa87d04fd8e6554a64a4eb60a221867d168d26e0999cc620af46c6963b70f9da35181e19c1fefd2de8def318ca327208be5528afcb45422065b31fb95b31a64626d175f424ec611f962daa843937131d2dc3c1cb9f78b7c4e6f54fa60ad85029156a95427b9a46a20bc492c8d28b5093a7c4b82b8e108d841c0d47713e88d63e1e5b7ef2349ad6ae8397e8f0a3ed1f4371fc252cca25dd11c9303d3e83ddd6048d7166ac56fa9146facb53f2024a2648d6c25d5887fc8bae4543650932899ee344380fddb989c4af0faa782e6eda500f63065d67d60fb5520e11d98fa1de311cded5066d9e1e575d7f39446916380fb7e2925fbcf1fb83a393f7a70a585b26b92edb247ea5907e1ca5645dc1040c6a09d4b4fa3eb2536a629b349d142e9f1f9d833475adb81bab9b2e84298dd8c4e182adf310a9ab0dfbbb07b071f3b751535d4d14eac2587f17925e9a464512e4945741aad1a23cc702995a458dcfe3e5975fc2d8a1c7603069109a92e3d68b17c390a7c1f113236839d28795951664e8d5d0e7e7436fa6a148a2442216c0f8d11e5cf0e06b3fec773a9fe0d6574a447c1cb68a1c99a1a15483514702278683a82e56c3498d9393a1c2e24a03faac01d89c498c4edbe1f4c550bdf4126464574365c846d1bc0529e9d1c938e45282229188c9688a565904fc216a502553d694e73f76f8300e1f3e869ebd8fe3f2d5253839eec7ec50120f5cb30a864c39c41a053edc43532cd156f3868510a94c88d335dcd63178ad561cebf5866e797e4f4e201a7570c4f7655a95a8a7ba40c5155894b093084d384244772178823134d666a2615e3a029124a65c11e4a42be10b46a193c770bccf85ee91004aca162221cf434e492d84c9486ab4ecef2758100be766e7c21ff4c34a437b7111a9339def3ed503a9428bf9ba5114689de8b646e09b11e08e754b9099ab825c21c53011c7b36f1f41450e194489105ea707b1104fd67b11b8902071e1af5f5f32e1f51de736544a6ec930c89e8d2684c823ce2dca90e2e45000ed679c0846124827e8e49975c8a5c4556a29192f198626fd904825d8b0388b5c27a9b0cd41834b10dbf6f368bafc16e854d2946d602b2ea03d603d90e49210125b190d06749ce8c082ba7a64992d38f8fc4d5010b3b59e0ce2def52b915fa4815426c15fdbc86e842258575f8a04cdcd728d0172b512428d1cb6962e2c7be0c59b46bcbe17b94baa65af1658349b4f8e0648780450ca84707b79ba910cd585069c1ef3d17921723395101334a65c64077c712cabcec4e28a744c3a4338d869c3a6c61cbcbfbb1b4ec13c6cbef147c8cecd271632808fc489d592c42852381d0e1cd8bf1f034343d872ed66da19e089fb9bd15021c7cea35edcbd74392a2a3490c96438393283319b0b8d0bf2c82c8a21a59154487412261db97bebcec3af9f18bc801628c05d5daf0c54e4eb15ee50021cad54885848475536d66542a796833d243b31e02456a32232d4987506531062478014384a9ec8402b3e8f58822e80cede51bcb77f8c56cb049d291b4921d1a9b9907a23173b3efa10cb56afc78f7f740f66676610a47bdefb9d455854a6c398278c4a41112eab2f84542f80422e85cd13c0bef633342085b0bcba186aa1023f797ddfb1bf0e4e5cf0a99de036d5abf93cb3567845631e1cfe04e1da891e6aaa0d8b2dd8b824079e501c3da31e486817bac93d3291cb4d97c31b08a1b5c7869e112f4a72d4b42369b47b724ccd04e00f04d1736602bc241d59b9e528aea0de2071d9bd6727aa6a57e39e7b1f20cb21c11ffff427b4bff32b14e667a4facee9a4a6cda944e37c33346a11c4420946660378abbd8be014e63b4602db8e4e4cdf45c97b3e53e22b1bd4c9921c134a0b8c985f68c41bfbc82d8a84a82ad6233f4b8bfe710f328d0a48e9dce12e1b02a120296a0003035168450aa4c994b4133c449a30423c7b38152175e4b074d3dda0f1189d473f4686c940c97064fe54e8eaea84ce52829beeb8173fd8720596570a919f63a4fbf82110c7316c0ba2565f00ea36f8e2210c3827112747ab4ac61dbe1057bc7f28eefe8217ba76b93eb96e493ebc6120cda424f3a5277b1c074117c3569a96480da3b104783e061135e298d58e23c7fc682a2b40638d05e62c0d681ec7eec3c3f02a4d9896c99301825559510527e569f5de790d3e5f08b1386b6612c974132e587f113e7ef745b88992d526398acc4ac2bd10642031e38dc145bbab9293f885639051dff97c4918a5fc74965250f5bb4f02f62f1470e52295efd2b565aa0f0e5b919f6dc03dd72e401fc182270ede7e600c5252c3e27c0dfc1e525572a6078fd991a3c8c4bf5d5703639a06128584a0cfa1bd63141f9cf2c194910f4f208c2952e00d2bebb162493d7a0686a86fc23019f5a42be9e81b1ac6f3cf3d03e7441fec7617f55012454497622a60c21e21b88a880dc598f6f0f092e658a9072a0cc25d1a2977f11f5a82912fee409de4515d76e67d6efab2c71f467d4d1ea99f1cb5a526120c3bad7c0212e6c7633c462766080251dc7ee14234af290547fe8fd002914090a24a3b5909cfb40b2dbb7be1ad5b8386950b919d9e4edc5e04a9ce4c03bd1d13c37d387cac156d830e72ab22d8c77a613bdd02048304310e129980e02a2644f00445da7932826ab1305c68105cf5e827810fbf3cb770772c971bfa1c716b4961ba6c749aa854264569be11469d1c190639466d0108093a322ae254ff243c76396ebbb40eab9616a566da04d9e4d4d34b526209f1f758ef04de79ef240235abb0baa19cc6511df4e9f9501b69040d7ae19c1ac1f1f64eeced1c4d152d21c719f47be1b00e22e89a423c42963c4678261baf52ab614838f72dc8e29eb185446ffe674bf02b4f49525ee8ce65d2abac41d12b440c121731918496bcbc308d061325ed8000f9160d0646668975ac90c54cb86b53039635e4a656871decb9e6eeb64148a9889e3e3b0efbf530e56461694926aae795419f9947946a41d0ebc014cdc3c7da3ab18b6602f2d2a92772ec098690221a8992208610090452cf904c5966c882d31fbff8debe667cc3f1999dfed692f467a613c65bade3c3d09095564b63c84b5790a0a969f695a5d8a5fb8c0d0a2e0d775dd68095cb0a91100952c38a80b4826d42d0e9c5c10e07cea4d7c26e1d2780c47079f36a182d7930a667511f39313e328c83c73bb0bde518615e942ae0d31cd8f351361273f4ca861f29a9be4cacf2b71fdca3ef1b19e5ff6e01e559aabaa51baf69f3053ce8ef1b40c8eb868af3c1ac89c1a4e2c8d303b3ae00c21113ae5b56864b9b2a8941540401ba292511a0c6edea1c219879d1924cc7f4e4147d67291655cd8385dca429936c87db0debe828def97817761f6ca58551a41e3f7c7a30fbc19eef8642a19465993f6f1e4e75757fb06fffc14bceb903625296b5ebd64daae532634e51014e9dee85d3e5c334ad64dc698545954020294050998b0252c9f5852a2cadca46457926644201a6ac2e74744de193610f7691dc8b1234c3ae588aebaebc0cb5353550183310897871f2683b1e7ce43112bc59123e19cd0b6cd48ca6565ca952a5dcaa392b13f9f97904dd5cfc65c78e1f1e3870f0897316c00ead4e5bbc6cf9b26ee7ac5d2aa71560de27bfa810de5094e6d6214c4e4f4244db1e62e35e308402a5108d447fbc508c8ed920c6fd310449039868b14412f4bebcb810b50be66351cd021ceb3889fd878e606078144a8522353bb3271669a40d6673163ce438e5a4e6452545282d2946f7e9debd4f3ffdcc8650301439af02d861321933ab1654bd1c8dc45679bd1e71341c494d4fc5e5650847c3f0d350e376ba912483c5138772b4dd0e129e386901690f891d978285805ea3d4dc7ea247afd74754cb94580e935e4f3c2f218194c1906620a23011c3117b8d8da3aca20c7979b904d3987ffbf61d5b77eedc755f9c31c4df39bef6b9106b2c5a195d55f5fc3f1617175f33393929773a9db4238c2dc81a53cb26681718f6d9bc4b65c06460ff4ec2412ca1498e262ef6ff0b7c1e2f8462f6543a42ec12854aa54e394db596a62cb2d54aa592be9624169220b72027393e32617dedb5d77fdfdbd3b7351c0e87711e0777ae7f4b562a1572c2669142a6a8269e5f515c5cb4cc68349409840219a82712ccf7d39f08dd8f51211305a60d22326f2aad86ce71d0aab450929767931a5b7d425622e0f7facef40f1e1b1c1c6c75389d873c2ecf515a24177f8e15ff870bf8f24149086995153a9da640afd7cf279f5f201608d2747a431a2d3a31a0404a7ca021758e13843cb49b096295a0cfe773d06ecd040381fea9a9e9e3e4585d7c2c16fe47efffe5e3ff00e0682b463abda5120000000049454e44ae426082') +DISCONNECT +/*C138*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C139*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(9,'All-Caps','2016-12-18 21:12:00.016000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000015074944415478dac55a097854e5b97ecf39b32f9999cc645f08098400099b40451611b15e6bd56b2d0fd6566f4b11ede60282b6a2d5ba546f8bd20b2e285a6baf48290488802c056413020408840021fb423293cc4c663fb39c73eef79f40af82f6f6b90fda13fee7246766cef9de6f79bff7fb074e51147c9d8741ab35709ca287a268e9d10ac7734945e14431994cfc7feec77dd5008a9c669b4dc7970fce318ebbaec83269f250db241e491b174f18920919e03511ce60b85075d4f3c991b6706d5ce18fe4bb2c0d6b8e76c6ffa500de7bf05a437d6bdffcbb2acc4f3acdb229a7c800214e36c593e025321cb40c1ce4601272420267d342f428708764347a0577cc60fff7592b6b0efd4b007c34ffba079ce6d873c30bb41946830441c7418a262168c96c3a2b490960de5764fa47675102cf5e4bcae0040509b2a9b99d97ce259d4fcf7eb7f6c5af15c02fef2ccfbc6384aea52c5f3259ac0220f090c948399c20e3c866325689a40622c0531124e9f90c4424092e4303a40830014986253478f4a1b9db0315351dc1b6af0dc0cd239cb357ffa278b5d5c941a15451383a93f1642a382da54c40a4bf09007bac4ca993ae51a3a1f4892c209456848ba2c0075388f1020ef439f6ddbaf2ccb4af0d40d5c26b76cf2ce7a6eb4c1ac821322a45a693a741674ea7660d45203100204540583dc452508c3c94105d27c09c992300492479a0cb6bc64f7706a7ef6af0eef9ca01dc3e2e77c28affc8af4e772439c1a4570d55a8686124309422a0dce7ecba8bd7c9f88834004ebe58d41c9dc868a58f312a01d603c1b00e4fee13fff04e4ddf235f39805f7f77c8dbf36fb0cd353b3824b55ac4237124fc096821414fc609ac06a82694707cc0d814a58e8efd7ab1a08374d6b2744aa9f5c1d37d12090dde3981f5f3375df8ce570ae0d9bb86f3df28d41c9b52a61dcdd2a1cb23c193b483b9d1980c223dd883ac2213747a662e79de43201c1a8a06152f2be6406a00104b298a0cec9446920249d0e08d43d1bd6fb4b8663437364a5f1980c32fcd7498255f5b4126acdd2a9767232c5ba0d50dbc9e010f069b7a9141f9adb04220b65164d68a893a29851491ce5a8568966c2406e28c14049d82582c81ea6069ead4907b4fcb62685b2c123ed5e3f1ec7ef3ad955d5715c0aea7a67d67689eb84eaf49a1b33f131acb60e875b2ca3e49f26c80d2da12aa45718e087d3fd50035312546c612ff2b54b00851241c0281a36b8c65c514b111058358ab5e53817365f32086fd4891e2e8ecea88b5b6778c5bbb6efdd9ab0660f3c3635e1f3b84fb4958d240631c0bbbd34a1e14a0d16818b120a968e1e93e0583af0ed91ac6a0048d80c10435755821cb6e42491162cd8cf3a5d48e1d884471226d346a87cc85498a21951071f65c03dc7d9eef55aedfb8faaa01d8f3cb895b8b329237fb42e4b584001de5ae86daab9600506283933844e209a4e9fd28c9227bc9fbac232b71962efc4027ee8bd3df0c8c82b84aa3297025e5b8a0e4e1c306c1d725993bb58294190a04a3f4c81bffbab6b2f5aa0138f2d4d8e78c4669719cc8dec2b162246f32ed238ae089ef4d5c0afd22516b860d6579c4306191e1824ce191d84f288544340599e710a396edf3a4601e3214591366421623683e7832f0976665c8d9b8c92f701cb76e5d254bb4ab57038b7f3aeb5b36b1a3ea9a1c8d307e6c39a4549c16e5b592829697d0ddde83ae0b7d703a65e8c51842bc8e8c8ec14201d2e974e00c1a887c1ac282111a830999ce1c58ec4eacfae8208c6633a60d1f8cfe86c6991397eedef9d9e75e1500f7cd996b12f4c6b3448a0576ff19dc393e0b1523f2898134888b49d49d6a435ddd79e4156720a4b3a249cc816ca33c0af5a2c4578debc6144363b5a3d513519bb3164964db0db090e155bb6b994cc2f491c508b6b4dd75fdb24f2aaf3a801fcf9d936936e91b78adde9648a4202482189ea553b54e47af8824a7455a5636146b16343a0b8c261dece9e9185c310e4d3b56a12279122387e6a3cb1d40afbf1fd168040eeae4a5830be0138113a75b90aba4baee7d6bcfc886de50e0ff044029460d1d65b486d10ad3aaa5f779be0cc00fe7ddafd36bb49f92c7af611c2f2b9cca3c92c600bb2d0d06834e4d13032d2d75e83432be787805320b0a7062df1ed86b5660fa845278033102e143948a1d948263ca4bc901717436b4e0c0b1e665cf6faf7fe80a5b2f0740c69be9f4175ab772cc0a3ae83da19cececf77f36f7c7bf7bf2b9e7bf50da2eba63eacf94ccfce501bd0b3715f198982760e7d9104e2bf9484fb7c34c20389e872b3b17a563c64167345164789caa5c89a9421d0af2b3d04f35e1f606e1f507a1a3ee3c7c58294eb7f542e3f761f9c6232f7c70ac73f13f0470d1f81d6956eba41fdc730fdd341f9158142d4d2dd8b879135c7647e2a9c71f3b170885de4fa4a4d71f7feae9e8a5cffee6fab2df5e3b75d813f985d9c8c9b0abc2271617d111d5e3b0df8a84ad10c32a46219bbcaed169d1ebf12370782326c8c79195e954a31689c55500fe509828368e9cec1c98ad694804fd3871e85cedddef1e9c40b373f21f0178c5e1703cfafb975ec29831a3e98631842311c4e9dc40cde305ba3ea4643096bdfc324e3734d4c5a2b1df50bbd9ad78dabd27ab56ffedb66f96cfb8aea2105a7b1af4662b65410a7a62175f8c72306c81a9701434ec7a3408bee5208669dd7065b9d44e4d833d4204a0971a893f1082492b50e46c68d79462a4a50fa186267cf7fd73771e3b59bbe10b0190f1245ed1f6ab450bb3e6cc994337092242c64722615a5188e4cd5e8f072ffef6253cfcd307f1bdd9b3d1dcdc027f30100f8662a79a0fefb6277cddd9a35d8a656cbe018ade80f68e5ed88d7ae8f566551d4489912aa68c8185c64c8d428ed49a40915485299b0ffcd49f7c9446bd5e1fb21d169a7334d8268ec5bdce3aa5b9ae257e34e75bcb1f5d307fe19701987dedc489ab5f5fbe0c0693899820aa1ace40b0dfc3e130d8ce474dcd31ac5abd1a1f6f588f6c0a71448cd2751a4804addceff7cb117faf46703723ae33a1a6ee0cfaf6adc3dd65498c19e4408b9fbcec1a836fdc3a85da35e99a780c8c2f58ad8914addefe10191f549d66b718402d02e7c42cb4040db264b4d5addfb8f1c1e3c78f1dfc32005b1e7f6cfe2d0f3cf0201294662c7528453e0720442b45cd69c9925771dfbddfc7238f3c02afcf0bad4a5a6c24514864caa4c364eaaa2249091e876b6a707ef332cc1fe9a55c37e3788b0e42f1240c1f37049c18227126d2671404a371f82802c160081a4e2129c241a7a5f4eb0be0d3a6647ce98ebadbdc3ddd3bbeb088c97813adce952b563866de38132209a608191d635120a3a354031131817e9aa482c1203acfd7e3933d9f60dbb6adaaf765f9924ce7d45c90a52424d239094a3b1345b3beb1139b5e9e8b25b333c93062a763123287966368c5607a5f18fd94f33e7f0481700466a30e263d8d4014ed1881eaeb8f617b75a3e7b5bd2d53c8d5cd8a2a57af0490453cddb671dd5afd88f272923071d5ebccf0a4c2231c4da2b3e53cd0b81b59620bcc510fe65576e291e796e2be7b66c1dbd7874b943b7053529fa90492095aa485f406332ad77c889bb01913c7e5a2ef4214a72f98c0f3541f462324aa3e4e4b931a455e201d95e1b0ab69c46c6bed08e09dad752d1beb2f7c9b7c7346b98cf72f0128b1db6c673fdab84153386810e92f917232013126a2fdf46144da6a50183c8802631099664a172aae3b5774433fe92eac7afb35f8bcde2bfa824c8e4ad13c9c24672814a1ce6e2f52075ec0ed53b391226d70a2434050e421f606c01bb5c82ecc22bd1f8251c711088e1aa00d319a09366d398d46672f5265fc91ddabbdff297b34d56e5fd8438c15ff2c80212ea7f34c5565a5267f50210188ab9b05ee8e26ac7bf6477039443c7c7b212cc41c52880c22cf2edd11c107e191d8fed15a88142d591dccfff7607e62c30703c0449d9752c4b3e715dc3d998d5a1aec3fea45306180c36e54a36435192113f73ba9e9c91489088d95a74f7bb1bdf12c327e1441596e2e86b78d538aec850827e267bef9d8ca6b9b7b7ca14b00f2ed767b134540378800c4c973321566d3c9c3d8f6c643c8716a70f3e4b1a8183311711af93462003bff568dc77785b061f3162a3ab64392c2e508d83506204506f902440407fe0bb75dc35374041cad0b510438325c872415b19ea62fbbcd8c607f1c75f51e1a49fd70a77961b92186bc542ec6b78d465191136697098e822cfc79dda7affef0776be75f02e034180c9d1b2ad719468c1801d6ec14f2d2d99a83d8f6260170118049a3307afc148821115ad2fa67eadbf1c07b3558b976136c66232e6b9017010ca4904ce1eceaee83adf6f79834ca8c284d5bc75a15182d343353c168886d9c761b1a9bdcd85fdb86f3ba1e98278ac81d4943518f0b23eb86a324d70e43ba91a4b509a6340b906649def8e33f8cba04c0200842c79ffef8ae6bdab469e4118a004d50dded2d786be1dd1839448b876ecd8691d829459ee41249d477f098b35dc13b553be1b452434a7c7e775cddb762dea7cf2882093bd6acc46ceb4ee40eca446d7d3fc2da1c64b266459f8b53aa0549637e7ca8193d655da8b8434049a909fe361332d696a324df0aab8be897c4a09e522d49030f5b47ea3b5efb6c1fd8fabb975fbe79d6acefaad51fa71b4b34daad59fe02124d3bf1ed0a4e2de00ca2393d0d298ded29dcf7b184b7ab8899ec962b00c8124d59c4446cf66d69bb8048d522dc354e4befe3b0bfdd84746a8206621e5f7f047e8ac8a767dbe11fe546e937390c2b3523420e8c56e66354b818b66cad4a046924511234e957553712b369a9a31b777e16c0fd0fccbdffad450b17508dd12092885343a30e0b1ecd0d0d3875782ffce78f42176842595a92184ac2f27a3d3ed8b20bce34f3951190e93dc4361d5d29b8f7bd8adb95ad30d8d351dd2ce178241d6ce3d7e7158982930859c310a6f763cc64030a0a8c10cc0a9aaa6c2839320225232d44b73cfa48a166e766c0959781bdc7db6020e6f285e2fb3f0bc039acb4b4e5cf7f7acf9a959dadf602954e899192c430096a4c9e3e1fdcdd17e0edee84a7a319dbf6ecc7c7dbb6c3a8d713ef93aca37956a27c8f8524f45e882110ed4063f04d78a9567efe6f0570f7445019f7234aa2d7ee77205eec816eac1f0e8711b9855ad8ec5a752bdee79321bd370c15e6021a847454f40a75e930f2f332d11588e3c0994edc77e714ec3d78e6a3cbd5e8c1975e7cf1daefdff33dca4be6e51862d40bc45884a44454edceacb989ac06eacfa06a4325765037664d2c49051b0dcbe8eb212d23d72261380147d93e18b31bf0b727f2706f56395abafae08d9b909f93039362865bf0223ceb101cf924e8e246b61b4a74aca0e31c87bcaaf1282b4987c0f6242902c1600c8e742b1afb22d873b20d0fdd3713affff993c72f07f0f3d1e5e5cb56adfa804264242910570d8e512454654ab222484b2105f9f6ca95142511ebd7ad4537697b778f1f5eef69a48d5e8b82d127a0d52491a0a6df79dc81f0aa2298bd0eb8724c70392d943e4668893723e4e9f3dd3d90e61c83b1280e5ea6e2a489ae75b709a30f5f8b82621b19cfbef41088d1647a7614ae8c74182c66520752d74df357965e3191111b552d7aecb1db7e326f1ea2d458c4288b42eca2b41e58ecda138b17e3861b6660de033f43acbd06e9bdad68721d42feec7ad84d24ce220abadf2d42dab161c821c36d59241b2cd4c4d8361151344ff4c91a56b0278e6ed18b40413724325e32a7a0f5a46164aa04161715af2aaf78f5fde16882a63a8e52cd81794baa6ede78f8dcf6cf0178f3ee9b1c47dbba167d50dbfac41baf2dc3f553a6d287286d580498a863c6d3efbb76edc6876bd660e9334fa0c2d08b02de835898c39e64071c3f6840768e179d5bf260fccb440c1e45869b04088601ddc313e727a85e24323e45724526b248c56444fb152282812d768b4380891613b93206be53604a57dd81277bab0eb56e7df4bd5db77c4e4e2f9f35f3d6e23cebea91c3322dbffe6017fe5aebc68bcf3e83193366a8fb9511f27a9846bdea43d578faf9e7f1f35b2762d12d23e1e9ee85c4d30043cae4a8df83bc85adc82cba80def74623ff7c05d2f365085a1ae669b0d1990c94d38c4a9304388604455626100219ca8a97bb28cb197db368b006c86a822d460e6c57db485d7cc1fb9f3eb9a9b6f5c5bf0358317be6d36545b66773324c30e8c85b661d16acd88e35c72ea07cd4688cab18414ce140f5d11a1cad398a729711cfdf3eb9d5ed8f2e4ea5f85e9f184bbe7ba89e94bd3c6ac98eac25d9c3ba0dddaf546048b814ae7c419dc618351bac66e8a86b33e11af0061026edcf51bf10488b0802af5e678cc38c4d519da5e8357696584fa17ec268dd2873cae2cae313769ce9ac5101bc7afbf5f70fce35bf559463a6215c22fe979267dd6ecdf41183b8f5d54d78657b2d023192041428030d19d7956429bf9836eebf2ff8c5877fb276a7fff3f5a32958be79e8a7e367b8f39b9667417b3817b65c4ed555569b1505837261b15b8954a8071025077d01553e332921682e0e45b2a20e5409d263718a149b375244e14902a2a3343adb11ac7ef8af47272518220660e96dd35e71a5691fa50006faa3a9f9061d5f6dd0c9353aa3a21f9b9f0956457e0a772fad0c2ac2405889d47506731faeda13bc623ae238d72f9e1bb47adeaf923776d268e87961082ad286213dcb44a94369443a464b3d8319cb00847cfdc456025d6300043502cceb4c4c46236ca88a0ff421f6dd3245865704cf8275c72beabbfd7fdfa3e2967e7baa8dfad46462aa030f55ed5577bddeb863fa964c1b774b20154581d50a0b69108598a0ab5f54bafcf1e71ed9bcefd7f882834d76d74c495ff8fa26e733be5437fa7f330113070d81c9ceab3a86d30a54c43a556af779bc6498080319af2359c0c647c6302c65e23136f951efe90f234640d87c104d4a3d4f6e38797d6da7afe18a81e6f263c92d539c697a6173524954f8e3b1644a563a39453867164caf2ed8ba7f3fbee4200082254df78db7b60ddb923ba2dbd6fda71c94f48e823d4320e6916177d961a1546239de4fe9938c476136e9d5ef100485c96c50c314d1dd1b907a7a83e14e8fbfb3d51338ef8e240e1c68ea7bb3dd170a5ff1cc2fdb1bfdfdcd9359a4f5b2222b6e319278f9939312fe89834058478c712cfce38efca742a45ffccf16c2916d8225dd82a2924298a909b1428d90fc64833f313c35c2088e7476fbb61e693deaee8d9c69f404f68612893a7a74674a96a3fff07957fb7b620240ad8acb9d38c3b160ecf8b49bae090f1d3c7568b121a7c4a5ee56b30266b41cee0b60efe1c6dee55b4f7c58dfed3bd1178e9da402eec0c05e2c538692f24f18f795fc5f0902c1beda4b23e7e60b3c9f579c6e1f3e6d54d198f2e2ac4c8bc560d6f1bca1e654eba955074ebfd41716d95eab7471c9ff8cd19f3dfe07db8880142af08abe0000000049454e44ae426082') +DISCONNECT +/*C140*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C141*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(10,'Clown','2016-12-18 21:12:00.016000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000fd24944415478dac55a0970146776fee61ecda1d1e8420792101212481c0114d6068c2916cc220edb2854b0cdc2968f856c81a972b9c04748d6b1bd953831a4d860afbd6b07878dd785bd8b6db071c0801196b8c52109745f23cd7d9f3d3d47e7fdcd8c8addb02eaf23e1a97ad59a9eeee9f7bdf77deffdef1f49f11d5f2fbffc72c50b2fbcb073c78e1d879f7beeb9ce975e7a29f0ca2baf24e818a5737d5bb76e3db279f3e667366edc588c717c49ffd21bf6eddb57b96bd7ae8f944a65e7bdf7defbcf8f3df6d8aa2d5bb6546ddab449f7e8a38f4ad7af5fafdcb06143797d7dfdca9a9a9ad7f57a7d1f7df6267d66fcde01bcfdf6db8fd3e1cadab56b1b28ba3202808282021018c86432c8e572a8d56a68b55a14161662faf4e9b8fffefb951515155b92c9e4a5868686daef0d0039fff7999999bfa1e8eacacbcb410eddfa02a954749e994422812008a3e719200666d2a449983d7bf6643a7d9c325472d701bcf3ce3b3fc9cacafaa7071f7c50c29c64c61c5628147f64cc61769e394fd4414646c6e877302053a74e2d0c87c3efdd55006fbdf556692299dcbb6af56a098b6e3ab26963f4b9ddd2009831a07ebf1fb1584cfcaeecec6c188dc6c56bd6ac59795700eca9ac5c6cfbd5af3ebd7ffe7cbd2ce5509a2e69bb1d10fb3b9d098fc703b3d9fc7fae2d2a2991703cbff527807a5c01ecada9d94c3438f9507efeacaa9a1a31ba4ca02a954afc9b1dd3c61c66e0d214e2384e04c0ae1ba515599200a8dc6ecc6b6dfd9152a5bafe5c6666e5b800f8654dcd3a5f3cfeaf4b32332519b5b5f8e2d429dc77df7d3872e408d21ad8b97327162c58806ddbb68dea21fdf27abda340652c3b741418d8f676fceda54b585f5c8c35a5a553fc12c9e7cb8959630e402a97ef79aaaa4a3f3c3202f98409683c7d1a67ce9c819ba267b158b07bf76e2c5fbe1c4d4d4d62a92471c3e170881421918e5249462690f309ca46f1c993f861773764246c81001b0958a54c364527959ea0474ac614403016ebb706838827123849d1dfbe7dbb787eddba751821502b56acc092254bc473d40fb06cd932110ca31813ac286e5681a251dc73e000561d3d8a7b08845ea3012bbe62092690395414e4c0ac8781bc3105901484ab61721eacea501427188de24359592c2a2ac2b469d3c4f7e95e40cb065cb972458c3c7b29882e529b0d651f7e080dcf234959881030a68d643c0eaa6a705180a8ac2146c601ca3105a08b44769f7138f849e46c795555ea4a29588b620084345072244e0eb1d7e4c993c5f762152287338686a0359910a5cf9926a20424c68c02e3a2d2cab2aba54ce5127d280c8f8e29806d8383fd0ab9fca583763b975f5a8a686727dc7bf7a2ef8927d0ba762d6c9f7f0e090344d163c64050a7158f62c9a4cf92b4c4f093e35e7296a7e827c8c294013f694442d7090486e985dd4f02c818f332fa4c5bdb2f880a079214c9447333e4f4300d75530971b9e3a9a7d0b26f9f581699d38cf7656565a30d4b4a4ea9e7cc41e4a18790201001d6cc28e2fe50486c6c6e3a4622110c12a01011950098c7a7132793cbcb2b2ba124e755f450389d62f494a409db9e3de81f1e1ecd00a34e5a1709725620e72224eec34b97c24fe082042448dfc391f1246e170118a16b1dc01711e03fc71cc0bebc3c9d4a2a2d028b1e09324acec629fae4a1a88124954d737f3f628c0e0422ad87b4265884e3e4680ef5111be9c8d4d7077f20200270d3d14ad70d021e52ef8eaf80f89803a0ba1ef6f1bccf7de204dc2d2d0858ada2538ccf8c2a0983010245dd4ba098d32ceab71b3ba7a66a54447da48e4a6df1b163f892ae3f4ed5e71c7d7603e0c8f9a73f03dac66529f1730a32a5fac32bd4b8fc2e97c8dd203d3c4c548a5243f39298b554f759f4d34e8bc0e8c8b2c1ba35eb0b33a8d14da1e5f78dce4e21ba70e1bf3881f90160ba0f28f918f8edb82ee6d43edf0b17aaabcdd2fa7a78ec76f89951161cebd7237fcd1a6491a835d49cd24e478932e979800160ba606ba2c6c6469c6d6e6ed66567ef3a029c3d0cb4136d9ce3be1a7ddee7f364de73cf6515954fe3679fc1f5da6be0df7c13050d0d98989f2f765c469534ff5906d22266c7dede5ef178fcf87181e689c769288addfd892c99ecb45229cdcbcac282c58b31a5a404c5c46b2545972dd8d2c2655d364d25f6b291f0d9dac9e7f3c16030486816a8ff5e666272e8125bd7f3ac8b5284b529dadcee3ca34e3afae9e5858b74c396164c078b162dc28c19335e7ff7dd779fbfeb0088c72706060678e61873325d71d2cec7525529ed3ce33ee33d13fd62ca18034cf4c1d2a54ba5393939afeed9b3e7bfde78e38deabb06e0d9679f7506fc9e0f2e9cbf30ea781a489affec3ca3103b3f3838889b376fa2aeae4e14b14ea71333c6b2585a5a2a993b77ee8fe97ddbfefdfb1beeda50bfbfc5f3878f4e1c13382aa12cba697ea7e78321d28889166e1d1d1d2288eaea6a5451f36234632f760d033b81b4c3e687f9f3e7cb3ffde4d38d7705c084d52f3e1214720e86164924aaec12d4d6d6203333532c97cc693b9556a601b63f5449cb8e5aeabc3367ce1481a441b26bbb6998397bf6ac788f69c88440d0ab187700d3b6117115d2f7263f30411990fd005746c2e8ebe9151d9d376f1edbb4423df508b612653b0e797979e218c93a361331cb54baa19550f562661db6e193a60f70c1d7be447fefc655e30660f5bf55e5661bbb0e4c5adca0289e7615d9c9f5f89ba97acc9c5e4b0ea970fefc79f13a36e4309132e71908960d06809d67cb652a000811f55845b23acd78f5abedf8645009c3ccd7546abdf4e094274b978d0b0093c9f692a6746bc1a4d91d887aeb5136e3307698b661cb6f3bd0d3d9216e5ce5e6e68a2266b4606596518539cf04cbfe2e65b30401eaeaea82c7ed8123e244f7c86aa8f21e81b1b00b7fb5ae2d439e901dca5af2c4a23105a05f5c95eb34ab1ff7fa1f4086ea3d70a10a944dfc185de64da89e560b0d45b79a44caa2caa2cbe664461571f9417461a265626759a89b5b87aac95534c084d1d21621c065985cf73b4cfbe187e0220588aa766a25717c5cba8ec4356619e016ae8a279e51eb8defa3e7c26c54547c0abba500f6be3a6825edd0ab74b09a2de8ecec0317e4c44d055632a51229f272f2a0d36a44106c5469ed69c1bf9ffb47fcf4fd6b38dca7c59cfa93c82d3d0eaf6311ecd6e7d9f4839279fdc6a82df47bd4fe4c372600c241fb8210174086ee2835a459282a3c8fc11bf590242c68cbdf8c9f5efe0fac3da4c02edb3e9cb21f4475451532946a0c0e0ce277cdbf869393214ba38579c08aff36bf825ef926e4cc58871f3d3682ecaa56b88616a1eff2e390c6af6062ed5128b4395016ad9d6a3086768dcdae042f54e54cbe069f6d0e0aab2f83f71911b15721bbe810352d1a483ceb9099154379ed657c1e6d4597c98f378fbe8757077f8cff91f2d83b321bbfe86fc13ec7df81cb5e0ebd760516ce1d40bcf003c422b3d0dbf22414d2eb50e71891599285a4a41cc64ab6cb2dff996ee6c3f929bf24df198054152bd6179fa3e5f332a8342761ebaf031ff1c3507014cec12a782d06e8737f8fb03f0c73e7723c7d1268321c82a19a061ceb2350132da62cfb0ac6f93ac4a22fa2ae428f78f9ebd0ea8b3070ed1fa0cfec47f90f1aa1d627a024cdc83326c390eb822ebf52a7d06b37b1cd6c320d6e0dfbac1bb29e21bb13a83b0228aafd52c1b66abc56ba3f6185b9af1212e53512e008ac3df3c005bcd0661f83dfa186bd6712b28c5495724760e9aa23d00954941da7e167909c5d8142a90a42fe7e641843b0f63e0db9b40065738e219998879ca238b43a23d4da3264e67aa09950c9f6941e2617b2c80cac9eb05d9edbc0a86f03f30d221620f10ed74222fb0a01470e9c7619a4da8b548d78d8fbabe8ae0e8a451fcc1dd31009f9a0cd3941d9e008c05f2323194246fec7087a68a8ef5b0e216601af7f1fee9142b88657d00cd18349d37be9fe45c82ee49061c88232a3185a43909ea72093cf45869efd08929d02929902a24901486744ce32724700016b66bfa3ad1cf9955d709a4ae1f3b8e9b656a2ce0484dc12a8b4671109f0b0f594214a0054faf308b8e4089a4b509a6382237405cebe9990735244d58710f43bd17f6d255d6386def06b680c72447c3550a82d34e453d18b003ce7479cb742a61414da89f9f3c98d5cb29c14087d8a567f4a29e91d0178af1977f1e6ae40c8dd0c0f391d08dac04bbae03615211a7043ae6aa388f3700ee551fdef26615b1073cc80403a49a8ce20e48b203c3c1721ea0509cd112a0672583aa7211efc92ee6541c946d019409ceb43c8152130942d3f5bd95a20a124a80c98731b8d0cb76540958afca81eee4c216fffd7f268e393f6a6b0c5d626414cd605af97a62b6b16d1c8470fe984cb4495c9cb91005bc9610e9cb51cf278043ea11941771c414b1962c91b08711d30df9c8580db45d5ed0be27e14b6815c72d849dddb84909707e70fd2f7c620c46db46a95432ae3d9bc604c399ee6be32e534b364dafedc5222c90f253e7236a956f2a6ee1159e2262d0962a4072d12f49044dc018f398b2a530012e2341f8ec33d9c058940834ca40d7ef344f89d7e241517887e41d8ba2721e2e9a7127a03913065cea4a542604394b3c2efa2e8070940980623ce43cf9112f068598afb9a145d98d36c5665fb477ccad87c2d7cd36a9446b0f055c1d9b101ae664b6458208773a1d2b9c4754e3498cdb61ea0d639204b6622e855234e60382e8490bd10419f1b31c975029d80634083648c8a805740c0c913153588868749473eca408868e943d89b203d05c153678ffa322529ea48534e879934d9ce3f59882c2a969a6f310f08085a1bedcdd107474ee59c8f0e7425a5022dd4a4442beed6efd64aad0b7c28177c2289b86c88422505e72b001f8f41a619223a15d2b5f43c61801c94204065d63322a76c107dfca4152f6920e485dfa2209011f0f66e81b3862ea528e3c7aded171b993bf57ed4f96f3b912509ffa5408bbd21317cf1c5d85073a7e33c9f888cf044191f8932465544078e4f20a9745219a41051e716e45e328aaebf801295a4ceeb4582a7eae38fc13b1c4634324cd9e1117478c1b98608b402bc7300095fff2542c376ebdac9bac9fa5300fcb8c316e4b7fda19b211e816f60b7ff82bbde724cf644f8e6cd3fc486beecb1354523f6ab441b5b1fe2213be21129f15c4ddddc4b4b8404627c36518ef4968c221612c07928d25e27bdf581736bc10768a60e92167afc94147ba3e01c3a46cf3a4dc6068e9e5406fe28eaff9fff9560e2e94bb81207046bfba644f7d565231f09cbbc4dd6edb1c1aff77b2f0e369abf107aa23d67aca1ae26aff934d5acabb6687cf05cd07bdd6e09769a7b3dd73cdd51d3c58148d7158bfdebb035d4d16e8e992e5d8e74dade8e9983bfa1ef7f9fec642af2e13fe7f877fe678f515add12d4005953d2effa251c379ef2b5702b5d8dfcc264efe985e1cbad8b870ec61e885c3cb722d17deca1f04dc7fae880631dd7e968102cd757f31ded0fb8ce449671ed83cb05dbcd0d54307e4edff501d98dd4770be3f2df2adf40b178eac18cafb456c035b266b25364ec97c846f68f2264adb8b5237dbb75a4a8f2176f3dfe2f5ae499d917a796d70000003874455874436f7079726967687400436f7079726967687420a9203230303820494e434f525320476d62482c20506f747364616d2c204765726d616e7965bf21130000000049454e44ae426082') +DISCONNECT +/*C142*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C143*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(11,'Commie-Pinko','2016-12-18 21:12:00.017000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000017604944415478dab559097455e5b9dd779ee79b9b798084841086106641a40e80588b430584a77568fb1cdaea83a23e1587d256aca576c43ad4d616b545ad566df5a13830c96049480221210999939b9b3bcff3dbff59b6afbeea5bd8f5849595ac9b9cf37fc3fef6b7f739b27c3e8f7fe5dfd26993b406ade64b7299ecb24c3e3b53215354451249357f251377b49b8cc8e47248a6533069b4d06a5418f105532ab92cae50c807cd066dcf843f3caa5428ce28e4f25fbed9dc19fb57e2907dd60416d694d5198dba83e91c4c996c5e5552608751a781db1b66c01944e229209f852f12436591132e8b195dc36e286572e4f8792c9d858af7292eb0209dc9c11f8ac0a455a795f2fcf56f1eeb7af6734de0fc19d526995ceeb19bcc1aa8e4181c0fc0a052614a990bdd631ede4c8e42bb09d178122ddd0368aaab8241ad46dfb80795854e74f48d42c74e98745aa8944ae8b46a04c251f8f95560d2266389a4e99db69ef4e796c08229658fd92dd69b6a2b8b71aa7f0ca1440c0ea341aaba52214399d38e615f00b1640a41762093cda1c06244b9d381ee91319ea660d04a10769831a9146e7f081d0363a828b021168de752d9b473ffc93effe796c0e2a9950f1bb4da3b1c560b4e0c0c83b887d5a843249680dd6c4489d3065f30883c648c55811c13e81c1481031a8512652e3b67222d416712e1d533ea4634918459a727ec32d96c26633ed039f09966e13325704e5df99a64067f985256046f208c016f0017cdaa4307319ecfe6a1d628a162e022a82a067b6ac88dfe71af3423269d4eea46209240349540b9c30a8d4a8d96be21ccaf294722914cb88361d3079d0399cf2d81f31a265fdf3bee7d5a2957a19eb88f2652c82007b72f8202b38ef8d6603c1496a0c336c0a8d1a18cc31a4a24108e262468b9ac460c7a7cf03091a649251cecbcf4b7b158ece9a3bd23377e96e03f73020b6a4a37c8e48a9d2aa50271b24928128746ad449a0127d219145a0c023cbcab0af1a80f36a709e9b8029e60444a425ce7341b186f9eb3a3e7ec24d90db256269b31197536563ff2b926706e7da541a3540422c98c52299723104d322840a7d6c01b8e404bc691f3bf7b7c02bf7af26b501a4db8ecaa47505be2824229438ad827ce51e9b0219e4922c8eb534ccce972a56d765be5cbef1d1afd5c13b874c95c6bd0e7f30c8e8c2a63992cdb2f43b1cd04352971703c82649601f1762bd6cec4afbf763dc2433e3cd27a084f6edf4de6015c84542093805a218745a74692094d9f3e1d256565e86e39bafadd8e81573fdf04962ed86db6175c148a84016ed968248248d08fdefe5134ce28c057d62e432695c5bcd252bc71eb2fe1cd65b17ac737d111f442a5d261cf9ec3e8e4c22d2209984d66184c0698ec2eb8fbcfb083b18796af5deba8abaa9c673219271289c419954ad5353434fcc4ba2baf0affbf24b0fc0b4b0e979555ccd7501ae4b22924c241c8644a782642a899a4c0430fdf88cc4dbbf0dcabaf21c5cd1b66d50709994be62ec68affda8e07b73d8c5327d27015da11e3b550aaa0d11a10181b409fdbfb6d680dfe543e7fe59ce90d0bcf5dbac4525b57a7b059ccf981fec1a3639eb1cd2a85ead0fa35eb52ff5202dfa8af5476c9b51faa2aaa6629784d56a18671ca39e87f77274a2b2a31321a85a32889179ede8c96f3b6a0e7f46904796b7d6111d6b7bf848df7de8d77767bd1d05089906f1c9ad259901157fe6000131dfb727354b2ea9d9d837d7f3b6fd1b9e76ab8471ebcf996af6fbef0c20be4b1581c8343c3418f7bbc68dd556b129f2981dba74f5634cdaef3eef7462cbbf6b6a0acd0863152e7db9dbd68397004b75fb7062e3b3f9b08e0c78faec625bf69475fcb30a29c0d53951d430f7c01d76e781cb367ccc6585f074aaa67e20fafbf8ef78e9ec48d975f800d8d15b96baefa92fce0ee03f7ddf1977d5bfff1ec854b961a9b9a663ebf65cb962f727410f087626fbdf576d1ad37df1c3eeb042ead2ad26cbae18a48c1bc46e5ef9e7b05ada78671b4a31b175cfb2decd8b605875a3ae04b2871dbd52bf1cc03e7e062751392651ae4a8dad427c3e89896c292d5dbe1d46b612a28c6f59bbe83652b2fc23d9b36c1948f62e3ba65a8a928c0af7ef1dc8b77fce6e5abfef7f9e72f5fa99c37afe9c85d776c9e6dd01bf0f69e3dafae5a79f1eacf04a1728b71d3893ffffc87de44065db25a9c7af6c7f8c33befa32fa6c665d7dc82af7ee356ec7eeb7d5c5bb51b2d035edc78ef9f21a8f6573fbe1e8b164fc1dacb7f82e28bff93702b41efb10ff0d6ce9f62a60d58b26c39665c7d23aadd1f62c56d3f9831e60fb67fd2f90b979c2bbbf69a0dcd377dedebb3b224875d2fbc70e986abd7bf7ed609ac2c71347cebde6fb6575c712bf6fc7c3b92a7ff0a2bb1bfb76d0881a0070383832869ba1065f54de8e9ecc479a5c0bcda021c3b3d8a4361332898307e623f6c391f4c7a23ca1a9752c459903b7d1825ab6f42a8bb3dbfffb557eccfb69e0e7cea1c7eebf6f98f6e7fe430d9097bde7befd50b962d5b7d5609dc3dab7ac9ec45f5fb5c37dc8f50208877efbb05f397afc0e0703f26ca16e3b25bbf8ea7eeba0b7f7af179ccbbfadbd44951ccd5bbb172a613a39e2076be791cfa8a065c7af555f8ed831b3169e67c5cb2f1610cfd6e0b4a32e330cdbf18654b566064c77db1c347da1ddb0eb4243e298e5bbf75bbfeaecd1b43e5e5158a43878f742d5c30bfeeac12b068d4f58f6ddf7662eebaeb653ff9f272cc9b598782aa722a0615763dbb0b3d4341346db80d7a4719daf6bd8932f463d5ca7331bd612af2f91c3b720a6f7c300c79e5521829253c1d07d0fbfa73f8e2552b51419fd01fe4beb8e7fbf8c957d7059f7ced6d572895497d521cdffdfe36c5f28b2e0ccf699aad6b39de2abe9bcf2a01474161ed99deee53896c4ef6d3ebd6641aeacb95268703669b19796afbddafbf8968d80f3dbd819682aea6692e1c2e27aa4a5d5c6064229309cd070e62ffee3d906b3588c7529836b309b5d3a762bc7f185d274f61f5d627f2e72f5958303432ecfdb438b67eef21e58ae5cbc3d3a64dd31e397a347cfeb2a5679780c168ac1d191939a9d7eb154f6fdd9257fbcec88a6aa6503e2b989c931b55074a2014143ae0f184d1dddb0f0793b35b4c101a42c624cd563ab54814742d08864390e514087afde83874100b6eb80b15d31bb3932b2accc160e053fdc03df73d60bceacb5f0e386c76c59ef7df1dbaeedf36949f55020c4071c79d77ed7d78db43e7bcf5c797d0fad2e3685cbc182aea7f8d410f2395a55296417fcf19388b8b503eb99a4a83863e95a4535372e1aad1d1d22cc98fcaa90d941f41c44321f475b443553517975e770be7692435b5768a951222fe69713cfad35fdcb860fe82a70cecf433cf3cb3fb478f6c5b71d62cf4c0d6efbc72ffbdf7ad1e9ff0e51f5a7f49ba7aea24f58285735978da476a1d5bd32ae8745c6647de86bb97cbaea606a5d5d518e93b83fe1327e09ab1147a931216591099b40c3ddd7d285974059a969c27f9e3fd070f872e5db5c2110804fec9d06c7de80732a552f9bdbabafacd66b349d971b223f7c413bfac6f6bf96bd75925a0a1d57aecf1275baebd667d03e7006fbef4427aefaf7f2c9fbfa05151505506ebb40b51d7341f461a7d4e2d3c67bab1efd55d887b49ad35d331fbbc9530574ce6b07b30f1e19f100b78619ef60534ce5f003521d6da7632b36ad5ca1f584c465b4991abcbe7f33feb2a2af62e39ff22ea5db9d96c36ee701514ad97d3777be9029f7aeab14dc78e1cfa91848eff2b8185f3e7a90885f53d3ddddbd7acdbe078f4d14729c222d0180df9971fff057a0ebc26bb72ebd370159720130b73a82dd4fc79f4f776e1c5476e469c9d9975fed55878f9bf23191c4771f9644ae8940425bbc58c70d007abd58aaf7ce5bae49b6fbcae9aded020b7384b6173b9f24ebb6d684a4d4d56a3515752b9cbe2c904ba3a3a72afbcb46bc3e8f0e0efff0eef4f4a60d182f9e56ab5e6772a8d6a41a1b3404bd585b6b676ecfcfd8ba8ac2a859b663cc36d98a62bd3ea7530d3b834ef7f071d87df90b47ee19446cc58fc4528282582131e241321c4fc3e043ca3a89d7b0187bd00114a7135fdb3991a6acd155770e8693de319145974986453c39db720a3d44a031f65c7fceed127c2d1d8c6d6e3cdd18fcde73f26307fee1cd29eea7ea54271bf5ca99489006532da3fbb03bd677a50376d3ab6dcff5d1af73c86474691e4ef2b4b8b11a3377efb778fa296d4682c6b80bda804f97452323a3c146aad5af209996800e3e3e3303a0a51e8b441aed2e2812df7c0333284c953a6e0e4e95e2c317bd05839093b0e0f22a8b7a398e7475271a8554af63677dbe123c7767c6a020be6cdfdadd16cbac63dee413961d17ba61fd367d4b3e54077773793018a4acb71fbc63b31a566129a5b5b61a4b8128f10a3c93c6da302065a47955a81a1a151147149797c5e68951a4caaaec2898e2e38590c97d3c2bfcfa0a7eb14eeda781ba5f352049259f49c6ac7f50d324cae5b889d7bda50ad53a15a96c2fb24d621ad050dd4519da7bb77361f3f7ecd3f25306fee9c26b55afb5711643c1e13830bbbc38ebc528dae337d92119f336b36b2a9043a4eb46266e33cac5dbb1e46ee804828028bd5cc2a6770f254279c4e27dc1e0f745a012f238a8b5c5231267c3ed4d65633f9c9746436dcf9ed8df8e0c38398563f03e51323282d7222910f239495c1a5d0a2a6943b46a3c6e1ce61b46a6c9c231ffd36a587d138e7e0a1c3c73e96c0fc394df76974ba070b9c05181d1d41821c1e49133e89088a8c6a945456c33de185da6281979f1f3c7800377e73132e5f75318e7c7814369b0d366edccede3ed4d5d6608c07f9c918c9640c32ee824834ca008be0e286d6e94d18276ceeb97b33bdc1545cc07d77f9058b60a99b0e9fc78bc0c438146cbb5014237d8378fe6817c2942db24c1a468381d7ebefdfbb77df77fe9ec0b2a5e72af87368e68c197acfc48484dd03273a011ef2d875cb513a7b26de7bee4f28acaec0e9964e092aa1781c2f0ffab0e8b2754c7e2e2cf4b736bb159140885651263d233ad1711ac739fc369b1535555570b2a349d2b028d0430f6e819e03bc8c30bbe7ebeb81da3af80606910c8791a0e78e4542d0129aef1e69c54e76a0c4a8415971195da70e01af37c682988ffef558564a60f1a285b3140a554b369b110f98a06335b35e1ffe7d4e15165eb90a7b7eff1a665f700e864e76c2eab0a27ed15c247d419c38741c77ec7a0b691af6756bd6a2be613a5bec45ff409ff4acb4580c3364b052567477f763c9e28578e1f967b0fb8d3fa39070699c330b6d078fd2336c8383da6ab0f70cd2b1081308214ebacee532880e0ce1c593c348dbec98181d46594999b4e12726bc338fb534b74909cc9a31e3660aae1d641fe999e604317db94b8d8b2ef902f6eff900c595a5ac7e25fc67ce60e53557e22003f732d01242e3fbafecc5311e9ca202203671dd576fc16c2ea83eca8a6c368993ed27b87c26a0a4811ff78c21e41dc2e6cddfe09ca590cde470b4b50dc31dbd787ec723e8a7a7885366880e8804b284509e88f8fdfe161c0a44e829229c4ba7f480cc60d0dfbaffe0073ba404284b1f34992cf7f9023eb2453508495c4b331257ca1174fb50d9d880f75f7c0dd7df79138eb575e1e69fbd84299327d1c84c48d817cb2dc94523ecdef0c8202ebef432e919e9c17d7be1197743abd52245d609847d78e2973fa408d4626870180e52a99362f0da1b6ec7cfb6dc81c6fa5a8c30896434c2044250e4490acd27f0e4f11ef10e014a0a971c7b5a555905b77bf43b7bf71fbc5f4a60de9ca6adf144fcde289dbf8ac24b1c3ecb614082ccabe32543a128d6d657c0a733e28fed7d70961463a8af8f3459082a54f05a50f653897aa444c646c7a860f5701516c3c4a1a38e61d554a4c0539834a912d5d5e5129c0e1c38c2eb35e8ed1fc19ae51762d982260cf5f74b1d104998b42a1c7c6b2f7e737200052c94984d8fd783543a2558f2bbf4045ba4049a1a1bff8345ff512c412394cd92bb7da8a99f8e50388851372bc88ae9f26978a9e34d549f054226936fa3641693d90c07e580db33217d26decec8e54a8c70d1d5b04bc20b9cecec80857fe7f787e0a28d2c2c298241a7e36706842309ecfbe0307ebaf53e2c9e3d03832c4c5aa8d85c1ae9e1513cf5dadbe8ceab31363800ca0ac22a0b050bac5169beddd2debafda304667d492e57fc49a35623cc210ef8fd1234e8c951cac98fb222ed5c6415acbc9109180c46a493690c8e0c434f83e220ef87822184c920760e5b9a7427f85a7447f857113c291acdc79a515ae6c2655f5ac1a1b543ad56a2a5f9245e7ff31d6c7ff06e5cb4743187731c3a52efee3fbc8cadcfbe8cb8d58132f1289eac2674535b5b9b0455abd5b2fad091a3af4a099cb3705ea142a1191d191996e9757ac4080305a3974be29295e6622b72b9486d31d2981656ee821e0ea9c0b6c96486d7e781dd6a4769792965728f44b38928bbc91b084ba963f07e16c5c4c4353a25eaa7d590bacfc13bef1d807bcc837176fc91bbefc4798be763df8b2fe3f1e75fc4b1511fd2848c95db389d12f7a02e0a0620bc804167c867b3d9e2632d2d6e29016a20153f086b742c27f79ae0700109ba30066890e6c2ca4d1b8b25243631926d3c64964c2a25752a99a0ee61f7b43c2493c940490869746af1d2023ddce2322661a1fad4a8b5d253ea690d533073da549c3e7d0621d266674f1f9a5c85d0f0dab7db4e2169b6a0a2a0001a162297cbe34c7f2f62f1246c561b13d15017a9932c8ce958cbf1b494c0dc264a846cb6c3e7f74fd56974d243d771ea210101b10d5532257fd6713ba710a09312f2405066903fd74ea9a185eca1b25443c725230659417ab5b04b01b29a58f40246e2bb9cd8d5d2c5992d2c0aa5eaacc669181e1e438eb87eebbdc350e9b598545e4ed53ac13a66a1270188a265d369690e534c50a35109389d2236ea9b5b5aff474a700e7ec5aadf20169078c1525e5a2a6174786884904a4a1854d07c8c8d4f5090d91884499a8314938ac51352a704dba4d219a4a94e53d93415678144952364a508fd708ac329a48480a6c07113e9d9cf22bcf3ee41b0d0b050968b6473ec5882f7cc9050ac3ca7c8558c71ef387c810093cd89f979bab5adfdc68f692126b029e00ffed0e6b089772c3c2c4d4a4cb3ca41eafea434b822218bd9cab666253f10f407a121ea320c5ac0c8643649e65ecfd9109012104af377e2e00ca94fc0cf64d263d9b24552602dad1de83cd5c30ae7d875234920c2aaeb0911c132643e7624ce4484bf0e50a2c4e251a9904e876dd3f1b6131f77648d3367ac8cc5e36f8808c41e104c222a60b75a885b25fc0c229bce4a0784a3614163d22315117801ab1ce6ae48669212dfe323d8884a26d93d7a42086826a96447c746b988ca30303022bd1fb3db9d0c8c1bd6c25962a144c04a625fbc7396b3554ada54015d719e56148b3062d0ab9adbdadff85802b31b67693894fe583ca68bc5c8c3d4f4627b4a9c4bdc65b379061b879cee4cc724c48dc40b0e3b29540c739c3bc4469a137321aa9421aec5dce4593df12c533c4acfd2d4f8b95bf2c48b85832a020d06fd5212e25f2814a679b2422c5405a19ccb89f76d3942322d2c898400a7c3116747eccdc75b13ff6468eaa7d636aa94daa3e3ee51251949c26d0157bd808c8732b7b8a89037967381c5250a0d71dd0ba888162748bdc24308cad4f35a51f92c030db073e233c164e36e0fb733353e130b49efd43412458bd9115d138b514805153d8856232098009d21e197260ae462a6b291486ceea9d35d2d9fea890b8b5c3f2b2d2ef986e05c012751c1302b23e30d6c6416118c78d93041a650b04b2e8a2b995c41bcea108f45f30383c3692625e750cbb55a9d5c744c2534553826cd92303962d76439e4a3ee71694f0803243a2c9e668b2a8bed6fe4ccc529d9556a15e7cfc00569415ffff0b631f7d8dd22cefc47817f2c01994c66e63703b1b7c06eb3dd4c8e5f4269a04ba6d232b1a545a53264013de93224e8944b8c9237e199f0b6b3d2edfc3b0fefa7fae87672de4fa352ab4d2a95c2ac9429cdaec282a9acba533c2b116f348543133323602a8295b3bb46bd5e3a43148c28e2dca4e33eafbfd917f0ef62a7ffc2fb7af815f85bdc9ffa58453c0ee4979a415a4b4a8acea1d49e4c7dc3856bd5050341f1267b82a6be9973709c37167814e42582cf7ff4b33049998fbecb3ffa8cab40e1a0149ea254a8666934ca02bddea861a03a1ea66033c279593e4ed6723badd613c3a3a3c749d1c38c31c5afec27c5f9dfd6323246f9f6a4810000000049454e44ae426082') +DISCONNECT +/*C144*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C145*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(12,'Forum-Flirt','2016-12-18 21:12:00.018000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000016dc4944415478dabd5a07745bf5b9ff5ded3d6d5996f7de769cd84e9c4d12322004484828944dc32b07fa4aa005da572829a794c283437b4a1fed8352661901421a46769c9d38b11def290fd9922c6bef75a5f749859eb6af8351b8e7e8445174afbedfffff7dbf716f986432892f72f0b80c97c7e1f052efd944928db189f817bad0973c98cf0ba02c5f53b27e45cd93d76e5dd52c95081560a38ccde1737fb4fffc68dba9fe9dbd63f6e3313699f87be7e666296be69567dcda6f74be609c710d7ced001acbf5571ddeffc42eb9be82cbe589914c7a90448cfe64c0c68208cd4ce3b5d70fec7ffa7747ffd3e6f04ef802d148ea3cad522c2ecc966fd8f5d27fbd9453bb4816b0f6272edff2f0374f7599def8da002c9f97bded83fdbf7c539ed94a3de3061b0f22c98440a583c3a16b70794826e86ff1187ce649f45f18f29d3adb7b9a4b6db67459ddc2fa95cba422493118ae0809face630fdc77e2474fbdbfec6b0120e4717847de7e70b675e3751a86e1211e4bad7a844e0e21c150eb27e3e0f01870180e187a25693412a99148b074367dc6151248457aa7381c20681fc38fbefff4eea77fdf76f5d70260436bd1a6773f7af67d91bc880a4b52a149301c2e12516a2102c1246388b104827681261bf1380b86c7039f9f6a337a0f3e12a0794f44118b4560e9edc48efb9fbbffbd23434f7ee500043c0eb3e7b9dbc6566cda54148304324d36e2a1109c0e2b320dd9545c10e1a08b0ae742285111c018bc0e17949906b86dd3b4fa5ca832b30908072e9b19d16808a6f6f3c16bee7a3e6bd2e2f67fe500eacab38bf6bf7eff98d5e96714997a088562f87dfee4f1fd4726b47a75915aad80582a457e593e82fe3062e1288aeb6bd07ee424cd08d0ba664d7a5e4cc649382cb3f05acc78f6f787eedc7d78f0b92f5bfc3f04a0568885596ac925ab96565ef6c3bbafbcd5158cc97aba87a0376451ffc7a1cbd326bbf6f57bcc23532aa54e8e642001a9410c71b61af50b1b313664c4d8c018162d9e9ffa053866ed34477cc85452b0e170fc861d2f668ecfb8dc5f0900a54c28f8df9d5b27d66e5c94edb1f9303a3d8789511302fe00a432697a584b2b4a100f86307e721c62b108cd4d25b0b983b0392d484a6836a86d0c22196c560f266c4e04bd4ef45e18c725375c89c6a5d5d876fda38bc7a65da7bf12008fdcb5e6ddefddb3e56aaf3f829eee31c8e512582c0ecc982ce97f4fd0f773f2746868a943f7a14e546766a0c7e9c76f5edb0bb95803093786c5d5066cdbb412737637dacf0dc0ac9d87844c83df3efd046eb8e5124892f1571e7af2fd9bbe12008fddb3f1cdfb76debbcd6b1ac5c5ce5ea8340a8482610c0d4ca47a9f5884456e9e01cb372c2100e75041ff6e23b0a38942f4f12bb1e992467cf8e33b90a74960dba58db0730a7046d28ccdad95d8fbe423989dbe809b7ef21df6174fbcf887c3c77a7a26cd9e572c731e3b9b242d243ff2a50164a865c2f60f7f6ec9abad55b32e1326c768f89c6e04c23198262d7051eb56d694a1b8223f39716e90a9d1a9e0f41365e637c2639f825eabc4cc400fa6c6a7d0bcb40e6a310f5383a308935628b519989974c115e7e3ea1f6e27e10bc13a36c09afa87c33b7ff9f19d07ce8ebdf2a501a48ee25cadeadacbe7fdfafebbb75ccb91c838629108ee391b3aba0611a4de5fd83a2fd97ebc9b2d962b7855f525705b2df0584c34e04970057c38820c7a871d2830a870c98605f052fb89c4a4606225f84a258ebd751c4e9900da8a0c08923c54946661f1653f5e3d32e538fc6f01f0e9f1e31d9b1f78e8d17b1f8fb9adc4ed16f8dc0128b40af049a44e9ee84039f575595d2909713c2d52897000b16004132617cc363fb232c5a86eaa44c0ec84cb6a454ed33c70f8420466e6b067df3970f324686caa85801cc8a55b1fcb1899b4bbb95c0ec392bdfdc2000c3a8524148e31cdd5868dbfdc79ddcbd3b35e8191dae8f2cb9641579a87a1ce61cc9889cf9dde70952a5350dd54cde18825f04d4ee0ecde63286d2c87d9ea45b64602b5464e4e298919a305619b0db9f555d0b7cc47dce34347fb08f257d5c238300a098f1b5b7be333cabc2c49cbf0a4ab3b108ab93e37001e2969ca026469a5bcd23ccd0a3e8f69d6aba5badbaf5b718f362b83d1ebb418339a304dab9753a043dfe1a1f086a535a2fcfa0a5807873171a10bd52d9510c965989eb4530bcd2242a216a65741ae064dcd2518ed1921ba8da0625e2d3acf8e2159a842654309319d2c71fadcc099729db8e1fa1d2f36f619e7463e3700a958c0dfbcaafa3f8e744c9e97cbe4d3329908d76c5c78c78e1dd73ec425c33076b103c6b1191ae0628c8f99e1e9b162d9f20afa71315e79fb1c585d018a32f8707b82e00bf9084658f8a89db864e68444c5be300f9138193db7096bab45989c0c42599683820579a4131114d5972116f061edfa1fdc74f2e2f4671ee63f03100a78bce32f7fdb5a565dae65218250298580ac632441ef2532c48991f81c16011abafdaf1f4a2eac2e64e44a11f86c082e8f17efdbabd0b4f5265429f9f01360b2a54871629cfc4498def8dc311c393b0e7def73b8bc8683ae6e12378b15f9f53958d0540fb14206350dfd37afd9f98b5d077aeff9dc00380cc33c76cfba0bdbaf5bd93833eb43889c70515503141a1d7d8b45c4614230104484e1e3d49e83c9958db58c5223856fce4ed42b24a336873ff89761c95557c32066e00fc711276b4d538b04fd31ed8aa363ef2e5c99fc00626d0e4e1c1942c9d27294b71663dfee5368a8af240f558add6fecf9f8faefbeb6e10b0df18fef5ef7ceca96b2cdd50b16405d5005efac952c841bd9d9068cf45e048d08acf49975620a4df9c5286f2886970a67a25128e45c0cf40ca247ff0dd4ad5f9fc28c202d3da53224c33e984627a033be8305d9710c8c07303717c2fcb5d53873a00bd64e231a5734d0756270c9b893df7b6a4fd5e6dad278ad4e93b8f58dfdec6706b0b8b160cdf33fbb799fd9ece0b8fd4162112d965eba0a5eb717a38383d0ea73d07ebc0d5a8534d17fb82bb87ec3128956a7e6c4835ea2420ed4590a384d261c9f1190acb2d0f3fde0c602304f3b515eae43616911a2312e3efea81b8665a4dc6746a0f424b1f9be0de8dad541823781e61575f0f9a27ed3d80cdf1e626742a1f0c2efbc7bd4fe990048447c6cbdb4aac5ee652beede7ec5cdcb5734af1e1e1c47c447eadbd088e1a16128841ef40ef59de93c5cfda37cd5e86e366197e5e9f260d07251dd50900e325c0ead24a976ffb015d38e1832c9a52e5c5449cacb83df4326d0ef4441750e3249c5bd8e1086de388c794baa1166e418ee1943794d0edcce305594a0b60d274e9f363e1f0d45efba67efb1f83f05903ad6b7962cfcce4dcbf696575468bd3e3f934a5479f9b9b03a1c08866c300f0570f450f4784bd983cd1afdb0a86be009b0513e540219d62cd0a3b8a102f1940e315c388991bc941174197208049485e9b3b03f813edb45e4121553f684d717c5b93dfda1150d5a21512a27c251d32e9135118b11a3d694c8e498e81e40dbded3ef7d7bcfb1cdff1240ea28ced594fff783abdf932b84e53489bc04797aaf3b890b0788fe7ab3938dcdf3313231cc54573760f9d2026297dbc92b9153880bb165752df2e7d7211c08d0d539e9e8c9b21cb2d87c88245244dc6e3cf52ccd568003df6c1c217f12a19820d15c37c3dc711b1899340301460336292602e082cbe722601a46ffc9c1c937ce1b8b7e77be3ff92f01a48e426d41c192ec257bd5126d0d4f2863b89c2c68345950e8b91458c621e4ab100806909b5d82966615068d8fc36c9f4396548d6d1b97435d544885138d92cd4cdd25a21680cb3c85de8b8388c8be071e3155d8e783d3ea86d3c945b6f214365d6a4186ce402b1fa7dd1250a2e3d3b92c8266079e79e3e0aec70f8d6cfda73b404cca08b8026995baf19945f28d377345429e365f03b94201899af230f17e06f56d475727a26ee27a2e077eaf0fe5a5f35055c56076ee0978837ec8134a1414162075e32e4a6d10217671534eb6b9ccf0c528b5d5fe041c0d03a98234c315c568af1b79d257b062b19076494111349e9211a4e4848dc4611e9dc1afdff659dfec753c1b4f5a7e650f4dbbff1100d1dadc6b0e55f25a16c7e431d42dab44567e064452091936063e57842c8798ecf52c66264ca4de0ac412a9410b40abcac29285f550485f83cbd787be21371cae403a0071380c25391e64e238926c395a1a1fc60c59effca65c2422d49ed44618de89962629f8249a8978225d3d4bc0c98b60ffc7e771767a1beaca5af1e4ab0fbc106002778c793a13ff0f804aac597fbdfebb1faa8a148c4c9d89fc2a92faca540e26af44f64048af448c819d9256db0787906b28219e60d3ad128d84294b1ba0565ad0daf031f53c797f8aa4b1284badcc804b3133e0b5c038d188dcc26d70d94d50e628513caf84e60b709db917cdf55443a681da8e6aa38bc6032ef4f54e606fcf52d4346d237baec00baffe8ff16cf7c905fdee13eebf02906a9f0675eb4beb8bb6de58d86a80469f45e98918848c58495516095a9828924bbdcf8384fccfbef70e52d53c6aafd4ad9444fa4765420e8627cdd0cb0e60fb2d45c482424a7009daa524a2b40ac6b129ec3bda081f4794428c3ca51ead57b640acd261f0f0d390fa8ea1a12e0b12319fe62b82733dc03963394aeaaf20974c96462c84c33a9b78fab99fdf2515299f3f667e23fe9700446bb2b69c5c5ebf7a7e1e19acc2aa0248693b3b4e4d82472d50b92087383c4c17e183c7e5c1e3f1a0bf7d08d9861c2a8e5699ae13f0d970f824fd2a5d72c78d7358bcb600ac973e27350e93a0eddf6f435bcf3c64644a9095ab46775b2756af5d89c6554de81f9cc6de57df46aec2487a1487c55f44d9a319f9b90688c5516a410e14348b4aa2d5deeecef05b7b762de4f1f8dd7fe18538baad4577f4cdab6dc9c8adcd812e2713b38e39e26f01d902290d5314ba7c2d22a108c45201d11f8bfe8e6ee4e6e7a7430a130ba1ede4295ca01cadd6e6a32cd78fbbbe194711a52da737068b69027f3c9a85197729f92623367f63135c0e0f2eb49dc74d77dd88aef64e9806e648cc44b4405c6a4729245226252790496936c84f192747d3bfef8fba83bda343d7f221f8280d20d53e1c865b7767dd43ed86c25c81816cae46af83c56cc1a1c34771f996d550f033108944a0d293338d24303be946df401feaeb2a68457544ad8338dc760a76b79d22a51739da52ac69f1e25b3790bdf0c4d1dd358e93032bd075c188e22203aeb9793de65f5a82bdaf1f4703a5b2b6774ec27891a227b9523eff4fb72885220194b4ead1b81fe39346ccbaece0c73894cbed4163a47fa5469cd3f129004e9638e7cedbeaefff158f3cbdd9350799428e052d8de8ebe94fb7cd155bd6a2ebe40801234a150a70f2481fa60960499906b56565f8e0d041f4f68f40a552626cc68828d9e8327d116ebd8ab441e3c7f9914b70b62b8cb59b6bd0b2643ef4554a2a6c0c19fa0a6227255e7ffa23bcffd431c8754aa2522a5c2e874a2186d56d81d9318bcccc6cf8bc1e22020f0a85f978b1ef895b5c31f7cb9f02e0d52a16bcb975fe9d9b59254b5b14809bbe9852d1bcfc6ca8b44acaae75b47d314c0e58e0f5929f211a359b6c9093ff5fbba1198323560a3ae3d01080242977948d20c6927df077a2b122097bec1a4c8e75e2b9b607880c22b09b87a0124d22e8f722b3f4364a6f310cb60fe3a5ef1f207d1023cca39ce17391120b50945704b1508af39de7303a358a46432d46e62eb61d32efbeec5300b2ab726fe96bae5d92af2ad210cde5c034338d0307dad2b7cb7514272b2b2b9095ad83cf11c4b9b3ddc4f16e62ba04344a25aebd651d6cd35e0c0f4e422211a3b04c4fdbcf8769cc01f3ac992831867a0a2d252d4a28f32250281590331f21e8e80413722096f72bf8834ec84532ecbcf63570042480882014a4389a974fcc540db14482d1a1511c6f3f01963e2f1396b2bf1dfde9ca34003e4750746bf103c3b22c254f9f978d109d3c323e427446834427c649ce254231b192040e52542b65009150842cbd06223151a95c012e4d5b943442a39643a751606a7c0e2eb2e17ca25ed3d42c9ad694e15b8f6ec2f973c790939d0f5d16193d7307159b81c14919f5ba30ed54af5cf7300cc91c549495522b4fa719afaebc9e2c8b9e7e23899e815ecc4c4d228f97c7be687a62631a8042a4be6c73e61d1f24c434384a195c21270a0b8a505252446e50446c2020314b204c7e6676c69606545d5f02bfdf8f1327cf5291c4d142217d57889ae2322833b5e432b8a40d44afb44bed67ba514a037bfdb79711110471f0e3bda8a85e84e2927cda6927bc4e23b4943d241239f6bf7f1ea3ddd338f8563bc559d21e6e023a850e3919d9900a254408b31078b8d8677ee78fa381ee5b528e839329cabe7b93feb65fc424a4b8b4f552b502f9d9796421f8c82ec824da14a67c39d9091669a7cc49a695d5e30cc261739119f3a4ef15e5e665c0909b07be548cd4733e1179212ba9f1dedd6f61d515626cf9fe7749a0e2e86da75d282c4675751d9c0e3bacd619d2152fd91406cd0b97d05c84f0ad0d8fc236e287265306095f04397503d96270c8f54ecd8d06f7587f7f399b8c9f4801e0eaf886fbaf34dcf6185f2b8480385740ed21a276a96a2c8684b6b6b763106e971f6a950a329938ed2e2364d2d87892448e8ba9690bf864ec5a16d550f17252e6b413261bc3c1a1fd7fc465cd6751a88fe3bc8d8159518f071efc098482546a8ba53dd2eef7df2671eac0f2e5ebd0b2b0093b6edf89637b07b0ae695dea6e3279a294218c4014e1c347eeefb5e9676ea7e27751f784d33b20e00837df9af383b7443a1e23544b41661642899042050f4394c29c1e372a0aab485cb4d44a6ceac130845202493c1d23c3659f73d380ab9057908b24ed4c924ddd62146262dc8c12f9f358b394865aa2c19c6516fd53162cbaf755c85519e8eee943988c9b4eabc689b67db4f306ac5bd18a476e7c1ca74f99b06cc122a8644a8a986e249c2ca6e74cb13dd6dffd2cc406528fa6020420f50c257d64b5a8571f5ea85955cd920b1d758dc24bbd2ae2d1108bc428cb2f8346aa41888a4dad44ea34854a9a1eb094479a9db3a1a6ba88b63b93b83dc56ad46aac04eeb9b3b8aae514717d6e1a144be7795d0e7458a3702b4ae00986204e50e44c3ae0b4b9e1a3849624919c3335c264e74043bf2da220248c8a31e91c0ded36bff0835822fa2ad5eb4c7e6221feac03f4be6a9976d3d15ac97c0d878659aa5240a19181a5627cfe00ad548c56976604dc747ff368eb2972d2a0c661341b69955750f6cd4e535feab16b84064a123f808dcd63e464b569ca6552f78a52c68f80c46534e8b40b2c717dc2eb80800d91c27bd0d69ec0c5b175f4b91b9c547b9013eef49d749c731fdc4ed1681f7d14a69a137f950798747a808038bf56c2956e10415626172a8b0ce2a2ca0a555d8684a3e0c452376ff9483b42324ed4450902c4108d0a60b158505b5f45b323ff244dd1f5936a68f907b1a2bc97da272bfdfdd49d2e2a82d218ed2cd90f51861e61af0b1193115e22098f2780d1492ef69fa94c58c3c3ee99f070cf5cc472c1c77a5fa69a87a8c648f26f22e4df061a5ae3d4f350c8e9a5a45701f17b65aea8f4f22c517ead86afcbcc14e9456a790689346db78856931b879b56cb9063a07623bf140ba70b657812c8f90ed4a83f4471166949f24fc5a752169f029290f28698ec4ad8e582676692dcac00d3f670f0fa570fffd41f8d4ed3b7538f8446e965fb64d5ffeefda17f7a7b3de5913e01446b8f3c7a5570c0add0097356d529172dc9e4654b6dfe39264e0bb362f15a264455c66907527950c427dbcd57e337c71e7aed8a8a70f64d0bea2e0924c2b44209486532f23c1ada09113c76276c5373483d627be4e8f9fa7127f5d39f8e549b24fed553d4cffc5f0d3e01937a510f811403f95c8657412a9ebda56efbc39539f31556bb9dc20b4b8a491411f3b267a63e7c77d8d1b19df244c82097666c6faa599221e61726799c56f2f26a36911c6463d12931877feac5aec1d3c727ccd1cf54cc1701f08f00a51c7b8dbef53e295775458c8d78e389b8cb19b6986c01d37b5136d4f5b743f7ef3efe0f1403e22a75a71c560000000049454e44ae426082') +DISCONNECT +/*C146*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C147*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(13,'Gamer','2016-12-18 21:12:00.019000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000016624944415478daad5a07781565ba7e674eefc9493be9859084844000e925227029cbea8a224551b95e111754c01515b1ec8ae25a00450444502ca06bc30684500541904b4f0224a4d793727a9d76bf39e03ebbac60d6bdc3f367e6cc99f9e77dbfff2bef3707469224fc7f6c93060f6127676464875c8e908565db141c1fbaa7b4f4374fde6936cb3b250d96861a0c03489248c71c0d29c6ede6e50b98ff94c00b2fbeac552915a39b1b6a174ebfe7ae717e5e1055df1f10aa2fd5ad0817f55f76ff8373bcbf91800cde40c06320087a88220b954a20126e3aefa4e12312e2bf4de0b9e75f4245f9b98401036e189164b34dd228d8693d52920df680173a8b11da9858e80e1d864a6f4254ff22eed4c93387dd7edfb722cfef0b05c3e5f7ce7b20d04deb1b68a44212331909bd2496e9c584f97d92465d4724eae8bb3622c0fd5b044616df6899376f41697a72c20db5d5f58ccfeb8649ab81cbe94246513e12136d600d0684b76f071314d0f396c95007fc60b46440250b4e62024fbcb8fc597bab7dd527db3ee7ae4340761b1b59bf48f2f947a9fa153ea4ffc364bd7feb67b5dc85aaa58c5e77824854138150b708dc31639671e8d0215fa726a70ebb587949e370b443c3aa90959682cc8c74d4d7d7a1ef901b1065b582d1e920eede03afc385d8c2de5085c35013298dc9044538040403b03bddee4f0f1fddb876cb874f9cafaa0c5f059e9c3de2f379e0b8b1846fa169fefdc9ea5b26c0f3c853ded0e9b32f9091761081f3dd22909d93ab5df2d4d3477273738bbedb59027b6b3bfaf4ca8551a74538104294410797cf8bd1bf9f005b7c3c04b506ee2fbf44981360cdcd05ebf7414dc444b71ba1aa4a888d0d3025a740595888b5ef7ff4d5d3ef6d9aee72b982ff4040413b0b11182af9fdb354bdf3a79a16fd9115ed76b897bd562605829ba1d1c8042e1281f0af12b87ddacc75f3e63ff4c081030761361a111b1b058d4a8da0cf8fc6ea1ac4927545ad12b7dd7d1762a30928ddd3555a0a4753136c830641686b8342a3829288f1748ea7fb845018eec38790366122d6eedeb3ed91f5eb6efdf979ed66b38e659864f0fcef2878e7ebe7dc93ad9d7813fc6fbd8b40c9dedd8c46b395c8eda14b1bba15c42fbfb6f2f8e0c143076cf9e4338c183a086949365ca8a88482165a0cfa61d1e9e1233f1f30f626f4ceef1521d04904dacbcb903e6c38741423901fa15040f27880d666749e38018fcb8df44993505e5ed1d56ff1e204491078c16261ba24298e08e4893edfddaa44dbdd9655cb5492c707c7c2a739f87daba1d57e4bd63f4933ba8880745d022ab59a7d62c9b397343a434638e447427c02caabebd069ef40b22d0149b644f4ce48859e0fc2ab5661dca48964341e356fbc81b89c1ce832b370aeb58d0857d02887972c9f101d8d7b13e3c18a222c44b8aea92538e2a187a2db392ee826f7a180e849a06e9042a147b5bf1f5f647cf42104377e00cffb1f97b35aed0ab2fe61827649761f19e3750968b55ae5e225cfb6b5b4775807f7eb872f77ee46c34f3bf0e4a40234b6b7e35c3b0797290f374fbc0d4989b1e8377614d84bd568dcba151da34763ddc64d501c3d8ce2680b6615f5852f14c2c2d36720e6f4c226221b7674a13c14e6febafca5a86f027ebfc36c368a0c3348f207c729a2cd8f989e7a54c7c6c7c0b3fc759eabb8f031a3d7bf4bd63f232fb26cfdee10502d5ef29c5da7d345d93d41946ddf8ccd338bf066c909a8552206f5a2b4a964f0f5093bcc99fdf0e0f2b7e0dcbc19ef7ff13945a184915c080151c229970b7e8d064b470c85c662c65dbbbfc7c01b86e07e22fd0d59b27addfae8273d1e3ff97f2ab9cf580adee99a1b878f353e3c870d95ec8777f3163b2388af5021db2ea74f82162402e8d60a2c58bca44da7335977ecdd87d9899d1853948172671882c442a95442af53c2efe9825720572fba0f034abe85aaa3093e8d9e52a711419e2a3e0d3dab8495dccc6a3662c7a51a6c66b5d8589087cf03017ff5db1b629630e05d2c5bc8f2fc542a7af759962c8c57ddd01feec79f95b8f395a58cc1b086c0ff48b03ae4e0fd19e37509a8351ae5a2c79faacdee999bfcd6ea95d832d906455c141e5efb138c06258615dae07478d0e574e3786d080f3d300f6dbbb663d58993b827af27b229f3d8344a54f0225eafb8881313c7214aaf430365a6c73c016cfaddeff0514d9dd3bd768ded6186d138597614e3f7cf5366658eb7ac7a81e14e9d86fbb9579c8c52b99eacf529112827f0ff54c9af4b40a150b08b9f7ca6dc6a4bcefd7ac34abc3ba33734b126cc7de308e6de5680be3d74f02aac481b330be5672a50f2f1f7a8a5ec7367ef3cdc949d09b849060d1b0977871dc31e7b1cc7a7fc1e5a2275aab919aba90ebf3eb83fd69e3c5b5eb47d47bf6216e96e5eb8991ebbd878efcc78cd8431f0beb9410ced3bb89b7cff1302bf8bbe6bfe47ebff2a01797b64e1a3c792b3f307eedcf00ade9eda074939f1f8f38727515edb81650b27c2dc7b1cb44613f66efb1bea9d51f09c3e8d242d83392386438a4f82446974c337dfa2b1ec1c5e1a351c8c2060f5f90b600afa62767616567db763e7ccef0fdc6a65d9215c20305b95d773a6e9f1f94ac1e981f7855541a1a3eb0d46af2d2102c77059c049ff1681dbef98b96becc4c9e3d62c7b0a5fde3710165b341454b8967f721a154d1e30240ff4ca301424dea6bdf016620fecc3feafbfc0454e4448a4d41d0c22d160c4eb232980e951225dffaa9fc7d4a23e603a3ab0f5c8d1f5771f3dfa27935a353d1c083c6298715b6ffdfcff81ffb535f07df1dd1956a75941308f12944a022f5c8def5709dc7adbd4ad77cf9a3dfdf9575fc523193efc617411789512469b09f54d5da8a8ea805170a3d594891f0dc5b01ed8853f25b014a895088618dcd1af0f542c0b916a8092aadfb7d5b5080e2fc6f0f3e538678dc191ddfbee5874b1e26498513c28e9b5f3a3562c53b3a49b5c0b97725c4bcb07a47bde27eb571094f6abaddf2d02c5a3c7be396fce03f32483053bd72fc3cab1710859e2a0d4a95167f7a0b9cb03d6eba474aa47658702190821cda685aa51c48f95764ceb9d0fad8a858255a0c1de8a353df2f1505c0c827bf662776ebe5ff3dea69c3b83fe614e8e7f403fe6c631fa87ef4378cf2178deda584dc5fe4d4a9ddf118186ab83b7db047af7295af0fc5f96ad0c380864741c5a4b36e0ce5c01da84449c6b74c34795d7106544535d3ddc4dcd082bd5c8976c186ec9c6a5b65624522a35510d38535d8d8f337a6071513f34efdc014b7a3adeb854fdd5945dbbe614010bbc0ac5bda6250b1395e929f0ac580bee4cd9360ade8d045eaebcceab83b7db04d2337a8c5cbbe6adef6b2e5c8099845b744a36bc35c790dcba1789a98968f284e1f406d154dd809f2e56c0c4ea3121ae00bd2c0948235790672fed68477bf1388c2131e8fcdbc7f0511c440d1d8e9ddbbe5a7c7779d96e51925e56e4e78d36af58a60897ee87e78df53e8661fe7ac5fae7680aee97dca75b0452d3326257bcfc5a6b7cac55d1585b0b0482e83de4466cf96c2b6e521c83352e167a92d4813a37f6ed2f834ea7c2cc8cbe88d651374855fad9e327b19bb2d19e790fa266d54a38a82adb7af440657c82e8796ff3949b3b3b6229ffffd53c67568c66daadf02c7c560c9f3c75f84ae13a48105aae65fd6e11301a4d86f5ebde69b71a0c3a050132ea3448b144e1b3a367211ddd8869c3b251e30921c6a045b62f1aea16ca34d45e0625017a5a81ff3e78086e729d8fa6df814b7b0f40a29a90306430e6eddc73f0a97dbbe7e608c29381ecec3bcd4fcc6724b707aea5cb3b10087d089d462e5c670982e767d9f09b08c8db88e2e2e7fff2a7254b25464012a9c9faba46cc7d69396eb78a9832340b4c14355060a16714c86ad64217a28e90c8823eaf3e7506db4d666cbb6d0a5cb535d07539f14c5b7b4b7e69c9c07b83c13124b09fa4c295a7b9793cfcef6e45e0abed0749f37f7845f3d7fdfcf6e13f22603499cd4b9f7ca67efcd04116703c96ac79933f7364ffa5d10986dca8280b86a4c4a3bf321a316a020f2514124371114095b30b875a1af0995a2fad1a359ae945426e0b755fe7376f9eb0ccefad528bd2523e367a76d44b7fd6509a8273d1525eec72aca7e0dd46d6ff5f5c0e5ee93f26206f26b3257af6bdf71db8507921ffe8d1c3538b63540985a9d6b576d239619205a99c0af192166a9a8e6724b80c1202ca10ac1c837dcd8e77f63bb93256a78f2b7676ad785512850c956a52a7d7b7c030e1a681a6e71e4390acefd9f0c12556a37985ac2ffb7ecdb552e76f22206f66b3292d3935f95dadc11c3f58e3cbcbd6884aad5e0bdea44288449bc96a40a2d90426c4c3d7e2c5c506174efb59f06a5de3c586c68f826df66dcb39fed4148649f773fc7458cc8f999e78d8a04a4f83fba53704eeecb9cfc8fa9bc8faa77095eafccd04542a2a596a75715656e6f305057945a9a9694aa7db85536595b006dde8615222d5a241629416e9710604c8e2175abdf8bed68dd3be20e26262316e507f5a1d017c47275a9b5aece32babbe2a6c694b360cec3f5effe8838ae0a163f0bdf3818309065fa186fd9b2b9adf7fbde0fd55022c6d1a8d7a426161e127f9f939c6e4e464c8cdadc3e1401d05b1bdad1d4eeab004b2918a6120cf936650c31908c34e243424e84c74de4862ae4f463a8a12e261a18b63d54aa889581af5c58923874031ee46f8163d0de162d54ec168dc288ae2210a7f7b77ac7f4d025444d8e4e4a40383070f1c919797833039792b35e32d2d76747676221492df822848db2888a94429534206a38606020e51af9b41da872c204f4e412d21961a9f9e063d124943a52b55e8ad5223ada50dbac7e743aaaa41f386cd08385cef2487b91778a5b29393244f77ac7f4d022a956a689f3ebd7fc8cecea4550d11f836783c1e6aace48c460993748d8c5da26c43f10a3f59daac52e02d4689d7e98a738c08961348c44930d2b5f1f47d1a11b2d14db96a35063aa99815f6023b630ac2ef7d827a32c85197dba73d75ee8611c0799bb7fbaf53ff8500595f919e9e5aa9566b3343a10004d2ef72eb48cd8dec56f2f791bd7c9f82f65e498422724e890f18158eb0025ea4792c3c070b9d33b20c0157229b045d2acdd397e6ebe3f3c1f0c0ddc49c7ae6d20368ec958fb2863a7cdddce2e6cf9d4ff9d0eff7fc6602043693085485c361f64a2c44c0b1644d499209481112f2fb3f37fdc921d08b29877f2d32784cc5e007914733b9d77e5a85b3e4f39944dc46ab9347222f9bc814060208ceba076c410e72dede0081dcb329bf17da5d6e343635e183dafaf3072f550f90c29cff37113018f4f3e3e3e356cbe745510e4e3ef25a5e761b0a8dc86b7a96fe08f47d48a1c22c02ff29659874aac463e460a67d98f61cd1df4b043cac886cb27c96c8a2802c9f3af6bfd0efe5e5f0f012da963c01ddf97370f72d4490ee7191ceaa6f68c2c1fac6bad2ea9afc30f7eb24fe89005956191d1d754ca7d3f71b45ed9fc5628293fcb5b1b1193535b511f0320996869b56643855dd1e44e06d223991ce1d24f002fddb4356bf9364c434ba61931086d615c6d49c4464279a619e301d99ac0f7697135da547404d02c4dc2ce863a240a90b765ec0597a56c9d9b33baa1a5b264b977fd4e81e01a552551c1717bd8fe30426252539f2ba3c2121211207274f9c4427e918990461463b05f034b26c210195d3680ab9d67aea0d8e50652ea429cd14c455611ea3541ae80665e0d15bfb402d173c6af4832e0fb4a45aab5b381cdb7d093c1922be4706f4b156d4f902384169fa8c9caadbed6bbd4ec71fbb4dc064326ed7e974134394df63a8005116423a5549f2215ca8aca2fc5f07b7c70725c58593ceddc2b33090c592c8b74790f3ac57b3b0ea75309875184269738f568d7bfba522b77f220c045e9e0792dcd6b25051607fbcb70cc78f34c04badae3ad6045ea3c791da7a70d44f4fe99b8e430d9d811fcb2ea4493cdff1ab042858cd164b54bb20706a3948a793fccdca4ac3e163c771e8a7b3087639200a21c8c54c8e014ab5189f68c514127286c418b893a2119f1c8b648b81a4b5092aa3091a86b28ca7911a7f81e289349348e0054a0672f123173c55de86cf0ed6e06433adac52810bed4ef44d89c5ca594390931b8f1f4e34e30faf7eb132180a2dfa55029426c7d30aecf4fb03183c7800593f0ba5fb8fc0dbd18689056928cacd802d361aa9f1d1488c8d82d568004b3d00745a52cde446844d7e6522103a815685e7a9d8f93b21051ce482845b94e43f045e36002256fee16c03d6ecaf414b200447308c21c971787b5e3192322c916688f38978f3a3a38e5d676ad3f69caff35e978046a35941865d68b1903c1e3208a57bbf87480566eb82a9183f7138144aad7c3959527e532811162132782e4ca0c2848800d3b1c0f9a8a309410ad3792a7c92205d064f23722cd70d9ac7e1f463f3a12a6c3cd314f919d246aef7ed827148ed6985a4bc9ce9e4cdd91542f9c9b62d635efbe4ce6b122097d11381065a666b2c05928b822c4029edb51937e1c1f933a80a0be042f2db6c32a5c881e103048e0072a476c9d21247802f332337176852164a02dcea08453eb3b2c9e93347aee4f586a9a590e0f18b58b4eb143a69de30a9d705a30af0ccec815092aa955789a14ca1a02441ce87f3951de28fc79ad3e77e54d2782d02996ab5aa9c0a95567ea02c196eea95814f9f9a019efc990f0709b40c9440531c88024704b8c883e4256129c73374cc731201e4d1e10a62574523fa67c5211410411288e614294baa906c33e3c0b916fcf9bb1f49b9f291a228939f39b4175ebc6b38ea9c6ef8c89d38ca6836ab0905344790e63d78a4ded9d6e64b7ae0a392c02f1130511097d13e555e39f9612fdc36127327f7855fb8ec0a023d4cb6a29c49c4882f839a17161e1f8ffa4e0f2ed93d38dfe242598b033fd6b7c0a0d660e7a39361b4a8c16a15888b33424115594d8af5d4b166acfef61ca26c566a7dd5d402f3e8991c8d6179690884c3914421108e28eabf7b2419c8787e343475e2d0e1c65be66c29f9fa970890cb319b88c43d72ce97fdefc3fb27e2c6bef1087197fd98c404b905832e5f181dce203a1d41945c6cc49eca66d493d504b2a2f87346a639670f2dc0dc1124d84c0aa4241a23955b41994ba757a3eca29d9a1e1d064c180185c148d7536c058310fc144754b9598989a85939c6fc4e3ba4605724291c3f613f3e79d5e7037f318889c0ed74cfa7e295bab761c6184c284c819fdca6dd15c0d1ea0e1ca96e45799b13f5142341d230fccf1747b4121542560e7325910e61687a125e1e5f000dad805cd1590dc96fea05b406154e557441a258c82bc822ed628ce82a39834972f0cb5690f516f93e0b2ee2ae5432a0d52ad150eb0b2ffa60bf757f6583ef9708c83f8f37d130ca9f73e3ac28ce4a42b353eeae5ae10e0571f526a74f366270e9ef0a5526225b5bae578b268dc6589b82aceb4266761a1454e8240a883317bb1043f2c314ad2752da484f11012d6b2e397865469446497e51fc90742709aea27b03d4dfdfb9bae49e630dcdefff120179f71c8d67d18d8d8d2067226e7325e3fdfdbc20e74a8611776ddfae1839a01f53ba711d2eecd926f54e4f6478221da615b56965e923cb747215ca520a422d671e564ea1725d21a20a02cfd2b2aad4f27f9b50a0b52324deb779f7f8d3cdf6ddff42e00a09d9fa8fd048a471b5c9195cfec1d47f399f463ecbc7f272ca74bc57ee715c396e1b3c68e080f7d7af5bb1e96f5f7ef5f2f265abb42a65a656a14cd12b158949667db25ea98c8f37699372ac51d93a8d82f82894469d5aa151328c9f2787e285b08f13da6a1d9eb3652d5d87da7d812d551dce965f8c817f20c15c0177ad4dba32aec4ebf55f0aac5bf326e6ce9bffafee7779d964e224922057491dad81864eeb22e606c234b58b9c51ee2d43d2351ef47fd847da3725d1f16c0000000049454e44ae426082') +DISCONNECT +/*C148*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C149*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(14,'Hopelessly-Addicted','2016-12-18 21:12:00.019000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000014614944415478dacd5907785555b6fe6fef353d24842440082d8492404848e8c2388c0a83c8c8c3511fa3a2f0d4d19987ce58b08080a28ca2336f747cea1b15e9c5204da4431292904ac84d6fb7f75e669d9344891215fddefbde86fb9d9b73cfde67fd7badfdaf7fedcd894422b8d9f6f8134f684522d16d4a9572b1582c4ef2f97c1d6693f91da7d3b9efcd6ddb6e7ec09fd1383703e0b7f7afe26a34aa270b66e4af53ab550a8944020e978b48380c9bcd868b172ebdf6a7754f3df6ff06c0236b1f4dd268d4592aa56a0c199ae5f17ab3a3a3a332172e9ccffe1e0e8700a63b87033e9f8fd69616ecddbb7fc586975efab07f0cad561345638c4f4b4b93783cde96603078edfcf90bbeebdfb376edc3d28c8c11c2d6d6b67075758d67fffe43819f0560d5030f091213139e2c2a2a7c2a63c44809639ccdee40534b2b82013f0aa64f038f47337f5d5f0e874bdee0e0934f77ec59b962c5edcc3d954a399afa1e20e3536fb9653e140a79e8f4e9338d04e01ebf3fd01915a59d337af4a8fc69d3a616c6c7c745373535876b6beb6a74baa64d7abd616f7b7b47f8a601ac7ae041d184ecac3d73e7ceb925363a164dba265c6bd475b4b6b5d73b5dced4594585a993274d443048b38feb0170c0e5f2b073f79e93772f5f5614171737c1eff77dcae572478c1e3d1aab573f88a8a8287cf8d1ffe0e0c1cf3b027e9f343e3e5e5358588059b38a10080451515181fafa061000582c9693b4b6fe6032992fdc14803f3ffbec2bbf5c74eb135c2e3f72e6ccb92faaae546d8f44c2c7fef6ce76e7f215f73cbdf88e3bd64fcc9ec044cdd71ee080319e0b93c5c200f8f88567ff74975aa5dcc3e3f37f150e47406187850b1740a5d1e0f8d163b8565f074f200495360ab9932760cce84cd8c9c30d0d0de8e8e882d16800851b8568b881865f42202a7f1480b58f3e36a1b0a8e042544c8cf0d0c1c3bb36beb87ef1b73bacbc6fd5bbb367cff96d427c1c1bf760fa131aafd787d2b2b2c8c92f8fcf2abb74de47e39e65bcc234061c637cac4a81a5196aa4a945e8b27bb1afae078d2e40466410f07961773841b34ede085c1f9e3df4994e201a7f10c0b3ebd7df5b5834e3eff50dd770f8f32f66efdef1c9f16f7798ff8b5fc6a835da8f478cc89895101fcf1a47a185b6b636343634dc5b5b53f9bec564bc44f727f6f709b3efe0e08d6539989511075f300c119f0b1f79e1cb063d361eae4697cd03218f83414865170158fc830036bff6ea333953739e3d7dea9ce1e2c592e17b3efbc47ea34e85b3e7a92552d9a6d8d8f8953c1e8f6fb75bafd8acb64d478bf77fa8542a0a0502c109d6e2bee6f187f08bac246cbd7b2a4214525cf24c5da715a7eaba71db846494b618f1f49e727809108fcbc120ed5102b1f57b016cd8f4ca8b0585f9eb4e7d75de72f6ecb991fb76ed307edf02222063e822270c978f7f71c8cfdc23dafc2385cecb5fcf3e19cca7d9fee7c3b33031351a1e5afc7c32d2e30be2ec553d0e57b461c39249f8cbd11a6cfabc0a0ab160b0d731eb218740580705b065eb6b7f240fbc5c525aee3f71ec44cebe5d9f55e0261b51e32b747982ec063399ccac4e19aac68e27e6832b122144f15d51a587381284462d43b72b80cc540dda0c0e2cdd7602169717423e6f3000ff4900760e0ae0952d5bd6e64e9db2b5bcbc2a70fcd889dcbdbb765cbe59001aade6758af9350a9180623d04a7c787c5f366e399e53948e410c3f0e250239e06ad5d07a9b906eece36a8635588d74af18f13f5786657291b7b4c988599c5c361189a5d1b9d745d413f7d45b2257843002f6ddcf8705efeb46d151504e0e8891c02507eb30086c4c73c4e21b2797ca21657ba2c80488a0f0e1ea104184146ed5b684dfe2586e6cd82dfe541d8ed826ecf7be0b75dc2d88c1808a9ffef3f3c8f0f4e354028e06178b422d86df7f05cfe208759f48170e421327efba01e7871c38687a7e7e76daba8fce9005efad58c51fa70f87297285edc69b1e26af5153cfec2664cca9b0d6de57be819b51cc347a6e2f7f7dd0db15486b5cfbf06c3ee57912dd141ab90e3647527eeddfe258669651899ac414e463c6a5b4c989da2351c3c593be1ef575a3b0705f0c2cb2f3f945f30fdcd9f03e0bf57cc8f3570f895eda9857181a01f66930933e62c44bae11c5215369427dd8dd894741cdfbf83bc12c0b45b96405df9118607aa211489299ff871cf5f8e236f443c644a3196158d82aec302b1d5d173e468d5d8a7ce5d330e0ae0f9175f78604661c1f68acaea9f0c60f3c21c412418b8e0cb5b9eed884a4666462686182f229b5306955288af3c63714d5d84588d14940ed0ddacc334c34e0c917b219288c070d0e1926638e83a3b7b28e45221f41d669c3a7ae58d7fdf59b2f6dbeffb36800709c05b3f0700d3feb6ace86f1e8ee4fe365912e64d4ec4a4c420a4225a8fe1008cf6303eb8c84364e80428b95ea4582f63a4c685980425cb5ae14018ed7a3b2abbed58363303adad265c3c5dfb4e57a7f5b1ff28bee2fe3f01b0e391dbd74be079dae8252173d74c08b941043d0ea213ca095ca0fa72134a2b8c88262fa4a76930242d1a2262ad00e586303197d5ea46558f1d73260d434569a3a9f4e2b5acd5fbca3b6ef4ae81005e2200337e3e80dd8fdef18e801358258f8e47e19cf1f0392c2c00b793e402192a574a60333bd924275348d83e24dc100e85e1218d64edb2222213515294a1a1b6c379b94c97f1f0818ace1bbd6b200bbdfcf2eae905d3ffc22ce263478ee7ecdbfdd94d03d8feeb42c5888c840a013f94dadee5415ec1689a5517baf546e8bbad709bdd18999188cc71c9e013558682bd929fb18301e073f9d1d16480c56887cd150876f5d89fb35b6daffee164bdfb46effb2e8d16e4b179e0c8e1a33907f6ee6201b498834c321150d112150a0545d4c7411f66406f5a8c6880fa7afbd733b2b326a65cc81c1523e86cb74020e4222a460193dd03b78f129bd505b988387e44027ad56aafd063ec089266624288b9d6d774e2aace7ac266f7ce7ef4e0d941cbc641011cdc7730e78be2832c8026a39fdfd1deb2c8e775cf4f4c1a661789252d02bea091dcde4c800cf4889d80b05a68df86758b5378cd9f2591eea9ac6f46678f896636c2163b42a100e346a52065480cd5d06e70a9aa130af96c31c35c23f45c88be073c41e89a2db85267bcef771f1f7df7fb3c3e2880037b0fe41c397c880550d56c18575172f294c3615371b8fca0482c37cb959aee9494e157a26313caf902417d38146ce14af857db0e7fb2527675d7db4387c7c3e9f692fa047dc2b0d85c283e55874a9d19cbe78e47f69814b8684d84285704fd4128e462c4c6a9e0f7046032ba70a9ace3805e6f5ff4d8a1f3911f0d80d4e823d3f2a6bec168a103fb0940712f809a16fd4c73f7b5a3a15098eb76bb69f6ec547c38e0a31747c5269862e2921a552a6d7d545c62b9b3e1f28850f9670fa4240a6936dd60c563240cb1880fbbd5078f24118696368c19ae018fcfc1b5ba66242668e176f9909c140d3dc98fda9aae76af2c79e98a6def9ffba1353700c0c6cd9bd64e9d96bbb59c3cb06ff7be9c63478a590057db2d054e73cb974cd9db2ff343e110bc24d42c560bac04c845b3cd174a42f109c97e6dd02e8e13d838d2881de6ee16781c6670fc2ed23f7e8c2f9a83ab655720e6ba219709d150d78a74f25647ab1922991a3d5ef94e695af63d45cb573a7f0c69dc1040494979a0baba26e7ddbfbecd02a86b37cde7784d9fa3cf7aced73547ef220cd1c2f3502968b71373d89cf0926768faa1a0059c912087266c42c4588f968636644ccb43d5b91208c22ea8546218bacd48498dc1e59216c8868eb644cf587a366ac2940b7ebbf7042f122a1fa291396f0e405eeed6b367ce7b831c71d1b295f773bc1ecfad426e64b19ce71b35601ba50f09bb1bc148dfbedf82a1203ce40d0b15e95d3d06b848754e4c8b4594b301ed351518953d165dd71ac0093a20e6f7ee2df9298151b2424efe68d8021a7086e5236ad20c4f28c239130c06f7d1d087d3e394577f10c0e657373f3a71d2c4576b9bf5bef861998d0593334729247cae838a0c5ed0cb1adadf985a98478587d7e38583d6834aa562c1f417f29cbe42bfa2ba0e41af0749de56581bca3079c6241acb8eb0c746b2c10d018d5156a2434b931e0b6e2f406b7d175a6a1a219fba08592bd780b81bdd46a7bbdbe27c23295af16c4ab4c237288097b66c7d6cccb4995b460e4f455aac126ea2b4af2a9a69102a1f472590d11c761382ea60e8f57a54555511cf0ba05428919595855028347076e8f9f6ae1eb4b7b6416b6d84bfa30a63278d04c767630144423e76522e97ea58159a37731274956df0e80de8ecb241346501b21efc03444c987a03d0f5d86b3bf4f6dfdd969b76ea8600de3a58f6d18cdc51cbd3a3a470513229be78155ddd3dc8488ac29cace17d0022a45b44b870e102ce9f3f0f994c06b1588c79f3e651ead70e00c178496f34a1a5a59500e8e06fafc4a871c310f15911f6dad975c238acaab2951d7be49834345cb8460089addc3e749889991ed988f889399045429053e63e5ad1d6595adbb9ecb9e5b9a7060058ff69e99ac229c35f1f16a7a02a3d8226931b9fee3b0909cf8f610931585234913588795e2814a2a4a4049595951008f89048a458b060017b7fe07623870098d1d6da0a8da5116e5d29c64e4e274672f4020807d967ea6a3be0f707a0168b606a328247f7fcc4709ded7a60c69dc87ae469d0031822e3d11a018e97351f5b59903e670080ad072a774f9b30ec36a55880789900dd0e1f8acf54a1a2ac0ca353e3b07ae95c76072e408cc3a5106a6969467171317943023ec5f1dcb973101b1b3bc003fd00dadbdaa135e9a02f3b86fc5b6822426e0a09079b1f9899efa282a5a1ba153e930fa10817ee20f50b49e0881e8ebc7fbb1fdad47408096c8a560cbd278cf2861edde2c9c9e903003cf7cf8beb268f4d7a315a2541b25a02019791106e1c3a7109face4ee493ebd386442356ab82522e61f7464b4a4b48fadae0f678903f3d9f42484d00c20300184c04a0a31b61b31155278f60564e14a6a48a11f1bb596f71496277771af1cfaf2c68e326c345001c223554c9c331716a0eb23292c10bf99148d5998042a8d9ec41797dd7c95573338bbe4ba33b4b3fce1a9970a75222404ab40c32ead069f5a05ad78de3672fc3d0d30db5548051297118939688d4e478f0791c762669c5f66df8620000939942a8c7824e7b041db438b5021f32457a083c06f888c1bc1c316c6139ba24e968b4068976bdc81a978929e34740231353dc7340ec8330795f47854e7d9b3950ab332cde706ffefeef0078f2ddb36a61c8f1415a4ae2adb15a0575942386908b28cecda4266b755d549ff6b002cd62a510a099613c9614a322ef68a928977c4db5913e00168b052d94ac74463f516a3da4c45872a51a32b110cc01094f2c455c6c3419dbbb67a4552b3084c6d3ca4550d23dc63c93d38f66bd158d6d966b1d46e77dafdc3fe3ab1bb210d316ae7c7cfc8cc2fcf37149c324415287514a1992997d1b8d0c02528f418a7166abd04a42ac4b6f436bb711668b1d62210f495172a8a47c0abf08cb2e0c14bbc38e6e931326bf8805cebc4d2197316707888fd5204eab848a802b089094d69f88bccebc274476e96d5eb4f458d1dadeed34bbc31f50adf3cceb0fce340c9a0798b6e09edff367154c3a3d7b666e6e97c18986562b02210e945231b42a2962d47268a9a252917a646651c8674085e1261e77135707884d22f48f01cf4c5fa46ff79a4b21c6c4309f8c139374661218f39d392861f64bddbe00cc0e0f65700f8ca45c8d24b7dd9408b9011b8e171f5a7fe0c3b7fefc8399b8bf3dfcfcb6777e73d7a25571f1b1b05aac544d9961305861b33b49b40510e68a201189219588a0564821a7ab94d4a648d83b830cb3f47a80f3b56e622b2e329491d6ccae34b337eaf6f94972fbe0a08f97be7310a49cc2878cc653d164a9288c748dbaf067bb0e171e786fcbe91f0de08e07fffcbb3bef5cf4f684ec2cf6ef60304092c10387cd0ab399e2df6483cde182c31322c3b860f641d197a19959ed5dc0dc5e20608e9ed0eb0526a89864d8b74698e719afc88818b414aa4a051107319c442a65f7881ca4a776ec3c74f64a455551f1fb9b023f1ac0ecbbd624cd9d37ab8a3e2a2a56fa8abede9732255f20e0a750f1118bb8c0d4070c38afd7cb5656a160901574fd877fac66e2f159c921148ac83011e50e217d881cc422f6caa704c880e170b8fdf4c5325bd5959ac0c79fec2dd8ffd7f5831e330d7a4af9d0736f7eb878c9a2dfc8148aebb22ba7ff3f6b2013eb119afe30bd8c7986396e6513d9f563f6093c1e97cb1ec9f61f06b2c2af6fb0fe09ea672fc65336f2f6e1e21307b73c71cfadf89e3628805f3ff2fc03b7fd6ae1f6842149d7cdff37c77adf9404030f246e743c11b9e18d81e33176f803bdd22244217bf97265cfd9d3e7967dfede862f7f12809977ae499f3879e2a5dcdc291a21c90536c39275ccaef1ff460b04c3181a2b6319a9a6b113174b6b966d5fb7e2931feaf7bd07ddf73ef78fecccf4c4e2e939e362e3b4529888886b9b0c9010e70f9cd61f7bdacff9ced7fefa81d14013c6a5204a21849deae31a9df14ae535c39aa79664ff340f306dd39e8abb73c7c4ff356d68b484598c95546c343575412ee6e1faa88ddc3046be1b4cbdb67e739f797780f285d96840635d75402c97866f5fba5414ad96b2b9e5726dfb995a9dbe70e36fa78730481b14c0baf7cf4ece1d37f46c728246c01c93e85aba23efbff5ba59131d2f1c969ea1902be4447f32b636e0f61dcc7dc764ce75eb998ded30a9623f3cc45e4e971b4683dedf5457ded95a5bda6e37753afc3e7ff08e55ebc6dfb674590ac23e182c2e67597d4fe6965585ed370de0c9ff3ab9707c7af44115092aa72f848fde79fd8bd2a33bce882432bb54152d90cad51ab952132555a8a294dad804a92a2a5a2010490542919439b90c53f3fb3d9e6020e00df8bd36a7d5a077d92c169fd7ed75d92d0eb7c366f2baac06bfc7652286f272a94b30e0f3472767a42d59fdfc8b6aa554ad37bb8e9b9dfe796fac9e7df31e58f3e6b128a598f71ec986bcb6d6e6d37bde7afa392a624d44831eb22d188984b8cc862c51a780cb1348b87cbe98f85144312d64b621c1eca647c2011adf430f39c93a273d1b240a2536e5315b95f49d1ba2bfc2f866117143a160242e6dfcd8f173964f92a8e20e6c5b3dabf5fbd6c0bf006321a237b39e40d00000000049454e44ae426082') +DISCONNECT +/*C150*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C151*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(15,'Jekyll-And-Hyde','2016-12-18 21:12:00.020000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000017c74944415478dab55907785475f63dd37bcb249949ef15124208218100021130b4a52d228a88625b15ec0dc52ee8aa88ebda58b1232a2045698241c01002a9242484f43249663299994caffffb26a87f7775d77577dff7bd8ff066defbddf3bbf79e7bce1bd6860d77e0f71e5c2e077abd39dd6e7716b3d9acbf30d794ea50bcf6fc6bd0aa05f0f90330397c9c3b27a97d623e1b3d662faa7a1d5890a980c1ee4520100097cd86c7ef078bee65b158f0fa40f70181df1803ebc9a7d6fe6e005e8f17147cc0e3f1b10800fddf87a451897877e36be8ee19449c5682ea1e1b1e9911b65526e0ec6f31b8bf3cd1661dbf2a4fad1e74f80e0628701e8703f77f02e0be75ab7e57f06eb70751719a63a347c54d3b7aac8e2514f21019a986d9e1c3872fbf8e01bd051e2e57fdc4acf0669dc9a7f2f8dd089588909718828a56230c56579390cb4e747a033cca440d97cdba82cbe1983cbec0bf07e0817b57ff2e0036bb0b45135303f34af2f0fab6525d64a824b2a7cf0a1f871704d0a8b3e091c2b0331c3e7bbc970b284442a8245c0c53e938699bf55627a25512a8257c5869337466070c16b74f22e0dd4100defccd001ebcffc6df09c08d82b1b1817973c662c0e4c4f6cfca9f72b8fcaf7ad95ce36bcfbc0a0d7d27b520f448868a5facf5b2c1a7e03914159bcb86d9e6a67e708047f51fa51241406514ab16436f71e05c9719420e7b268bcd3ac2fa2d006ebb69d9ef02e0747b911cab0c94cc1c8de8380d5c012efa2803e6611b8cc31c9c2eef183a60d9a62a38e5459242082b0ff0804dc03d100b3830bbbc542701e427a8c0e700479b8cc88b51205923c4ce2a3dd8fe008fc36679ff25803b6ebde67701600eabd5b16e7c96f69589054908d18642ae9441191e4e9f24e1fe976f415bf779840f4be16d1e829b769fd56341689c0ce62117ecd4f05c3e1772310713939560116335f4da09988f00b13168f59c77f991f5afb2c07afce1dbfe65a07eda0736ed92ae5fffb3eb5e6a3816fc9f158d8d5a9a991981506d18923273f1e0ab8fe3acb71a4b96cf47ed4b67204957a17f670bbc0e0f585d4310c785c0476c631d1a86971e1c2e61c1420833c24538d33644f4cc875a2a840f81125ae6c03f05f09bb69acb440bbcfaf47a0c398d418ae8ed1b01e32710d4d0efe58d525f3fa3602c8ed59dc16eff31dc7edd12e89a0d309cd621e28a68f87456f4d51ba13fd58b9b6f9e0a81838be75ed88fb68e3e84842b91111186199346a1a9b917352d9db0b99d10b2796db458e27f0c40aae5c1dae741cc7c1ebaf67a82d7dedaf2048118804ea787804f3b68f33d98a20a7bf0306b8f6aee0d93911a1b851eda6d1535a96bc00147b705de413bc278524473058816cad1d9390ce79003a3132328101fd4422e023e0ededc5789fda7ab20978abea4a516fed700642fd3a07647ff8f19618e2d9495968e6eb0d87c0c18f418caae0c5c77f31c5496b6a1b7d740c3cd8f6945e9f0e96d60e9dd9053b347086508138a11c515421da6a4e77160ed3561d86c879a1afed5cf2bb0ebd4796895e23728dbb7ff6f006004042717b867c1680c591db077f3a09aa00ce4ff31177281105921f1b864d5a1576702cfe581e782113c7aced8240d464584c2d165c1bb9f1c23761260dd6d0b60d0192165b1f1d657b5f8ec6825dc6cd67aa3cdfeecff14405891048f5e9f8f0b6706b4fd1aefce15eb4a26da9c0e7cf079392213c23177f658240a6897e14777431784d4079d4d1654d71911ae90233a448a93e54d5835231dd38a7360ed36a0b4a2138fbd7b040e3f67cbf69b16add55b6dff6500ffef1873b506359ff6e386bfe4060a168ec3a4c84cbcb5fd2bd45fe845bc8b856eab11957c37c6c76542c2f522decac1ee97fa71dbbc6c886dbdb02b64e867c9f1e2db5fe0c48bcb51346f2c2a77d762d2c31f61d71d0ba82c5d610156c0f05f01204be63c9e5d1271973a42ae1651c3f5f759706e57d7aee166dfe2dbdf9c38b0e8961961203edff1f677e8a4a69d7fb60bcb6ac2f1f99babf0f1be8de02787a0618b0dafcc9b8cb859b3700b6f19d6ca5b5178e17db0950a14dcf136aaff3c078f6d3d8e9c9448ac5b9c8f773eae7a452ae5dff31f01608e514bd5df5eb526e78aa4f018285552c8941218068ca83adf8837d69d78af786166f2ddaf2c2a924382b2730da8a9ea86704f351ebda04254c65cecadf92bcaeecc46e94e1b96a5a423614c2a4a4b5e4046fd57f01fda825b6f5d8247b61dc5f37fdd81cd7fbc026b6f9f0ab3c98acf76d63d25970b37fc524c99241e7f1380c90fc4788be76473d2e3524881aac1a12660c4168ffeea370d62d78e63e8683560cd7df3901416836e930e83b4f8f9531d30965d82b2bc15dc1959489b9088fe6a234e7de5c3a74fce467dcd5904c42188c94c43dc9539987ac51348113af0fcc249104409d1df6fc79ebd17426432c1d02fc595a4a409ae8811fe6ae06eab17f234de4dd76f98f84e3c0596342a0a4221f37d3f3325090687911338fbdd059c3c568be2a5e33173423e1cb0c2e4b6423760c6a0de01ad460eaf2b006fcb104639d9b8faf643289e5c88b736cc0797b2099108dfed3f876beedd8aeead2b70f8783b468fd1a2aebe3fd0506f600b85dc1f634ad5a87efc3b96e8982554727f1580d3e4c5ea1d13026368e743b50a44c6850753e62711c626f3c108098bd182deae417cbfbb0a0913a35132b310cf6fd88e819e61c864226885524c5d988db4fc7858072d30ef6b41c9e838ac7bee04feb6fb1c925252e0a159d1d9de82c0910700f215fbf7362284a4f6854b861c87d55ba3e107a020c6ca8c0a47cc236ffcbc0732666b7e15406ba5e1ca270fcc3fac91a821554811a665e8901dfccc4362c6e3f4c044005c24ad4f1cac852a42869e8b168c9f9184824266ba0a517dba1387b69e855c26406e4e34124452921534d088828b27a6a3a6a68ffc81071326a682dc108606ad283dde418391055dbb9e15e337e309e1589cfbe2c37fbf89a3f365abd66f5fb84dc197422c9140a29080d9771f191297cb0da7cd0587cb45d29785833bcf203c2114a60627763f7b1acb9e5c8ecc622bd2c649a044240e6eab46e3e136a8a973dc94d9e905c95876e5184a273bb8272ef2144e7a268722fa626703ac3d7ab0c8a605eeff330e6c7e01474b8fd346d97f0100fb57a2275b77edd6dcbef163323596411b26d0a00105ea259a64332d4c0bb969babac9173b879d38f8e5394c99958dab32b29022be1bcb6ed8857b372cc4cdd72e43f6e463985e9c0d814d09678b17e991e1d08ac4907ab890ca65341003b4194e38ec4eda0c3f6a2bdaf1894e591e484a38919b98b87dc7071f569e3a7dfa97017078ff98049f2780e849d2b58f7fb678b38aa3c0bb2f1d45ded44414146750edf861a59def68d6a3a74d8ff133d371f4f50a8893445874fd64d49f6ec15d85db71b0250091b70fc7cbfa11159d88af3ebc1fc68b3b513846893f4cce4082580a094f01ab83caacae0989b11ac48486c26ab6a2fcfb5694c61723264c8ed870354e9dae6a7bf1b9e77e5195fe6a09ad7ebf20b068d944ea2911b6bd740417eb7b91352e167c110f7d5d460c0d0c63f63579189d9588d5d35fc5036fcdc7c4f1391872eb3157b019af7f63c6cecd6b706cff6778ee836fa0d066a3a3b31f9dad4de0f33c24e254283f7d16df7fb41eb3d3e4d872cf5224442a611ab0e0bd2f2ae12ab9011a299fe404d175eb19ecd87ff4d9d29ab6f5ff002075a6fa1f82bf543e98f14ac5b286d4885888a522549eb984c39f574320e64213a120f725c3a871f1181b138fc30d4dd870cd07b8efe512145d31163252a58f5fff2a0e7f10893937cec681bf3dcf542344742ac856f28985395c72650111f4a601d46eb9065993b3616eec8527e0819754e9bdbb9a91b4ec3a8472bc64747828f4355055f830ebb14f4a6e5975f581db6fbd15a6a1a15fcf40e6e2b0add7de37f5c6bcbc1404a8478649b3eb7b87a85e859087c82022aa93f2c884c38e8f5ffe0635f75660ca27d3b178710135210f2c9e13778d7e0b0df526d299808c294b86b930f2ba8401a4e1039f6e5c840993f26068eea16b7e08c9671f3fd18a9774622c5d3c07837dfdf0f20508afff1a2d2e31a6ac588bfbd7de2edbf8cc33d62193690400ebefc64080e86dcea6f4dec9134647e44fcd80c3e1a22fb1c127230e56001e6a5c0e87073557890fce95a32f6f271474df857b52b1f8fa428cc98c23696d8740eac38e478fa3e6eb1e78ac4ef0045c64e686620251e9f4cc24c83c7c88c846f2683db7d74b1962a1b2ac05779fd463da9205c84988466b771f02b6618c1aaec4295f1a565c772d3c0ebbe77c7d3d9fc7e38d0060bceecfc887b66ac1a68cc0b4e9e3909517072701f0fb7ffadce3f3402b0fa759cbc28b6b36a370eb0054344abecc904370d3685c991e039950141c769a44f2be14bc8758aaebab6ee8cf0e125ffad0df3b8c388d12b7fd611cb86e36b89496a6fa7e2cdf7d1e3953a7606cbc166a8d063d462b92aced686bae47e282b52829ca43edf97a54d5d4b044c21105c19284f17f06c046ae69e53bf981dcec648cc94f82dde1f81100f32e93cd662352acc137ed75a87bac14f30644b0eb1a51db0becd54a20ce922321350411494a681355103a04e038696ef45a3178ce00b62d8030b91833b213298b020888963d462fb21efd047193a760f9aca9643302080f0dc7908db27dfa13123d0598bc6025b292e371b6b2128d4d4dd349d27c1b0410952dff19809e5a8bf4d16f4b86d9160e26ceca448085600331c1fb293da1720d29201fb6edd9075943269e58f132eaef09454fa70f1f560327a9d047c43b07a38ae518bf3219f1bc10704d3e88bd2c286870c5f164048c05259b8b48be186feeadc223872a71eb1db721232d155d5d5df091cd8c578620bcfb38fa638ab170d112a8e412cac079d4d4d63e241289368d9410ffa73ef6534d2ae38553deb970e3f123efd7217f6a0a12d3b5181e7604fb40295550ad0ad039a8c3db5bf7a0c85e88f577bf8d7d9b564235d48ce6f6361c3f3f8c36aa1453541c0c2d56b0a3dcc85d1d8644990c2a9b10213e1eb4029225b4fb5144d1839d4e2c7fef1b44e64f40616e0eb45a0d01e884501111d07a0703b5473f632fd9f0018a278d878baaa1f9d2259c2a2fdf22118b836fa55902f94f5decb278b1e2cdbcb63fdd3227fec0de4ad86c6e5c75752e19f300a47c3905cfc590d78cea9a36ec2aadc2a48fdbf1c8a6f750d1de0e4be9fbb0f4b563908cf9a566ca5a660a22b24661e7e7273140f7a54de4238ea4d4a8501522d804c4c383c827c5e6a3e751ef70e3ea95ab40d4426421802fe0474ce2688face96b5e37c2b0f2ae47901cad859526711bad75b6a2e223b1587cdd080b71463210f005103b55f6f486cf97ac4f098b858598a4baa20dc9e91aa446c40769ee62771b1adbfb71d16645d79a2318630672ff9007b3280a83dfee21ad2482d9e780b31d3092685bf6c08db07475e3ed6f2ec1af48848eeef7f98dd04a04908544a2a6cf8c3931549ed230a84615a2ebd24528a4120424b2408a5c14709d3fc0565eb9162b16cd853a3424c8fd5d9d9da8a8aa3a241689665fa6d1cb00488fac78639c7bd1f2229e4820a4da0ac0a81f467ff750705c30bf05b4751871e1502b583bdb9047f4a71c0d30efb72c0444a3e2832be4c0237293d5f4a1a50fb8fade9548d19254a8be0061c17288b93c74eb7aa1080983874fa3ad762fa2853e9c7247202c2212ed2d1721a4eb4e8e2890e6edf2db4c064edeb58f625ef1648a8085619b0dbd3d3da8acaaaa2000f941007c191b6e9b1f022dab60f3e9156591522db5282393edd0750ee1624d0f5a2fe828434406e322e1ecb5a1e5b91a24133331ed6f0c2331393d16f6d1326888c3b32f99d1cd73c1d60654ba80351b56215bec47574411165eb76684a789bbeb2bcfc1bce7591cebf7a12f640cd4a4f93bbb3ae021a56ba13e59156d0d541879ac657f7a0c63d29368034938badde8d5e970e2e4c98b128924edc741c60cafc57fc90acc2b2900350791981f7a9d05867e333a5bf4884d2423911c1a3428028d10030e3b2e94768043bda1c98a84225288e13e1b79e13658ff7c06c23672645a16f4d5f439f9d6671e5e8aea5613b2573d81c2ec3498ec7e6c7df24ea4792ee29833167e593806751d645a14d05b5c4857b1c1ebac847bec523c74db2d549a5238ed8e20887ebd1e65a74feba907c2830042d3c53074d8631eda37ab333d3a165c9ab80cef3b9c2e424caa345e8170653881626005c00912243768296d70113338e1323b49ec75a3ee5c17a4a94ac848720c09dd287ffa24cc07ad787afd4a644a7c6890e5e1863fadc3d1ef4ea36ff7b39091a4dedae445627c023a3b5a20a006363b3c48379c8138653cb24a5661d1ec19244f5870938162139577f7f6a2fccc191701084e3256f6dc48b456196edcb07ffe56191505b11b78621e795f3e047c2e593b1505cc636c0cfc97e593c7e782bedf848e8b7de4a06ce0f2d9080995213c5285e8d8305a9083f6011dde7c6a1fea5eef0adeb5ebe51b6118f6413ae749588f6c81bf761fde3b6f47af380e112a31783c2e5c346fbc4410d9897148cc29c0fc59b39090100b9fcf4f06ca159c458346232a2a48be8b44ac1fc55cc69cb0e7566f98fa30df2f0487c721c9cc058f82e27369ccd3c8e6d3c3b93c76d0e6b9c846ea7526f4b41b4852db60a7d4f208e8d809c9c81c9318cc53635d3bcabe6d44978ed2bdf112181b726d7e16a61526a36dd885dcd404c4661541337a0a7a7a3b70a6ac1c72b93cb859d1312445688089694da94448591106a73f8b8267b230383888f2bf07307763dac0a47199613c1ec90a1a6c223e3f584a2c0e9b7ace4f069e91c1dce0af8836323326839518ca0acb901d0eab276833d3c7c4227b6212a5998b1387aad054d90d798e0c4d1fb5e2017636543102188d36f4755e8260f13d587dd79d3fce9f968606a8d56ada285ed06b33bf785280c19df7d1ff19e1e6a1fa6794ec1051e9cf32204de0e42cde30b62a5aaca5da0940152221b5c9019b716a4ce4be119c5c213b0880c420ac263b51a71326bd85b4123d985c1ad3e4e3c969454484c26826266aeac789da46345675e1c8e80550c78a69f7ecb077eaf1e9a11ae4bcf8396616e4c04ba571a9b111515151207940fd479d4627978276381cc1357f509e1e52ad4c09959595817ae0720604d02c7e29b32f5d1d071d9989d0480571b2826e247622001eaa4bc243e54474457f38e9a10e8b1b6632e1160bb5b195d42a7d396b5c22c615a591122596320ca18e4cd09ea367b1c01d87c7e64c83874b828ec07ac9fb56ec3d8efad812acddb8112cdad9e6e66644474440480098a099e387a0990c3060fc0c8d322c64308c94d00f00e4f13c7024ec552b9fcddf1630f083f5cda64035d1241de4a2a0e7671847487a9ef985d165f30617b152e9b8496a30c69e69aebc29e91833210906b284a70ed6e25459338c1d26542e5d0d45ba1276cb303d974b7acb8bd6b2461c6ab062c58787a0950ad0585f8fc8f07010b7c34bbbcc5400f34ca671f954ce4c0f302564a375db5b5b71f2fbef19baffa9079823618ebc2a77766c8e5a2103dbc782902b8298688df9063d0b5ca6a1a9c17d34a1ed162786a80fdc2493bd3478642421662eca4794468d0b0ded38f5751d8eb55e4486498e5d8b9681a764c14ecdcf66640b3dabafb605bb4f7663c9df0e057d410765c0478b242627c346351eb89c010600739dd97db3d58a612acdceee6ed4d6d53d487ee08520000e352d094d789dc19f96674b13786b93f343a7c7a42bf89a3805a4141c8f1c181566f0154e5fb319017220324ab79bc49f9b266b0499f1594b0bc1e173d05cd981bd6567d171b6175f64ce431a4d6f179920860c4878c1e7f6a0f35c234e5e74e38fef1d8682d6efe968878e24425a7a3acc1464b07428137602c0fc1ac8648589aebfaf0fdf9f3973acafbf7f0693955f02f0c3514867119d132509bca2d02861a8308487de3a0b86dbbc56bace9dbb2955181b150ab69352cc2193a29107dfb09dbdd446ca74109b438a903f3f190e1e35a4481074c33e3b056575a0adf41c0c515330ebf14d23329e022d2d2d25ce4f20806eb82860463630e2cd4afa6788a8f3486969f3c7dbb7df4aa575ecc54d9bd04380ff1900e6607476089d5174a6305546a7844ef1657f2e8f9fae9c139b2b8fe312dd1a7b6ce8a9331bf475ee36919fe398961415f560c9d8a4d4b8300855bc20a3313fb3fa4c6e7cb4ef143c73d7e0be87ee038b02adababc39e7dfb18aeef2b2b2faf69efec6c37994c5d037a7d3db15215add5c1043461fcf86003ff5600bf04487cf95ff665108cb208c5c85b1386706d97aff131f202429d131e7a754182669a83ccb4d9e13675188607aaf4fa4f998d0f0f0bbd8ac7e5f94d164bb5cd667beb8785562c5f8e969616e88971e83af49401a6a47e09c0ff0194b7d0db969495eb0000000049454e44ae426082') +DISCONNECT +/*C152*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C153*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(16,'Joker','2016-12-18 21:12:00.021000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000016cf4944415478dacd5907781ce5997e67b6f7a65dad565af5de2c4bb22cf782b10dd83138260e604c003b401208f5128ebb3cdc1d971c2d392e81406248e2504d3071011b1c5baeb265cbaa96d57b596955b6f79dddfb661d08e172177247b88c9f7966bcfbef3fdffb95f77bbf11138fc7f1791d8f1467b28c44b952a656de29534ab3d918ea954cf85fbef17ebdf3737bc8a70ee6f302f0708e66b1394df383923ccdf28c7415140a313cfe08ba07bdfd61fbe4f69b0e4ed5ffcd02f8ae55b0c29a26dcb7aa4ca0c9b4b0904be943964eda7ac60d3474c7db5c13812d37d7c77affe6007cd3c41665a4b027ae29e18ca9062046db85b92b578601440464cccde0d208f3c6f613dccd7f7300eecb921c5f9ccdaeb068594c86d5e06426c8f52688154ab00216f1b01f7e871db6b149977f7ab6fc91b6e0c8ff1b809d37958b198629665836e09bf4f6b89a26ee2832cb7665184460e54a58b22cc8cf4b82d924874c26044bde8f4463989e0da1abcf8ee1dec9d7d431efce9b0e8e04be7000647c418ac9f0625e76dae22817e59a1a7a4fb61e195b9ca717ab6a72635855a341a6550231e57f20c4c0ee1262cecb828280640d0795348a81f1002eb77bfef12b7bc79ef84201ecb8a95c9863351f59b16cc14a5626c394cd8137769d867f7c3ab4c13229585fc908d3a9788974d03e938ab9b085d2474e1110247e1f8b47c1701e248947e0774d876c23dc8e1b8f045ffdc2007ce3d6f99ae535e5c3358bab3423332e349f1f827b621a86deb3b155a619b6c04a5e8f11db388bc1a94b906e96412888278a98dfdee509d2bd0853331e88dccdf04f8f37461cf1da2df571ee8b89c0ad15b2eaa29c9e8dd7ae4c7313c544e8b913c71b103af4361695d0269426e79c8530e454039c1f236333a8aecc825c264efcfed0f1cb989c7261fd8a52cccc8531d57f1e12c7d897b79e8ceffd4200f0c77ddbaa6e292fcffb51497eb6d13deb41d7eb6f63a1c68e94246034a487cbb01ca72e74d28e026c5a5f8ebc740d62d40c844c1c9373213475dab0ff580bbeb6610182de105adb7a86352af3d71ffca0fec3bf3a80478ad24d02956285c2a27c3059a3ae0d783928e63a5162749291c0a4a410d6e27978f7583316d516232cd2a0225d0693328eb31d330813108d520e97d38954b51061e2a096ae31a4e8e29cc3ee7fc93fe7faf9378ef6b5fc55007ca7c0788d3155f5b3ca225d5a364904b54e8aae612ffa2ef4c0288dc01e62a1ceab4555790a4efbd2907ad516c8945ac4bbeb90e16dc1ef24eb505a5188ce736791e3b880127d10639341b45deac3f2dc3144237134768542f6f1c0433b8fce3effb901f88e9965a57af14bf37384db2b0b84e2e424012452165c9cc151f255678f001ab910d39c08554bab515c9884ee9c5b11d1a6e352e35994151721c57604d385b7a0afa311d9f39652a1ec46adb023212f9a5b4650293e8a346d147e3fed6763c931f17d615764fbed17e3eeff1380879359ad42cd3cbfb4307e7345461c5ae51559c09f7314fe779a759870192113013ea1081bbf341f85797ab49a36a361c48f23effc1a777cfbef91ef3d8b1edd2aec79e9196cb9eb11e43bea501a6981d3c7a0a5751ca9b30791a78b9053886a291707e6046819c209bf3bf6d57b9a6393ff6b000f650a9f5b5e10bfafdc1abf22cc3e7174cd8970a8c30267d000912886d2794958bb3a1b56b31467c22568932ca1d4e2a0f674a380bb842e49353cf274f803216c8cef870a7e78fd5174764ec1d77610855a1f093fc1c7fb8f7b58b40de180dfc57de5a1cb5cf02f06708749744f59bae0f99a2c865148af789d3f58baf14619348e89f0614f060ab3755856a34779b111e6140dc2310e5e4e88664f3a723471e4683de0022e30b1289c826474cf0a91271e874e2986904a7f62c285ce8e61f847bba18bd92016fe01c4a083c5909d7bf2b166ef77ff2200376a25e2249da8714186b8cca816204af91ea6d0727492a4813b189b3ed82355e6a467cbb65e6d466eb61e11ea01a7db4770be6b123e5f003ae2fec28c545cb5b800c906310281001a5a06f15e7d2fec9e280137a1223719153946b09c003d7d3318bd7c09b2b00322c1156f45a8bdf53bb851af3b3cefc92ea7e3330358ab556e28322b0f6418e4f093f1de70cc4bb2a751cac61bd838d7583feeef66d5a9271edb52a4cb4857436750e1857de7f04e5d3bca72ad8845428853a4628438d3a0411aed33178aa1b97b0402f2b046a5208730987678b1b4dc8abbbeb4008e393f093d075a1a7b2108872020f1c48f128e10873187ef9f5ee99f78fc330158acd2322291706fb621e97aa148ec8971e147654ce83dad881b7ea27d24b12855a39affe40d8b1aaa8b8c2285460a895c8cf33d36eca9bb84f1690ff2f273208c053137390a6bd56a700468f8fcef306fe5b5b08f0e016219dce303b4d68d6b979562e7b5d570387c703b03a86f9ec4f9d6592884920480683c86a980d7e57279ab0ecf8cf6ff590025b224a542a2e8d52b8d6626167fecd0c4c5ef7f7af155f9d6bf7be2fa054fea8d72325e44f68861306931ea11e0ab0fbf8c94ca9548b72643c832285d751d490c160defee46f955d7a3b3fe183adb3bb1be5008ad2c86748ace4212511e7700613f011d75e3cde393dcc4b458a01089a9e604087221d8ddd34f9e7576266ae1ee5be6ad52c86585512ee60b0443877ff67aabfd6300b9f264493ca674aac4869616f7f9457f0aedb6aa825f3eb8beec36855a0c1119cf474044ba3fc962c56b87bbf0e853bba196ca2157eb20339821d526511173b0f7b4c2e7a2b93e16c1bedd8fa1384d84599b1d4192afe140049140188ed9007e7d6ae0c3f75a826d06b9f17621233108218137e4405abe60e7f20d7a535a92ee89bc6c2be3f3fa70e67cfbe5c1f1a94d1f03d8b1b562eb682ffb0b8542d4ae4f093db86b4fcb993f0a15c3b0db2af37f7dffd52537cb54a23f0090882051caa04a4ec3533f3e84d77e73941e7be5f824bf85e8dcbe752deedfb90a81591b22fe3042210240d748300c17e9a55f9cea7ee7a57397b7e4c8e6650858790dc3088b02a1e8429d015537dd999f5c5d93867915c550d3339bce3562df07f5bf4c00786047cd2335f38b9f2a2eca4528e047735bf76c6be7c0861776379ffb24889519a61ffceb0d0bbfabd64a09c095141249098c4408b94689b83409afedaec3a903a711f20678d010d2c3f8ef8a1614e2aefb3682f5cfd24ce046241c25cf4729023c800866a70378ee58c78b7b3b06eef974e41f7ff8d66f562f30ff44ad56a1acb2145aa9103dcd6df8cdc1e38799afdf542eaf2acbefdd74fdd516535626a9611ffadb2fe3edfd479bdffdf052cdc5767b94df242f2fbf6c517eced35f3244d6655a54a477c47f00211612102151261913954020d16166c84ec29498c7ac87d16a40c4eb208367c1d37d2418bd0220c8a74f24a14edb061ddc3f1c6ada3ee672bffe6900dfffde3a8b382e6adfb076a93e3d230d419f0fe71a9af1c1c98b4f32776fab502fa92c19d9b0698d46939a8a184560a2a70f2fbfb67ff8f1e74e645694cf5bb165f30d0fad5ab67c392592e6ecab3f4589600e29d4bcc404204eff644a298d92d4a028125e2aca99f110549a2428e47284432138666620944560c9d412c512807004d1d01500212ae0f171277a95b9f1504af6e553274ffcfbc14387767d1ac4ddb7542ccab6a6fc479a25a9d2ef0f86ba06c69e71797c3f64eedc5a46e3a0f1c0fad5b5eb73f2b268e3205a5b2e716fbedff22bb1a27c62eb96cd0f14e4e52ad42a153c84fc585d1d9cc77f8b3c7910c9c99a44a3226a8799671f3e1262013c448d13dd33642097e8e4724ab9d44263a217b848c951de12553208f8c2b013fdf686d428b9f10ea467a463687818afedd9f3f4de7dfb9e713a9df64f82d8f1d53205a56505a5fddcae3789d23ea2519a79ad469dfac745d9a96b1d2e77b07b3470b674fe0d79cb6a17e7a55b5349f390a7691d6facc7ebc55102317be6431449bc4835ab11e668e695ca9092694914354b34ca5057e5a87df30004944a7c73f3bafd981d9d809c8006a8784726dc18886b51b2793b6a1754234e8ace474e9a9e9dc5a123bf3bf5e40f9fdde8f57a5d9fa991ddb3ad82e91b9acb1d1c0f2976dcfeade7d7adb96ab15422815eab4d18e0f678125799548a1987030d172ea0aff11c92dca3c851f19f0ba1266e37594d50e935897742b47d828ba89bc333e7826d7012512a5c8727841e1f0ba72615f397ae4245793904049a8fb28cd22e1a8dc2669bc481c3872ffcdbb3cfdc383b3737fc99a4047fdcb8f9c6ef3ffad0038f5accc924716357e890d638c86821458217755a8d06b3345d5db8dc85eeb626a0fb0c32d552b094e01a850096142d5444ad3c863045c1edf2638a52c51388939488618ca32e5ebe1a8539d9a8ad284f44d8e97221c56ca6df9094204785a87626a7ecf8d10b2fecfad9cbbb767e26007abd21e3f9679f6d2c2b294ed2eb74091ae441f09b711c8718ade51fa0a5a8f0409adadbe18ac430dd7112c9ee760228c3b42b002f51a888d6d2380cfeb5438c90a8a8d08d5a399c14495fca42980a17c1a490219bf2de4b69c34757afd7134b093e96c03e9f17edbdfdf1d79f79fa87a9f631e69d11db731d738e913f09806559e183f77dfbd51db76ddf2aa4218517657c1755291409cf7f0486a3f0f2e9c403e28175f60fc21ba42967b20396c8102c3a19795440744a351321b6a1f4e1733b40e2cc4e1188a5544099319f7a81331101ad5a9d481bb1589c700a476b7910524a55995c89e6e375687ae59fe1d00b712214e8ebee9b3d3474d1f62ad971916ce73e06909a6229f9c58b3f6f4935e8849d273e848c9463f5359ba0d31bc9d8480210bf9637dc66b3251ec41b669b9cc4d0840d0292108ee10e4883769213025a17254146c52b1023c4912c6724901a33614ecb44c043e9a2d7c19c9c0c03795d4520f8e28dd1de7cfe47e9aad7ead031d283fd6ffc14d3974fc04d43533c4586b897c3e819fb78fbfb03ffe077075fff1840d5fcaa3bb7de71fdae8b0327211a1ec332a2bc79d77f0b3695115a810c2585c59053c8f92878dc6ef888917856e23d474c81defe0178426190a4854c224580a222a12b6f1cff0c3e827eb78b1a970f85b9b924faac89cf34544ffcf7893d693896cb6444080a9cbe5c8f5d8d3f8248034c5d0ed15e311446bc70d138344869ececf239ba4f8cdf9600a0d12b6b6b6e2afea5a6545ae0a30613b405a0ee74429b6282379f3aab5f844af972acaf5d4fd39709fcdcc17b2c180e434306ca29cd78efcd51a1f314e8f178a97823090ee20b924f09090155d23a03d5964aa94c44504c2cc7e73e2f9af8884d4d4d43429114471d78e5f88b68125d2266a2c8da6208eeebc1f74c9330e919ec756bf02e6bc4709bfbb70cd19d64f1b6d243d6c5fa55e25e3bac0e37fa830c2e39a5c85c9c84a44c9aaa8254c434c8dfb6703372f3f31252214cc38746a3455292211176de11544709207c64044261e2bd222f27f8dce6bffba840f9285e097c1cd14898c030d4f4dce8bd5407a52e0dac6f007d8e0ebce9ec86522b48bc207335cce1babe6eac48a66711393ee5b5e0fd01ee032639d7b46ce1ce92933a9a4fb77906509d0c9c754af0135d090cb51a621d6a2e6e0ee9432a5c9b9f0da9c60056bf18191979448f3394223a02a24b10478ce65f8615260c4e18892b84c2322c3d948a99aecc47f7f43d2310a1bfed10a5a00381a81417eadec45557d34c912c869b24c6f7ce1c83d0ca412464e127a786f60fe31ac70c729244a873cb222f74f9ef65741986caea12fdf98dae61c1ea6c7a1a17c76f45c96859980da5ea4ae13a7b2358cba642c9c450b9a816e3536e48e9e12a92d5530133ac691989578a993925a4fb6d707b8394c7124ccfd8a150254149b25b2ad720e81a22e93083382bc748f70918520ad0d37294d2288af9e579387ba611765714b7dfb2167241186f5ce8405dac8ff29f64872b88a90e3f729a5c58484c37e40ed53f7f697c2543bf96afcb529fdd921c2bb7d2103e4648f7a419a1289143a196101d029236019669f508c5e2d8b8692d3cd303e8ec1c41514515fa06ede0c27e24259be0e6521076f743ab146180d4a8542ea33aaa807fa6032959f3d0dbd100839aa21317a1f9622316d4544014f3e3f4853e6cbd713dece323f8f0780bd6ae5b8579f9068c4e4ce399b67a38e24e841c2192221cc46d0ce6f969b68e472e74cdcd2d4a14f14a93e6e5d5e9ba3b8ca4edcf091974f02fb3f402289288753c422c8da4402da0904b5558bbaa12fd9d9d181c7761ed35ab71b9a901633321ac5d538337f7bc072fa5c2ed5f5e88dd6f1d81d6988acc64392e750ea36c7e398e1e3b8352920deb97e4e28ddf1c8131351b4b2a73f0cebb87915f5681a24c3dde3f7402128d099bd6d722ec9ac2cfcfb6e0d87827c47c42528204074548ea49a2b135d615e7a2f31300562559deccd619b6aa68e86eb750cbb7f813732d251f352703ae23ca1b9b9a415a4626aa0a5370e16207428c0ccb1795e242c345f863122c5f5884bd078e232e5663f39a32ecd94729624ec3ea2a2bf61cac47417111a5d71cda8828eef9da75686f6a4273cf1436ae5f8ec1ae0e0cd8fdb86eed12f475b4a193a2ba74490dd2b4a452c666f0e373e7e1177a880458046759784fa9a086e6b946e7a9fb1300e66b32de32cb2d5f6189ea66e64d50918612d416760bb15c6345699a0e833627962eaa06139ac399a63e580854798e9166d34b90698ca82eb2e0c0910692ce46ac59908d7d47cec1909c8a25a516ba3f8fb4cc2cead222ec3fd68a8deb96410e0f8e9eed446969319229ad8e9dbd4ce36219929540637b1fcca9e928b0521308f971a073101f4cf4502df063b5102375dc44d8ce6c9d890e9d4e00c891657e572e32ff40606021a9b5819570241918987d1aaccf4e879b9a922ed98af90516f27e0bba471c58b36221589ab0ceb40e20cd9a81d20c0d3e38d3066d520a6a8b4c387caa15069305d5f949f8e0741b8c148df24c0d0ed33dbfbe8c869b86d65ea8f5c9284aa7fbe62e28742694521a0d93e426ba43a65983a3478f5e980bc59dcd22ee6a8686a2589098ebdcdc4b3343b3f792ed9104801451a69189c9af156605cb526b850fb1621af35c0c0c13c1f3d755e715ce0404eadaaa52842827ebdb876149cf42358119e8ef436bff3469f979d0b03e9c691b428ac58a5c9308279bfac9680b8a52e53871b1175a831915591af40cd98815c838830423363ba22215f22c5a8c8c8e21c82a9193a28ef7f4768f67e714a6f17fa6bafdd15d2b68e26c3016a63c4a4a2acb31e13de69df51fa614b193edf1ff22a7cd3949dfd6a6c9377ae6a221f1a4edb11d1bcb7e4a0c523b3e3ed63a30381c90a98db5ab175722eeb66164d68700a3c0a2b21c78e7c6d03de1456e761618df242e8d3861b5a6434bc01abb27a033989045822c1ae7101192ee8f85e0e245a1440d955410eeebe90ea465e568844c3cfcf42befdfbb6e454deea47d2afcc6e18ea7c2512ef1ba9da5ae188b73dc7f2ba73f3a2462691255bc99e450787191665376aa61ed5b75fdfb352a79defddb56dfeb9e9bf67674f5b80b0bf22dc5c525f0d8874855cac028cd90c649adce8e6386d8282f3d0d3324c8fa6743b05868de768e23d96c8082d2a6aba3332e17b18c89a279b4b17f62f7bb272f2e2832a77afc11dfc51ec70152082d64db24490d37f18987cc24d54d33e8ff340f28140a5ebef02fd4a97a60a06ff4340a2a63314ecf0884a9728920abc0aa2beb199d8d08d9387bffd685cbdd8158e0fd134da38fdf7d5dbe5267c4f3bfda6f2bcb32a8d7ac59ada8bfd01eeceebaec5fb4b0461f17c9e34fbdf876db5d3754e72da9ad923ff0ccbbed541e5aabd5a27cfbe448eba8cd3113473c42c6064442c124d93548e60d53279f225b66e8e4a31020107f3e02bf07c2ff8951ce9fb442491fa879dd47e154119d29a9bb4bb3cc328bdd198a90d6f7edb8267f9dcd190abe75acf74c5e9a5ab56169e1c2bd759d9d2e5f60ee5b9b2b3734f73b460f9eea3b3e3f4f9b5a599c91f5765ddf996824186099381be1043e8180e50d8bd0e9a7939f83f9b7d29edfff9fff3b01effd1801f82383ff134122c0d51f0a3e480000000049454e44ae426082') +DISCONNECT +/*C154*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C155*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(17,'Lurker','2016-12-18 21:12:00.021000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000017784944415478dad559099054f599ffbda3bbdfebbb7b66baa77b0ee66060186e5040541415508807782c899b4b1335879af5a8ca26a96cedc6ca92e826654cb226d1c42446f15aa30878c28080c8cdc0cc3030c3dc3d7d9faf5f1fefdaaf3b1bb394ba9a4ab2b5fba6a6a869badffb7fdffff7fd8e7f338661e0af7d5db7456802f4f5a524ffc6f6cfcafd7ff507fcb78bf96b1670ed16c16137f3377678eddff08842fbfebedce39331f9cedd5f2914fe5f14f0e5ee9ac797047db7b86d66b09c056ff74571361dee119cfc4f7f7785f4b3ffd3056c7ccdb166454bc34b2d2ea7856738180c8f9ef12412e9383a9adc184dc86f1d3c99b96ffb17b3c72aef5ffb928957cb58c89b1887d5cc4d3ebfb630f0bf56c0552f99e6093cd7a9e97acfcb57974faddf66352daef71f9ed75037575555985833ccac8813e1280cad88ce80077959c5d1f1c4e163e3898d1e9fb12c68b77ed1c69a960b6613ef102c85fe48ea9594a4bc1319341ed9794f4efd9b16b0f155e1dbad2ef19f05b3a53898c8ffa2a8e1b575333a5e765bcdaca2a950340d226bc7602c0d432d6026151089c9d02d3c4e25a252938bb3bbad2204de522d5607879ea1306880b437de89cedf7177aef72f2ae0135bcc8c89655b7986994e8b6914cd9c8bd6059665121ccb9dd6756dc3e260cdfd01a71d45cd40285bc8b47a7c7633cb708aa6a3a0eab03002c6523958d9323a1b3c48158ae0582bc69239b80505762a461405c030e1743c0d2955c4f426275edc3bf1f5173f93f8de5f54c0552f98cd8d1ecbde3ad17c9e4aed0d784594cb1ccc1c0fbbcda49da5bdeea8a911eaec76b060309595912d96e0b33b912e284866747a55c7a49442d024a0abb51e23b108dc0e07b2b202962f625e6333348d47584ee0ed531398e17623e8b562cf50a4fbd8e1d495fbbe2597fe22087dea79e76373dbadb73a680122cfc34cdbcd3326582d265aa486a49cc30cbf1ff9b28eb1888cfec918e6b5d6d1b28158a68478be808944129d4e0fe6760411cde5c0700c0d730a6d6e1b0db60fba2a62efd9d3c851f7e735d542d335f427d3133d03e98581363e6bb0b03fbf3697fcd805ac7bc9bc9a603cdb50d09f8933eeb91dae87e7066a7c2cc14230f3556629136478c68cd3e104da6a6b50aa40282d6368220b85e0423b049389479a1ad8772c85158bfd08f89c900a3aa6a42cc2b10cd6ce6d86d769452cafe3c8e02416046ae1768b9824788d49a93cc7ab2ff83cc2fcd1583e35daab6ea0a14e7dac026edc2afeb2cb6bfbbcdf66c1b8548a4da60c63797bd0e71579ea4e113a6b419a08a25006c6e27970820eadc822512ca3c497f1f69319e8b4054d2b3814a20626f73258718b95166b46a6ac229b2ba29e15b0a8ab96e689c7a1b130ecba054b66d4239ccf4156b3a8b75a51ef75d28ef3d8d53f2e1f3922addb7d9fd4fdb10ad8b8d5fae8dc5ac7edcd6e3b34d644dd267ca7cb7098cd70da78c43365e4250db178093996a052ca21175321156970c7894b8edae121fa642bbc42836c17ad50e74a50da0b48245518ba81cb57fa60a1dd4c48454442795c30a311bc5583011941b7953ecb83a5c1e669c88f8c4ec9fbde49ada7025eff58057c66bbf35f57b4f9bf2e12de0da2b680cb8333e130b14401350e3bf2f9224143c5c4940cc1cb61644a42df536534ca4e2cd46b30abd10b8f9de851a00550810cdd339929a0371d41385a44b94607ffe91cca160d4a0c58dc41d0a9e1e0148156af071c6722062bd3a24c50691e0e0e8732070e2537ecb95fdef191055cf3b2b9d9c55b7ed0eab55dcf714089605263b751d73424522a861225781d166455fa9b1e920d957076ab860bb2cd581108a0b9d10d8fc70ad16aa60e9bc84a901a139eca650d9254403a9347921a7168228483b609f8ae6330a7c385a08b4383cb018e08c26ea1e7692cd204a73cad6bc7f191a2aa96f7b7b55b23f9925119e68194ac3effbb3589c9730a58b359203d677ed35e27fcbd4a0c13f4da08cb548506b89d3682928ed14811870653c6d40461a3cc72b13e03d3a3b5b86546173a67f9e1ad71c06a13603699c0f11c186a7fa5371a15ac281a0a72816640463494c5bbc726b0cd358839b718583ba79e3e63a5ff5368c77812410609622c5957d13b1cc792360fa6055c104d66e48a0a5eef1b7f73a4bf782dc14a3e670756ffccbe6ad942f155bfddc60a847f337dc04c6cc3f10c6cd499b2cee04c348a679f891867f7b18ce06271235a71fdb22e34b4d4c166b3823371d02bf763feb4c51ccb562b5168880b72115246c2e9be087eddd70bcf5d69acecf22397d520e7345aa00eddc9a240a410cb4a70322c562f6c81997654d1140c2553d8be2bf4fb72deb8b5fbfe3fd0eb7b055cfca05d58b4d8b66fc1b4da8550748834440c6152a6aa05d2029e94552a17b1ed9d71ecdb4256c1e0719b7916ae5cd9450b0742d1384c34ecadad8d1044b1bae8cacfd8c83852b4688fcb8dfa5a0fed888a9181081edb771c93eb26b0ea2207e4bc0a55615052008b55402847439f96b0b6631a5a1b1cd43c9a25398ffdc3e1dc404fee1e8e657eb9f3de9cfebe21bee657ee5b572f6b78cc4734aaeb2568d481ac642047b02a282c326a11478f24d0f706073b0ddafd818558b4a009a35321343437c3ee7480a0481d13aaf7d3943252250b4af90c864ef5c3efaf435b5310a3fdb493c5bd502e9f4427418f23eb6d17446a968afe908453d13c6a180bd62c9a062a8d36d4c059d28f777be2db50603efdc7ee7fa012dff44ced834b3b6aef73d905c4d305c82440f14419124354491ea6e78d2cf247ada8a55df952db7c2c985d07b66111bc0baf21bc70488cf4c215df4da2c740aa5f8dc08cf954401ee9632f814f9d80c03ab14f3984de5987318de83a60ab25a57742650c149502e27206afed0a633a895b539b1b19825d8ce03e3492e9c944ca77effb47f91c4d3857075e112eb7c374076bb2dee077ba894841b459c664a20895d311a95886a755dcdbb114019a8b425941d7e24e782efd2ababa6654a13f959211daf17354a6b8e9f23be07759a0d0234ef49e8176f83138f532f6e48e23bcbc1f9d3e3f7ca28f2857445a9589721390cb05f44da621d2ae3889400613b47bc3099a07ae2f18147f2b9b94eea7d6a6f79f53c0755b05966ccad72e08ba1f6c76bad8580ed83f948449e0902b1b88d3001aa5124efeb60c4bca811faeba0cf95409a1d814666fb8030b3ff15978083aa45330580e475e7b8ee850c3a2b51bc1120db3544c820470e0ada7e08eeec2c9a3711cea3881f337d4c0cd88b093b52ea90c26b30924897223b284682643376330315140a3c58cae2607a64ff3a3c01adade91f16ffd724d7cd37b05acdb2c9a6c16fec90bda6b6e0a12278b661b42e44b8627f2381bc9238e024c74b3e1b780541f87ef5eb6022685435fdf20967fe93b587cc5b5048d8a9aa2cafffbbb775001252cbdfc2a30a405344a44000c4eedda02d3e9cd38d597417f620ad60d327c9d2c1a69b80b448a679289aa3924eea71bd1af6ac0a4f2b8688e0fe96c81dc808bbc961307c787b1f768f8efdeb83df7ec9f586893c3db3cddbcf9a2b9f597593413e718f0a0314c8c62d831620ae1dd601ff68fc4b0ffe725ac9bd686b5edd371e8d8002ebee3012c59752d585a70258d09561bf6efda01b594c7456bae41814489a11f8d17d1bbeb25707d4fe1d440162aedec78368dbdbe41cc5b2fd02e5891c9aa55cdd1a1c04bd6e5ca39adc812f3357bdc0825d284061549fafb685f7c281b531ee8be5f7ae29c19b8f861b1c91fb06c6ef2d997cf7fbd1917709df02ea88748f3108947f0e4e9d7b1e9c501904ae0e696193053575ad6dd8a4b6ebc0da9f00875b61f575c7535f6bef2140a4414977df24e6cfd8fa7c19b2c58baf22a1c79e1dfe04a9fc0c9be7865ebb16d74047d941956df2da0754625009590aec09576cc477e69ddfc69c81314d512994946455f28668c8ee68f6b79e37b0cc36c212acdbf57c0f5dbcd0bea44e19b4ed67cf564b66411ce9831fba40fe73775a1b5ab0364b1d1b3f3383ed7dd8d1cb1e41cb31bb3cc2eb4ce998eb91bff0901a2c8643c06b7af11079efb3e947418f33ff52fc82563242b0ce46c1ca95d3f824330a3a7770aa76349f450989149eed7deedc04d9f0822145170723c8168a9080fbdefe2ae7a48a4e23df49a24abb9d85461af26338f104a5f3d4707d66f152f5c14f0bee6775a6d67c229d43a18b8c8a079b7b760a6b31d35cdb555858d9d9ec2aff71dc5bf9fe9879d7661556d136636dba0051761fe357792800938bee77568bd9bc91418488bede85cf30548f11026de7c1875e4a50c6aef8953616c0b0f13ac6805a42f824fc7bd8f34c327907ba57c416ea20a1786579126753b1dce60a22fff23c1c4fd68e77db9a17368f4ba5744ffa240dd9bf3fdfe3987429314c2cb984169493ac0a2f5e97ab42e6f81dd6f47a9443a407e25124ae2b62d6f6054ca61b158475e3e484a4c1c6ef256955b4f4f921b35577f0bc4ff05526c131563b3924dae04a2928a63a7c338908b54135ae55264038d4b385c71ab8bc44e2063c742a6e7252595d849238a2d20355a5ab7fb6bd2b6f7b9d1db77faef5d12f43f544f9c7b7024424354c4a2e9cd181b9611de94c5794c2dec410f5a16cc82c7e7814a86eccded07f0d55dfbc84e587049b011b53e5b651955eea7a4425092417904268a9f56d1442fb355863268408b94890f5290192a65e8ad941c2a3e81fe6dba44c7e2ebc9c2fb2c14fac56a5eee1d2725cf10bb59682e52eac6eebba467de57c07dfba6ed6f10ec4b2bcf5609abbd1349828b8ef62617a6c6f2e83ada842b5b2f44b0a31ec5481223874fe3f1570ee1a7a727404dc71c9f174138c9899ac19a51e5fccab18a420b13850a4688812a7366fca18064aa8023f12875b508cee0e0aee531f7cb1a565c64432d41c821daab26d24cac75269ec59e333152e212ac123e4f053cf1be02d6fdca711bc7723753937c6633274845cd88864b548beef4d708b6bba2cb6d0b1be6319c95c5be13fbf18e32843ea784f1c112a65f0834b658903a2660fc798208c5b48a3ac7b245ca132a51a3093e8f8d9496dc0c15912fa8448794d028d0b47b5c583f7b3a969ed786f1a61144670ec3e512c02a64a965b6eac338878998276aec3d151933e7f83bbbff21b7e50303cd8a4d0e37e53887c1e87ef250e799acfa27bd0e5307191447e72b35d68b8c696c9aa308f879094df3ad153060349ea2452a6876d949a434f49d2ae0cd7b64a85116149dabf8d64a06193ba68aaca2a6a28e1678fb9a450850a06f6eab27b3a7c255eba49d72a25bd98ddee927d020baaaa296a77b565ced58368fe36743bb4b616c201397f8d044b6fa6933e518ee2794c82e0eb8ec350e9b58b5b54a5c033f6281c963c2cca5ee2a962bdd0dd12c0c4d65b066761b4cc46b83c92876bc3989cc6960fc25b215120bfb020dae391acd0283d1be22beda70113eb7e1329c3d710681d600787a8694ccc0df1a448e1ce8bbe21ef4379e45b16046992cbd4ec2389a29219ccb969488bee0ed7ba4531f58c0552ff3b63a9b6947036f5b329b5c60634d3dc97a9c8c9582460f8574ca023c6b452e9fad623a4106eff868026c81c1dac5edd45d0dbdf1413478cdd544f6eacb69f4be2ae3d2fb38b89c3c7c4e0199248beb46aec5cca60efcfee9d7317b7e0b662ce844df81930810eb8966078673a7b07be65e1c0bcb74cfca502ac8ca3437b912ec9cfe5d879dfda7176ecaaaef2be086edd69b9637fa9e69adf1c045372a532e1d215f52efa89c4ed060d2b0719a88815008345f84cb249209059dcd764a623c39f622a67b1d9485295292852d90ab1b988cc14506cf662656b1b1308dd46279ea4a7869e87f7df05974d9dbb16cfef938b4e730a4c12934f902388b098cdd38853dfd610c87f3d0e9593a319441a4b2665690b20677e0f5839377be76ab74e09c02d63fe7bc7156bde7d1963abbb7426952c547911eccf1d555bb2d136458a2980367273111ca51311c7c3e0afd751405cb1c66d4b8d146142b727654da53d0f218980ac34bc2e6a69c4c8402f1dd3acc4f2d83b3de8d3de16ed4653ce868ed245fd383ed8943f08e9b51ec021a6e1271f46c04765a87453061225aa434a660c5ec266a107024343531744abe74e75d7f10b46a012b1f72d848002f27b25802ab7185c9ca2c9d161070617b13b9d20265e134064773183a5e848f6032fb3c11b31b2a70e1aaf0aab3dbaa87511c4c552a9e9412f4b9147c9c40c2e480c214113d64a0f3cd56d4d32e77db4ea21852b120e2434f671cae9b45649395cca155b5e1f844180b026e12d43aa4480c8f9d4dc261f3548f27937909e198fcc31d5fc8ddf3be40b3ea71ebb476bf755b83c5de95d249750b2564e22a3895438dcd0e46d490284ba07b632179f352857be9f5cac9834db05567462e6a884b12314f192e5680cd6e418e069e2ac5d89632a64ee5316da3bd7a0c736a570a6826c10bea7098ac88e7f2b098789c0ea5707eb30701b2d92a09e408859a3361053952f134dd8be195189fe056eca4a13ea7805b77ba1fb82010f8a69d78b0485e3c9ca68f1b653869112eeac011728f53c4e38ba7b9e07108e4140d34500e96283397684ea45c11a94489b0aba3aed68c3a3315a7810a2b82f40989ac82ee1393680ddad1d66025aa2c93a3b2e1edbe30d9700b1c161e3ccd503a53c4253383643f0494342a209542cf500a79dd2818452dc995d941a6cc7c9b0cddeef70ab8619b9dbba4a975d79cfae085b142863c11c0538743f902d2455a1825a5e1b10c66343831b7cd893c791533cd85c80b14dc8b489348c5524564e97d9251428347c032a2ca2259e118717965a62a67a86391345c0e1dad7e0b04b30924a2e4790c0c11f384651599a282455e0f96cd08204af0a9cc647f348efe1399cd16b024644ce5506ba272aa4f05c87f2ae065bb78696bcb8980c3db9e2c154851494d1585042b8fb19844898bc5dc662feaeb6cf03b458c901de6581b192f0b861331e4e9bd91340d1ccd4c8dd58cd67a1b39d51ae4a8eb45ad72009cc7302d7e71a006b5353cb2f4776b8db7bac0cab1cc642c8f770693181f9769879c0804ec486565d84433cd20b1de98b261f73dd28b1f2a6437bce21667d57afa58836fc952a7c2d97c399a2819a261b6f86c265c30a79106c98c68218f3ad14916972c3261b64cf31126118a125b30396281392e5c765e0bb950156304b7429e704bf33446433d4d74e0cac5cd64f4388c52539adcd62af5661589428b8177c8aed758edf4b78a93d104ac04a9ca494132559c3412b89aacf4d10f2d60cd2f9c2cdd779352c6723262036a49dfefac31afbf7241d3554e629914ed0a710eb1420e6db56e1429e3eeee1da71931104dc97a29ade1ea8b9ad9e6a095e2206504cd84dd674671369d45a9a0a0895e5b32b38176cf862cc5cdc1480eb5847b8fa32290c5ea770a07474244160ec82460870722430545cb50e69fc7a7b94729f77c832093fbd0022ad7a5df7704a96237fd4e74df97cb5ebfd9fdcdb50ba63d60e6ac184da7314519402a96f40b9b1b28c2b324f132095eba3c3c9cedbb7056ddacce80d752c9b4b56e911ca588f1440e4f1deaab2e7ef5e256f23ca48a94b0f2950e4fa4e0a7fc6c25fc681c311de587e3235168a441454e41683cf71c2476134df9a71895798ebaff2e3ee0fa1fbfa55cfb5bc7caa59dfe1d256292e170ae940815de664c88ccea74dd9c9355632a54189653da0b1c8f5dd7af6ad9ec328bf6140dbda7e27188f24234bc7d6371e5e2990153bdc749b6384f434e84502e61684cd217b6f8d9ca372215aaad84f783649d35bd62bfcb99724cff7af7bdd2a3a4510235b4fcc708f96715b0f26187c3e6e7762b055d9013ea564ee7363316236358f547c8ac8589a2b792ff7f15bc913fff7c4f6f9bc7db99cb97a9a33ca259090363a9618f8397977536ccae24ba3ce94485d14e8fa6878a19bde7bc4575eb19f23c062d3a519471722849d2c2e89632bb99518826efcb4de023ae8ffc9e78c543f68b59833691c501ea82562dec41470d75a5440f90fef8be1b9ff57c7f41bbff7e22a3ea708f8e674285a8fa9d409b6dce8c26f75774fa644a2e12a3e54a5258dbc41af8a9b3817bd261115729a427194556f293ea133cc38d92fd7e869e35f8518bff58057cdc6bd58f9d5dcd9dcec339b92424268b07c90efd0c3a7e23fab92f0a76ee27baaacb85ac3656ceea2f3006f3632a3ebcf2878ee96c0df396cea1d9481adb9912eea7c60cd0e2ffb6dfd47fd0b5f2070ec6b0190fe932ea5895798276acbb82dbcb7fe2086aaaf105bd5c39ee618efcd7ebf9f776f811eb676905ebf952f5c461c79ffbdcff041fd9e6462d3fdb840000000049454e44ae426082') +DISCONNECT +/*C156*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C157*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(18,'Moderator','2016-12-18 21:12:00.022000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000105c4944415478dacd5909901ce575febaa7bb677aa6e7dcfb90f65eadae1587246b2521094980c18043023647c5c8719c40c089c0554681c4e572e58094cd95720a13ca3860024648c56d0bc411959140a05be8586925b1da7b77ee99ee999e3ef2fe7f565c8e0deb284bbab66b677ba7ff7edf7bdffbde7b7f0baeeb62aac7922bd675c8b2f74a49567a4451ac711cc704dc83ddb35a5f9ddd3ef3f59bbe71b53ee545ffc043980a809e2bd6ad0d84621b82e1d8125f201490152f44d18358d88f594dd5503c027afb4ef5efda7be0d5647ce2efdefdf52f46fe5f005878c90de470dffa4845cdf7a355f59ae253b9e1ec5ec9e3c1dcf6067c79e95c843515db761dc57fbdb317870f1d3a96cf24fe74e7cb8fbdf385035872f9baefc46a9b1ed42215902485aeb860b7b9aec301cceb68c465cbbb110906f0d6de63d8beef180647c6911c3d9dcc26c62e7b6fcb136f7f610016acfa932fc7ea9a37852a6afc2219fb5b07dd1e0eaa98d5d2009f57c6a981310c8da760d936cc8281e4d8e937f46c7acddead4f4d3dd9ce0680b9cbaf78baa1e3dc6b3cc477fc8eef3a745d9625a29508d32cf1ef09f499ad6d6453d6e9c33b979dd8bb6de7b40320ba44bad75eb73f5c35630684cf5889d629afc4bee8c2b26cd8251227bb8091e37b1e397960c7b7a71d40285a7341cb392bb67ad4a00281e8c34f11824046d2e97ecc708728635b255ad0815712505fa9a1abad010dd511187a1e8ffdece7371f7a7fff43d306201c89ce5fb464e98b414d9be9c0839243864b3261508832e0203c94134c8d24c9836838888a4810d51561cc6ca8414d4d0c5e9f17b95c1ef178024f3df9cc939b9e7ef2fa6903d0d4d276fdf20b963da1481214af0a7f4043400b22140ac1ab28f0a93e04fc01f8e97730a8a1bdb5054d331be10a2e72f93cc627e2189b984022114792006cd9f2fa9e271e7b74053d2f372d00dada3b6fee59daf36f1201f0fafcdc782d1824638350a90e0402742d1020107e685a001d6d2da8ac88a144bccfe4738827124824e964bf2712d8b16367fcb19f3f3aaf5830ce6a71fb9d00da3b67ddbeb4a7e7c71e02e053c9d31a333ec48d56d532008d03507954ba3ada78240a6601996c06f164b20c80bc1f1f9bc0818387cd8d4f6f5c363a3cf0deb400e89cd57557cfd2a5ff2011ef7d4495c024003f79dcff3100ecef8a58149dedadf07a15184503e90c0120ea2408443c1ec7c4e8187a7b4f60f3e6cd570ff49fda342d006675cdf9e1d2653d7feff1c85089ff1a19af1188df06a0a2aeb606adcd33791dc81b79a4d2e9490029c4290fc64646d1ffc1009e7bfef9f527fb8e3d302d00e6752fb867f1e2c5df63115003e4fd509800689cfffe800a8d47a54ca1262a130df535a44e0eb2f9ec24800492148189b1718c0c8f606c74025b5e79e59ef70fecdb302d0096afb8f05f6775b6df4a4d1c195c0650e6bf8f272efbcc22c012b8bdb599d3c8b24b48671980543989e91c2700a343230426853d7b0f3ef6fad65fdd382d00bacf5d74c7c245e7ddad92023109650058f232faf827e9a3d1ef305defec6845903e174a45a43269a45229ce7f066062741ca74ef6e3d0e12303bb76edface40ffc967a70580ea0fd42cfc52cf4fbb66cfbe221aab14c3e130375ef5f92601f8791da8a888621625b022cbd029819364fc19104383c33872e418d58109bcf7d6b69fbcb37befad67d3f8df0be0ccd1dad679ebb2a53d3faa6f6ef3aa8110229130555cfa1d0af228b00466358015b02ce9ff0851666874147d273ec0c17dfbe0b372384f2be1a1675ed9f0e6910fee997600d4320817cf6ffbc94d572ebb59f70530660790b47c1015a296164294b81f09b37e278b6c2605d3c8c16b6711b512a8958ba8916d0c9f1ac7cd8f6fbbba773c795625f473016047732cf4d57f5f77e1b37367554250651c3c9dc450c646d6a2e68e061c997a22d9432db55344502c21a602319f82caa01fb98c8937f70ca7d66fdcb63c5734dfff42005010c27fde3377d32d972d585355eba7bf5dde35e74d0bba5140be60a240a7eaf5221ad240433e64ea5a450748c70ddcfdfceea736eeebbb919e657e2100d811509495dfffcaa247fe78796bbbaa79e191c8403a8d620966c9a21ec886aa50cda06a5cc817f8df76d1c6ce23e3fa6d9b76dc90c8e7cfaafa4c19003be636d46cf8c1e50bffb9b9460575d7a8afafe47301399b8f96aeedf229acbf7f1416035070f1d0ee04b66795fb07f7bf79db170e20d672ce1d6d95b1bb2faf35511512b176d97cf86890f7f00187fd08d053696c7ff7301442b8b9378b2de31e6a4bba062c23bb91e0bd6264d33bd4502cb3e7b58d676546febc392006c2b1aac6d93d3f2e0a811ba4920e25731ad7ce5571e5975a48894260f3999ed5f1f2f65eece84b63d00ee26841e5b34447573ba2d5f528158b6e41cf0e9b45a3d7d4f3474dd3f84d7ce8d4d6fec3effdc12df6ff0840f44832897e4320149b1d8854ccae9ed1b12c5633e322b3a0074f92be43d690cf26298b47b1b651c09c2a9ad468321bca03aff59b24b32a5c6f100a9be02c03955561842aea286f6482495069fc746c963745d09af9e1befdff48e3dec3c3c776c7ff5700fcc168636563fb372bea5bae548391d954b802048401e2ffcf67e23875f4085c498324d36849d774438744c5aab6b1115ab40a2299383c340e3d972d1b691ab0f41475ad3ef8a86e88044214e50f676ac1b1605001f4c8deeda2e05cd8fbf64b5352aa4f0088d5355fd7dc7dc17f0aa4edc287db103c3b512ae8645406b62b4352c31f8262bb0f0e1971fdea3a5cb1b21e3f7c643f4e8c0adca812b516a00e95cdd4360dd22e357b8e5580486aeaf54a6501a0353cde080b3bbcb2fb28d1f55b47de7aee73e7c7a700b47c375adffe23569cd8ae9b4b7aee92172d93745ed7e1d562e4e55aee59dbb139bfcd22d180a6b0eb5637e2d2c551fccb2f4f6020e545b168a24855b9a05365a622b7604e352aa241aad83afa4e8e6070dc049bf664af9f102804b6c0670b49b4af39fcd6b3cf4c1940e792aff45825f735239f268db4ca1b5344080fb50c9645069344524e40251a146968b188bf0ad18b81b38b59b4cd99cfe78622b51413e31354d86ce8f90ccc5c02ff744b37d6dd7831a028143d156f6f3f846fdcf6321c25ca820083f28972815a93308daff2a86b196b8fee78f1e0e706d0bee89298ed608723289d6cdb84b1d34314e14947f80c32c4c8a6c066031f35746c2bc5a2e1dde57b4204d3b550dfd40a41f641227a24a8fbcce54dfa8e0555c8e1b9fb5663ce82b9301d014a3888de432770d5b737a2285583784f852f0d2397862479c94141168563704b6b7adf7ef9f4e703b0f092158562e90d510e88243f656eb25680ef850a28e492c8a5e3f4301112815028ecac5d70ac52391169ec5c737e15569e5789c77f7d1ac3099bb7162c614b44af0dd754e1afd6ad411112fcb1085e7b633fbe79e76b50b42a729448eba7f9fa2cdfd8f3bd34f5c9a27dfff1777ff599c58f03685b78c9558651dcccbccf1eca52cb4379c0011098028d893a2910bf4eeac3e9c5f283ed81122847f4e2ba5595f8cb2b9b71cb03fbd11f6749acd35a14295b409d66e0b97b2f43c3cc7a287e2feebcfb053cfc521c616acb19851825f5748246529bd4cd3bb95926b044bffdc4ae57effb4c00cde7acbead68baf7324fb29bd9ae5b596504bea8450966e452fc06852634068ecdbf9804c09231160b521f24124d24a49309a4e2094e41b686410ddf9dd7b7e1aef51761d3f3bbb0fe81dd707d35f088e5f56d26124423260e32b5ec9252dec25724714496c535c7dfdd72e8f70298d9bdea49c3285d2b51f8984116859d799981605e67df29501eb8f430c5a77110ac01627f731a9122052351381e2f983aea4487d4441c6c479b4591295254b571d31f75e285ed43d48e536e50bbcd9c75464a8b46966f062b2ae580e2e3b9e5a17f7860be33727cf7e5a6914d78fddaeca679cbce25359404a7f0f8be3736db42dbc28b2a8a05f3a8619815ac9a3aa43856a94054f171bab064669e61830af33803c9785a4e7017b665f24dddaa0a3f82aa80844e9cd60bc8d04ccce8c0d660002daa03258b194551734b74bf978b02739443f5c1a482c823a0a8d0c25428e93adbe58b565620171fd946cfd2fda18a559a27e70bf8e44283dcbff03f5e38f4bed07afedaab0dbdb8d1a4de9eed303b64904b5e61837c15dd5c209d4f91313a1526412cef938a441961b2056520f27a11dfbab41e77fcd9227cf5f697d09f1051a4a2c7e940401940769413bf5c689997f96b2a5a877a23d62751c19329ba5e74ccea40737b270a941bb9541c550d2d181b3cc5a3e33307f0f5c52aa29a785a90b4ef092de7acbe5f378a7f6391ce330f306fb1aae8a3be3e1af2f3cdaa12454566c94bd120b945d12c5192e6cb2f33082cebfd3b1b24f47485f0c2ce387286836c323e490795afc9c48145d0266f0b42b932336a49c493a0d7418546c95ee94763b50f456f2d746d3edf28181b3c899ac6568ae8389925c3cca770dd05d5f8dad7ae45ef9e37de1666ce5fb945cf1b175bccb2c9d68119caf2a048eac3b81e0a8751d740dd24b50db99cc10db7295aac5a3b649c4c834dacba96349ce6e34890bad21492e3a36460817b96d5831239a844754022d954489d34b9808e4a9380cb98dd144475a5866824804848c5580678f0cd305c95d509978b0a3bd99ba0f4c4082e68b5f1ddbffe0b1cdbbd654c98d9bd72733ea75f55348c49fd2f2b1033ce62bd0cc091930b39300f7f7564114e8147ac7e46235ae72c40981a399968c1eeb7e97ab15024f5d17962ea7a1ec90ff6a241eac7dc160d35510faa231ec4420a49a5cc9f7746b245522683aaf8836fc69072aa290ae557555c4cc816e69c79da117c7d75034606060f08cd0b2e5c9fcfebf7e9b91c85daa205a472b899215c613ebac6929c4f2e4cfa2802eca55ef7e2a5a86e6c2be7047fbb24705dcf0cee47c06350e7eaa73c3251e71ec6921683fa213f4f5c5e00261b46fe8ea7fc431ea7aeb7e0e0e19dcdc83a1172d84792c960940a06e6a97bb0b2d372f379e72ea1e5dc0b2325b3f462369d59c61ecc2b30e33b7b9d4451602a538e8a3cf9d0f2c1e4b3babe0e6df3ce07db2ffaa82914904d25e01fd88c9eb61245859298d24af57a886a675e4b61f27dda871f3e3c3ca24bcda08c67fb3a4099f7c95773ecad90534487b87bbcb356bce5decd431b791d2010334aa6f90b3d9b5dc1ba4bfe1e8c0c66c96753d3c6e874e679dc7b2847a7a1b905f5ad73582f8f8f2c11b87a28835b715e4d8eebbde3f0c04cfe9779b93c47b3d3537edd469f8512a546da728481574e37750de5033e5667cad51edcb1946ac80c1fff6572b06f83edbaa73ed18db69cbb4a752c7b3d01b89812b38a5ab428c95e985a063fd145b0a9363099052f6c4e59fbeb67a08a1482e5c7c70f966c76bc0f5df2716746a56210af3382e826a9f2527a22e59184944cc6d2939364dbb82c0b27883a274999fa9ef94dbcd8a7d7de14d4b4ab1d4108107dbd946b263dd5d153a32f67e3c33f259b873e51893f7e3477af608c516cdb9128b9a274a98b00b5d0224df4b9deb19d668a4c15256a585694a816abd56c57fcc41a3c19e934470f6c8dda03eb2f5d5c7d2212f4d0adaef5b73f3b697f5683565e4290e964aac08793c93d25ddfd94c153da953803901654f46c524c8d9e8cd4759cf794e00dae60cd1d573142e7907cf9fc9a36dab7ef81ccf8c01df48ce2941e328563ca003e7d042255abc2b54d3fa079e128b5017ecbd413d989a117fda1585d3e3df1ae65160fff5f19cf8eff063ced0faf21b334dd0000000049454e44ae426082') +DISCONNECT +/*C158*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C159*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(19,'Newbie','2016-12-18 21:12:00.023000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000140d4944415478dabd5a099814e5997eebeaeafb9c9e99eeb92f6698e11c4040e406012f1205a3629e8d314644319a488c3914778d593559e4d4e86635d98d31c4555154ee6b84e1be07866166989b39baa7efbbab2b5f15898f59c906235acf5c5d5d5df5bddff17eeff7ffc3c8b28c2f7a3cf2d20e13cfb129ba57612c915e2e6af86574db028e6357a652a9e51c8bedc9744606c3ca6b1f9a95fec20ffcd4c1fc33001e7d791b93484aa220f0198e65d316bdee9d923cc3748300a628db643cd51eec1604ae6f7c55566d675f506ee9090c44628924c3f2b22794dc1c8da57f9892643f03995fb96466ea2b07f0f0baadb91a9e39eeb219c1727c72466d5e6e85db2aa4d309489934521240c0200a3c784184944ec11ff001990c92191eefeeeff9cf40346d8fc49379e9747ae28ac533ffe934f8dc0096aed956ccb2cc8f16cd2aff6e65a1930164c8f453a20cc9481212c924e2f1387802a03318a0d56a4146c2e7f32149efe9b522644e8481ce1f69eac586bd6d8b5e7e78f61b5f1980efaddbba6fee35ae89b5d505d0885a289f97d219700c474064c4e23104fc01b004c06236432443a90e10080490a24868e93306bd088d4640e7c500fe674bd3ba6842faf1baa5b3035f3a80477ebdab7a7c75d6f151e51681617868c9c31ccbd037078ee728021924120978bd5ef03c0f9bcd46866a904aa610894620518494f37a831e0cc3201a8da2bb3f22375cf0a79bbb02735ebc7fdace2f15c0d36f1cf8d39df32a1784437ef2741256ab051a410356e0e8461c191f47281444381c82c5628523cb4eef53ca505d28e9956179b51e949c63285ad1680ca28683496bc007f56dbec30d5d13d63d34abe94b01b064f536a628cf7af0d619956307fd7e35cf459d8e0c14208a22a5107994d227425e0dc641e9a3471294ff14114ea7a727519d78fad2569b89d5e90456891432a022e760b79ad1de17c2ff6e69785a4a4bbf5abd6466e8aa0378f8a55d73c6d6b8ff545bed32a5252a5c39a3a680f27983c144a9c181bed0391045c3d64df0190b3064603ff2830d6833d5409bf4a3df9794bd631661ea35458c9e4b2099caa8e00d9452cad1e70d61e7fe0bde403851b17ac974df5503f0c09a6d5caec3dc38fbda8a728b4947e1e7d4f3c1609052290e93c9041d15ab4cd138b5730f2a3f7e1606a71d463e0356d4804b2721a712e8659d54e0713455dd8582c95321460729bd00bdde000dd586562760d3def383173a3dc5ab1e987e4551b8e2083cb866fbb7268f2e7965f810b740b5aa7a3e44b99e8827c8003d0c3a2de2ac062d3b3fc0d4eedf40305a91d11ad5ebe82944b61cd878089a501fead809b8601f0f6b41110adc369572351a512df80ff7361eeae90b4c5db77466ecaa02b86fc5a6e5336a4b9f2a2d70122d4a2a354623512889acb7dac16a74e80f49f09cd8853b0aba2054cf02a72150db57409652d0cd5e06899e95e83a8bd4f1cd0877b6e265db525457e4238b3248a9272592de6014471bbb7bbafa03df7ef5d1eb375f1500f7add85cea3489bf9f585d34c16e35219e48aaf99fa2c6c49197079a4e46b4a176bd31cbc1b8052f0a8a5cb0713e88893e6462614809a24fa31e69ad1321de054faf178e8bf518a424d9218d815833132eb346a5659e6839188e60c7f1d6bd91587aea4b8f5c2f7d6100f7fef2c3f9c30b9def8e287641a03027931282a180da613546331af6ef912ebefd0c918d00abc540d4c8c24cbf6556c0f0ca5c9417d9a8385b494e4421c588a9121978a32c229e8be046ccc7885bbe0bb78900502a66486ec462511c68eaf675f9a2e37ff38339e7af4a0a3dba7afbaf2694bbbf6f3319d566e5232a953312196cc5d924d1e59e95e8dcb7098f2e9a0495a588368f37f5e3d50f1b515564873f18c3d25b87c36214c1d37bad9d01bcf6e131dc78cf834897de846c6d060211014bf6f8881cf6b55efcf59a47e62ebe6a35f0c8aaedbf1fe3b6df65d0ea54bef751b7653901514e8b61fe0da834f4e297eb4fe3896fd4224e35a294adc9a8c58ab74ea0db1fc5833756a3d86944289682c871387dc18bd6ae1e8c9ff375ece7e721572b513717d46e1d22d971acd7773ac9f1b5af2e9b97ba2a0096addcb67ba4d33645610a89c21c0987550dd495cce0b6d4eb28c9d7e3ae9fefc194a14e8ca7b449a725441369fcbeae05d74f284273eb20e6d516905225ee1758bcbdaf1d938688308f598043a96b512826a0a186a7a8d81091c3f13e4f3224cbd5bf597643cb5501b0f8b98d6fd6daeddfc8b5db492b33944629c49269b491b7a6e0235c93eb47874fc609f22ccbb010688a215b505d9e85fc022b3eae6f43301227551a45229684cdacc3ecd12e0c4458bc169c870aab13a251976989c6b60562f1f7a3c9e42e22eb33af3c362f735500dcf38bf75f1861b23e66341b53b14c2a94a335d8e2698ee9ecacc7dda6ed30dacc30590dc4ff1ae5b6607816d13e3fa5438c6600061a260d41af458c35436fcb45a89b007906a04d85f17a621e35be7190749cb7d33f30ea95efcfeeba22a33e0f807b9ffb602acfb06b28c60f6878eeac8ee5f6e9f5ee2196de4db8c3b417ac2d8b8a502096e2c192f1d4aec190effa5a2f926448c15d9147923a42722189a11326903e12111cf0a365ff213434f6625fe137df74c8be27a3d69296358fcfcf5c91519f07c0fd2f7cc4c864d42b8fcd553f70df8aed9c25d0f6dfd307dfbf735899113ce9198d4e035ea4298c4088a200af3f8c9dfb8e203fd78909e387432205ebf306496e47a9fdd135660b5cc5f9f0b6b763eb9e8ebbee7feddd3f5ca9e19f1bc0e58e9fdeb670c61453d7f6c261e5a4f105325e50a3a000d013031d3fdb8e8d3b4e52cd70587af70c64a80186437124a23433f40770b6a10bd7cd1b8f9aa923d071f4bcf4feb6f6ef3df8db77d67e25008c231e2c715874cffda2ac7161b59b8529dbaa7a5fd05c02c010d3e829229c56998925f4767b108f6560cfb140d46bd48ecb937ee2e8f96952a55a93169d4d3db1b7b674dffcd89b1bb67f69002ae6fe646c28187e71e4c88209a6423737deae43ed91b5c8769122a5215f95d5140565a464898928ebd4a9cdeb094121f4ac5c0b82d4179448486031b4daa55eabccd69cc0a3f37c4f62cb7eff4f97fcf6dd5f5e55006577fdabb9242ff73b9251fc05795913686b417681030ded03f816ba3031dd085b96913c6944923c6e779a951986067875eea78296d172a10f6ded5e688d3ac44986e4e6d93173563545485655ab32666a743c7a5afae21fecf17cfb81df6df887357145000a6f7fb248b419eb9ca5f9058ebc3c283a371aa089aabb0b9dde564ca81e87a523f2d1fc87e7c1fb3a61d23128aeaea2488804224386b14850cf686a68c4a891d928ae72abf5a2ccd0e9589aa6321d51adac02567e6849531ddadd282f78c7f24498b5bce83ffa62e29f069033fdbe25a631b52b384d4613eced8168b2808660083905d0f924126149047909555905985153811207076fd31968f7be8c424a2b596724019740f7850e48436761f8e8329c397d0ebd9e349a391712bc8c270a4ec26621102946593a822030385877168f7aa7a1b32fe24db4f5ff91f2ed29cfd1559e2b06507dff4a4d22117b3ee06bffde909b17a0b2b800e7db7be08d517a64e7c29a8aa2fff879f0d18bf0f02188b2116b96dc033bd54493378582de7ae0cc36c448f859cd4604b479488f5b0897c3841367bab1f6e8003a582d9ca9202afcc7f04c5923b21c3a2a7c1e098f17cf9cb0e148d62c9c39d14a806448de507bacbd7721cb3187070eaf94ff2180926f3efbdd181fffb5a9a888c21c076b3083b5b891d21850403260ce10375efef9cb48b201b8c70d47c6988569d959604361f2da45dc377f0ee9fab89a3ad7d4906420097de0c079e41a181cf1a4708ccf829b4fe3e3ba83884207b9f928741d6731b6c68011d5b9d89d370717fbe3f40e0b31cf0137d5c7a9cdf5f09e3ebfda7774e5c3ff2f80ac49ff5266ad1d776cd64d334d0932be8d0610a7c38934a9cf917433df60041bded942376b43c9cc21c81f3b166ea3018344871215e79e375ec3f8c937c0623563c01742151383d59d8f9ddd01c8344b1416154343c96ea4f43a7d783fce375d80bb64247a0e6e43881a62cdf431b0b9ec0807e270b873904d742b1331f4770f62f7ef76ca62a0f5f181832b5ff8bb00ee5eb4f489dd95b39fbdd93a88a1ac0f199ae1db223cfa2cc35053330cefed3a85d3ebdf407655253084783da714aeec6c6a623475c55308050328766563b8db81373f3e85485f0f664e9b86dde46d89d4ab3dbb004e1a1f239104d84414a12883af5f538c6d9b36e15c208c09374e4298eaa0e5583f8c85361490c682cc231595a86b77237cf850ccdfdd554ca9d47f590037de72efb25311f9f9ba7b7351585d0c86e3096a1abfad0b60c9db49e845060e5296d13203ccd3672376be11a18ef334d71a90a259817395e19a51a36130d9d1d8e5c1987c3b3e5aff26b4ee1ab05a2bbc47b752621075c61390181dcc79c370c3d409d8b5f3009cd93ec0558ee60b6158abad089df6233e90a4eb39220319865c9a33a20372ff9913137b0fac387059008baefffaed5595f63ffef4de31481181293c2d8a1ce2d46fe6feac0e074e33708e1c8ab49bfac39c6f10f35870a1b91583de41e89cf9b0c4fc14911c1c3fd78ea11543e0d0ebf0d67fbd0467e9488c1e3709fede7eb4353680b314c320c751e8b4a1a7b3031ebf8c2ca117039c0ebe8015136faf81896448e3e16e9a2d32301a34d0d32c1eee6aca74369eaaa5089cf80c80e7efbe43b072d1550bbf56b5d8949b4b1e4d136d32d4681815448a686fd1f3a7f0115b0047690998440c0215b8607723266b69346471efac117875fd2ef45e68c6e439b761dfae5d48f93ceab0c20a466844a257c181a83f80b993aa61d268f1fada551835f926782ff6a2a3b91e9661e3a135e75da255bd8c70308ea1ee2c8c2d36e0d557d74711f7e67b8facf27d06c073772ecc1f3344d83d65e6d0d20cf5fe8c9ca156cf80862f280d5fa7a389893ef3eed128ea6cb391b4e543c7f354e83e14d92db050f3aa3bda083f9b8de0f96390632194575463eaa84ab45f0c819753f00cc6914cc471ed50370e9eba88c6b62035c600d1e759385c55185de942534703ccae62e4130b76f50651536847c097c4b14327d0df797c85e7f08aef5fb688fffdce05236f9a64de533e24d71c0c26613689885114f4d41d4311a2bfe6086ab23370e773f88ff6d178d35f8c5c126dc525e5a8ce35e0bdfd2da8fff07d5c3b6f21100ba38f8c2d24393db1d482adfbce410af5c3955f8611656e347747f1d6fa0fe0743a505951412cd3810cefc4e4d179686aedc0e9863ae4159762e4b01a5868187afd4ffb11e86aecd61be2d5038756062f0be0b93b1794de34517f20bfd8991521836d5611e7ce7931acca8a1d5d062c3e560e7baa138fbb3bb02dff566c0ce5237c682b156825a9663de4480053c78d418189230a4de2bdf7b6a0908c185b5584436707d072fca8ba86aab39521d2d38282e2628caa2e43ae43837736116385fc983ca95655a8bbeaf620d67ff29060cc2ed5e84c0e3e33e895e5f8ec8143ab8efddd3ef0c2a2dbb543b3c2ef08023bb77a64091c4e1deaf6b465664cc9633f68d1e1b95e32aebc18f1681c1d2d2d28af1e8d506f2722490eb1812eb8298df4f64224898dca9d063477fa9163b7a1bebe1eceac3c586dd924a17a881c92d0650651545a8da6362f268f2d44779f0f768b15bdfdbd38d7d40a475616a283a7ffe0b2f13fd8df102a8e4bcc99d089d57fb311725916fad5d2fbc75ab46cdd75795eaddd69c1e6fa41dc76bd0b8d41072e5ac65331d3b8c86aa0ec8931b244af89ffd329a4e95eca0e8c24a591a0e98be364555e2752ea622ab424b363449da246a7cc38484a24a1d94b2a942133b4948a81604cdd4b1069aeb03b6cc875b9d170f2d8a61d7b4fddf1ecd33ffecc2ece67003cf9e453ecb8eba6ecbb6eece8f13d87b623ecf7e064fd41dc398945b3548644c57c6a287e08a286bc985097496cd47195556aa56bdbc8db219213a25643ba3f4ccaf2d21e99c200224ff5148d50bf1089187868351a74f5f4a2b8309f9a59940a3b411ddf817e65cd896cb13bec1842b5a12cd1ecdcb1fdc8e98693e31e7ffcc7f2df05f093a7966b4a8a8bdfb8f56bf36f6b3adf8c96ce3ea23bf2d6d18d983fcc870b5c0d1ad85160a488baa6eff305d41d9adc9c2cf4f4f6915739e844118a308e84432af51a0c048040462211026a5757aa43c1a0ba29e8ca7112314454c026a311022fc04f5ddc44e28f2780314a338f670037cc9d43eca7c3c68d1bb75c686b5bb0fcc99f852e0b60f5da75ab6ebce186a54a3a280f4c2652f08563e839b207239923c894cf463867029c1611fdfd1e62261da585887038aa727c2a95a4d06bc9eb2281f3ab2063141565e91cf2a51d4c65dfcc33380891802b8b64190222081c82c1b0baed64b7d9e9ba04fafa06e076e7aab384b2129ee374aa366edebafdedfbbe73cf6d9f01f0f4bffdfc96afcdbf65034f5e7c7bc34698cdca2a748224ae0d2ded9d884762f470abbadaa0276f04c96bca162a4f63a3b289a7ec4e2a5e548c54f60b82812049101606fa3b4ee728d521514f51861683de80085daf7c2edfedc245eacc6e570e063c1e1a6e3490c8608bc50cafdf079d5647d18caacf9d7ff34deabaec86f7de5bfba31f2e7be813004f2e5f3e7adad469f539d9d9a2825e5975530e75b35a5456a353ca0b7a38e9f29444cd4d52c3ad784f59cb54b64c93a9b4ba03a96ee691a102e9a71415b320682ed5001d8a7394bd62256acaf5f470750140b9bff21c65a952f1364bd769e9b5b28cff57072b63b32888eadc1c8bc570f8c8e1a54b162f5ec31062ee27cb9f393e6c68e5b0682ca1de94e5b94fd24ace64fe3274439d6d65e62fa1bbf4f22f61bc74e2d3d5f5c9fbea0e0df337e764f5df26984feecfd0fdfffafbd3cffdf46be5c8902364653e20d0c1684c5abb6ae57486d768735e59bfb96d7859b636164bfc1fd37099d757fbf8ebfdafe4b997ce0914a17086c7c30f3dfc1881e40aaa6aaf7b5dc3cb16f2cc17fac78bafea60944d694ecbb5369e7e4a81a4ec71e6d2374deb90bed8adbfb243c9716571a4fbcfcfda84b19ba4875b0000000049454e44ae426082') +DISCONNECT +/*C160*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C161*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(20,'No-Dissent','2016-12-18 21:12:00.024000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000014504944415478dabd5a099414e5b5feaabaaa7aefe9d9f71d866500594422b23ab84050445e4834120d5114e5b18986c4e0c9316862627021a8b8c52079429ea2b2282244b62070d8070686815999bd7b667aefaeaee5ddbf7a54cc81bc9073a00e3535dd3df5d7fdeefdee77effd1b4ed775fca7c7abd3270a525abad59c9c5ea8412fa7b5fada4bfa955af34a86f0e0721435eed714b9438bc4da74252efb4f1fad85aa6e8d7bdb8fce79f7a3f07ffce08b0eee3f01f0a71915a2a3efa0599993ef7e3e242b6ec96a33252739399bcd063d16a6330295fecec471f4c39478106f0267b143556444fcc168a8fefc015fd591adc1d6967d04e8ab47fff78bf83503f0cac33f7968e2f2156f9c3e5e891ddb76401224e4161523232b1da22421168d231cf42325351559294ec26082aa6988d2fbed3d7e4422616466654272b9509a960c4f7b5bd7e9577ed367ee9a8fbbaf0980d5f31ffafd1dcb573cb179c91cb8eb0fc09c928e66931b21d10e9d13c0f33a2c4a18617aed73e6433709109410108fc3e66b031f09c29b5200a1b5113f7ef10d1417e4e12ff3eeffd9236fae7be79a007873e19ce7663cfbd22fb63ff724729a0e22a5281fbc2e438dc7c056932c2245c20c391a46574086125721b00f8852768987a69b10ec09a0a1a61e99cbdec3b849157877d19c5fcd79e5ad67af09807796cc7d61d2b2df3fbe79e50ae41ef900c54307c0996c8749e06192280282400b6be0883a3c5dd9a12a9a71ca44238522118f28a83e5409edd68770eb4f1fc19ac573963ff6da9a65d704c09a5f3dbeda3af9fe39cdcfcfc1881c0bb2cbf2208a26c378135d798123e3f9441233e3e30a3455874200d8a9ca742520f5474ea1be680c4a7efa24ce3ebff8e1c7defdf08d6b02e0e5a58fafef72e5cc1c7ce43df4195c869c3e39643007d1214120eaf0668972810008a440f45a5309402486b83f807820805890d14d45d3a95ad4044de8be6d2ecc5bde9d36effdcd1baf0980050f3dba9a937d737e9ad6818c31a390d2af081cb1dfd7d46ed0c759940553920bbaacd029832340141368fe2042de006c36115a3088861dfb71bcb209dbcaee46ffba7dd94bdedfd8765501ac9832c665863ab1457096e5a6597e77ef8d19fc91da767c79e01c5a5abc98f3d43d08066258fddbf518d22f9be49343437b10294912dc1609e5438b509ae3c6d9332d3851db895b460f4032a7e20f55925e10687fc385f882055bf6c6ae0a803f4e1ec383475341ba3d27c9aa6b696976e49764f02ddd21fc6ddb496c3f741e331fbb0b12d1fee0869d183c2017d9992e0443324e9c694515199d555e82bee585f8f4fd1da446263cfd6005861526e3e8917a04650ead5ee5644456863fbef51fff7651bb1200ec525a94613f5554e0303bdd36d89c16521f1b644d473b51c31f08232dc98ea2817986faf04949d0c361529c18ce9e6dc3e1e34d6868f6c2e9b462e4801cf4cb4d41381483a7ad073c25f99906bfd6d61d4f7a7cebdee055a1103b5ebb7b42696181b326373b894b4bb542246a3892ac90dc7684dbbb604f4fa284a556c242c6e797406fa881458b41a5e784295a96cc64a8be0878aacc3dde107cfe08da3b7ce8f644d0d41e7d76dec6ddbfba2a14fa06c08c0953225c6ccba881d9e853980ede2ac0eeb2a1b5c9034f470f8afb172339cd01bea41f388a005aeaa0747422d0e943ede93a140f284412d58cee0e3fb4988a60308abdc7cea1bb8b3b2668a6e1ffbd69d715197485493cce94e634777910728922877b2a06c1e276a08d12b8b3ad1bfd479460eba6c388c7e228ef938d28e543557d17aa893e65a5a97860f644ecffec18fa0e2a80d52c221e8ea1aea1131bf69f47ffd4d41e7f4f3c6bfee6dd572789d9f1e2f7c7f2bc895b569c6bff854f93cd2306e652d2ea68b9d089e163ca612330aaa6a0eae4056cdf7306d5b51d46373ae5e6411873430992931de868ecc0d91375e837b8146a4cc1c1538de0e23a4c328fd30d81979fdcb677e155a5103b36cc9efc7a5ab6f5e1a4541b022d1e6417a6a1705809693b398fda095825f2ae8c908f382f0ab0e5bac1c76962a08455a9cfae3e7e1e2201932c16d4d47bc0c7b8585db35ff387943b966cddbbe3aa026051c84eb55497f74de963b64be4553b2254c4f65736a3b983948868112763ed7633ecd4d4b19642a028396d66a25526fae6b920cb94d0beb0d17677758670a2a67b78202c9f5cb869cf15cf04570ce085c963524bb36d9dfd0b933806409344d478e2f006e346c112290031ca0155215b381a62782a1fd44e534d864c94c9cf7022cf6da60a1d851c91e1ef89e26065475558d6072ddeb2e78ae970c500564e1d4f54173b0ab32df68c341b7a7c41e4146593129151bc806e2f7996ba4d56f5d83fb6be8900b869b0b1481a428128bc249b366afc589317f2c770f87417620ae79ab76967e0aa0360c7af2b46b9c717672d93452ce0b58829b3281d19d9a9a0fe0c02d146a2268e51c71801e8d488f832194b5d036291283a9b9a616623a626a0a135a088baf4c4c6aaba95ab0e54aa57150047877ed10d4b6f1b92734369468d1ee26d374d1e49ded612ad34339b8dc26c14e08d3ba1113a8e5e785a3d68aaaa4541bf22eda3cf8f7de88f690b9fdf75b8e552cfa05ff1ffd97749007647126fd282f7fff189b1f7c54ca9e69f3fb7e1efab964f1bdba74fb1b362e62bdb654d7011c9759b85b3eed9b8741677b65d90bd310cbe7524a414aac0e47d2d2643a34e9481d0a8d55059574a6dc5aeb5db306ad16c3cb77eb3b2f2777ffb397de4270b0a095deda21f96f599f7e4ac1f4c9afcfc4ebbc3d4bc75e3d2e9936e594ebd5fe829b2b3e6df02909d9d93d2d6d6ba6bd1bd2306ad78732de63ff233f4500fbfe6a3bfe3f34f5ec2ed777d77eacb206ed79d7a0dfecd5fa08d8a96c9e58060b7d348299054d24c4005cf2c4a70baad50dadbd0a35a204d9e82fca2e9d015955a0c8d46ccc45ac92e0b0df827110855a3bcfc87a83e7794e8d785fcfc713249ecfc4103fbbf71a2f2a47e5900e3c78ee30e1c3add90620be75f38b7015f6dfc1b7eb8e47f70fecc070878aad16fd4d3e450336cc9a9e02532d4ea445bb786bb2a4af0e8d45c98a9efc9b0f230138d344537464885cdbfa1106aeb3ad111e4d076dd68acfba21601bf0536314a93590072a8077a2c808e960b58fc83fe78f68d77f0c1eae558fed2df51597f067bb6bd8e9bbfff6b8c183e72f8fe03fb8f5e16c0d429b7430db5972d9b3df4c8a08aa1f69b26bf0a776e195cf4a09d4763907386c1e2a06a1bf1438f07a171a2a13c71d27f8edc68cd9490e18ae18622154e334861fca4f11e342a0594c42e0263831665994e592286596650aa283031a91544ca1701726727322d1d9832b118ebd71d26207762f4ad3330b1e2411c39139ca504ead6fe4b0af529cd133a6477679c4b77cb2965d0052bb5c40ae01021c6bba89ab603f128e9234b5481497d426938092a2cd035893e13c87a32284cc6a6d3872ae5a8331788b022e107a267010bad2967d35a4e329c7ee77a37ea54f63e0363233e6781f7b4c39241924b74543a4e7b4d4a282be6ad572e0b804f2a7e04ee82d7e02c262ed37ccb086a0ce7d40aa889a48448ee2519c445f772c6ee834652a99254aab861a019e3873ab1eaa356841b6b9052548661378e4794e8c2d1d4862e3b4c4521ca130fdd97841e2e9d9ca0c1c529e0e91a9355444c5658e9f5577bab28d232a4402d747ff3e8a8a7e1abcb02b0e60c3c8ae4d2a1ba39d5d890fad6482ee1eaaf8f7f16afde8f15957e7a02b8f0e55864954ec7dbab9ec1830b3f44c5bd0f61fb9fef23e0d4e0bd301a784a44e3f6277070ec8b18adf5c513ca49f4d0b33eac7a0b82d68c13dc34fc78e700bc70db6e3cf8e08b68f7538ec59ba0f7d4fd25da51fbc0250158d28b5d44e44e3d295f8264ff8e878d28fc1b3583fd891250f1d4741e0fdf918e3b9fa9c6d1bd35183b731a76bf43860b9dd017de438385883d6b9ec2e777bf8451ddd763d1a19d90ad2a8eb73d002e780e9b321ec0c20303b078e451ac7a6617da957498e50e8a40ddce68eb9989970150b28a4b2e7954b3a412bfc504cfbfaea75a842e66b64b7b09f77f2710440513d49e20f8680f94a41cc05b85b1d75f879d6a25f8161b56ec9a8c97a5cf30ce5382860b673120752cfed8e710b5e21730e3be83a80ef3f8cdb006fcd75beb105b7a2bf23e598d58bb4aad3be58fafe124c9d6e06867dd770190f76d105d3edd9d27406089c51a99decace119548ee20b1e432f7becf5d06824ec13251a749eb126631d58278eb498c2bcbc7fadd1f2185e730c3f33d6c76ee47cace14840e0451d66f300edf498310e55b6641806497c76f6f3f86a51b96a167ce5c64d66d46bc214800483c028d6d9003b90440fb27002537c191b157b7665098addf3a99399c256ccf052ad16974878444265f1a00635a9cda65bb398ac2340e67ce2950228d98306804deaa12c107edd855978fadaebf22b27618b67dde869b475760c384cf2087bb31e4d1a711087463d69076dcbbeb13d44c1d8f07aa6ba10655082a496fb0850a472025da714ef92e80ccb2bf72cedc7b3529a9774f5fefa5106976ac1baae73cf8dceb1376f7ee775e8a3f3a25b14ab3f1f14d77a2fc7b33b060c17cac5cbd03136e7a044b763f8373e480b9dd9f4072acc12f174dc36f5fe351764736aa6d1b2057b62025dc84b88dea45570fb4e44292e338a935cdd826cef8ee818bb5c510ee71453b6be56f00107d2c9c60ef521cd9569368632448182a47c0c901a27f3760768277e592815a6f837669ef3315d2bb82f8c76bc370c3ed157878fe9ff0d67b7b30fef6d958a0cf43739b033ffe7c3715c48d786fdd4d78fbdd2046de51843ff047116bea44d607f588595d30059ba83478493e25f0ce742a0b6946f1e4235e4d8f783389429e8b015470d6e4edaa9928c22a227a59c20ef63ad449a7174829e9d57fedb22c626fb1b6da610a60707a18076aa820f13e70766a3dcc3eba8f22df460a07a2a9330ebb5337ea864202a1d3b3149dea03e589ee6b066c29944476d68f132b78b64b0c2eda0d2ed23121da59bfeb2200a57fd22d698fc1e232d447d360ec751af58b5447f73512802eeab68a886b294ced7b73e4d26ac40c887a69220b46c1156640ec3903d59e6d546ba3206a7c6fb25f9cfa891f92682229a6f5bbea09b49b706618bed2d86044e2c12be48c40fbec48e7f93f7f0b20a3ef0e58d36e8e51e5034d48a0718f9a1bc045f94043b9e06ba08a1ca770d21d122d6a637962ee7dead752ab1bff8c240e2ae85bcc61d28814bcb9f61c144186e8ccec9566ed9f22c75f143b3d21dae4652dd00ec5448c70a451e25f301ca8b19c14ad54a2b875b1f6f3f7187799d38a785eb43647e1c8b2280a86175930e7fa0c54367461ddf16e04a9a0f9a94bd41d2e8685c00513522a1158414ad40526b34653c4838d2d7aa70fe776dd8fe2e133b174f15c3cbf721fa48241bdc65ecc3d2d01c8a024d1444b382f6e24ab8a3ec5b9c830c75110f5e2b631fd51ed8d62cdaeb3680b4bbac2fba6eba1ee4f2877932d8a39c7e73241daf293320cbd65302cc539d471c6f1f6f2f7a189e415ce892736b62026308a294672438d25f281b99c6da5305a08420254208c0f5f1883293faac0f4fb5660ebb6b3e0b2faf57245ff36e3d91aec54d85535803001e1551b164ec8c4a269f958bbf9184653111c3d6b1c45258c60651d5e5f7f144f7fd11052e526126a937542525ad1976f93124cfe7e394cd969f4969d9a3a179a0ed660c5db9b30ecba0c34b5c8d85a2fa39b9e2592a4316706489b193759e1329934d0d80b1fd187099544209d36055d7e019a40b5206a4a44e96bc273461690cd6ae2b591783cf9820a5db686c94353719a66eb0c9118317f1a3147a4563f446d8a1f724d0b7eb9b612afef39b69c00b8563c3379d8a279534b612ecb239e8b8804c370a5b9c1a765e083b73ec5abfb0f60e6a472e4b1a98aa9282718df7f193582ed3f50d53611bf0531f1bec54cadb5460fa46e3fd96931be6665db2ba2281a7fcfbeb9e1297a724c4307492ef33bdb7a494b76222b3589d6070e377561f3077b30775219ca4696426ebc80088da536870d314f37bca79a71d7aa3dfb395172acfa74cecd8f8e18950b7b693e74c98243fb2a31a22c0b526e1ea294d4ab5efa1887898703fa6721c74d72482d054f09c57a9e3869a62c2b0847156a1f14e3bbe0688c861f59ed658c6e9c16b319922424d4878c753aac484d71c361b3c062b122253909496e27ec7627aa5bbb7168c7618c4be631f647e3a90247517bec3442821d838614d368da096f7533567e78f40c97ef74def6f1bcdbb76696b8e12eca82352b03272bebd1d3d2863193aea3bcd2d173bc1e9f6ca9c217812e14f54fa569cb62ec3eb0ed138bc50c2779d96ab1500a08091a90c7193dd8ae02cf7dfbbb48b3b14051b0d1df4a1235bc6611665acb6eb719559f45a2b1c3879d44db728470cb3da361219b146f37d67f760c53efb8092e87046fed05f8eb3bb17d5f83874bb698533f7e644a4bdec04c29480b0c1c5c089d16ddf9e509380515360abdee8d61e7a126d4d865940ec8808d0a0e3388719f5146248f1a7b41bd14d18d14e10cd561f461f466518851a4d8b6638ced5830cd1718ed68e8a79c73582942443d1f8d9c47b7ecc7003d86e1371642b549e82241c92d2e40dfbe5908b6795075a619d974efabeb0f9c625a60fbf33d131bef9a7963eaa1ba3614b84514951540b748683c508de387ebb1f96c23f8e2245c579a8e247a102f9297496d045ee8e5bfc9d87d63dee60988c17108469404a6fd3c4b4e93f15f127829b1f1c5d3bd1c919d3725e8081206891cc053045b0311ecdb770ae13d5fe18601991835a61cd6d25ca8ed1e1ca96a42465e362c9d412c7ef9d38f0d372df9de90430ba68e18164b12514fddaadb6121ef8a38d5e081271ac30935a0f52d48d699f1c6b3c898704451891abac9c41bc6306399d18c460c004b5a8179d8004520f9c4670648f69df237e0e9cab65ff8c43a6c634bd575bec51b349d3e5c8da2a00f769ac707e4b9b9603844c2c0a36f5e163c359d98f5def6d946252e70396fee93ec7c283fcd956293c494683c2eee3adfdadae00b9c26838364b39742154af4018999856e538805f2a53aa28bc6a04b374bfffa60e59831902a106727ee59495a858ae29cdb0a935d6e4ee0a3de9e90b7b9277cfe7477cf53ff07586848c87edf39150000000049454e44ae426082') +DISCONNECT +/*C162*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C163*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(21,'Performer','2016-12-18 21:12:00.024000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000e194944415478dad599095894d7b9c7ffb30fb331c330ec3bb229026e80882c2aee46a3d5282e89c69898686c62d234b63126c6f4b65572afda187b937baf75692aad1aab9260a3e0be55511023554196615f6660987de6bee7634cf3e4c97d6e2354d3f3789c81f9bef3bdbff3fedfe50c3c3c82e170387c682a85426137cd8e815c9bf7cf32da6ab506edddbbaf60c7471f4d292faf50399d2e88c4628485865a57ac585eb2e6e5d5f3040281f10707e076bbf9bb77effeddead52fe79b7a2d3ca1580291484ac64bc1e30be973276c961e44458499cf9c2ec950a954653f180083c1903263c68ce367ce9cf51549bc20962a2095a9687ad37b39842209dc2e17ac66238c1d8df0f551d8ae5fbb922893c9fef6d8018e1d3b563077eedc1f9b2d569e58228397420385b71f549a00a87c8220f7f6e580dc2e274cc636b435de41736d258627c5b5157f71cc9fc7e3b91e0b0093cc6bafbd76a1a0a060148fc727a97841a6f421a303a1d685411b1005ffd078f88745c35ba3858b3cd0d9d68286bb3771afe214aa6f9dc5e7470ebc959131fabdc702b061c386920d1bdec9e6d14a4c2252b91a4ab51fb7fb5e0a1f2835fef0f18f4460443c82c3a3e12593a1db6840537d0daa6f5e44e5a523c81d9354bd67f7aea8470e505b5b3b332222e210798102540089971272952fbc08822f10707a674348012c21f9c8545ac8088acfe7531cf4a0abad0e8d35e5c8199b5affd9a183a18f1c60faf4e975478f1e0d61cbb0dd67d261da275dc16eb3c0e9b0d2b4936c9c7f7f2073154d97d301075de3b05bf1c1070547d7ac5933fd9102582c9630854271dfe97472bbcfb28c9264c3dedb2c26d8acbd64bc8d339e05aedbdde70de62d06c8bdc2cd0135373767eb74ba538f14e0dcb9736f666464bccf0ce00b449c74640a35ac64bcd5dccd79c04dbbec22c339898119cd4ce6fef37803c8cdcd6d3971e284ffc3daf1d0003b76ecf8d3ca952b673300b1440eb55f38b79b2c455a7b8d908a05d0a995dc6e338bdb0ddd3059acb0db1ddc6379fcbe4797dfb8f1426262e2ce470eb07efdfa53efbefbee58be40c8659da0a861e825e3637522fc64d1140c4f49845ca9a0001673606e6a254cddddb85676036bb7fc17aedfa9434ccc2073e5cd72c5c3d6807e016cd9b2e5d8dab56ba730f904450c4562fa2c24a93bb1647c1c7c7ca888299594526514dc7d002e276b212c307475e16a593996fd62370a36bfbf373f7ffea287b5a15f00858585bfa5cafb9c90fa9c8491533071ce0bc8935d4248a01f7c346a0ec08b019007286f92079cb09384ba0d06547e558535db0fa3b4a468d863eb85aaaaaa96c4c7c7ef1250fa1c357e29e6cf5f8cb8ee620405fa434b1e60f291c9e5103cf000d504bbd502639701b7abee60e39e9328feb2a8df85f4a1172083a807939b5c6e1ed227afc08f163c8be8964284040590079884145cd515492414b07c2e955a4942c6ce2e5454dec6a6fd1770f2c491c707c006a5d1f62b7f2df3499ffc3c662e7905e1d53b111ea483564bbd904a45005edc19804fb581d503abd982b6d6569495dfc2d6937a9c3cbaebf102e4e72ffc5be11f0f0c1a9a311bd9b35e405cd7310c0e53c34fe74b004ac8380009d73ab082d76b32a1a9a919a7cb6a70a8a2cb79fce04ee16305b872e5caabe9e9a3b7b0068eb5cdaba68f404a5c1802fdfce0ad56110049482422001e97ffbb8dddb85fd780cdfbbe40fe8a170b17e53f35efb102b0515151b162e6cc59dba46eab784e6e1a12a2c21014e0078dda1b72ca4262026095d86ab5a183f4ffd5bd5ae42d7b75715048e89efe3e7b4000d8a080564d1997d512aa924892068573a954eba3869c3c20140a38809e1e136af54d881b3bf5f8c8ecbc8903f1dc010360a3baba7ac1c29993f7a50f894554b03f34de14035e5208a9adb6d86c686bef822e7668c39c6757c5525aedfdc101b091ffc4245bb05222eaa66ca320e36552760676c340c11b1d1b6f59fdee169ddd66d7525c74f205fc7e7f233120005515552b0ab715ae36ea8deabad6ebc1bfdcf434cf9bf4dfd9d9c905ad803ca0a1cadcd4d6e95eb66e87cdf0955112ae0877e7bf987f69d1db8b164be5d2873ed0f70ba0a3ad63cceb735f3f505172c32f504059872f87835a675d84046ffdcf3c782965dcea2e6ae22ce65e92582d0e159f42cb49aac87a29f48e56085422d7f6d2ed6ba253a2b73f5280e6d6d6bc17c7adfacc76cbe0e52fd0402d5442c1974221f082174f02cb8876844d90d1eef3b922c60e3342a190cb48fc8b32c497a7e0cf35e75062bc0e83d0848faf7dbc3c7470e8278f04e0e4f98bbf7ebee0b7af4517b522c6a98546a8804a2043843c00a921c3a195fbe0685d31a237520526000115310119cf6a019fc747ef6101920d53d05d7d1f252a036e5c2fc53d779d6bfbdd0f47c8bc65dfbbb1fb5e00a72f5d79ff995f7ff4a66f4c2a920b4a112d0d44b0448bd4f054c893e3e0ebad83d8c687a1ec262ac79d41d4f800ae916310ac1f620f6bdeea46bc391527d41d38f5fa60188c26b8779d464cc3fd8e5587576aff69002d6d6de33296aefed237733a023aa448db7916e9ba64044c4a836161142c8122b80c2ea4ec3741d329c6f9aa4f91bc2588930f6b25d87746ac1ed4ae754166d3e20fbf1a0abb560c271dd8da286bddbd75054b8786ee9a3338e2990107605f5e3df9d2ab2d7765c1da412372107eae1db36e3aa0792313b2241577b6652b39e85c65e9712272bf05bcbf76c2b8e012fc12b57d9fd305edb5ed706c0cc0d18511681a17082ba558859007fa878a9616f8da3b509095f0bd54f10f5d7cf15ad9cfe7bdb76d63642e9dbae2d330869ab5211a1e5412c0492bb05d642bf1d07704b69b5df0feb0098ece6a04ff045f7f706957399cf5d9f8fca709e8b09a6175d810aaf046b8170ff72d2edca9baea9814a6f97071d2a0350306c0767fc2d29586f6c00445ccf01c8c8e184200020448012bdd4daa81958ce6d194f20131fb868e79a3d70ee5d6db90c637c26f82823b8d152e2bc39d5f3e87466f17d58546980d9d184ac7d1549d0c66baf78bea7a0c119b4d3f4f8f550c18c0d51be56b67addfbc3972fc6c24c6a52137c41fc9de742335c23576a0ce06f4d8fb0c57d3ef343415c23e0881c309d1bf5f862ca41e174a6fc09ab91c651375d0b737a1f2c01ef4d4dcc6d8e56f615a421c3464f2a92e1bccadf7dcff919dc01f308005afbcd1580e7540d4a8f1488f4a428ebf044154a31a9c242da31b375a5bd0dddd05b5428d109516a1322174e23e08caa2b0d375ca3f3440a277a1f0d960349a0d7426a8c5cd8f0b60ef312269ee2acc4acb459c2f1f5f3908a2f2ba7b7a88f2378b92a257f71ba0a7a72731fec945e52113e6227ec868e4864722cd873e20e32e9980e3b57a94157d4a795e8ca0a1a988098bc3206f6f047a91d11e001b3da18b205ac8b826ab0b2d262315c2065cffcd2fe0a4f731d396606ac60ca4054bd04ef71caa6984a9bbeb83839307bfda6f80ff2e3c7070d3d133b32232a76278cc288c0f522146093492ee8b5a6d387bf618aa0eef43cc8ca731246e14eda20ea1721e7cc8035211b511b4ba9962a38bae6f63002437bda907fa967a5c29780b76631707303e7316b2c39570515c1577504aadabbe4a0023fa0d40c1dbdd1a10af881e96858cc84464fb0ba1a1cc5366060ed7e8e15b7fb971df279f040e9ebb12c312d291a2d3205c4eb1400062415f86627d730779a099e2a4de4a31d36b82beb51e759fee74555f39cf1ff4c452e48c9d8371915ac8290e2e10f1ed7b958e4f26248afa05d065308c4c9cb7ec7268de8f903038033961611845f2b1932c4a0d6e14555cc3323ffb81977ef6ceec84a75e2280d118e6e7432d0505320188047d1e3091073ac9034de481060660ea45030174fee580b3ece03e41f4ace5c8ca9987095101d0aaa81ed0754595b7b03f2f2e582410e81f1a60ff91a23deb0a8b17468c9d8a14924f6ea037e2e801cd64cce7249f928b7fc13b893eebe6bffef6fb09f35f42ca9031e4012d226917d5b47762d2b39b01d05a9dcc038e3e0f34f432800628ef95990e6e5a278f9ef33cc6e43c854931a108a0ec7697d63f72bf111bc279cfc48604eea5db5d9ef9fd0016bfb15e5fe652054651e54da3ec93e527823f056715e9b8486fc4f92f0f20b5fef294cfef3615854e5d8ce44406a0430401f890cc241e09991f00383d1ee8e9a534aa87b6aea2e7f7eb7eac600063272cc26402082280fb744f5163176698ab76cccc4cdb44b7b36f83ed9e579be7d5f1ff02444d9eedf6cd9e89d8c40c64860fe2b28f8476f63a89bab8be19b74b3fc3d5f7d66405644e3c1532ed69240fcd448a9f1fe701262189b06fdbccbc3e009685f454f1ea7a2dd0b7e9a1a92b37fdfecd97e5d1b3fb00a6c58573007574fdb1662332eacefeeee927a66ef5ecfe03080660a1d9ed99df0db075dbb60d5b4e5e7d3b7cdc931892908aac207f24a9fb52e2e51ea0a4b61635270fb8cf6d7c25273c776a69c8f4679094341629fe011c808f2788ddfcbf67a1168f071a4c66e83b1ad15b76da59fa6f3f1344cd5e81ccbcc598161b8910daa47ae681961e8cb87362eff239333ff298e4fe8694184027cd4606f59d009b3fdc79fc3fafdf9f10317a12e97f38b2fc158822c3ba68990b74923d5773078e8a53b6836b9fcd0bcb9a581a3c63299292b30920b00fc023a1af0168b6d0fee96d0f009a20aeadb0156f582b0e98b40019794bc803d108d3d0357c96a24d1879e7e4de65b367ecf018cfa6d3e3092bcb31349bd9cfdf09f0dcfaf7ee5fb4cac298fe47462522c357c4f53e2c802f903597a80570969fb21d7ee3f99cd8bc27ce6af3e6f31293b390ec1fcc0168259e3a80be1830ba1f488805b1198d04e0a5afb29ddfbc5e201e9127183d918a59422cc2c8cb4d0296244c18537f76e7c2a993767c43f3368ff1cc03bd9ed7ef94100f5fff1108d26f7d46cbe31fcacf0338ec9edd7f302cdf36f65f7a0c34c037bdf7edb5ddffc775fd1aff0b4133b87c2e8beca50000000049454e44ae426082') +DISCONNECT +/*C164*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C165*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(22,'Push-My-Button','2016-12-18 21:12:00.025000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000137d4944415478dacd5a677854d7997eef943b7d34a399519750072121104da24888222c534cc09438d4c58f6308c1b83d29ce6e6c6fec645d1630c68e63272636c6605342b109c52044078b5e8450d7681849339aa2e9edce7e771cb279b2de5d81fd3cf6e10fe29e7bce79bff37deffb7e5730d16814dfe65839569b5c982cafb4b8fcf6412929c71ff9f335efb7bac13f0de6db02f0caecaa7856e0794f12b53de80e8925a2689049d2197c1697e89a37c2fef4977b0ed57d6f01bc366fda181de33e9c101f5638fc11383c3ea46b04484bcd855820c4f5fa3b518758ffb3a848bc76d5fb9f72df2b00af3d5c5d569c243a23841dce4000018e438f3b8264bd06954373d062ec8642caa2a3c38e768f6ac7aa2dfbe67d6f006c58324765107a3b4b8bb4ea4b460b1adb4cd02895b078c3284a8fc3c8c19970f57920140ac07151587a0238d31258fcf31d073efa5e00583777ea1bc306889fc8c98cc3d9c61e745afb90a212a3d9e245497e322ac70d012710c3d56b83cdd28370288236632474d9e81af8fcde9ad6ef1cc07b8f4cba583e32a52421598b28fd3978ba11276e19211733786ee9246853d300a91261af1b1df5d761b3da209728516f64cecfdbb0adf43b05f0ea9c29c2ec64a965f410bd561ea7844c2a41988b60e7c95bd02ba498563594a2af84402446d8ef86abcb8cbe3e0702be108c464ff88619c94f7ffcb9f53b03b07efe54517692d456526c50a9b52a449928643229843209108922229440c82ae9df6972d08fa0c789de6e33ec76070112e0589d63d733bb8e3efc9d01d8b87086287f80a2b7b8205eadd4aa2120ba14b06208c512302216147a9a25201002302a3538870341b703c6867a443906172e7687da9d02cd2f761cfe464277df005e7b649aa02045d936ae2c255d93930bca1f8429f2fc72027a1e080620d3c8e13675e2c0e1e398bd601eb1110b9bb1016e9b0bb79b9db8d9e84a7b72e761d37702801fbb9e9c5b5b3632a1224a3caf4f4e05ab56d2820c389f8ff07871e2afa7b1e9a39330a88458fdf40f9135ac18819e2edcba7009bd7611ecbd1eb3c91ac85db3bbe6be6fe11b01d8b17aee465d22b76adbbee3b09bfc183d4c8f91a38a317ae270bcf4da2e1cbd68c6b3ef6d47d027c2800bafa06cfa0440c4e0e6d96b8804c3e8e975710d4dee21ab771cb9f9ad0378635625c3715c31a5431ea5ec3c562858190a47d927f7d576f1cfd7cfaa94c8e5eca931635247588c4e34643e0493cf0b41dd5f5191e8c0855b7790f1620d426120aef675940e082221370f1c4438bdff24b272f5b874d5faab875edffe5b7ebd75332b044201c34422510d2380fbc9bdc703df08001d706c82863d91182fa5f244b4db11e4ba6cfe96357b8ee5f3cfb73d3abd362f3baec2138e42210cc23ce96534fba5605aaf23e9c8bf61c8d82138dda54742a003e38ae490a6e440966880f1f26d5cfdb21ea51505917d9fdf36b81d5e07b8a84a24146c8e538926919cc8bc8148a72fc80d7a62f731ff7d017873f644b156c5f6e6a62b557a8d8c8a9383d71fc2f99bb657577c7ae4e7fc9cdfffb06aedc2f9854fdd6ef76260be0196964658fa44f08618447d4e144d1c0bb9df4cbcef0723d740add5422093e1faa98b3075baa2a386a5327b0f3665592dee24834e7e262f4d01ad5a8a08efa57a036835bb1bfc41ae60f55f6aa2f70c60e3dcc9830666aa6fa6272a981079188948843e8f1f17eb7b9ff9f1d62fd6de9df7cb5965ef2e9f31eab1ace21cf8addde0fc1e48a4425cab6b47c6e812882532c8193f44512f7c7e8efc50045de65e34dcb4710a8609d77738478442919bfa3849e3e8e2846caf2704ad4e0e87dd0f873b84eb2df649abb61fa9b967001b664f9a56362cf1739d5602372daa908be0094470ea7cd70b3fd9f1c58b77e7fd66c67869e5884cfb9031055295820c5bc88d0001bd71be11451523e1e504601906018b89044e00afcb058f3b8853177b3a9cd668d1d37b8eba6237fef0a4a915a3920f8aa8e002b48f365e0e3f15f985ab969b16735ff953074ed9fa0d60fd8cf29cb444e5d5c1c549727dbc945220429114c1ed0e1000d3daa51f1c78e6eedcdfcf9fa29a322ab59755a8c5da6c3de42c07aba90b0d179a30665619185606abd98596ba2bd0a7aa112257aa206bd1d4e677991da2f8256f6f0df3ebbc3d7fb2b468a0de919da196b85c411812142476515cadb720ec70071b4cbea227f6d636f60bc0e6a5d56b8a8718d68bc9dba42629c81544c190340583215cbedaddd7d2e64c5cf9c961ffdf6a8539d37e67e9b11653e11f574e5f58519a96dcdddd05636b17ee98a2109070212ac2988906dcb8d681dcac44448896aedcf638ed3e56bff2cf7f8901d8b4a45a989ea63697141a0c02b110618a3e4b41bbdd6c478404b2b1b977cde24d0736f40bc07b4baad92483dc3c64b021dea0572018e24841012171dbed165bf4f46953c9aa1d87affcf342bf9d3375c994e1f11fe80c6230c228fc5e210e1de9c03593096e12b5a5d386a3244b8f6bb7bad16e0ad73cf6f1c14977df7de791a9eae2c204cbe0413a42ccc4822621203d3d1e5cbf6d7577f7780c8f7d78c0df2f00b1229e5f35674279c6cefcbc78102f13cb4521168a281256d41c6f1fb1fad32f2e7edd62ef2c99f64659a1fc09999c45d39d6ed4105deab51afc78f64404bd1e98ad015cbfd10b26ecfd62d1d6935577df7b735e55d6d8d2d4a682413a016f47047424b14488f68e3e1ca969ddb272dba145f754c4ef2eaa66890cffb3bc3cf3a70332d47403c2584775f1a2d97bed46b7eef12d07bf361aafcf9c302e3d49727250ae162aa5146a15b1102b250208a0abab07dd5662a14e1bc462387d119161d996a3a118f01f3d20cccd5459cbc66469442221f833f90221d4d4b49eb7583de52b3e3e14bc2700ff0de481572654663d9b93a915b8893d6a8fb79d9ab576e7f8af9bfbc683630489c9da7d4aa5685a241c4661ae0642a25fa27578dd1e78bc3e987ba30812189652d21bc1c9803f3a7df9b69a3efefd3f2dae7aada27cc0b359d90684c311dc6eb4715fd6ddc979f483fd6df83fc6ffeb85f63c3bf74f0f3e90bbbc8bd884aef3f97fd9b4ffdffff1f9ab6fbd8b9fadfa31364c2c5e37baa2e0c9c145093877de040958a4265233433ec461b7a3c7e283d1eac380341524ac886cb710f6be40d8d2e57a2eacd4bfe61d582a496e3cf4e90f7e50fc90582ea7358cbe86dbbddac7361f087c23003bd7cc3e377346fe6863a70b274eb4ad59f6fefe181bac7fb08cf1a60f1e5db4e2998f8cdbdf77e6994f17650f1b28d118e4101183eddb770d2137cf260228950aea110410304168e324902824d4fc8821209de873fad072a3dde11f375798565e2dd51cf99d7868710a9ada5d3879b2bd8cd2f5dc7d03f8e0d1e942bd5e61a99a9aadede16fa0b67dc3d2f73e5bf3e6acca2c358b2f8391a0ae72fd368418212caf2e2383960801596aa54a8208c3a1b9c1062155a4a7cf4b792f8044c642ccb2e08b5c443f0b28bf2201d28e5b4d68541545a7fc7a2d7376d33a54c437512f1d87cff637fe66d1bbfb7e7ddf00b6ae9cc91a12548e091332658e5e2f6a4eb4be6feee87b263941d635a24027b1b6b5c15df9138c9fb500352faf465eb819b2cc2cb052114599058930797e2f2cddced87af1f14a28e2a4d4bd09108d841122950f7802e8bed982e6947198f3dc4b3876e8200619b72235270d478eb6badb5a6dba6f50c4d5d2fc7c9d73fcf80cd6e30ae1f091a6addd6697aeb22c656a126984b9a5135dc39760d2acf9387ee204425b7e85a2929c98696329cabc828749b8baee1000da273e290e0a4a1dfef34ad01b829fd43de8f2a1f17203c2535744ab973cca9c3e77018917d62367702aeaafdb68ddd6e5ab3e39bce9be00fc61d10371438a12aca34767887cc4425fd4b65c64429121a52352c472326d773a4c30172e43e5b487e00cd2f30d2f61a8fd3414d9d954072ca494327cb36feb7591ba72d0ea5560892643042a48910fb8fcf0dbdd387fae01435fff04430b0b71f2cb2b90d7be826123d26123dd385adbb67fc1c6ddd3ef0bc03b0babe78e1b93bebd60b0015e6f10278eb77bd42a89bcb828811153cfded56e4647f1e3282f9f104b97fa36332efd623646e569a0cdcc4094f29d113054a8fe981355a9a410513187c8b085bc0144fa9c68bd740b2d450f63f1af7e4de0a8d9a9bb86c0de973061fc004420c4cd1b3de1ba8ba6a4c7361fecbd67001f3f3ef393cacaecf9890932f87c619c3ed7099d5686c18313211670686be942cfc867513abc28d6c48b49a1ae37b6a1edb34d4833d62231391e42a914be6024c6edbc3d1012101ff5cc7d363fee784827464d47f99215d01273f1aeabee4a3d7ab63d8fa9e519104a5878a84e8ed5b6dac84ea47e9d80feaf00feb0f001c1804c4dd3f83119593c83f08274e9b299d24284c2417a52678eec6e0f04539f43c9e03c78a99d1451efc6d2817bfc015c3bb41ff23b6499425e44fc3e70744522999c00a9c00915f0c8e2a11f3a0ef9b9032023a5f7d31c9954860b371a60f9e40594972441aa92d34938749afa70b4a663e9639bf77fd86f0054c0ca11c3936d45850962fef0bca1bb71d30227a5c378badeb0d78bdd27add6bca52f6a8bf333855e9f077c1ef13658c27f1f1249e0a1680729fa41571f427e3f64f106e27f1231622109459b669332fb11a279fc4f320278b6ee321c3b5fc6f8d274c89572aa7d8ecc218363c7da3c6d6d8e84151f1ff4f60bc05b0baa664e9d9cbd37332b9e8a2e0496d4b3b9c50e93c9858a89d9701abbb0a35efa45c1bc9f8c1d98122f97d2e63ce380ff12c72f49fc2f207de05d2cd941aa03071d48458717c60ec58f089f34b14f7788f91f854a4576e574c4b6e537ceea6985f172aa19de83b1e43d1a5b6ca83dd6fe0b02f04abf00fc71f103cb264dcad9949e16475d5218127287bc1af3dff9c74fc882a9be9ddbdda47a7dd4b2a79e62faace2acdc9c580d84c3e1af2b355a2348cf457449cc3fa500625fc2786d60c9f81dae3dd567dbfbd689591352a66b1334b11be4db544bb70f478f356d59f4dee78bfa0560e382aa895593b28e66656ae8501c44944377bafae8161ca8a8cc42d3d58ec8c16e43f9c8f98f1e95043dd23e8f07d939d994c78a586c393eb27f5b9ba1c3052885f8bd241209fe714f01b19440c0a715437ea907f51d669ff9d89e8bd5299671e9f9c44454fcfc1df6796266f2ccbc8d7bc6f60b00351909634ad3cd79b91a4124c251772584f98e0bed4627ca27e6a0fe5c2357eb4834684aab5f98525ab2baee421df5bb1ea4a4a6422a9742423520e2234e070b9135a6961e522a5296a8f5eee0f70e527af639edd4c199c1bbd8c49c82c0a5adefec2893752e2c2ecb43848bc6e685fc645fcf1adb66addb95d53f16fad154b6b040ef1c529020a535e806a2301a5de87506503a6100be3c7c337cc19ba48a14948e993e61fcd100d9e40e63077c54dc1cef71c82a88c5523ab0387680c464f2498c88a8b7f9ef6945e511ab2f866a452e97202d351d2e860d5eddfaf60bd9dea697478f2b60a45241aca9e25bcbb37526fb8cb5bbe2fb05e0ed05530419e9ea8e91c589a97c43232226686e262da103158fcec081ddd73d263ba7f61557c6958c18694d4c30c46e2ac28510a688fba987e6d383a594118b445f152d3df707bcb11e9b897d05666237226625f45726d6383574f6f83b0f6d9d92eb6fae4dca4c160e48512244ef8549fceaae763967aedbade917007e7cb47cda5fcb862755c791bbe4e9b1b1cd01a54646b91e8feddbaf7eba7cf3e1056bd7ae1325a5a5f516e4e7ab8324660c1f56feb3ba1031cbe076b948e4825092c7e7cbc2453ff3eda946a78bd515bf3f7f633c75b1626a45cdbd1ecbf13d19f9c146b354ad65b33288b9e8bd200fe05ab76dce5bfb74fd06b061f6a4152545fadfe7a493f8d0b46602a04b54c7d8e4d091db6357efaa3d13bbad77feb8635871d1c3fc4a1c452b46a53ccb47c3b0db9cc4403ec46934317aededb592c99320312181f89d6ee6ee7c3e4d69dd864eb3d175fe48a6c17cf58a2ed550946a9041a3e6153988f3977b6e2cfcf381a2fe039833511027675bcb86ea32e452315adafba04952a2d3ecb1b5355b1356ed3e1e89d5cba6cdcb871415fe29e2f750517ea5050c453742f9cd77637c6ac4c569490da99574b963b72953286282f6d5eebc660848c86468b438f72d9e51f5d03b732716e8748a9bc93a29b2a98beb307970a9c17a76e58ea363fa0d801f6fce9e9862d0483ab393158cc51180878edc63f5cefbe9cea33beece995b35b6a07aeed21bc3ca27331c3149381488f97d9e55ec562bcdb7d301598488125d64e0e2346ae4e6e540c12b2d09012314c7f4c169ebc5871b5f7977f3f6bd8fc702b36072ad41c356a42728d044046271043f7c6277cdd27b02c08fd7a7973fad92899e0f47a2be4088fbc1d39f1d3ffb8fcf27e7ca259240d49e3eb4449655321652b50e72751c29af8698cb049fb31d2a899f723f14cbf770540977400d5ebda5c46ea180877a8b5bb873fd0cda5aedaf9e7746befa803c778a34140ced62c5c2719128d74b6c54f2c49e5ae73d03e0c7ba872a78ade1d6ec39feb52f2c1e91705be877e639fae8b19052832677da388c1b9f8c7f7dee1168060d85589d49f52d44d06f84b1a1113f5bf23b78babc9093f69153a1de99ec8876c0bf7d5073e5a5bfa731ff7b8a28bf1aedbdb7f67fecfdadfd678ff199bac97a95e42f94112a3eb3f9d4e8eab2e3d967aa3063d96c0882d41b50910a74c9943271e43e1df88f275f44cdbeb33024ea6337130a73d1882679e2fe33976afbbbefb706801f53721359d29caa08c73c28160972bdde70ba5225889b3b6b902c3f27858dd7a8849c908df63aed811b0d9d8d9f7e78c5cfcae5de482464254ab5a912123fde73e6f2b97bd9f3bf00685a7128fa65e8ec0000000049454e44ae426082') +DISCONNECT +/*C166*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C167*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(23,'Ray-Of-Sunshine','2016-12-18 21:12:00.026000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000150d4944415478daa55a09745c6779bdefcdbe6934daa5d1becbf29ac491d738360e0e31cd02049ca59c1ea0a481d2d2427a0a3df4a44d6981b40438a465695902244dc10910d2340eb1ec24762c3b8a7759b2b5efd248a3d9f7f75eef3ff3c6565cbb28edf87c7e6f66de7bff77bff57eff48d2340d2b7b758bff8cfa1b33c5a28b8962d3cfc5e7927e8d78708a92a624288a7eaeea474517f13e73e57ce70af5c9bda49501e836e88a997425ed1417c5a18b53170142d66f124a2575492c3b4febc096835bfe9da6035991657f07806e4957dca82b67d715f5508a7511e78594829c27248bee00a15054572ca22b9a5736b64c4294c0b2f77960da4a40fc2e00b2aeb855b7b49b5249a9a25450aa6970f1be968ff2d27004a8092fd163123d2053396d8e9f2fe9ca857530c165b24899d58f7e1d742c0762a7faff009055dea82b2eac5ba64b434ee44e1e292a3fcb987386cd873472182e479c895f6804a4e9a1231184b6c0f3711e07789ca48c52a6284bba245702e23a00b2099b4f4eb76eed3a4a3da583ca31d3327c9f20c838aee424d7d214fa9ecfd4187992099294cf6d1997c33bfbcad6017e60a4e2ca6ff9a69f7291324d99d1432bfe7f0560d40188442dbfa2385aa9c86e1a91211396f2e1aaa969649249241309645269282ac1a81264830146b31926930d06b311069311b26cd0d7c847a758c23cc21bfe8b27672823ba2ce8e196fadf2ad335005c0e1dbb1e325416ab281bb8e87be8d99a5ccea5a0aa31242231848311c443b9f3442c491049c4a26944d514ac360b4adc857016d861733b6077f258e020289156920ea288621da6277ea17be1bc1e564bbfcb0bd7022094174f1795c5ab2bbf8ecadf93b33c9fa90945c308fa96100e44b034bf84c85218b1701cd17812fe481c7e7f0c96691314bb064bad84aa520faa2a8ae0a9f0c05dec86bba490805c30c8363d523dcc11e32bf4440fdfbc4519a4cce74269a7b24200ddf9e0147e1525b285b29e97316c941d226c342d8868c80fff8c1f8b53f3082c8610a644a3092c466308f95330c7ccf0a60a50e5b02396ca60304180ee148abc16545796a0acd283a2cad22c882202920d2edd5ece713d948e50cee9f9b0984bb29d2b0660d37d5aa55b7f0b2fbb9be158068d8a867df08dcd62767c0ef33cc612692c50f1d9f9303c011756394b51516c476109e3dd287301d6c5401a236361f4a666e06e34c05be24129152fae2a457943398acacb991b024091b0f4015d4e5186752fa4ae174657031041291a55a91efbb4be7c1badff5e868e311df7c3373581a9a119cc8ece623118c2e252028939156b1de55853538ab45583d5926fdc1a14454349810591500aa7cff8714a9d86a3c680eaa24278ca19568d95a868a886ab90f69284dd4c27e985e7f530baa47b21b152006265b71efba2de6f64c9bc9779d4a6a80c9799698cf58f607a681a730b418c8d84e08d7b70c7da7af8c81c1e3bd08ffbba6af1feb55558622e14392c78eae8087e79620afff0c1d5682e75a2e7cd591c8b4ec0d36244b9d38df2da12d47634a1b2a10e268b70ba954d4dfb294f4e2c4be6c8f5f2e06a00463df66bf5f8df460fdccf3c7247031398191bc7f0a94b98f1f9e9812856a5abb0697d0506a271bc787e0e9fdadd8c8a0a17a2fe2832b497d36a86ec3061787409df3d78097b5795e1466f21de3e3d8f23915194365ae12d2c446d673deadadbe0296ba4462e7667f5675cfb989e07637a22675602402470896e7d76599999a37e405517cdbec9414c5c18c6d8458298f6c3e373e2b6f54d28af71e2d0c931b497bae04f2b6c6732d6747a612082a54018e7c68368293667cbe8e9f108baea0a303f1b434fef1c865d73a8a973a1aaa60cad37ac436553bbc805d208f959aefb0675388d5c4f583100513ecb74eb3381e53d74e79e6472ca38d5df8791be218c8f4f617140c18e8a06746e2cc3d8c4220ebd710e8f1e184480096d3448f8c33d6bf1d8bd6bb0fab3cf613e1487ca3536d515e16bbfdf85b6b65aa4e2092ccd2471746002e19a089abca568bc710d5a3ad7c3682d61bc1bd80f545151ceea0002ef068008c4561dc0edac60bb62e109c3d0d9b398e81fc6102b8f67de8ded9d752c8576844251bcd23b81533321743515637d731924561f6f9103839301ccb1dc1eea9b853f96c65dedc5d8d4d54a7a61403c9cc4e9f33e9c338da3b9a114cdab57a16563176cf6320290f7eb00cebc5b00a2840a76d99e0b21c35e6889ed41ffa87ce9442fc62e8d6370d4879b0cf5d8b0ae0212e981d12cc3ce0e6b7032fa320ad4349f9726ad48a9b03089a92db2b55453910ab243c733a4752ab474062343011c981940e32a0f5a3adad1b9691bbb74051356fa39011ca60e7d94a177134279006d943504700769fd76bf6f501ee83981b121c6ffc5206eaf6c47539b071a2d6d24bf812c413c47844f20104741597556f9c0f4146c82af49b941ce40306986593a43fec47cf14dc6f0e2850194aeb6a273ed1aacda4c00ce0ab6facc337a129fd59338fc6e0054e821b49a9a1140fad6a5f94b72dfd1e3181a1e81ef420277ad63c2d538a09071ca660906a3214b320d04303bb908ff5c1866bb1d562b2904c343126bc832395286fc49cd7a8997629e49fde2c93eb808600393b863eb2d305b8a669601101e607716f3c1cacae8f224eecc26b1a6bc37b03068ec7bb307172e0c223d64c0f6da0a543517c14c2b1b2d82b46a48d1a216979d8cd38039d1e46616d076431bdf9bb0c4b26b6275b23aac50183a2912be05e686c5e4c46f7afa61eb34e2a62d5d58d5752b698595a533f36b3ef438e50272d43abad24666d60134e7c2485067edaef0d298e942cf319cee3d0fc7a413ed5e27d28cf3f5db3770446132bed04d036b686960f4914a9bac26188d46c4a3c96cd89cbd3485603c8d2df7ee81d56e43dff1f3b0f09ae2420f7e73b81fa675266cbe651b9a376c83244b2473aa00d08b1c33150092d71b2fafd7c81af43c6023337e24199b71f5bf7514c75e3b85f2c9026cbdb50117277c484ecc6021a4e095e47a6c6dae4191cdc910d14822b2238d787c1698622dc0c5b70ea1cdd5078b6c4165b3176ded5ee64808af1c1d82bcc1861d7b76a2a66d13e33cc5e1467d99379fd4139823e9cac95c9e4a884edc44d94c00fbd44cd07be9ec71bcf19fc7e09db763e34d6c546e3b4ebd7916c9c5459c5ff3453cf8e97be0907333579e090911c34598ce3ff9fc73f05e78128aab1c8dad35d9f9211e4aa2fbc8084c9b0bb1fbaef7a1b86215933546362abdaa975001c07fbd04be1600b19e9881ab70990b197f4f53531b27467a7168ff1154cfcae86409b533de83ecb499d01c16470d78fbdeefa1a1c2884c22994d66039f6464f9b4163871692c8686fff82cbcde30ec55f5b0b2fc2662092423191c3e320cd77b2bb1fbee3b39ec7869ed2467021cd4014c204ba7573e0f08a3894a24e8443d2eb351698fcfd7673af4d36e944d24d1baba3c9bbc669b194b8b015438e378bcf766b4fdd943f02c2c403318b339e0745a11a41cda7b1fbef880824b51335a56d5d3f271f60205317ae0b7870651ffe06aecb8e37d2cc91e1f434850e943c8f1a051e4464bf152af95c8cb00646701e1813c1f125e602fc076da726f2c355372e8472fc376661ead6bc9df2d4658382e8a89acaab504bffeeacb3850fa616cfed2a7610b04616283cb700aebfdc71fe2fef85368bbfb162c4e84e02a7664935bf48109f694a3d3d3b8ed73bbd0deb98515c8c62e9c1103feebba07867500095cd9d57bc7a6970ee0f2ce9b78e5c74901400cf25b444353d564f56bcfbf84f97fefc5e65dcd90592e8d649b290ef2ae22176bbe8aaf7eec699cacdd8bf26dac26a29cbeda8dd5932fe1af5f7818fe8105d26503d4940695d60fce45d1737a1aa6f738b16bcfad28a96c6305725039e52ddd9a67f42a24f68ce2baa4aef604011c94f4bc33e2ca302ff681aa91a31437d3311c6864af3f3888fd9f7f1a9d0e1b6a498dc50e8398ba84df0ac94695741a077f70102313d1ac3dead9ecb67d640bfb8383037f828a9342905204666278e3e4044c3759d1b5bb13d5f54da423c25e62a0498bed1491070288d833d2b95076532ca697d47700907500f9ad430757f1d01c2cea1a730037506ee5a454a46a015c1c7c1bc7fee610565514c2db5acccbc4dd1c1d25d1a8489bcb5d0c8f74eee16c62b1c52812e1449612096f87e6e3e8ed9b418ab57fc39626d4d454937a94d018a276885d4aab204e1ce8d55775c50527caef500473e174a52a0900065cd9b015964f90687d4bdc400598541a19a9d895107c6189d4388cb3e7cea2e7ef7bd0c8246e623e24a8b08d396166936280e4bc420f889ec01bb255291c8842520c38d23309e32dec257bdae1767be02e2da4f2fa6ee4e51d4c9baaef110bab7f5c0f2321be9c17de0940d6ef2cd07dc829163fe130db29198c3fe4251fa294e7b62c83590f0a7e3f333787b79fbd80c8c94954586494b75573482f462616cf669aa42959e5a93d2d6fc4d0b9218c8e8550b9af156bb6d6b10b1766ab9824e737b3f3919c0722d2d0ccb2aa7d51f7802075f3b88ad8e50158f43bc4306fa282df9025791b4d38035963454a98723b7da95c0866ad6323ab3453a9308e7ff325ad3019d2ba6edb249b9d16266a9af8952cef914d668cf58de1e4e961743c740bd66df5c24e0fc9c2a1d9b6a72c0390170140f4d302b163f765e4e8c4a0ee81ff01205ffbf33bcf4534d99d3c7e0692487c61f9ccb22aa62cb352058dec8a4c2d5e9ced7beeb53ad7c4aca9981ddae929e49c60ca6e8fc6fd414c6634d47e6007c7c70e32ef453db4133a80e5ca63593a8a60b0b01a698c822c9dc86fb1449737b6bc07cc390fc82472520da59891fb9712e21db91deffc8f29f905730ed3143366fb4faa99825629ee0b4ba1de6e18c24b4872faa2116061b3135e28b86517bc1b598d63237078a898248c12ba52d691dfcdcc47b308069996569fe083fab93643481ad5133976ad2a24ee761147512a952e1e9b5aa8492ef9eeef58d371b7c164d1ab577e217d11d58ce0d95f612e6443d3d63fc1b11f3c81cce01be8ba7b4776461063a3b8251e4de3f49b97e0ba71270a0ba2282b4cc1ded2c595f3e1983788b08f81435d12fed9794531dbbfed292c386a355bd9c8145a3ec9a314bc561915771280d53a3236693ef8ca896dd6f1b77e565f6e71d634d6c25d5d07b3d34dea60c9ed9893462b0bb49e7f865c6600438906d4dff93524062fe0cd1f3d4967f7a3c2eb41795d959822317e7112f3291b363ff21802479f42a36904360e44b2ab021aab8f6cb4f23a85c91fe69c1046321cc4d2fc2ca6e682e99974e12f8b3bd77f7ef3c626c5e52ca34722fa5efe1566aa77e2237222a118bef1ad672c936f1e7ce681f5a6f7975795c0e371663760251b5b83c9caf86591d438552d85a18cd29b4a10638b83e82bf820eef9e36f677d3332388bc9375ec2f46bfb11599845f1ea6dd8fd854761b23b70f45f3f831b932760ef6881ea64bf502c59e74bac565a26c5492dce4c8823918ac23713c0a5c1053c3f62fb46eba62d5f7ae89377a63d9e622adff50e3e74990bfdf3771e91fee5eb3fb9f3d19d86e7d6d759e5129b8151ea4048b6c15b6e83b3c094ddac52532966421a6a3481f4a520d2b100fae3312c6c7c0c568b1986d9d761add9889b6e7f18698e8fa75e7f1181eec7219778d1a09d416d81954a3a6128754026151161a3a6985f990c133185503c89436763e8aa4e6637027a87a278e270eab1da8d9b1efdc98f5fba3e996b69af979a8cbea7fff676d7be32530c99b48c102d7476d10287d388ce1a4e50ec310e13675a95e5d198ab4ce969051172fb51765b35a18a9d770cc7ec2878cf1f9086cd4039fe321a2be2a0feb017796071739af3d1e229234ce546c86e325749d49e0c8165d03b90c481e351ecee143f9088c036e197e7d2a35f3f945a1d0e45a3d705204992e5a1ed05dd0f6f5037d7deb01ec6ea561cfef5119cec1de15ccb8a2c0674b6ba66d629839abbc7eed6505020c31e4c662beda462c590631f3ad6b6e1d8fe1f2238ef47fbee7b50d5d888f499efa04a9b84b980f35a8435e8a20daa9481a95441c02e6368512383953038272321d93049e6da50a2e2c60e2b46a3b6f883ffb6d89a51b4c9ab7fcf580ec0f957b73bcf3eb8de5cdfb8eb765c1c5ec20215a8f316d0321296a21918980b0eab11069a4c2e647fcb84e13ff202a65c9b61e378597ef35d68ddd0c1ef35b24d3f9b599a60338825558c8cf8a00e33bcac11846d76240e9fa4e26e1479cb90b09b11d54c68f616a3b6a30cc54de5183a761a93277ad050a66036e6d43ef4fde087e743e9fdda55082e0330c872e5771ef00cec6a49bbd47012177c0eecfaf01db0757442329a99705aae84ca8463a3f5a8e4c4b183381fda8a73bd21dcc6616acdea6ab2ce25c63641b3b2c4fcb32ca976b84a8a5904cc38d5338873e72791b9e5a3f08c3d8336e30534defd49ae9d86311464658d432eb642614ec96a18a31767113edd4d1a6ec3c79e4e7df3c470f4cf354167af0640eb4b06596afdfe478a4fdd501eb7caa6242af92093dd09cd5905a3bb9cb926438b87a1c603246d46d04188defc23324033a6bff709acbfb983659fff1415662ea8d85c98f327918a885f70fcb0b9ac585c88c02da7b0646bc4d6bff8279cffd5e36853f7333cbdec7113ac4241e6161322c390346b3057d5c1373e86482489affe56ea7efa78700ff54d5f0b0019a1d4f8ad7d15a7d7b812ce6226b1cd2a761618a326ceb79cae445f121b5462ce4d2c293867bd11b7fddd5b38b9ffc788757f8facb41da964869d37055b5109dc3575308ad2a8649088c630313a8de3a787b0b9a312a74602f8e0932f302ce318f8d34ab4d833b9fec85c53f43f68c8fe3c422218978c584c5af05cbff1cc130716baa86fe29a00447bad2fb53cf2473b0abfd062516d0e2658a14563cc2b747146fc6a9aa5291682f1cd44e15f7d1ff63ef2345efff94f31f3d457b066e31a363a254be26c0e07267d21f8c48616499bd3ed4098f482b640a595fda0bf0f0f3cdb0b3bbdfaecfde5d8e08ac0e42609146587ba88194352641a43c352da8018c3f0f1c3a1fdaf9e8fdc774d0fe8499ce5080ca5269b45de546833365415189a1c2694d6790c650d65666f914db25acd9a1c5b583258d7bddff089affc0a29c6eb0fbef031144ef5a3a6b40e365981bdac10251dcd884762ecaef426159d9ff1637a620e73f363a8bcff73b8e38187587e83f8f2de2aa5a6cca0a4257326905493d1a4160b26b4e87c20130826b5485c45281453c72fce259f64151aa2beca3501e820f25b39f9115330ab3c5375f35b272f30f116d9e1b0affed4c30f7f5c331ad3dfffee932fa42291813287b3b5adb4a8b3da6eae682b2baa2e74dbacf16452eb9bf2cf4c04a39303c1c0f9f948d4d7d07943e747f7eddbd973bc6778ff2ff63fa9e518638acf4de1ca1f85c471e52f5822fa31737519fd6f3fe9962867571c580000000049454e44ae426082') +DISCONNECT +/*C168*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C169*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(24,'Red-Hot-Chili-Peppers-1','2016-12-18 21:12:00.027000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000a3f4944415478daed9a0b7054d519c7fff7eeeeddbdfbcee61d4304e43da9b54a99eaa48e0a75d069c5c20c889d74ea6b0af2b2d371d016b56811a5ca43402c58a0a8cc60a9547ca02896904891524a95a48a144242c866b3bbc93eeeddd7dd7bfb9dbb9b9060008190b5333d3327f7e6eede73febfef7cdf77bf73130effe38dcbb5806f0c80361f4ea48c654858ca211b8a10512d08a90a229a0f128e42e29ab86352f21b07a0ade4c6202556432bba09aa7b3064b8119405f8423cdaa340584b22021fa25c1d81ac4607f6729aa47e2300b4f5a69bc097ac81b57214b842122b013e3fd0ea034ed1d12f8356803a7d394253c9f042c17c4e9236e51c40db8cc110866d43fe846ba0ba80603bd0de067899783ab67600a13410c5698018bb933f45774fe122d17d390550578a0b3887ed29f06479c94842152040166f8b420ba7a02535709134b8005b013e0391a06eb10026d326b47aefa3c9959c00fc7df9bd1ecff1c61d833a0f8e335d4126566898131c522d36f82bae42e7e072a816032c4a04255f36c0b63f487059b98200e4e737c1ef1fcf75741ecd09c0de350f4f30a5b9370b0fd45b6d412f4c6a120aef82ffea31880e298566304053d348c52488a9368cacf908d65de4522a4dc7d36a94962621cb3fe69a4fbe9b13807d2f3df288d9e15e0cde405655c0534ed18c74cebaaae9a332804428809492c090a64f70c5867f510cf099198b8b8154eae75c53f3da0107d836ab8a2fbdbaea15b323ef6e8ee3fbfc4e3a9540520a239d8c43a3ef94b61fc6557fd84b41cd65662c2800e2f1f99cb76dc98003ec5e72bf5d7417be6fb6e7dd00ee8cdb350da9b8a48b672ba05f2280e2e0e718bebe96e2802ef0748fdb4d411f7d9462e0990107d8f3fccc128bd35323d8dd237a5e5799cf4b21029075906e2606e023800d35946a693a13b9992852e692e6705169d58003d42e9d35d8ec2200abb3a2cbea0ab90c139f4e7db552d068950a7cc7e03ed48284d10ecf919370b4f8558a9d6a4e92370f3cc0b2d9434d567b8d5110cb99d555129f4e2688e3ecd581814a2218053ddbdae8093dfa950fa396f6cedbb878bc6ec001ea56cc2da703f903867edd7b0c661182e8403ce407974c61c49f7637e47f523f9e26f70e3840edf2394ef2f00fe874dcf96fce7c43b0bb60b2582177f8608c4a18facebe5545759fceb954f1170550b36c364f6eff1a9dde75dec1b9cc0fd1994f471e315a017b8bffd8b077ff36c5557ffc504e0058dbf5dcac47e8b0f82b83f4311a470f3bd1950f85e224160a46c5a6b6fbaa566f7bbd3fc45f34c0074b664ea0c35bd42de71bc5285820581d90421df8b2b9d517084b373fbe6147434e01de7b76461934eca2d351e71a8523f761e259aa3ddad88c167fa79c67b7de366ff51b7b720bb078269f467a1d9ddedb7bb0dec331ebf34623159e017c76bc052e9ba896789cd37ebaf8d5ad390560edad450fdc49d9680b0d20f4f5b9c16822f12684c3117cded48a745a4345711e1c56f3bca90b37be907380379fbabf40cbc4c1f7be322895ccbcc18808a5cc93be0efd5aa1db0ebb6826cfc392a90b37cccf39006b6f2cbcf72e12b4864edd3d076495901c4f221a4bc02298e020e106038f342bb51565f3d53b0f548fd8dfd02f1bfb4b02f8f36fee31928a5b49f14cfa752c456d119514bc4642790a60b360a4fd0b4f859e46e2551dc01e0c9f52ac96c5b228bc3ef589f5be9c0274b56d8beeb73b1475b2661156a635cdc944b3c64467c46bd97315ce401811b75d4d1b0c87544d5b4305e0d6bb9f7ead3327007b9e9f612187bfc560127e227a83553197ad3c6534f05dd6ee0540c59e21a1400c4be8cc73c048a585d9ea48c6229d7ba8047f9656eea3e98b5ebd60b7ba6880da65b386f146e1317bd1a0c9d6fc12bbbcb70611918742fbe1be00c8dab0f943889b4d88514cb0263a3db0d89c90c381603c1a7e514da7974d5ff44af0b203d42e9f7dadc164fe7ddee03163f3ae1cadbb86ff9d2d0883f60516016afa3400b914544585d8118146d74379761daaab31007b7e311252588d8502dbd34aea17539ffc63e36503a85b3ea78cea9b2dae4123aadc1523f5624d23919d073f867ca401b17c17ad02af436829daf0cb4918e53892b4e18f3a440282fefdaec676982e971b9ed20aaa976288057d3b393535f3a65fbe78ecb20090f51788eea2a73c432ac151aeef6a09398268fd3fa1b4b4c0d1ec83ecb44272589122978a8b022836ba5daa7b728277d06722652ba3d90a7b513914da924a81d6ede954aafa9687d784fb158076636514b01f38cb878d31dbdd999caf417721b67594c31de8f84f3dcaeb3e43fbe01274947a74df577bc4424febb334ebccc6031bc8ec70c35e58ce00e2b1cec0f4f10fbff897fe05583e7bb260736f214b1953e4d71d5199f6e806386c99a2341af042f27b51587f02bea1a5489040351bc06a36b07b36667dc1747a15d9d3db553694622685705bd3a6442474cfed4f6c3a6766ba2080ba15f396595cf90f49691edbf71e46827cfcaab202b8ed2246971740a21d97128fa3625f037c6c058adc7ae0328033adcf363b768b1994757bc971960c8260b1a1b3b5f148528e8c9ff8e8ba93fd0250bbf4410b6f32bf45e5f184bafa461c3ede8a02974d2f15e2b4cfbd6e6831f2288da69534f28e79913419102cf680bd1d52b58c0bf5b43f03b09985330028d57a4a60f51423ec3d118f878393086067bf0050f629a2ec5343813b6ac7fe7f23429985094a91e05822891bc654e0caa23c286471133dac58f032081d20eb46674e6ca56782a10700bb66b4ba68152a10ef684334d8f6ebdb1f5dfb74ff00ac98cb5e64fd95e7f8b2cfc8fa1f1efc8204087ac1e6b49971c70ddfa26c623a9dfb75bfefea2ab43ec664d9c7902d3bd88a1c38d28cda8616545e732daa8617c2aa84b72a8a3afd470bd69df535fc850094d1e17dea954c54fd092f1abd41dd8a230615c1e3b451cdaf66adad763f7dfbb27e571328b5321762e9d41f8ae2898d3b603209b8fefaeb119722b86584e7d3ca21a5e3bf3fef05ff25036421eea4c31a0ac6122689aca38b63c1a9a86ab7d8748fcc93f9bceff19878137556fced6b68c4dab7f7a2fa07df4548e1f1f6c79f625ad568ff941bbf7df38d0fad3cdc2f00acd52e9f3b9144fd8eac5cd94b70f7b9dacb7d983b9d6d12033d868d142b6c05da3b23f8f01f47f09de1e5ba5b6edab91fd5b78e53aa2a874c9938ffa5edfd06c0daeea5b34791c8c748e0643a5a7a8a3ed375227202660a66e62e672e04136eccc6004f30878e9ec4a94008364aafbb0f1dc58393aa924579f6ea490b5e3eeb6b988bae46773d37cb4aab7027099e4362c79258a39a2d9bbbac9fa40c15a08cc40295f6c2fa438f09edbd0a5d41cce18be6369ca28a7524c554249650ae2870bf9cefb4ceffe1afd69eb5a4b8e40dcd7bcfcc2820379948fe3e8d448fa3f3023af22c90a3b1ccdbeaae40d5d3a4ee32bd57e1f479f79b8d53e45eab096ed51d0bd69db31eeab7bfd46fffed03165a856104c220ae23885114dc652490ed97adc8bcbde8f9d462254232db5993a9375167ef8cb610cce1a90b379e778373d9fe5762cbe33f6305923bdb9d3d20ba5a3c2b3a9efd9dfd45d93fedc98dd10b99e7ffffec91ebf65f7138287c2acc2d170000000049454e44ae426082') +DISCONNECT +/*C170*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C171*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(25,'Red-Hot-Chili-Peppers-2','2016-12-18 21:12:00.027000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000b9e4944415478daed9a097453551ac7ff797949b3346d9aa42b5d522805da520bb25414c795c571900ab638e8810141390cee33a3cea8e3e1ccf1708ee2a8e3328003c21c18c13acaa288083a2c655a5b28856ed0d2356dd3a44d9aede52579997b5f52a6a2022d58c673e69ef3e5e5bdbcdcf7fdeeb7dcfbdd44829f78935c6b05fe0f7015fb622764444765a7461a340aa9560804188ef3b9a512702e5e7056b77b6d55cd0ef7ff1cc0e824b5aae0c6849c245dc40c9904373212c94896956ba53225c348651c7904cf736ea7cbd957dbe3f4151facead97bb8b6b7ef7f0180993f353e33c7a859a98f92dd2b63d92445a40151b129506af4904818f87d5ef01e276ce61638ac260802dc7d1effba7d95963f1da9b359ae250033636cccc4cc11ead7e37411d362747ac41bb310a94b80e0f7c1e3b28373dae121e2753b880fd91120d71104842078ab837ffed54f9bdf20fd70d704c0a090c64d336ad61b4744ce494f4f467cfa3832e252781c36a2b40d1c519af7b888057832ea010489d6b405c32fbe80505fd1e498b7b7ca7aea5a00302911d29bf28c9ae2ec51d186a8180322d41a103f27a3ed14dd86043082219d45a583f424ac7de81c42979d5fb5b9a4731d39f50f37001b0f14de94376a636e76a2dcd9d38100519a9820a470f0db37d3d10f8615c700282717d8bcb1a47315797b45013d1400b991952e79f0be3bdfca9b98c398bb3ad07cb61a766b5748fb0b40e86920209cd7bc9fcfeb170eefabb515753a78d3b003dc906478e49145735ecf1c330a1cef4387d98a9ad355683f572f06ab84762ba1a30fc8e48c08e1f104fad94438bf20d456b4bb0aea2d5cedb0032cb821fba145f367bd199f10cfd031e5bc04c26ac3c9aa53387baa127e3ee452d4f769fceab472d81d3e02279cef2420045b6a2ddc3d3516ee24391586a0c7d0015e7860e6f219374f795dad896224e111757b3c686c6a41f9f1e3683ad3400239d8af28d4913268d4327474bac1849f483e3635dabc0575bdde6f861de09d278a1ebf3e377b8d5ca1246e2280f7726486b2c1ed76c164e9c5917f57a0bda5ebbccf0b847094310a9d660f9c4e9f081108064d2d4edfbc4687af74d801de7dbcf0f1ec8cd435d44d027ebf38793192a0e8fb2e2f8feac6567c7db81c368b4374233fb1825ea780212602f58d7d90cb180ad6d9e6f6cf6bece38f0d3bc0da15f72c999091fc16d19fa14a4b42af6290fa49c6e9256bb643df54e158c969323ff842da917bb24747a395b811bd2020d8d9c90b45f556ee28ae602e18d23cf0878537cfbd352feb7d9695a924926f7742e381f707d0d265c547bb0ea1b1a183804940e37744a20ad11a19fa881bf181a0a59b0f2c24817c60d8011e2b187fc7ccc9d76f53c8d55a86f96e1702711927e7c591f23aecde7d147e0244b351848a454e4634ec2e1f5c5cc0d6cd0b8b6aba3d7bc957f861057868565afecff327ef502a0c09ac94399fdf07366a85ba731df8fbb6fde8eb73879e448a838c540d7133927a7d0167b75778b8c6ca7d842b58d40d692d74dff4b8bcc25b2616cbe5238c0ab94c74910b5b8064a7f66e1bb66cdd8f8e0eabf8248188810433b51a2b016ff60a4fd4dabc9bc8ed432e748604705b6e4ce6e219638a239423b3d48a4848a5dfef4636378faddb0fa0bebe25943ac975a59215ef8f2096b3f081e71bdcfe3f93cbce61051893a44a5d313b7d47b4367d5254543ce4acf4bb6e440a1ab73f88ed1f7e89cacab3e70118115642bd094e21f84a6b20b81a57b0a01b128056cd26acbc33794bac3efe367ddc68442a238882ffed4ac2304451169d647951bceb301a6a5b44409a4ee9c4268210210b8ebfb405f13c796b1b4e00da0ccba627ae8fd52ae7c62666202e360111325654528c07a2a5c5ee445d9b19a74e36e0dc0500fdb316493d6f840186d502b4690bb275afe935b2c51a8d127a02a0d7c742450a9b00c93016bb4b4ca34a12e075752d28397c52fcd2798060e8c104e0dd56e077d70220727a92ea259d5af6a49a04a58ae4f7c84805b4f16950a8a2a190b388562b20934a5159dd843d7b8e8a3581588d11538c9d3409c96946d45555edacecee7ecc6ab5b6618893d95001546395d2276314ec6ab54a0a6a85f8d464a427c5c298928c08b9142c8903ba06aa6b34e11f2413b95c9c68014362229e5ebb16597979107c3ea7d7e7db595252b2fe99679e29753a9d834ea743064895cb976b8281576362754c8c2e0a8929f1b86e642c32d392c438a069d4476a6393c586ad1f1c4067978dccc44ac4268dc0eaf736606c760ee47239589605c779db4e5757bfb662e5af379d282fa3017dd98bbb2165a18c247dea83bf7c604dd5d1b2c240c00f6366067c96b31897918cd478bde84264b90c37c7a3cd62c7b1e3e7d0dc64463cb10e432cb3e4a9a770ebecbb4497e2390f5c762bec962e6765d9b197ef5ff134dd6eb9ec79612800aab75f58f568feacf92f7dbdff6b796b43036e9a7927ba2a0f4229b8c400a54b683afa41b90a495953c092b962fbbaf7486a65a0d1c6206fca642c7c6405a9a3cdd8b76d1d78470fe21312e1b6592ca7ab6b1ffee3e6bd3b719931315800a6687a56eeca479ffc207dca1d99274acbd0dad88859f3e783efeb4673e93eb87acca41056223a3903c6dc7cc426a79392d38bcf76ec40c997fb913e761cf406030a972ec5e17f6e42cbf17f41ad5420da9040240ea6e67347b7ec3eb0f0d3d2baa61f0340be76e5bc4767debf7c4d62f614a6bda909a69616e4e5e743a150c04f2a33deed24faaba02029554ab2106d7e52f498dadab0ff938fa1d6689094928a315963f0d5e6b5500439b0e43e3269232e6d34dd0ce34bbf295ff5fbf53bff763956181440b4426a78fbd9651b6f98bffceee8442338b71b5e32ba919a90b2d4bfe92cdcdf290d6649b8b8f7f97c222c3d6aa2a289db74a3acf8af8852cac47d549e5e8f1b81c8e8189ca939bdf3b76f6e5d6a75f297dc3f1d0c0073d7f51939cb17ce2b9e3067498642a325b93d10fa802a1d56f687442c2dfda1012585105a6aca7162d726022017afb948c097d49920556a303e55d772a0a462deb683272a70898c341800f9a2db27dc5d386feec6ec590ba3183602745ebd94e2fd32d0220cb156f3e97254eeda080d01a0555c2f9902ded9755474bd9993c6f26e877dd9cb5bbfd87a29371a0c40d4d2999396171615bd9c79eb7c76600d70a18297829092855e47630d2a3e5e874879284e6c4e0e1f1e3a09993a0a3969f15033fe579edbb0eb455ca256180c80e1fe5bae5bf5d0c32b9ecb98369b0d5eb8093ab0d301ca7e1f18c34861ef36a1ecc3b741425f8c1b87cb83cd5f94c12f5520292612b969fa8f576ff97c99c7ebbb681c0c06406bd028ee7ee9c5179ebdebde0559d40d2e067131281a337427bbb4f85d483dbd901220baf8dbb0a7045d7d1cb4641df5b3f1c68abd65b545558da6465c240e06150344b29212138a9e78fcb1c25fcc996b54a9d58c200c6d4b876e881ddfb305deceb390c9647078386cf8f418dacc36e8c8da6aea38635bf999d65f95d5b61cc6456ae6c1ce035a2213554ae5ec050b0a672c5ebc646c9ad128a691c158a3df12b5473e83f9e421281511e2267149f539f43a3cc83226d0b594f9fdcf4b7fd360b2ec26b7f75c2d005a481988e41099363e2767fae2c58b736fbbfd76835eaf67e90d976b11eaf7a6ba4ad47fb91daa08f6fc568c3fb415cfefafa8dbbfe3ab13ef90f747af26006d6cd8124622b9c4fc13a64e9d9a5b505090919f9f6f484848905397e8b7ca0f5986c681a3a71b273e590f79801377b35d5ededfd2d56b3e78e2ccb143271b3ff30702d47d9a70155d68a02554616b50900c32138f266de4b469d38c93274f8e1b356a94d660302854a4da218da10af7373a01f23c2ff4582dfcb14f3673dd6de7fa3a7b1de6da5673634d73e76987db4b7f3bab26420b9d8bae4caff47762360ca20dc3245021ca26c492969292a24b4c4cd4ea743a12ef6a39f17b862e25ec763b6f369bb9f6f6765b87a9dde272b9bb846090ac02610a4b274285fe2537bcaed62ff57478e561890c43f51f156191878169a38ece87157486a52f7c74873fbbac60fa31fe2bc10c38b2e1e340e96f4258fc171c07d57ef27ff6f80f057f267cfd9b1f600000000049454e44ae426082') +DISCONNECT +/*C172*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C173*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(26,'Red-Hot-Chili-Peppers-3','2016-12-18 21:12:00.028000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000bd34944415478dad55a0b7414d519fee6ce6367df7993c012c206c8034800a92805e42052445039965651c0b755ecd19e0a3e5ab0b4474fd543553c281639586b0b8a0ab508e841b4eaf1c101445e020d2404124292dd3c36fb9ad99de93fb349480a096c20d85eb8dcc964f7cefffd8fefffff3b70f83f1f5c2fefcf686afff300bc5956c7d07ef6b40ca794651190128daab228ca1e97cb35301c8e34f8fc4d7b2a7cd15d5f57046a2f36a00b01c02615a478f2d2e5a90eab708d24b0625dd7b33826d9323cf9cc9dd94fe2450b3b7e783f2acb0e861455dfd51456571dac8d6c38da186dfca10108d715a54eca748a4b2c221bcd719c1089c4c05b9cf00e1b0d777a16822d0134fbfda8adaa444d6505345d87a6e9a15034fe467993b2a43214abf9a100b0d139b692dc14cbdf449e2b366eb4045570a203dee212f08280465f3d9afc0d083435211c0a425514e8e43864219a888554ede903d1f833f4d5d00f01401edbc7f6b85de41693e6a1a871f81b14d8dd6ed81d4e848241848309a1354d33043627fd9bf8b66efead09e9b8eb38b00517181349037032aeef60bbb8c661b54c5049f84854a51933a5d469bbb8a683d1ae0638535e5d3feb3e24f5369f8e797ee0c4a504c0fa009306a639dfba67ceb434ab2c221008921562e0180f9de3f1e5f603f8f6bb43e432fa69ad9f7d281160fe311dafd375ec5201b0f507168d19ea7d6ce1823b619144729338699b81f13c816026a0bfafdd8cad1f7fdda5f6db461c78fba88efbc81a3d66a56400b04ca0d805acbb61ea9585f3e6cd345de68c0f1108bfaf01cf2d5d8dc347aa4c77ea6a90e0bb6b75dcd4041cbd1400845ce0361bc3ca7befb85e983c6582418b676a558922166ec6071f7e85b5eb3f07d7cd13e8db8d411db7565d4030270340f200b7a7c9e2f2850fcf164a460eef0c80dc450db740090568531dfbbe3f8665affd13aadabd7babc0b3e4464fd265a4b70108a9c0847c976dcd138fcccd1a5430a81d80168f41093621160d9b4018f9cd918a1a2c7d793d4211a5db87501c6c2c2736a2d5dfdb0098040c2971dbd73dfef0ec61dec15e53f0b84a2e1309d3b57afa8304e0f0916a3cbf628349b3dd0d127c4b858e3964a7fa5e07c003b9254eeb9a477e71e315de01d9c4f95a5b96eafc410ae4f375210558411678942e9b7b1d8085000c91a5750fdd3d7d747141ae9969cf367802b06bef11bcb27a1362f138ba61538d6a89878eeb780d97200618c5c0b04cc6adbff3e6abbde3c60c352d70b60d18cfb0677f395e5ffb218c6c1d0a776985480b9514c442efc034462f03a02c3cce09bc3b797c49c6cd33c777d02cd7ba53e20623ee3c51edc38b7f7e1fcd94d8bacb67a4f605948d975d120094c8c6ba09c0a0bcecacf9774d87cd6a212bc4cd8ccbd11f9eb2b1de9aded4581cabdefc08dfee2b07dfcd538c20ae26162257aaed7500a4fd42b2c25b4e9b65d8fcbb67c0edb2e29b1d7b91999186ea93b5282af022dfeb31eb2023903ffd620f366ddd816854418c009d6d9071fc94cc6e2137da8a1e24b3a400d04c1bc86129d1e9dce93f19038168c966b3207f603f54549ec4f113751835a200fdfaa643a2be60d7de72fcfb6835dd3f85f263a7ba2c2b2e2499255dcc7938dc6bd3b1b44f560a9b34a114a5c3f24d1712084d43630b7613fb8c18ee454e76262a290ec2a110767c5786afbededf2500c38d280e6e557b90cc920520e50037922bad26cddbee9977ad594a6ffe683b2e1b311863af186af2be519d5a64194112bef2941f7bf71dc5a10315f0f99acf5a1b11806d950480a238e9363359004216878929c09a38b5862386e6658d2819c4366cfc1293278ec0e5a30b11a1d2c1b0c4f1aa3aa467a640a64057c3519c3ce9c3c62ddf244a6cbdf39309c056b2c01cf5120060c44285191c56127f7fe162dc8d6e877588c1320543fa536f1c85a2a8484f77212fb70f8616e5512cf06643ef6f0860e5eb9b4d70c82904d7580d50d56a98847e5f46be33d3071c4092819c34009a8e011ceea49eb65a14e4e10e3dfe98963d4ab8e2ca5214594f22d5ce90ebc982240966a2335a4c73d5396cd8bc035f6ddf8ff8ec97c0827510ca3e839a5d08b6ebfde6505dc5ac9e30514f9a7a895ca82f3f785aa16de41df749dfafbfde9a53c09e7fe64178aadec3a943df92b048084e65442cae8197ede85b3a01e5d5cdf8fd82456898b51cfc80e1e8efd6d10211be237bb5587df98ac6eaefff10d8b23ca9c3af9e001032262e29b1e74d7c91599ce3b4900f5e6710ab9fbc06ecd47728fff41da854561be98c596c70e478d1a7780cec59b926232d5ef2123eb14f06973308762b833753829f9cbfba458dc5224d6b833bdf5fe45fbbb8f27c41240dc05d3ad79332f28e5799e49c66fc4c0ac6888176ac7a20172c1ec2896f36838f47909e5f0ad19d09d1919638ad8829385aaf60e13fea713440795bb640a79ac961e531b88f05018ae48a80d15734bed9b4e9855f376f5b7d5e9939691af5fc6cdd03a23bef390a3ec1b86114a405fd642cbbab3f36ed6c40d5d1328ccc9331a0a008a579360a9a1865e1180221157fdcda840f0ea9e004ead98cc81798b93aac028ab21320ca9a5425525bf168d5e2ab5ec679d44749017016cfca4b1bf3e05b4cb45fde76cf6044bbc450e091b1f758184a4c8748195a1619ee9b9281b957a5224accf4ea678df8cbf620e25c42f036e1db56b75dc0b01c0b6a223a8ed40776377dbc6a56e38667cb2e2600967ded4bd75b3d97ff95bee6d0354a58bcd8be854195ac439632e8de2613886bd2e10bc5b176478ba94ece149e339a06d385cceb5610fd5325783324ecf32b4ad5e13df79f7afaba37708e33a36400c89e9fbfb74474f75fa8450354b0a914a429e681d619434f1c6a19be2f903934aa213412d014be55eb89b5cd957873b5513c5ce6b1c2a7e8d87fece4daca27c6de0f35d2ed99d17903e06d1919fd7eba66356f714f8f471ae89b0c746dae9d648f45691a2ca49961c2493670a2d4aef536e12991134efa2c23cb3988984581c0328c2400468cecaa6a3e5cbbf9e51b9a3f78e1e04501e018326350fa8f17bccb044b49dc540ad5ff724a270086e09a1244c723458e896056b729a0a975dec8bc11b260987e4936924960030059812300257d65b86c3c76d4845beaf7fceb96bae5b76f4237947abe0058ea8fe68f7297dcba9e24f268c6fb09dd68925d14075242f8b842c207609ea3777c0013c064022018008c239890a979c3129c2483b35369288aed162aca91d1c745a578ad82da8a030b6a9e9ada6db776de0032c6ff6682a360c6bbf4f4342dda646ad9109e492eba1527e19b0de9ced89e490e7209d92c42346ae1752d6a5a81938962ed2e53f389584804f2a02c0b06a44bd85dafa2e6e4f1d7aa7f3bf657b451cb05037016ce2c4e1bf3cbd524f46853d36d1b1013e9e6f1ca991d17c75b0880d32cd8f478d8d43e5a8396d953c1592c1d829900d0ea4993308440ecae5351e7f77d74ea4f33e7a8b5155d26b56458c8953eeed1e9b6fee39ee27821ef9c9f364eac0d17a31868772ff279c34d0cc1993da55dfb68a5538d56231f0ca4f2e250630ca150cb6edfba453705b7afeff2f037a9a3459a2929a3ee9e6af74e7e9c97ddc5ddca2f928b887618f9c2149e56b39b31dcc7eaa0c07674a0d3566632e282264fc11c6386d5a2154d5b5f99d1b86559976576d20d8d01c23178da6867d1cc874467df498928d6cfd8d6f07d63686aa8b37b51b3cfec6e937d3ae784d399b9cdcdb458e840e396e767357fb2eae0c502608a40d321a60ecc4b299d7b93256be86cf2736f824f3b0031b4ddf1dd582700940025cb6961f9ff2e2f8ce319b5257a6ce75335afdcb602ddbc00e9e96b560384c19f2976efd5c58efc2933c494bc294cb27bc9227262db2e4eb38cd830025892da03b83dc1190098aec595c0e1c8b1ed2bfd1b7ef7763c506f04f005d36877406403889c332ad73660fc2829357f0c6f4d2b64a2cd43ceeca2065f4e54ae5c3b00de969ae07ededc21a6332da2eb4a7d5c692a537c473e0feeddb82db86fb3e136cd3847457ab1feaf449b450c300ec1d52fcd9251942db83c59822d3d8b898e544ea0ee860992f1228d2c457586ae50426b892bcd0db1606dad5277f044e4f8ce1a2ddc681cadb4b40a7ecea6a637feb3870146689dec2c6bdb30848b7558631d7eeed596b2a7a0ba1a17f4a2fb3f2931e06d9d9056520000000049454e44ae426082') +DISCONNECT +/*C174*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C175*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(27,'Red-Hot-Chili-Peppers-4','2016-12-18 21:12:00.029000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000009374944415478daed5a7b6c53e7153fbebe7e3ff220094e705227b40412081020b0c86a406b1aa43231186850b66a512974938a26556cda260d4d88a2156d4843fba3059215b456a2620d28b41b308ad691a42c6b28799017793f1ce7e5c48e635fbff6fb2e7117681e761c924eda918e6cdffbf97ee7f79df7b125f43f4e92c516e09b0080cbcbcb33eaf5fa3417687070d06ab158067a7a7a1cb8e7ffa603e0cc6673464141c1999494948d56ab55686c6c1c686b6b6b74381ce5e00abbddde3c3434641b1d1d7561bd77be41450a40bb7ffffe137bf6ec39a2d56aa9bebe9eaaaaaaa8a5a5857c3e1ff9fd7e5b2010e800f730c6e776afd77b0f5afa676767a76d3ec044028033994c2bb76edd7a79d3a64d2bdbdbdba9a9a98906060644e16720972008272b2b2bdf66ef1715406666e6eef4f4f4f7341a8d1a364fe3e3e3217d1100cb9a9b9bf742133d0b0d80cbc9c98936180c26bc4ff2783c07f0ba0fafc41826423095af783ac2ba96eeeeee9d30a33a8ad08cc20200e14d696969bfe379de0c21b438492504e760d7f42433308ca70160edebebdbd5dada5ab19000b8b56bd7e6e0f43f8200860927fd8ac55367ab6638f92061adcbed7617c1e42ec2f4ee8d8c8cccd917c2022097cb1356ad5af50bb55a7d88241265c01f205eca8125c449242200afcf4f3e5cf783d9d3d90612c9d4db0088051a3c03e7ff0340389e3600464a954a654c4e49d997bc34fed5f52b924d192909a453ca88e7a5e40b4868dc2dd0b0c345fd90a7b77f882cb671b239dd3399d3fd097f685b0800220870c2bb3f7be5b71bb232f6c964fca4237d74da81809f04a7839c761b599c441fd70d5243f3c3c73401c11d30c3b6b1b1b1b3c81f1758ce58280014af531a2e1c3bf45e6292f1457ac23cfc3e0f098e51f2bac745447e094fd7db05fab4e29e088ce338522a95a34876c79133fe810cdd82854c78ef4201e09e5f63321d7b6dcf874be297664fbec18416c646c8eff54cda4142b73b04faa4a206e0bcc4cb64a490cbbb6a6b6bbfdfdbdbfb0556081441249a1380efe666aefce9811d1f45c7c6ad104fddef232f4cc633ee104ff9f11d2454d72fd0e0f030b9052fdd6d1da6d171771dcce67bd0406324c2cf19c0cedccc8c237bf32feb74ba15019caacf2388a6331d05389e6488566cdd5ffedd419fd6765dafa9be5f889262c133b108e0f9ace5cffef2e5173ed4a91459b3477d2285361a3b71e4710cd35fabbbe97279c35bb535d527716b4ea1336200b13ab5e1fcd17dc5717acd8b81291f34e9134c48151d37e1dc7d74a9a2a3edfd5b5f160e587acae891fd2f380046d17ffaf9cb279e591afb93d91e2491f2a48a5a4201ef30a9d59ff9affebde7f7bf3adf7d0ab7066811cb69e55bafbef4a38de92967384ec2cff430a95c4972b59e1c23161af37ed672f556edd1e2bfd1759a07f3890400ffc3fc8db97bf3d67da090f149ff7d92e4f107e2835cada300b2705d733bd577f4559ebd56f6a64bf07eb1d8003843acce78eaf0ceb393fde06b28e50a9222eef758acd4d0d14752a9b4e69dd2b2c396c1917bb8ed5c4c008cb4270fee389269321c4789c07d0d212f232978c836428ded16242f9e5c52b5ed93aad61fdfbdfbaf129a876e2c5200f2ef7c6b75f6fe6f675f542be4cf3ef650441e0927a511c718f50ed8488e7a294aa7a17a878ada07c76e7f5e51fe1a7a0156422c6e4f0c8efef52b058756a52c7d13be10c72e3273f2a32718777b90793d0470a452c8c82648a8de15c540f95142df82399dbe71e3c6edb6b6b6884c29d2a9845cafd5a4ecce37bff19c31e1609296534729a5622f2045e69549a5e20eac947e68e7a8976268786888929393292a2a6aa8a3a3e3424343c31f4b4b4be7ac8d489b7ac3ead5abdf502a5507fbacd638b3494be6e7e2d1d404442df8fc8f9a1bf6b97a544e23a4264b6f2fe5e7e7131a23aaababf33f7cf8b0a2ababebf8c58b176fa1150d3bb1cd390a65656519376cd87002f6be0f2531dfd767a582d506ca4b5f4a82d73f21bc5fd486c313a02fed1ab20b7eeaeaeca4eddbb713be2bfa0a4c881e3c78d083caf437252525efa3b9092bbccead1f888f8fcdcbcb3b999b9b7b1002701000f62ed0c66762e8a5b5cb480ac1586bc9d83a3a4e55bd0838518964773808cd3c1514145046460629140a91213c5557578f5a2c9663454545ef3a1c8e90fd622e007808be7bfdfaf5e7376fdeac65d3b8f2f27272a39554ab14b432318ad296a8d02313f5d89c54d765234e836ba9a93404fbb7d96cb46ddb364a4b4b23f4d8acb911991d029a9c0168a0b0b8b8f8630ad127c20680cde2cc66f33b393939bbf57a3dd9ed76820d131b6cb95cae474389899ec0274e2b888cc665643299c86ab512cc8d009c1213134500e8b145274758154d0abdf1a573e7ce1d8616426a31c31e6ca5a6a66e81fa2fa7a7a71b50cf8bd338a7d3299a0603f024b1714b5252122d5fbe9c06070745660e1c1313239e3c03c1aef13c2f9a1334d076e7ce9d5d656565f743d142b800e46bd6ac791d204ee3f439263803c09881998a8200962d5b26ae61b353f8102a53b50820f83da64d366b82860484d6c26bd7ae5da210fae4700168113d4ec5c6c6bece04639bb34d671a23ca500bb1b8cf8465e476bbc5d39e3ca160c2b3669f4df4d87d38f3db57ae5c394621941b610140f68ccbcece2e86da77044f773642c22200a6c9eb83b35366fb0c203323761041865f95debc79b3106006e61500d49e84c4f5676cba351400ec5499ad3301270f7d2703616b826082f7506ad420c9ed4270689e5700d82c0ee1f3349ced07216a8cd80f1f419a0ac0549a8116ac70e65dcdcdcdb30e7fc31e2dc21973e194a7a085ecd9163300ccde67127e32b820411bcee1e1e103c80d57e71b00ab40f500b0057c0ca6b165b62f3c1a350666bcff2461bd17d1e8704d4dcd059a2512cd692ac140242424ac331a8d47614e2f4008f91c9e332d00363785060a91e54b9e0680200835ecdb0493da81d79dd0c63a08a38c1400339fb1b1b1a2a6a6a653c82f5d34cf26f4243181b51a8dc688d2c0acd3e9f2e11beb60fb8650b5123431b013d1e73e4ce703f409a5c8ea6c6a37bf79601a62da609eaa86e0b1089b26c4fe95485ce9d04a1aae19d97508aac69a2028b40b01016c43c4b12021d6a3f6f9bcbfbfbf12afecd459491d526f30df7f35e0279809aa84d05a146b7a7034c0e81186e56c00c09c14e4c429db508ed870f2ac70734e9c78583f863fcdff4a70d3304d083815874dffffb3c762d37f009ff2037c8e0dad630000000049454e44ae426082') +DISCONNECT +/*C176*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C177*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(28,'Ringmaster','2016-12-18 21:12:00.030000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000012b14944415478dacd5907745465da7eeef49e4932338134d20329f4ba54572202464ad4c575b1201d96222e02228a0a028abbcab12d16aa057517543a2a4442405a2881d0d2489f4c263393e977e6eefb5d5cfee31ef7d728bfbff79c8f19ee64befb3e6f79dee7fd86130401b7faeadebd8761fbf68f3728148abd972f5fd9346cd8edde5bfe90ef2eeeff02805eaf5f5f58787072972e5d505959e16f6db597b6b5b937b8dd9ed7c78c1917fa4d03888a8a5679bdee96d4d474f5abafae45cf9ebd5055550d97cb41cb6d733a9d930281e08189131ff4fc2601444646f5944aa527c9e3d0e93458b26431c68ecd4773b30d8d8d4df0783c6cb982c160ded4a9d38ffde6005004968542a1e572b91c6c6f4108232f2f0ff7dd57008bc5829a9a5a381c0e3080807052add64c9e356b76c96f0200795f41fb3586c36123c7716020e4721902810012133ba1a0601cd2d252c4283435d9e074bae8335f40a7d34f55a9545b172d5ac4ffbf0220ef3f44fb6d200037ef1113818c8344220161426e6e36060e1c04834127a694cdd62202a1ebc28001fdfbcc9831b35db5714b0144475bf60942288fe779b008fcfb522a15b43450ab95624422220c1489342427278be06a6a6a505b5b8f60d0d7326ad45d49b366cd72fdea004c26b38c8ad746396f08044208876f8060fb33efcbe54a68340a68b53ad1681699a8a848a4a4a4527ac5a3b5d581f2f24a62ad9eb3172efccb6bbf3a80e868535f954a714c1038f8fd7eb02c0a8582df03c18cd66854b4b404442b82d16ad5301a8da8af6fa43da2e615148c5f3761c2fde19ffadc5b022023a38b8ce783758180df4c5b82e703b442941221323e74138454ca40284510c43e540706a25a1d7c3e1f2e5ebc38d666b3ed68efb3db05203f3f5f4269d29d725c4b5eaea755575858e8e9d6ada7c960d05b9d4e07acd646325842de0f8becc3008442c24d1032994c8c04eb112a9596ee0ba1d6d6d6f9d7af5f5ff7739cd72e00a9a919c37bf6ecb68f6890f3fb036102c07bbd9e4d7e7f504e69f050424222314b038e1f3f2e162e333610e0c18a9a128a3dee260856d02cade8f305f49d977f6ef4db05c062e9b074e0c0fecf91f1d4883c62aab85c2eb1402d1613b18b110909098cdbf1e9a7ffa4eedb4ce9a22143655413415afff32c8a248bca049badf9a39f6b7cbb0174ec181749a952939292a4216126e62e630fd6b0b2b272c482a4420413712c6576ecd88143870ec1ebf58ab9cfee31afd33343f4ba8444de9a5f627cbb01b02b36363e8a8cac230a5452ee1208bf1885cccc4cf4ef3f8094a856ccefa4a464ba9746df9060d9b2a7b173e72e319558f11290a52d2db615bfd4f876039834e991cebe202f949c3a6d77fbf92f0c7a431fa7ad11816090d2c62f7a7ed4a851c4e53d28cfa564ac0a717171945e3162b4b66cd98c279e58329922f2cead30be5d0026fee9819c80207ca943385edf7c1dbcdff5f60541f3604db31f8ee606b4b99c605a2136360ee3c78f2501773bc9861c6220e675b5582793264dfefbb66ddba6dd2ae3db0760ca94c9672f5e7eadbb5a18fae73ea69de6a4a8a8dd65cdd87dae19351e19ae5dbe0277ab95fef206cb68343a8ac648bcf0c2b34c6260f3e68df8ecb39d6d5dbbe6a4ae5cb9aae9570730253f4fdae4e30f1eadb40fd2ca783c323413731f1886c2a2a3283a5f83b266296ada2428bf5a06578b55ecae8c75643209468ebc93221122b9c198cae0a3a29fb264c9d22dbf2a80d9fdb29286754f3cafc948d66e3e54862119899836e536b82bafa1beae01e7ca1b71bc56801d469cb8588da0d705b25dd43b2c85582d44474752f352b3fae089867baf58b1f2ccaf06e0e9d1032e4db8b373467a463464c926b82e38a1888985cc6f43d8efa1c4e1e0a142dd77a20aa50d7ed47209084955b0db6de860649a4723163503c3e4767d7d43c86eb75b3ef8e0c3961f7a9e4aa9940789b642ac8dff52000ff6c9d2ded62daee5ce41690a4b9209874f5dc1a455bbb163d56464758b01e76b0317a9c43fb61cc3139f94e1db37c7a1e444050109a1c6ad80436e265a4d809e3410cdc3e2445659594de0ecb76fdfbefdabff7cdea001bffbf3b2a54f3e7ffa5449fd53cf2def4a922410171babbf677c41e1e933a737a8942a6556972ef7ff73fbf6877f128089dd33fb8c1c94faeda841a950758840c2f857d1d2eac6a2ec180c19d317922803e4521366bdb917e555957871ce384cbe371dc10a2b4aca6ab1feb3f36d4e4be6d8988484692a853c8df47fd4c993a7abd3d3d386efdfbf3ff03d8f729c74fd5b6f358ccd1f63faf2eb0381071e7cc84851f02d5bbcb868ee8205032aaf5c0bc525c64929e458b366cd959f04e0ee6e5d62eeed97505f30228b3b7cf20c9e74dd87e7f27b433fae3fcaa851bd1de670d417823e2a1ae9a9c93877ee3ce6dc9f8715337b226c73e29d778bda0e0b09711f6edbe664fb65676773a5a5a53ff8608bd91c79f0abaf9a129392642fae5e7d6ef9f3cf774d884f882e3a74b099b2143c6554a7e424d8ac36a14fdf3eb3bf07e0bb294ac2ded2a28f84b0ce1061541acd9717f7b398ff30221bd16635167e7409f6dfcd476fb30e9de68e86adc589a9c11b7bf4ca4cc0b3d347e3d1970ba1d0a930aa7b0784e4d1be6aab2371cfae1dd61f73d680be7d1f2709f2a256afc7c2c71f7fef6061e1e227172f397af7d8b1491557ae22ab6b8e58430776ed0abdf4b7575670237baa94d52dc2bde9f1f21e05f996ae12a92c82692e6ab8feeaea960b5f9f8e191491d8372bd5791113fac723273b0152950f1b769ec795de0b71ed4a3d92af1ec7c60be5f0577c83336f3c84d42199b09634e2dd83d771a9d10789cbb1ff48e9d1fbac8e408ccb15aef58584b61f2c48ba9e5db6ecf8c489137b49a89734353559550a454442a74445d5b50a24a4a49054d1e1d4b7c7a051ebe0f57b42dce27bf4af2c7a7de89c23fbaaa137c9d1a39f994220834c29476db513331644a3efc03ea8fc6a07f212a5183ebc17644200116615788f0d9f9c68c6da621e0e9aa83e9f9783ec3e5d6023503a050937950c15c76cb026568473f395e1a03520293d63778f79f45c81bd2db4ff3f01d09ca0fec7c7db5a86df3142e5209d656bb62135230de74f9fa5467909f9f7de830b2567919094046394119f7eb4cdc5ad9c62d933bc206e445226ddd85a8de40c3572ba46c214a7c3bb5bacd8b82916438775c6857365e8e5afc6ccc9774013a147b0ad95783e046d949a38df4d3545b069707758899128824c1fc11fc2d1e20618f3ece877871a52851601bab7ea896f9defefb4752daf0b542525a598a8d9bd65a18b8a5bfa97c71eef376dc63409fbbe9b44a2cbed828eba7a9bcb8d53478b114352a5dfe081f0793cc8bf7bcc26ee83b5e90735118aa172b940f9adc499d256583a68e069f261e7fb569c0ee720373d1ef5b481aab10a0bfa51a166278323b1063e086da40e72991c12aa1a3f0d2f61218c301f0647cbd316c4dec20a0c58e0456a96014127878fdfaf02ef0e20295ed93a7971655e4c52eefbb7fd7e507a943112a74f9f8629d2e45ff7da3aa594643753bb9446e24cd1313616c585dfc042af1aea295feedfef9c336f5e32b7754df289984463af4893126fbf518ebd9f5b9146651c4f85d09dd2e095c858284c1d2004fdb03adcc8520023539488374ad0b9731a3ac4592053482165a51f622c1112011012d4d7b6e26fbb2e41a9b80a9e26b0b09ac3ac6599683ae7c2a5bdb53859a680a45f017ae7a62140b2fcc4c953824aa50aacfffb7a1100931f4c57b1bed14a4b2695917477424f73f490a143e75eafad7d95fbf0a5a4c3767b68605a8e1ec5c7dd685a5785e1090a68e4a42c292aab9a387c1488824570c12391c3d5e6c692797390d9c18823073e475aac01c9d11a18b54a442a2590d33c1ca479b895fa443189bdcd4e03465d3a0c33fdbf492d41eec418a87b19c1efacc2ae12236cbdf2906254c3edf18a87c07eb7179bb66c42527232bc94266c7263979f52aabebe1e4a8af6a68d9b9a57ae599544fdcdcd3d7c97e9f5ac68c90ca838f0d783c838e9406ca41c01a62a894d4b3c3cb6da0564a981cdbe080abf03b70d1b8ee7664cc3de950b516bb5426a89a6692d123292097c584ad51082adba09a7822a5c5644615a5b09e6473851e3256fda79b87ae9114bf3c386320dbee8d003693a29dac87036dd5557570b07f6ece67af4ee2d021088da89eb4509c206a7f367cf0647e6e70fa4f7c745e6d249959f4c8f0f17241ae488b50711a992222c11c44670d52be09c97478e0a88a03479d4668054ad40988c5ec4f198d71b68e139fcf59c80bfe88127498d0ecb54a327783c7391c71e731c82e480c97a3bd6c4910743528a106dec0dc1a20863ad4389d5fe78c451a4bd7e9f789ec4d2e5d36d1f63d45da345006c046569c48038ed0e148c1fb7b1f048d123c2770d8c4b5728ed63e4bc315b2b418c8612992226b9f1827a6af27b1c3c5a020206918187023214a92cd407d418ec68c05a930b5fd50075436ec7eda3eec496175660bcbd155a3387092d3ad8a8309464d4e2d830a65a002b9506f90602ed6fa275c829e04fd7232097f0e0be3b4f75bbdd183678303efbe273f1048fd5011fe4515d518e4953a66d3c7aece84c228a9be7a75cae54eacdd34095a191c3ac10c403584a6518c8550d4101475ce449670831a48dd3e8f362f2a2dd9c882027455c430d663df50c1e5e301f321aec6d4d2df8f0d9a558fdcebba8972988a9d41822776155c7200c14c1203bada3fd25c4b3067a868d6e0cbbaa8197eeab24ecf44e2ae63c3b5f9a36652a9e5af694505c74c47ba4a8a876fd7befbe41acf40639def7bde6972157d8f3142163ba5a8e680aa58a369693fb0f91e7ddc424366296125f183adadc2897c0476a92981e6dd151b00a4abcf6cacbf8c3dd77414ddea2a79378bb8401bd7a42653441cafb3051d28c717a4a119f80729ec88952344727839e9e21d0b8f9588312c54103a2e444bdf47d76e8c52e3296ea3670bfdfe72f258f5f27c37ff07736cea0332c1c13685b9da95110eb70ece809c59e202cf4de4de126664767b50c9d88416ce4a94a3f70853e6ff48761a5bff64544e1d9352f61e0d06130441a3167ee5c6cfd701be2e54198dc3ccce4904e464a85b8445c6c6846b4cb8ed131322a74016dd4d4f678e42836d0b0a3948927d772f90d00972e5ddcedf707ee627aec7fd34e9cde608c1be67556e7286492540a7329e55b8836cf224f5d0c84914ddc1d4b3915a2b02b29fc2a394b0319eae8b300e5f796b016d7cda9e8929280b4e454ecdebb0775572f53e12b91989e8ad47e03d063e4184475ec80ba9a066c9ff147a85a9d427958e2b0813b6f0d0b651293e58f4909711a19a51d1b432b2aaeb55aadd61e647ce58f893f8ec4a6b6abdb65ed2993a8e3c9037ef2782ca5ca1502a2a0824823200217168b9ada0028cbc4148ba0f72a4aa797d307227ef0efe9bd1f95d555283b5f8a11fdfa60c28cd9888834c3126d445d6d0dccd1d1d8f6fe567efe638fbdc943b2dcc7079bff6d0431cdececec9c758c71caca2ed50702be7bc8f8233faaf3c5084418259dbc9ef2be61be5302852f52c6414111b0d1d292a13ae98d1f2ad8bf524a2b3901642ca5a0fbba4000af77cc42b8732e143e2f3539174e9d2ec1334f2fc7ec593348175989dfddd4ade3d0585383c54b9796595daebf26c5c577a8aca8886e6a6a2cb6da6c5f5cafa90950f16e25997c950c7f8196f3a7182fdac5e8b4a356fb667faf775a0a0340d6298911289b88da20f2a98cfd21bd32b9c0f04849f8c8a46144868358ad8a458536023232d4e3f5a1a5c58615cb9763e192c5f0929669686c144f28ce9e3d4b4dcc018bc50cb3d92cd2a39cf8fddb53275ba6ce9c19e774b9d8642608ed3c2a14014418230d9ddcceba1ee4748b540e0d034186ca3876a6ff9dd1a25ebf913e2c1a8c6a2364029ef429719984a7224cb5435cce0c7be3d5573079fa7484bc5eea192a141d3a84d28b175130662cae5ebb063f0dff96980ee26198adb9192d0e67f39c05f33b599b9bdbfddbf1cd898c40f4ebe2721c49e2388991acd608370e6259ce93a34459211341b115a60849a0a3d7a778059a48ffe859b7a4bd88fa70ecf06164e5e692000c8a8024448d3c192d535272d27ece9616e82323e1b0d9e02690df147e1398367b562f4ab7f33f1b00bbf446e38858af779d29148ad571824a478e57321d22b0b4218a63111153480a35bd0f0b21bca38f868c3ab38e8c0bf03c294f398e1516424d125841a42061b4c8ba2c39234c7b85432111949b24c3d7870ef976edda7df6834f3e9ee6f57acfb153eb5f04805d06d2e564a3865ca525461bad0af38309449c810ff456d13d4d5890d0ffa5a4ed244e2a869af4ceb018f464b812565b33624c26ac5bbb1606bd015a1aff5883932a95703b9da8adad4545797970d7be7dd507befe7a575555d57b3ccf97920d81f61afe5f01fcb78b80311d46411028089c8a0bf34a5e2a7dde6c323fa85129393ec487eaeb1b5c1e8fe769bdded0949e9c32c41263cee8969b9b515357673d59525244061ff5f97cc74906d7d296be1f6b52b714c00f7e5922e944919a0e76a20bb0df76d921d5716618cde78cbce40c3b2d36c4fbe97ebb7f89ffb1eb5f3779e48facdf9e810000000049454e44ae426082') +DISCONNECT +/*C178*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C179*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(29,'Rumor-Junkie','2016-12-18 21:12:00.031000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000135e4944415478dac55a097494e5b97e66cd6426992c93c9be91044212f6c8124181c862179445a40a282d601597626fb5b52aa5adc753d45650afbdb7b556eb8a8056c5b6621590555964cf4a48267b6626c964f699cccc7ddedfa4e57a3cf7f628d539f9ce3fff3fffff7deff3becfbb7d7f54b1580c97f2a352a90c6aad7eb12967cc2aad4e971f09fa2cbeeef303d1c180976b5de038cddb3ee2d8c5efc12fbddea50240c12d6a8df6ed51dfbea3d25c3449effbe44df8eccdf038bb9195614164308ccece2e242424c0e3f5c2ed7607c3e1f05b5cff068ec8d70a80c227a85568193d7f756ad1c2f5b06ddd8050dd1ea84d29f005833099cc805a0d834e873883019d5d5d08f0bac7e311202f738a15b12f28c8970640e1d53cb4e5964dcd9a75ff9fd0b7f331f81bf6a3752082a4c4040c0c0c202e3e1ee03af114dee97482d4522cd1d7d7872e82f1fbfd95d158ecf8d70560a25ea73b7efdaf5e454262223ed9bc0efae40c9828bcdfe7a3f64de8ebed456777376934a8086e2010bd5eaf801b70bb05c4ef0723915bbe16001ab5face11f9794fac7a6e3f0e3fbf05f6a33b81f8245e5721168d2291a02e343743d611a1e528a004447f7f3fdc04d1e3707848a9b42fe2d4970080eac5d197cd5e7ed51d1bb1eb672b91969e095f20807e6ad648ea68b55a18e2e260a4c051deefa3030769093dafabe9172d361b5c2e97f8c474ca72f02b07a056a98e5ff19d75132d851538faec8348cbc9a7703a0c502893441c3a6a86d58a44b359b1848b1a8f4422c8484f07a39042237168bbc3b19eb26cf94a01a8353a4e10393dedc67bc6c49b2db8f0e66698d3acd0d14983812046978de2f738fa401fc2913022b12842bceef5fa30e07123e80fc26a49456b67271c76fbc394e5feaf1480b562a6b6aff6c07ba557ad9cd53310448efb04626a0d72f372919199093da9d3c328e31ef0201809421555d12a26646565d2e113d0666bc3debd1f2a14a2133f48591efa4a00545cf733b33aceb0c360b1ce08fa43712baa2b54fa88179b1f5887d2514570385db0f7d8e1f60c7001d061e314bfd069c8fb38237cd4be29de80bcfc1c5852d3919e6242283177e04063b0aa75f76fcffd5b01542cd96030592c2d89e969e96a723d4cad76b4d8b077cb6dd8f8d0266c7de609e4169722c5c0c4452193525215fe6b356a044351f87b99c4622a184c09385f578fbaba3a4a015cfb9d15684faf8ef6d4d7ceafd9b1f1efff1600d4bc26128e7496554db2eaa9d57028048d568da65607ee5d361325d6383c74cb625c5596828f3b0c58b4f177d8f5dc16bcf487a7d1d4d68ef78f9f87f1cd1f60ec9489a8bcfd055c39772e4c9a18de7aeb1d544d1e8fa46fdc83d60bed5eb7bdc77a66db46ff2507507edd86b953abab76d93b1cc82fc94374302a890cfef02074e1006efbce4cec7fe05b5836d68c3f8697a0eac61be13cdf8896ba53f8eeca1bb1f5c5ed1873ee494cbc660ea6defa0a6efec9a39837af0acf6c7a088e8e4e18ab57d15f02683c716efbb117ee5b7ac90154ad79fce737ddb97cc3a943c715b3e715e720e40f411ba743cda946dc7ae33cec7b642d96e63af0827f01f2af5c8891997a8c2cc840ad2b80233f598ce939314c9c5c818e51abd06d2945619216a71bedd8faebfb3162d90fd14fdfb17776073ff9f86cf2d9ed3f0f5c5200b3eefaed53b32b2db7ab5247c0d6d481c9d32a1812fdd01bf4387dbc1e0be6cec4a127efc0ade5fd78a7468f8eea4750969708249ad0fcb7adc8d9b31163abe7a0a238193b7d53e028fa364a8bf46878eb2df4d7ed836ad1bde8a7c5bc81c1c1b7df39686978ed81814b0aa0a86ce27d736f58f170cae8e9686d6cc28449a3e0f305589c695073b6198bae9e8f4f9eb809ebe7e5c0d9d1833fb7a7c3975c8e546f3d46a381e13303e9b959b058e2f1fefe16ec0d8d41626a122634be8053c9d3313063395cad36b4b438c22935bb935fd8f147df250530b2207f47f53d4f2f76b0308b4523c8cc4cc6609891251484416340556525fa5ff91ed62d9cccb01981ad46224c9899d882fe20f34371210c463dfcde201ce7cf33ccbae84340129fddd25a82f61197a3b9cd85a9c173a876ee1fb7f0d5c3a72f1980f2d251f1b1686ca76af2da8478b8a7a426e9997c62ac6754acefed58b2f03a9835614cbcf028664d9f08af27c0df853d7188b2e2def7fe278804c2c8cab7d0617b515251809ce22cc478cd76d6860d07d4d8853264eaa338b0b21befffc556d7d1e32bbffdb5bf472f0d80d1a5d310f66c528dba768ec652b4dfd7533f6590b50c3328f489562c5f7d07221f3e869fce08212ec9c23ae79feb4aa8ed687762dfde330cbd11e4e45930e38a0aa562a500a83dd282ab5ea1152b2af1ec65eda89e9684a686017cb0fbc22f6f7b75d7864b04a06c25fcceef9d6be9993d7ac18f74dac4f48d5e67e76a97abb76fce9cb9d9a5917af37ce3479876c5648448918b6765d109e97b7aba5c686eb5a3b0c00a6bba1911825453096fed6dc1c3a74c78e13a3332355ea8ad6988d7d322ef9f3fb978f31b132e09807163c6fc301a55cd3f73eef4fc7f3cac8b571b0d718b565f51f1d28fafce8eb3b28c080623d030eb827f3181c13f0d4b88582c8c8f8e9cc63426318de40e167288c6e06178ddf65e034666e9513d6324540946c547b45a0d8e7cdcd65bd7e04cbff5955d912f0da0a8b0f07e1667d36aebea16280ff2939494f4e0f8caa90faec80d6b572c1887a0cca5212d541ad2e653ad4b056ace49c3ef7ebf0bbf7ce9000e3ebd0659d66476621ea8797bcb05170ed57462d1823258339261a7137b3c7ee4e426e3e0219babbece994600835f1a406646c61ab3d9bca4a1b1f1669e5eadd168a6ce9871e52d9d3d0eed6fae2ec095930be16346d6b0c4568bf01a8d188121564d20313cf7ce29b8bc83b87bf914043c21fac8a0d2b11d3dda05ad458799d38ad0eff010589095ac595973cfee0b0d5d5deed25b5ed915fbc200869a76737252d27f11c052361ed2d7aaa5b7956eabbbc781a7174fc2a2b9a3150b841999944704048b36a3310e271b3a71f6821d372d9d0a2ffd201462e9a15521ec8be0bd0f9b30629c15c5d98c4e4e1f73859905a001cde79d3872b8edd91b9e7d67f517f601957001b887c70733d3d38dc9c9c9d0b1c69756506aa0411673f189c92cc8a2b8696c022e2f4966696c864eaf8546af55ca0db98fd2b24fe077e68658248a2823579016686874e2de978f60e3f2a998569987700c4a5e88f09eae464f68c3d6fd995b8fd7f57d2100439aafa696775a2c9638690fa5afcdcace56da40aff4b67e2923e21088aa9192948c4213302a331ee9e6382432740a7df46ac9151a48549516d24f77f405a39006a8bebd1fc70734589aa3c3fab923a04b312adb2f86881affbdf3ccbbf7bd7960317dc8f745016453f8f323468c3064b2bb0ab26f1de430984c104b747474a0b7af0faede5ec4b3ee9f306932ea9a6d54ba16e515a371faf41944c9f1d4d45436305efac4a75653f3e8717be10ff898e4e2614d36a3d6d68d952529585b5500278bc313cdfdf8d9ae23f00443d2177c8332feeb4eac981c48e0f1bdfcfcfc69952c0f44f86636e47e6a3d9e00e80bb0dbed8a15f4ec7f471617a3a1a90903fdfdf48108d218c743811032d93a0add643ba59b7dafc7e763f9e056ac250e6ce45c4227a7db4d7ff06252413eece45107010f06bc08b9dd9e48345a4e79da2967f45f0560e078a6a0a060794e4e0e060707955d042f170fb32d8c371a950d2c8253a874e8d041cc9a5dad4495aae9d3317eec388c2c2956c08578edd8d18ff1debbef62f79e3d30f13933a9286b0a30b18e2826caf3b2b27224a4a5c1c520a1a395da6c3606881ed93bfa11c57a92cf84fe5f00aa4fd5bf941ade9a952555a385f48857761972737315ce7f74f83092783d8dc3412b64e5e66344f148ccab9e853973aa199974a44e042fbef41202013fc68f9f88125ae8914736e13f9f7a0a53a64c4113ad15620010bf4a4e4961dde40115c6b653833e5a5136bd4494c6c646b4b7b7f75381a594b3e75f019046cdd48c1c39324d26110dc9fea57c8432858585d46a187d4e27ad32885973afa653e7607c4519165e7b0d058fc93ea7623565b38a166b686840537313c68e19873f3cf30cfefce73794f964ee8c8c0cc431aa89a02904c2c4a8284cf692c4ba22838316e1da1bf9c82f3e6f03f81f0086b4ff73c9ae656565ca2446d2851a502663e2521613cd4b1156525a8e09974d815e15c5faf53fa0d01190b210aabadd03d032f2a4a6a52a16b1d9da50575f0b739219dbb66d43bbad9d01e0d34ddea3478e28f964c284098aaf89d0e9e9e938cf725b14216bdb6cb6130c08b273e7fbbf0018a9fd43797979e3b2192a25e489966c435b7f722e437c208e4968d1d2158c282a5cf3ad6fe2f2cbabd0d3dd435a04106479dce7eaa3e3c629a5b6d02f35c582c4a444a6032df6ee3b80a79eda8cf1e32a914680bb77efc6dffefa17ce7139e9361e353535ca7af2113f913569213f7d418aba86cf5a410130a4fd3134dfc7e4be41a8d2d2d2a2f074d8075a5b5b157ae8f53a8c2a1f8b6b172e822a12c68ffee3878ae65db251cb083340ed0fb868feb8782542998c0624b2404b60176149cfc6cb2fbe84b7fff22eeeb8e336d4d6d5239fdcdfb66d07de7ef3752cbce61af4729ec3f433515e6969a942a1dada5aa1f22f866814f93c0092713750f31be421d180504768231a90730121bc9760b66ce9f52864d4b86c6c05e6cd9f87d6b67602e853c2a8c3d98b503080043dfdc1e767e2526120a88297c9c915632bb9fd59ac5fbb1c09660be7d4a2c5d64a6ac6e337bfdea438b250e8f4e9d3282f2f572825006450815da4d128caebfe3c00460afb517171f1180e45db22bcbc8c902d70e1a89c7bd98cdc509683cab9dfc4057532d6deb84471c4f6b656d99c55eeedeeee422b6977b6d50b3bcc0819ad48cdcc406a461aac3919b8f0f223f8ee926b90919f8ba99327e3dcd91a1c3b71123bb6efc0c913c794f9642d618150a8adad0d9dcc2154628cce5c4d79f77c1e807c3a681d1f3288e9869d57282439409ccace68949198842d33b3b12f790c7aa20958b7ea062519c9bd9dcccc0e8713278f1ec6476e2b0aaf9c8f9cb404665a03e2e374ccd011665660c72feec6ea45f3903f72340af2f270e2e449fea2c6939b37e3c42747957707a2b034e684a2a2222542097525af50a13fa5cc9b2e4e6ac300aa982df7933e6a1156782f66940c2a55a7d0e75ce3054ccab5e24f2bc663abaf005da178dcb966058cf126454bad6d36f4b0323df8e11ed87367e1fa558bd1dbd58dae9e3ed8bb1cf0f6395864a810ed3807dd402bbe77db3a34369ca763ebd04ef04f3cb105c5452394702d2024048b3285be3e2651b12ec7ef28ef9d172735d5d058cce4b55d782766631e5042a67c3f73e68ca281fee020c69a75f8c3ca723cdf9d8eda3e3deefefe0a960d5602686546b5c1491ad9ced7e0703b5bc5c24af8db9b90acf2a12cdd80b1a505282e2e42c584498c3aef62d7ee0f5035652ac20c958fffe6d7f079ddc8cbcb578287243b115a1820a3bbbb5b09a704f71afde06602085c0c40aace9b99489e95ec2bda96a024059b3c2cdf25c184d571284f5463e36c23b63aac78af3e82d54be762d6ac598af06285366a32e0a7b648370f8bb2ecd40464a43184a65a604c342327274f89fdcdad366c7eec71b806fad1dbeb445d5d03d74bc2a44993942c2d3e286155fc40ce8525921718d2df2080e53cf75f0c4022d02d2c1b9e16de89c0421dd180bcdf926b7e0ad5d8da858a3426a25bc6e3542c198fec1bc4e565994c62eb9528d163ef41779768cac324161d9a9cb5292d6932c93c164529274f9d61ac3f872d9bb7c06ab528c94ab42e8a13cb4b052b4954a83b9c9dc502e26704f61a855ff579006ee5e44f0985e48161ea30a9a1a4a404c78f1d437a6e1e0cccb60f4c3661eccc42fcf89d183a9d2edcb77e1dcacacbfe91271cf403b7cf0313c3a174273a2a232d2d5d39ff60df5e643122f5f2b9c71f7f94f5559e22989bd5a8844f091e0244e82b4e2bfe20615df85f5f5f2f4e2c3e70d7c52f038701dc461f7892b5bf0240acd0c34a70f88da29556d0718186e676dc5e9a8835d797e19853877b770e60c1f452dc4d2bf4f5f573510f6377800bf55383466547424a6f5965ffc1432cb10358b66c19ee5a7f17ea6b6a99c9358af5640d19523c8ae3cabb63b92ec144641147162af1780f65dd7c717f30ec034b18ba5e650e508bd032d1b056c40f24acc93b5fa73f88e923f2b1696e3632d880fc647704f5f6201ebef7fbac652611844ba944870bc08c0cab9208fffad75da4a4176bd6acc1f6d75fc7f7d7ae5142b35045ca72b1b87c978a57d692cc2b1412654a2e124bf018a06c7338eda1ff15468786956323275a4be1b5624ae1ab2414d186f8832c2845485067c475d926dc3e230f497989d8744c833a7b008f3ffc000ae8745e0a1a66d3deded589dcac6c469cbfd1b9dbf183bbee522c24d996c2c6a89cc850b3a3a1d02ad1b6ac3b5c014b1696df656db281e928f24b2effe8670bbae13cc00e1c491cb33866f37c94fcf3064726cf53b8888ef76938a12a8e9cf6fac3483268f1e319a3e10c04a2db9df1d13957ccd05eb7e89b98c1a646b4180e85f1dcf3cf2bc0172c58803367cf0dcc985ef5b45750b0c3e21818525e0a47a5bcf1e77363e803f1549c5afc89be40c3fb8e72ed1dbc47fea7c2f9d9ceecb3e5b400310e4d2a9b331629dd87be270efd2e47b6ef9064225c118d38d8175465e715ccbcaa7a76ee94c99586bc9c5ccddebdfb063333d39b3fd8fdc1876fbcf1faaf5cfdae7e289e0129c88605d10ccd27ca2ae1c8e6c8e1909aa789e304472787fff3dacaff0183d3e0281d5602240000000049454e44ae426082') +DISCONNECT +/*C180*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C181*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(30,'Sozzled-Surfer','2016-12-18 21:12:00.032000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000133d4944415478dac559097c14f5bdffceecec7d657793cde6207702210901b9ef4b1451502915f168552a16b555d4fabc9eb578a0b42a55aa027d501f3e6d459fa81c72a4043c10901020212107903bd964377b1fb3b333ef3783af7deda7b5f47d8cdd65b3eccceefc7fdfdff5fdfefec3489284a17e3c7679ba96d659c432cc2cb54a3555a3d1e4e8d41cc7b1ac261ae7937d7eff6991e566afabee8ffeb3d766861ac0a373d3674392dee338955dab5643abe160d2e991e1b083a1f30d6ded088492122f25f6726c022a56134e88c9ed2a86fd684d559fff5f0ae09139e93f2323d7b2ac0a2cfd8753731084a4726e644e06067c01c40411f3c74cc5a956374eb6d561788e0991b884ee8141212961e4da037dcdff12000fcf4e9f492eae366a75e455060c0be83835a27c02ac8a8581c0846302562c9e4f5f93e01d8ca0a1751035ad75985e390c1a951a9fd5b7860783e1b25f56bbdbbe53003f9b956e10217518b51abbcd6c22af8b943a2c0161118af048b198d0edeec74d0b67c36636a3b3cf835c9703e1b080ea2f3bd0ee69c6dcca028408e0815367773eb7bffb9aef14c0aa19cecd2cc3de9e996a8555a74338918059af83901030100e2333cd8e803f8c911525d8fd592deeb9610e52ad66f8e998993362e30787e10e9cc7cdb326a1bead3b70f27c97e397077a85ef04c0fd33d23940eab71af529c599e9880b3c7d6461d2aa1188c4e189c6a8802d0885a3c8c82d4326a592739815623c8a03078e6190d2697ac5687c7ce838a68db243a7d627f79d684c5bb3bf73f03b0170df34e72cad567b20373505d96956caf304d494f32cd5817b308028158345a74698704d2b28430a17822acb8ee60e01258519a8ef3c07632c89018f8078b40779e929d85dd378fdd37bdab60f39809f4c73315490e7b31cd6dcdc743b4c7a2d4491aa8196a01ac6b91e0f74763312f138a211156e9b550cc99602639a199f7c11005f710db24a8a603ff13612171a70fa7c0f321d6a1caa3bbf62f5276d9b861cc03d53334a8c7a4d6349a68371594d4af711e9b84020741a356a1adb90999f8dc1ee76445d133071e94f5057bd07e789bfe6aa6bb1ed82194fbcfd3e62d5bf85a5611ff6d5f452edc470ba7de0ee67f69c7ffd3b8840e66bc3b35357cae9a35291f1ffe7da7aaa81aaaf5a503ea6049ed67a24c6df89a2bb1ec19903a7515f771a1b269fc6a99e541c9eb00a635b7e8f71f12ff0ceee16787c7d0844e33f2200ff31e4009e9c5f74746c916bbc9a5351eafcf9ba0a89a954d8fef9192cb8623c4e9c6ac2fcabe6a02427153e58c1e85390c1f5a3a5e62ccc54f82a350b6f971b7b0f9e45b7b70392c8dcf4ab3fb6bd33a4001e9a93cb15b86cde82749b392926ff745c921870540002adf3eec17adcb67416f61c388947eeba1256ab01888501ad0509bd031df52d48b708e0d506bcfe460d18958056ff05a8c02cd8f465efeea105303b3f6b6c717abbdda063a3bc488b5f3c1e27e6d5a855e01322defbac01ab965f89f7761fc333ab96509ab1881137887111a6614e747cd5009fc78fb259a3b06dcb1198898dab1a9ad032d0317d6763e4b397e7cf7871d527871e1c1200ab66e6dd3fbd2ceb65529972ce2a6d13e4fd503c01a3964330ca63d7b17378fcee85f8c3ae23587dfff5048c431775a62dbf3f405283c194113998327938d45623eaeb7bd0d5e847abbb4f6aeceecb9c5656fe2411e11db76edea91b1a00b3f23f9c3cdcb5484df932184e50da48d47d2444a20252cc5af40e86f1695d17d63c743db612d3ae7e7409d4c409323bb7b5f5e2c8b1068caa2cc2b0ac6c48d130c90a1e278ef720148d0a75ed030bafbd7cf48eb64eefe925bffe60ccb70ee0b6f1599cdda81b98504ccc454679025190d8473c99449800a45b75b8e00ea29614e78b8f2dc1077b4ee0da0593899963a81895053e2ae2bff69cc586ddf5583a69186e9f5908292ee0e8c95ed84c6ab1a13dd0999f6bcfb970c13b69c55b7b8e7ceb00968dc9d065d80cfed1b90e8d5cacde501c1a126e51f22ecd2b70da0c68ee1ec4d96e1f5e7ef07bd8f7651de6cd198fc9f7fc0e76a301512a53af77108b6796e377abaf46f8dc007d0ee3cb7a374615a5e2c469b7188824de5bf9fb7d4bff7aed6f05c02d9765a5a45ab50315390e952c91fda47954d436233c8f2449b0f4143deada07e126b1f6fc4faec10e2ae6fbefbf0a373c76805a6a336c08c3adcec0ad93ed7866f954247c5154d5b4613098c455d30af0f9d14eb1addd9776dff66aef9000b86174663ea5494b4986950d460404e33cd5008b608c0743e2c269d5a3bedd4b2993c0da7bafc28e2f9a70ffade3712e518037f8eb111bec4576bc193709dbe1cc70e1e3832d6823765e7c7929526d5aecdcd7eaf5fb62cebbdfdd9ffcebb5bf1500dfabccaa4cb7686a87a59ae10bc7a865cae2474298c0a8390676b30e0d5d3e259d7ef183cb71e46c3b6e5f341162d88b9a900b3d34cc5c9917c5a0378eaa139dd06a0d98313e1776870ecd2d5e9c3ae9bee3076feed8f2b7d6fe56005c5dea9a9469331e765ab4f0846290a59b44cf483c499315039b5183e6be20780230afb418a6140e37ce2e858fda6daa964784807ef8552fcd0d2a4c1895838ab234a8f51cce357af1e41bbbc24e9bc5b6fe505d62c8002c18ee9ae9b068ab2da43e95fca7b449928a8b0902f444624692cfedfd619a8919cc1d3b0cbd9d514c2dce474ea6015dde103c4464c5854e14e5d961b1a809ba884850c453afeec7c1baa640aacde4d8d7ec1eba81e6aa12d71c934153a5a3d619e1052231163c192f241992d42a68299dda7b8348a15a78fdb145f8ec540b9a9a7d10430cf20b5c9837bb1876ca75799b42b6271e4da2a6a6074f6cde0d9d96f3918e4add7db627f9b7d6fe56005c519c3153a362abe5613d49ae9755282968f0210f389ac634d42a7bfc09b81c46bcfb9b1f027e1f7afb7bb1eb901b332696a3bc320d09626ad914993ffaba2278fcd5bd68ec75d3ccac77938d197b9b7ac421037079b173ba4ac51d92c878b9eb481281200ed0658fc4b05193e01c5109a3cda9a8d24297199a981b4ea913bd9f5523c76540d9a80cc4c8ebb236e248897ebcab11bff8cffdd4818cb290eb240b73f7350f21802985d6d17a467b826538c857132341a8d20a30f1d1ad2877d0281b744388c5603569317b5231fa4322fed8eb8050b30f65dd1f61221198201306e4d15385a75fadc287871be0a2e98dec6ba1865052d5d2f3370dbd64004f56ac344462b1b9269d3e8f5531aaa42886a271be4bcfe90f7b12bd53f6fb77ee342b056b821009419d9a8d9b7efe2246d0f4a591db2a1fa3e2267064a43c561a4b87a123124062ef66948f2d84dd6e50d691120c1e78f9237e574d8b2adb66a40030ad2a7045074986fcbf003c3ef22e9d8a955e28c9c95b99e14c55cb9b53722e08942e89048fb82088a9fa34e684f730b3bb6927066383d416c330a616e2ced5eb70e5a13f404360a0d529ad950f87615b7c03da8f7f8ef3691624f76d454a561a2a2b3214051ba7d6ba7e53d373c76a7d87226af7bd09f05f549d6f5bf3f7ecfb87009e285b71e49aa9d3278c195b01cea093075c48a4f1457968912b95f256a27746301171f9b175ef1fe0efee862eab08450f2d03f7e815a4f929bfb55ac83522108089cfbeac7040af5d07f7e637a1cfb4e1ea857990f74ebbbd7d68a9ce9754ee917c57b055e870f71f0bf0816b9fa9df10f8a7013c367245f6a4d2116d33a64e62ad99a9001992207910f60520509b64c97e51dea14d4ad0ab34f8dde7dbd1ddd0816cb3037e4a93a255378379e21a255ae0e41d0a01894010d39e5e8b908ee445d0830b1bf7c0966ec6b215e934c01bd1e9a681bf73028a5cdf83ff42137a07065075fc78d03de8733d53ff46e49f02b07af4bdab6e9c37efa582e1f950e934e4e92462c128021e1f9271b9e824e59fdcbf4d3a23d655bd8580d7075b4203d69589bcfb96817f68be1c34306a8d12293ee0c7dc67d642566547932a74acff140519092cb9db0e87c5066f6000ad75364c2cfe37921a9d08f67a71e844ad78b8beae6c4dc36f1b2f19c0a3a5776a4ab2b2076ebcee6ab3960848ee10726b8c06c3087902a4320900cb2a5b270a0a0a854ea7c5b6dafde8387e06babc4264fff80684ee9b0b8166041980bc47c493229dbff67974f70fe2ab8209083eb815ae52114befb121dd96423c22e1e0e1d3186e5c859c824a843a5bb0efc0e7c9a3679bb2d6346ceabb64000f97dc71dbd5d3a66d993a751c588d5aa6486a853c42de00f8489416527e4db5297b966a54c5a1aebb151feedf051b6b846034c2fae00f9158351f71b9adeaa93b91bc96376c97bdb8162d24218e0bd960d66d87a95c8b1b579a91e574100932e8e8e9c1e9da24168e7b1e617707ded9be23d2deefb63f7b6663fc9201bc32e5e14fafbf62eeb4ac829c8b1e2647f334e60df6b9698eed4156aa4bd9efe70c5aa8883d35921abf7c7f0379cc03878d0ca15c4ffc601934075e85f7d01fa1219d14a4e29fb37c39f24716e398b314f5ebde83837c2ad862b8f93e1372b2881b94c032a83d730a76fe163892a578f9add7373e7d66e35d975cc48f8f5ca19f503ac2336fe634bdde618128241586156271caff00761cdc83cb8a2be04a7592eb59d828f4224986355b7f0dbe3b0093c50a96bc2db05ae8562e816af72b68deb51b33e6cf816bec389ccb1d074d6129ce2c7b08265b16a25c04cb7e6a40497e1a49715a8b9ed42e708466e278e30cf1e8e986f4a74ebd3a70c9001e29b9e3ce1be75fb1b1e2b20ab09c4a491f517e926a14a888b77cf40efce1108d7b2330aef232a4a53921123f3cbde505449b07604bb153494860832144720a30f6d507d0fad646f85b2fc035671ee6ddb1049e9d55786ff94bb06567938c8e62d92a2d46143b290217759486d2b677a007073f49084dc7531cabebd65f5a1ba5d6a9cacfc81cb8f9fbd7a71832c830222b4622af68482d527c3de7daf0f3d7d6222126b0f2ba1fa2bcbc0c0c8d8f2a8305afeddc84aa8ff760526605e22cfd8ed360a0b9193f7eed51a4df7c15f6f4f1b8214ba3dc1b7b63c91338f7692daca96990a7b825f7b1a82c73fd0900290a85b94f3576e383372c8f3cdbf0da0b9704e0a9b2e5aec2acac6e93c9c0f044ff61221ef91b66b30573a7cd84de6ac5b3ebd760ded8999832762260e0942871148170208027b6ad43acb11f79d66c0449a079bdddf8fe034be1ba6709aaab8e6341ae88eea6666c7f6e3f74091d88da698d0416fc88c5b8b1e964fcd77baad424380d8da5a1103efab03f72a136359d7820f48d009e2c5e5a0289dd1f0ef1c382147e897ca526efcadd8617a2d06835b87cea7478627e1466e761fae419d4a118455ac8328163f5080ef6e3a79b9e879ec4e3c8d13a8c984265c251fad19ca023a5c9246348b049b49e57a3e9a00d7283f3044258b05c8b291332e47d50a5dd2ac6c9ed9790d4357661cfbbf65b7f51bbf1ad6f04f0ef45cb221293d06b2d124c268d72634ebe589227168debe1f744e0f70730204660b398f1f06d2b912fa7909450d858a254836442f5e79fa036ba19372d1a018bd90c96061b9937e4dd378e2c4e90f2fc605b1b4e7ec2212145503a6a0c464eee4671094360f5ca3427cb3eea1b4af3e8f7f9b0e77d75b8fb82dab5e6ec5f46e12f00acb2deb23d6f72f8da398b0d30688d8a414991bc1f93108d25c9bbf4f2a83038c0a0b3c787746b26ae983e9f86701d752a51d94a147909e743ef23bb88a729cba16827f17f199b1ef2ce5d6b87073b7677a1a7468ff1132ec3e2298b703cb0010523920aa327e59b22a21202a8c8be703c8c8fff3b827367527ef3d2854df7fe5d00cf4f5fa82eaa540dcc9f976f61e5b956f1aa7451b431178b4b9048cf0809c489527cbe3002c4cc32a9c9438c5c9c1a0d870ca785748d1902b5443982b21795b490372ba832c324e48ed6f6c0c62fc6acf23108d3b4561bd98cdc129a190c321b53d3909dc1c8e29ba53523d8b6cd8bf6b30eefbaf36f3abeb188dffef1959b278fcab95d6f6015ef4b147e86f95ab5319232f6c919cfc8ad55d6f7f27744f9b3ec69463927e7b10c4aa463ac6c08bd4b8cec088a00c98f1e9f1f35cd11dc32e229aaad18458fc3e9f0dbc8c8f3c06eb293f84bd2f7958b2b7510e3c378f3ed5e48fe92d8738d1bf4df0860fde2b9e32b47d88e0e73192fe6bfecddafbd2f1bada402bd4b321eb9e064b32546899488afbf931495f3f21f3962acf8e7bb35f2e0ffd5852ec4c205585afe5344920168180b0ef76e416a5617d2ed341fcb742c3b8540b0f4b396ee5e9c3ce28489290edc55fda4f51b01bc72dd6c9d41c3f48f2ab299cc3a95625852991345e56685426a927831a5e544a50849ccc573ac74519aca5ee6946830e0094c34c92b5192d3524d0dbec3e3859df93e4ad2c641ad4e60c01fc1de96ad282cef45812b9d0c5729cea1cba03f3088d34d3c8a3537e3aba686430f1c7e61e63f64e2750b67a6a859f1609a45334aded7e1380646eaf58af427201af6627b95be16744a529181511a1da3e4bd9a2e9fb8bfb933c9532e2d1a9ea3ba2cc3c6c8bf891198765f485aff658bdf1f36f73b8dc6985563485aa0b5e7990ad22a0bd274ceac2ec6618f13b3c768e809517dd8902a5c87dae6a6536effc0541a6c42ff1080fcf8d582694c824f16929b97e9d59cb97d3068e6548c5dad62597728cab4f9438c8a61b4e42e7d98044c3821c402713ed61d0cfb220941be3f23df88d0c8b14bd1ea9c7929a694f3be505f201e9787f42e3adef1f5cb472f9ea265d4b01a97894b1b5be94cc99c9e936330b0068b36599a1908051b63c9c89dcfd66f88fdb59dff03e9718f28742027d40000000049454e44ae426082') +DISCONNECT +/*C182*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C183*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(31,'Statistician','2016-12-18 21:12:00.033000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013e34944415478dabd5a07589457ba7ea7778619986118958e88a2828d58638fb16bd4c49ab29b6eca1a13b39a6836ee1aa3c69b98b89bdc55e335cd92c4de62898218450111e9206d60801986e9fdff67bf21d9fbdc5d9f1b935ddcf33cc3ffc330ff79df73bef2be0738a15008dd39381c0e978620323212d15151b03b1cacd96c0e8968300c13c3e7f3930502418ac7e389f3f97c5a9abf8d3e56499f3b469feb080683bf6ebeee224000b4110ac5da84848419f4d246454571ec562b2ee4e6b8bd7e3ffaf64997a5f7e9c3a7f7b8fd3332a056a9d061b1a0c9608085aed6ce4ee64a7e7e416969e94eafd77b8a1e69206cec7f8400818f888989692e2a2c94c7eaf55d3f73381cf874f71ebcfefa2a046855274f9a844913c66170d6200ccccc4404edd03f8fb25bb7f0fe071fe0e8d1a36837990eb22cfb08e1f3df73022a956a3581ff9356abc5c64d5b70392f0f417a6e436539c6f5d642211162774e097c0c3069ca547cb97b271411113f7e9865c32bd075db42bb71f6dc399c3a7d1a878f1c81dbedce237ca3ee29015a7dd5c851a31ab76d7d4ffec63befc354f43dbe7a751e5c5c3ed4512a44ebb50811f0fcbc1bf8e3eee3a8b1b9d177d8386c7d67039252e2211489ba9e63359b515a5e8e8686065cbb7e1d39b9b9282e2e0e51def4218c55f792c0677d7af75e225769d1565f861b5fbd89488d06a120a1a6850dfa585a4917c44221583e17ed650d38575c8a73b70c68f18b3175da4c3cf8e074281542ecddbb172525b72097cb71fad429185a5a40497d92304ebd270408bc822e6d749584bfbff29797306cfc50b00e0fb8022ec24f66bc7eb4355960a86f05cb6111ad552175c210b85d6e34dfac425e51055a3c12d844f1502b24b85d5385931442143ee8e8e8083fd645af70b572df0b0223e89217be57c9c46838b5115289080dc60eb83c3e444a8590894510d0cf385c1ec40a19f83c2e1ced362c7ce5cff007fc88964b11211540d73b09b9554ef888b0dbd1891bc5c5f8095bf84b3fba2fbf170496d2654ff87ed6d0de38f0d173f074b871e16c01defb3a17de7072f2385008800c7d241e7d6832b2260dc2ed8b05f0f8bcd0a5c4c16bf7a0bdb11501870bbe9818cc7d730f3a3a1de072436098ffada2d308e7897b4120932e45e1fbe72767e1c3771f0713f060dfb13234474f44cf3ebd2112f0616c36a2f9ca777861040fea380db6ee2d85227b1e22b57a045906764ae0f6abc7f0fa8244d83abde8f7c846d86907ffcf984b380f763b81296909d20bb70d465f90899832301e9fac9c8952b317674473b174c138c4ca8510d20eb8022c8e17764055f8016238669c503c8647670f825a22a00de2c0ecf4e3d0a53a68cb7660561a17878edec0fafd97600d04e0f405c231f400e1fcaedb099c7d765e6eb1d53c6ae5de8be8a75763dd9261d855e8c363efec43ba86a287cf878ce25e4409ed2785f0e1c60dd0324de8b3781352d42c78544225941f7c7a96dd17c4f2a796a3af3b0f43d4711848fdc3c7867038b71a5f9754df5fd9de99d3ed04b62f98386160baeeafb7da4c89ac2b80a7968f83a1ae032bafc661fee2c790d2430a9552482bc8c13739b5d05ddf8c74951f1f99c663eebc5948d68ba1a404f60459ec3e740d838c9f616aa612c70fdc409f017a98daddd50db59dcfee2ba8c839555117e876027f1f875f5bb6411cb4ff3e73681c5431729cb87013570303218d4d854c2645d0dd097bd151bc3c3509116a193e3b5e803ac97d90f6e80301f5068fcd04a5e10c9e98908c8e363f722fd742a989d83af3ddfdafdc6dee7f9bc0c74b1ee44965e2d342d63b61f4c838eabc6af0453cf8ed16d8a8eb369becf0b803c8ba6f0cc462165eab09126a5a66432b9cde00c42201845c2e547a1d82a47aea2b9b5170a30d12b9e487769373fcd35f9cf6de5b028b262b394cb08a0904b43366a4234a1b0921551eb7df878bf9f530599d50886498366b12846c27954d0b241152fc905f05439b1b19293148a578e751e3f6521eb4369870eabb1a48a4227b00bc61cf7c79aaf29e12088fcd0b66c5cbbde6f25973fa4ad4b4031c2ee5c79757d0dee9c14b4bb3517ca31e7ca116f74f4e038ff5a2f45a354a6a9ba0eb19834367ab91d55b8745f30723e4f2c2d46cc1a143e51e8f5493f1dafec3b7ef3677b710d8b47881bc07df7c73e284d44489320236b71765b74d1899d90bb268259a6f3763e75739e8db4b8f08a50895143ef3a7dd87289d1a750d6d3872be14da483916ce1a824efafed4999a5badd00e5bf5c53ecf7f84c0bb8b16689384edb5e3a764c859be90f4bf0f66b3851c991276970f3c9211669b1db9572a20938af1f0ec9190ab494e7bfce093dc088245e1d55ac4112101798793274adadb78fae4555f1e70fe8708ccd3240a4df513a76448031c2a8b6e3f341a0918aae33c1e0f45a58dc8b95e8b26d24061421e02cee572a0a25c18372c152e3f83c194072ab10ce14c3e7cbcec9a5f9538f2b5cff705ee3677f784d0a2f9b2084f63f5cc590363d53a156a6b2d484c5411f8b051e1822be6e3fcc5129456b5229256fefe2129502bc524ec780400686cb7434038040c839bd7aa02259d910facf9e6e8f7bf64ee6ef3c4eb1f1cb37e6296e28dfec37a8390816508109553843824ca18dc286fc4c94b95941f41bcfad858f48a8ba2fe400b4cf373041c585b1d387eacd0d96093ad5c77e2cc27bf74de6e23b065d962a1abb1f2f88044c9c4aca1495dfd802310801b5e622a4b4132381eaf0f2cd9339140049190df6525590a33afcb83d387af31b52ecda8b5878f5df935f3761b81f0f8e3dcb10a2e045ac6e9795aaf645f1d3a241e71a93a08082c9f7a038fe23e3c1bcb06c1d0ceb024973d661bf22f96b91b7cb1d39efbe2c0855f3be7bf44e0e58f8e8bb8791ff844863c4188c349e4f0c5c3426cf01926e01be475866c2c4ff127b958f75e825e24d451194d4e8c417c8a965c1a91205d1476660c29546b5b27ce9f2d095e338b9ff9f3c5bc9dffcaa2fd2a026fee3a1721157256b12cb3bcfeb3573e97da1ae773f5691ad417c3c77021944a903d7b1152464dc1d1377e83393387834365f57ade6d48f822c490a9094b079f37088b85563eb7940d2d58e34c9b3acff8e29401591ea7f5ae75ff571358b6fecbc88c04fd73bda2450ff91c1dfd6c768788152aa09272d03b251e463b8be6cbdf62eeec19884ee80b91b8cb1ee3ec91bdb8fed10abcbc7a09e0e7a2aeda88fa3a136edd6aa2df11c0d2d60883321d1bbf390b855484e5abb7eed8f1ce8a27bb8dc05b3387086cb6465d47f4880275e6244d428c8a348c1a498949c8a0b81691e5abaaad43794d3da4ba0c3c30588fb6b636f89900a2543188d12871fec01e341f7c030b9f5c4aaa938f10294f33699ddc0b85385fd28251eb0f60cef8a1e1c30b94b6d9fc0f0c1992606e22a6ff2a814d8be7096d366b5c87b9f6378250dbd32e2bab0aa46463fa0bef62e4e034126301d4d5d7a3b4ba0e15f5add0c5f6c2e2d91370f0e86eacdbba060ccf0f65b4143cb110237b4fc43babb7e3cad75fa1e5f4463cf3fb671172ba1160dc3875ec3c0cd91b317bde03a06cee32338d75ad908904ee1b1575df7a21d910f07aaa562f1ccefc22029b16cf15d4d4dc5cebf2da9efced938ba25c4e07ff8b3d87316dc932b04396a230ef1c844137da481f660eccc0a0017d919e960c0559c2854f8dc385e2cb143e949c2487558a18240f4dc68d2b2510f8e5f8dde3db11e7f3a1f1e0ab9834712c7269e5db063c8dfbe7cc8494c383a1b513acd78311fdb49009c5e49159585cee50b3d965a96cb45cae6bb6fd1787cbb9b8e6916cf6ff25b07afaf807add6d2137f786b2522e3e35170ea2a38fafe48cf260dafd1e3e3af8ec362b5e28985b3d0531b45b5fdc7a3c0fca2423cf0e850e852b9f4202149073f048840147d461d2bc088a53afc70be18b3f53b8082d3c8bf7002a9af1fc3c0fe7110fa9c68b7b8a84f33189e110bb9580c0f859f807a8680b413095a04a9cc1a3a1dc8bbd99c5bd7629bf8f69211779c9372de59385fd82741f1e1f465839e6a23d97b9da46ef6a43124ce9db85edc84c419cb919e9941da85ba2b9135b41a9197771933a74dc7a56b7958b47632b42a01f524824200421e0116ac1c8bec3171f0f358f8591baace88f0f2d85df8e0c59990644cc1e0d98fa3baac125a5d142664c5c34bdd211060c2a71c7417fae94a9e9a58c8797cf8e9bd1d478b0fbcf6d0e0057710d8f0c87ce9fd83238e67a5478c2d2e69436c7c1c9c1e0f58ae149a1e5a987c1ae8464e87d964a2f8bf8da6a666f4e8d103d15a1d22498c8d9a9b8ec86406420e893726080175dff4617150a824504492e7edc987ad4a8435338e82093af0d14bf31139e535a40d1d8ecc6405c4243b7c4ca80b70573653a004a83b771dfad28285a8934ba9f4d6375bd993b95549eb976437fc138105c2217d65fbfb277066411401a3d18a1e29a9d0a627c0dbd4048b2c1bded874b4363776892fb942069fc707bbc3057daf14ecfe6a13b6efdd026d32f501ae9840b27074fa113ed9e7f339b0b430c8ce1c8483bbae90bd74a1f6ca396c5bbb024f7d7210bdb3faa1bebe13520969a63068a211f6c84ebb1b62b9143d63a3e0f50769f76927c43c7c7ba66cf78a99fd1fbf23073e7b7eee1f06f462d6b2022974643a62126361aaa8c1c66f6b31e2771fe2a1d16930188d282a2a4687a503090949f0b919242425412e9160ffb15dd8b06d3502ca0014ca1fb79ea5fa41ee114aa870f0d3cb50aaf468bfb41743fb8a616fb3a0a2ce8c16695f14b50b307dd220686363e0f67abb565d42eab5aad90d4d94a22b74c3a7ac42111f6d1d4e9cbe543167f313a30efd03812d4be6c903ce8e0d5346eb9e4f4e8ae1ca4988bdbc6207722b3b113d721e5e58b9023346f787c5e1a4156b84ddee8026490ce24b5a464c71aa85c3d18ef73f5d0393a3014eb71d62a11403524661c56fd7c1cdf071edc89798916481502282401ed1653b7d761b6e36fae193e890df290757db0f59a9d170b83d309a9ca49f045d891c167e722acd3a6d046e55b7163e35b9dfe03bfac096a50bc5498af686316352b4d1fd92509c578157d6ed855ac587b9e704acdabc0d93b3e2d060b4e0c2d5c3a46d7a222d7e10ca8a6b280103183b6a04ad16a9ce4090922e40958a0b1759cbf3970ad05e7a19cf665b5177db01b1448af82435999e6097c8138ab860c98595d51871d89c82c79e5b0e8d94e446300037f507bbd30713298c32da310f191f854c14ba5a6e4cfdf8c549b57734b2cd0be7686315bef7fb25cbe6aa6552e648b94bf2edbea39ce868314c3d2762cde62d189795d8e563994038c118c81452442a15b4a2d465cd9d686926a92092a09112bed3497adf5885e9bdea11152d43cef97a640f4f4047870b5aadac4ba186f3d647711e3ec9b85e761be5bab998376f3e05cd8f653ffc3e2f9cdb942306ab1385652d54fd6e37d9fd48fcfcf569cc1d5262d39287799ca04f16e44bb9fdd76ebd52b9f3adb493bb76434ea5d299fe10d6fc713d4667f48287d46488b47d4787b56baa46ead0a6f676f4ecd50bcdcd064a4215ecd54598195d02b95e899a42036e37b931b4bf92a49102ea2819e59401ba2801f4f15af0c8fc34371870d21287314fff0132aa3e8160e8ef7f7deaea3d522197769bc5899c8ad0f7d7eb067eb17a7ac9cf8ab9ed85b6f796642957ec5cff26f6bfb701da9808d893a761cb9f3f44ffb8489ccfcd83521101abc50287cb81d8d81e54669b909ede0f358676882b4f618ca80435462f1a1316c0e862a1aecb41bcb81d995914f7459d28aa0e62fc401e140a112aa969d5272fc3e8990f23e40b74f59d9ff07795d970650b879c941cdcce6faeef5ebf6cf8e33f4be0edfdd797ce9f9ab5474edd72db4b8f22ff9baf2127cfeb4a9d8e8def6f46ff9e1138f0f5b7e819170fa9548a366a72ea682dea6a6bc9132752c5b2c25a73abab9b7bf832a4a424812b9423d05c0b5efb2dc8f4c9d0f61f869a92327cf65d3e068f1c83ac617dc1f178e10f323fad3ee71f308528946432116a9bccbe6317ca07fc2c81df7f7a69d0a4e1a905d1d4312508e0ed3963d0507803524d24b8439760fdc63791aa91212f3f1f7eaf9fe25c03a3c1008d2e96c2a1812a8e04f1bd33e0b4592854d490c82464f4f99048847052bf68b778d14a8db1a2b206672e5c44d6a02c0c183c840a07552926ecdac2ede11f255018ae40c085db13c4c9abb52ffe2c81953b72a469099af6b45e2a19472c078fefc57bb3c7c05c5b039e5a05eec0f9f8e4e30dd0c8843873f67baa3a1e2427a7c046e5511ba3a3448d818f845c34010affd9d547a0ad761fae169621e7e205b49415c0672841c86182187e7a8f4150a1b18f5eb7b734294a3c4c25e5f284025e17e8304e26dc99e93edcbd3b5d5e5c2e374fbbaba159f1c9f7bfbbaf9f7eab8c1a8958190d97cd8c0fe60f07e3b411896870321fc62bab5ec490a42818a90a09688523554a48c5c2ae7321973f80a232038a6f94a0b1b4004d04dada540971d089f091166527cb138aca426efb7f4b064c2b14654ebfc5956b19429a2d1172272aa4fcb12ab160804226908aa94b93ad26e9c1a2bac5b9dbea619ebc2b8117b69fe344c98517fb27458ff6fbfd50503c9bea2af0e973b3c109ba1092a9201e34177f7af76df4eda9848f849781244343530baa2aca917bee2c3a1aaae06fab86c067039fc33002beb093cb175e0b71b93f50a0ff8530759cae32de0164f1c6e37c8227a5573c8fc7192de27306f0b85cb9d7cfe45060fdcfe7aba6fa7e91277ee1a333ca28b9e076924ea126b103853e09b5974fe3e0bae7a82ad0b6f325108f7802f317ce43f1b57c94ff7011eea612f83b8c90f2a9c6f379212e9f670df1447fa572b88df2d278a6da78d7ff83f825e3179bfae7b79d91d20a6cd0448a9e91f13822796c3c0a4fec3317ee5a1729a1cd0d914fb6b342f0bd9d10867ce0f238661e5fb433c4e1e6903c2ea34718ced5187fddbfa2742781bf8f97b69f515369584206d968afce3f52bbe78de91cb1e44dd2d23a0e1b6c015f58405d792f8546cef7b5c6bb9e6dfebbe36f2d9c3d81012718b30000000049454e44ae426082') +DISCONNECT +/*C184*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C185*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(32,'Tech-Support','2016-12-18 21:12:00.035000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013144944415478daed5a09941c7599ff557557dfddd33d7dcf7d4f6692cc242121242117040849388208ac280a9e28228a07228bf2541eb8c0ba2ae21a1405a2b02e2024040866924020c76472cd7df75c3dd3337ddfd5dd55b55f15793c79101f59e3c37d6f6b5ebd4977aaeafffdbee3f7fdbe7f0d234912fe2f1fccff03387db00cab9aef2e5e5162362cd36a546e86657305518cf37c7e369c480f76cd45bb73f4f99f0e00cb304c6b89e3e26b5bebee68ad725ee6705ad5c5e5a530b99d60753a64d35984fcb3e2c8f0c4e8db27065edd7d6af84f7dc1e8014114857f0a00d7b6d4fdf0f3ab9beef1ba4dd05a0c745aa073baa1b13ba13698c0721c18968190ce20393e81537b0ee1976d27befb52cfe8031f39800df5155ff8e6c6d647cb3d26b556af01abd540455e5717d9c059ed5019cc60d46a7919887c0685441c719f0f07deee1dfbc6736fad8a66b2531f1980d22253ebfd57ae78fdbc794ea7c1c4812543594ea5785ca53742652a022b03507190d710f9b402809f0b203c13c5cf5fed7cf477877b6efbc8002c29735ff7e36b2e78b6bec60aad9e8c57a9a0a208880c795cad05a3d5416f341230169228a290cd22139a83944e219311d0de15887ff98f7b5b6319def79100a877da2e7fe4136b762e9ce760b57a8eaa598574818546af07c8ebe99c88d9400c1a02a05231c8657328b5aba16504f0d902bafb83c2579edcbb7e34147bf32301e030ea97fffae60d6f5cb0d8abd1193814c0229d27003a0d24a81400a1500ac9440a14001459f4a87069a0a52b79be809ebea0f4f96daf5f32128eeff948002c5db870f1b7d6d71d58bfa2c6a0356894ef542cc0b1323b16502888203b9148e7c1d21a45260d38aa0f41649508741180db7fd7f6b14bb65cbde39acb2f17576eda24fe4301bcb16387662e146a4926122d313a7d13e36b33c9d822351925d223f41a16457a159c26153c451cca1c26b4946b9127b3ba2632180fc4311d1731971090a12fd33901d4e93266933962341806ac167387cbe13ce9723a0f6dbcfefac1730ee0b19ffce4a13fef7af94eff4c0012b9da66b351daaba1a39c57310cb27c0e192ad47822895c2e0f0d7df7f1b5cdc8e67278fead01b8bd5e98cd26254a06bac7603028c51d8fc7e88c23194f402ce4515755858d176ff8d14db7ddf6afe714c08d5bb77ea9edc09b8fcd6f6d41795919ea6a6b613299a125e6911f613018118d44108984914ca5b07fdf5e0cf5f41321e970c5d6abb0f2c2554825938845a3689edf4c15c3d27549cccdcd41abd1c0e174616c621cdb1e7d7476edca955ffccd33cffef99c02f8d6adb7d6bebe7fefa9ea8606838e9a550d0128e40b282b2d05cbb204444bf49821235354c42276ed7a156ec4889d58888e3ad4d656535d1430333383356bd6509472108402a2e108caca2be0f178b08f400f7476fe61e79eb61bcf790add7fd75db69776bd3c64b0db8b4d2613f47a1df204c042d281e7797a1243fd16d090370541447f57279eb8f3120c8ef9f1c04bc3b8f9b337a3afb717bd7d7d2825d0721a719c06fdfd7dd0501d2d59721efcfe29c467023fdafee28b1f2a7dce0a807c6c59bbe68f53a1e00daed2322c5cb04031bcbca202d94c16466a5a274f9ec0d0d010d5420ef536164fdd773dfc53d3f8f483afa379f9858024607474145bb66ca1c297303438885e02555955899a9a3af4757652a34b7ef2e997766eff8700b8ed539fdcf0f6d1233b0d76a7b6a9a989f23d02b7cb451ea7e64429912340fd0383880643b8fbfa65b8e9ba8b81e41c7ef1c737b1a33f0f6f690926c6c7d1d8d8a0a4937c4e90c0d350fac9e274ce371adbb06efdf2871eff4dff590378febb9fb9ce6a2dd29231db2fb9fb1767e4e42bd75c789f2f307b6f6543032d2a129348907f6aebeae123a176e24427ae5d568e076edf849cb50aeac4140a113fee796600fb7aa6210a399cbf6ca9926a09621e39a54c262332e48c72a7e3cee7dbf63df2a13dfad7007e7be3657fae6daebe8ad11bbebee61b8ffcf44c372c6c6a742423d11dd5e565171428ef454eabb0104b15908f8771498b1b5fbb61154c9e3264f42ea8331118f8391c3fd68f6dbb4ee2d5137ea8f50612790c3538112245cea451c74adcee1fee3a78e4e1b331fe5d000f6d5ec5b88bb47b9ae657ac67dda583338170eba6ef3d9639d34d56abf581224eedb3eab9ad0e93ee529e52a1a9ca8e6bd7cd43addd0817d1acca590651ad039b4b2131368aa18161782b1de8e89bc3ae8343e81e9d43b620f61617590f4952fedfdfe819ee3c5be3df05f0d3abd6186abce6aec6a6926ad1592ef40f4eacbefafbdb0e9ee9a6e262ebc3a974f6312d04eebfbe75f5d1c5f3bd069bcd801415efdef62130291e4be657436f31c23f368d7d2747607114e1a265b5a87215211cc9e02f0746b25f7afcb525e134dffbbf31fcbd00b6ae6d6d6db41fa9a9f56ad22657617222b856abd18e715ab557cce74facbafde1c27b01d8be98cff32951328e6dbb65d50b9b5757dad53a8ea4818081a930f61f1d8459c8c346c26e2a95035764c2ead62a32de4a328fba76268ffd074753b73cf1f6b2442afcf70378ecfa8b7fb07289f7fb364f3162eaa21962bb6da622cb372530fa70207ccfb22fdcffe3bfbea9a271cbe27472f4594663a9fefaba0ad5a75759188bdd44a3238b4cae804edf2c79dd8799501216931e2b9bcbd050668355af8581532393cc62c75b33d243dde57e466d9e14f9f861814fef9044e1cdb1eea7f8b302f0e095175aaabd96234b5a3d8d2c35a89cc1219a2d66e8751c2b51438ace45222f1df02f78f8b54490d3e9ee70783d9b2de5d5cb8c1e8f3e14e88779f82ff8ce0a139a1b9d78b17d18cfbc39807032831879be40f47a414309bebc65315c24a7d5341b9bb51cb2f114fe704cc46ee7278881f4c4fd31e46221313d3bed8bf8fd6da968ec57e3bddb3b3e14809f7e7ced754b9bdccf7aca2c9001989d25506bb460c51cc2b373f08d4c657ed626ddd91ef76c3e6f59f3e6e2ca2aa81c1ee8acc55019ad38f6cc833074bf88aaaa1294180a4827a2082632d092a79b2bec5854ed8485e4b6a7c8487d4c52e447783a8ca702d5985a7d07ac069ade723ca44c9a588cb4d4b80ffe8181ecccc8e85d799effd558cfd37f3322ccef3f77f99e150bdd17e9acd4da8d06982d26482c872089ac119f1f069d410a8b2ee9f5ec62565d773e44bd096a037953cd29de3bf0eb7bd1fdca13a8a86d8086a87165850e5f5a5306a3468d8e91199ca4743aafc6833a8f0d425e804029e61b8fe04fc6cd28bae82670a43fe25901c94c0102a9d1428ae6e65000a1ce63183f7efc1703c71effeadf04f0c2d7ae1097ce77333af210c3b1d06954a4e155081189721a0e45b66230d4b04e26bcd8a9db0c8e0ad348ab9a6954349367773dfe2076feea5ee80d26ba5e0b1ac4b096d2e9fe6b17c1a2d72043530d47c004f2be48299989a5707842c0e0faefc153bf08791274546b5013905c41c21ca55e289a466a6a1c91538773c3eded578f763df9ca1901ecf9f656695ebd035a930e6a9d4a294481e1c0eacd603514769a758578085d313bda2a6e8585862fa34aa0c645d28655636ab41f3b7e792f468eee25ad4f861229c846ffecc6f371452b3533f2ba48dd5aa0092d9be6313419c77eae05d66bbe038db148297aea87b06a692022c748f4214a1119f247101aeac7c49b6d23b33edf265ff7531f282f98b7eefe9854516185d6a8854c85ac56ada4872cbce80b64291a03a4eb27636a245a6e015f7e0112ac0ee44ea849366ba9287d5dc7f0caf69f21daf30698020f8e28f4ae4be76155bd57315e961c32f3f4ccf078d9b60686c51b318fc41bab35204bd3992c4538025f44539d4d232b7006fe441edd23d308769dc0e491b79f3bb1f7916b3f10c0ee6f5f23d59511eb9875e0f41cb5798a845a4500c833e4e18ca4c1e84490262b8128d18298a511c3fa6684b465e039abb20b910905110a4ea0ebe0ab98ee3e0a8974cd4566164b2a28add422cdc53c860b06049b2f826ee5c720f0121cac84e292324a214191e194bd14019664858aa48948a928c1174aa1bb6b18331d871293c78e5ceaeb7af2d0fb003c75db55c1052eaddde1322b11e08815d454802c2329e924e96c34add3d455c8290c22529e660516f1820681348baed2ad0881fac7dc24cc24e8daf71f86ffa96da8a1f9b7ce45dd986a2697cfa23d33075cb601552bd7d3b511ba834745f37c1a3d05c5fb9c5a0d0323627ad4a7ec64a869f664699a8b4a1c46fa4731d8b67b3813985c4eac147a0f80473fb7e9730e4ed8d65ae380c1ac5340a8a97859f290bc59451f904da41109c668dae2a1a2a2d350c11a5d6eaa110e2f1bafc4986921c64e1c415c6746f0e87e684e1e857796455de97c94db4a51595c86cea90e3c996e8758bf12464f1da59007b58b17c148002cb4669824f85857b742180e8f0b567bb1521bf982cc503c7adb3bd0bd6fefedfd47fef3e7efed039fde68e6b3e99dad25a635d55e1be42d122502c432726c7334ac4ccc09e8765d86b8d60d43b01fba54107687095a871bfb751722a9f760b2fd007a3a0ed160e2a0e22e87f8dc0b282663ec16276a8a2b30910de0ed5a8aa8da80d0741c0b57af47d38a15d014329838750c9d878e2a3b79659515341fe860a0665a52550e4789877a4b12934323687ff5b5c989debe4bc77b9f7e577e2852e2968d9b2b4a74f19e163b6b2c273569b1d2b04ea1a74682b169a2bd865b916bd9a27456b9e0d4a4e9899bc84324a1450639a2c8c0501fc68ebf0157cb2a2af21a24da5e81b763174aed6528b1b8d11b1b45ff8a45b0d72d456cf42489bb72d8bda5488df760a8ed39c1eeb0335a6f136bafac81c3ed56a835198ba1a4ba1236a783d26e0e3d070fa373fffedf0f1c79ec33ef0150bbf026bdb7dc79b2b1de535fa99e45456a0436298db4c18313d5ff826385797058a99bbaf404428640b32ff7ce0c5ca09ae0894932e934660373a49e6cb0b868c17dfb30ffad762c2c5f805a673571fb0c1ee53b91bc600358920e250860953d8c4a4312155692851a06635351e6857e03661ccb50ddd448a46250360c74d438f3990c7c3d3d38b5a7ade3d4ee1f2d7d0f00f9685cf3ed5ddef3d75d5eb9a0190e83046d7c1a92c58582b50463be10666652b0d974287619699817a9c818a5d0e40695c916108966e0ca8da3c94820981ca68f7443a0e1c569a579d75587628d0d7f891f45727e11163918acafe4e1b1103f500d30c478923c9226e3e8a07b7e3b560566f1957054d7529de91447316201fec1210cecdf3b7d6ad73d25ef0350dd72f3dde6caa61fbb975e082be91d793fa790cf81e149d750e3927794a7fd19ca4d4a31a749694c32ddca7787e69230053bf1c36523a8b4e4909c1ea382cf2292a2e64512c1e4f4c0eaf642457565d483e4890af2cc2ac683a481e280329a8acab3629134f61d0f894fabae60ac2dab193d692eb92fa808e414f5a3a983fb237d6d3f287e1f80aaf99f345163f96f53dd799719cbeba122cd23e6791428dc8cc84f9aada6bcda6caf8e27d5ca48a8257529b34422ca83f5f7e0be45c7b1acc1a2ec4c4bd4cca45c166232a88c8c142430c4662ab5bc87face76bb94cbd0f3734aa3932d577ed3c9e7f2181c8948ff36b948ca365dce9a5d049c15c991094c9fea42b4eb70d7f091ff58f83e00f251d97c63b9ca587c80735455b0044022fe1652e12ccb69366b8b8a163b6aaa1e128c5e8403120c2e0b4462ab1885f5065727beba224e9d390f416f85c419e4078389fa21a6e3ca0b0e599acb5a48315e3118cad68a6cbcac52e5e625ff4781d2d33715971ee8af9402e51b58a38300485948895984fbbac0fb477ee9ebfafd573e10c03b91f8d43c72d535d4852b2549e8a59576f83a7f375cb7e26bcb4da515077455cdea58c18ad86c14b5a6297c65c12cd69464c166c2980e4660a6905bbce5f46051793b235203cccf4d93ca4cbe0344b1533c0d4a7af7b70c4eae2739e5c6a8de1eee2d86df448d4e6f242e4f0a626cf6f57c32b69d2e7a917451e28c00ce7494377c9ce5ccb67d8cb76e3563b662bd6d06373404d1e4e248cfa731ec0f22c50b58d858432954a0d48a424fb385d66c417a7c945231a9785e4e13513658167844cb42e11dafcfc6f9c2e85c7caa7f3ad2d71fccfaba920eb3c0d9023a936b982eeea0f3f058eff6f7197b561b5b26fb827525658b5ef9c6a516ddc616a2383e05f05984a8600f0dfab1aeb51e46ad1629d242d3e1383cd484b43ad24ab3015a08ca96639694668ad46a2c9d97ff2d0693d9f041df6cdb41dfcc6e5f24d145f1f0cbbc40675652f2ea6f1f67058061549a5b569fb7edeb9b1a6ed2126f8bc4446962a7c323333ce533bba2da4dd25f426f20020b75d286ea0a24030108c4e1a1740e81441627fce1de8eb1e0ee8950aa9b04623098ce4cf105619c1e4fde404e6e2d64d3877e877c56003895aae4a1ab573ebf729e7bb9cccdb3f12cf6f44c1d79b173f44f0ea3ce7afde2dacf322c54a15cc6bcbcb64c574a9cc9c769c2a294f1c532d8333473607bfbe0ed943e23a78d950d5518f5c378fbef02c0c8ba81e68ecd4d5577acab2dfdcc443431ba7764eab5eee9f073b4ba1c763d0d3415822819d6d7977eea9ae6ca5b3c7a8d4a9ec6e43732c7fdb1634f1cefbf632e9539486b163ed4a2e73a0284414ba751c5302e9abc52746f94be9687ee3c14e9471209ca74586cd56be7b98dfa669a8dcd093e1f1a8fa50e640b05d9f3726e9fb3bf3039eb977ca723f1eef141c69cbe863b7dca87781aa4702e8d978fff014ab97028ee2a0aa70000000049454e44ae426082') +DISCONNECT +/*C186*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C187*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(33,'The-Guru','2016-12-18 21:12:00.036000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013514944415478dabd590b7854e5997ecf3973bf656ec9e42e2137424012a041400ad2d62a56601551b7ac55db5aad76b7b5b6b5adabaeaef546ab8f14ddb537abb55541ad96c58aa8c8252277088490844098dc93994ce63e73e69cb3df9ff3b3cbf6a912c46787e72593b9fce77bbfebfb9d089aa6e1b37c78fb0605fed444b010440e95bf9e24c8042d5c1c38ef8b0b9f05016eb444b07398fef63a1c67fece48c439e44f4be6bc0990f1ccf022e8de6687c5f85b56828d60e4e4546e348b409a9370f2f7d96b412291fb7f234086b3b428e486a608664e8245c0c50d630f85ff64176291113911463441c870024efe7b0f11512666c5a72440c633434ab81799f17ef63227c05262989025e43881d33560e0b0f0efb8f9e746382c1c5d442236115bce9900191fa01f3e429890774614a284c3d0d383197701a1804744e45f4f70434ff09f2c4a3308011e853ec210f4940c1189eecf8c002f5476211bf75a3e07bbf07e6ecc144225ff1c4b8d516ea8c649e4f348d9f87bc7084738e939d0d32844e8e7e731c2a73ea9c0cf8580837e94f143998758f807081ddce839dcdb5d846e1ea12c8f0e4bb91cffae914726c0bdcfea610b27339d50ce490779848f1381d1f32240c65b794a30a32ab8275ba0e7fa573831f6fc2fdcd0f98479cca382eefdd36d54d2f454db49f890135c4aa8269c24bc023d3de7f26bb542afb55622113f1f0255dc300fa198d04918242ce1bfaf836ed862c2e7098a26081b1541384295cbaec020d0c504aae07a83a62dd7f434da4ed800bd70bf41e821bc0abd8666f34886786aedfb7b6df6ac04c87817f70ab8a786b9679672e3d743eff3b7b0742137bf2d8be27e939cb3b9d399c5fe6cee1249d57c9224c67236cb7b0993e1bd2e518c1a54750a7df65a7eeee3d023f555e85ded37847a1ed9169e766122d0734e0478afaf815ea8ec3096935b787a300fbdce2f781ff4eef1685614bdd664eadfae3b357055b5d160331944382511931d663844158753aafc88c5b6ad33cf712f45632f11f91159d040dfbd137a0ddd44d841d844584618231ce24e6cf9db289c8d002bd402ee6196fbac4db2d07f851361edf011c266c25b49a361c58503a1ef7d351caa2fb40a8243cac2aa24e1b63950ea74d0749331a4dab0732487cd5925b1be24f074ce627acca8aa976bbab1dfe6d7b98af047ee9c26e8f5c11a4094081c3f1702653cf7cbb9779867ae845e58bf879e02ac033d9e321a56560d86bff19d6057c3057e33bc72085e350a8b9a86c9ea81d55302a3c180b19c88a3f134fa87e33822b8d4676a2b1f930d8627244dfb77e81dec49c2b7b8f1cf132e87dea95857628de0e0996df56309708d53c10f6ae087b3767603f4e263c4ee20fc800af64b19c978ed5d475a2e99133d6e2fb7a450685120c8b25ebe64b8d15e00cd64852aa7108e8ee270300263d9743c945fd5bbb7b8f027f66c9645f1594e80797b05e117d007e53442337489728808c81321c0728e0d1d2b8fc0217e10ab89dff25c6524d665c8839ed1a879cdf10f97597a5a0ce56e138a0b7cc8ca67a62beb4354529a4a7c24ec6bed86c319c013b58b4efdb96aea6e4726c59cc18a98358a0708df241c853e241710daa077a42411084e8400eb306c78f939f33d84e5840861232b58c21b748037ea74ae6a3a7c7868f5c9ad37877a3a8419358570386cc869060297417419919e4a6a0e16b384a31d3d188b64b1b16ef189a79b2e0d5a95ccafe8ac516e3823b3e88c54fd12f4e1c6f25f24026d9f4880cb864a9e732c844c801d20dccc8d6732e1c784b5943eb7650cc6beebb66d566e1ad9fde0e07008450d0b9193d3f0c90328ce93284c6688828244328560c6858cc90b9b1c41fcf801ec314fdaf1d0cadbdb0d06c12a2aca6ae81ded5e3d64b89eb09a4780d9c2e68fc8d3483d1b81a9bc784a784e9e227c8df0120f339b034faaa2b846311a9ffec1cbbf9dbac0127e2c1d988baa994d64ac8ce8701f0c837b11104611570c18b2d5c15b3103018f1d3d436348ee7b154762d12d775ffbdd970cb27a0345e7469e3eec1a4c23dd4a7802bac62ae229c508ec3d1b0191e73bf334eb446cacb33ebf8af0278ceb1ead49950c4f259cce5f556cdd74d7f51ffc65ee82daa2ffdc71780003e1243b188a22909616307f5a002334498e1def83c520c062b3613814c2a5b3cb91315adf7f60da258ff736cd7fd0914cae1473b9fb29aadbe81aef436fabbf843e302bcf20b06b221160c22acb23c0b4790fef408c4043ce6459e4ea3df1cbab3e78b97939a5eeeef660fad22bbe587ea2b9191bfeda8ca4c18c8c66849ac960f9e206141438f0dcfa668ca6b3f0398df088129a16cc86eaf68f38e45826e20fb8fea374d697db162dbbd5168bbc43a631bd743bef4a95dc916d3c952644a04eafbe71f62a0fe92d3cbc1ed96abf35aff3c89abb5e7ee4dd9b97ccf36ddadd46467a111c96b12556893defbd868557dd04c19887d9f1b750ea73608f7f054e1cd989edef6d46e3dc2fa02af621ca8bedf8427531068eb6a7be3ef5ca15ad4b567ec3311a7992a2c0227e1bf441795ae9b64d34854e17f169e9cbba101b62ac75326db28bbeb8366bb13fab6a72e3632ffdec91c29e4e7365e34c9c0cf6e3add16a144c598081b666f87a37e26b575f86b42661eda66e781b97231d0ac2d8f33e9636b86197241c38dc861f7ffb89d549b76fa32599b84f13c45b789d2de4457c0574b1d87e46116b676ba3acfb78b9f12c7cbba1cb5cf6fc69d6850401c1b4647a73d10bab0f7ebd7b977fe695cbd0dfdf8743fbf7a3632081029719977cae1665f5f3e02caac0a617d7e2c3969370598d9836b9088595d528b699f0eb63fd99e7155f7d62e5d7ae90dd9e4bc56cf6565ec06cb17987b7d1769ec62a197fec13db282760e35160dbd22ce83a883dd8b061babd9cc27c1d15e9edd7fcfa8175d38fee5a7cd1f22b906736233c38808c9c85d7e38241145038652e5cbe02f4b66c4568b00f91641616a311ae4031e2a3616c786b4bff5bbeaab99d0f3fb3c698cebc4bd5dfccd3672df7f87c5ed46ca8b61181c8440808bc7db1d05d08bd2f6f81ae53d841bf4ddb1cf7f8db0f1a9f5df7c0aa9d61d9a1b88b95cba71548569309124ddb1c4de21c656ad5ec4b613419d1dbb61bd1911e58ed76c859197159c46b5bf6a231d9830d97dfd4f5e6b5776cb747c6fe85378b62de5299f632f31a644e6d3ef3aec5d9c41c4b23b6fab185832d359b382936917f93339aa3456d7bd7af587bf7f4f2f9d7524b74dad48ebf624e7d050c4613329934bcfe2278caa7425534a4e321847a3ba1c819e47239ece91c82b9fa72b5bd65e358ebcca6d44797dd70b1a42a12e9a7fb78b763328269a25ee86d3c41c6ef3fd3c6b31160453c13faad92da33a2703daf85a7520efb1ce7be4337beae66ae94fcf962fbb6375061eca55eef44f0649064830dd36636c26eb520198ba1f5f021182db41b38ecd8d93586d973afc1435667dba6baea7f75aada4ea8eafdd0373156674b792361f597c78b373c61029c44050f210b1f5bc2b7738fdc2d90ca24a37e36fdc53f3cf8eaca1577c1e3c7479b5e863bb40b591a6263fe39180b76c0d4bd15934a7ce8ee1f45c43d0d15c536f84d197cd01557672fbd5ddcf5eee677ef17a4ab3c77df7d9f3a12f2d2f2f923e8370d58a43fe2699c23e35bfed6be8910907814d856767aa1df4a5088c06d639148d7b7de7c63f1e3dfbc79a54c2db1bfaf1fdbd63d89c6452b50376b3e2452a0a1be13e8693b80d2298d70e497606870089dbbfe0bc3b205f32f5a88f70fec6bb9a3a6ee756b7979be904e3fcd1b075b70d8decda62f1ba69b8940f29c099c510b15dc132c9598427d8dba9023211957fda2bbeb3bb74daf2f188e46d072a41dc19e5ecc9a330f5d2dbb314a92a1b08a7a0091cba512180e1e839c8cc155523b2e372e9c5c02c9efcfce0ec77e271515fe5c5255b67333c992e535c05a79dbc7dde43a97fb422ce78b781d4ca642f38a79aecd9157d6f55db877cf8bdb1e7d7859b0a707afbefe2692991cfa8eed46b93d8ae0b113e81e4a214bed88e9a0450b6a2199ad48072e863bcf85af5e7f1d6459cd4cb9f9c6a978e619185ceeeb90cd86b9e7990a66377ddb3fceae7321c00e638b3c53a80211a8907c1e4fe48f7f7a63e1faf5b73efbe8a3f7da0bf2c583870ea187d228dcb20175a52e0cd3ead8772a8864740cf945a5f07924c41d9371d98df720df6d1f5f3377befd76f8b2b7dfb9c6f4c8c375623ca9d2d94c36a7c8381b45790b11c89e3701f6700f8e18a49cdc346ebf4035a1a893259f373ffadc73e6a677de5ebc7ecd9a6539126916ab0d9b5f261139b417c73bfaa198f3a0b92621dab5131535d5a85ff22dcc9a3597163401b1600f16fffeb975ed77deb591e643428a273b044d71a61d769b246bef25dc36f9936c3ae79bbbf648d2a018a54231a7e4d3c41c514d266ba67f20efa20d1bbffbca97bff88fc3991422f10486fa7b91099d80cb6981c53b0925550d08b6ee80c1ee87d99637be1b17f8bc880c85d4a5ad477fe29d5ed16e8a271203b50d3224b1353c79d2e044ecf954b7d79b5e7dc1305a50d260cac9f302237d8a259bacce6eddd6f8795ff9c533165c26229786ac31096bc0c0c0303ed7588fe85818a1481246a3804c2a45dc55981d6e04db0f68b9cecdb91abba42939458c9aacdad0587cc77022b5561a1a7863f5e6aecf2e02dfbb727aa953cefca8c069bdda5b5aeaf7baed06b724084e1a5292db850fdafb30e46e829f849bd322219d4ca0ebe42904027e5869a04d9a5486016aa1ed9dc791e7f6201eea419979148ba797c160b1219d8a4122f9c174d4899e41bcbfbb657b3693b9e4a9370ee6ce9bc09d5735ac6e9c51fffdd2e222386c6698694317a9358a24ca5495ea2e97816030e1605b1087fbd350bdd5282aabc2405f10822253a791693ed1708b25505d7f21468e6ec74581046aa6d48defcff4e571fd44878d5f8f6a0cddc13e6cd9b1e7ced5ebf63c715e04eeb87a7ed38c4adf47b367cfa4f2a53551d1b514339ced47a28148d06b727404d63c1fad8ba3a473c248892eca7717346729b6ef6886c79d87c2403edcb423577b64941923307a4a60f3952036d44d0e318d6b28811a81480ed2e8dffe83adf2a1838716af79ab63fba726f0e3db57bdbeb0cab4dc5b503c2ec2c6ef97d384651ecdd270b2e679c7f7bc91531d701514c26677a1bffd0892a924a2a92c420ed27faa0c3329d2b1932d9837730a2a1be7e1c0c63f91a42ea3e91c407c640892c9ac47951cc26e8849f43c198b63cffe96d8890b56d53ef3d39bfb274ce0eb3fff8bf09bef5fa9ddb2fa75cbd453bfea9a3eb5aac860b2e85e1f2720d073a63023c8cb2f8281f680747c8c0c30223a3c80fc0b26c3437affa3f5cfc349ef4f9a390799780c1dcdefe182199f83afa21aa15327c68b99a58e4ccad54e8e881111963e129110c6ff302b6028d88543a679bfb34fbbe20fb585a64c718167f745933cd9bf4be0a6c7fecc6c13c838b3c9623358b3c3b553875e69aeacaa30aab45b9cfe3cfb904664526494d16c819934be8908cad90c86bb8f235055079bcb85c1ae0e64a35158297dec6eda998f901ab5da11a8ac819a93c76741647010268b05aefc82f18137fed7104a2396ae224deff8482ffebaab6f2b16ddf3c3aa527765cd0505b1e280f7c35925ce917102373cfc9a20fcef9fa10de465bbc56c2ab3b8bcbe917d1b167dd1beefbed2ea6964b032ee759d8306032d2ee944820cc9512aa551525d85d2fa3a6c7b69ddf8fb150d0da8bb78210e6f791789d1517a3e1f479b3fc44877374c44c2e1c9c38c2f2dc691f73f404ffb314c6e68a468e6935eea859225f9911845df6058eb09f6e7629396bcb4f886bb7ab735ef7ba16f683471cf6d4b974d2fb03d354e60d543eb995c56a1eb1c474e550b1d56f3d419f5554b0eec3f6871ee597d755d599ec5e90b8c7b9bdddb14452341402a9d417e49e1b8b78fed6d81cbeb2111d7465a358b294d8d90a828078e77c1c26eafe7fb911a8bc257e487d3e3c6810f7621cfef45b87f08275bbb50d53099ba9a8091c1118c2694eca8b3f65871ddbc54c99459d9c0a48ace8eb6939b8e74f66c5af685999fa7e0742d99517af07f52e8bafb5fb25018587bc9a3974ac9d335d36a4a2e9d565fb5b06ddf47a2dab5a544498d88426a4c92545910b51ca5518efdd14b309a8db0dbcd480c47a88b482829f2a2b5b51b950d35488e46b177573b2e5a309dd64b1583435124d232dc1e3b22fda35a2c236b2e7f81da3598ce169697c956975791f24ae3c6928660c5b4c6b8451246e2d1b1ce70787467269b0bd6d714fbbb4e8df4fdf3d2991dffa7068880a06aac7c60a7ff3cf47a295d3090ef754eadaba99ce1f6bacbdc564305948c35168f096192c9f150af518987442a5a55842a58ed364dcdc4e1a38df940c780168e243413d5462c29a3343f4f10694ec4b3d48f14412d282a168a27d76655833d9d9fefcdf903f98ac968c9c8aa3042769ccc26625da150a895da69a4d09fa724539948e7a9a193dd7da1d1e77fb2e2e377e26bee7d51a497d81ae7a48cb22b8a66a5fa705b4c46bfc56a2e76d82c254e8735dfe5b0e5db6c36b7d96c724846838d924fa2b236d1549032249dad34e9585d65333985a2226433593a56502551502c66a34211ce4053e256932195cd2923a954fa942ce7baa9c086c263b19eb1686a5451b5949ccba5536939f6eb1ffec3df55a41fdb46affee90b6cdf60b734d84666a1c236d067cd8aa639e8750b5dc84939e4301a24bb5112ad06ea850693643119049344ad838c37eae34294d8411a1b1c50b39acabaa490a6b3e20ab488a021ac6a6a382b2b114254d328408aaabcfad03fa998c0e3bf017507d3199fc8aca50000000049454e44ae426082') +DISCONNECT +/*C188*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C189*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(34,'The-Referee','2016-12-18 21:12:00.037000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013484944415478dac55a7978d365b67eb327cd9e3469baef2d74a5d052a82d74012a0aa88ce880800a5eb88208c80eb296024a9901040511c41164911d66100a0203d20528146b77bad3bd699b344d9366b92719ffb8cf7d9ce1ce00331fcfef491ad2ef77deb3bce73ddfaf0cbbdd8e67b9d60e97c068b649fb2db6f46e833def40a5b176cf3885bb808b1d1c0e73a0dd6a6b62321977cdfdd6a360a094c564f64f3da1fd978d603c4b0019899230018f71422ee187e80c7dac86d6fe7e99845d31c08b17e22260b16d662bec0c165c4422f0c552bbb1a7c744406a5b5b5aceda19ecb533ce74f6fdc700648e900c775370aff87aa85d184c33f4fa5e5436f49193adf0d5f0c06532c01508c1e1722151a820964809880462a9c2f9fb0fefe6ebaa2a2b87cf38ab2dfeb703d890284df152327ef47257432493d0276c32508cd23a1d72f31e20da5f0c3ec70abf0151108964e8e9e986cacd0b52851c1c0e9780c8c01009509e77cb7e2dfbc7d4f72feaaeffdb006c1a214d55cb3917d50a31572c9743285180cdb4936745b8955f8e73d9151812ca87af2b0fee5eee888a4b74dc167a830e62b11412a91c76bb150c06131cb1040f6fdde8bb7623d7fba3eccef6e70e60e3489944e6c268f6f17415a8349ee45577582d269497fd82c6560b4cfd620804127bdec37c46a0860d2f5721fc0202111e130b3679de62e9a7ff1780c164c266b3814fefcd7d46ecd9f5e5810597b5339f3b804d236473fd3c44bb7c0383101a1e0536db828be7ae40ab936360a82f94521e7c3ca4282cabc517872f2340c340a0870c3ebe9e881c120b5737156c563b6c640383f663121070d938b2ff4fbac7cd9dca95d73b2dcf1540569a2237c0571d1f1c16015f3f2f9c3d79191c9e2fd46af2a4c5802191fe60b218e8d4f5e16a6e09ca4aabd1d8ac4578801071834211111901a55a85dede5e58ad168a0228ad84b89a7ddd9a7faf4cb3314ff7c434fa97016c4a56b0f96c666748b09f28223a127a5d276edcaa83da4385929a0a8c4a8cc690087ff45b81e6b66e1cbb900b3f2f15babbf42828284580bb0083a202111c1242000c14091ba512a0d168f0e8512d2e5eba392933bfe7c47303b02641219009395dd1d103b8210342909373970a938bf8d840b0b81270ed7d50fb12bb9057ab4a1bd06de08025602062a01a95d5add8bae3146282250809f601350398fafa21974b1010e4ebec155fffe97cc6b6fbfa35cf0dc0ca78855825176a0786fab3c3a206e0eca9bf401d9c086f4f0d6ee716a18f274654a818216a064ee4f74364ee8484f23b2cd4031151126cfae4383a1a9b1117e50b4bbf05ddfa1ec8645278fb68c0a3623e7ee6f6a77b4b7b963d37004b6315628d52acf5f37767c7c40cc0b1a317a11ef10ecc3215b6fc6107e66fd886a4c707a00f9b8496d0577066dd2c88952a4487466218b704d5bf14e2e0b13ca4c67a824fc05adb3ac1e371a0904b6167b1a9f01f0fdd53d475e7b9015814a370914b055d5eee0a4e587820ae9eff11fad77762d89449f07461c2907d14c36c9771cb650c2afcde44bc0760633371bda8172fd56c841bb3176f7cf0358604cbe0ee2a7602603018c4440cf45a18fa2e8349f15571f7f363a18f62145c0e83d1ad548af87ec440850545481c3b01ed716fa3d0e48fd47b2b302a2d002c111bd7eb3df1836938b8e8c768fe3d24294b616148b06af577a8afa94364900646a311fd542f4c02d163343f00833578d7cf1df657bc44ccb30d3db6670ee0c368258b48a35dc063cb246217d43777e3776387e185241f5804ae28b89a0343af054a2f57f8a859b0715cd1d5614090170f1029c0e0b071f8480e8e9fbc89487f252cd48ded163bacf44a02cfcce1f387f699ac2e6d0693f0749dfeca3307e05873c25deff0d98c588bd54ac69af1d24b29481f1d0aa18c0322152cdf761862010fd3c6272338400d5b5f1f4c16a6b361b160c7dd82266cdc7e1c7ed4a1d96c36ccc4461c2e079161be540f6ce4dfabb0690d96c023355d35cf05c07b03948bb94c6c75bc3718fa9090108b89afc540ae7081a5cf8ce6a616c86562b8a81460516a9809a4e36e76fa673359505bd78d159b8ec155c8a14e6c87da4d8e5129319049852829adc3ed9c12abb6d7bc900a61f789daaedf4ca3a702303d50a91170588d5c0e8bd1a1d5c1cfcf17f3df7f913aaa1e7bcfdf028724b343a4f1392c0c71c8871077529f14013b03fd660b1a1af458f1e929089816c85c5cf0caf838a7f71f16d7a0baba0dcdad5a54d46bbbcd16abeb99c7bf5dd0ff1280349588a11009521522dec72fa54526f792677fb8f2007626178b66a5c32a3020e2ede9600bfc51f5e826b2bfcdc6ab616e902ba5301bfb09a00556b30d8f1b7458baf52c842c1b5e1d3b04e9a306a1aebe1dd5b52dd075f7a2a4aa19f72a9a6f5c6bef497ea62994ae12093c5d25ed73de4e7389480845e1cd523caa6e44556d3742a92013a60f87e7900474d654c22251a2fc410da4352508f256c148a9e3f03ea879b5341bb164fb39d8fbfb316f6a0ac222bc515d4346d3f71fd575e84b1bb46bec0cdb577fd51a7a9e2900c77a4d23ffc3a8110317bef2522c1c74e44203c9eddb15b85f5c8de4a991181c1d8fa68e76f80f1f8547951528f9d3098c8c09703213696ef419cd686b3559b71cfee9e78a86a6e8b8200dc3cf4389f62e031ed5b6a3b3cfacb531e091d36d30fd233b9eaa06c62a25ef84056abe9a3421963538251c6d152d38f87d2e6caa4e44c58460a843320f4ac1f1bddf22c4a04580af067d444f46433f45ab138636e3cf7ff9b96af0e5e29a352a3e773571a8a39999ad2c7cc26131b7e4751b7a9f64c3534f6463a4e2646f77e5b5512342293dccd87f22f79e8faff2ad90819cfbbd7c9e40df05c4a924181f1f85266d0f15a601cded46e83a7a0b5ae56e43338e9cb686f3b84c2e8be94e5d3898e68282bb3d46ddfff7fe4f0d209d2892ddd73b5d2e7699f6b0cb70d445e57620383a5a18686a7dd0dcf1289041d2202d22127c361f26a24abe90464b52a5170a5afb73540336eb1baa326e5dbbf644c9f0dc00fcdf151e19e52ff3f22b0fee6d67af4af503d7530a2bb9552217402a139054b641ff7323365caa47195f89b27b7752aa6b6aaeffc700f8faf9b3bbf586141231ff3defbf67a5fafaf8483e98f72153e3e1836da38331fecd08eab21c6a6c169ace0073b709a7fe528195d9bf503d18b16cc947a4a66d4d59595927295aabda5a5b9f98f74f05c0dbdb9b66709690cd6245b339ec3116b365e1d6ad9f886fddbe8de0a02018f47a2c5bb102729f408c0b54236b4a2444de32c2473ac764c7c52b15587dad0115a50fe12a97e3d64f3f81cfe7237e780212860fd3e5e4e42d2660dfb5b6b6189e29808c0d19ac4b97b3c756549466994ce6a0ef0e1f622995ae786de2447cf2c916f87a7963edfaf5e8e8e82019500a814848c38d3f76a47a6348bc0f7872171c3e760feb6f34c2d4af47574b337c7d7d897a6f63fefc0568d776e0d4c993387ffe3c962d5d66d1f7f4ace4f1785b5be87b4f05202a2a9af7f1aa955f90d1afefd9bb47ac52a9403fa3bebe01836362f0e6e4c9d441c760defc79183761022acb4bd1d5a5731e952868bef51170b19e18aa8ca4c6ee222d387c1eea2a8a69e8b761587c3c264d7a039bb76cc66d8a84582241727232962f598c84c424a4a6a569bbbabadfeceaeafce7d5a8bbbb0733c0df3f69f7ee5d678b8a8aa47bf7ee456262222690914d8d8d584dde3eb06f1ffe7ce1026edcbc8998418350fccb2fa8aaae86b6bddda92a6d5c2a5c8d3b2cf5b5e8a139d7cd4d8dba47e52497ff463a292929a86b6840c2b0e1d8b173073e5af41145e114cacbca6026e51a9ff0025a5b5bc162b13ed4eb759ffd5300828343aee5e6dc4e3e7dfa34962d5f81c0c000b43637a3a3b3138e5f711c7fa8d56ee4ed2eb4b4b4c0b1cff08404bc402017cc9f8f84d1e3315060817ff0005c2eae84af46454699505d5585a6c7f5b091047f313d1d7977ee10f1df818b508480c040a4a6a4e2bbef0e63c7679f61d5ca5598f2d664cc7d7fae654c7aba8622d1f14400aeaeae8c9e9e9e73274f9c1867369bb16163262a2b2ad0d3a3771e79e8748ee15b4c92570e2e5f803727fd0e940db891770f7fbd74018103a3712c2b13f7cfec42a48a8beb0fdbb1f96605a2c24330e5f76f92339661eee2d524ec24c85cb70623935ec0b7df7e8beddbb763edba75c8cfcda5e8bb233824d47956e4002c1489b039739376e3a64c77b2d7fc0f010885e238a9549c4f00306efc78e7a1d3d4b7a6424fec52535743629ee954939e1e5eb47905264f7f176fbcfe3a6e1ffd1c625d2514021658fdbdd0786960a2b4b1f55b690f23b834a89b4d267adf074dd448c8a39331206e24d6accfc08c77df81b78f0fdc346eb87ff71ea692923d7dea3432376660e6bb3370e0e041cc9d3bd771869442d1befe7701109d3189b31bfcfdfddcdf99fe0ed667aca72143439f73b174d16224258e80c5624687560bbd4e07c7616e485030f23ffd2f8c1c2c0547ed4e63218d86561b81a47d696f260df2761a76f53d4688847cd8ec365c38fd23520707e1f08ff5885ef239a47c1662e362f1f9ce5d788d22ea458c2610f0f1f8f163d45004925353919b930372ea21a2e8697f17407c7cfc5bebd7af3b3461c2ab58b1621966cf9a0d168d7a7772f35145ded7a8d5347919e042c387416f40f4d038b84b2578b86e22a2e2c248e383942983665f2d192b8044224787ae97c6489b736067d86c54337af4298371e2462e2e1556a2a8b21adf137dbe37f33ddc2fb8871b376e60fe82057883d869d6acf7e0e9e9858b972e6363c6061417179b626262948d8d8d86df044086bd5b5656b6fffbe3df33b6efdc49d313075ae2f5f431639ccda65ba77716afc6cd8d6aa2d7791eba70e122642f7e1bac8662d8a5aed09a6c088a8e41416915aee63e406c903bd8349159e93e7fbcfa007396adc7a2f9ef434591f50b0e41617e0e66cf9e8daf0f7e43b2bb1c478e1cc5c7ab5763cf175fe0c8d16318392209efcf99037f7f7f673d4c9b36edf5ec2b574efe260092b27ca150f8454949c93b52e264c7b05e5d59896fbe3de404438dc541699053eab8b8383c2c81dadd0d15e5d598fcbb57f0fad499785890473da20e7357acc1feed5bb17cc25078ca85e033acc8ba5884eca20ab0cd46f8f8fa61df9ebd7863f2efe1e1e14191edc59dbc5c9c3b770e1b376d42596919a2a2a3883014282cbc8fb8b838ecdcb19318ead0bac3df1d59ff778bd801828c9cac7255ad4e4a4cf20c0c0da642b4d86c36abf3e08912db464dcc1a17172f12895c188b972c713ea4282d2976e6aa23671f37d463ce9c0f70f09bafb1674a1a62fca56822f6aa6eecc12bf337e0785e21d650336c696e72a68ca39b8f4e1b4d9e5f8517c78e4510491247570e0b8f70da545f578b74fa7cceecf75170bf2073f7e7bb3f7e621f20637de825dd61315da4eac1747c4c97962edb868c8c0b0b172ce013ed3a0bbdf897228c7bf965143e7c88a6a6262c59b29cd260173e9f9c8697877ba3b2454733808e0a1ad858d8ed3cd02db89b8f050b16829a25468e4c21d758709d0089c5624c2450870e1d225614a285f69b4ecce4e9e54319c0f8342b6bdbb22702f8478bc071885a1be8c66a770abf23057e26c3274f9e822b57af38f510f136369144f872c678a447c9d0459cded9d1073e58f870df45bcbc7a3b96cf9e8ee4a411f8eb4fb77e8d2e31a1234d8938fef6ccc00a1ed55e715191b3599e3a739a4882b56dcb962d8b9f160083bcf4a0a6a6262a9e64809666df16ead2ebd66dc0b63f64a1a1be1e3f5cbe8479f3e6e3cf9f2e87b82d077e415ee8e93513885e949534c2ea158de09471b874f73e366764c2683480cbe53abdef78ecd44012a39f86fdb451a310111686175f7cd17944939f9fb763e5aa550b9e0a8063b1d9ecf377f2f3c7e5e4e462c9d2a5a8ada98689f47dc8808198397326888e31f885145cdc9e89ee9b9f236cc840f453da381e64e87a4ca82c2c4375b31d43d77e896387bf2105a0769e4ccb6432328aa858d7e56c60196bd72266c8108aee647c30ef03941497ec5eb478f1074f0d8082f036699483999b33e1e7e78741d1837099bc3ef1b5d7703b370fd5d55558b87809b23237e2c1b659884bf0a10262a3cf64213a363a1f68d456b48231763e8c245952892eb9943e8e6347a6f3949a897e8b8574d363a7c4b89c9d4dc61753bdecdebdeae38f9f090001d1eab59aea9af83b77f2316dfa74949797a3abbb1b71b1b1384f74c82345fae71b79583426027d8587a1f4f5a4066844375d4cba6f6d653b4cf13350585985aef656508322ada573767a1e8f8bd09081686a6982ab5289cd9b37a382546a527272568f5ebfe4a901fc0a22482a91e69d3c79424679c994129d1ed8bf0f9b3ff994009ca1547a0f7fdcfe9975eaabe36cb343adeca0284f86a31b1bcd1670d90c549635a22d702294a111f0f774777a9d263dc7c6b050fed7d4d6402a96c09b069f36aab1d4d1a31d4e5a47b5b1fe9900f815841b5db3a92686d1c6728a8a283c3c425058f8a09a58a481be5241d77d319febb77cecb08de1be4a91ab42c812f0d88ca6aa06044f59cafcf287eb3873fc7b4447473a19c8a17aad04804d804cf4dad2d686fcbc3c88a552d45655cd30f6f57dfdcc00fc0ac2d123d8ffeb722c87ec754c2ea422fe761347936453ea51a3640ab92c86c4c5853b247144d20fd957a23c3d3da7a5a5a4286860e2d35cc072309063994c7d2420ad904a64d8f6c7acde7dfbbe0aa6ed1a9f298067e000ca1ba8e91a40ef43299a5e944e6c922fe2e0e0506f2f4f77b9dd6ee35efdf1da7ea3d1b8dfeef8db845fd7ff00d61bba1932ce69c50000000049454e44ae426082') +DISCONNECT +/*C190*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C191*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(35,'Troll','2016-12-18 21:12:00.038000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000018b24944415478dacd787770dcf77de5fb6def7d012cb0e885004810204180047b552155a86259f5a2a1cc585224f97c71247bce371edb678f633b521c45e7f82c5996294b36ed889129522229b1f78246f4de81c52eb0bdb77bbb8c38ca2577276afcc72d6787cbe57ecbfb94f779ef27a4d369fc9f5ed1b30aa9589ab60bd2f4c674121b1341514c100bef03e94fe41b2271fc7ff012fe2300d1330ab120469e5899da1b18933cbbd8233384e7a4525d7912faf2c8bb3263ea49f9fa48ec8b1cf8fcdfbf2f88c5e2bd3aa5e8f1d1d1c9efeffbc1578ffdf9019c55585251e10d77b77cd7d871ad38e69543ac4ca3f1eb3369852dfe5ad22b793995c20cb310bdd503bffdcb235bf6ec6c38ae90a6f1e3b74efef4efffe6e1bff9b303889f53d84273e2d6a183e63cff8c0e52b514324d0a5abb0fd6bac5a45892762b6df147b8fa1366227d2b07be75b2ffe2975615ac0e8442f8f6fed66ffdcfe7eef8d19f1500cb4724882017ab925f7177695e9ebe6c97e82a63305479e01f5162a15505d39245d85a3c4f72e56ffe7700cfb4acd0a492c9925f5ceeecfaecf7afec6c118f682a9e1b2f5cf98a55f00ab351194c73c3fd778a86563cf6fb53e14f7ff7d28ed58255a790cf2d04be21168491bf3d71f59d5b05608cb9c50fa972e3a5c998e4599fd3a035aa7d10872288164b3177320f96daf9a8dc9c782619150e210d174b29f5e9faffbabd656b4b5dce3b87ae4e54fcfc4c5b20f3dd6f1edd9e934e27db557939b62b111d44c904f2e429ac52783032e5774825a28d8fecfb78e0c5edabcc35a5d6fd4db5791bcc5a997462c2edfbf5b1febc9f5fe8087f7e006715fa5444d8ef1d51dd26c845302d0f417ac104cccb905abd80a82901a9104d7bfad409a92e7e54694d3e2c5b17097cbafed547773cfbd4534daf1d3ad4dd3d3be95d6f532b82fe587c686d637e9145c3d48a524867e0f25c5f5c044f2086ee616f30168cd614565a4fb56c282b15312ad1401403bd0edf9b877a725e3dd71efddc00e2e71525f1b070b2f7d779c5b21c11ca1f1c872a58000cd500261762f64e0c1fb2223c2da0ec76f7a4ba34de2c5d139bfb74fdaff6def9a3271e6d78090a198ebe77dde1f2a49ccdf5b9cbac263512bc9820642e0f2493698832e745a30879fc387e79367efb965289355f2f082211c4e4ed8347063f7ae8b58377de520925aec837cc5f567c3c78c0242bdae947c95d7260b21e42300f69a50bc8bf82b9d608162f4b51f190ff7d4194ce6420f2e9fa7f7c7ceb3fee7d72f55f0df63a92bdbd0bf1ed77362954248124c3cec390ba7970160784640af1050706879d08849358b634177285045e77082fbf7df589974fb5be7d4b00925714abdcdde2133dfb549acabf48c3d6f40cd26e8290b24a92560886592c74bd0ab94470c9f3718fb43972e1b3eb7f70d7badd9b1bec07261cfe746eae5cb059b5b01559c9644a465fc40399824ce8f94ec653080522b8d6318c654566f4f62fc0cbd2a9b21b12ff7276f4e5ef7c78fe25fc3f5effbe07ce29b46259ea5713bf913da82a4d21efa9af02a16620c5b925ed466afe1dc4261c0eb149fc7c2a8ef7d9c0ff66a0bdf5c8d682845432b2736b856c7cd187affdc321cc7aa3d0c94410f1f252b100b154201831e2b1380af5323cb8a301f76fae87cfed47fff022ceb6ce1cb4e9e5f73fb5ff64e2960124cec9856187e589b18ee8ebda40405abc550699b91e124904dea91e2c3ad2ce8ea925b35b1ae77797ec9e1efdecda034fee90fa52a2c36b9aeddb6d795a8879e9a3e7baf1db137d3839e8c6bd6b4ab1d42ac78f0f0d209948a0c124c23d9b9761cbea2a14590c8884a28806a3e8ec7121e809af7b68dfb1f3b70c20f36aff6d8df5e099bce9eada5c69c8e54732e664c45290280ba0d69bd1d5d1935cd960acbceb850fff0d8037bebcedf5dada9ca7aa2a4c506b65488b6410d99742ac9520e19987381264cd47114f252152cb916209a56349c8d81f3ea79f194920158ec3eb09b3a9a7dbf2d592c6ddbf3e96be650087ff698f303adc3750562caf50aa348cd68dd6134b458886c3e8eb1a5d3095df5ff0c45fffe426bdbdf3f8b67cad593dd2b02c476e3269e06165bd76a00bdb9b1b505cac43814901993a8d74328ea83f828bede3189bf6a075c889bf7e6c0dec395ab85d4124a27124b9f652c71c7c9ec8fd7bf69f3870cb0032af57bfb1fd7b7ec7d5ffa6509bd86f04c0decbf45f24e8873e67c573cffee4e3d73e533ab2095f7c70db6a7b91d5aa86d6acc17b678720928890a05c1a99f42057a7447eae0e41d6fde0941b66825c5268c2ec42909912f0d0962a847c61ee1f432a9ac0d8b8073dc30bef7df58fa71ef84200f6ffec1bc260c7e13f8d0ccfdfe50d24b30da756495156629aaadffce5e22f3df3c39bd377df235b6f53eb154756d6e4c092a7c3d9de29bcf1875378f88e3aac6eaac3942b804b5db3707b82c8212b6d692c82dd6e829f4dfbd6bfb46374d68d476f5f86961a3b9c4e1f92a138161703b8d2e31cc955c96aef7df3e8e71f649f7dfd8f97ee90467d13e79634ac69d2684d18b87e8e7b4b0a5ff8e999d9cffeeecd87b73c9d6fd3febcbad408855609773406322634fcdcd133010f01ac6da9833f1c816b7601a7bba6104d24515aa04743750172cd7a28256208fc2e16a464611f04bc615cee76f8cd4a69f1ee378fb9bf1080cceb95bfaa3978f7438fdf955b588a53870f44db2f5f317cfb376391af95e5cbb406e5d2da32ebf6194ff4f9552b4b0a8bf2a9736412e80d4aa85832698eddf1d179e41518a0d1abc9fd69b81d7e9cbb3484fa8652d8cbacd4451c6ee11842d45ac1401cf1500cf17014415f0457fb9c518b525a251109133b5f3ff2c500fcdd33d54737ddb66b47aecd86cb974f44ae7ed0911be84fad5b566dd957566235abd5320ccc046031695153ca7e51c93849f95649004655a592677b211e4f22337b65323213e740a6ce93194941168ad35ca498b54ce463ec814c23fbdc615cec998b5bd58a2a954c32b6eb8d2f08e0a7cfd41cddb065eb8edc825c9c3d7d26ee39323956b7b4ac52cf5ace445ba0b2bcdc350db15882a6da5c28b57248155248e4f4100422c9fc8600c4e2ccf01208212b20b2b22291c8b0528a1399178f24b3178f31fab1500273a4d58b7d0e1812314f342dfadbaf1d6bfdd11702f0b3af57fe6955d386bbcd39665cb97019a58b5ae84d0624a92a33ba2c238daf0fcca0cf11c696e5f9c8b56aa05467404820956700503e509c89a41288c936f85731973937cdc8c7c8fd194991644662990cb09cc2a4d98ed1458c4c2f621dfb2a9a12a363c8f9a62f107ee6c7ed83d1cf0560c7a6cda24dd290525eb870b2657bcb2a9d5e8ff6ab1da84e506cf162295e863a1e69369ec7e9c2fe0bd3282b34a2a1c4088b51cd41a6622989398d25d9c88b585134c3591177e36464a62da4fcff2c9048223b89fda4d2b985104ef7cdc3924ea0b1320732950a5c8e331d931fbc74b2fdeecf05e0670f6e3cd65264dd7a78b24fd472670972737271e96227f29c1694159b292d381d44194d26306201cc0c4de2f84818660ea465457ae47116c8c499c8cb9063b7f292ec0141c8ca69097b23e40f63619a97cc3520c4c807c93e1e6f080eaad0eb133ec8424134d83853acd61bc0331a902577b167f2956f9eeafc2fff5700af7cf73bb6b2d973e395157952a78f0da508b1b665f0387cb0d051cdba03a8ae3443a59073736a7aa6ddef7061607816d79d7128d45a94e6ab61d173fa3253e54b2ba135e909229da5d78c671de91962e30691498d9ffac7ed8d608a9177f02d8984b0dc2c8321d7425ad666b3164f2669864458f086fd57fb67ed3fb8d4edfb0f017ce3e9afea54673f18b5ad2837e51770d850721ae41a1471c2ead8944a46e2c0c97e549071aa0a8c88914a32fce2767b1076ba313e318fce594e57a91666a31246f643a9598a9a65c50c822a5bef2ec7028626e8ee5202dcfe18bcc1385c9e10449410e5aa04ac5ca33099a0326849646296293d4346cef0ae1289808b5d33bffce689b6bffc77005eb8739ba132b1d8ae518b8b5bc9044946b7304f8fe27c3da3a98181f56a63d42fb64dc24e6ecfb5689048dfe0954596c0c2822ffb1e9998c304b3154fb30724329e2241b545850ce5724b78b9b72f21b074a2597127620fc8198672eaa51c1d879a4143d1a8668fc9b2aa3541a64a3150f1689244c0b37cd148fba82beffbe73abc3701fce0cbbb45a14f8eb56edab5aa3ed3e7538110a39846a9dd8cb23cb20e23af215572b4a3b37b0e5a8b12153623bc8c9a582a469487b48f397919e6838cf249c72846663dd0d357e7a914d0908d9c9424fe680a168d143a46b273de8312830acba891e2dcdb6ed1670366d4ea10e1dc08702604989d043fcb49c35aa594bee4862d3d7d7d76db77ceb41dbf09e08532ebebbb36d73fa5d56b716dd4016b8e06214ae8b3c30ed497586123b388b9b2c6a8c327d7a7b069154b82179ff631f5dc5cc4d05ce89f819ef2619a12dced09d0fc03c3d36e34171ba1e76fd3a9043e22f88c6c682832a06dd2872a9b0e26ad1a0a66d66ed52312a0a42648270759c637af5f5d844cda46c77d10a8840d72d231cbaa73d4f5e2d78f5efe4916c0f3e5b96bd62f2fbe50559acf440ae862194c50540902b53af93c42aa2ca47a34f273399bf162f70c1ab971418e01d7c65dd03332494666ce17c42233d7c3ef6a4b72a0e3147eeb6827cb208696aafcaca53cd2368ec6b25cd84d3a383c3eca0d318c4a71760f69528a5c851ecb57daa0504ad037b0400a9560fdd672045c611cfca0273b380d4a057a47e72f7cf3e32b6bb3007ed8bce4939d6b976cfde7a1051c1d75622e1046b1bd000a1e284ed080442328c931c26c306266660e119d194b6c5a94a8c2b484525c9a08402913f3f201786362f02ce834aa6cadabb5046eb4606a6c10313f3599da4cf39e80c6a0a3815f8a45d72274dc5748c670f5f469dc5faec7630faf809a04b04089f2de9fba71df03b530e854f8e0701f6ac87e1696ddc5f313c9e7de3e5e293c5d96bff1aec6a253418309df3e3b020ba35657538502bb1d5a36d4f8d434826c36b14482b2f252b4b577a079f9728c8c4fa2a3bd0dd28c57d09851595ec6016622d3685053bd84179b67b9923d6251949694e177fb0f20cf96030d7ba8b0b0105313133099cc309a8da8aca8c2f8e404f6bdfb475cb9d2861719f1679e686239c5f087f7bbb0baa510e564c4232707d1d45c085bbe0133ddf3b8ff7befbd287c7745c91bc5e5f97bbe45dfba7c6915b66e5a8fc2b272cccf3a602495d96c76964782742dc6ccf40c7abbbbd13f308058348a442c86ea95cd30649a54a74545452506fafbb079eb56f8fd3e04989179c71c8c7a233ef8f0081e7ee84b8846c2b0e6e692ad5ce8e9e9412103b5b0b8008bd98af3172eb074dd88cd4ce29dffbc967a4a8c57df6ac36d9b4bb0c46ec0cf7ed78e9d1b4bd1b0b200dd97a7b1e757578e092fd416feb66159e9a3bf180b62554d25cc9c7c11ea76292f555d5d8bdaba7a68d4ea6c06dc940c432303f888975151db64ca4fcecbd5d5d690df9364a2186667e7b0a2a1014bebea70f6cc191a9702cccfbb38c52fa1b0201f337373686c5cc1df3432ea63181c1ace0662d7ddf7e0f0c18328282ac6e1a327f05c4d1276b30a3ffc7d17b6956b51a497e3a797dc78724729766c29c2a5e36378ad373d2994a8e4f7fff7db57fdf3717d319a96d7519787d0dad101d7a20fab9b1bb1e7a9bf844ca9e221111c78ef8f9cac12986840ae5ebc8c7902ea1b1e27d04a34373551e3afc4c0601f2e30924f3ffd34a3bc88c6a63578fd9f7e8e60284030f9a8aaaece82355b2c2cbe34023e1f87e0429659fafa0710a02cb9d0da890d09172a48b7675525f07bdd306a34f0b17f360a93b8777d3e4e5e73e3a358ce62b68957e699df2d5852f970696525f54880f240c01d77dccee88ca0acac14f52b56a2afb7072343a3ac636bd65e1e3d728ca5d48fe6356ba1d7930a8d466cdeb68d17f0539485095aca357dd0520a9c397d9e65a4c3b61ddb39ccd4d9875a3a8d1e06f68094fc9fa25670ccce6090fb9d3c791a9353539091401a96d3666edb8158c69573e00df2fc85931fc11e5b84c75a02a731ffc620532a95351b562eebf10782c86783ad6d59c346ace1100923bfa800fd7dfdec8314366dd8c41298c1505f2f1bb81d26b2c785abedb8fb9e9dd068b498e1c14b6a6a5052520297cb89b6b63644d82b01ee5b905f80a2e2428c8d8cc2e371a3860cb47ec346064b922da1e99969b85d0b989818c7f5ceebc82f2ee5ffaf83d5a881933aabb7bf17bdbd8358f0f961c9c98782fd31dad71bca02904aa5ba752b973be5e2b46ccddaf558565f871e5eda6c34e30ed6a66771914e4a811829b5f3da554cf1a2651565c8a342fdde0f7f42d9acc4de3d4f66a318e7e86f6a598d102f7dfc93e330303353539358b3660dcc660bce9f3b073f9b3b140e61eb962dd9ec7aa9a33efcf050564f2dadad45d7f52e94b11a76edda8589b131cea624598d334126876b81e5465117e17ad7c262340b20a3d7cd7a5dfba3f7edacd7190db874a58396508102dac8f56bd722b7a08093568c80db8d231f1fa3b84ae08e9d3b33c0b1303f8fef7cf7bb6cfebc6c0fc4e8ae962eadc9463fc4525ab56a058139e15c70c24c563391ff376fd94a1a1ec7e4e424aaab2a31ccd2305b8c2c2b1d055b126fffee8fd8fb953d9cc4094c4e4f62c3ba8d1c6c0a7878fe2c2b20e8f5a3844c393a361ab92925940ac5632fecfd4f6f0759c31e8f87b429cd1a891da44415eb38f6af0fa02f5d3c4f2def27c59a997227b392401fa9556cb0666d65c6618582011e5002379bd8c9c86514659c5a49a550c0c05ec83c99d3649e8fb2b6e7e6b907a7f89a961666c28d284baeb5e33a1a1bea11a1ac36180ca86436f2f2f20888d29e97ef26fd1a99d90f8f1defbb09a06e69cde37e5f609f9acd9763364042b6296503df73dffd4cad1bfd5c34c1a865a4c6e8d8045d930b69b28997ac71cfee7b71df5d776094f53d3d33c31ab5a2a2bc9c4082ec895a36b90193e363f011789c193af2e14768e725d76f5c8fa2a2229c387182ce4c0a91889282ceefb6eddbf0d6beb7b34f2ad454c119a05eb7976779a1556960b298e12773d90b0bcfdc04d0bcb2e12b3b766cfb6507eb2f7348241285cf17c8eaefcc93843c9693dd5e44d61063786408956565c8d8cc23c73ec1971fb8178bacdfd6f64eaca85fc6662dc2eccc2cd7e471ea166529b295bde3f578b3753cc646f593ed9e78fc09942fa9c0c8f020d94993ed2d174bd2cb46cd9c33c5c67efcb127505bbf0201af87f3c4917dc2913138fbdf7d179d5d3d7337015414553df4fc0b7b7e9f798c9889aa8f9b3cf0c0031863d4753a1dd66ddc8c5422ce2c8c66d33c3c388cd3a74ef33293d8b66513d3dec6cbafc0ea354d70399d14814ac8a472f8082cc192e9237399d8c47eaf971223997d805b5e59cc8bab50bfbc011a96697bdb555cb9d6ca75b26cf00cec97bc3c1b76eedc45505eeeeb605643fceccbfa8413a74eb96f02a869b4efdc7bcf7387fc51370646865144099159383e35062375d2facd9b31c7f2f0139c416b4057571bf6bdfd36c6476650b7b2062ab90af790b1326e7d646218ab9a57422dd76160bc17424a8c8f8f1ea3a6599d7db8e59c70a0b5bf1deb5b36924d02585eb302d575d5387cec20fadb396b722ce81bed855e668223348da7fee2e9ec999333e314986ab28f93f49b46e7f54e7f16c08a97e482b753b27783f0e02fd2da18e7821c514904494d10168505e62a3d3616ee843bea42c815c7e8f430e64293989674a1eff20c7262c5a8acb721ecce18a0125c9bb8889d9bee862fed4157f8144a824d08923afd92391468ca604d95e2d77d3fc66df5bbc11198d5fd5a9b02e74e9f439443f24bdb1fc6b9b1e3183a4c6767edc6f3b7bf48491f40107ef8933449512b0ae5d45d237d3758a8f12555654a11bbe0fe438e59b9cc075dac00ba4d3390a495d8ae7e1667fd7f822554827c55315ca13974bb2f40911f454a1d8198e6c3f19105a2025a435d045539359870f7a1cebe050ef5359a911094ce1ad8ac769c1939087d4f357ba910d7d41fa0505101d1940923ca3654c86ae0a0438bd866519c5c0ebfcc89c4182575de1096481b31e6ef872ca9c6847a12f795ec46905b77f475dd9803abbea57a7cf936f1be8cc22cc85160a83b81c222091462292ebc6386791d07548cd27842074d7e02952d022431056c94055aa38033e7dd904b459c176a381c111458359c9c5e2834711a9b7c4ed708264780987e11a3ef4bd3695914cb1ea101ea94f20cb190db10c3d42535a2fc63ac88c23d26435a4e67b6984050928056a281ae388ac55931bc0a1fd403b9d014fa31b718bb918196ef2bef6b5c2d7d2f1e16d83862082271f6c21a8e6b079badb2d4404f90825223c0bf204041b32da73d2db46ae18b2420d188e871d390d01dccfae3d96164d218e1f40461528bf97704c108258b82fa6898738160a56219c219c3a313a063c3f78f79017a70a3968688175f60a99a73e806e35cef0c70eec8e072c4a1b5f28c91305439bc6328712303cddf57a88ce5e98f241191462215220a9528fb0c331164d4e269989815c4f86f9190a555a58c774c7010d10767801af40a324b824a5586502c490a26009d1af1745c48c413a95947c82bd7c804a5246b4f8504793019c99c9ca40e4a93d5320f2e52d967a8896812998796017f82123efb4852998cc7e5916042442ba152ea445eda135f3891f00aa2b4fb7f01f663e5b5584c8f9e0000000049454e44ae426082') +DISCONNECT +/*C192*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C193*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(36,'Uptight','2016-12-18 21:12:00.040000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000013594944415478dab559099454d599fedeab7dafeaaade37e80d1a68ba5b687631ae1015d11c5c92111d74e292c531c618934926cb1c27c7382463cc49c82446e398984c141525a8800882d028da4db3f44eef7b775557d7faaaeabdf96eb99cb403a46d33af4f9daabe55f7befffb97efffee7d92a669f8f0ba6b650e667a8969463d60d26990f96e94d263f771f8467e3d87af2cbee2c9542a20416ed2eba5d7f8934762090d920c245212922a20cdf88efff7fe2603e7ff3d00e80cb858d2f0baca414993c4aa50c53bcd735b8d48717c7c320cb3598f64423dcde105294df7a901d84c7f070016bdb649d5f067b18aac93e1735861d04930f14b59166024c4e20a3c0e1bdafac7a1aa2af40cc1644c9104c8d902e0ad301e923f1d00b301855ca14749a5904aa460369ad2463b6dc6b4913281684427e96504262344082c2cf4317d5238d63642903a499e250231cf1f91a603f8d2aa4f00402ca24153522a8c3a3d42b104e289086ae7e660329e402299a2bd32f40461d46b309b4c0cb90e391e072c362bb61f380dbd2c3d174de936499236e3fbfef565d07d2c856e5b367300bc7e2ccbf237ba46c670ebda15d87ce54a7cefe99de8eeedc3ea857928caf24049259062b1aafcd349fa7404449d98f5563c7fb805a1a8a25a4d3addec622052f86311b879e9cc0170ea9e9012bf34124ae2d75fbd1e9e1c331c5919e8ec1cc6977ef427643a0c985fece54d64180d8674eee7e7b85151908b1cb3073fd9be1fa74607e1b1daa6d9f08922a0ff58046e589c3de3c99cb57bd81fbeecbe0d6b70c9aa0a845371982c666414730daf1dddf5ad181c9b82d5a84b1beef5b9a14e46110d47119f52f0c83307507fa61b594ebba4ce12c070203c1dc086f9338f80924cfdc569327e76eb5d9f8535c308c968848ed4d0d8de8bfefe515cbb6e39ac5976229570bab113c74e74a2b6b20405194e484a0a0f3ff906de68ee418edb3eeb08f48d4f4d07b034d735e3c9e178e2cfcb8a7336fdf0f68bd5a2b919b2c4b9dd27fbe09f8aa2a6760e1089231849c0e9e59a2c62d51fc2e1e3ac8f45850425e3c1adbbb0abb1033a26f22ced47cfc7015cb728ff134cd72a874663a70e6fdb82d164124fef6fc3bc621f53c28463ed63d8b8622e724abcd8f9ea4904c9505ebb0d8a9ac4e06808ffb4ba043ff8e51bd8fada7b0ddfde58531b8c26660540ac3b0dc0d45377cc78b2d520ef7df1f4e825675a8771743c825595d9e8a571874f8f62e3f26204c20abe7a6d0d7ef8743d2827104ba8585aee83c27e517f6a0c96c454ead107aed6f91b3b6b35bdae613600caf25cd3011cf8d6c699fb3f951acbccf37a472723eacee661f95bd7d7a4bb6ee7f0149694faf0e0ef8e62dd0573d03e308eebd794c21f8ca128d789bee149dcf2e3d7f1e82dcb83853ebb73dffee66a93c5707c3600362c2e980ee0e52faf9bf164958dcaec71abf38a5c52927ae7dedf1e4221d9a7c0674ba7d0bd9fabc1851795e181877793ef63c8745971662888248bfafecbca6190cd18ec1b7b301a0c3eac9b452bb87a6931a43b9e980e60ffb7af9df10229e67d7649e1d1fe33c375577ca60c49f6f6236da318a7a7336c065c585742ad61a11e8d63efa136440838cf6dc3920a2fda1b7a11b0b8911a1b29d3198d1d9fd4f8c5051e986efe399c4ee77400cfdfb666c68b689a5a6db35b1b26622a562f2f4341be07323510899f1caba07e6f1b32f2b2d0d7dc858baf5e083848a9d443f1601c2fbed2c808683024e25d9a24cd9de93dabf2dce9f739d90e48773f43008ee9003afe7543faddef0fc06834c06ab5e21473fa6c979e9cefa744ded73412b8ed734b5c3535c510ba4808148bc58458600a936341b8735c30da6c8892560decdfa34313f88f270e6261ae5d2a2fa4dc60719febaaf09a698789249044297b8a74cfff7cf45d46460692cc82690024e97d6978f98d5bd0d4d484a153ef20f5c87568ec1b87cbe5c689c1c034008944028f6c3f65bdfea2d2f017ae5d021305ba468e970c1206c626e027888c0c170a333390880bc5aa60ff9b6dd8fafbfababb362c7827db634db3d25f5f8bd84f841db986048cdfaee7c8385f26980b8a11eb6b3d3f0013bba942a36ebde516b4b4b4e0487d3dccb9a5585c5b83a37f790eda6337e150d7c40700a8f36394042fb4c06e50efb9f1b2058f5eb4ba027aae2153fb9c68e9c0e9b66eacadab4676a687b23a899327faf0e44bef750e4dc44ab75c510e2bf5f8bc4cc747f72f723146f73e9bfe5cb9e60a847b9ad1d3d3031f8dcdcdcf4f3bf5c3cbed660d919eff2680059595a85cb000cf3df71c7f61c57d150ec48dd6f7234695a90820940606590eaea8ca765cb8a424ad7bac0e0b2c6613a6986662cdd1213f1e7fb10183e361c9c948f94783f8e3c3d740fa87c73fbabf6ffe05186b7e37fd79fdfaf53875ead43901e4e7e6a633e01301f01075f5eab57863e78e0f6618b075d51cbcd3d1830deb2eddf64e4bd79d46bd8295d545985f94c568e8b91ebb2fe9f3a543adc8b5597fd6d937f8cf050e33fe3de446a4f57d8328cbd36a75c58a153872e4c88c00141516221a8d7e7200ab57aec4cbbb76a57f6f6691274d16dcf99d87b0f0991f3c56b4b0fc2b099b133bf635c12ca79061b7622a12c3e85418d72c73a370dedabb3e7f60ec57b6d030b47010bddddd88d088d9001057a6cff7e901386c16acb9e2aa75db7ff5f3577ef3c58dc894265054e2434035233c1980ac46e02101b8e75da295ffe377a4ccfc398bcb73bd4dc170e45303282b29f974007891dcb1f6173fffc543777ff9ee1a31d0d3d189b1fa9711f29f41c5c20a189d73612cff0cec0eb3a01bddd7effddad07fffe1e99f72cbd913f0fbf7736c70b600d275385b008baaaa7efb2fdffce61671e3636f1fc3d69ffde7b485ef5c508bfbb6bf8879f38b3e1a3bf4e661fce1f74f61c905b52c70332c763b1ef8c6375e6febecfc2cbf56fedf01080f2e983fffeb05f9f9ff76f3e6cdc6868606747575616868102b56adc6d6ad5bd3ebfce6a5ddd87ecd15d868b5e3cef0fb8df0e0e106bcf0c2f3387260377c593ed86d76949696223839c96665c4c8d8d87bdb5f78e111feffccdf15405666e63a4e5ebfeef2cb6f9a5f519e23c2bde3e59dec01515264905dd70293c98c86d36d78f10fdb50bbe262dc77fb4d287e79074a6d66ac3ede0c3912c19b07f761904a74db93cfa2283b033abd8edd398a89e0246a1655a1a2bc1cbecc4c0402011c3878b0bea1b1f1088d7f495194bdb302b063c78e8d3fddbaf58518c558381844575f2f5a7b06d2ad5f4ac670b2ed0c3c2c6093d38da8a2e15b37af4129fab1eb953761777be0aa5b8a94a4c7f0ee57b8398b412feb71fb961bd09970e1bbbfab87c3a8a2f5f471945656c3c18636c2ae5d98e34591cf8bec9c1c783c5cc3edc2bb0d8d22b24babaaaa8efd4d001f4a89abafba6ae7c5175d74e5db478fa2abbf1f6683119d81086a322cc876d9d03c91446da61eafb70ca226cb8288c5852545566cdbb61dd77fe56bf8fe633fc123050568e2dc9bf61dc0f2a2b9181f1dc1e6d54bb076fd6ad8724a71aae9145a2622b87ec57c340e8651e194d11dd52164b0c0ae4661657de8641de65594c1ebf5e26bf7dfff20a3f1f079012cabab436f6fefca7beeb9e72d4600ed134118650312263baecc33e3c90796c2df33953eb89a93e9c4bbdc7d5db0be0487f6f47003b31fe3110dd7ddf73d3cf4d55bb167510df69f6cc4b29e316c28f4a6d72f266f67c44378e5d12d94e26e1c7ca31b6bea72d0da39c97d84894296517aaa13fb078228f666204ced64e77e7af1fc0a141415e1ebf7df5fc5654e9c3702376cdab4b7b9aded92498ab2eb1c495c515588ee89108aec32aa6bf2f0f29e2edc7c4d197efc5403365d5a869e91493477c53138310a93458f4bd62ee7a685d222a440af26e0a7baf665e5c36637e0774f3c8f113a25cf998bcdebf2a832c960ad7e5cb5b2184fefe9c5e6cfb871b25f82adfa422486dba86803f8afd614127a33ca8bf3f1ec73db9fe8eee9b9edbc00ae5cbf5e6beb1b40b4ab1b47be7835f2d72c423214c689013f5e3cde8de1c910969415b2c326e1b4eb580fc0962b572396d4a033e9187619a15000faac5c98dcb9488e7423219ba04b4661c92d061b03303280c777ee4b1fd04625235293c368096928e0c6ece6cf5f85fcc595c0d83015a3842fdff110da5d59a8a0a27d65efde43ededed6bce0b60cdaa555ad7f018aab35c78eac64bd0dad48eb8aac1c5c514bd017125898c9c6cd0768288f01e2a549303b2c58a142953477ad4b83b4b920cecbe6c2804af7739a88b0cdc9d8528ff6438cbe7421bf3c3e0cb85518961221442023ad8cd46e8a96423090d89c0088a1754e0a1c7ff84bd3d012c2acac3ae575f6d68efe8a83d270087c381daea6aad7d70042b2a0af039cae11e0a35bbc38654fa81025da6d1722d993e3274986d102c954a2a69192de4b5d36a1647a06967286a8a1c6f869d9243926404e353f0baa85f68a4f0ae8dc519274057a617cebc6cd27204aa884a34ccc84a98cbba782c10467d5c8f8a6c1f0e1e3cd87dbca9a98ccb27cf0a809cef2a2f2b0b740e8fa23ad7872f903e877bfb10270be5d1083f3d6e6307355148c7a9efede2cc93b5124dc691c3efc708c6c1b124d73470a3ae70c361319908508585e31a73de402f6bdc6185a885cc041d87c6a666e58647619dd890e01c5f761e4603632834eaf07b1afe369c28a13c6f3c7162bcfee851b1059d3a2b804caf37a7bcbc7cb073740c8bb3ddb8692a88819e611acd1cd693d369604efa4c5b47074ae2a8991e3722108dc34760136427178d0a32226ece11a7e6e2290c950e0c060221681d07c3dc8515b85c0498804967e6be3f06d5a0c2a4b7608202503c67b0305d3d9282ed54014734134aac1634b7b44c1e3a724400f09f3d02d9d919e573e68cb713c002eea2360743181a1842925e4bd06bb9ecb8617ac84ce30d3a7dfaf85c9c3ccbe2498b7858406b657ade2cab200f21ce5473317a06a69b950082ecde4e1ae6b0dad01178ff694d2ef97e82a9271c10e5da0aedb0318d821105b9161d762eacc451d830d76a120002878f1e9dc39f4c9e15809e0cb2b4ae4eeb1a19c5c26c0f3691c6067a8721d19b7aa68dc28235f337323d6f6524a2ecca6e86d9ac17c7e729be44eeeb1166491a99f366462a4110661da3444eafa4acee61a17b68ac5367405f24089b9ecea10d329d62e2e7784a4937b014c9a2d028636775150ea4746c744e216d3a4e373757d054f5ac0044e1ad58b64c3b33364e1672e3520268ede843bedb0ebf9280857240a7a9701af89e4e2195e992420935cf405841a6558f84fafe73318d804c641e896055e6b9c444f2889c67d4a2dccb669100024c3589aeb1b25909ef5b08cac1f4e90f4dc2c3689b39f65af502bcc3adaca8810387de7af74c57d792f3d2e8852b57c65b86868d750559b87874148d1dbdc86491f969683e3ba52850613c7d9e66162b2312271017532accefecfc3f2cf6aa7ac1453a64b076a6684819d73835358572d2ec88124faf63e46f8d825248bb59f4fe10c1cd251d0fc4620831dde63b2d78b5a60607224089dd8237df7a6b4f6f5fdfe5e705b0bcae6e57f7f8c4fa2af6818b4627d0dd370423c59641124f04d5f4b1895d3cb4a317bd344e1cdc72439f364818aff0ddc971b1aefac1232561a8387fb688176b21fe411d7919917e85d42bea896376711fd653484496855dc2cdff6b4ca1833109c52ce2fdfbf7ff9ab2fb8e7302101be5a9a9e077338be6fe305b0fac238d9eecea858d925918e263bec75362528a2c21a7f356b08c9189a023401d8b37cc8651c41c0f308745a78d89e7632982d7d160ce11875b53042d13a48f3fe889c608c48404ebcb4b2049a65c8a11894713d0eb12685abe1c07621aebc180d7f6eebd9f5bd0ade704904b199b4c2636b9720bff5c66d5a1767c1cdd3d7d3073e31ee34dcdbca199068867d88246ed2c525634c4e19a810d4ee367714cab3252461a6862b494f4033e091efe3fc8d40af0358fde9c147c6f20ab915a45c17b68b49f75234a4bb09aa6a450e43062dfe24578230c148882debd7b9da6aaaf9d13400635784251e6659594349791dfeb262670acbd075eeafe04bd2e0b66e1e22e7a324440261a65e4fc1843ee21134553e29d1d975e144fb085b74d7c37d2385605eb4497a68f584acc61cae8050583ac45102c7ecf078d2dceb5c5895d3953e8cdaa4a1c8cb346e8bcdd7bf61470f7d67f4e00361ba5010b6871dd722d474aa16a68004d5dfdb033858c6c4022d7c50d1cf4acb8b3685446082f6bb08927f2c2fb4c050f992506916bd43d343eca8f56fe9e7a0d2eae11f980089204e221314c322a3e76ec104159d31b7c0983d11056724373605125de95c982ed2de354c93e7cec9a06c0cea6224218a23eb9e1b2b529776bbb3cc646a69221525cd82e3a6bba45c9e96888136623c714fe2f1a994513636a3a022e52ae927e26ccef68a8a8196edc28d45228b4181162de8528b745fe47f9fb101b6516231ae1e73cf69d766e572b3d563455d7e0976f9f389e181dba8026a6ce0bc060b6a401241885ab6b163eb8301afbd1f1960e185840762e3cc52f6dfcb9815e151dd320340f9b8e9007411a966bd2939d2809200244303a0d11ca6c37bbb5c8751f0d5454a4bd1c64c3125d3aa8886e6dc058229e66a528d3d1c43455a8526bf273f1b451deb65b31dc1deb6ac7d9ae690016cf29f8884efb23d1ac6b327dc3234c21951b705184411a61a2e74d22cce46c41897e76d86c1ae2e78d1d9ca70a06e1672b5947271e87333a61e6b49b7224c25431a6c798428caa81e35166a383642094ab99f71111f251180e73b33fbf200fbf0c04362eb65b77fcb1a9e5ac00fe173aa1a4508acc6f8b0000000049454e44ae426082') +DISCONNECT +/*C194*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C195*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(37,'Fire-Guitar','2016-12-18 21:12:00.041000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000a814944415478dacd990b7014f51dc7bf7bbb7b7bcfdc2521e4454820018ce12154c08622a08c0a54ea601554b0d6476568b58e62b5c54a2955d1d1aae8743a5605152ad351eb230c8f0af24802e19527498ee42eb92497e472c9e5de7bb777bbdbdf613bc374b0120890ffcccedce6ffd8efe7b7bfffeff7fb6f18555531d2dbaaf9a9b757b4f96f69eb507906785d5155db7ffb98910cb078a635d760e41f758634eb32ac92c6e512912170072a6c91c5a2a888231a60d1ac8cd2a0c26c60d3462fcc4e9321793de0c272e0749fbaadc9e1ffa322abee110b9066d54d993967caa7e3f3cc13e478041ebb1d821c73d777ab3b1a1da1cd34a49b74474724c03df72e30f60e86364f9a50f460c01f40c0590b8314566d7dd2963a7be48573c58f388007e68f2ad117947c6648cb9ce874d8d1d1d2e2727bc2e5be387f588cc48fc725a59af4c6cf9d3362004a8acc050b4b4bb6888c309ff175a0f254477d738fb23e21a38eba3d7489ff2b7e44013cbe66f1d7a19078b359f1c1ef68ecd95e25fd3ca1a092f405ffdfbcab0e30777a0e973f3ee7f7d6ecbce795a0074cdb7171bf23fe6ab34b7d9bba3deaf708bcea00b7de74cd23134a26bfa326a2e0da8f2a5f9d1ad8d8d687f7a9abf3fbc45f7580d21f16ae9d587ccd7abdc964b2f61d47f9a9f67f94b7a8cf52978b744917b2c65503d8b4e9893bdabb5cff94a404f2782faa2b2acb77d6279e5414d49c6fb38e2880eba617cc9bb760cecea0a41a0b8c31f41d2d1bdc72545a1591f00de9890c65ad2b0e3065da98d1b34a67efe579ddb4c25c2b02b5bbc56dff726c6cefc7bba4c533d4f5ae28c0ed378ed7174ebffe609cd5cf1c9b9d0ae5d427f8bcd2b5f55807d651772f6951462c40491ecb2f58b2e83d6366c1aaf414230457053efeace2c3139df8b3aca08174c817b3ee1503b873f98d6f4e2a9efc784cd1a020d18a43657b1a3ea9c743d4d5481a4217bbee150178fb8ddf3ce6f206372b1a0e194a2fce1cdcd9f969b5f8ac37882fa93b7c21f1feaa01dcb9b878e58c798bdff30c06b5294c10a1535f253e3911fe5da717efd3b3072e75fd610538f8f28a67a5d6330bd8800f6d7a7345ada43d6dbab6f47d1d2fa4887e3742357b70a8c1f3d7ba4ee5451ade7529961f568015b715153c336fea26c1695bae74da2068398427cd46a57932dc9c093e7727c43315703a7babf736488fd094e4a68d0d87d18605e0eb07a7ecccf3b72fd6654830670908598bb09fbf097db0a2dbe9406fdd61e883ddf0c694aab2eae81259be74d7193680edab67dd33a3eff44769e314d698cb62804dc7116129daa3e9f0fabd7054ed83e07522c5c0a0dd9ba8dc531ffd099d67fb4704406eb671d4f6d9a6ea8979c131ee542dcabb005bbc009a9c59e0390621472322dd8dd050a5c9732cce78a2fb0f37c597d133fd2302e0f387a6adbf5eb6fde1b8d9841dcd2a7ab5e39096918d68348a9c901d8fa57a51639c888ab60e0894a70ca6b4f6b7f6b6cd1243d2904b866105f8fc4f4b055d6fcfeafc8063937982aa7ba94640557f2ab2f2f2c1325413f4f6611aebc41f4b4484fd69f0496628fd0130b37f84757bf66f2fafeeff75585486651f0c0960ef2b77326a30b44870d89fcf96bb678f9b63c4ee3e161fd58f823e633c1254caf4b8fbd178da89353724f0d454aa349ba288b4c4a19b7123bec91c8383bbbe404062be3a608b3c1008cade2b06b0ffc53b56088d0d8f9a25cf7c8b2906cb740bac792ccaeca350de9601890eb083be005aed5d90182d5ebf398249aa88c11605c1ace9d8cde85157570bc8328c028b63cef00b75f6e873971da072eb1a2ede6a7fcb58737cb599f3c35ca883a9d80a5daa06bc51802b361e65752c5c5d3ed81a5b114c00f797f2b8cde047c809f4a54f475958c1c95375d0f31c341a9a477e566e0f3ded70c55ebdac005fbef1b33959ad4d2febdbebe718d215580bb430e59b001d03c66000a31f03f07ab4ba63e8e8ec802846906f9251188bc0e7b2a0015938dc3f801ecf20e4048bb8a28227009b3bbaeba43df2a49c509a2f1bc0dc7985991b0a8dfb323b4e9718c6699192cbc16ba23258afc1d82c0e923096c49b698504b41107fd4e1ea458c43a4578ea649c48e4a2d2e743428c42a60a344a6f264e05b3bd2f76b2ca167a2626a947867afaba6080ca1d6bb54c63d32e43c5de9b4c633918b35858b3b41469046cab61b1766916261524fd5e861ae800033f18b26c342021da194757672a7646e288c66350a9374ee293ae53ef128fec3e117c5a51d4e4b9377ca9e2bf13e06fcf2d9d37b3fae801bd7e10c65c01fa740e5a130b9592d313652c420901eb968fc5d4ec04246f2b599f83aa328891af8b6d2af6b9aca88b0620302a92cb27211a5cd1c3fbea832f85424a253d22301c85dc7702bcf6d3c99b97045a1f130a34d0a7b1249e369f965c5fcbe0ef0d2c76d40016ad8a5537285832958544ae034546d4cfa0bb56c5b6600ac2521006ad0626ba5afaa3d51f7e3db89a966efabe2f6d970c70dfcad2f4272c729dde7e22c752a487cec242c333d090468691c16658d0d42ba3b727841ab706456304dc751d20b15a046bbcb0f5a561cb00039e89c340f3b41c93f8f888e7572e77e2437a96389ce2cf0bf0d49a85731f96dc8712ee26a48fd35190a18843aea3d0382e450bcec0830d87a1d369d016d582322a8a6883c706630853d23a16cfc7072e110646428a9e458f3f5a5576c47b1f3dc73edce2cf0bf0f0fd73963dadf57faa786cb0e409e074408c3621ab63a14f15900889f426e8de42701a152cc189e138620371c47b78ec36ff00db8f9f8689ac6f31b0a86ef36d6e6e0bff763822ce05012c5f3e7bee86d1ca01c57e4a6319ab87cad32624f7d1a7f050a4c4d9312ced0986d520b93da161900852f4a15c10374ec63b612aa78fd5d01bd252c202aaed034ff5f4c5debcd8af0e4306b0e65952beb87bc6c951d5878af85c2d1881414a9a16aaa240a572813393784e437185e611841c8a4122cf8eb924b414de82d7aaced0df4260a98fc2a572acb9efc7c1607cd7e5107f5e80645b7bd7f4e757ba5b36c02a217db4f66c044a8ee3040dfd4e5a5e41d2bc326527450282dd5130da1c6c331763dfd15ab23e452df2b348346eaf3add771b65dcd62b0a30715ace94ada5f9c74c0dc774ba1c1e3cf9b2902c1f389a40fa193a9c2428ad263fc1460625c8012dc4a56bb0be6c1f7c5d3d60098ea737e0e8f57fe070fa7f395c49eb8201926de12dc5776fccd0bc6bb2379bb94c163a2b078eac9f0490132a1292829857824635c151ba0c5b6bed70b5d8c1917886ac2fc5e5de6a5befc35151de3b94afcdc306906c8b6ebd76f5fd16cde39323ee624dc4070d45a464ce9244199c4680983a066d8533b1bdc9894e5b2b0c06ddd9791c59bfa56be02faeeee046ba750f57d61d3240b2695375852be616bfb23cd3b42ca3bf1bb1680c5c66363a320bb0b73780fa260aef7484e4b5dcb74189c48b51a9a3b6b9676522ae1cbd9cd6bf2080b38318263b6f42e62f261764aeb2e80d85118a48ee7e1fa460185aaa83180aa54cf2e550c1168ac69c67dadccf45c2899db4f6e0e5147fc100ff8120e7c135a3334d0f668fb2dcabe3b92c8e63cff629dfae217b0683fb9d5dde37e3927284ee072fa7eb0c19e01c1003c76b0a0d46fe069dc08fa77069a4b27a30164b38c241e9380de9a42b7425c45f14c03920e4f4d0d3455902c92c9bfc5418bb987f525c4afb37a1a09aec63c928810000000049454e44ae426082') +DISCONNECT +/*C196*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C197*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(38,'Drum','2016-12-18 21:12:00.042000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000012304944415478dacd59077814e5d63eb3b3b33bb3bd65d30b4920248190841620741015b8b15c2ca8a88fede2c5065850b8200aa212b90a9722d86241ae5ec42b6a4010bc040509183034532849480136dbebecce7fbed9dd984810447d9eff7b38ccecd4f73de73de73bdf8482ff67c3ebf1186a8e5597d82c675373f3076dd01b4d477fed7aea62274ed6d58cdff1e5278fabd51afbd03157bf16979852219148427f267897cb19f7c9fa77566cfef0f5eb182a20197fe3bd5fdef1c0a3251425e17f13014110a44b9e7d66d7e7eb571725c5e9213e35db366dc69ca7fb160c7a53ca30de3f03bcc7e3366c5cffceca8fdf587693412da11a9adb61e4a4db7f98f3dccb83d071bf8d4028149294bef4c29655af2c1a9712a384a4381d283431811bef7a64ed88f1939ee514cab63f12bccfebd57df69ff5cb36ac7d799a49434bea1bce8297d2f04b5e5b377348f188e5bf76ef452574a2be7ed4e3b31e5bbf77d7b6b8789d0cb2d26280536884a27137ec2ab9f5debf1b63ccd57f0478bfdfa7d9f2d9c645eb572f79d0a8a124b527dbc04369038fcf7f61e9f809d73e2f93c9dc5744006524696a6aeabff6f535cb3e2c7b6308c3db257d7b258041a786a49efd4f4dbd7ff6f494f49e5f5114c5c3150ebfdfafdab9f5f37fbcbf72d1cc182d451fab6b06afc4e047d93c3762d498a5cc65c895bad4056eb7dbb47dfbb6c74a972c7ea4a9ae5a99936e82f41433709a04c7947b66fda36f61d13acc0be76f05cff3bca262c7d627de5db1f019b396921ea939037ea9c9fbcca2d239438615afa669e965e5da250990813921ada9a919ffeab2d257b67ff14956a29ea10a729341c6eaf8d12577bf5d3c6ed27c855275e672c1078341766fc58e47df5df1dcc2589dc01c3cd2004136ce3d7751e963fd070e7e9ba669ffe53eebb2084487d56a4dddf4c9c6f9ab5e2dbd2de86a950d2de8017a9d4ec8e83766cfb553eefe9b3126b61a25f5aba5169d21dbbfa762fabbff7aeec5389d20ffa1fa24088a24c7dcc5a50fe6f52bf8f0d72aceef2640462010600f1d3c78d3d217172f39bcbf22be303b16b2d2134161cc6c2cb97dc6df53d27b7d71311024923f1ed8774fd98a6797c5eb435ce5a19340a953dbe72d5a7a5fefecdc4fae649ef9cd04a2a3b5b5b54fd93b6f2ddd50b66e5ca20ee861037a82446e728dbbe1fe67730b07af62185997bc20a5f96875d5d477972f5c9da0e795df579d00a93ef3dc330b5f9c96d92b6bcba522f7871320c3e7f3e9765754dcffca4b8b9e76b4d56ac70dcd02adcec4e70eb9eefda251d7cc55aa348de43a52d1b03db8a16cc5c23713f5bc7acf813a604dd9679e5ab0f8b6b41ee9ffbb52f0bf9b4014dca9932787ae59b5e2d5ff6ddd5430b84f1c9593952668130a2a474fbe0df322aeaabee6f8a4f7573dff4e82cea7fbb6b20ed409792767cf5d38353939e5bbdffbfedf4d203a9c4e6742f9975f3cf9fa8ad2fb62953e6e4c712ed08aa4e6f4bc516f556cfdf88104adc758f17d0d1852071c7fe4c97953e3e3130efc11efbd6202c4f3580e655e6c03d0f4382919711b535dfde335afaf5c3e2d603b2d1f3130039a5bdaa168604fd8b9fb08803ad3f2c0c3b31611f072b9dc428ce338ab542a75ffa939505ebea51401073b1d1a85968c1677f4e85181a200df4f61a20ab8239283e6c653f053e59730a5a408bedd73147c740ce40c1c0b5869f07cf8217c3014e403815041413e75e4c8e16f727272352ccbb6e1fd6d23460c9f41885d31012c972a6c250a8f1e3d36a9f14cd3707c59ba566fd0998c4646c1ca29a94c0e08174104c1ebf393b600fc810099a4c0d66e81daca72e893cec0f61d07a106fb9b3b6e1d0b822c1134c9f9a0d61a0199907780cbe984f3e7ce414bf319686b690687cdcacb648c332921b1a94f9fdc7df9f9f9e53d7af4d8a15028ce7517a50b0860eb60aeaaaabab97ccb96bbea4f9ccc5669b45c46af2c484e49c3664e01013e40ba47f0f903a2a78911ef4787c36a8153877642412f0ef656d6829b490197d70f9eb6e370cdd8bee0e11510526582d69c045246160681b7878221f07a3d48be1d1a1b4ec3f1a347e0543d562bb98c2f2a2a6a9a3871e2a7c3870f5f6d341a8f7726d2f166a2e9bababaf1ab57af5efaf58e9d398618b3a460c0204849eb21028f82ec0c36fa5b8868a2fd6c0b9c3eb81de2b401a86f68072ebe0072fa0f010925819f8efc0887f66c83140305797959c02b334097980d125adae9b94207245c99411312f961ff3ea8aadc0742280848a06dfaf4e94b070f1ebc06f3c7de85406d6ded84993367aedf5759a9cfe9db0f468f9f00b171f1e825e6e2faeb4c0649ec2edf08bd13fc508f92017d0e140c190532b9bc23524422e51bdf87247d104c31719039f83a50eb0cd1075c2008f27c223342e4f34f37420d46252d2d2db870e1c257264c983097f44c1d779496966e5bb264c9d8d8f804b8f5ae7b202131497c00158971542a9d3dde351a02ecddb915eaaabf87d4ac7ce85f3c1623a7bc2052967367a1f6d861502a38e8d5271f09b23f3f873cb79b088bd1b55860c3bb6f41edf163306cd8302b2aa518e574988aca67debc79fb56ae5c59d8b7a0106e9976372895aaae89d229c45427429d87cfe705afdb034ab51a984e910b5f7661bd88dedfddb37ee9206c45a062c776f87cd37fa077efdede75ebd68d4f4e4eaee8b802c16f5cb060c1f51ca780e2d16360d8c831a0d16a3a5edcdd0bba7b1175110f760792eafadf45a34b2a5cdd4fc7a1fcb34dd0dcd4089803e7d6ac593340a7d39deab8eac08103b7dd72cb2d6fb7b5b549d5e8c1f49e5930b068086e7b21119d58bf2f06ee728e5d4a82bf3c4ef649449b9b9ae0f0c11fa01a8dc8c8e372c29c279fdafce0c30f5f8f39c0773cc162b1f49c7af34d7bbfdafeb59e241ed65d506b349098942c92484d4b07737c3c68918c9c653bc05c8cc0a58874773cc8f3e4d30ace0b67e14c63a358465bce3442002340e6172b12488000bcb676ddfc8271572fec224cec2c3533efbbe7d0471fbc97eac02a1ba06811282182d33de68412747a03184c26ac2066d01b8dd879ea41a5d688d7b02c27562c9c3d013d2346ac8b4e0840d4b1801608e0a487931ff13099c89c0e3b5871f26bb79cc789cc063c02665939a8542af159e7dbdaa0b5f61824e272a128332d78dbf34bef4cc82b7cbf0b0192c88be73cf9fdfa7fbedc9fc6df762461030904652c12e170f6d482062342c8109014d676025204cd4831696562e2d252420209d07487d2c3f92f885e14b0dd08614d2746bc4ee373e4721910d9eaf57a405d8b0ef1b8ddd0505b03cd870f02d55007697e3b2466f60245ef3ccf8df3978cd525267fd78500196b5f5df6dfe573664fd6e344a7a029f021013a3513ce63e238f810505899389490d668c2089830023af1c58494083ee27952313a6b3a4c9812af21869390b825c7a3d77bdd2e7062046ccd4de06a3a0d7cf329d0d8cfa364fc60405f08489e1a3a01a4c5579fbbeed6a9fd39b5e6f4050436fdfbc3d716dc77f7439aa00f34a8004642813e6f00285a4e81cb7a1e7c02056ec4e4a1a4c033720056010c9292a930324844817262516a24628c4c160688a422b59af40bf80f3d8f12e25d0e103c2eec5d9c20f13880f53a411df482491284188602b5440089d85ef8c1e9f1818b17c070e7a3a01a30bc66d8e831f934c3b82f20b0fb9b9d33674d9db2946e3f47e9a4788a53426cd10848b03481efc431503034703229c85032522932c4f0038d1e44ef0689e1e3043c2610d0e8599a0ecb8c41494931a272bc87d6c500979c0986a683a042a02a198d5b1a14f87e8ee4080276b9bc607778c0ea7083cde94502780cf0bd37ff0d620b07578c9c543232da0f752170ecc8e1bf3c34e5fa8f5d276b192d7a2020e3a0e8de1990c2bba066c39b4840022a39036a96018d428626078d92180b6adc27c6e1be84c3260dafa150db941ca320c37d044a2391b3523338b844c870540185c90a0818bb3dec023d20d85ce0b6bbc18a5b1bfe26e670fbd0300a5216ecc32741e155133f2cbe7ecaad5de692e868696ece9f71cb8dbb1af67da7d2911cc4462bebaf7740bf58031c2d5b091c3a9c805722280d270f9340023a1587c6824e8dc98e4623092016210218350c019c73faa1caa602bbc400fda1165259a2471f2ee70801378410b03d0a1e89d8f1b803cf930858a50a6848ca869b673eb9a4cf844973ba25e072b9ccb3eebea36affe64df17a5a000665a11838028afbf581868fde0216a346c0ab5919a83a45418b60b5aa88210139018fc74502f29f097c7da4053e38c1414e9f7ed0d7f63d8c4f41e1a087c50838dde07710e9b845f00e046fc7e362049080254483c39418ba7d65d90349fd07afeb9600f96236ffd1872abf58b72a9764be1275eb894d817e050510fc762b70a43aa15e451971c47e2610951221a12032ea4c00ef21b9527eb8193e68504361413e0cb0ee81e2382e1c014200cd85e01d48c246b604bccb2746c0e5e5c1e1e7419699e32b7973e344435ac6f66e09906f37cf3e3e6bffa67ffd33df884ed320013783b2c0b63ad9d2081c2185094ca240489008a810a4968057fc4c4285e0193c072833cc5cd1fb84c0d73fb5c1eb7532c8e9990e25d25ae867c0f3e85d42224892d5e9113def205b91001ef306c216088224bbd073fd1b1f8d8d49faf96bc62f09489f7868c6c12fdf5895134308601925a5944c4cb1f85b8155241c8130091281b0859399243189881a49b0789c8aea1f49e38c05fb1badf0d28f3c64c499e0c1440724b174388951263e029680764680bbc2d547ac403e8c0012b067e6f9a6bef5f1d5b8c8dad92d01321b3f376feeae0f962e1e6aa649040054f8622225057a304a40298b44819585a514a94084883a121525ee4b3b088423d060f5c09cef2cd0d3a88427b259e0202412082101379aab1309113c3946ca2acac7ce03580b473a1e58fbde50b339b6ba5b026494bdfdf6bae71f9e7e8f1927332d26b24ad28900132610254112394c220c9a4441048fc794488425e5b393847c38312ddfdf0a597a1626a7e07a23c08bf2f1235837d13a027612f00438a93e648bde27041a410642c95d27a63ef4e880cccc4ccbc50830dbb66dbb76c1534f6c081cff516ea48211022012e00891087805d6f568143a4844bcaf42ef2bf01c8779c290249686273cf23a1bea598ab3b292fc4460216ceabc1102240a22e8c8d6ed0ba0f1d01e9240853a0946cf98fddef38b16cfa8afaf0fe0dda2450990e513f944a0c9cdcd8dc175c1cb1fac59795592c70afa901fab0f262fcecc1c1d8d80044984e7830e125c9888528c00030a62085ec68427309140f8a311493600ecad047f40ec4abd48ca1389809b683e221d0f12b00a52a8909b21903bf07c4a46e69db8e83a8438bd11022e2a029ecce4e4f3800e8dbdeaaaab8a525353e77cfb5579461aef8618bf13382128468093460910f01112e2e4c644e4c3881222e04904e4488091865b8a8ed65a24c063dbcce36a8b17fb1d02dce30d837713f08110b4d01c6c4748eda624dfa0a1c52f3cfdf4d39b49e78fe68c6c6d5102c4b848148c68dac993270f4a4949b9ef9b6d5f659b053fa4613b61403284889c4442169552380251af47c928f0188be0593c2ff642284549e4ab1d84c8e225881c82188100787de10888dba000ad0867bf5f0edf7965c025a6b9b27372572d5fbefc8bf6f676d2c091bfde582351e842404e8047a2412241e1dab3e79831636edcbd7bf7b8f696336c0a5e9546f9201ec96b81c79919c4064d042c9a342c21dc27c049e32727049070940025844910f03c96461ea3415c69011aea10529503a0b23d086e995ac8cdeb57872dfa0a5caf577ac957afb06c24e2e511129d73209a07a40b524708297081612e29291964369bffb277efdebe96b656b901bbc8543c4b2c8e09418c1cdb6e9904d4484081b9c262dd27510acb87061992208b1e0af743d8627bb163b5872868f587e0948b875a7b008e5bfc70da8609ceaa859cdcdc1694f0a79b366dfaefae5dbb1a1007f98b8fd0493a8ec8f6822a248b001722394148914f136c4646866ee2c489837101734d6363635e6d6dadd16eb3d22c76ad06560a314a06f43855eb14e13643948f9cacd0a410204b545c4bb8501e0efc71de1d80f308dce2247ac7dce294426262a2373d3dbdd668346ea9a8a828dfbc7973abdb8dab9cb054f888f73d91fd5004e3453fee5211934742468c7c9d261f8be4d3a64deb89a3085755fd6d365bafb6b6b6f8b367cfaaec763be3f178243c266830c8773c5e22ae0d68711586cb450197a6bcc964f22424249c47e075f1f1f17bfc7effd7656565c7d0ebee08404964eb8b6ca3a0855f02bddc417563307bf66c162363c605781a82cf444b428bf1f97cca4020a0c0f6846659d683e0ddb8f46c476bc5df27310f6a0e1c38d088a05d7bf6ec89fe5150e86497f5f7823fec2f349778bef0bb9ef22be3ff0007bffdb8dc7f749b0000000049454e44ae426082') +DISCONNECT +/*C198*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C199*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(39,'Headphones','2016-12-18 21:12:00.043000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000102c4944415478dad55a095c9357b63f373bd920210984d510b1485d816a47c07dc35aadd4d7f6e9749ba9b6d5dae9eb68eb56abd5d6756aad8ebbd35a17b40bbef1b983521517dcaa8888b2090413760890846cf79dfb016f7c9d378896ce6f5e7e9e5fc8979bfbddffbdff73ceff9c4f02ffcf5fa4ab27d405e88950242240bd44281412b95c46557e2a70b95db4baaa8a161414d07f39003c1e8f0884429e4824eeee23958e56287ce328f51a9c2d0e59fffefdbc521f1f4b6969e9cdf2f2fbc7a4529f2c8fd7eb2ac8cff7fe4b002084f0f1ad974020f84226570c51fafa11995c0e12890f28944a04c7073f85149e4f9e04b5b5b5909696967beedcf9e588f97bb7dbed6c6868f845407e110063546f41717eeef3d4ebdd8e8b978b25128ab401a95446fc355aaaf6d780d3e92452998c5a4ca590983088884422ca809c3871e290d96c9ec9e7f3cd0e87c3fd4f073068d86881c70b93b48141bb0a6fdf1015ddcd232d0e3b6d3b15362ff553a92176e0200f02e423b520fff62d121e164271e7a1a5a585141515e55556552503a5f91e8fe7b1403c1680d8a713f8d686fac8b9cbfe743e31ae8f4a24e483c95205e72f5c8433a7cfc0d54be7ede67bf9477168162e5c302871d84c9bad3908e905572f66e27a2930102e970b70e1f95e4a477bbd5e93875dfcb501841b2389c7ed91cd9cb3f060f2f8b1c30cc13a8a8b009ba38554d5d4d1f3576f7a3f9e37fbcf6585795938bc118d87f432f6ee1bb3c4666b920b0442fad3952ceede0884b2d3428aa5db6db617f80281d5e5747a7e5d0011dd8551bdfabebc60f1a7db073c1941047c3e75e1c63100e6ca6a3a7fc1c2d483dfeddd8343cbd1ead19893eb345add6404f20ebed3fc3bb9d068b5fe0f00fc9eca15ca79b6e6a6f5e81376f49b4e87da47022095c979783fd9f2f53b3292c78d8c0dd4f8e2ad01188066bb03f67d7f20f7dd377fb704e95088c3efb79d0003a04133a8d4feebf0b4a26307fe06987f28144a400786daea2aa8a9ae6ac8b9f1533c9e467e437d9df3570120f1910a90c74fec4c3d7a7d484c4fbe58c8275e0a9c53169bee3bc78c183ebfaca498f1e31e5a0d1a5b080f4d8e164278bca46ec61e2b57aedb08911106b6f7d4e97213044c2baaaa21f5fbef76eddab27e1626c2260c089d0aaf8f04009395b84fecc0891bb67eb5efa9e80860c7c168d0e274c2c2c59f1c5ebb6af9061c5680568166436b5f8408cd1fcda8d3876c99396f59cf88f010e2a754508293f0793c5a576f85dcfc62d7cab9337a2030b3b3a5a553a7f02800387f1b32e6d9d757fd69edfad82803779145947be5667b6cdfde6fe3d1dfc04ba56856b407230a3b05195ab0a1fb13afa6a41efcb09b5e4bfc55cab60510ee5f63b31dc68d7be6954b17320fe0a934b3cde952006c110923c7bdba7ccde7eb639e30001f77cfe9f2d0b55fae3ff9f1fc0f3e6bdbfd4a68a5cecf6fce4e4183f4883a9a716edf80bed15afc394b7c1c95385fa6403efa64d98e154b177f88ce5cef61e1ad8b01c855fedae15f6eda76202830803b92c2a2a2da45f33f9c6f2e2fbbf0c0eeff5ffc65a7a0400b7b6feea225cb172f9cd46cb753a9448cae41288ff0b8333e969e716342d2a867505f55e1293c94469d064038be834c20e00f7c63fa9be95aad0e5094416161e1bdfd7b774fc72177da76dfd1c13412b4809881f1c9278e1ffb9c21e2f379adc6e331510825e5167b4c9fe801b6e6e6420460ef3200be7e2ad2dcdc2447c53948a5561f0d0deb065a9d8e48c4e28a5369c7dfada9a93e8d186b91b6ae0ea611a0a9301c475fcbc94b0fd1f9f36d0e07110985b415049f6038a623470c7f31fbfab563385713fc3d151f0f805617280c0e0d7b256942f2ba51c306cbc243833929c0e278c68fa7ebe67d307bb0d3d9928fbbd6d2c134ed2135fc3f8f67fc356958bca1a2aa167c24628c7002c0a488a74ae1ed193397a5ecfa7a2d6e480382e8d00f3a0580e97d4cf3d217a6be763a28243446a9904377433704e024d6062badadab852d1b37bc576e2afb1a87b35df376703f46a3e0d5ebb76cfdc39bbf1f5a5e5149840201158b850840c085d4f59bb6a42ef8e0fd77705c35fcef68f6b827c0343ff51df3ccc474cc94fd7cfdd4d02a0028419146ad0d0d80a1ef3dcca62978b5ee213715a305cc9ab3e0d3554b3f9e5a5155c3e5128944042c2209519a1c3a76e2f2d4179227436b3ee9d0913b4b21260754a1e186b77b44452f912b14a45d51b2f06731dfcfb976e9c23b782d0f5a3370470084689a7f9bfada9cbf6cddf41f35b5f59c1491208dc4584b60610499172fe54f183b622cb4ca918e8242a70130ee2ad1c250cc3d3767f1cac5dd0d61600c0b66752ffdf3a64d47572f5db418bf2f120949bdd3d5216f9923ab478d9ff456caae9d8b1bac8d046b033c0109f3058e4ee7b2ae144f4c1a9184e34c682c12fd4347ee2c00d276f45a94133d3edf96f2c3e081bd94913a17f1b81ae9998b3f95cc983e735a59255cef11a1b1aa9502d785eb967f7453ee34078f4a7af5db943dab1bac4dc479752555686c200c7e85b8cad3e995a6c482c9cf8e9d00ad79a54b004058804c505ad1ac8ced211ebc62e5279b13070f0b1029ba03e1319ff482c75eee2aba79fcd6b62d9b77a49e2aff46ab96db4ce63a8fa9d2f6f39b3300be83868e9aba6fef9e2febea1b4075793a58fb2d8150cb669caf117616255f9af5e6ebafe0b8b22e0130264e472aad1e9f174786cf99b364dd02223708accd4e2834d5136b93933a5077612182aad243853c0fd4e67ef3d367eb527f6f75ab6ebb3cc455596179302a71009e1e3c62cace9d5f7f893e40f4d9332884ea41d068273e0aa08b0e457dbff18bd5f3e06f3ef0f8000618a5840a24e219cf755ff5eabb1fbfe32622c8ca774093db1782f57af4013e5791a1112c6ba917ffb622afaf5fbb64d9b275c7ec7253e9011f1f694b556585e70100ca9ebdfb4ffeea9b3d5b6aebea488bad8e2a950a904b7d88d3cba373fe38fba38b677fdc85e32cf04ba350fc137251ac41f2f217ab3edce614f890bf664b4113d4137cf1862cf5575757436999091a1baddc78a542017abd9edb34b3d9e2d9b471c362ccaa5feaf5c1763716bd15163371bb5c4aa5ca3feefd8f96efd268b581ac9e176322c38c0c972f5dbcb463fdeab928a773e1e111ad6300dd353c9ecd4935b95bc7652bc22274fb6f071345f053542e97413d72f7fcf9f3c46cb170aa57e2e3430c0623351a8da0f2f365d292626908757575f4ea952be7ce9e3eb5bba4b8e85b3c293bca6ee63861a39f99f8d5c2050b6203b4fe147325e4ddb94b274f7aeee59616c78d36fe7794141f0e40af00f184de92d736cf4ed87cd91a486f4012d16935d4525109a7cf9c617980d378466377484c4c2021417a2a412794829988f80e4aa0955a28f36981850f69677272777ffd973f98ef9b7230970c1f3478f8d753a6fcbb482212d3a6a626b878f142c9f62d1b99f316b6ed7e47b2a463007c02981541b667aaecab8989fe93d7595e008de129b0a3f6494f3f898b77715db798b8a72031fe37e02b714188a40054722ff04432d673002fe5d235f0302d785b6a21a7d809df9e75368b8482dc7dbb773e89e5a934b49b01e3bf045a70dedc5b370f635d3c1f7f5402adf5f443cbca8e00f05157f966cf22e98a205dff1deef76800aacfab57af528bd9c249895e7dfa92614387508da806faf81713a1544add023534f12389d5a5a2758d4e04ea215209501f6a81ef0e66129b57418dddc2e0a72b174999e93eeb46602010509681efe6e5659e4c3bf6067422813d14007e21c05ffb17be0f27eff9443f794a3085ab9ece9e3dc34daaf6f7878913269240b9832606e48210238843154fcbede170ea742629ba57cad5837a7d101936249162b685ad5bb711855249d96e0f4e1c84751850bbdd8632bd99365aad703327c78c2a74e803001efaeac80758cad79c9d06072afdfa3e7d16c641536313e4e5e5e2eef3203e2111a2a3222149750e34fe7c68099908d74c4a38793a137a444642444437d069fc41241271d18a516fdebc0580e28fa31e73764abdf8d9068cff4d8d8d603295deba7ce15c721b005b5700506f781656044646bf7ea87128aace7a622a2ba5a84861f49824e8e75745c68615d126753fa80a7c95ab6a03b52a565d112f13f21eccd05e0fa1f801eb04d8bc6d3b494f4fa79817402c16132f8a7f97dbc56921bbadd9753b277b696d4df55ee88488eb0c002e63267683b14b5f0cddfd455102d86d365261b94f75017a18149f002f69b388db308c0a8ccf8246adc644e6a1ac1b82a526d7ebe1c2684323696cb671d7ed7607c9ba90c9fd8d54226e04565c6a76661cdab7b1c9da700bc7df845607ae4573fd52005c17022df487e9929ddbcb47c6b93c40ee9bca68687838f4eadd07deea7e87540ffc8cfac97ca0a9b999d4545622971b2026a63fc16a8dd6d65be16e5109694179caaa37aca7497585853a1c76d6e52351520b3d5e24f61c4e4dd96acabfc9322f6b47d6b4ed7e9734b6582b441b1500f1431362b6dd6d0c54620c8780c020888a34c0bc7ef720dbb8002a2d66c8483f01d535d5306dda34e8d5eb49b054d440654d1d54d7d6717583d3e546e9a18382bb770069024c72cc365c80a1abf2d74a437af5cf3e7b641afcad21d6e906efc300b4d7b0c161818af1c191b19f62dd2b602d90080c8529fd0f1067dc5b744d56001c3e729c7b90b174d932d68224a52633ada8ae059bdd4e309452d675301ac248deed5c7aafa890d5d3646ed40dcf807967df09e93ffaf9eccc23bfc3fb54416bf2ead2e62eaba0fc1895f4c1216f8584864f63d2411b1008bb638e806ac024f83c6f00a4ecff0ea45229cc9bbf90752b903aa5506eaee05a2f1eb707745a7f8c4a6ab872390bca4a4a00bd1a6647dd6c9c91a6be72372ff7606569c17e68e5fe43b3efa302682f66d40c44803ee8ed407dd054b5bf86bfa8773619d24f410fabd6c0fc8f16138c2e74f8c891f0ecc449e4faad3bb4062984ce8c391968740f23d704387ee4bfa8c36e07b5ca978c919e2d7d3ba5fe8b0a53f1099cdb0c7fdf92ec1200ed5492b4810891c9e4c3ba1923df488a82885589d7a935291d46bfbc88381c2d943d4a7afec52904cb05745c37ca092ff1f35552bd560d6732d209ca6a8aa21426c4f9c189ef76acf8211b0e42ab706bdffd477ae8f728adc576102ab4003e5f60ec1713b361e398bbbab8f838d869f92dac58b51ae3bb04929e7b11bc3c21d7f8652615f1e05a56262b7ad889601657c36fbb5dbd95bc3cf73d0fe5841be33ecbbc8ff474e65101b483609189f5380330142626c444acdcf9429edc2f7e2e599a4a69dac90c1835e125acd49a287345a98f8414e430fd64e29ab7be7ebe74d60877fdac4f0ffdb1b00a2e416be864b2f99ff6908ffd46d8062208299398d04fbf60d3d4fb418103a6d394db832027bf8460d2e29ae3321f21c938924af97c3e0c88eb4dc6f73499e7af39ba22bb14ce432b75581fa9d34f64ba02c083207cd10251eb448404f94f193f2a664c48cc4bbe4cff34a26eb2d91d10e22f0699b708a27455b68cb463696bf69af737344311b4ea1dc6fb0e6bde5f0bc0cf4f8239b79699d24fd527eac9be466d60905629a8f086f24e5b730add253f66c34d9b83eb5e57b559033c42c6fd3500b4ff9e6926e6dcf23630ec5dda068e7dcfb8cd28d20cad450a0b952cdbba7ee9e2bb0240fb8bd70644d4b67051db67685ba4bb6dc1ce0716de25ff6be5bf0103018e9a264e158a0000000049454e44ae426082') +DISCONNECT +/*C200*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C201*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(40,'Mic','2016-12-18 21:12:00.045000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000147f4944415478daad5909585465db7ede33fb3ec38e20826cb208ee8a2b820a6a16a5262aae659a5fa6589a7fa9955b62a195a62ddfef52617b7d658ba969a2956b46828a0b203b0c030ccc3e67cefb3fefc9aeebbfbeebfffb6cea781d1966ce39f33cef733ff77d3f2f04fc3832333361e2c4895052522251abd5beeeee6e68696901b3d92c75381c4a8d46f3d8aa55ab52e6cc99639b366d5ab54ea7332c5ebc583f6ad4a8d75f2a2eae90c964f0fa9e3d2097cb251597cba1bdad4526954a7df52d8d5e8352056ab50e868c1c7557b1903f133806040d0d0de0f57ac9e4c993c9a1438784dada5ae2f178b2972e5d9a472995eddfbf5f3f75ead494909010fddebd7b85b4b434d7b871e3384c92fcf0c30fd73adbdb1bfbc427765a3ada3fb954f6cb85d5ab56437a6a1f50aad450d7540f5ab98253a9b4c2e1a34761fdf31bfebe0472274d849e119170ebd62d70bbdd90949404172e5c08686f6f5f3777eedc3ca3d118b26bd72ed9b265cb387c8f60f01c26050a85821e3c78102a2b2b69bff47e302927c7171519e971389c370e7df9e5a5befdd35be716ccbc08142edfacadba16a8d503500edefbe843f2da9e37e8df96c0cc593341a9508a50c1a0c2faf5ebb7f0d4a953c32d16cba8356bd62857ac5821cdcbcb038409141414901d3b7600ae3e4c99320502030361eddab54008a15f1e3a442aaf550a96f67630198d10171feb2ec8cf77f58ee95debe5f952eae3bf69a86f3ede69b37a8c5a1dc426248007176cc4d8ccbf96c09cb973203c2c1ceaeaeab4089957556af5b4d293279593264d22887dc9891327e8b66ddb0856015c2e17b00458d0656565f0c1071fc0b061c320373717ae5fbf0e1aad16c68f1f0fe9fdd2a892534073730bc5e069a0c9e4d3eb346d515151c7ae5cbb521cd73bf672c6b00c6841d85a6d76c89e9ceb7f028989899ccd6e1330897bb0026f848787079596964a66cd9a450e1f3e4c4c2613cc9831833cfdf4d3ec271d39722430080d1a341876efde0d9b376f02ec19929a9aca2a44f57a1d58ad5dd0d5e68686a65adad9d1c18211e40a10747abd67cce851377a44f67ccaed721ee5791f482552c8ce9de07f0284d51f0f0ca030283868a3442251ddb87913f2f3f361fb4bc5dc92254bc06030d02d5bb600e29f20e6a1a8a8081e7d74094445f584d75edb8dcdcfd38d1b36c1ecfc02f8f6e8d7d0d8d442a88b426b8b99de6eacc33600aa544849478759488c8fe7b33233cf729ca48070a48e177c243b3787fa9d8056af23f66e3b1d9733a118f358aad1eae45e8f17468e18465e7df91540f800c28830b89c39730656ae5c09c78e1d83c2c2e5d0666e036c58c095857d6fee87b1a3c6c2d93367a1bce257eab05a00f3829b0d4dc462eda6068391babbada057ca856979f7762b55aa677d6eef4ea0941b953751f03f016d30d8ed16987ccffdafb95cbef90aa55aa954ca4942422f48498a2703060cf85d0b202323031056804d0e9111515057df00a5a527213434049e59fd34648ece843367cfc2edea6a705adbc02308d0d2e5a0f5754d446f3451dee3a4213a154cc8cae2d53add4e25e556c93929246767f85f81fbee9b014dcd753074c888d175f5f5bb042a2407040691c4841832f581fbc068309280009378adcfe7c30513e0cd37df8293dfff84aca5028401d2af13268dcb81218307c395ab57c08a4c24b8ed6073bac0ea11f0f9662a4191534a25d03f310622c2c379bdc9f88dd56e9f618a0e730deadbdfff1e58fbec73b0604101c446c741bf81fd8fe24a6719f4068a8cc4cd7c70262d5c59c81d38b09f891cb046654c74f4e831e8ee76818f17c0e9748252a98029c844d1bda200b5026cd8c46e9b159c788f0b61d4dcda063ca61e1e120c7d1362a94c26f56a74baf7bb9d8e454ab5ca3b72cce8bf92c066f8f1621519353826fbc8d1632fb7b6342761f05077bb9afc63e9a3f0ca2baf92f88478a8465860bfa31d5043404000d30c4091630d0e3aa4cff8f878880cef014e8f1b13e341ea2340059f18086b6227ef86810306e2f546c1e3e3edc0710f0bbcef23fc98cb9994eb7f0f2c5dbe12da2c9d44467c4b04225923215c24fa17888a0c27b9e3c78131c0444e9d3e0537aedf80dbb76f8b89b4624f38b1123c062ac20a9f63773840c080152a2548f07e2927f93d7898533007e2a37a51f67aefbebd542295597bf78e7d0c9f77d0e3f5482e975ff6f99dc0f8dcc98ceb69427c82eeebc35fff88ab92a2526b6868482059f1d83f202a3a9ad4d7d5b19583106cd68b172fc277df7d07164b9b98009a3c50c8e41018140c5ddd5dd061b140476727085e5e845b704808f41f3080f6080f079bcd0607df7f4fd0eb0d1dd1d1d18b6fdebaf92956953b7ffebcff15c8cc1a4f1016f2d8de317947be3b5e6c319bc31129c4dcd2046fbebe87e44c9c04680740a55143687898081b351a3409c7e1f2525c7501fa24248a2e165d2830f8f17852871bdc2e37483114a45b41ae51923884a231205090a9954d20973e80f79f6710426be27f028cd751bc429a9a5bb6fa8834cfe3721bb0c910423d48ceb8b120532849116a41736b2b36a805babbbac0874163e4c0e32ae3bd2060223c36ac4a859659ab019d462b2a2cab42b03100663d309586f78880f2caabf4ab6347c01414589790103f03e1789655e0e34f3ef12f813163c680c114c8a17009e8812662901f68355a75505010377cd81098302e131f2f051991805aaf15ddea175f7c210a5a57573774a04d70d8ed689995c8444a112256848f039989970074755aa107faaca58b162344e3e1d32f3e8703efbe23848485de1ad8376d6a7d4363b95aa326a74e96faa7032c01bbcbc3511f5658ab79e856555511da61a5d7e3e65c2e075cfaf93c31b75a60dedcb9101b1f0711919122e6dbdada40833052e190c2fb78183a74288c1d3b56a45a73ab594ca2cb61073936b256a600c20b34383818943a0d6defee224aadfad85787bfc99b7aff038e6b372ae1b1254bc1af04186ecd2d1d2091d1a4f4f4815bbd5418cf7b78a51383c4a10ad6ac5e492acaafc0134f3e090ea4c72e9cd0e4489f0ac4ba14ab82bd22320eb60c5a72395a0a1d5643052ab4e70684911b852c352e11c60c1d4e8d063d9cbd5c462b6b6e51f45ca59959d9d3cacb2fb7b38168c3e64dfe558019b4178a5e46bcfa604276ceeb4eb76b910a57d6a83790850be6a29548243817800cada4dde3821bd555f0117aa29b376e805ca2644e50f4f46899a1bda30d6cc8420c465ea456d6e40e6695b1ca4be62ca44c37566f5c4fafdebcee8b89ea555a555d3d15e9d5da3332926cd9fa827f09305f5f30673a1cd87f30e08bcfbffea4b5b5752436a844c000162f7a18727326907684c3ce9d3b21a14f22e84c466073b2d56a0589973d8113a9722ef27c744c24d4d7d723bccca8116e545e01981218555a90f82856c0009d5e9720c888a0d7e977b5b4b6aeccceca82d777efc145dcea1f84b059a157af5ecca4cd37b7763c870c13891315e9db378d4c999c0397cb7e218c1e7efdf557f8f8b34fc57b18cb60e38142a2101360eacc6686e06013606080833f6a861e504b5027d07ec42540a8219032ada8a8bd85094878ad46b3a1aaaa6a8b5ea7236bd7adfb3fc7cbbb4a60309a2f3603eb74daa4babac68fd170f58908eb4152fb244154af08b6a2a4aeae1e1e5ff60f28bb72054e96fec06660719519a5da918198127bb0796d4e1ba045f84d9991622598b9d3ee80670a57a1d19b40afd755c3b227570a94239ea89e3d8baf565c59f747b1dd55026c37825965a4ba88ef4f9f3a6e73d862391fe5e6cd9c0d23468ca067cf9fe38ce87bd2d352c1dc6e4506f24045450552a70da47222e23d2c2c0ca64d7d00dc76173435368a668e35bbcdeb026437488d41f1d2ea282f213827940ba680009b46ad7ebca9b1e9ed6e9b8d6cdcf682ff156022b67dfb76c5a2871715d636d43f6e7739429cd66e4e42093cf7ecb36073d8c9e91f4ee3d4f51a30b3c2ec333a555171952a0568755afc5d0ff1b1b1a053aa4186b42947a87028849c5a215e97d833866aa47251f02a6f5c17940aa5452e9315a0de1c954a3872ef82d9fe25b07efd7a91cf2b2e9773b171b193d03cee56a854114a4e42d21293714eb80ff44603f9010794eaea5b505bdb043ffffc33d437d463933a51d41ca2eb64a6aea3b303d599b2964093897dc16c065a6d2906bda7f865488e4fa4fffaf66b787147b1cfa03776a07558dadcd2f4310a3877ed7aa5e077026c684705a5b88a9115d72a4ff33e5fa45c2ae382030391623703fe243f9d3b878d1e850d1a80cd5c0e577160f1a02650c4bad3e980949454484e4e849ada1a6868684498d945a6f2e058cab87ff4e00c1a8046b0b2b68a96fdfaab6034996a7a47c73c68b7db2ee1f04f9edbbcd1ff0afcf8e38fcc9c0561124f55d7d42f30b75b4c68c4482362f9db6f0f23d71392317cb878bd0ae99019b900641ca6154a54612f9ab618347a69e97d412ae510261cc24c2e7ebd4aad0223b29256aa10884f20027e8ec64f40749eeedd2721efe2d9739dec19d366cef0af89d93609b305c8fd5a74a34f59bb6ccb654a9546abd592ececf1d02b328274a3381d3b711cad733b304b81d7e2ea76e17d4e1c5c5c224d6223820bd986c824285e4cdb38b4184ad10ff5eb9b0645eb9fa72ab91236efdc0ec78e7fe70e0d0dbd14df2731cfeb76b7623f91439f7fe15f05a64f9fce0675b6b729a04f9975b3aae6bf954ab554abd349060e1a08ab9e7802cc4df58405128f76d96177c3d75f7d03e8e181590df6ad8c4a53925220342c549cab6db6df9273636598d163062e77d4582ac3a40e9ffc4e686c6d7527c4c66e9f3d63e6a6766ba7fbc3cf3f13b768fc4a202b2b4bc43f26108fe2f35ccdeddaa958115927e25285b27f1b47ca679189d81730b1630225636c82de87d98400d36f636546c6709c9553d0c8615fb0990b877c8affb49c1c071d1956c74995789d3ac0207804deae556ae6b759cc9ff9105647be3f4e9105fd4b203f3f9f6d5251bd5edf17037c95236438fa79990ca92f19c52d7bdc38c2acf3d1a34745bbc076af5dc83e5ef4f85e840e4b028310c58c4d6672b5123866ecf07d15da6b8fc50a0b66cf8399d31fa41dd64e585bb449686b6fef8a898ede74a9ec97ed387790f9f3e75346d17e25909c9c0c43860c81fdfbf7c3f0e1c34b30c87c4c866dd892c58b17435c5c1c61aaca8678b6ef7f0595f80826d3dcd42c0a18631bc6ed7168b339e4ff9a5b55d08d1e89193b66abad960e989b3f8b66a0d56e359b61d7817f0a412121f53d2322e736363596767575b16dfcff7797faae848c6dcc1616160edfb163c71bf8d024a7c3c9b10dac050be6d3bd7bf7716c079acdc0313131a26049a42854e84c59422c3906ab7138f88787e2bcdbde0132ca01838b04854c83a287033b65539b0245cf2b97509ed032cafba6a0256f607bac7f74fc61020c774c85d9b160c182b730f0d9403939c3257a7d3266f418189a3194143eb11cca7e29437b8c03badb833d20030ea9863d9cad3a9b8719de592fb0be61142a93cb449bade164b0a6f04948888ba73f9e3b037bded92760c52a870c1e9c8f027a392929996cd8b8c1bf0ab0048270423a70e08071c4b08c8f3a3b3a324d86204e2653109c9268cf9e91dced86db80048e6aeb031b7a9f7317cbe01226d389aadb855061ef311d60c17abd1ef0b99d626fb0afe6f1f7305330fcd7ca27691ceac4675f1da2259f7c40d3d2d27f199b959587c451afc6c1e7f1c2157e578094949450854ad9273e26f6c3d494d4e48b17cf9387e6cf875b55352431311ec2232230018e30cb1d1c1c04572a6ec0be7dfb7016e81421d4d666813e89893079f214b1b9ade6267166665b8d1c9a03f4461467658ad6827038e07b50cdd01b9d43c79a87306b3d8fd07c6cf9e3fe2550f442111c7cbf04ca2f5724cf9f37ef3df4f3497bf7be2579f79d7db070e123e4e185f361d0b061e4c9d5cfd0b7f71f206c0fe8d4f1d31011120eb54df5e2ee4387b90d4242c360d2e47bc4ed15f03810625291a5d8863dcf53c2f31e8a09891b5a08361f7e506aeeea9889c266aeacba09854facf4bf070e96942084de3616156d7d333535757251f18bd2bdbbf64857ac594d727226c0e8fe8361d6230f93cf3f7c9f1efffe04bcb2fb0db267e76ed12abfb4a318d2d3d3615adefd3028ad3fba5029ce002e600ac0dc020efa84f712163765544bd996b05ce275badd6fe44c9eb8921180542a15fe28c6ffc842068381bb7af5aa74f9f2e5437a444414bcffe107f7bdb2655be0961d2f49d806d49c7bf260fa23f3c8bbbb5f87dafa3ab266e3665abced2514263b6c2ada4a82434360c3336b213d31954ad99a130f65eb8c9a802b8f33a42013ff76260e3884783b7957cbb90be756ac5bbbee5fa74e9d22a3478ffe6b09b00395538b5f62c4977a1c5c56beb0fef9fb7fba704e5771ed2ad9b8fa296ee6e285e489479742af884898b7ec71d8fcfc2648c0a65cb2621904626fecd8f622c446f4025c5a6425afc8483e369561e37344c9be42407de16d2e47fb99f25fdec219fc2decb7361c6c5cff29b6bb4a00054786762210cb1e80c9842c9ab760ba3e2820e5ddf7de4b2a796d8f71eb9e572482cd49363cb716ee2d984372b372e0595cf5798b1e82e6d616c87f70063c32732eb86d4ef051876823d8c1b33fcd8042f0093e1e9dededb33f5ff87453f1b68f50ed9b054adbd857ff2d09dc3998ff655508c333482a97eb4c06434676d6d84963b3b3235e2dde217f7add1ad9b5ca9b92bdffdcc73dfae8121a19190927d0a55eb95e09fd53d3e1be7ba6909e6181947a78ca0bbcd8b3bc57e2ba72b3f26cc947ef7f76ecc4890ac47c3b56a61e9bba8bf5c9df99003b507d2010e1148e9508c0d728a75c74fef407d35b5a5a199b0e299835db74eeec19c5b7478ec8060d18c88d1b9549028202840b177ff69d3ef3133f64405f776a9f24b797f775a3c56eb7b47735bff5cefeef2d164b2dd26787c7e3a9c3e75a5981ee26a03f9bc0ef49a8f134e019ca12c2538ba7126d840947476d6a4a8a12155856535323512b9424382890a22be5ab6aaabdb76ed7b8a532998bf77a9d780fc378379e9da8198d08d5267c6dbbdbe0fd4de0f7fb242c70ac46304a7f00b28a067f6727eb4ae99d6bc8ffba9eb109bdf393cdfe5ebcd72d9548add8034d0897d63b09097f3690bf72b0fbe5774e0506a4bd531d1926254198714861047952c0ff286b56b6baf83e6b4ef417e0c6d379e7f4de49f04f07f0771da277bb5399df5ffffe3efdb753f8b7d77e1fff035bcde7b84e8268750000000049454e44ae426082') +DISCONNECT +/*C202*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C203*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(41,'Turntable','2016-12-18 21:12:00.047000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000009eb4944415478daed58676c56c9159d6fc0c698de0c980ea698224c07030955105a905082002d4d80840402a1108436e107657f10291044d78a44322040f4665164605910880ec1d4804dafa2dbb88d73cee5dda767638cc38f7556f248a337efcd7b33f7cc3df7dcfb7d21f32b6fa1e236a00440711b5002a0b80d280150dc06940028e8e1b469d3f8bcbcb5d6942a55cae4bf6a0f0b0b3365ca94912b3be743a19074e79cc9c9c991f5727373e53ed8b3b3b3fd7774fcf1e3c75cbcbe106bfe9c9595752423232393f39c5bbe7cf9bb2203983a75eaef70d94f434a972efd1908f60a152a98aa55ab9a77efde99f4f474d9445b7878b8a958b1a2a95cb9b279f5ea95184843f20351e3d3d2d2641f3e7bf2e48979fefcb9ec151919692a55aa2473687d57ae5c9954240093264d9a8b8f7ee0220a8257ded7ab57cf3c7bf6ccdcb973c7a4a6a6cac9eb3c5bd0301adcba756bd3a2450b53b66c59f3f6eddb3c20384e4e4e966f7928bcc7a99bddbb779ba64d9bca1afdfaf5d33567ad5dbb764991000c1932644b9d3a75fe00839d470b8bd3705ce8d8b163168b398281ab2d6de63b00613fd9ef2c36763406570b2a381ad5b06143dbbd7b77f7e1c307131111619de7b243870ed9949414472fd6af5f9f9eb3a74e9d726ddab431af5fbfb6ddba7573e5ca95b30f1e3c58bf67cf9eef8a02206cd4a851574191181a06637341058b93723c75d0c312184f9ec060b8f33c250060b81807c3f9ad8ce991cccc4c8b393778f060a2b4585f30c0780b500edec412a15c50d2028c23188e1b376eec40d510bc7765efdebded3197532800185475dcb871cf68104e2e97ae4c4c4cb4e0a563c0c25801e005b28c6521bc8fe6d4683ea307e82d020020798e403593274fb6e0ba638ce02ac07858972e5d32f7efdfb73367ce749b376f26ad2c3cc7bd42e5cb97cfdcb06143757cffbe5000d5ab578f1f366cd8099c98898f8f373b76ec30b76edd92c00cc6842a11ef3d6ff88ae39dbe8c83f1a0c1cc7904a4d9b76f9f7c73fbf66d095c82a852a58a193a74a859b26489c1e98b585010403bb36bd7ae762f5ebcb8f84500f4213e9a02aeae46b0badab56b9b458b1631002da61c0de7a970acbca7073ce38542bcf2443da3fd78206d827442703ac49a397af4a850e6e5cb97867dca942976d5aa55eeeeddbba66ddbb616fc7704c0b5107f63f13ca1300fd88e1d3bfea351a346d3962d5be6faf7ef6fdebc792354090220550880ef13000d848b852e304681f8467baa23634ff32d40b8ab57af9af9f3e7cbfbf43825137cb7f0bad015712031e62996bd7cf9f2df2e5ebcf8e7c20084f5eeddfb0028d4bb4f9f3e0663d162a58de600cf789f42dca055ab56a2f9d471a59226b2fc098c738c05c496b97efdba3979f2a4d08a1e59b3668dec452a71fde0b78f1e3d4a3c71e2c45080cdf91280082c92326fdebc9a376fde743366cc904c1ba40dc71ab8ea191a443a913a0c627da68ae401f13dc0e700e0b66fdf2ef45cbd7ab5ebd4a993e496d3a74f8b42d11bf414e2cba72012debdfdfbf7c764116d4100102875c1cdfbebd6ad633271b367cff601286deca7e3f7a5538d5519d518e0338e492b0e549dd418f29e274fe0dbb66d73f4f4962d5b4cad5ab5443ae905a8a085bc3a0a08bfe13a08fc28c8eef30201d4a8516320622071fdfaf5e2d6d1a3474b060dd2464b0a559d208d3c192eb064083ee301f23daa1064d39c3f7f9e0952be876c9aa8a828e60751b7f7efdf8b0d5c83fb1c3f7efcb7a8047efa0c001508c1fba766cd9a2da6c451f7274e9c681e3f7eec6759af1692530f52881be998daaf2ac453a307683c6821814bedefd9b3a76ddebcb99c3a02d35eb87041d686e28818e0e0245f1c3870c002808c3dcf1a04f174805b5e90072c64eb5f90ceefa64f9f4edd77f7eedd63652a3c0df2de78e503c7a49626b2208568288d219f6998c6004f18f165e7ce9d2b4683ae165e1030a40aa9367cf87047dddfb46993ad59b3a6a39718370400195d83bc34954936bf074a23719dc6a6ed01c48c1933462a4d1450061cf5139952c9ab107dca28a538cfbaa67dfbf642172db1491bd281aab371e346d3a04103a109345f9214dfd1643770e04082373b77ee944290145335437d7412f7bf01809cfc00caf4eddbf715368cc022a13973e648824266368b172fb6c882a2cd4a27cf70f180e6073ee7093240f91d751c79c4515ed12dbd9a90906040537967c58a15e6e1c3875a4369bcd85ebd7a890ab1d0434cbac3870fab077331ff067110053a66e5010037c776edda3599ee271d4001376bd62cc3ea11c16d0f1e3ce8162c582054a1b4693c9016f933316381bc656589224cc690678bac2e8ac2ba0812ea50754a9c54ab564d3231a986fd6ce7ce9d1da863ce9d3b679b3469e2b0b7bf3e0fedcc99330db16e6a1e0030f28f48469b690cf9cb1298c964fcf8f1feaf2e6e4e4a6dddba55129117bcea413f98b41e62633d3f61c204a96bb4de87961b1acf6f49d32b57ae9876edda31404585984495622c239292928c27cbfa1b621894684f1e00a87d16e2e3ef797ad45f5e594831b8468c18215521c7305ae6c8cb6bd7aeb14e97d3d39367e90d2170341835bd04b4fe76c0a60e35bd8138c8bb04cdd203064ad9422925bd7af4e8e13a74e8609e3e7d2a1e24407ac678bf3700ec7becfb830f806a121313b30d060f8727246858b79387709704224fa84b972e263a3a5a3c42a3c96dd6300c3c528d41ca397e47f0a401bfe5f3b367cf4ad7f2428396f7478e1ca1b4f240c4fb71717152c6689e819c8a9c6bae4145ba094a34ca0740058281c930a4e9d2a54b1de56bd0a0414e4b690d50062b7285857b5d6c6cac683b8f84205861f2d717bc64a12af20bebc68d1b2291ac2c199c5c43e34563879ca637345105ab568ebd98f4dfc3350486fc1b348ac3d5c96aa0456544fb4b6e42dda67ef357925789fa25433058396690e25d5127bec3cd0884c987a7aeb40a7ea725868e695860ac7affd99caeef1d7a16685505b5519aac0ca3e3060c187041170948ab1f38c1963f6083f7c1f1d75afe750bdb27d84825d0ae3972c24da5505dc85c6a500abdabb6e0fdd7c6ffcbbbe61bf60a016836eaa8685c5f84bc895a88fc53e06f3dcf4dffb70058b3819eff41b1198f7b014021afdfb265cb045481dd8becff626cf8d1948492642c868f154034b4fbaf48fd6311c8e18c74cf130c62be9341b7e1aa24d56ba88071e82bf3858df55e4e1c2d927feb68e0a3e5c29e6ca8da8fc8290b8925e47d50093d162f0c183972e45fe0a552d45d665324927494bc7fc7fc6df4f45fe890c3cc275acf407eaa0bdda7f64b502347fd13f2b90ef397d1df2a5a7aa1227a1df4aec8ca8311e1d5502e3c0508a66cfe95c1749bf52dd67c43537b5a20b1fe1e07db0489331dde380a6f1cc2f314f4d7e839f9752a1c3d12bdbc770a3498829ef60b1a1f04415bf86322c27c0a66daf2013dc378b4fb92682bb5724d5e7e1647535b8cc9ab56fee4afba950028ee5602a0b85b0980e26eff05e386059fd28cfb960000000049454e44ae426082') +DISCONNECT +/*C204*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C205*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(42,'Vinyl','2016-12-18 21:12:00.048000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000c7c4944415478dad59a7b8c175715c7efccb2bb2c6f11282eaf8580f210092052c0006a1b2031c5a42041e283128cfff8405379266a1b81a4981862aa4d9a36b4485ba1e91f6c687d40853f20420c48c48a3c84e5b9cbfbb1cb7367fc7eeedc3399fdf12e25ea2f39993b3377ee9c73cff77ccfb9777e91fb3fff451ff1581d251f97d4487a4451d4961b699a5ed7e1a4e4a0e4b4e4aca4f97fc18058522d79aa53a74e93bb75eb36a873e7cebddab56b57595555e5cacbcb51de5dbf7edd5db972c5353636de3c7ffe7cfde9d3a7ff75e6cc99f7f55cad64f7c318f3610da8947cb163c78edfaba9a979b27ffffe655dba7471ad5ab572959595a914d7e4fba193e6e6e658e26edcb8915cbb762d96b89b376fa6972e5d8a8e1e3deaeaeaea76c9a017d577ade4fca33680fe8f6b969f1f3870e0849e3d7bb66adbb62d8a279af138cc7a5256561687fede8024499c2491e231de686a6a4a24b18c7257af5e75a74e9d72070e1cf8a78e3fd333ef48ae3d0a03da48b167478e1cb940335e19c7b193a428ad63445bf79d246ad3a64d1ae01331db28aa998f24becd7b654f8a67042bbbe74e9e3c19edddbb77ad8cfc81fa1cff280de8d3b56bd757274c98f0850e1d3af0e2a8a2a222d18b62302e2f24824cac6bde03ea1f63a0ee790fa0b40c4974ee3d606d792173937e32c4f7e3dabe7dfb8e2a46beae5b9b25e9c318c0fd81bd7bf77e67cc98319f3288a0204aa025f0e000849875da5c2fc680fa3a1d3d8468130f184f9be715e0b971121f2b8a8fc6e3c78fcfd4181bdc5d82fc5e06f497f2b5280fce15a01e22c0052f303bc0468a44523e456979214ad1268e5b4045c748c714256903273a10033cafeb1e5e8ccb3dae9d3871a251f255757bef4e9eb89b01d53d7af47877f4e8d19f4199d6ad5bbb704c640c338ce7bddb7d23fbf959e73ed0e23ab630cbe601830c8f80fb2243d1964145d8a50aeccbf5f5f55fd6635b1ec4802af1fadbe3c68d9b02d635bb31330d44389711de00bdc42b8a0228c77d3c453ca0b441a8a8348a0113da3c0b8ca4bcef1728d68f1b3ce5c71594ea44bbe334ccd1fb31a04c326fe2c4892fb46fdf9ed98ca47c4a80c2f3523ed211e878a818ab08c76988070fa710c41e42c1033923d97514e61e70b17b120fa7101f1e761871f8f0e1b775fc86ded5742f0346f6ebd7effd3e7dfab407f340c63cc03941cc39330d66cced40856c6b70a23f5ee23a7d6cd65198eb40c6b234b38e07ac8dc2f4c3b396476027d1ecb7a4df6bc578283540fab67e73d0a04153611c3300c804e55d0866e0e2b16e2f92f2b1318a655f33c0e0448243692063d751bac85006218b1b1b0b0f29631fd4f89f77595d758b01b42774efdefdf7cab4e5828c4f5240469212c4760e4480166503cc03043443294909a8e07661d65dbe7cd93395121bb9c25f8775a833801fca072f780805baf5fd501aa805081953450aea1f69cc5f3221a506944ba937aaabab9f669681090a5bd0a204e79244edd8d808cfe00166ada1a1c109ab89a8371e356a94ebd5ab97cf19aa77dc8e1d3b92ddbb77c79a1ca7e77d1ee0a596e46ca62df9d1360f18d3d13e77eedc013d3b4c8f36961a50ad2c7b50055aa55ced716cac4392c203284bd6c5008e923cfb4ac978f0e0c16ee6cc998926c1c700490d0302bf27c78e1d8b57ae5ce96a6b6b7d1ff380656666fa760618d51af55ebc7871b2c6fd03de8d0af07946e5c2cb280476f1004c8231b451bee8010c50d91ccb68a0924c9f3e3d1e3162847f5663e4946ad469d91785376edc98cc9b372f9611b901055acd03df82d83c63b1a192fcd7d2f7fb38d00ca890b2ab55124f4761281298a284b52d0f1003529ef88844b31ec7b367cf8e54e479ea24138718f194ca2c85f22192e4d95646a48b172f769a344f97d06af0808f07cbdeb431ac101b9126ecef3a8ed7d8e7cd808fe9a55b049f4f1bfd81ef505d7af6403902967358c80a38253b3777ee5cdfc7669d6731a0c842468f96c8b8be74e952b769d3261f13ccb465ef2284782618905f178c9a34c667a5f70766c040cde83649a7a201a6306d33005c07657d4dbf6ad52aa7c0f4302b1a10fafb18289612a1b4f6caa8e2743366cc709a380fa1620c58fb760684497852636f8c02fe9f90f2ef32b3c0058a0cc7bc784379cee94f66e6d8b76fdf74c58a15deedd02ec60321ee5b26661ca344e01078dfb7316cfefcf96efffefd39d4ac5ff0464ea346a9c13310c077f5cc8b66c0d3c2f6da10c0ceb26cb16d1eb05a878425c68967cd9ae5bd62b02942ce582824223fcbd6b6805eb3660de261692bb7a2378acf587087f3e735f673280f1f7f4d03bc1e14f0ae47831088b901060b14bc70e142b260c1825835530eb3d2f8d9be7dbb678eb163c7de4289d6debc79b35bb66c592242c8a1568c9bdbb15330ee05e9bdd80c9825fcbe16669759ce61535c2e06233c2c5894cbfde9f8f1e3f3022ef4c9196ccf9e3d9e79860d1be659085c8419cc9966cb962d6ef9f2e59128d99f83088397157da5d00a156e0b03a6e9c56f8515959f756052f4802f534372e21e8128f8c4d3a64dcb03dbee5b7f029d590b156b0e07f3064aae5bb7cead5ebdfa1608957ac04aeb5057f1fbb9e4a766c02449ad318f61da8c292c563c5c30007c0e1d3a345eb264495ea86180b519873e8c4fdbe8b1c82874167cdcce9d3bbda1c57543693c58bb5039cc93fcca8298dae2cf52b2037031d81864689b078a2c847b5f7ae92568d05f0bb4eb19c59694694645ce96a04546a1e05bb87021a572a4222f5f03a459f4e609ced61385329ac159a5bd6779a03b9c2a19ecef0648143d5030c066d833c9942953dc9c3973fcec049acd3d606b0366ddf8dde0c06b366cd8e06380f504bb12d4fc96238a1ee099507d9a0758d45056ef3203da495e977c259c7b989462bad400fac0eb8b162d4a860f1fee5f6a10b35d095e6a0618bbd03e72e448bc7efd7abf5081d1584fa844f0eb09da56811ab44a0cf887e44bac0bcc8072c977242b43c7dc5d96c84a2114653f7f9d3a5d46a432c2bbdd206489cc18c5578f32ecd0a143d1d6ad5bf38d2d5597918e7e3d21f1cb53d60d6c78a561fa0b3a61c4ab121259a319c0c54f4afe466157626d0b0f587960f9c08f1c6a9e499326b9a953a726aa505bcc1a3ad047988fb76ddbc636a2af64ad2c00429425c100ef816080cf23c446894ed35db605d95c5c0fb035fea66472a90185760e11330cdc03096bb37e183264483c60c0005f23f12c350f4a031b16462c863092cc6fc51d8a52eb03218ca16d25b8b5030bd5491e979c30b7d88f089c2a7923b44b5de78ae7b013bb1321e87d2263a648822c41b90e6c8c852c4129e33a95edbe766263d89694b6e905db90fc505a5ec8db2c29c38ec5731a6bb9e44aa901fc1e93fc360488fd5a78c0ceaddc40394b582c7ac8e64516097d9d2d5381218b22516f1cd617f9be9225af62c98107c29623b47b44d7a668cc0f6c524b0d00ff4fb86cafbe2a746ae181b0f19fef0ba18405369060062de8ad6fd84af1018dc2b6838d373008af31d3619722af3a198276d8f48db5a0ffb1aef12da1b10887d25f27c922c9b3a51e306a0c3922e778e282853f2fb5ef03b61cb502cc32314a2a807d1f8c51bb453fdb3fb2672c0f287efea87bcfe8fdc7dc5df6858c917a05288d2b1a607b9f96074a575e61f3ab45220b65877fceca02da6c0860001ee419c6b23d2202dad6c13c2312a8d73af8293db74b72bda8ec9df64681d2f060443feb672bb4b0f396177c308fed6258d96b7d8bc9cbfa408f280ce46025db240b019d6fb593c784fb2b0d0d0ddf76196d36952a7ab7dde9d692b1925724bdc1afd546b850b3e6716f25b46daf8367d8c9709f9191cfc439cee9837218c0f36c1458096e2c04e3a07c7d7dfd0f5d46ef176ea7e4bdbe0ff09914ce7d595263892ce0dd6f9fa084c583b5b3cf03710ea11c3f21668c696c990a43012997599b883e6365e746cd3cbb70eb5cf659f681bf0fd80f361a29f985e47361e1124185b81d8600022860416c8a6224a1633594edb201398a372e02a1e2571dc6387bf62c988744d68799bfe367a6fbfd46c667d51a976d26cd01cae173531a32abdf1247512060fb4846b5b6e769d78113c98e428e9201488179f4116cfe24237fe2b2efc797efa5d8837ca5243bf3159e3cc157c4e132a00c1a6446f146d8002eee23ddb250094ae75b2cac09e07af5add3f137eafa96cbca84abf7a3d487f94edc46f2090919f19b2e632b5fe320047008e45b76256c0b9d9d6cd53cf6ee7f4b7ee7b2e4794072d1859de7476180fd98d5aae091412e5b929233fa4a3abbec2bcfed7e69509082ecaf2e5b44fd45d2e0b2ec7af3411579d8ff4af07c45f00ad5ec63c13bfd43bb22f4a32e38e3b23f7b9049f988cddf0ae0f56beebff05f893b8d85675a15c4c64f839237c2b1d9dde303f6fdfefe031a604bf3c647e3300000000049454e44ae426082') +DISCONNECT +/*C206*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C207*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(43,'Cool','2016-12-18 21:12:00.049000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000012b44944415478dac55a099056d5953ef7bef7efbdd1dd34dd40b32b8bc40d95427182b8252a033a4e2a71526a3406117163ccc49aaa2426957152e35a71328e33656966d4c2198d898e8aa80c2e045c70410464eb6ea0179adeffe5adf7ce77ee7b7fd3824ed0e8cc2b6fbdc7edf7df7bbe73beb3dcf314f4155cedef2f4f5bb6959052521868157ae48d9b739fff55ec25fed4055adebc36e3bb6241322316d8b69e6327e5b4444ad42753222708004219ba0531147aa23370c547beab3784a17865da5977bef3ff0a60fbba6bcf4866f475358dd6a2aad1ba520a419aa4262d496821b4168a1496e74965611e9b290bf300e549eaedd0adc5c1f051ade89fa69efdcb7dff6700b6be74ed826cb5fee5d859e234dbc6cf85c42c0f9b8cc0fc6f2d0e0d855ba8cdddfc9ddf5516315052928a4322ecdc53fa8d56ce4f8ef9c6bd7bbf32003b5e5b3a5a0a79fff8afe96f25d2027a95d0b325155910cd8258fc6c2b164c6a2995c63f21b70cd92ca4548007a5f09f3696918adf9798c042b8f25dddc5bddb3a6ecf66dc3ba72c79467fa900b6bf7ced59b5e3e5e37513d5181216648306854d522422001a00ca601880110e148205203dc04064a5188654418079881e68f3be54422ab75389d25e419e275a3eb6d705befed6f4effcd7812f05c096d5cb964e3e51fe3a53097b4bd04424a170db0020c13f673056440b9e03183317c654e2774021368701014b8053b8fbec1f44a53622af97c80f30e7e0eed28176d9dedb93fce6ac2b9effe04f02b075cd753f9a7292bc2399860096ada448496543cb2261b82e35342d129105644c1b155bc35088ad010d33fbd90f882914e21dd029f4a572f628e9f5484c29165cfa98735d250247f4778ba103dde973667eefa5b7be10800f9f5bbef49853ad07126905aedb42d949b0150024041691d68da08a7d407e12806400988715109d220a851401088d19487aed00d0a664c073a0955b04ad3c03802d213d4ff61cb07aba7b3367ccba66edf6cf0560ebeaeb174c986dbf9ca950bc3f024c1aac48e12fd0bcc5c227e268832179093b5a4a979f9942d6a17730af388c6a766720090788dc5db8bb116d203f797922a788bb17cd79a098e75047676657c9b1e64cbb7afdc05101d8be6645dda831f6e6fa66dda48450c24e91b458f36c812418614716607a30434c14e294c541c68e9ea50dad969d9b2d83750c83f87d5f91b70bda2ee07d17142ae25dd0ca2b9074876095a262e1a5e7c2e11d65f99ed8de5affd48ca56f5c7a540076bc74e3a3534e4e7cc76422c801e1216f2602400060d9463023bdd026329a6cc5b4e167c1606c233429db5048834e8a4327474fbf13f3bdf001d0257400a064eec3004a0560740c00727d4327e506f2a3b6a64b8fbfe18d27ff5700db5eb8e9cc49b393af26d31cda651455ec0c008042321951872962c2681c61cca5e3a5ac61ca709232bfc79c8ab233e6418bb0358e44a04ac8f461da1440a92144203c3bb897222a69f605d73794eaeaa9d85b7052c74ebdee5de73301ecf9ef95af4d9895384373c2b7e3080300d24a2337c1021cf70d852221230ae9c8893109f734f4e2e414051fe31391a1f87dd50d5a0c28c3258e426c81001472fb150331167041a1621ecfb00028a4115ea55b923af068ebfee695c7ddf4f6dd9f0a60fde337cc3dedcf2a36c80456b704e4b021340040fbb000244c72f8648f8e00f04f05ab5b28f64dfc429afa87a1b03f700035e50527321bee843c10b472d63561542857ea103e1016a4f67a0d858457006df28a4ab048a924115a95b1965be467ddd557b36fcf40fde4793fdc101e01e0b97f5dfe889f919777f610c15450701a1a4e939d48512291c0b04cfeb2501b98a2c1d69400a65c565065a54d7575696a1c5349951529137db48e2310038255c260900a8307a87f4050b1c8836868c8a7818112f5f7e7a9a7b7403d3d79eaeb1ba2defe41fc6d909c7c3f2d59743ed566434a3a7b69acdd4a7b0e8eb9f8bb7ff7dcd39f00b0e27b97e45ababd8e74265b99cd66542693a5743a2d53a9944a269310163410ac5d581e11c3f73d725d97872c164baa542a41a092741041725949175c3057fec5c527a8ca8a04bdff41bb7cf5f5bdaab7cf0390b44ca7332a954ae259c8006505af512814543e9f270c393838a830006048f6f7f7a9458bfe9c52e994ecefeb57c59223845f78e6a17f7b7cf12700dcfb37df3de785f7bad6b0b6b3d92c4170335878d6be85d82f62874538216c0c1ff3cc701cc78c1804150a795ab2e462aaa8c862ad34ad5ebd865821bc6e2e971b5e93d78332cc1afc5b1e310833008018c8e2c58bcd3bfc5c2a39d4902ce647a74b55b73ff48a1e06f0f6132b7ef1abdf6ebfadadd317d0bc8a8597d84841fb0c60d80200000bf8e5cd91303dd6228380358aaaaeae8e162e5c6834697c6bfd7a595151a1b0aeb16a79cd116b99356210c61a18c602acaf73cf3d17b4ea93f89b2a392e9dddb45d36d7369c72d9dd1bdf1906d0f6f2cdab5f7e7fdfb9f73fd622d2a9a4d90c1b496c6436e3328101e0328bb2f06c85f2e6b1250cbdce3bef3c430f086014f1eaabaf4a68fe134a618b9601e037472801c3d069d2a4496ac28409e6d9715ce52253ff74fe2659533965d9693fdef6c03080ee376ed92d336af2a2ebd652bea887cd1c6b9f01c029b5313bdf194019046fcc166110f3e6cda39a9a1a636efe77737333ad5ab5cad0e7f0354df6c05a23ac394c4706c0ff9e3f7fbed983e70aa0e7ecda0ebae3fcfde48829f74e5db9fb660360ef8b37a67295e2e0a87a3bf7e8b32de26fef7d5b2512b6d11636522cf4480ab196cb20d802ec88fc7ceaa9a74ad0c7382086b1545353137c603542baab58f8916bb255e3b58c056225987759e0193366c8fafa7a15f99783e85e523f396b0f5d305bcbf6e2c4ff9c70e3aebf34003a5ebea9a2b24a0f66100a4b08143fbc73837ae2b98fa12ddb50682480911462676600d0ae3ae59453d8e90d6d98bfcce53e448daaaa2a3a78b05bb6b6b61a2a723463006c515606e7045e9395c09ac630b46a6c6ca4a953a71ade7360f0516e2c9d5f54579c34480dd55a76398d2f375ed77a8e01d0f9ca4d9595956a3093c3a25682daba4ab4e2e76b69cd6bbb19c4b0b9cb342a6b9f059a3e7d3a81a7918923c10da5dadb3ba8a652d3d8b175f4e6a6361ae8efa7a3bd1a1a1a88791f6b9e1cb744979ddc47579e9ea159633c7346ed761ad6352c6d596000b4bf784305000c64b9af2012489e96dad69aa7957fbf563effca566301610a32cd9a93b5b5b50ada319bb005b091713ad63a9bbf5828d2f72f3f5edebafc74541301b5b674ca4b2e7f4c6ddadc65f440d1f17ee4b3b9b382e03372d4a851c3eb85c8c4979d3644979de8c813a73620a7fb9025905d8586358d4b779e6700b43dbb3c89f07c6054ada882ba051f585046d09696bcbcef91b7d4ebeff45175f528083e8a43a4a1006f10c77e133558eb51082caa1367d7d23d3f5b20273567c16f9f2cedcafdfbfbd49c6ffe077575973e1500fb0efb0b4724681d09ab481509575e79baab2e9ae9d1098da114d5139456a8585168b50d8c5b3571d987df3e1485d65cbfa3ae5e4d338715191f56103576b79768dda63edab287a8072540a9543483056610b1e01469cca15155927e71db6974e1d963c9669fe7ea53b938027bf4e8d32d74e55f6f20158bcf61154e4ab0a8a16539fab8ae43274df4e99293023a73924fb346a398e31aa6662aaa559c9d2d4dad7d63ef9c74ed07b70e03d8f7ecb2df8f6dd2176961812c09b895c53f923a69a9be035b6903ca817777a5d4472d29d9de8da4c3e12e4e3c5c4a384e898e9d9c934bffea1875e1c206aaabb6a263a2c6e63a903851aa52d1a37f7962bf7c7cb5070cd5d095942507c90925083b6b8092795a4320cf3e4ea993c60634779c2f1b731e8a585401c9ac54d59371ecec40852ee58eaee6aba72f7ffba161002d4f2dfff184f1feed4c9da812b6cdc14a0dbd87e712ce2549d9d2a5d5872dbedcb14fa93dfb033a80daa654f491a4484d9f5c4127ccac9267cea952a36b6d549aa1347d14cd6db9d080113807f7f77bf2d57786d43b1f85d4d21ec8c1bcaf6ce1c9860a5f1ddba8a8b9ca9733eb7c754c8d47490aa2d68c9d2099ab972a53ab84db45014e873b3bc6cd9e75fd862dc300763c71fd19939bddd72d0e6f519a27eadd48cc39949cb0376885381e005837024a3baadf8328eb8b604865d6a2b10d499a3c3e45e9141c9e0f375c5f43fbd13d8ca90471428ef53eb5ed77696f874bfd83a832f15e7ddaa771391f758e4f098558ce2d16960cb5992981ab9aa158ac1df65357bebea7e9f20fea3f51ccb53c799d95cbc9f6fa517e83410de1a5d7cbe7499c5f2cd248402281332e720334a23417773c103ab8db63da3fe60c40d1f192eb68ad0c8574a8b1750007f4390b8251a05680688208863b68e149ede24cec60cef1a2f33127ba447c7c4de040553d456abf07fb7862cf81a687a75db3f1aa23ce032d4fddf0ab8913eceb55ef6645835ba243bae47309fc814f67f00769274cd34d24f860005de31c0c7f37071cee22625f0380b36b1900e26fd40b0a83a8efa340271c52b4e3cb62b7afb21944181f5c770303d0ec69250180f78202738d44e91aa99d0e10332177ee6f5c386bd9eb6b8f00f0f1a33f9839b1c9f928d9bb3e329b39e77a110528348778e40898d58acecbc3236ee88af26a650aa968a8206ea5f05051470e005eb86790766e0c28574d74fe1582c64ed251878f29cb3e68f64a93ae9a8c754af8ed20b5f7d56df37c396bca551bf511000c88fbe63e33adb1f3422d12ac5c43a1a8fb20cdd997a9012ec2acd2f487cc3b219f71c3e87c6cea2515594f7307ce9c278dd6b9bd28b9540810e4608d475616240e5c260f9cb158aa13163225a175c9b4b14d9743578c532a5545d2e9e07e316d691d7bf5f1cbd63ef49987fa0fef9afbb549a33a3765b3924fc5dcce8f0eec08a97c4847516deedc20d17c6466004c1bc467a97138973aea0b316d1880a6a823cddd38a6103774bd10133ead7d2c945b9116b8cfbdf8d67ad534a9140148c45130552d1500503084dd3cb9afa7618be706274cbb725df89900f8fae8ce93ef9939a6f326ee46280d27e32eb41575198c6605f746c9b4544cdb90b56eb1fa1d0887f0848863da10dccf55514b5d338080a3103f878a19f787074976bd4f2a5569cb6f3c38154edc85ad2c630101c7a58a89d1338a675f568b9d3bf582d9df7f7edde1f21e0160dbdd73d2b9a4fbdef8dac1e92410c68252dc038a396f9eada8f7c36d45e6bb214dbc00f7787cc4dac0359502fbf260b7a67c9f366d20af5350f79b9abc56d345a28957cda4e6451e296fd0f89eb0e10355c8ba19444aed320f68dd06fffe0537bfb0e2d38abf4fed8d6ebe6bde71cd75bd1babb261568b140af621a351391c2aa3a696e905093ad45a8cffc61d3848a476bd7980d6ffce9503dd649a8ea33d92a3508943bfa63d56317bb43af69e05520ebca14cff956953354d51aa061169004b3a7addc6fca6e5776d3aa7e0f8f9d6ae42705400f87af7ae33171dd3d4f3542ecd1cc296ee401c5928d6faa72c25a284c0a177c75b43f4e2afdb29579fa563cf3d9e464f1c475999a6144e6748a6941e9fa5f4841c51b185a8b017b517f6c82064b205c07b545eb46da7b3f7ebcb5e5b7460a0c0dfd0f82ba71bdfd51f05c0d77bf77cfdb26963fb1fce65044ee2954aba837048f68ba89568ba57f1624869c61f8c2de01bffbe72abaa6eaea78b7eb144ca6cb5d27616cc4b49cd3ec43f095d49615e51ff8752d9294599baa829ec0f20d039e2e39d4ec7392bdef8f6be8383bba3384e412cbc1703517f14800171df59174c1c33b4aaba52e744a246705212e02b37d88cb31a0c64b22f474c21a32f93bfbf63a75a78f33caaac4f9816a2e0ac0c602622cb082497ee325d87c893893278d88f5ffbfa8db706b75f7adb1f7ed0d96f345f163e380c040f7d54dfc8b6fce3c299b96cf02412dd4c6dc1ec7685e9ed0b1f0eabfc983e11bba2ef05dc68b4f8a352d4f615f25020e0c670220bca544777d36745a00806cd020f3cbeffb95bee7ffba78ecf13c3c27bf1bdfc6f371e470780af6d0f2e4c20fbff6c6ab3730beaa684b62a103172dc18555cf39b7639272c646ed346e79a8a3f4371db9d7bac09fece90015db28a33adc929fc7d20cc231a077ac72ee7e08dffb0f9dee7df6a7b6184a6475267a4f64bf1f3e7ff4efcf88f4e9f2184fff38be6572cc955f087b3b4262ba399df51e79ae288140360ce88f233cf8382ca85f425c175e0befdded09dbfd9fddb7ffeddc7ab1cdf1f1821a87fd87399fb4e3cf41702c0d78ac5d3e4dbdb87662d38b1f69acbce6bba64e6547bbc95287fb94cc01becb83e92f13edac47353572100940a4aaf7bab6fdbc3cfb4ad7dfaf5b6b56e60e872b896bdc3842ec523280bff850194afb9336a657b8f93cb2632279c36b3eaac39b36a4e3c7642c594894d9931d9b4ac801fc82054617f3eccefde5f38b865d750fbc6cdbd3bd67fd8bd79d0717b0fd3eee11a1e29b47bb8e05f0a8091d7b8baace57861c20d541a4927835481cc6406023b7f1d246bc4ebcc6d45871cd43d0c44d91ae5f73ef3fad2001c7ea1ac11017f18d314ff0f12870aeef8d223861af1fcb9aeff01398314d62473d0360000000049454e44ae426082') +DISCONNECT +/*C208*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C209*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(44,'Laugh','2016-12-18 21:12:00.051000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f9870000142b4944415478dac55909901ce5757eaf7ba6e79ed99dd9ddd95dedbdba5692252c043202210e1f382618ecc2a11c706c2058884bd83209452a101b579c14260ac40ee5f8b6e3dbc15ce646424644b72521690fed6aef7b676677a6e7eae9ee97f7ff3d2b090106639274ed5fddd3ddfbffef7bef7bd7df08eff131f2fb5b5055d1abba144d5114b04cb02d038cfad55b8beff55ae2c03f7582813d1b83a681176a3edce072c16a97a62c747b30e6d63080a0a065a169e4306319386916b1b35484dd7c6f9ba6e181c675ff6cfdbf01e8d9b171bde6838d91b8f2b17015841505914021200590f89af8a7cdd313ffb4c57d04b415beaf906528909aa0815cdafe29d9f0adb64bbe36f87f06a0eba58d97f823f0d5ba25b8d6e546964ae1bb62a8208497d784a786cd279be4d901c4cf6de5e43997c1d2e460e1c764e5bfbcf0235b07fed700f4beb2b196b5bc75c132b8daed63c199df882aab5925213c42f95a5ac0d1346b9fb52e2c0044365fd8365f93b4ccbc35e499efe953d3fa68cfc4fd5e4ff1c1b62b1f37df53003ddb6ebe34ba007f146da43a50584885b58d2e06e07a1b002c283900d80cac710660590496e5009300986ec50982fc0850d1c0a13e75bb69d0a7175ff3d4f87b02a0f3f94d1b9bdf870ffbc2e092822b6e1e2efe4f15cc820933c33acc4d1b4236084583106fab06b7d757a6093a4b3085b2893998e84f4051cf835b532156ed834855081493e5349200a5128fa21cd3e3ca4832e1bea2e3334ffffe4f02d0fde22d77b7acc4fbd95915525d848a261d75bc73068eecd66162b60edd95cd14aa8a83e6f5603eab53293d0ae75f60636d7b941c9e13bef6bb51ea1aac8440553dba5c6ecaa6d3a0cf8ca39a1da4a6d808be6f954ae1085bae64201945122066a7716e7ac6f3d1a59f7d61d7bb0270ec995b3fdfbe5af9a6dbc7214561aaa81e4af54de1be176729ed3d0f1a56ac83786d1dfa7c1e26870da65942a354a46c360b76e2309e758e4ea085a030328abf1f3997c2b16af0fb7ce8767bc8a5ba05a3309dced0c8401f4e75be4cadde0370d6fb113d1e9200d0303031ad4ecf24bd1775dcb8edd81f05a0ebf9db2e69ec509ff585c88522191936743fd705fd73aba1f6ecaba0a9b9057c3e1fd3c696c3343953f128f1c2c5620132990c7444b783bfa101460e2760463d1f02c10078340f3000d05c1e604b804874e248241270a2fb08143a7f052beb8f417db3c6d6604a19459898f41ecfe55d1f5878c3cee43b02d0f3c2ed359571f540ac0116085f34a61270f4f951cc345d4f0b57adc76834ca26410e2b240607169b4c4eb72c3c2bad48c55201d80ad8e0da4195ed71387140c742f85cf2fbfca0691ed4dc5e72bb3450395d3300e2216460dfb66078640487f6fe865a723f87f6c50a2a6412d30a7a8762bf5e7cd3ceabdf1180de9736ffb87595ebd322c2e7074e50e71ed6ec8a2db864d94a62adcb45c57b02000bcf99d62261054302284800f97c1ee3b083a2ed35d077208756e51af2b2636b9a173d0c40685f00e07112c0fc7cc964923af7bd080da35bb1bdb5c014b0c12a9ad03d5cfb172b6edbf9cb3f08a0fbd93b37342f73bfa4f948290d7441f74180c2ca7b60c9920e36b94b2c2a87b0c03c7d84e6c428b1a684f00c02f2853cd4c00e88b6d640ffa12c942ace01afc7c714f2025be07573cdcf2700cccfa5eb3a1cdcbd0d168d7c059a17e43835da30950c0cea79eff2f64d07b26f096060c7961d8d4b5d17d0f871e8df3b8d89e55fa5458b97316fdd525bbcb03ccf03e0c5a4051c00c289f31cca25005ca06ea760533d8c1e9dc37c702d791c00c856602776c1fc5cc2127cd099f365f40c1edcf53c9d33732f545599c80fa97bace14b1d77ecfbfa9b02e87e66cb79adcbb59d2ae421f7f2a3b0bbfaebd8b1722df9786136f949738bf399149200b8a293141200f2596c0bee202dde04333d5398d4d691f73400ee3285041dc5f9740a9d9aaf84737329eadff373b8b8f40087278da652e1a1bca12d6ebded98f10600832fffcd0f1a17bb3f434307e0d0400df8debf05c2a1089b9c2387e374326acc470e719ca490ed5048d047d0a8941e83c50d7d00c11ad0878661c4bc00bcecc41e118198466f379fcdf319e5f9864787a1e9c45d5007dd40251b7a671a3fb1e4cec38fbe0e40ef735b02d1b867a8a2468d52d773b4b3701dd42fbd942386872400ae8fd9ecd202c2dca72d588e4225018029242c5004776a2f36bfaf8275aa829d1cc3aea965e40bc704ffe59c6e19465dd20262426181d7cf578e6a9c5772f92ce43b1fc1b34aff4590d3612859fb8b96cdc7af791d80eea7bef8e1f615de6715970ad4ff22ec34ee809a860ef0781c6db9dd1a88e423b43632360edf78e22918cfe8f0d115cbe013975ecc16301d0b984528b00357955e85ea25cd202b53d668efa11458d15520fc4013f3f148f3ff7ff3b127e1447216d62f6c85cf5df1e7d21a622e4e8a829222b2f17c4cc9e1276075f17b808909984e87d3f99237d6fc857ef324808117b67cb5719176b7ccb8d3bb69b7fe39f055b4a3dfef670bb0f02e4d5a209bcde185f76da571b502d6d647e1a2558bd0353d4a375d79999389390f6439822c8fee4377dd62518bcade60b2f3384d28e7803fe0670b6824807deccb5bb1d3aea045210d6ff8c83a3a71f8207cf986bf440640a6c9202ca33c5f0e3cf9edb82cf30382b17e20c3c4e3730bcf5d7a57e7de930046b77ff199da66f787517523e95d74347d3e64683506827e8efd5e61010cf882f4d8cbbbf0f3bf9b21fac9fdb0baa90ad6df7c2f3eb6ff306dbbfb1a28140b98cfe5499b3b04cbcea9e78254730070902c4d76d1819145e00b45d1e7f7d2c123dd70cd0b93484f3c42ad4a06afbde7017ae8d5a370e8be6b65449516604ae6783e01a025f4242e187f8660b4079015d5975eb469e1977afe5d02187c7633fa836a6facd6d5061cdea83006737cde37f049d6980feaeaeaa1365e0722f4fdf49997e0d67d6ce6efdfc166ed86baebff0902e1106cdbf26790cbe56449b0c8bf1f624b569475830ebbcd69e8da3b04b98a0dd0c265c8a1633d70f9d329501ffb1ae8477742fc935f00bb7e29bcf67797334d15d0b31948a5529c0fb8ae3212b0aeeda7e0dabb0f707654744730946dd9da7ce7893b258091e737fb02219c0c475d415499425ca5732907c7d36b3010fb2b8a555573576e49e74aa767f1866ffc9036b4aa102d0cc088ab058318a12b2eba9001e4d193eba2652b2b003d41318b744cd90f5853544a0c835d7513cfef22e12f376f7d083fb8244575fa7e9cab5e4343a936b8eeb2abb80432a8583484427066669c56343d093513af200c4eb3132744038823b9a65f35dede274b0b9c786973381882a42fa42a1280eae6809c03f0f4a3153c9b8ab40e4a5618156b9cbc30846e5f84c01594fd806c620a194a4febec6c458cd57848e568c369ee1400f18e95243013dcb0b8d1b42a483507b8f539ceef1408b9d327334f1c3341f79e8f29d7d9942d70948251ac8deca6d0d461c0239d0cdccf556a9601104e15e32fc46f1efc909c7f72dbe6483048b3be00470ca6896c563874828ccf293e17f87e80473d83aa751a1aeec6e441791efc9c8c72243c2db18b9fa20b13cf6c7ecf62a508c5585c09983c2c71afe80cce1d622057b2c42194c314ffe6736216702ecdeff31c6a88e7e20a55b160a658bdbdfaa6818b2580f1e76f0f3380843fa4a84eddcf9996c31cba3c482e764495af556e64143737346eb1d5c07f3c29144ff5c4d21a8a481065da080b9448088f366bd82e900081669ead91e3a28785b5b979b18ad202dcda91289db150608bf2759e9fe7f97989e7608746cef2e4ade675f81a2d9cca553f17bfa9f72372ade1a76ef50602305e518911f62016d445c212e83e0540f48bc327e6c82c66b0b583277571cb880c4c00624e3b3d3196018866d76200260bcd00c8115402b05840cb70805986bc96003861a5673418ceb4e3426d2f794aacf982a0561980cdf3851af9ff72bc0acb92aeff79d3c623d79c0ca3332fdcda138dd12206e05048f4be6c058e9f7cf6c2914369e8ccae14b9123ac2876149d310b8236c5264aac96d159e663ea18a18405679b0c919047744ce59fee66195ef73e2034e7ce3a956d897f918e8253f84d40c5c6a3f087e63cca18ea094a076a48d7f0b4a130ccdd63dd0fcf9c35f3a95079edaf4785d2d5dce8233135c440c403ab48bdf3647e1a583cb301b58227282644d85d7827a650f5445526ca819b688fb94051800978e6c018bb56eb205cc53d7365fdb2562edb32b18386b2ca6117b034e9a0bc8b64826bd5cae40abf3df8696d20e365e4eee80a0e6470a3733cd26198c82bd530d372edeb4ef3b27010c3e7acbdf372e30ef4349a1f96d130ea8fa6b2c9c0d0747cec631ed228a448232b98543614ef924b4836aa69382380041f738936a8a54852305161c97105610425becce96070caa425369a2bcb21872be95085a98b2b98cf4ab02f33e93ce6236a3d3faf43f40a5d1c5604d4739fe18922fca00a6c0543cd83751bfb2e3965daf9d2ae67e79ebfa9606638748229246820aa97dbcaace91c70f19a31af61a9f014fa40eaaaaab2016ade2aa520391f2b9fbe2ac69422818962cb24b82eb1c616c2eeab8b6326d6e47986a16c3cb170c0806832c13f703bc8e28025373098ea00664396965d23a54ce3c032b733fe2889470a8c30020d400241a376b0ea6b2b1e942d15ddb72e37efb2480fe5f6dd2422165305661d64a0eb0f068241c6b8849fc95685005f5e0d5e88a9f4bd1680cbc5c16dbdc1373da97cd48b4b2ea64bb29e6e5e69e4431585e43bea36775f47abd62bb4b146d1c2167a950ccc99aa7a0a761c1e056accaed2128cc48672517e724b70f30dcc24c4cb160060c4cd77ebffdc6ddd7bfb11f78f4f6879b1ad45b69f62841fa183f600a098104075d8a346149adc7e1f83da4faa30c802716fd6c3961452b635cc7c8f2585495a867d3140c845810b14bc741b554826c4e9745a1a86ab9dec78c3e27ea1ee416926ac7be07d5c9e798b6fd24b72db989e21690c01f07f056c8dd3b0bddd03716ff50c7c6575e7c0380e33fb96979533c7f589bddad38494cc8c5d1022c67887b915698f45d0ef9da2b65d4919d15472d8b23452c5a0365e165cf9b4c4d43654595fc2db42f00e4725910b5be8f1b7c51e78bee4d146efaf851583efe8fa0a4bb9dc427a92312aa1728d4e2244c2b03e3b3d16345435dd576fd2ef30d002488873ff0787bcdc4e522940aed3a0ead385a646aa1cb8b867f090d37dcc5af38ad26f70924f682aaabe2b27c10c28b66657c7294ea6b17f0bfab4c33a74416bb1519b64c241c110024fdd80f30d0f75daa997d1a30d38b620750082fa360a09ec8c3be559c604229d43554f7d72b366efbce5b36f5471f5cbbaab962728fdf8f6e29b4905b544f2c04097a886f00e1a534c05630a26bc4e616072e37898dac7875ada4d03c8081a13e6a6e6c93bdafe873050076569c9e99a058ac4a6c80612e9fe35c65607bff3da4650e71c6d5993665bff3442400b07416d2c0d164f56bc582b566e167b71b6f09401c5d5f5ffd2f8b6b26ef10dae624e09409c21a0ebfe5a4b3e10b6126fe29ae52410a2db613eb6aebd0ad7131a7c8ad12ec3ede496dad0bb98dd464252b7a5da1f5c98909aaa8ac107dafd48b3b7d141bc61f2148eee7a5d0b1003b2e049a9c6b2e590c08535f1f7d70c58d4f6f3b53de370278704d20e829ec5d5099e910e582a85b647c141957f881cb0fb9caf360a4f90eb93d287c40cf6421140ac9242c1b757e776a6a8a436eb5fc2d3e701017762eb70ab3b3b3100a07a5df087f084d3d0d35c95f03657acadce7ec1e6a05f05531f78bec8936ecd86dfcdbc5773e7b1bbcc9f1a67ba3471e3c6f654334f54ad86f0565cd53d225bf71bebcaf5c053dcdf780e6e3168233b7ce5d53b4b2920d25b75e04004ca65214e3702bfe8de4618bdd0b4c2593140c056518b5d83762633fc44afd452e95530e6d42edc467ce2569596e6fdf95d97fe743872ecbe48cf4c874ce2cc90cfa3600c471e8c1f51f6faf4dfe22e065040ac773235d2e8ff9614507f4853e0e46d5b962d30b720c40d04271e8262d20345d595929a3acb38feaece489fb9ccd9dddbc4206da53df05cd1a136d1b6b3deed460cc7b517a1fedc90f5db6f9d5ab461399217ec1288ff9d0f8870188e3f0d60dd7b6d5cd7d3be0430fb9828406a77d8b2bc46023e4b83fe88d7e16b540848a79666905373d28376b65d49a9b4b534524222d2010d80e0879df1ff072f56c6065e269aa0ba59072038ed645396fa64984cdce9efce8155b765d776262b6d7412747e93420d6db0290201ebaf8f2c61afd3f23210aa19b4d6c3b8519542c876c1171cc7b01a5dd6d0e00412111b5f8c8704d13e67e5976f61280fc5086e9b90cf9310d51fdbfb12a9427e9b8a5a4ac03d19ae3f90d7a65ef5cd7b5f7eed9343c23356f9e31e64188b3fd8ebe911dfbe6252b027ef3678db5c5e5a0fa41b6945a14d05bc5f55a094a860945350ab6e8dc440e6110a665cb84e61c0e8d14764ac59ce344e612051ac84f977996d1ceb068194e6a36fcc72fc67efbb78f1cf84a266fcc9e21f4e9208a6510ef0c808c4edfbad46b98786fcb82e2e64040e1a63500e8abe71223ce11d6eb94d3a2b08072e2633a89e8e5dc57e8e4574d147bab2c4389b55d18e6622a2dbbb7eebefcf45d5b8f3ef4e4aec167cb0297de04c0bcf60be56bfaa3bf13ffecee75cb55d5bcefc36b03578442aa46aa97e336d73cee30d7115e99f8644d21db83d3afc55216f7fb796e0f32a262957dc2d04831fdaf3fe9ffcd779eecfd65265f9c3d4df8d3859e17bc5816bee898ef5d7ea9bffdca85ae83bdd965eb5756def0a94be2572d6d7337bab5f286c0c9af984ab95ba3f2b09d2e8daf75ddb27fb77fb6fbc7bf1ddefec4abc3dbf582317786e0c669635ee87cf96cce0bffae01cc1f6b97c65c53b3c5805ff3ae5ab324bce1fd4b23672d6a0cb636d6fae27eaf1214f5b5699195d62dfdc45836d1792233b6e768aa77d7b19923493d9ff803c2ce8f79a18b670afe9e00983fdaea4268946cb558b234c3b4bdb9a2e92bf1991f89c1811dd82ca09cf62fe512570a65c01b41ccd3c72a0b4d6fb5f67b02e0cd0e97aa28962d37b8b02c3c9eb11ec1ebf8f5badfeff8f81f63d573d60311ef580000000049454e44ae426082') +DISCONNECT +/*C210*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C211*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO SYSTEM_AVATAR VALUES(45,'Study','2016-12-18 21:12:00.054000000','image/png',48,48,'89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000014c24944415478dac55a09781cc5957e55dd3db7a4912c5bf72d645bf17d70d806fb03b2c072189c4d42d884254038cd6127f1f76d12484836011387d8c9e204d805c2e630011258033157bc38c6c607be6559f26d49d6655d236966faaadebfaa474698f0855cbbedafd4353d3dd5eff8dfffdeab36a3bfc3d1d1b024a86914608c917098706d66154d5b61ff3d9ec5feda05f66fba2d46aeb6201ce60b8c00cd0804b49a40d0cbc33c464a014d58499e702cafd3b1f87e3bed6d112e7b3310e23b4acf79c8fb7f5360e3da9b2f8ce76ab71595ea97c70b4484334e1e718f3c46cc63ccf3982081e53dc63dc1705d235cc1758d5c8b536f07b52413eecf3d41ab6b2e7ca8f5ff4c81379ebbe1d2e2e2e0f7c64fe5d33543aec0f147c3c059e8fe8a1ece1e8cebc96b823c17d7043e4b85d47d5ae63b4ea94126da8fa69ef1dcd4fd675db6aae5efa6c0fadfde501c0aea3f9d39d7b8520f49636bb0b3c60569422ac049f7e7108c7b9c0be9017883bbca2d424001ee381c67e5192eb8ba5fde8b2bde50476baaa5e9d4b7a361ebe1aaabd77e6c687d2c059e7be2f397cf9d97f54c510dcb230621392c2c076930a32e7c0fc839f7e7100e8a4050f25de4491121930b93bbb6905e2128463ecc38a58f0b4a7531cfb2d8d1666d43778ff3d9736f79ade36fa2c0435fbbe6cbfff4e9dc15078ef652c381413a7474884eb424a9afcfa5a16129975464c4602e6567e9545818a619d34ba8b4244eafbf7190dada06296d6a14896453341aa34028401257cc33110fbd94134e524d699026561834ad46a788176c5ff3ba73d9b2d51b76ff450a4c9d36251f0ebec44adb8b02015a14cfcba12993cbc5c4fa7a5e5d53278a4b0b282747a370d8e39e670b0fc27802267748241226b59fece64bbffc63515f3f96e69f3f9fcf9d3755e4e64425297150abd03883bf0ceeb969e1ba617efc7897686c6ca0c686bd7c7743ab686f3fc50ab28cc1415bbb0fee7e79d3d6bd473eb60293a64cbd34954a3ff3c90533c3d72cac8bce9c51e1c572f201e512c037c05daf4fb8de000ce892701dee24d3c23121b9e97019a6c40db220e2176f7d58cc9e554ee7cf9dc7674fa916c236f1adcb71086e68a41b69aee9b89371ae07c68860b048060b17c923c21a68a586e64ebe7ed311faf5eb474d249207f6ec6b7cf04f2a3063d6d97392c9e1dfac7c78f93bf3ce4e5e13084be68b03d225806f8a52bd8768b0bb97ac1427db0d93eb45403c317258801cc0db713c32534374aab39d9e5af304cd9b5b4bce70319d77de1c0a4622804e18a1ee9181f0e04e0a213c44ba97209d0d52384a142fa8a5605601510af01f6c26e6dad4de6d0c5cffcdd7923d3d9dcbf7ed6b58f5910acc9c7dceb8eeaeae1dab56ae5e7beea4a12fc4f345941b792093621a1ee8e68777348af0b8093c925f218c5016493cc80085270003976cdbe696650a336d51535333ffcd0b3f1473e7d452577739bff2aaab442416a66020c80d232074c3204de380930c7ac05038223dd84d439d47784c1b1455132ac84b7773d1b71fc637d991eee2e62f7ceda92c80ee0bdbb66dfbfd1f55a0b2baf6855b6e5e6c2dba64627d6959df64cd88321eac12767290f66edcc90ba65c22c2b1b8ff50082f4905e0e7c21540d2fb0a60d0ae9d3bf93b7f7846cc39b796f634c6f8759fbb4e84c2210a40010ca1e91a6170e820545c48e88108600ade73a25144ec562aaf2de222714838fdc7c9493b6cfdd1bad7167ffd81b34a0a8b266dd9b239fd01053e3179eaf44834f6d263ab56af2d2fdc7f47280c560f5511d383b47fc3668a56cea358ee381978bee53303814b368417188eed90059c5ba6499b366da4a7fe73059594e4d2d8825974cbadb7503018c208123c40ba5240c7e0190b7a2af17902eb383675346da1aa22a2acac10599d5bc94d0d522299d377df2f5b9ab66d7b67cdbebd7b577d40819adaba1fdf74f35db9575f547a4171b159aa1b599e1e2ee6c9de0e71b079988aebcf43c01942d3e04494379c69eaa71e3ce0582ee477f060071eb0840d0fac5bf72a7ff5e5a74561610ee9816a7eef92af08293c9400840c01e3e3bac1354d531e8027516c0899eeb88b3c91461c259adfe69f985c209cc449b27a0e72615ade1f5a6a37dd71dff7a3ad278e4fff8002a5e515bb1ffde14f77cd99d67fbd11e2420f16e20159bcad6197484626534e7e111ee62bc0258490a784b298870782601cb090edf03420e4d8163dfbecaf7849411762603c7dfd9bffc3bff5c0b745282421140284020a421c5ae8929170285f22b909cf550ac835daf7bfcba7d4a89448e6c9ed5c58a637908ef7ffe3b21729c09d8a5d7b1a069502959555ccf5bca3cf3ffdc3446d9539190b93112e859b191ddbb59bdcb173299a958dcf083c64df75ef6ea183ed1d74417d3d4d1a3f01cc2828130324ad6fe1e18f3ff6182d9817a2f3ce9d40d7fdcb33f483475652281494318011f0d7027c80797af2e55728271aa6f953a650d1b87c72a537b146ef8946aa8d9fa450248bccaebde40e0f20893b74fdc33b44575f62d2f65dfb1b477be0d89bcffd5bc9d882a00e530b23524cbae6f08e834d62203083a2d9719f3de081fb7ef18a08b53450f6b4f974e76573b9eb3802f0f183d83455cdf3f0f207f92d377e02413c9ea69f733f7ffcf1a744240ae101213090084816d2757ea2b54d3cfaea065e1e10a266d264ba7c563d77850522c07a3d6dbc2abc5db0403e59fd2ddc4d74c0d5367dfec17778ffa05dbd79e781a3a715a8a8acfcdd933fbafdd26993abe15a1d1e28c0031c044f2f3535eb1492fc0c0bea9a4e1b1b8ed1c914c13a019a565b4e0e28d4c5c25209198b361ebe74e93df4c4ea6ba9b6ae94a6cd584acb97afa69cdc6c94122132a407b08e66e828895c5abbfd208a5783e656c6a9303f2ee3001e70c9e8f83d15679f429e194356a283dc4417259369baf8ab6f79e75607834fad6bb44f2b70edc20b561991d85d3f7ee826e6a1c03482f950006522b7c440578a4e39b5085e9400b01a066a49a6aa1f57480ef754c9e62293a5909553a914dd71db17f9d64d0f8a30707fc5d50ff01b6fb8571496d78081341e08ea2a0fe83211602d0341056e165212c0919ba625787f0395eaef010c013c214e767f1b8238257ef6ea7e3a76602b9f525136eb86d57bde3badc0e6e717bffdddc7ff70fe95975fccaefbf40582e9d9b0101e80a24000f7ae97c32d3b5ba42c83db4293b5a40a6257b286e508014f79563fd7585af4f776d237963fc1df5af75d21b5fcc6b77ececb8b4bc5e5975e846c1d060344858bec4d5a80cb86cd4f6458c94a926eb6f3987b506469eda421a0c903b63c64fc8136befbf08058bce2357aede693bc2d79d6edd3bfd1f453a5c0d65fdfcdc68cd15a72f344c9d58bdfa4f3e7cca2afdc732d4562c8b664ab8a1875bb3f64356cbad2da10c655ee66b22e3642e851c274e0c011fac9636be8bcd9e574efe2852ad96dd9d64c4bbefa042dfbf2e768f6cc3a3264fbe024e1325755d90c15a0ee417886d242121c3e838a64ef800c17448e11b4e6951db4e2973be9679feda4e925261d1bae5a59b5e4c812a540c3da7bc263e25acfd8022d648395bff7f82ef1d25badb4f08af3f9272f9c2126d4958385a2c838068a380d950c936b5262288592e138dfbdab49ecd8d9480d0d4dbcaa62ac5878e5b974fd3f5fa4e856c24c166b6fbcf1a6f8c59a7768fb6e046645b19831bd92a64f2ae2f575f9624cb681ba54200f385278ae39b63087d374ec443f7ffbbd0ef1eceb07a83ad6c5bfff998028846740e1bc65b8e2f9f27b0e7f5a2970f8b5255979395e024423185886816d7a8604bdf8c631be616bab683adc030871603f2822e1204fa54cc5fb5295bada623e737ab59835a396a64f2de3d188016439b28d94458e6a6824c449f4082606c84e27786353abd8babd9576ecede67b9b06014b4d613d1cd2c1647e3224374d6539169f57eb8a85932daac94d734f8b0b2fd543327974a60bdf2abce3f8c54a8163af2fc9ca8e89443c8e70904daeccb281100c1e24023480554a5b8c2c401224409168144c12a2704866630905509267fb2d8dc7de4f8f127baa19b630c73d8ebc0ff73bc3f0e130ae6131d724339942759ba6f4608a82c22403d7c25080d218168806dc4fb2140fe4e19c4003c8a83b3deeed71b71e5be07be0d57be10191c8ce4173c7e04cd9daea01682a53b201e887d0fea284e0069a3f9c3d13c189856069c6d5cd422a0d8cc92a4f31124a54e00740f32cc0c2044092422aca9d34e668e31c13f7d828044dc11d13b5795a90952666c2d2f03081c958cae270357e6713b7b146b408bf1b845c8c770e8f7ba3f0d643ffa014d8ffe23dc1bc2cea1e97efc6e00126a41cf004f80e0a0484f48054004fc0c34ee26caa6b44be62c2d35569817f3e6c644fa314905000ae0942bb98c303dcc3dcc11ce4c05d0805bc4b053c3b8565a1ac99e2422a90c4f7a6af2070052360bd7835e6bd7826e327064a9eadb87ddfb5a769f4f8efee3e5c56e8542bf8e81918c10b14301484c86e835c5d24bb2d755d6e8d68b88765eef5347549c18665a0a36201f0712dff2c6cc56aa015051da99cf404732454f0bd296183eb105e9d2138329a7f9f9421b716f7a0d1410972bcaf7845e56d7bbe7a5a81e697ee7aa5b6d4becc837a80919015146a07545a10297d008108cba004e0e06efc516da3fca9ea0fe5ce02ca31643ab000a91d07107b0642724fc5e1eaa2a247ccd1432379e02b40477ac002542c40c884a5d3f050d2f1e7021eb0e12d0e7806b3b9c82a16520166e8fc6067d94de3efdcfee46905f6bfb0e4fe0965c30f30585528ac4bab62e1c19d800b8408cad8084276605ed333db2a5c318c9059542a835faa3d1f261b5bcc99505b290a4e3271904f93725bc593b8762c59222b08c9b382501a0aa66c21bdc6c1486a6d2082c70ab9084605b34e91a305f9a1f692c9f58bdfdd775a815dcf2e9d3ba96c68a3a6e1a3aefbeeefd90c66810bd180501016370cff3bdd175e292177e5461a9c91c644352762d4707dd86030051f090deb7d7641ed242dae464ab20ebe9375955c523221ea268a5721f3036ee8a13b87f27b8aaedf93ff817ea0e185a55a6ed43b59949b1ca70af3531be1eea4828bf48a1744da470af5e03e06661212ffd2b57082901b5dd2ea6a578ba9d690ab32c0f700f202873384622d40c8b3e10199656d091140c8949e404d9e8657249cd060a8fd1723e07b3b98453cbb9c7b6687acbcd8d1aea2a76bbfb4e5c60ff5c44dbf5db6aaaeccb95b746d010b1cf321a1f00e295178091461a88515cd32e905780b3123f77485da7c93394bc680145aee2f7abed0e05d3edc9d1647df4950aad7e2f915baa89ca62378a100ea288e0423d28090e5f86ca3761c037e0cca8e2dab149e082b055c0ef8b4155e587ffbc6f51f52e0c0afefaeabcce9680a0ebe9749685e86395c7fc8d65bd73283fb3b896ab00c944618e883303ab421416f3edc210927b39141543c51a72bee8d9021d74d4bc8b8fefd32f62464253ce5730231f2b22b00ab7efc304527fbc61cb06c5e5f7de316ef430ac8e3f0a3e73c5f95dfb1c86386a7b60ca40718f7d946f6c2721742074c94e0bae264e1f4e31e37032796c903d2f0ae18ead1e897b79fe0533e355e94cd2aa7c1f614dfb87a336a1d9b4aeb185f78072cec8c04abeee7150ed8a05740f1c2bdec4a01f2404e684722d5a9e178f14d536e5fffe4476e6c353c725e5d59bc736f2ce219d2aed2858a6124fbc8fd6429b0624bce3c1d6b4a68c96e5c26180f3123cdc87c4642c30fce81d01d26cf2b410c06cb89c527f396cd47c47f2f7b8e9022f9fccf8444dd1c5b6ed509df20788e211f010f44f2b9081760ed1e05e1d6eef87ecb74a7d47e7183fb910a284afdc1ece513c7b52d233d4c92b389c985b9125c05aa0a5aa2cc46a76f3d4d9a1f1c6ef50a093ba807387bb83548cc1e8697849f95cb17711a37536cb9f73f6878fd219e551014b356c49036ac8c07b8f2000ba0948f9529af338e7edb03f60f6a0b26ddb2eeed8fdc991b399a57ce0c0675677b795edf24423dae8a3096c1b936429b9a5fb8c9b85098e77e2696531b859a3540b2a254dbe812db221317a8ab68d6fd34dc78940edef124654d8c53f5bf96101b6e85cf34054b66848972ce0275c7f1bb244905366cb6fe7dfed237efa23f72fcd1dd6940697c71eec0b69ca81df358c0e3d6a02cee45e6058082950f954cf65589ecfdef646246072ea432dc4dabecab8a3cd924945e2258de04f286ba38737a05b3bbb8183e219811457995c745762d6220024aede1a4d9dedbeff6edbcf391bd170da7eda1e39d49e76329208fdd8f5c70494d61cfcbd110c1b7b09c99c830cb48c27aff747a29e51df2bd2593dde94497718ff456186571e13c7868182c3b844a3c4132c392844d78ac9fb8ac3efcc4a203cd43adf3ef7cf78aae81e156bf90223373167f520179ec5ab9e09a9ac2fe6763603ca16721e924806ddbd78265ac2efc7d4d9fa9985f3e484bb3cceba64ce09f663370038b144861b1d630f2403f02372a2814f763caee432ab0d9c143431d17dfb5f5b32da71247325cee6484b7328a883fa980f2c48f2efc64d9d8a1e7e3d9228b193948aa2e6a9284ea67fda0cef400f29d927cad34bab093d93a13f84c536f3139d364919451c688092e61833a4bbd73b2fba0bae36ddadadffca9af6dfb5247bfb2fc88f0ce194ac8e17dac7764fb1ebdb82e1ab69faf2c4e4df6b418924c5495c9cc1eca243b1f3a0a5172a350be6a9541a9ae61ce327092412f2bd9007e6fe4609da00f317469080a15f48ffdaaf5d5258feefa56da7612a384b732e791cf66667c3c05e471e0f18b74d361dfac2a492f8bc5b8e16951306ccccf5ca8ef5122bf5f428f7846c146cff03c12921181b5437e07a7023d857a65486e0b79870e0f9fbafbfbfb57fe6e5bcbba51961e0d9dd1d64f65e67ffe7be2a7bf72769da179dfb9ea82d82228820229ec811e3d703e8436548ef0d929a3c0e8b9cc0f6024264cf96a52ede9b6b699438ffcd7d1dffee4a5436bd2b63d304a50fb8cf908f6d399e1fd450ac863f155357c5bd3e0c4f953f3bef4f94b8a174dacd6caf4a02caf7505114fbe6a95b9423190cf3e7ea848967529352cbc0ddbfa9a9e5adbb2fec58dadbf371d059733ad6c9d21742a331c1ac57f7fd5ff95387bfc187eb227198d042353678f8f2d985d1f9f565711aba9280c1744423cc6109272f3ba7fc81d3ed23a74aae1c860dbbb7bfb0f6d6ee8dd33904af59e61dd332d3c5a68f34cc1ff260a8c3e4ac684b594250c54c821249d308c8ee4a1866ca2650faa8dbaddf5dd713a40cd339418f1c6c87d1f79fccd1438f3d0d12aa004628a86fc4263a4e01e39bc51438c9aff59c7ff0239b928d606b16eb90000000049454e44ae426082') +DISCONNECT +/*C212*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C213*/SET SCHEMA PUBLIC +CONNECT USER SA +create table custom_avatar (id identity,name varchar,created_date datetime not null,mime_type varchar not null,width int not null,height int not null,data binary not null,username varchar not null,foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C214*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C215*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add avatar_scheme varchar default 'NONE' not null +DISCONNECT +/*C216*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C217*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add system_avatar_id int +DISCONNECT +/*C218*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add foreign key (system_avatar_id) references system_avatar(id) +DISCONNECT +/*C219*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C220*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add jukebox boolean default false not null +DISCONNECT +/*C221*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C222*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(12) +DISCONNECT +/*C223*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C224*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add technology varchar default 'WEB' not null +DISCONNECT +/*C225*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C226*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(13) +DISCONNECT +/*C227*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C228*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(9,'settings') +DISCONNECT +/*C229*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',9) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C230*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C231*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(10,'jukebox') +DISCONNECT +/*C232*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',10) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C233*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C234*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table music_folder add changed datetime default 0 not null +DISCONNECT +/*C235*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C236*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table internet_radio add changed datetime default 0 not null +DISCONNECT +/*C237*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C238*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add changed datetime default 0 not null +DISCONNECT +/*C239*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C240*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(14) +DISCONNECT +/*C241*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C242*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add client_id varchar +DISCONNECT +/*C243*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C244*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add show_chat boolean default true not null +DISCONNECT +/*C245*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C246*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(15) +DISCONNECT +/*C247*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +DELETE FROM USER WHERE USERNAME='admin' +INSERT INTO USER VALUES('admin','admin',0,0,0,FALSE) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C248*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C249*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(16) +DISCONNECT +/*C250*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C251*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(17) +DISCONNECT +/*C252*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C253*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(10,'avi > flv','avi','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C254*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C255*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C256*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(11,'mpg > flv','mpg','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C257*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C258*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C259*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(12,'mpeg > flv','mpeg','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C260*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C261*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C262*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(13,'mp4 > flv','mp4','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C263*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C264*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C265*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(14,'m4v > flv','m4v','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C266*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C267*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C268*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(15,'mkv > flv','mkv','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C269*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C270*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C271*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(16,'mov > flv','mov','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C272*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C273*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C274*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(17,'wmv > flv','wmv','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C275*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C276*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C277*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING VALUES(18,'ogv > flv','ogv','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -',NULL,NULL,TRUE,TRUE) +DISCONNECT +/*C278*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C279*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C280*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user add email varchar +DISCONNECT +/*C281*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C282*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(18) +DISCONNECT +/*C283*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C284*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO ROLE VALUES(11,'share') +DISCONNECT +/*C285*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO USER_ROLE VALUES('admin',11) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C286*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C287*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table share (id identity,name varchar not null,description varchar,username varchar not null,created datetime not null,expires datetime,last_visited datetime,visit_count int default 0 not null,unique (name),foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C288*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_share_name on share(name) +DISCONNECT +/*C289*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table share_file (id identity,share_id int not null,path varchar not null,foreign key (share_id) references share(id) on delete cascade) +DISCONNECT +/*C290*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C291*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(19) +DISCONNECT +/*C292*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C293*/SET SCHEMA PUBLIC +CONNECT USER SA +create table transcoding2 (id identity,name varchar not null,source_formats varchar not null,target_format varchar not null,step1 varchar not null,step2 varchar,step3 varchar) +DISCONNECT +/*C294*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING2 VALUES(0,'mp3 audio','ogg oga aac m4a flac wav wma aif aiff ape mpc shn','mp3','ffmpeg -i %s -ab %bk -v 0 -f mp3 -',NULL,NULL) +DISCONNECT +/*C295*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING2 VALUES(1,'flv/h264 video','avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts','flv','ffmpeg -ss %o -i %s -async 1 -b %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f flv -vcodec libx264 -preset superfast -threads 0 -',NULL,NULL) +DISCONNECT +/*C296*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C297*/SET SCHEMA PUBLIC +CONNECT USER SA +create table player_transcoding2 (player_id int not null,transcoding_id int not null,primary key (player_id, transcoding_id),foreign key (player_id) references player(id) on delete cascade,foreign key (transcoding_id) references transcoding2(id) on delete cascade) +DISCONNECT +/*C298*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C299*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C300*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table transcoding2 add default_active boolean default true not null +DISCONNECT +/*C301*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C302*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(20) +DISCONNECT +/*C303*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C304*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table media_file (id identity,path varchar not null,folder varchar,type varchar not null,format varchar,title varchar,album varchar,artist varchar,album_artist varchar,disc_number int,track_number int,year int,genre varchar,bit_rate int,variable_bit_rate boolean not null,duration_seconds int,file_size bigint,width int,height int,cover_art_path varchar,parent_path varchar,play_count int not null,last_played datetime,comment varchar,created datetime not null,changed datetime not null,last_scanned datetime not null,children_last_updated datetime not null,present boolean not null,version int not null,unique (path)) +DISCONNECT +/*C305*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_path on media_file(path) +DISCONNECT +/*C306*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_parent_path on media_file(parent_path) +DISCONNECT +/*C307*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_type on media_file(type) +DISCONNECT +/*C308*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_album on media_file(album) +DISCONNECT +/*C309*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_artist on media_file(artist) +DISCONNECT +/*C310*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_album_artist on media_file(album_artist) +DISCONNECT +/*C311*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_present on media_file(present) +DISCONNECT +/*C312*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_genre on media_file(genre) +DISCONNECT +/*C313*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_play_count on media_file(play_count) +DISCONNECT +/*C314*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_created on media_file(created) +DISCONNECT +/*C315*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_media_file_last_played on media_file(last_played) +DISCONNECT +/*C316*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C317*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table artist (id identity,name varchar not null,cover_art_path varchar,album_count int default 0 not null,last_scanned datetime not null,present boolean not null,unique (name)) +DISCONNECT +/*C318*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_artist_name on artist(name) +DISCONNECT +/*C319*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_artist_present on artist(present) +DISCONNECT +/*C320*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C321*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table album (id identity,path varchar not null,name varchar not null,artist varchar not null,song_count int default 0 not null,duration_seconds int default 0 not null,cover_art_path varchar,play_count int default 0 not null,last_played datetime,comment varchar,created datetime not null,last_scanned datetime not null,present boolean not null,unique (artist, name)) +DISCONNECT +/*C322*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_album_artist_name on album(artist, name) +DISCONNECT +/*C323*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_album_play_count on album(play_count) +DISCONNECT +/*C324*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_album_last_played on album(last_played) +DISCONNECT +/*C325*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_album_present on album(present) +DISCONNECT +/*C326*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C327*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_album_name on album(name) +DISCONNECT +/*C328*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C329*/SET SCHEMA PUBLIC +CONNECT USER SA +create table starred_media_file (id identity,media_file_id int not null,username varchar not null,created datetime not null,foreign key (media_file_id) references media_file(id) on delete cascade,foreign key (username) references user(username) on delete cascade,unique (media_file_id, username)) +DISCONNECT +/*C330*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_media_file_media_file_id on starred_media_file(media_file_id) +DISCONNECT +/*C331*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_media_file_username on starred_media_file(username) +DISCONNECT +/*C332*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C333*/SET SCHEMA PUBLIC +CONNECT USER SA +create table starred_album (id identity,album_id int not null,username varchar not null,created datetime not null,foreign key (album_id) references album(id) on delete cascade,foreign key (username) references user(username) on delete cascade,unique (album_id, username)) +DISCONNECT +/*C334*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_album_album_id on starred_album(album_id) +DISCONNECT +/*C335*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_album_username on starred_album(username) +DISCONNECT +/*C336*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C337*/SET SCHEMA PUBLIC +CONNECT USER SA +create table starred_artist (id identity,artist_id int not null,username varchar not null,created datetime not null,foreign key (artist_id) references artist(id) on delete cascade,foreign key (username) references user(username) on delete cascade,unique (artist_id, username)) +DISCONNECT +/*C338*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_artist_artist_id on starred_artist(artist_id) +DISCONNECT +/*C339*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_starred_artist_username on starred_artist(username) +DISCONNECT +/*C340*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C341*/SET SCHEMA PUBLIC +CONNECT USER SA +create table playlist (id identity,username varchar not null,is_public boolean not null,name varchar not null,comment varchar,file_count int default 0 not null,duration_seconds int default 0 not null,created datetime not null,changed datetime not null,foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C342*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C343*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table playlist add imported_from varchar +DISCONNECT +/*C344*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C345*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table playlist_file (id identity,playlist_id int not null,media_file_id int not null,foreign key (playlist_id) references playlist(id) on delete cascade,foreign key (media_file_id) references media_file(id) on delete cascade) +DISCONNECT +/*C346*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C347*/SET SCHEMA PUBLIC +CONNECT USER SA +create table playlist_user (id identity,playlist_id int not null,username varchar not null,unique(playlist_id, username),foreign key (playlist_id) references playlist(id) on delete cascade,foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C348*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C349*/SET SCHEMA PUBLIC +CONNECT USER SA +create table bookmark (id identity,media_file_id int not null,position_millis bigint not null,username varchar not null,comment varchar,created datetime not null,changed datetime not null,foreign key (media_file_id) references media_file(id) on delete cascade,foreign key (username) references user(username) on delete cascade,unique (media_file_id, username)) +DISCONNECT +/*C350*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_bookmark_media_file_id on bookmark(media_file_id) +DISCONNECT +/*C351*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_bookmark_username on bookmark(username) +DISCONNECT +/*C352*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C353*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(21) +DISCONNECT +/*C354*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C355*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table album add year int +DISCONNECT +/*C356*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C357*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table album add genre varchar +DISCONNECT +/*C358*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C359*/SET SCHEMA PUBLIC +CONNECT USER SA +create table genre (name varchar not null,song_count int not null) +DISCONNECT +/*C360*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C361*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table genre add album_count int default 0 not null +DISCONNECT +/*C362*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C363*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(22) +DISCONNECT +/*C364*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO TRANSCODING2 VALUES(2,'mkv video','avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts','mkv','ffmpeg -ss %o -i %s -c:v libx264 -preset superfast -b:v %bk -c:a libvorbis -f matroska -threads 0 -',NULL,NULL,TRUE) +DISCONNECT +/*C365*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +SET AUTOCOMMIT TRUE +DISCONNECT +/*C366*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C367*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add song_notification boolean default true not null +DISCONNECT +/*C368*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C369*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(23) +DISCONNECT +/*C370*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +DELETE FROM TRANSCODING2 WHERE ID=0 +INSERT INTO TRANSCODING2 VALUES(0,'mp3 audio','ogg oga aac m4a flac wav wma aif aiff ape mpc shn','mp3','ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 -',NULL,NULL,TRUE) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C371*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C372*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C373*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add show_artist_info boolean default true not null +DISCONNECT +/*C374*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C375*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add auto_hide_play_queue boolean default true not null +DISCONNECT +/*C376*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C377*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add view_as_list boolean default false not null +DISCONNECT +/*C378*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C379*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(24) +DISCONNECT +/*C380*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C381*/SET SCHEMA PUBLIC +CONNECT USER SA +create table music_folder_user (music_folder_id int not null,username varchar not null, foreign key (username) references user(username) on delete cascade, foreign key (music_folder_id) references music_folder(id) on delete cascade) +DISCONNECT +/*C382*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_music_folder_user_username on music_folder_user(username) +DISCONNECT +/*C383*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +INSERT INTO MUSIC_FOLDER_USER VALUES(0,'admin') +SET AUTOCOMMIT TRUE +DISCONNECT +/*C384*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C385*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table album add folder_id int +DISCONNECT +/*C386*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C387*/SET SCHEMA PUBLIC +CONNECT USER SA +create table play_queue (id identity,username varchar not null,current int,position_millis bigint,changed datetime not null,changed_by varchar not null,foreign key (username) references user(username) on delete cascade) +DISCONNECT +/*C388*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C389*/SET SCHEMA PUBLIC +CONNECT USER SA +create cached table play_queue_file (id identity,play_queue_id int not null,media_file_id int not null,foreign key (play_queue_id) references play_queue(id) on delete cascade,foreign key (media_file_id) references media_file(id) on delete cascade) +DISCONNECT +/*C390*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C391*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(25) +DISCONNECT +/*C392*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C393*/SET SCHEMA PUBLIC +CONNECT USER SA +create index idx_podcast_episode_url on podcast_episode(url) +DISCONNECT +/*C394*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C395*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add default_album_list varchar default 'random' not null +DISCONNECT +/*C396*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C397*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add queue_following_songs boolean default true not null +DISCONNECT +/*C398*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C399*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table podcast_channel add image_url varchar +DISCONNECT +/*C400*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C401*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add show_side_bar boolean default true not null +DISCONNECT +/*C402*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C403*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table artist add folder_id int +DISCONNECT +/*C404*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C405*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(26) +DISCONNECT +/*C406*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C407*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add list_reload_delay int default 60 not null +DISCONNECT +/*C408*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C409*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table user_settings add keyboard_shortcuts_enabled boolean default false not null +DISCONNECT +/*C410*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C411*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO VERSION VALUES(27) +DISCONNECT +/*C412*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C413*/SET SCHEMA PUBLIC +CONNECT USER SA +alter table player add m3u_bom_enabled boolean default false not null +DISCONNECT +/*C414*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C415*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C416*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C417*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C418*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C419*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C420*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C421*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C422*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C423*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C424*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C425*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C426*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C427*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C428*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C429*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C428*/DISCONNECT +/*C430*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C431*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C430*/DISCONNECT +/*C432*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C433*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C432*/DISCONNECT +/*C434*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C435*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C434*/DISCONNECT +/*C436*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C437*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C436*/DISCONNECT +/*C438*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C439*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C438*/DISCONNECT +/*C440*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C441*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C440*/DISCONNECT +/*C442*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C443*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C442*/DISCONNECT +/*C444*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C445*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C444*/DISCONNECT +/*C446*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C447*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C446*/DISCONNECT +/*C448*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C449*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C448*/DISCONNECT +/*C450*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C451*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C450*/DISCONNECT +/*C452*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C453*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C452*/DISCONNECT +/*C454*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C455*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C454*/DISCONNECT +/*C456*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C457*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C456*/DISCONNECT +/*C458*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C459*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C458*/DISCONNECT +/*C460*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C461*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C460*/DISCONNECT +/*C462*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C463*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C462*/DISCONNECT +/*C464*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C465*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C464*/DISCONNECT +/*C466*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C467*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C466*/DISCONNECT +/*C468*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C469*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C468*/DISCONNECT +/*C470*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C471*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C470*/DISCONNECT +/*C472*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C473*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C474*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C475*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C476*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C477*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C478*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C477*/DISCONNECT +/*C478*/DISCONNECT +/*C476*/DISCONNECT +/*C479*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C480*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C481*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C482*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C483*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C484*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C485*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C484*/DISCONNECT +/*C486*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C487*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C488*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C489*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C490*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C491*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C492*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO PLAYER VALUES(1,NULL,NULL,NULL,NULL,TRUE,NULL,'MEDIUM','OFF',TRUE,FALSE,FALSE,'WEB',NULL,TRUE) +DISCONNECT +/*C493*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C494*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C495*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO PLAYER_TRANSCODING2 VALUES(1,0) +DISCONNECT +/*C496*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO PLAYER_TRANSCODING2 VALUES(1,1) +DISCONNECT +/*C497*/SET SCHEMA PUBLIC +CONNECT USER SA +INSERT INTO PLAYER_TRANSCODING2 VALUES(1,2) +DISCONNECT +/*C498*/SET SCHEMA PUBLIC +CONNECT USER SA +SET AUTOCOMMIT FALSE +DELETE FROM PLAYER WHERE ID=1 +INSERT INTO PLAYER VALUES(1,NULL,NULL,'admin','0:0:0:0:0:0:0:1',TRUE,NULL,'MEDIUM','OFF',TRUE,FALSE,FALSE,'WEB',NULL,TRUE) +SET AUTOCOMMIT TRUE +DISCONNECT +/*C499*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C500*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C501*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C502*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C503*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C504*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C505*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C504*/DISCONNECT +/*C505*/DISCONNECT +/*C506*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C507*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C508*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C507*/DISCONNECT +/*C509*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C510*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C509*/DISCONNECT +/*C511*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C512*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C513*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C514*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C515*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C516*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C517*/SET SCHEMA PUBLIC +CONNECT USER SA +/*C518*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C517*/DISCONNECT +/*C519*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C520*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C521*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C522*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C523*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C524*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C525*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C526*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C527*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C528*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C529*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C530*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C531*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C532*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C533*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C534*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C535*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C536*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C537*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C538*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C539*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C540*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C541*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C542*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C543*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C544*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C545*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C546*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C547*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C548*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C549*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C550*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C551*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C552*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C553*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C554*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C555*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C556*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C557*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C558*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C559*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C560*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C561*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C562*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C563*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C564*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C565*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C566*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C567*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C568*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C569*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C570*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C571*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C572*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C573*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C574*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C575*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C576*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C577*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C578*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C579*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C580*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C581*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C582*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C583*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C584*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C585*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C586*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C587*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C588*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C589*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C590*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C591*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C592*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C593*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C594*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C595*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C596*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C597*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C598*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C599*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C600*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C601*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C602*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C603*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C604*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C605*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C606*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C607*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C608*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C609*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C610*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C611*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C612*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C613*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C614*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C615*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C616*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C617*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C618*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C619*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C620*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C621*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C622*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C623*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C624*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C625*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C626*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C627*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C628*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C629*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C630*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C631*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C632*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C633*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C634*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C635*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C636*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C637*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C638*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C639*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C640*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C641*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C642*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C643*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C644*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C645*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C646*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C647*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C648*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C649*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C650*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C651*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C652*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C653*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C654*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C655*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C656*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C657*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C658*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C659*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C660*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C661*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C662*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C663*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C664*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C665*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C666*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C667*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C668*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C669*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C670*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C671*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C672*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C673*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C674*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C675*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C676*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C677*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C678*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C679*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C680*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C681*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C682*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C683*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C684*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C685*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C686*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C687*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C688*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C689*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C690*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C691*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C692*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C693*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C694*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C695*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C696*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C697*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C698*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C699*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C700*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C701*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C702*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C703*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C704*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C705*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C706*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C707*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C708*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C709*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C710*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C711*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C712*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C713*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C714*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C715*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C716*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C717*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C718*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C719*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C720*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C721*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C722*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C723*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C724*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C725*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C726*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C727*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C728*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C729*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C730*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C731*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C732*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C733*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C734*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C735*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C736*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C737*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C738*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C739*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C740*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C741*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C742*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C743*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C744*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C745*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C746*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C747*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C748*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C749*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C750*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C751*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C752*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C753*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C754*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C755*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C756*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C757*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C758*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C759*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C760*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C761*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C762*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C763*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C764*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C765*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C766*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C767*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C768*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C769*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C770*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C771*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C772*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C773*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C774*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C775*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C776*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C777*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C778*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C779*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C780*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C781*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C782*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C783*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C784*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C785*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C786*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C787*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C788*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C789*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C790*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C791*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C792*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C793*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C794*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C795*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C796*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C797*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C798*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C799*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C800*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C801*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C802*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C803*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C804*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C805*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C806*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C807*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C808*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C809*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C810*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C811*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C812*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C813*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C814*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C815*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C816*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C817*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C818*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C819*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C820*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C821*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C822*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C823*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C824*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C825*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C826*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C827*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C828*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C829*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C830*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C831*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C832*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C833*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C834*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C835*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C836*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C837*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C838*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C839*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C840*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C841*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C842*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C843*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C844*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C845*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C846*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C847*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C848*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C849*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C850*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C851*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C852*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C853*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C854*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C855*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C856*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C857*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C858*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C859*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C860*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C861*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C862*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C863*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C864*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT +/*C865*/SET SCHEMA PUBLIC +CONNECT USER SA +DISCONNECT diff --git a/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.properties b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.properties new file mode 100644 index 00000000..263c5aa8 --- /dev/null +++ b/libresonic-main/src/test/resources/db/pre-liquibase/db/libresonic.properties @@ -0,0 +1,17 @@ +#HSQL Database Engine 1.8.0.5 +#Sun Dec 18 21:11:59 MST 2016 +hsqldb.script_format=0 +runtime.gc_interval=0 +sql.enforce_strict_size=false +hsqldb.cache_size_scale=8 +readonly=false +hsqldb.nio_data_file=true +hsqldb.cache_scale=14 +version=1.8.0 +hsqldb.default_table_type=memory +hsqldb.cache_file_scale=1 +hsqldb.log_size=200 +modified=yes +hsqldb.cache_version=1.7.0 +hsqldb.original_version=1.8.0 +hsqldb.compatible_version=1.8.0 From f26addfd1b008c16633dbf680dc70c9dbafffbd3 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Tue, 20 Dec 2016 19:29:50 -0700 Subject: [PATCH 07/11] Only create indices with tables Signed-off-by: Andrew DeMaria --- .../main/resources/liquibase/legacy/schema32.xml | 3 +++ .../main/resources/liquibase/legacy/schema47.xml | 13 +++---------- .../main/resources/liquibase/legacy/schema53.xml | 10 ---------- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml index e96ab14d..dba38613 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml @@ -91,6 +91,9 @@ + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml index 603c06ea..045d5ccb 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml @@ -206,6 +206,9 @@ + + + set table album type cached @@ -213,16 +216,6 @@ - - - - - - - - - - diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml index 1a9f1a23..ab1e6fc5 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml @@ -15,16 +15,6 @@ - - - - - - - - - - From 478c32a631e1473c4855d474b750349efc87afed Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Wed, 21 Dec 2016 20:54:08 -0700 Subject: [PATCH 08/11] Mark old checksums as valid Signed-off-by: Andrew DeMaria --- libresonic-main/src/main/resources/liquibase/legacy/schema32.xml | 1 + libresonic-main/src/main/resources/liquibase/legacy/schema47.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml index dba38613..67fdc682 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml @@ -64,6 +64,7 @@ + 7:d968449010bf1de51dac5f300359b2c5 diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml index 045d5ccb..a268ff19 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml @@ -153,6 +153,7 @@ + 7:c69a9ccadcb83d57684bb3b7aa34fb22 From 9540167d4943e696a9a6b38bd1b8c6bfc0c28498 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Fri, 23 Dec 2016 14:33:46 -0700 Subject: [PATCH 09/11] Revert "Only create indices with tables" This reverts commit f26addfd1b008c16633dbf680dc70c9dbafffbd3. Signed-off-by: Andrew DeMaria --- .../main/resources/liquibase/legacy/schema32.xml | 3 --- .../main/resources/liquibase/legacy/schema47.xml | 13 ++++++++++--- .../main/resources/liquibase/legacy/schema53.xml | 10 ++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml index 67fdc682..ee76a9a7 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml @@ -92,9 +92,6 @@ - - - diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml index a268ff19..b797459a 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml @@ -207,9 +207,6 @@ - - - set table album type cached @@ -217,6 +214,16 @@ + + + + + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml index ab1e6fc5..1a9f1a23 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml @@ -15,6 +15,16 @@ + + + + + + + + + + From a097644e5fc18c94ae94ebe0231e72ca20c13bc6 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Fri, 23 Dec 2016 15:15:54 -0700 Subject: [PATCH 10/11] Created a better workaround for https://liquibase.jira.com/browse/CORE-2966 Signed-off-by: Andrew DeMaria --- .../spring/DbmsVersionPrecondition.java | 77 +++++++++++++++++++ .../player/spring/SpringLiquibase.java | 1 + .../resources/liquibase/legacy/schema32.xml | 2 +- .../resources/liquibase/legacy/schema47.xml | 23 +++++- .../resources/liquibase/legacy/schema53.xml | 21 +++++ 5 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 libresonic-main/src/main/java/org/libresonic/player/spring/DbmsVersionPrecondition.java diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/DbmsVersionPrecondition.java b/libresonic-main/src/main/java/org/libresonic/player/spring/DbmsVersionPrecondition.java new file mode 100644 index 00000000..0b16fc04 --- /dev/null +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/DbmsVersionPrecondition.java @@ -0,0 +1,77 @@ +package org.libresonic.player.spring; + +import liquibase.changelog.ChangeSet; +import liquibase.changelog.DatabaseChangeLog; +import liquibase.database.Database; +import liquibase.exception.PreconditionErrorException; +import liquibase.exception.PreconditionFailedException; +import liquibase.exception.ValidationErrors; +import liquibase.exception.Warnings; +import liquibase.precondition.Precondition; +import liquibase.serializer.AbstractLiquibaseSerializable; + +public class DbmsVersionPrecondition extends AbstractLiquibaseSerializable implements Precondition { + private Integer major; + private Integer minor; + + @Override + public String getName() { + return "dbmsVersion"; + } + + @Override + public Warnings warn(Database database) { + return new Warnings(); + } + + @Override + public ValidationErrors validate(Database database) { + return new ValidationErrors(); + } + + @Override + public void check( + Database database, DatabaseChangeLog changeLog, ChangeSet changeSet + ) throws PreconditionFailedException, PreconditionErrorException { + try { + int dbMajor = database.getDatabaseMajorVersion(); + int dbMinor = database.getDatabaseMinorVersion(); + if(major != null && !major.equals(dbMajor)) { + throw new PreconditionFailedException("DBMS Major Version Precondition failed: expected " + major + ", got " + dbMajor, changeLog, this); + } + if(minor != null && !minor.equals(dbMinor)) { + throw new PreconditionFailedException("DBMS Minor Version Precondition failed: expected " + minor + ", got " + dbMinor, changeLog, this); + } + } catch (PreconditionFailedException e) { + throw e; + } catch (Exception e) { + throw new PreconditionErrorException(e, changeLog, this); + } + } + + @Override + public String getSerializedObjectName() { + return getName(); + } + + @Override + public String getSerializedObjectNamespace() { + return GENERIC_CHANGELOG_EXTENSION_NAMESPACE; + } + + public Integer getMajor() { + return major; + } + + public void setMajor(Integer major) { + this.major = major; + } + + public Integer getMinor() { + return minor; + } + + public void setMinor(Integer minor) { + this.minor = minor; + } +} diff --git a/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java b/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java index 0ff200b4..4eda164a 100644 --- a/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java +++ b/libresonic-main/src/main/java/org/libresonic/player/spring/SpringLiquibase.java @@ -51,6 +51,7 @@ public class SpringLiquibase extends liquibase.integration.spring.SpringLiquibas if (StringUtils.trimToNull(this.defaultSchema) != null) { database.setDefaultSchemaName(this.defaultSchema); } + liquibase.precondition.PreconditionFactory.getInstance().register(DbmsVersionPrecondition.class); return database; } diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml index ee76a9a7..50d31ef6 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema32.xml @@ -64,7 +64,7 @@ - 7:d968449010bf1de51dac5f300359b2c5 + 7:0d4fbe2adcca829c14d12a5b1a8229c5 diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml index b797459a..df3eb9f7 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema47.xml @@ -153,7 +153,7 @@ - 7:c69a9ccadcb83d57684bb3b7aa34fb22 + 7:a3a788d87fd58508ecb4acac39e255c6 @@ -216,6 +216,12 @@ + + + + + + @@ -224,6 +230,21 @@ + + + + + + + + select count(*) from INFORMATION_SCHEMA.SYSTEM_INDEXINFO where + TABLE_NAME = 'album' and INDEX_NAME = 'idx_album_name'; + + + + + + diff --git a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml index 1a9f1a23..f8bad2fd 100644 --- a/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml +++ b/libresonic-main/src/main/resources/liquibase/legacy/schema53.xml @@ -17,6 +17,12 @@ + + + + + + @@ -25,6 +31,21 @@ + + + + + + + + select count(*) from INFORMATION_SCHEMA.SYSTEM_INDEXINFO where + TABLE_NAME = 'podcast_episode' and INDEX_NAME = 'idx_podcast_episode_url'; + + + + + + From 0749b5f2811b0c150b94064dd2dfb617b4590ee7 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Fri, 23 Dec 2016 15:16:09 -0700 Subject: [PATCH 11/11] Removed no longer needed setting for mysql Signed-off-by: Andrew DeMaria --- documentation/DATABASE.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/documentation/DATABASE.md b/documentation/DATABASE.md index 996378a6..5725b953 100644 --- a/documentation/DATABASE.md +++ b/documentation/DATABASE.md @@ -61,10 +61,6 @@ Finally, copy the jdbc driver from the database vendor website to the `lib` dire ## Database Vendor Specific Notes -### MySQL - -`sessionVariables=sql_mode=ANSI_QUOTES` on your jdbc url string may be necessary. TODO: double check this - ### PostgreSQL `stringtype=unspecified` on your jdbc url string is necessary.