commit 89771b7b516e896c0b44f6013889c53bb3f479e9 Author: samnyan <205-NeumPhis@users.noreply.dev.s-ul.eu> Date: Thu Jan 16 00:50:52 2020 +0900 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2a3040 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..a45eb6b --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,118 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..2cc7d4a Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..642d572 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/README.md b/README.md new file mode 100644 index 0000000..f5a602c --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# Aqua Server +An multipurpose game server power by Spring Boot. + +### Supported Game: +* CHUNITHM Amazon +* Project DIVA Arcade Future Tone + +### Usage: +Requirements: +* Java 11 or above +* MySQL (Optional) + +Just run `java -jar aqua.jar` + +or use the `start.bat` if you are using windows. + +User data will be save in data/db.sqlite. +If you switch to MySQL, it will auto create the table and import some initial data. + +Auto creation won't work with Sqlite, so if you want to recreate the database please use the file come with the release + +### Configuration: +Configuration is save in `application.properties` + +If you are going to deploy on other machine, you must change the `allnet.server.host` and `allnet.server.port` to the IP or Hostname of the hosting machine. +This will be send to the game at booting and being used by following request. + +And you can switch to MySQL(MariaDB) database by commenting the Sqlite part. + +### Other Information: +This server provide a simple API for changing some DIVA's setting. + +A Web App can be found on https://github.com/samnyan/aqua-viewer + +Live Version: http://aqua.samnyan.icu/ + +And DIVA screenshot will be save in data folder. + +### Credit: +* **samnyan** +* **Akasaka Ryuunosuke** : providing all the DIVA protocol information +* All devs who contribute to the MiniMe server \ No newline at end of file diff --git a/data/db.sqlite b/data/db.sqlite new file mode 100644 index 0000000..e555f0f Binary files /dev/null and b/data/db.sqlite differ diff --git a/data/diva_musiclist.json b/data/diva_musiclist.json new file mode 100644 index 0000000..3902448 --- /dev/null +++ b/data/diva_musiclist.json @@ -0,0 +1,8176 @@ +[ + { + "pvId": 1, + "bpm": 175, + "date": "20101125", + "is_old_pv": 1, + "song_name": "恋は戦争", + "song_name_reading": "こいはせんそう", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 2, + "bpm": 165, + "date": "20160408", + "is_old_pv": 1, + "song_name": "ワールドイズマイン", + "song_name_reading": "わーるどいずまいん", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 3, + "bpm": 165, + "date": "20140807", + "is_old_pv": 1, + "song_name": "その一秒スローモーション", + "song_name_reading": "そのいちびょうすろーもーしょん", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 4, + "bpm": 70, + "date": "20101125", + "is_old_pv": 1, + "song_name": "ひねくれ者", + "song_name_reading": "ひねくれもの", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": {}, + "hard": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 5, + "bpm": 170, + "date": "20160212", + "is_old_pv": 1, + "song_name": "メルト", + "song_name_reading": "めると", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 6, + "bpm": 130, + "date": "20140807", + "is_old_pv": 1, + "song_name": "Far Away", + "song_name_reading": "ふぁーらうぇい", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": {}, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + } + } + }, + { + "pvId": 7, + "bpm": 125, + "date": "20151203", + "is_old_pv": 1, + "song_name": "ストロボナイツ", + "song_name_reading": "すとろぼないつ", + "arranger": "kz", + "lyrics": "yae", + "music": "kz", + "difficulty": { + "normal": {}, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 8, + "bpm": 70, + "date": "20140905", + "is_old_pv": 1, + "song_name": "Star Story", + "song_name_reading": "すたーすとーりー", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 9, + "bpm": 84, + "date": "20101125", + "is_old_pv": 1, + "song_name": "Last Night, Good Night", + "song_name_reading": "らすとないとぐっどないと", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": {}, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 10, + "bpm": 125, + "date": "20160108", + "is_old_pv": 1, + "song_name": "Packaged", + "song_name_reading": "ぱっけーじど", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": {}, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 11, + "bpm": 135, + "date": "20140523", + "is_old_pv": 1, + "song_name": "雨のちSweet*Drops", + "song_name_reading": "あめのちすいーとどろっぷす", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 12, + "bpm": 190, + "date": "20180411", + "is_old_pv": 1, + "song_name": "マージナル", + "song_name_reading": "まーじなる", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 13, + "bpm": 210, + "date": "20140807", + "is_old_pv": 1, + "song_name": "フキゲンワルツ", + "song_name_reading": "ふきげんわるつ", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 14, + "bpm": 215, + "date": "20141003", + "is_old_pv": 1, + "song_name": "ミラクルペイント", + "song_name_reading": "みらくるぺいんと", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 15, + "bpm": 170, + "date": "20141003", + "is_old_pv": 1, + "song_name": "Dreaming Leaf -ユメミルコトノハ-", + "song_name_reading": "どりーみんぐりーふ", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 16, + "bpm": 130, + "date": "20190225", + "is_old_pv": 1, + "song_name": "恋スルVOC@LOID", + "song_name_reading": "こいするぼーかろいど", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": {}, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 17, + "bpm": 140, + "date": "20150716", + "is_old_pv": 1, + "song_name": "荒野と森と魔法の歌", + "song_name_reading": "こうやともりとまほうのうた", + "arranger": "トラボルタ", + "lyrics": "トラボルタ", + "music": "トラボルタ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 18, + "bpm": 80, + "date": "20101125", + "is_old_pv": 1, + "song_name": "いのちの歌", + "song_name_reading": "いのちのうた", + "arranger": "トラボルタ", + "lyrics": "トラボルタ", + "music": "トラボルタ", + "difficulty": { + "normal": {}, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + } + } + }, + { + "pvId": 19, + "bpm": 200, + "date": "20101125", + "is_old_pv": 1, + "song_name": "ハト", + "song_name_reading": "はと", + "arranger": "秦野P", + "lyrics": "秦野P", + "music": "秦野P", + "difficulty": { + "normal": {}, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 20, + "bpm": 150, + "date": "20190225", + "is_old_pv": 1, + "song_name": "moon", + "song_name_reading": "むーん", + "arranger": "iroha(sasaki)", + "lyrics": "はっか+iroha(sasaki)", + "music": "iroha(sasaki)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 21, + "bpm": 92, + "date": "20101125", + "is_old_pv": 1, + "song_name": "みくみく菌にご注意♪", + "song_name_reading": "みくみくきんにごちゅうい", + "arranger": "はやや", + "lyrics": "はやや", + "music": "はやや", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 22, + "bpm": 133, + "date": "20101125", + "is_old_pv": 1, + "song_name": "The secret garden", + "song_name_reading": "しーくれっとがーでん", + "arranger": "神前 暁", + "lyrics": "畑 亜貴", + "music": "神前 暁", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + } + } + }, + { + "pvId": 23, + "bpm": 180, + "date": "20160808", + "is_old_pv": 1, + "song_name": "Dear cocoa girls", + "song_name_reading": "でぃあここあがーるず", + "arranger": "神前 暁", + "lyrics": "畑 亜貴", + "music": "神前 暁", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 24, + "bpm": 120, + "date": "20141003", + "is_old_pv": 1, + "song_name": "天鵞絨アラベスク", + "song_name_reading": "びろーどあらべすく", + "arranger": "並木晃一", + "lyrics": "畑 亜貴", + "music": "畑 亜貴", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_06_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 25, + "bpm": 90, + "date": "20101125", + "is_old_pv": 1, + "song_name": "ラブリスト更新中?", + "song_name_reading": "らぶりすとこうしんちゅう", + "arranger": "並木晃一", + "lyrics": "畑 亜貴", + "music": "畑 亜貴", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 27, + "bpm": 119, + "date": "20160212", + "is_old_pv": 1, + "song_name": "Ievan Polkka", + "song_name_reading": "いえばんぽるっか", + "arranger": "Otomania", + "music": "フィンランド民謡", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 28, + "bpm": 160, + "date": "20150807", + "is_old_pv": 1, + "song_name": "みくみくにしてあげる♪【してやんよ】", + "song_name_reading": "みくみくにしてあげるしてやんよ", + "arranger": "ika_mo", + "lyrics": "ika_mo", + "music": "ika_mo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 29, + "bpm": 185, + "date": "20161014", + "is_old_pv": 1, + "song_name": "金の聖夜霜雪に朽ちて", + "song_name_reading": "こがねのせいやそうせつにくちて", + "arranger": "デッドボールP", + "lyrics": "デッドボールP", + "music": "デッドボールP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 30, + "bpm": 150, + "date": "20151022", + "is_old_pv": 1, + "song_name": "えれくとりっく・えんじぇぅ", + "song_name_reading": "えれくとりっくえんじぇぅ", + "arranger": "ヤスオ", + "lyrics": "ヤスオ", + "music": "ヤスオ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 31, + "bpm": 89, + "date": "20160408", + "is_old_pv": 1, + "song_name": "あなたの歌姫", + "song_name_reading": "あなたのうたひめ", + "arranger": "azuma", + "lyrics": "azuma", + "music": "azuma", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 32, + "bpm": 240, + "date": "20141113", + "is_old_pv": 1, + "song_name": "初音ミクの消失", + "song_name_reading": "はつねみくのしょうしつ", + "arranger": "cosMo@暴走P", + "lyrics": "cosMo@暴走P", + "music": "cosMo@暴走P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 37, + "bpm": 150, + "date": "20140606", + "is_old_pv": 1, + "song_name": "初めての恋が終わる時", + "song_name_reading": "はじめてのこいがおわるとき", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 38, + "bpm": 185, + "date": "20150513", + "is_old_pv": 1, + "song_name": "こっち向いて Baby", + "song_name_reading": "こっちむいてべいびー", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 39, + "bpm": 150, + "date": "20150108", + "is_old_pv": 1, + "song_name": "ファインダー(DSLR remix - re:edit)", + "song_name_reading": "ふぁいんだー", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 40, + "bpm": 127, + "date": "20111018", + "is_old_pv": 1, + "song_name": "Yellow", + "song_name_reading": "いえろー", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + } + } + }, + { + "pvId": 41, + "bpm": 185, + "date": "20161209", + "is_old_pv": 1, + "song_name": "カラフル×メロディ", + "song_name_reading": "からふるめろでぃ", + "arranger": "OSTER project", + "lyrics": "minato(流星P)", + "music": "doriko", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 42, + "bpm": 200, + "date": "20171102", + "is_old_pv": 1, + "song_name": "初音ミクの激唱", + "song_name_reading": "はつねみくのげきしょう", + "arranger": "Storyteller", + "lyrics": "Storyteller", + "music": "Storyteller", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 43, + "bpm": 170, + "date": "20150108", + "is_old_pv": 1, + "song_name": "ロミオとシンデレラ", + "song_name_reading": "ろみおとしんでれら", + "arranger": "doriko", + "lyrics": "doriko", + "music": "doriko", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 44, + "bpm": 150, + "date": "20171013", + "is_old_pv": 1, + "song_name": "magnet", + "song_name_reading": "まぐねっと", + "arranger": "minato(流星P)", + "lyrics": "minato(流星P)", + "music": "minato(流星P)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 45, + "bpm": 135, + "date": "20150212", + "is_old_pv": 1, + "song_name": "Dear", + "song_name_reading": "でぃあ", + "arranger": "19-iku-", + "lyrics": "19-iku-", + "music": "19-iku-", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 46, + "bpm": 98, + "date": "20160408", + "is_old_pv": 1, + "song_name": "from Y to Y", + "song_name_reading": "ふろむわいとぅわい", + "arranger": "ジミーサムP", + "lyrics": "ジミーサムP", + "music": "ジミーサムP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 47, + "bpm": 150, + "date": "20111130", + "is_old_pv": 1, + "song_name": "ジェミニ", + "song_name_reading": "じぇみに", + "arranger": "Dixie Flatline", + "lyrics": "Dixie Flatline", + "music": "Dixie Flatline", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 48, + "bpm": 136, + "date": "20171102", + "is_old_pv": 1, + "song_name": "愛言葉", + "song_name_reading": "あいことば", + "arranger": "DECO*27", + "lyrics": "DECO*27", + "music": "DECO*27", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 49, + "bpm": 150, + "date": "20160617", + "is_old_pv": 1, + "song_name": "ぽっぴっぽー", + "song_name_reading": "ぽっぴっぽー", + "arranger": "ラマーズP", + "lyrics": "ラマーズP", + "music": "ラマーズP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 50, + "bpm": 150, + "date": "20150212", + "is_old_pv": 1, + "song_name": "サイハテ", + "song_name_reading": "さいはて", + "arranger": "小林オニキス", + "lyrics": "小林オニキス", + "music": "小林オニキス", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 51, + "bpm": 150, + "date": "20160218", + "is_old_pv": 1, + "song_name": "VOiCE -DIVA MIX-", + "song_name_reading": "ぼいす", + "arranger": "ラヴリーP", + "lyrics": "ラヴリーP", + "music": "ラヴリーP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 52, + "bpm": 175, + "date": "20160408", + "is_old_pv": 1, + "song_name": "恋色病棟", + "song_name_reading": "こいいろびょうとう", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 53, + "bpm": 150, + "date": "20150924", + "is_old_pv": 1, + "song_name": "巨大少女", + "song_name_reading": "きょだいしょうじょ", + "arranger": "40mP", + "lyrics": "40mP", + "music": "40mP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 54, + "bpm": 165, + "date": "20160808", + "is_old_pv": 1, + "song_name": "炉心融解", + "song_name_reading": "ろしんゆうかい", + "arranger": "iroha(sasaki)", + "lyrics": "kuma(alfred)", + "music": "iroha(sasaki)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 55, + "bpm": 150, + "date": "20160808", + "is_old_pv": 1, + "song_name": "ココロ", + "song_name_reading": "こころ", + "arranger": "トラボルタ", + "lyrics": "トラボルタ", + "music": "トラボルタ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 56, + "bpm": 140, + "date": "20101125", + "is_old_pv": 1, + "song_name": "右肩の蝶", + "song_name_reading": "みぎかたのちょう", + "arranger": "のりぴー", + "lyrics": "水野悠良", + "music": "のりぴー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 57, + "bpm": 150, + "date": "20151203", + "is_old_pv": 1, + "song_name": "ダブルラリアット", + "song_name_reading": "だぶるらりあっと", + "arranger": "アゴアニキ", + "lyrics": "アゴアニキ", + "music": "アゴアニキ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 58, + "bpm": 144, + "date": "20160212", + "is_old_pv": 1, + "song_name": "カンタレラ", + "song_name_reading": "かんたれら", + "arranger": "WhiteFlame(黒うさP)", + "lyrics": "WhiteFlame(黒うさP)", + "music": "WhiteFlame(黒うさP)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 59, + "bpm": 135, + "date": "20101125", + "is_old_pv": 1, + "song_name": "Change me", + "song_name_reading": "ちぇんじみー", + "arranger": "shu-t", + "lyrics": "shu-t", + "music": "shu-t", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 60, + "bpm": 150, + "date": "20150408", + "is_old_pv": 1, + "song_name": "サウンド", + "song_name_reading": "さうんど", + "arranger": "baker", + "lyrics": "baker", + "music": "baker", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 61, + "bpm": 150, + "date": "20120203", + "is_old_pv": 1, + "song_name": "クローバー・クラブ", + "song_name_reading": "くろーばーくらぶ", + "arranger": "ゆうゆ", + "lyrics": "ゆうゆ", + "music": "ゆうゆ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 62, + "bpm": 138, + "date": "20150716", + "is_old_pv": 1, + "song_name": "Promise", + "song_name_reading": "ぷろみす", + "arranger": "samfree", + "lyrics": "samfree", + "music": "samfree", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 63, + "bpm": 150, + "date": "20150212", + "is_old_pv": 1, + "song_name": "ほんとは分かってる", + "song_name_reading": "ほんとはわかってる", + "arranger": "フナコシP", + "lyrics": "フナコシP", + "music": "フナコシP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 64, + "bpm": 150, + "date": "20150513", + "is_old_pv": 1, + "song_name": "Innocence", + "song_name_reading": "いのせんす", + "arranger": "KazuP", + "lyrics": "KazuP", + "music": "KazuP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + } + } + }, + { + "pvId": 65, + "bpm": 150, + "date": "20150312", + "is_old_pv": 1, + "song_name": "ハジメテノオト", + "song_name_reading": "はじめてのおと", + "arranger": "malo", + "lyrics": "malo", + "music": "malo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 66, + "bpm": 128, + "date": "20141113", + "is_old_pv": 1, + "song_name": "Just Be Friends", + "song_name_reading": "じゃすとびーふれんず", + "arranger": "Dixie Flatline", + "lyrics": "Dixie Flatline", + "music": "Dixie Flatline", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 67, + "bpm": 185, + "date": "20101125", + "is_old_pv": 1, + "song_name": "金の聖夜霜雪に朽ちて(extend版)", + "song_name_reading": "こがねのせいやそうせつにくちて", + "arranger": "デッドボールP", + "lyrics": "デッドボールP", + "music": "デッドボールP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 0 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 0 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 0 + } + } + }, + { + "pvId": 68, + "bpm": 150, + "date": "20101125", + "is_old_pv": 1, + "song_name": "えれくとりっく・えんじぇぅ(extend版)", + "song_name_reading": "えれくとりっくえんじぇぅ", + "arranger": "ヤスオ", + "lyrics": "ヤスオ", + "music": "ヤスオ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 0 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 0 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 0 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 0 + } + } + }, + { + "pvId": 79, + "bpm": 162, + "date": "20121026", + "is_old_pv": 1, + "song_name": "SPiCa -39's Giving Day Edition-", + "song_name_reading": "すぴか", + "arranger": "とく", + "lyrics": "kentax vs とく", + "music": "とく", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 81, + "bpm": 98, + "date": "20150212", + "is_old_pv": 1, + "song_name": "歌に形はないけれど", + "song_name_reading": "うたにかたちはないけれど", + "arranger": "doriko", + "lyrics": "doriko", + "music": "doriko", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 82, + "bpm": 159, + "date": "20160212", + "is_old_pv": 1, + "song_name": "裏表ラバーズ", + "song_name_reading": "うらおもてらばーず", + "arranger": "wowaka", + "lyrics": "wowaka", + "music": "wowaka", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 83, + "bpm": 150, + "date": "20121026", + "is_old_pv": 1, + "song_name": "*ハロー、プラネット。(I.M.PLSE-EDIT)", + "song_name_reading": "はろーぷらねっと", + "arranger": "sasakure.UK", + "lyrics": "sasakure.UK", + "music": "sasakure.UK", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 84, + "bpm": 198, + "date": "20161014", + "is_old_pv": 1, + "song_name": "那由他の彼方まで", + "song_name_reading": "なゆたのかなたまで", + "arranger": "釣り師P", + "lyrics": "釣り師P", + "music": "釣り師P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 85, + "bpm": 180, + "date": "20151203", + "is_old_pv": 1, + "song_name": "孤独の果て -extend edition-", + "song_name_reading": "こどくのはて えくすてんどえでぃしょん", + "arranger": "光収容", + "lyrics": "光収容", + "music": "光収容", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 86, + "bpm": 85, + "date": "20190225", + "is_old_pv": 1, + "song_name": "パズル", + "song_name_reading": "ぱずる", + "arranger": "クワガタP", + "lyrics": "クワガタP", + "music": "クワガタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 87, + "bpm": 183, + "date": "20150408", + "is_old_pv": 1, + "song_name": "Palette", + "song_name_reading": "ぱれっと", + "arranger": "ゆよゆっぺ", + "lyrics": "ゆよゆっぺ/meola", + "music": "ゆよゆっぺ/meola", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 88, + "bpm": 183, + "date": "20150108", + "is_old_pv": 1, + "song_name": "千年の独奏歌 (DIVA edit)", + "song_name_reading": "せんねんのどくそうか", + "arranger": "yanagi", + "lyrics": "yanagi", + "music": "yanagi", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 89, + "bpm": 180, + "date": "20161014", + "is_old_pv": 1, + "song_name": "忘却心中", + "song_name_reading": "ぼうきゃくしんじゅう", + "arranger": "OPA", + "lyrics": "Asaki No'9", + "music": "OPA", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 90, + "bpm": 127, + "date": "20150716", + "is_old_pv": 1, + "song_name": "結んで開いて羅刹と骸", + "song_name_reading": "むすんでひらいてらせつとむくろ", + "arranger": "ハチ", + "lyrics": "ハチ", + "music": "ハチ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 91, + "bpm": 195, + "date": "20171013", + "is_old_pv": 1, + "song_name": "ローリンガール", + "song_name_reading": "ろーりんがーる", + "arranger": "wowaka", + "lyrics": "wowaka", + "music": "wowaka", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 92, + "bpm": 82, + "date": "20121026", + "is_old_pv": 1, + "song_name": "Starduster", + "song_name_reading": "すたーだすたー", + "arranger": "ジミーサムP", + "lyrics": "ジミーサムP", + "music": "ジミーサムP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 93, + "bpm": 183, + "date": "20130131", + "is_old_pv": 1, + "song_name": "パラジクロロベンゼン", + "song_name_reading": "ぱらじくろろべんぜん", + "arranger": "オワタP", + "lyrics": "オワタP", + "music": "オワタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 94, + "bpm": 102, + "date": "20150924", + "is_old_pv": 1, + "song_name": "番凩", + "song_name_reading": "つがゐこがらし", + "arranger": "仕事してP", + "lyrics": "仕事してP", + "music": "仕事してP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 95, + "bpm": 160, + "date": "20121026", + "is_old_pv": 1, + "song_name": "ねこみみスイッチ", + "song_name_reading": "ねこみみすいっち", + "arranger": "daniwell", + "lyrics": "daniwell", + "music": "daniwell", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 96, + "bpm": 183, + "date": "20160218", + "is_old_pv": 1, + "song_name": "積乱雲グラフィティ", + "song_name_reading": "せきらんうんぐらふぃてぃ", + "arranger": "ryo", + "lyrics": "Dixie Flatline", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 97, + "bpm": 124, + "date": "20121026", + "is_old_pv": 1, + "song_name": "リンリンシグナル -Append Mix-", + "song_name_reading": "りんりんしぐなる", + "arranger": "Dios/シグナルP", + "lyrics": "Dios/シグナルP", + "music": "Dios/シグナルP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 101, + "bpm": 120, + "date": "20140905", + "is_old_pv": 1, + "song_name": "Magical Sound Shower", + "song_name_reading": "まじかるさうんどしゃわー", + "arranger": "Kusemono/SWANTONE", + "lyrics": "Kusemono/SWANTONE", + "music": "HIRO", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 102, + "bpm": 150, + "date": "20101125", + "is_old_pv": 1, + "song_name": "多重未来のカルテット -Quartet Theme-", + "song_name_reading": "たじゅうみらいのかるてっと", + "arranger": "Kusemono/SWANTONE", + "lyrics": "Kusemono/SWANTONE", + "music": "Funky K.H", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 103, + "bpm": 173, + "date": "20130831", + "is_old_pv": 1, + "song_name": "AFTER BURNER", + "song_name_reading": "あふたーばーなー", + "arranger": "Hal", + "lyrics": "Hal", + "music": "HIRO", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 104, + "bpm": 124, + "date": "20130831", + "is_old_pv": 1, + "song_name": "LIKE THE WIND", + "song_name_reading": "らいくざうぃんど", + "arranger": "Kusemono/SWANTONE", + "lyrics": "Kusemono/SWANTONE", + "music": "HIRO", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 201, + "bpm": 240, + "date": "20101125", + "is_old_pv": 1, + "song_name": "星屑ユートピア", + "song_name_reading": "ほしくずゆーとぴあ", + "arranger": "otetsu", + "lyrics": "otetsu", + "music": "otetsu", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 202, + "bpm": 195, + "date": "20160212", + "is_old_pv": 1, + "song_name": "StargazeR", + "song_name_reading": "すたーげいざー", + "arranger": "骨盤P", + "lyrics": "骨盤P", + "music": "骨盤P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 203, + "bpm": 120, + "date": "20130131", + "is_old_pv": 1, + "song_name": "孤独の果て", + "song_name_reading": "こどくのはて", + "arranger": "光収容", + "lyrics": "光収容", + "music": "光収容", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 204, + "bpm": 140, + "date": "20171013", + "is_old_pv": 1, + "song_name": "タイムリミット", + "song_name_reading": "たいむりみっと", + "arranger": "North-T", + "lyrics": "North-T", + "music": "North-T", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 205, + "bpm": 149, + "date": "20101125", + "is_old_pv": 1, + "song_name": "Holy Star -2010 DIVA mix-", + "song_name_reading": "ほーりーすたー", + "arranger": "おっさんP(K's Sound Project)", + "lyrics": "おっさんP(K's Sound Project)", + "music": "おっさんP(K's Sound Project)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 206, + "bpm": 142, + "date": "20101125", + "is_old_pv": 1, + "song_name": "melody...", + "song_name_reading": "めろでぃ", + "arranger": "mikuru396", + "lyrics": "mikuru396", + "music": "mikuru396", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 207, + "bpm": 137, + "date": "20101125", + "is_old_pv": 1, + "song_name": "saturation", + "song_name_reading": "さちゅれいしょん", + "arranger": "fatP", + "lyrics": "Harmonia", + "music": "fatP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 208, + "bpm": 290, + "date": "20140905", + "is_old_pv": 1, + "song_name": "迷的サイバネティックス", + "song_name_reading": "めいてきさいばねてぃっくす", + "arranger": "otetsu", + "lyrics": "otetsu", + "music": "otetsu", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 209, + "bpm": 240, + "date": "20150513", + "is_old_pv": 1, + "song_name": "ピンクムーン", + "song_name_reading": "ぴんくむーん", + "arranger": "もじょP", + "lyrics": "もじょP", + "music": "もじょP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 210, + "bpm": 184, + "date": "20160808", + "is_old_pv": 1, + "song_name": "透明水彩", + "song_name_reading": "とうめいすいさい", + "arranger": "ヤスオ", + "lyrics": "ヤスオ", + "music": "ヤスオ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 211, + "bpm": 172, + "date": "20160808", + "is_old_pv": 1, + "song_name": "いろは唄", + "song_name_reading": "いろはうた", + "arranger": "銀サク", + "lyrics": "銀サク", + "music": "銀サク", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 212, + "bpm": 220, + "date": "20151022", + "is_old_pv": 1, + "song_name": "カラフル×セクシィ", + "song_name_reading": "からふるせくしぃ", + "arranger": "OSTER project", + "lyrics": "minato(流星P)", + "music": "doriko", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 213, + "bpm": 160, + "date": "20180831", + "is_old_pv": 1, + "song_name": "ルカルカ★ナイトフィーバー", + "song_name_reading": "るかるかないとふぃーばー", + "arranger": "samfree", + "lyrics": "samfree", + "music": "samfree", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 214, + "bpm": 140, + "date": "20130831", + "is_old_pv": 1, + "song_name": "右肩の蝶 -39's Giving Day Edition-", + "song_name_reading": "みぎかたのちょう さんくすぎびんぐでいえでぃしょん", + "arranger": "のりぴー", + "lyrics": "水野悠良", + "music": "のりぴー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 215, + "bpm": 190, + "date": "20171013", + "is_old_pv": 1, + "song_name": "Leia", + "song_name_reading": "れいあ", + "arranger": "ゆよゆっぺ", + "lyrics": "ゆよゆっぺ", + "music": "ゆよゆっぺ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 216, + "bpm": 154, + "date": "20130831", + "is_old_pv": 1, + "song_name": "千本桜", + "song_name_reading": "せんぼんざくら", + "arranger": "黒うさP", + "lyrics": "黒うさP", + "music": "黒うさP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 218, + "bpm": 171, + "date": "20161209", + "is_old_pv": 1, + "song_name": "白い雪のプリンセスは", + "song_name_reading": "しろいゆきのぷりんせすは", + "arranger": "のぼる↑", + "lyrics": "のぼる↑", + "music": "のぼる↑", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 219, + "bpm": 100, + "date": "20150610", + "is_old_pv": 1, + "song_name": "深海少女", + "song_name_reading": "しんかいしょうじょ", + "arranger": "ゆうゆ", + "lyrics": "ゆうゆ", + "music": "ゆうゆ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 220, + "bpm": 171, + "date": "20180411", + "is_old_pv": 1, + "song_name": "ワールズエンド・ダンスホール -Live Dance Edition-", + "song_name_reading": "わーるずえんどだんすほーる らいぶだんすえでぃしょん", + "arranger": "wowaka", + "lyrics": "wowaka", + "music": "wowaka", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 221, + "bpm": 124, + "date": "20161014", + "is_old_pv": 1, + "song_name": "ネコミミアーカイブ", + "song_name_reading": "ねこみみあーかいぶ", + "arranger": "糞田舎P", + "lyrics": "糞田舎P", + "music": "糞田舎P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 222, + "bpm": 124, + "date": "20161209", + "is_old_pv": 1, + "song_name": "ブラックゴールド", + "song_name_reading": "ぶらっくごーるど", + "arranger": "otetsu", + "lyrics": "otetsu", + "music": "otetsu", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 223, + "bpm": 109, + "date": "20131220", + "is_old_pv": 1, + "song_name": "アウト オブ エデン", + "song_name_reading": "あうとおぶえでん", + "arranger": "Kouhei (K's Sound Project)", + "lyrics": "orange", + "music": "Kouhei (K's Sound Project)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 224, + "bpm": 148, + "date": "20160108", + "is_old_pv": 1, + "song_name": "Rosary Pale", + "song_name_reading": "ろざりーぺーる", + "arranger": "新城P", + "lyrics": "新城P", + "music": "新城P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 225, + "bpm": 160, + "date": "20190225", + "is_old_pv": 1, + "song_name": "ゆめゆめ", + "song_name_reading": "ゆめゆめ", + "arranger": "DECO*27", + "lyrics": "DECO*27", + "music": "DECO*27", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 226, + "bpm": 150, + "date": "20141113", + "is_old_pv": 1, + "song_name": "on the rocks", + "song_name_reading": "おんざろっくす", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 227, + "bpm": 174, + "date": "20171102", + "is_old_pv": 1, + "song_name": "妄想スケッチ", + "song_name_reading": "もうそうすけっち", + "arranger": "40mP", + "lyrics": "40mP", + "music": "40mP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 228, + "bpm": 120, + "date": "20130831", + "is_old_pv": 1, + "song_name": "No Logic", + "song_name_reading": "のーろじっく", + "arranger": "ジミーサムP", + "lyrics": "ジミーサムP", + "music": "ジミーサムP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 231, + "bpm": 205, + "date": "20150807", + "is_old_pv": 1, + "song_name": "キップル・インダストリー", + "song_name_reading": "きっぷるいんだすとりー", + "arranger": "millstones", + "lyrics": "millstones", + "music": "millstones", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 232, + "bpm": 175, + "date": "20160617", + "is_old_pv": 1, + "song_name": "39", + "song_name_reading": "さんきゅう", + "arranger": "sasakure.UK & DECO*27", + "lyrics": "DECO*27", + "music": "sasakure.UK", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 233, + "bpm": 180, + "date": "20160808", + "is_old_pv": 1, + "song_name": "ふたりで。", + "song_name_reading": "ふたりで", + "arranger": "ねこぼーろ", + "lyrics": "ねこぼーろ", + "music": "ねこぼーろ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 234, + "bpm": 170, + "date": "20160212", + "is_old_pv": 1, + "song_name": "深海シティアンダーグラウンド", + "song_name_reading": "しんかいしてぃあんだーぐらうんど", + "arranger": "田中B", + "lyrics": "田中B", + "music": "田中B", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 235, + "bpm": 180, + "date": "20131220", + "is_old_pv": 1, + "song_name": "ルシッドドリーミング", + "song_name_reading": "るしっどどりーみんぐ", + "arranger": "くぇ(ナイーヴP)", + "lyrics": "灯下はこ、", + "music": "くぇ(ナイーヴP)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 236, + "bpm": 189, + "date": "20131220", + "is_old_pv": 1, + "song_name": "Absolunote", + "song_name_reading": "あぶそるのーと", + "arranger": "Lemm", + "lyrics": "Lemm", + "music": "Lemm", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 238, + "bpm": 175, + "date": "20140210", + "song_name": "SING&SMILE", + "song_name_reading": "しんぐあんどすまいる", + "arranger": "Re:nG", + "lyrics": "Re:nG", + "music": "Re:nG", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 239, + "bpm": 110, + "date": "20131220", + "song_name": "トリコロール・エア・ライン", + "song_name_reading": "とりころーるえあらいん", + "arranger": "あつぞうくん", + "lyrics": "あつぞうくん", + "music": "あつぞうくん", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 240, + "bpm": 136, + "date": "20131220", + "song_name": "システマティック・ラヴ", + "song_name_reading": "しすてまてぃっくらぶ", + "arranger": "かめりあ", + "lyrics": "さつき が てんこもり", + "music": "かめりあ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 241, + "bpm": 141, + "date": "20150212", + "song_name": "エレクトロサチュレイタ", + "song_name_reading": "えれくとろさちゅれいた", + "arranger": "tilt-six", + "lyrics": "tilt-six", + "music": "tilt-six", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 242, + "bpm": 125, + "date": "20140807", + "song_name": "1/6 -out of the gravity-", + "song_name_reading": "ろくぶんのいち", + "arranger": "ぼーかりおどP(noa)", + "lyrics": "ぼーかりおどP(noa)", + "music": "ぼーかりおどP(noa)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 243, + "bpm": 125, + "date": "20150716", + "song_name": "インタビュア", + "song_name_reading": "いんたびゅあ", + "arranger": "クワガタP", + "lyrics": "クワガタP", + "music": "クワガタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 244, + "bpm": 127, + "date": "20150108", + "song_name": "スノーマン", + "song_name_reading": "すのーまん", + "arranger": "halyosy", + "lyrics": "halyosy", + "music": "halyosy", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 246, + "bpm": 170, + "date": "20150408", + "song_name": "テレカクシ思春期", + "song_name_reading": "てれかくしししゅんき", + "arranger": "HoneyWorks", + "lyrics": "HoneyWorks", + "music": "HoneyWorks", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 247, + "bpm": 123, + "date": "20160808", + "song_name": "スイートマジック", + "song_name_reading": "すいーとまじっく", + "arranger": "Junky", + "lyrics": "Junky", + "music": "Junky", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 248, + "bpm": 150, + "date": "20150807", + "song_name": "ありふれたせかいせいふく", + "song_name_reading": "ありふれたせかいせいふく", + "arranger": "ピノキオピー", + "lyrics": "ピノキオピー", + "music": "ピノキオピー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 249, + "bpm": 175, + "date": "20161209", + "song_name": "アゲアゲアゲイン", + "song_name_reading": "あげあげあげいん", + "arranger": "Mitchie M", + "lyrics": "Mitchie M", + "music": "Mitchie M", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 250, + "bpm": 175, + "date": "20161209", + "song_name": "はじめまして地球人さん", + "song_name_reading": "はじめましてちきゅうじんさん", + "arranger": "ピノキオピー", + "lyrics": "ピノキオピー", + "music": "ピノキオピー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 251, + "bpm": 130, + "date": "20150924", + "song_name": "PIANO*GIRL", + "song_name_reading": "ぴあのがーる", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 253, + "bpm": 138, + "date": "20160808", + "song_name": "LOL -lots of laugh-", + "song_name_reading": "えるおーえる", + "arranger": "KeN", + "lyrics": "エンドケイプ", + "music": "KeN", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 255, + "bpm": 130, + "date": "20150617", + "song_name": "骸骨楽団とリリア", + "song_name_reading": "がいこつがくだんとりりあ", + "arranger": "トーマ", + "lyrics": "トーマ", + "music": "トーマ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 257, + "bpm": 130, + "date": "20161209", + "song_name": "shake it!", + "song_name_reading": "しぇいくいっと", + "arranger": "emon", + "lyrics": "emon", + "music": "emon", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 259, + "bpm": 148, + "date": "20161209", + "song_name": "サンドリヨン", + "song_name_reading": "さんどりよん", + "arranger": "Dios/シグナルP", + "lyrics": "orange", + "music": "Dios/シグナルP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 260, + "bpm": 148, + "date": "20161209", + "song_name": "アドレサンス", + "song_name_reading": "あどれさんす", + "arranger": "Dios/シグナルP", + "lyrics": "orange", + "music": "Dios/シグナルP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 261, + "bpm": 220, + "date": "20161209", + "song_name": "君の体温", + "song_name_reading": "きみのたいおん", + "arranger": "クワガタP", + "lyrics": "クワガタP", + "music": "クワガタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 262, + "bpm": 135, + "date": "20161014", + "song_name": "ピアノ×フォルテ×スキャンダル", + "song_name_reading": "ぴあのふぉるてすきゃんだる", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 265, + "bpm": 140, + "date": "20161014", + "song_name": "ヒビカセ", + "song_name_reading": "ひびかせ", + "arranger": "ギガ", + "lyrics": "れをる", + "music": "ギガ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 401, + "bpm": 300, + "date": "20140905", + "is_old_pv": 1, + "song_name": "片想いサンバ", + "song_name_reading": "かたおもいさんば", + "arranger": "オワタP", + "lyrics": "オワタP", + "music": "オワタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 402, + "bpm": 155, + "date": "20160212", + "is_old_pv": 1, + "song_name": "サヨナラ・グッバイ", + "song_name_reading": "さよならぐっばい", + "arranger": "のぼる↑", + "lyrics": "のぼる↑", + "music": "のぼる↑", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 403, + "bpm": 170, + "date": "20141003", + "is_old_pv": 1, + "song_name": "崩壊歌姫 -disruptive diva-", + "song_name_reading": "ほうかいうたひめ", + "arranger": "マチゲリータ", + "lyrics": "マチゲリータ", + "music": "マチゲリータ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 404, + "bpm": 138, + "date": "20141113", + "is_old_pv": 1, + "song_name": "ZIGG-ZAGG", + "song_name_reading": "じぐざぐ", + "arranger": "Junky", + "lyrics": "Junky", + "music": "Junky", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 405, + "bpm": 175, + "date": "20160108", + "is_old_pv": 1, + "song_name": "ナイトメア☆パーティーナイト", + "song_name_reading": "ないとめあぱーてぃーないと", + "arranger": "くちばし", + "lyrics": "くちばし", + "music": "くちばし", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 407, + "bpm": 125, + "date": "20151022", + "is_old_pv": 1, + "song_name": "恋ノート////", + "song_name_reading": "こいのーと", + "arranger": "ジェバンニP+ハットリP", + "lyrics": "Mr.DDR", + "music": "ジェバンニP+ハットリP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 408, + "bpm": 155, + "date": "20101125", + "is_old_pv": 1, + "song_name": "SYMPHONIC DIVE - DIVA edit -", + "song_name_reading": "しんふぉにっくだいぶ", + "arranger": "Re:nG", + "lyrics": "Re:nG", + "music": "Re:nG", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 409, + "bpm": 180, + "date": "20101125", + "is_old_pv": 1, + "song_name": "どうしてこうなった", + "song_name_reading": "どうしてこうなった", + "arranger": "うどんゲルゲ", + "lyrics": "うどんゲルゲ", + "music": "うどんゲルゲ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 410, + "bpm": 165, + "date": "20190225", + "is_old_pv": 1, + "song_name": "オオカミガール", + "song_name_reading": "おおかみがーる", + "arranger": "くらP", + "lyrics": "くらP", + "music": "くらP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 411, + "bpm": 146, + "date": "20101125", + "is_old_pv": 1, + "song_name": "Starlite★Lydian", + "song_name_reading": "すたーらいとりでぃあん", + "arranger": "Masaki", + "lyrics": "Masaki", + "music": "Masaki", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 412, + "bpm": 150, + "date": "20180831", + "is_old_pv": 1, + "song_name": "ペリコ・スペースシッパー", + "song_name_reading": "ぺりこすぺーすしっぱー", + "arranger": "ワンカップP", + "lyrics": "ワンカップP", + "music": "ワンカップP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 413, + "bpm": 250, + "date": "20160617", + "is_old_pv": 1, + "song_name": "マスターオブパペッツ", + "song_name_reading": "ますたーおぶぱぺっつ", + "arranger": "デスおはぎ", + "lyrics": "デスおはぎ", + "music": "デスおはぎ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 414, + "bpm": 300, + "date": "20150108", + "is_old_pv": 1, + "song_name": "Pane dhiria", + "song_name_reading": "ぱねでぃりあ", + "arranger": "新城P", + "lyrics": "新城P", + "music": "新城P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 415, + "bpm": 234, + "date": "20150610", + "is_old_pv": 1, + "song_name": "ほしをつくるひと", + "song_name_reading": "ほしをつくるひと", + "arranger": "MazoP", + "lyrics": "MazoP", + "music": "MazoP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 416, + "bpm": 276, + "date": "20101125", + "is_old_pv": 1, + "song_name": "So much loving you★ -DIVA Edit-", + "song_name_reading": "そーまっちらびんゆー", + "arranger": "古墳P", + "lyrics": "longan", + "music": "古墳P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 417, + "bpm": 200, + "date": "20171013", + "is_old_pv": 1, + "song_name": "ジュゲムシーケンサー", + "song_name_reading": "じゅげむしーけんさー", + "arranger": "ぼーかりおどP(noa)", + "lyrics": "ぼーかりおどP(noa)", + "music": "ぼーかりおどP(noa)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 418, + "bpm": 220, + "date": "20101125", + "is_old_pv": 1, + "song_name": "さあ、どっち?", + "song_name_reading": "さあどっち", + "arranger": "ひなた春花", + "lyrics": "ひなた春花", + "music": "ひなた春花", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 419, + "bpm": 150, + "date": "20101125", + "is_old_pv": 1, + "song_name": "イヤイヤ星人", + "song_name_reading": "いやいやせいじん", + "arranger": "イヤイヤP", + "lyrics": "イヤイヤP", + "music": "イヤイヤP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 420, + "bpm": 140, + "date": "20101125", + "is_old_pv": 1, + "song_name": "Equation+**", + "song_name_reading": "いくえいしょん", + "arranger": "ぽわぽわP", + "lyrics": "ぽわぽわP", + "music": "ぽわぽわP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 421, + "bpm": 160, + "date": "20150610", + "is_old_pv": 1, + "song_name": "嘘つきベティ", + "song_name_reading": "うそつきべてぃ", + "arranger": "PolyphonicBranch", + "lyrics": "花うさぎ", + "music": "PolyphonicBranch", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 422, + "bpm": 183, + "date": "20150408", + "is_old_pv": 1, + "song_name": "数多の舞 -Dance of many-", + "song_name_reading": "あまたのまい", + "arranger": "koushirou(卑屈P)", + "lyrics": "koushirou(卑屈P)", + "music": "koushirou(卑屈P)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 423, + "bpm": 183, + "date": "20160408", + "is_old_pv": 1, + "song_name": "迷子ライフ", + "song_name_reading": "まいごらいふ", + "arranger": "TOKOTOKO(西沢さんP)", + "lyrics": "TOKOTOKO(西沢さんP)", + "music": "TOKOTOKO(西沢さんP)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 424, + "bpm": 183, + "date": "20150312", + "is_old_pv": 1, + "song_name": "ハイスクール Days - DIVA EDIT", + "song_name_reading": "はいすくーるでいず", + "arranger": "U-ji(霊長類P)", + "lyrics": "U-SUKE", + "music": "U-ji(霊長類P)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 425, + "bpm": 183, + "date": "20171013", + "is_old_pv": 1, + "song_name": "そいやっさぁ!!", + "song_name_reading": "そいやっさぁ", + "arranger": "囚人P", + "lyrics": "囚人P", + "music": "囚人P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 426, + "bpm": 183, + "date": "20111215", + "is_old_pv": 1, + "song_name": "break;down", + "song_name_reading": "ぶれいくだうん", + "arranger": "hmtk", + "lyrics": "クマー@Taken", + "music": "hmtk", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 427, + "bpm": 183, + "date": "20171013", + "is_old_pv": 1, + "song_name": "花舞月詠譚", + "song_name_reading": "はなまいつくよみたん", + "arranger": "Hoskey", + "lyrics": "Yukie Dong", + "music": "Hoskey", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 428, + "bpm": 194, + "date": "20160408", + "is_old_pv": 1, + "song_name": "フランシスカ", + "song_name_reading": "ふらんしすか", + "arranger": "ぢゅ@メラゾーマP", + "lyrics": "ぢゅ@メラゾーマP", + "music": "ぢゅ@メラゾーマP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 429, + "bpm": 100, + "date": "20150807", + "is_old_pv": 1, + "song_name": "悠久-Song of Eternity-DIVAMIX-", + "song_name_reading": "ゆうきゅう", + "arranger": "てぃあら", + "lyrics": "てぃあら", + "music": "てぃあら", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_07_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 430, + "bpm": 170, + "date": "20130131", + "is_old_pv": 1, + "song_name": "slump", + "song_name_reading": "すらんぷ", + "arranger": "しばいぬ", + "lyrics": "綾取り", + "music": "しばいぬ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 431, + "bpm": 157, + "date": "20161209", + "is_old_pv": 1, + "song_name": "Gothic and Loneliness ~I'm the very DIVA~", + "song_name_reading": "ごしっくあんどろんりねす", + "arranger": "なるしまたかし", + "lyrics": "なるしまたかし", + "music": "なるしまたかし", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 432, + "bpm": 175, + "date": "20140527", + "song_name": "唐傘さんが通る", + "song_name_reading": "からかささんがとおる", + "arranger": "イヤイヤP", + "lyrics": "イヤイヤP", + "music": "イヤイヤP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 433, + "bpm": 130, + "date": "20160212", + "song_name": "巴里映画少女", + "song_name_reading": "ぱりしねまがーる", + "arranger": "apfel note", + "lyrics": "apfel note", + "music": "apfel note", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 434, + "bpm": 175, + "date": "20140715", + "song_name": "おはヨーデル (Oha-Yo-del!!)", + "song_name_reading": "おはよーでる", + "arranger": "爆弾ポピー", + "lyrics": "爆弾ポピー", + "music": "爆弾ポピー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 435, + "bpm": 175, + "date": "20180411", + "song_name": "デンパラダイム", + "song_name_reading": "でんぱらだいむ", + "arranger": "lumo", + "lyrics": "lumo", + "music": "lumo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_10_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 436, + "bpm": 140, + "date": "20120927", + "song_name": "月向うまでのトラベル", + "song_name_reading": "つきむこうまでのとらべる", + "arranger": "vilP", + "lyrics": "vilP", + "music": "vilP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 437, + "bpm": 175, + "date": "20120927", + "song_name": "ブラックノートに溺れさせて", + "song_name_reading": "ぶらっくのーとにおぼれさせて", + "arranger": "Shun13", + "lyrics": "Shun13", + "music": "Shun13", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 438, + "bpm": 198, + "date": "20160212", + "song_name": "ステップフォワード", + "song_name_reading": "すてっぷふぉわーど", + "arranger": "Chesa", + "lyrics": "Ena-Yuzuru", + "music": "Chesa", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 439, + "bpm": 192, + "date": "20141204", + "song_name": "キミに", + "song_name_reading": "きみに", + "arranger": "teaeye", + "lyrics": "teaeye", + "music": "teaeye", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 440, + "bpm": 192, + "date": "20141204", + "song_name": "ナイト・オブ・ライト", + "song_name_reading": "ないとおぶらいと", + "arranger": "いーえるP @ TinySymphony", + "lyrics": "いーえるP @ TinySymphony", + "music": "いーえるP @ TinySymphony", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 441, + "bpm": 200, + "date": "20190225", + "song_name": "Mellow Yellow", + "song_name_reading": "めろーいえろー", + "arranger": "めりっさP", + "lyrics": "哀婉P", + "music": "めりっさP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 442, + "bpm": 136, + "date": "20150212", + "song_name": "ぎずも", + "song_name_reading": "ぎずも", + "arranger": "uguis08", + "lyrics": "uguis08", + "music": "uguis08", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 443, + "bpm": 175, + "date": "20140523", + "song_name": "偶像無線(Game edit)", + "song_name_reading": "ぐうぞうらじおげーむえでぃっと", + "arranger": "Daisuke Ohnuma(大福P)", + "lyrics": "紫川札喰", + "music": "Daisuke Ohnuma(大福P)", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 600, + "bpm": 174, + "date": "20180411", + "song_name": "キャットフード", + "song_name_reading": "きゃっとふーど", + "arranger": "doriko", + "lyrics": "doriko", + "music": "doriko", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 601, + "bpm": 130, + "date": "20140210", + "song_name": "モノクロ∞ブルースカイ", + "song_name_reading": "ものくろぶるーすかい", + "arranger": "のぼる↑", + "lyrics": "のぼる↑", + "music": "のぼる↑", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 602, + "bpm": 153, + "date": "20180831", + "song_name": "Fire◎Flower", + "song_name_reading": "ふぁいやーふらわー", + "arranger": "halyosy & is", + "lyrics": "halyosy", + "music": "halyosy", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 603, + "bpm": 158, + "date": "20101125", + "song_name": "DYE", + "song_name_reading": "だい", + "arranger": "AVTechNO!", + "lyrics": "AVTechNO!", + "music": "AVTechNO!", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 604, + "bpm": 135, + "date": "20161209", + "song_name": "トリノコシティ", + "song_name_reading": "とりのこしてぃ", + "arranger": "40mP", + "lyrics": "40mP", + "music": "40mP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 605, + "bpm": 192, + "date": "20180411", + "song_name": "え?あぁ、そう。", + "song_name_reading": "え あぁ そう", + "arranger": "papiyon", + "lyrics": "papiyon", + "music": "papiyon", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 607, + "bpm": 200, + "date": "20101125", + "song_name": "秘密警察", + "song_name_reading": "ひみつけいさつ", + "arranger": "ぶりる", + "lyrics": "ぶりる", + "music": "ぶりる", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 608, + "bpm": 175, + "date": "20140527", + "song_name": "どういうことなの!?", + "song_name_reading": "どういうことなの", + "arranger": "くちばしP", + "lyrics": "くちばしP", + "music": "くちばしP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 609, + "bpm": 163, + "date": "20150513", + "song_name": "神曲", + "song_name_reading": "かみきょく", + "arranger": "ピノキオピー", + "lyrics": "おにゅうP", + "music": "おにゅうP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 610, + "bpm": 142, + "date": "20140527", + "song_name": "Nyanyanyanyanyanyanya!", + "song_name_reading": "にゃにゃにゃにゃにゃにゃにゃ", + "arranger": "daniwell", + "lyrics": "daniwell", + "music": "daniwell", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 611, + "bpm": 114, + "date": "20101125", + "song_name": "ACUTE", + "song_name_reading": "あきゅーと", + "arranger": "黒うさ", + "lyrics": "黒うさ", + "music": "黒うさ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 612, + "bpm": 126, + "date": "20140807", + "song_name": "タイムマシン", + "song_name_reading": "たいむましん", + "arranger": "1640mP", + "lyrics": "164", + "music": "40mP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 613, + "bpm": 130, + "date": "20180831", + "song_name": "ハイハハイニ", + "song_name_reading": "はいははいに", + "arranger": "テンネン", + "lyrics": "niboshi", + "music": "テンネン", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 614, + "bpm": 120, + "date": "20140527", + "song_name": "MEGANE", + "song_name_reading": "めがね", + "arranger": "Ultra-Noob", + "lyrics": "Ultra-Noob", + "music": "Ultra-Noob", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 615, + "bpm": 140, + "date": "20180411", + "song_name": "メランコリック", + "song_name_reading": "めらんこりっく", + "arranger": "Junky", + "lyrics": "Junky", + "music": "Junky", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 616, + "bpm": 205, + "date": "20180411", + "song_name": "アンハッピーリフレイン", + "song_name_reading": "あんはっぴーりふれいん", + "arranger": "wowaka", + "lyrics": "wowaka", + "music": "wowaka", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 617, + "bpm": 175, + "date": "20180411", + "song_name": "ネトゲ廃人シュプレヒコール", + "song_name_reading": "ねとげはいじんしゅぷれひこーる", + "arranger": "さつき が てんこもり", + "lyrics": "さつき が てんこもり", + "music": "さつき が てんこもり", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 618, + "bpm": 166, + "date": "20140715", + "song_name": "鏡音八八花合戦", + "song_name_reading": "かがみねはちはちはなのかっせん", + "arranger": "モジャP", + "lyrics": "にれぎる", + "music": "モジャP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 619, + "bpm": 232, + "date": "20101125", + "song_name": "天樂", + "song_name_reading": "てんがく", + "arranger": "ゆうゆ", + "lyrics": "ゆうゆ", + "music": "ゆうゆ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 620, + "bpm": 165, + "date": "20101125", + "song_name": "リモコン", + "song_name_reading": "りもこん", + "arranger": "じーざす", + "lyrics": "じーざす", + "music": "じーざす", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 621, + "bpm": 140, + "date": "20101125", + "song_name": "Nostalogic", + "song_name_reading": "のすたろじっく", + "arranger": "yuukiss", + "lyrics": "yuukiss / rose", + "music": "yuukiss", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 622, + "bpm": 126, + "date": "20131220", + "song_name": "Stay with me", + "song_name_reading": "すていうぃずみー", + "arranger": "shu-t", + "lyrics": "shu-t", + "music": "shu-t", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 623, + "bpm": 165, + "date": "20150513", + "song_name": "Sadistic.Music∞Factory", + "song_name_reading": "さでぃすてぃっくみゅーじっくふぁくとりー", + "arranger": "cosMo@暴走P", + "lyrics": "cosMo@暴走P", + "music": "cosMo@暴走P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 624, + "bpm": 180, + "date": "20140715", + "song_name": "サマーアイドル", + "song_name_reading": "さまーあいどる", + "arranger": "OSTER project", + "lyrics": "OSTER project", + "music": "OSTER project", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 625, + "bpm": 192, + "date": "20180411", + "song_name": "ODDS&ENDS", + "song_name_reading": "おっずあんどえんず", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_09_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 626, + "bpm": 132, + "date": "20101125", + "song_name": "Weekender Girl", + "song_name_reading": "うぃーくえんだーがーる", + "arranger": "kz", + "lyrics": "kz", + "music": "八王子P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 627, + "bpm": 180, + "date": "20150312", + "song_name": "WORLD'S END UMBRELLA", + "song_name_reading": "わーるずえんどあんぶれら", + "arranger": "ハチ", + "lyrics": "ハチ", + "music": "ハチ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 628, + "bpm": 129, + "date": "20101125", + "song_name": "FREELY TOMORROW", + "song_name_reading": "ふりーりーとぅもろう", + "arranger": "Mitchie M", + "lyrics": "Mitchie M/ЯIRE", + "music": "Mitchie M", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 629, + "bpm": 220, + "date": "20140210", + "song_name": "ネガポジ*コンティニューズ", + "song_name_reading": "ねがぽじこんてぃにゅーず", + "arranger": "sasakure.UK", + "lyrics": "sasakure.UK", + "music": "sasakure.UK", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 630, + "bpm": 165, + "date": "20140918", + "song_name": "ブラック★ロックシューター", + "song_name_reading": "ぶらっくろっくしゅーたー", + "arranger": "ryo", + "lyrics": "ryo", + "music": "ryo", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 631, + "bpm": 160, + "date": "20150108", + "song_name": "夢の続き", + "song_name_reading": "ゆめのつづき", + "arranger": "Dixie Flatline", + "lyrics": "Dixie Flatline", + "music": "Dixie Flatline", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 637, + "bpm": 154, + "date": "20150312", + "song_name": "千本桜 -F edition-", + "song_name_reading": "せんぼんざくらえふえでぃしょん", + "arranger": "黒うさ", + "lyrics": "黒うさ", + "music": "黒うさ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 638, + "bpm": 150, + "date": "20180831", + "song_name": "Tell Your World", + "song_name_reading": "てるゆあわーるど", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + } + } + }, + { + "pvId": 639, + "bpm": 204, + "date": "20180411", + "song_name": "東京テディベア", + "song_name_reading": "とうきょうてでぃべあ", + "arranger": "Neru", + "lyrics": "Neru", + "music": "Neru", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 640, + "bpm": 197, + "date": "20141204", + "song_name": "夢喰い白黒バク", + "song_name_reading": "ゆめくいしろくろばく", + "arranger": "Nem", + "lyrics": "Nem", + "music": "Nem", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 641, + "bpm": 200, + "date": "20141204", + "song_name": "リンちゃんなう!", + "song_name_reading": "りんちゃんなう", + "arranger": "オワタP", + "lyrics": "sezu", + "music": "オワタP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 642, + "bpm": 132, + "date": "20140918", + "song_name": "Sweet Devil", + "song_name_reading": "すうぃーとでびる", + "arranger": "八王子P", + "lyrics": "q*Left", + "music": "八王子P", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 710, + "bpm": 76, + "date": "20161209", + "song_name": "桜ノ雨", + "song_name_reading": "さくらのあめ", + "arranger": "halyosy", + "lyrics": "halyosy", + "music": "halyosy", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + } + } + }, + { + "pvId": 722, + "bpm": 140, + "date": "20161209", + "song_name": "メテオ", + "song_name_reading": "めてお", + "arranger": "じょん", + "lyrics": "じょん", + "music": "じょん", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 723, + "bpm": 180, + "date": "20161209", + "song_name": "二次元ドリームフィーバー", + "song_name_reading": "にじげんどりーむふぃーばー", + "arranger": "PolyphonicBranch", + "lyrics": "PolyphonicBranch", + "music": "PolyphonicBranch", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_10_0", + "version": 1 + } + } + }, + { + "pvId": 724, + "bpm": 160, + "date": "20160808", + "song_name": "エンヴィキャットウォーク", + "song_name_reading": "えんヴぃきゃっとうぉーく", + "arranger": "トーマ", + "lyrics": "トーマ", + "music": "トーマ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 725, + "bpm": 195, + "date": "20161209", + "song_name": "指切り", + "song_name_reading": "ゆびきり", + "arranger": "すこっぷ", + "lyrics": "すこっぷ", + "music": "すこっぷ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 726, + "bpm": 204, + "date": "20161209", + "song_name": "からくりピエロ", + "song_name_reading": "からくりぴえろ", + "arranger": "40mP", + "lyrics": "40mP", + "music": "40mP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 727, + "bpm": 120, + "date": "20171013", + "song_name": "スキキライ", + "song_name_reading": "すききらい", + "arranger": "HoneyWorks", + "lyrics": "Gom", + "music": "Gom", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 728, + "bpm": 138, + "date": "20151203", + "song_name": "erase or zero", + "song_name_reading": "いれーすおあぜろ", + "arranger": "クリスタルP", + "lyrics": "クリスタルP", + "music": "クリスタルP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 729, + "bpm": 128, + "date": "20160616", + "song_name": "こちら、幸福安心委員会です。", + "song_name_reading": "こちらこうふくあんしんいいんかいです", + "arranger": "うたたP", + "lyrics": "鳥居羊", + "music": "うたたP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 730, + "bpm": 168, + "date": "20180831", + "song_name": "Hello, Worker", + "song_name_reading": "はろーわーかー", + "arranger": "ハヤシケイ", + "lyrics": "ハヤシケイ", + "music": "ハヤシケイ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme_extra": { + "edition": 1, + "level": "PV_LV_08_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 731, + "bpm": 110, + "date": "20151203", + "song_name": "Knife", + "song_name_reading": "ないふ", + "arranger": "れるりり", + "lyrics": "れるりり/マル", + "music": "れるりり", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 732, + "bpm": 135, + "date": "20160808", + "song_name": "アカツキアライヴァル", + "song_name_reading": "あかつきあらいヴぁる", + "arranger": "Last Note.", + "lyrics": "Last Note.", + "music": "Last Note.", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 733, + "bpm": 178, + "date": "20161209", + "song_name": "なりすましゲンガー", + "song_name_reading": "なりすましげんがー", + "arranger": "KulfiQ", + "lyrics": "KulfiQ", + "music": "KulfiQ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 734, + "bpm": 116, + "date": "20161209", + "song_name": "壊セ壊セ", + "song_name_reading": "こわせこわせ", + "arranger": "E.L.V.N", + "lyrics": "E.L.V.N", + "music": "E.L.V.N", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 736, + "bpm": 180, + "date": "20160808", + "song_name": "二息歩行", + "song_name_reading": "にそくほこう", + "arranger": "DECO*27", + "lyrics": "DECO*27", + "music": "DECO*27", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 737, + "bpm": 82, + "date": "20161209", + "song_name": "soundless voice", + "song_name_reading": "さうんどれすヴぉいす", + "arranger": "やま△", + "lyrics": "ひとしずくP", + "music": "ひとしずくP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 738, + "bpm": 228, + "date": "20160108", + "song_name": "Blackjack", + "song_name_reading": "ぶらっくじゃっく", + "arranger": "ゆちゃP", + "lyrics": "ゆちゃP", + "music": "ゆちゃP", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": {}, + "extreme": { + "edition": 0, + "level": "PV_LV_09_5", + "version": 1 + } + } + }, + { + "pvId": 739, + "bpm": 143, + "date": "20161209", + "song_name": "DECORATOR", + "song_name_reading": "でこれーたー", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 740, + "bpm": 140, + "date": "20160808", + "song_name": "Glory 3usi9", + "song_name_reading": "ぐろーりーみゅーじっく", + "arranger": "ナノウ", + "lyrics": "ナノウ", + "music": "ナノウ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 832, + "bpm": 127, + "date": "20161209", + "song_name": "Hand in Hand", + "song_name_reading": "はんどいんはんど", + "arranger": "kz", + "lyrics": "kz", + "music": "kz", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + } + } + }, + { + "pvId": 999, + "bpm": 100, + "date": "20120927", + "song_name": "ダミー", + "song_name_reading": "だみー", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_01_0", + "version": 0 + }, + "hard": {}, + "easy": {} + } + }, + { + "pvId": 254, + "bpm": 190, + "date": "20161209", + "song_name": "アマツキツネ", + "song_name_reading": "あまつきつね", + "arranger": "まらしぃ", + "lyrics": "まらしぃ", + "music": "まらしぃ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_0", + "version": 1 + } + } + }, + { + "pvId": 263, + "bpm": 145, + "date": "20161209", + "song_name": "1925", + "song_name_reading": "いちきゅうにいご", + "arranger": "T-POCKET", + "lyrics": "T-POCKET", + "music": "T-POCKET", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_04_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_06_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_02_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_08_5", + "version": 1 + } + } + }, + { + "pvId": 266, + "bpm": 210, + "date": "20170301", + "song_name": "ゴーストルール", + "song_name_reading": "ごーすとるーる", + "arranger": "Naoki Itai (MUSIC FOR MUSIC)", + "lyrics": "DECO*27", + "music": "DECO*27", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_5", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_5", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + }, + { + "pvId": 267, + "bpm": 190, + "date": "20161014", + "song_name": "砂の惑星 feat.初音ミク", + "song_name_reading": "すなのわくせい", + "arranger": "ハチ", + "lyrics": "ハチ", + "music": "ハチ", + "difficulty": { + "normal": { + "edition": 0, + "level": "PV_LV_05_5", + "version": 1 + }, + "hard": { + "edition": 0, + "level": "PV_LV_07_0", + "version": 1 + }, + "easy": { + "edition": 0, + "level": "PV_LV_03_0", + "version": 1 + }, + "extreme": { + "edition": 0, + "level": "PV_LV_09_0", + "version": 1 + } + } + } +] \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d139eab --- /dev/null +++ b/pom.xml @@ -0,0 +1,120 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.2.RELEASE + + + icu.samnya + aqua + 0.0.1-SNAPSHOT + Aqua Server + A multipurpose game server + + + 11 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-jetty + + + + + io.netty + netty-all + 4.1.43.Final + + + + + org.apache.commons + commons-lang3 + 3.9 + + + + + commons-fileupload + commons-fileupload + 1.4 + + + + org.xerial + sqlite-jdbc + 3.30.1 + + + com.github.gwenn + sqlite-dialect + 0.1.0 + + + + org.mariadb.jdbc + mariadb-java-client + runtime + + + com.h2database + h2 + test + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.security + spring-security-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/icu/samnyan/aqua/AquaServerApplication.java b/src/main/java/icu/samnyan/aqua/AquaServerApplication.java new file mode 100644 index 0000000..9931b6e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/AquaServerApplication.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua; + +import icu.samnyan.aqua.sega.aimedb.AimeDbServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; + +@SpringBootApplication +public class AquaServerApplication { + + public static void main(String[] args) throws Exception { + ConfigurableApplicationContext ctx = SpringApplication.run(AquaServerApplication.class, args); + + final AimeDbServer aimeDbServer = ctx.getBean(AimeDbServer.class); + aimeDbServer.start(); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/ApiAimeController.java b/src/main/java/icu/samnyan/aqua/api/controller/ApiAimeController.java new file mode 100644 index 0000000..eb5bce5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/ApiAimeController.java @@ -0,0 +1,30 @@ +package icu.samnyan.aqua.api.controller; + +import icu.samnyan.aqua.sega.general.dao.CardRepository; +import icu.samnyan.aqua.sega.general.model.Card; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("api/sega/aime") +public class ApiAimeController { + + private final CardRepository cardRepository; + + public ApiAimeController(CardRepository cardRepository) { + this.cardRepository = cardRepository; + } + + @PostMapping("getByAccessCode") + public Optional getByAccessCode(@RequestBody Map request) { + return cardRepository.findByLuid(request.get("accessCode")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/ApiControllerAdvice.java b/src/main/java/icu/samnyan/aqua/api/controller/ApiControllerAdvice.java new file mode 100644 index 0000000..8bfeb1d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/ApiControllerAdvice.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.api.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.NoSuchElementException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestControllerAdvice(basePackages = "icu.samnyan.aqua.api") +public class ApiControllerAdvice { + + @ExceptionHandler(NoSuchElementException.class) + public ResponseEntity noSuchElement() { + return ResponseEntity.notFound().build(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/chuni/amazon/ApiAmazonController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/chuni/amazon/ApiAmazonController.java new file mode 100644 index 0000000..84c7c6c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/chuni/amazon/ApiAmazonController.java @@ -0,0 +1,148 @@ +package icu.samnyan.aqua.api.controller.sega.chuni.amazon; + +import com.fasterxml.jackson.core.type.TypeReference; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.ProfileResp; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.RatingItem; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.RecentResp; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.ScoreResp; +import icu.samnyan.aqua.api.util.ApiMapper; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.Level; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.Music; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCourse; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMusicDetail; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; +import icu.samnyan.aqua.sega.chunithm.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("api/game/chuni/amazon") +public class ApiAmazonController { + + private final ApiMapper mapper; + + private final UserDataService userDataService; + private final UserPlaylogService userPlaylogService; + private final UserMusicDetailService userMusicDetailService; + private final UserCourseService userCourseService; + + private final GameMusicService gameMusicService; + + @Autowired + public ApiAmazonController(ApiMapper mapper, UserDataService userDataService, UserPlaylogService userPlaylogService, UserMusicDetailService userMusicDetailService, UserCourseService userCourseService, GameMusicService gameMusicService) { + this.mapper = mapper; + this.userDataService = userDataService; + this.userPlaylogService = userPlaylogService; + this.userMusicDetailService = userMusicDetailService; + this.userCourseService = userCourseService; + this.gameMusicService = gameMusicService; + } + + /** + * Get Basic info + * + * @return + */ + @GetMapping("profile") + public ProfileResp getProfile(@RequestParam String aimeId) { + ProfileResp resp = mapper.convert(userDataService.getUserByExtId(aimeId).orElseThrow(), new TypeReference<>() { + }); + UserCourse course = userCourseService.getByUser(aimeId) + .stream() + .filter(UserCourse::isClear) + .max(Comparator.comparingInt(UserCourse::getClassId)) + .orElseGet(() -> new UserCourse(0)); + resp.setCourseClass(course.getClassId()); + return resp; + } + + @GetMapping("recent") + public List getRecentPlay(@RequestParam String aimeId) { + return mapper.convert(userPlaylogService.getRecentPlays(aimeId), new TypeReference<>() { + }); + } + + @GetMapping("rating") + public List getRating(@RequestParam String aimeId) { + + Map musicMap = gameMusicService.getIdMap(); + List details = userMusicDetailService.getByUser(aimeId); + + List result = new ArrayList<>(); + for (UserMusicDetail detail : details) { + Music music = musicMap.get(detail.getMusicId()); + Level level = music.getLevels().get(detail.getLevel()); + int levelBase = level.getLevel() * 100 + level.getLevelDecimal(); + int score = detail.getScoreMax(); + int rating = calculateRating(levelBase, score); + result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating)); + } + + return result.stream() + .filter(detail -> detail.getLevel() != 4) + .sorted(Comparator.comparingInt(RatingItem::getRating).reversed()) + .limit(30) + .collect(Collectors.toList()); + } + + @GetMapping("rating/recent") + public List getRecentRating(@RequestParam String aimeId) { + Map musicMap = gameMusicService.getIdMap(); + List logList = userPlaylogService.getRecent30Plays(aimeId); + + List result = new ArrayList<>(); + for (UserPlaylog log : logList) { + Music music = musicMap.get(log.getMusicId()); + Level level = music.getLevels().get(log.getLevel()); + int levelBase = level.getLevel() * 100 + level.getLevelDecimal(); + int score = log.getScore(); + int rating = calculateRating(levelBase, score); + + result.add(new RatingItem(music.getMusicId(), music.getName(), music.getArtistName(), level.getDiff(), score, levelBase, rating)); + } + List keys = new ArrayList<>(); + + return result.stream() + .filter(detail -> detail.getLevel() != 4) + .sorted(Comparator.comparingInt(RatingItem::getRating).reversed()) + .limit(10) + .collect(Collectors.toList()); + } + + @GetMapping("score/list") + public List getScoreList(@RequestParam String aimeId) { + return mapper.convert(userMusicDetailService.getByUser(aimeId), new TypeReference<>() { + }); + } + + @GetMapping("music") + public List getMusicList() { + return gameMusicService.getAll(); + } + + @PostMapping("music/import") + public List addMusic(@RequestBody List musicList) { + musicList.forEach(music -> music.getLevels().forEach((integer, level) -> level.setMusic(music))); + return gameMusicService.saveAll(musicList); + } + + private int calculateRating(int levelBase, int score) { + if (score >= 1007500) return levelBase + 200; + if (score >= 1005000) return levelBase + 150 + (score - 1005000) * 10 / 500; + if (score >= 1000000) return levelBase + 100 + (score - 1000000) * 5 / 500; + if (score >= 975000) return levelBase + (score - 975000) * 2 / 500; + if (score >= 950000) return levelBase - 150 + (score - 950000) * 3 / 500; + if (score >= 925000) return levelBase - 300 + (score - 925000) * 3 / 500; + if (score >= 900000) return levelBase - 500 + (score - 900000) * 4 / 500; + return 0; + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaGameDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaGameDataController.java new file mode 100644 index 0000000..e9850e9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaGameDataController.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.api.controller.sega.diva; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("api/game/diva/data") +public class ApiDivaGameDataController { + + @GetMapping(value = "musicList", produces = MediaType.APPLICATION_JSON_VALUE) + public byte[] musicList() throws IOException { + return Files.readAllBytes(Paths.get("data/diva_musiclist.json")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaManageController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaManageController.java new file mode 100644 index 0000000..5d1fdc2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaManageController.java @@ -0,0 +1,113 @@ +package icu.samnyan.aqua.api.controller.sega.diva; + +import icu.samnyan.aqua.api.model.OkResponse; +import icu.samnyan.aqua.api.model.req.sega.diva.ModuleEntry; +import icu.samnyan.aqua.api.model.req.sega.diva.PvListEntry; +import icu.samnyan.aqua.api.model.req.sega.diva.PvListRequest; +import icu.samnyan.aqua.sega.diva.dao.gamedata.*; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.gamedata.*; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("api/game/diva/manage") +public class ApiDivaManageController { + + private final PvEntryRepository pvEntryRepository; + private final DivaModuleRepository moduleRepository; + private final DivaCustomizeRepository customizeRepository; + private final FestaRepository festaRepository; + private final ContestRepository contestRepository; + + public ApiDivaManageController(PvEntryRepository pvEntryRepository, DivaModuleRepository moduleRepository, DivaCustomizeRepository customizeRepository, FestaRepository festaRepository, ContestRepository contestRepository) { + this.pvEntryRepository = pvEntryRepository; + this.moduleRepository = moduleRepository; + this.customizeRepository = customizeRepository; + this.festaRepository = festaRepository; + this.contestRepository = contestRepository; + } + + @PostMapping("pvList") + public List updatePvList(@RequestBody PvListRequest request) { + request.getEasy().forEach(x -> savePv(x, Difficulty.EASY)); + request.getNormal().forEach(x -> savePv(x, Difficulty.NORMAL)); + request.getHard().forEach(x -> savePv(x, Difficulty.HARD)); + request.getExtreme().forEach(x -> savePv(x, Difficulty.EXTREME)); + return pvEntryRepository.findAll(); + } + + @PostMapping("module") + public List updateModuleList(@RequestBody List request) { + List moduleList = new ArrayList<>(); + request.forEach(x -> moduleList.add(new DivaModule(x.getID(), x.getName(), x.getPrice(), x.getReleaseDate(), x.getEndDate(), x.getSortOrder()))); + return moduleRepository.saveAll(moduleList); + } + + @PostMapping("item") + public List updateItemList(@RequestBody List request) { + List itemList = new ArrayList<>(); + request.forEach(x -> itemList.add(new DivaCustomize(x.getID(), x.getName(), x.getPrice(), x.getReleaseDate(), x.getEndDate(), x.getSortOrder()))); + return customizeRepository.saveAll(itemList); + } + + private void savePv(PvListEntry x, Difficulty difficulty) { + pvEntryRepository.save(new PvEntry(x.getPVID(), + difficulty, + x.getVersion(), + Edition.fromValue(x.getEdition()), + x.getAdvDemo().getStart(), + x.getAdvDemo().getEnd(), + x.getPlayable().getStart(), + x.getPlayable().getEnd() + )); + } + + @GetMapping("festa") + public List getFesta() { + return festaRepository.findAll(); + } + + @PutMapping("festa") + public Festa updateFesta(@RequestBody Festa festa) { + return festaRepository.save(festa); + } + + @DeleteMapping("festa/{id}") + public OkResponse getFesta(@PathVariable int id) { + festaRepository.deleteById(id); + return new OkResponse("Deleted " + id); + } + + @GetMapping("contest") + public List getContest() { + return contestRepository.findAll(); + } + + @PutMapping("contest") + public Contest updateContest(@RequestBody Contest contest) { + return contestRepository.save(contest); + } + + @DeleteMapping("contest/{id}") + public OkResponse deleteContest(@PathVariable int id) { + contestRepository.deleteById(id); + return new OkResponse("Deleted " + id); + } + + @GetMapping("module") + public List getModule() { + return moduleRepository.findAll(); + } + + @GetMapping("customize") + public List getCustomize() { + return customizeRepository.findAll(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java new file mode 100644 index 0000000..986b218 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java @@ -0,0 +1,183 @@ +package icu.samnyan.aqua.api.controller.sega.diva; + +import icu.samnyan.aqua.api.model.ReducedPageResponse; +import icu.samnyan.aqua.sega.diva.dao.userdata.*; +import icu.samnyan.aqua.sega.diva.model.userdata.*; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("api/game/diva") +public class ApiDivaPlayerDataController { + + private final PlayerProfileService playerProfileService; + + private final PlayLogRepository playLogRepository; + private final PlayerPvRecordRepository playerPvRecordRepository; + private final PlayerPvCustomizeRepository playerPvCustomizeRepository; + private final PlayerModuleRepository playerModuleRepository; + private final PlayerCustomizeRepository playerCustomizeRepository; + + public ApiDivaPlayerDataController(PlayerProfileService playerProfileService, PlayLogRepository playLogRepository, PlayerPvRecordRepository playerPvRecordRepository, PlayerPvCustomizeRepository playerPvCustomizeRepository, PlayerModuleRepository playerModuleRepository, PlayerCustomizeRepository playerCustomizeRepository) { + this.playerProfileService = playerProfileService; + this.playLogRepository = playLogRepository; + this.playerPvRecordRepository = playerPvRecordRepository; + this.playerPvCustomizeRepository = playerPvCustomizeRepository; + this.playerModuleRepository = playerModuleRepository; + this.playerCustomizeRepository = playerCustomizeRepository; + } + + @GetMapping("playerInfo") + public Optional getPlayerInfo(@RequestParam int pdId) { + return playerProfileService.findByPdId(pdId); + } + + @PutMapping("playerInfo/playerName") + public PlayerProfile updateName(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setPlayerName((String) request.get("playerName")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/title") + public PlayerProfile updateTitle(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setLevelTitle((String) request.get("title")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/plate") + public PlayerProfile updatePlate(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setPlateId((Integer) request.get("plateId")); + profile.setPlateEffectId((Integer) request.get("plateEffectId")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/commonModule") + public PlayerProfile updateModule(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setCommonModule((String) request.get("commonModule")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/commonCustomize") + public PlayerProfile updateCustomize(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setCommonCustomizeItems((String) request.get("commonCustomize")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/commonSkin") + public PlayerProfile updateSkin(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setCommonSkin((Integer) request.get("skinId")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/myList") + public PlayerProfile updateMyList(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + switch ((Integer) request.get("myListId")) { + case 0: + profile.setMyList0((String) request.get("myListData")); + break; + case 1: + profile.setMyList1((String) request.get("myListData")); + break; + case 2: + profile.setMyList2((String) request.get("myListData")); + break; + } + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/se") + public PlayerProfile updateSe(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setButtonSe((Integer) request.get("buttonSe")); + profile.setChainSlideSe((Integer) request.get("chainSlideSe")); + profile.setSlideSe((Integer) request.get("slideSe")); + profile.setSliderTouchSe((Integer) request.get("sliderTouchSe")); + return playerProfileService.save(profile); + } + + @PutMapping("playerInfo/display") + public PlayerProfile updateDisplay(@RequestBody Map request) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + profile.setShowInterimRanking((Boolean) request.get("showInterimRanking")); + profile.setShowClearStatus((Boolean) request.get("showClearStatus")); + profile.setShowClearBorder((Boolean) request.get("showClearBorder")); + profile.setShowRgoSetting((Boolean) request.get("showRgoSetting")); + return playerProfileService.save(profile); + } + + @GetMapping("playLog") + public ReducedPageResponse getPlayLogs(@RequestParam int pdId, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "10") int size) { + Page playLogs = playLogRepository.findByPdId_PdIdOrderByDateTimeDesc(pdId, PageRequest.of(page, size)); + return new ReducedPageResponse<>(playLogs.getContent(), playLogs.getPageable().getPageNumber(), playLogs.getTotalPages(), playLogs.getTotalElements()); + } + + /** + * PvRecord + */ + + @GetMapping("pvRecord") + public ReducedPageResponse getPvRecords(@RequestParam int pdId, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "10") int size) { + Page pvRecords = playerPvRecordRepository.findByPdId_PdIdOrderByPvId(pdId, PageRequest.of(page, size)); + return new ReducedPageResponse<>(pvRecords.getContent(), pvRecords.getPageable().getPageNumber(), pvRecords.getTotalPages(), pvRecords.getTotalElements()); + } + + @GetMapping("pvRecord/{pvId}") + public Map getPvRecord(@RequestParam int pdId, @PathVariable int pvId) { + Map resultMap = new HashMap<>(); + resultMap.put("records", playerPvRecordRepository.findByPdId_PdIdAndPvId(pdId, pvId)); + playerPvCustomizeRepository.findByPdId_PdIdAndPvId(pdId, pvId).ifPresent(x -> resultMap.put("customize", x)); + return resultMap; + } + + @PutMapping("pvRecord/{pvId}") + public PlayerPvCustomize updatePvCustomize(@RequestBody Map request, @PathVariable int pvId) { + PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); + PlayerPvCustomize playerPvCustomize = playerPvCustomizeRepository.findByPdIdAndPvId(profile, pvId) + .orElseGet(() -> new PlayerPvCustomize(profile, pvId)); + playerPvCustomize.setModule((String) request.get("module")); + playerPvCustomize.setCustomize((String) request.get("customize")); + playerPvCustomize.setCustomizeFlag((String) request.get("customizeFlag")); + playerPvCustomize.setSkin((Integer) request.get("skin")); + playerPvCustomize.setButtonSe((Integer) request.get("buttonSe")); + playerPvCustomize.setSlideSe((Integer) request.get("slideSe")); + playerPvCustomize.setChainSlideSe((Integer) request.get("chainSlideSe")); + playerPvCustomize.setSliderTouchSe((Integer) request.get("sliderTouchSe")); + return playerPvCustomizeRepository.save(playerPvCustomize); + } + + @GetMapping("module") + public ReducedPageResponse getModules(@RequestParam int pdId, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "10") int size) { + Page modules = playerModuleRepository.findByPdId_PdId(pdId, PageRequest.of(page, size)); + return new ReducedPageResponse<>(modules.getContent(), modules.getPageable().getPageNumber(), modules.getTotalPages(), modules.getTotalElements()); + } + + @GetMapping("customize") + public ReducedPageResponse getCustomizes(@RequestParam int pdId, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "10") int size) { + Page customizes = playerCustomizeRepository.findByPdId_PdId(pdId, PageRequest.of(page, size)); + return new ReducedPageResponse<>(customizes.getContent(), customizes.getPageable().getPageNumber(), customizes.getTotalPages(), customizes.getTotalElements()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/OkResponse.java b/src/main/java/icu/samnyan/aqua/api/model/OkResponse.java new file mode 100644 index 0000000..9b58e28 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/OkResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.api.model; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class OkResponse { + private String message = "ok"; + + public OkResponse(String message) { + this.message = message; + } + + public OkResponse() { + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/ReducedPageResponse.java b/src/main/java/icu/samnyan/aqua/api/model/ReducedPageResponse.java new file mode 100644 index 0000000..3eed2fc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/ReducedPageResponse.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.api.model; + +import lombok.Getter; +import lombok.Setter; + +import java.util.Collection; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ReducedPageResponse { + private Collection content; + private Integer page; + private Integer totalPages; + private Long totalElements; + + public ReducedPageResponse(Collection content, Integer page, Integer totalPages, Long totalElements) { + this.content = content; + this.page = page; + this.totalPages = totalPages; + this.totalElements = totalElements; + } +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/DatePair.java b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/DatePair.java new file mode 100644 index 0000000..3e0fa29 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/DatePair.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.api.model.req.sega.diva; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DatePair { + @JsonProperty("Start") + private LocalDateTime Start; + @JsonProperty("End") + private LocalDateTime End; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/ModuleEntry.java b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/ModuleEntry.java new file mode 100644 index 0000000..5b9295e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/ModuleEntry.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.api.model.req.sega.diva; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ModuleEntry { + @JsonProperty("ID") + private int ID; + @JsonProperty("Name") + private String Name; + @JsonProperty("Price") + private int Price; + @JsonProperty("ReleaseDate") + private LocalDateTime ReleaseDate; + @JsonProperty("EndDate") + private LocalDateTime EndDate; + @JsonProperty("SortOrder") + private int SortOrder; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListEntry.java b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListEntry.java new file mode 100644 index 0000000..8cb7aca --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListEntry.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.api.model.req.sega.diva; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PvListEntry { + @JsonProperty("PVID") + private int PVID; + @JsonProperty("Version") + private int Version; + @JsonProperty("Edition") + private int Edition; + @JsonProperty("AdvDemo") + private DatePair AdvDemo; + @JsonProperty("Playable") + private DatePair Playable; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListRequest.java b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListRequest.java new file mode 100644 index 0000000..e89eef7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/req/sega/diva/PvListRequest.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.api.model.req.sega.diva; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PvListRequest { + @JsonProperty("CreationDate") + private LocalDateTime CreationDate; + @JsonProperty("Easy") + private List Easy; + @JsonProperty("Normal") + private List Normal; + @JsonProperty("Hard") + private List Hard; + @JsonProperty("Extreme") + private List Extreme; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ProfileResp.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ProfileResp.java new file mode 100644 index 0000000..6bc83b6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ProfileResp.java @@ -0,0 +1,60 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProfileResp { + + private String userName; + + private int level; + + private String exp; + + private long point; + + private long totalPoint; + + private int playCount; + + private int playerRating; + + private int highestRating; + + private int nameplateId; + + private int frameId; + + private int characterId; + + private int trophyId; + + private int totalMapNum; + + private long totalHiScore; + + private long totalBasicHighScore; + + private long totalAdvancedHighScore; + + private long totalExpertHighScore; + + private long totalMasterHighScore; + + private int friendCount; + + private LocalDateTime firstPlayDate; + + private LocalDateTime lastPlayDate; + + private int courseClass; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RatingItem.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RatingItem.java new file mode 100644 index 0000000..6883b03 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RatingItem.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RatingItem { + + private int musicId; + + private String musicName; + + private String artistName; + + private int level; + + private int score; + + private int ratingBase; + + private int rating; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RecentResp.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RecentResp.java new file mode 100644 index 0000000..aeb3b76 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/RecentResp.java @@ -0,0 +1,87 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RecentResp { + + private LocalDateTime playDate; + + private LocalDateTime userPlayDate; + + private int musicId; + + private int level; + + private int customId; + + private int playedCustom1; + + private int playedCustom2; + + private int playedCustom3; + + private int track; + + private int score; + + private int rank; + + private int maxCombo; + + private int maxChain; + + private int rateTap; + + private int rateHold; + + private int rateSlide; + + private int rateAir; + + private int rateFlick; + + private int judgeGuilty; + + private int judgeAttack; + + private int judgeJustice; + + private int judgeCritical; + + private int playerRating; + + @JsonProperty("isNewRecord") + private boolean isNewRecord; + + @JsonProperty("isFullCombo") + private boolean isFullCombo; + + private int fullChainKind; + + @JsonProperty("isAllJustice") + private boolean isAllJustice; + + private int characterId; + + private int skillId; + + private int playKind; + + @JsonProperty("isClear") + private boolean isClear; + + private int skillLevel; + + private int skillEffect; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ScoreResp.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ScoreResp.java new file mode 100644 index 0000000..7aa40b9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/ScoreResp.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ScoreResp { + + private int musicId; + + private int level; + + private int playCount; + + private int scoreMax; + + private int resRequestCount; + + private int resAcceptCount; + + private int resSuccessCount; + + private int missCount; + + private int maxComboCount; + + @JsonProperty("isFullCombo") + private boolean isFullCombo; + + @JsonProperty("isAllJustice") + private boolean isAllJustice; + + @JsonProperty("isSuccess") + private boolean isSuccess; + + private int fullChain; + + private int maxChain; + + private int scoreRank; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PlayerInfo.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PlayerInfo.java new file mode 100644 index 0000000..a9965b8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PlayerInfo.java @@ -0,0 +1,13 @@ +package icu.samnyan.aqua.api.model.resp.sega.diva; + +import lombok.Data; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +public class PlayerInfo { + private int pdId; + private String playerName; + private int vocaloidPoints; +} diff --git a/src/main/java/icu/samnyan/aqua/api/util/ApiMapper.java b/src/main/java/icu/samnyan/aqua/api/util/ApiMapper.java new file mode 100644 index 0000000..2a9588d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/util/ApiMapper.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.api.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ApiMapper { + + private final ObjectMapper mapper; + + public ApiMapper() { + mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + SimpleModule module = new SimpleModule(); + mapper.registerModule(new JavaTimeModule()); + mapper.registerModule(module); + } + + public String write(Object o) throws JsonProcessingException { + return mapper.writeValueAsString(o); + + } + + public T convert(Object object, TypeReference toClass) { + return mapper.convertValue(object, toClass); + } +} diff --git a/src/main/java/icu/samnyan/aqua/security/config/SecurityConfig.java b/src/main/java/icu/samnyan/aqua/security/config/SecurityConfig.java new file mode 100644 index 0000000..669b5b4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/security/config/SecurityConfig.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.security.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .headers().disable() + .csrf().disable() + .authorizeRequests() + .anyRequest().permitAll(); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbDecoder.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbDecoder.java new file mode 100644 index 0000000..c061301 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbDecoder.java @@ -0,0 +1,91 @@ +package icu.samnyan.aqua.sega.aimedb; + +import icu.samnyan.aqua.sega.aimedb.exception.InvalidRequestException; +import icu.samnyan.aqua.sega.aimedb.util.Encryption; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class AimeDbDecoder extends ByteToMessageDecoder { + + private static final Logger logger = LoggerFactory.getLogger(AimeDbDecoder.class); + + private int length = 0; + + /** + * Decrypt the incoming request including frame management + * + * @param ctx + * @param in + * @param out + * @throws Exception + */ + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + if (in.readableBytes() < 16) { + return; + } + if (length == 0) { + length = getLength(in); + } + + if (in.readableBytes() < length) { + return; + } + + // Create a byte array to store the encrypted data + ByteBuf result = Encryption.decrypt(in.readBytes(length)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", ((Short) result.getShortLE(0x04)).intValue()); + resultMap.put("data", result); + + logger.debug("Aime Server Request Type: " + resultMap.get("type")); + + out.add(resultMap); + } + + /** + * Get the length from request + * + * @param in the request + * @return int the length of this request + * @throws InvalidRequestException + * @throws IllegalBlockSizeException + * @throws InvalidKeyException + * @throws BadPaddingException + * @throws NoSuchAlgorithmException + * @throws NoSuchPaddingException + */ + private int getLength(ByteBuf in) throws InvalidRequestException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException { + int currentPos = in.readerIndex(); + ByteBuf result = Encryption.decrypt(in); + // Check the header + if (result.getByte(0) != 0x3e) { + throw new InvalidRequestException(); + } + + // Read the length from offset 6 + + return result.getShortLE(currentPos + 6); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbEncoder.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbEncoder.java new file mode 100644 index 0000000..80aaf22 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbEncoder.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.aimedb; + +import icu.samnyan.aqua.sega.aimedb.util.Encryption; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class AimeDbEncoder extends MessageToByteEncoder { + @Override + protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { + + if (msg instanceof ByteBuf) { + ByteBuf resp = ((ByteBuf) msg); + resp.writerIndex(0); + resp.writeShortLE(0xa13e); + resp.writeShortLE(0x3087); + resp.setShortLE(0x0006, resp.capacity()); + ByteBuf encryptedResp = Encryption.encrypt(resp); + ctx.writeAndFlush(encryptedResp); + } + + } +} + diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java new file mode 100644 index 0000000..60a796c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java @@ -0,0 +1,96 @@ +package icu.samnyan.aqua.sega.aimedb; + +import icu.samnyan.aqua.sega.aimedb.handler.Impl.*; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ + +@Component +@Scope("prototype") +public class AimeDbRequestHandler extends ChannelInboundHandlerAdapter { + + private static final Logger logger = LoggerFactory.getLogger(AimeDbRequestHandler.class); + + private final CampaignHandler campaignHandler; + private final FeliCaLookupHandler feliCaLookupHandler; + private final GoodbyeHandler goodbyeHandler; + private final HelloHandler helloHandler; + private final LogHandler logHandler; + private final LookupHandler lookupHandler; + private final Lookup2Handler lookup2Handler; + private final RegisterHandler registerHandler; + + @Autowired + public AimeDbRequestHandler(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler) { + this.campaignHandler = campaignHandler; + this.feliCaLookupHandler = feliCaLookupHandler; + this.goodbyeHandler = goodbyeHandler; + this.helloHandler = helloHandler; + this.logHandler = logHandler; + this.lookupHandler = lookupHandler; + this.lookup2Handler = lookup2Handler; + this.registerHandler = registerHandler; + } + + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + if (msg instanceof Map) { + int type = ((int) ((Map) msg).get("type")); + ByteBuf data = (ByteBuf) ((Map) msg).get("data"); + switch (type) { + case 0x0001: + feliCaLookupHandler.handle(ctx, data); + break; + case 0x0004: + lookupHandler.handle(ctx, data); + break; + case 0x0005: + registerHandler.handle(ctx, data); + break; + case 0x0009: + logHandler.handle(ctx, data); + break; + case 0x000b: + campaignHandler.handle(ctx, data); + break; + case 0x000d: + registerHandler.handle(ctx, data); + break; + case 0x000f: + lookup2Handler.handle(ctx, data); + break; + case 0x0064: + helloHandler.handle(ctx, data); + break; + case 0x0066: + goodbyeHandler.handle(ctx, data); + break; + } + } + + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + logger.info("Connection closed"); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServer.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServer.java new file mode 100644 index 0000000..ca854b0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServer.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.aimedb; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.net.InetSocketAddress; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class AimeDbServer { + + private static final Logger logger = LoggerFactory.getLogger(AimeDbServer.class); + private final AimeDbServerInitializer aimeDbServerInitializer; + private final int port; + private final boolean enableAimeDb; + + public AimeDbServer(AimeDbServerInitializer aimeDbServerInitializer, + @Value("${aimedb.server.port}") int port, + @Value("${aimedb.server.enable}") boolean enableAimeDb) { + this.aimeDbServerInitializer = aimeDbServerInitializer; + this.port = port; + this.enableAimeDb = enableAimeDb; + } + + public void start() throws Exception { + if (enableAimeDb) { + ServerBootstrap bootstrap = new ServerBootstrap(); + EventLoopGroup boss = new NioEventLoopGroup(); + EventLoopGroup work = new NioEventLoopGroup(); + + bootstrap.group(boss, work) + .handler(new LoggingHandler(LogLevel.DEBUG)) + .channel(NioServerSocketChannel.class) + .childHandler(aimeDbServerInitializer) + .option(ChannelOption.SO_BACKLOG, 128); + + ChannelFuture f = bootstrap.bind(new InetSocketAddress(port)).sync(); + logger.info("Aime DB start up on port : " + port); + f.channel().closeFuture(); + } + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java new file mode 100644 index 0000000..e3c09b2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.aimedb; + +import icu.samnyan.aqua.sega.aimedb.handler.Impl.*; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class AimeDbServerInitializer extends ChannelInitializer { + + private final CampaignHandler campaignHandler; + private final FeliCaLookupHandler feliCaLookupHandler; + private final GoodbyeHandler goodbyeHandler; + private final HelloHandler helloHandler; + private final LogHandler logHandler; + private final LookupHandler lookupHandler; + private final Lookup2Handler lookup2Handler; + private final RegisterHandler registerHandler; + + @Autowired + public AimeDbServerInitializer(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler) { + this.campaignHandler = campaignHandler; + + this.feliCaLookupHandler = feliCaLookupHandler; + this.goodbyeHandler = goodbyeHandler; + this.helloHandler = helloHandler; + this.logHandler = logHandler; + this.lookupHandler = lookupHandler; + this.lookup2Handler = lookup2Handler; + this.registerHandler = registerHandler; + } + + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast("encoder", new AimeDbEncoder()); + pipeline.addLast("decoder", new AimeDbDecoder()); + pipeline.addLast("handler", new AimeDbRequestHandler(campaignHandler, feliCaLookupHandler, goodbyeHandler, helloHandler, logHandler, lookupHandler, lookup2Handler, registerHandler)); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/exception/InvalidRequestException.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/exception/InvalidRequestException.java new file mode 100644 index 0000000..945e4a4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/exception/InvalidRequestException.java @@ -0,0 +1,7 @@ +package icu.samnyan.aqua.sega.aimedb.exception; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class InvalidRequestException extends Exception { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/BaseHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/BaseHandler.java new file mode 100644 index 0000000..4e9580b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/BaseHandler.java @@ -0,0 +1,13 @@ +package icu.samnyan.aqua.sega.aimedb.handler; + +import com.fasterxml.jackson.core.JsonProcessingException; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface BaseHandler { + + void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/CampaignHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/CampaignHandler.java new file mode 100644 index 0000000..a167c68 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/CampaignHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CampaignHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CampaignHandler.class); + + private final LogMapper logMapper; + + @Autowired + public CampaignHandler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "campaign"); + + + logger.info("Request: " + logMapper.write(requestMap)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "campaign"); + resultMap.put("status", 1); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0200]); + respSrc.setShortLE(0x0004, 0x000c); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + + ctx.writeAndFlush(respSrc); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/FeliCaLookupHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/FeliCaLookupHandler.java new file mode 100644 index 0000000..cd54e64 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/FeliCaLookupHandler.java @@ -0,0 +1,66 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class FeliCaLookupHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(FeliCaLookupHandler.class); + + private final LogMapper logMapper; + + @Autowired + public FeliCaLookupHandler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "felica_lookup"); + requestMap.put("idm", msg.slice(0x0020, 0x0028 - 0x0020)); + requestMap.put("pmm", msg.slice(0x0028, 0x0030 - 0x0028)); + + logger.info("Request: " + logMapper.write(requestMap)); + + + // Get the decimal represent of the hex value, same from minime + StringBuilder accessCode = new StringBuilder(String.valueOf(((ByteBuf) requestMap.get("idm")).getLong(0))); + while (accessCode.length() < 20) { + accessCode.insert(0, "0"); + } + + + Map resultMap = new HashMap<>(); + resultMap.put("type", "felica_lookup"); + resultMap.put("status", 1); + resultMap.put("accessCode", accessCode); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0030]); + respSrc.setShortLE(0x0004, 0x0003); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + respSrc.setBytes(0x0024, ByteBufUtil.decodeHexDump(accessCode)); + + ctx.writeAndFlush(respSrc); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/GoodbyeHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/GoodbyeHandler.java new file mode 100644 index 0000000..a008b1c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/GoodbyeHandler.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GoodbyeHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GoodbyeHandler.class); + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = new HashMap<>(); + requestMap.put("type", "goodbye"); + + + logger.info("Request: " + new ObjectMapper().writeValueAsString(requestMap)); + ctx.flush(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/HelloHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/HelloHandler.java new file mode 100644 index 0000000..5c81e29 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/HelloHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class HelloHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(HelloHandler.class); + + private final LogMapper logMapper; + + @Autowired + public HelloHandler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "hello"); + + + logger.info("Request: " + logMapper.write(requestMap)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "hello"); + resultMap.put("status", 1); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0020]); + respSrc.setShortLE(0x0004, 0x0065); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + + ctx.writeAndFlush(respSrc); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LogHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LogHandler.java new file mode 100644 index 0000000..fa1e59b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LogHandler.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class LogHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(LogHandler.class); + + private final LogMapper logMapper; + + @Autowired + public LogHandler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "log"); + + + logger.info("Request: " + logMapper.write(requestMap)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "log"); + resultMap.put("status", 1); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0020]); + respSrc.setShortLE(0x0004, 0x000a); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + + ctx.writeAndFlush(respSrc); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/Lookup2Handler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/Lookup2Handler.java new file mode 100644 index 0000000..629f439 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/Lookup2Handler.java @@ -0,0 +1,70 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import icu.samnyan.aqua.sega.general.dao.CardRepository; +import icu.samnyan.aqua.sega.general.model.Card; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class Lookup2Handler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(Lookup2Handler.class); + + private final LogMapper logMapper; + + private final CardRepository cardRepository; + + @Autowired + public Lookup2Handler(LogMapper logMapper, CardRepository cardRepository) { + this.logMapper = logMapper; + this.cardRepository = cardRepository; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "lookup2"); + requestMap.put("luid", ByteBufUtil.hexDump(msg.slice(0x0020, 0x002a - 0x0020))); + + logger.info("Request: " + logMapper.write(requestMap)); + + long aimeId = -1; + Optional card = cardRepository.findByLuid((String) requestMap.get("luid")); + if (card.isPresent()) { + aimeId = card.get().getExtId(); + } + + Map resultMap = new HashMap<>(); + resultMap.put("type", "lookup2"); + resultMap.put("status", 1); + resultMap.put("aimeId", aimeId); + resultMap.put("registerLevel", "none"); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0130]); + respSrc.setShortLE(0x0004, 0x0010); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + respSrc.setLongLE(0x0020, (long) resultMap.get("aimeId")); + respSrc.setByte(0x0024, 0); + + ctx.writeAndFlush(respSrc); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LookupHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LookupHandler.java new file mode 100644 index 0000000..f1290b8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/LookupHandler.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Mifare Card lookup? idk + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class LookupHandler implements BaseHandler { + + private final LogMapper logMapper; + + @Autowired + public LookupHandler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) { + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java new file mode 100644 index 0000000..623b15f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java @@ -0,0 +1,72 @@ +package icu.samnyan.aqua.sega.aimedb.handler.Impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import icu.samnyan.aqua.sega.general.dao.CardRepository; +import icu.samnyan.aqua.sega.general.model.Card; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class RegisterHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(RegisterHandler.class); + + private final LogMapper logMapper; + + private final CardRepository cardRepository; + + @Autowired + public RegisterHandler(LogMapper logMapper, CardRepository cardRepository) { + this.logMapper = logMapper; + this.cardRepository = cardRepository; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "register"); + requestMap.put("luid", ByteBufUtil.hexDump(msg.slice(0x0020, 0x002a - 0x0020))); + + logger.info("Request: " + logMapper.write(requestMap)); + + Card card = new Card(); + card.setLuid((String) requestMap.get("luid")); + card.setExtId(ThreadLocalRandom.current().nextLong(99999999)); + card.setRegisterTime(LocalDateTime.now()); + card.setAccessTime(LocalDateTime.now()); + + cardRepository.save(card); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "register"); + resultMap.put("status", 1); + resultMap.put("aimeId", card.getExtId()); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0030]); + respSrc.setShortLE(0x0004, 0x0006); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + respSrc.setLongLE(0x0020, (long) resultMap.get("aimeId")); + + ctx.writeAndFlush(respSrc); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/util/AimeDbUtil.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/AimeDbUtil.java new file mode 100644 index 0000000..5982531 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/AimeDbUtil.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.aimedb.util; + +import io.netty.buffer.ByteBuf; + +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class AimeDbUtil { + + public static Map getBaseInfo(ByteBuf in) { + Map resultMap = new HashMap<>(); + resultMap.put("gameId", in.toString(0x000a, 0x000e - 0x000a, StandardCharsets.US_ASCII)); + resultMap.put("keychipId", in.toString(0x0014, 0x001f - 0x0014, StandardCharsets.US_ASCII)); + return resultMap; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/util/Encryption.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/Encryption.java new file mode 100644 index 0000000..44f94be --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/Encryption.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.aimedb.util; + +import icu.samnyan.aqua.sega.util.ByteBufUtil; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class Encryption { + + private static final Logger logger = LoggerFactory.getLogger(Encryption.class); + + private static SecretKeySpec KEY = new SecretKeySpec("Copyright(C)SEGA".getBytes(StandardCharsets.UTF_8), "AES"); + + public static ByteBuf decrypt(ByteBuf src) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, KEY); + + return Unpooled.copiedBuffer(cipher.doFinal(ByteBufUtil.toBytes(src))); + } + + public static ByteBuf encrypt(ByteBuf src) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, KEY); + byte[] bytes = cipher.doFinal(ByteBufUtil.toAllBytes(src)); + return Unpooled.copiedBuffer(bytes); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/util/LogMapper.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/LogMapper.java new file mode 100644 index 0000000..ed18c47 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/util/LogMapper.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.sega.aimedb.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import icu.samnyan.aqua.sega.util.jackson.ByteBufSerializer; +import io.netty.buffer.ByteBuf; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class LogMapper { + + private final ObjectMapper mapper; + private final SimpleModule module; + + public LogMapper() { + mapper = new ObjectMapper(); + module = new SimpleModule(); + module.addSerializer(ByteBuf.class, new ByteBufSerializer()); + mapper.registerModule(module); + } + + public String write(Object o) throws JsonProcessingException { + return mapper.writeValueAsString(o); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java new file mode 100644 index 0000000..a920f61 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java @@ -0,0 +1,78 @@ +package icu.samnyan.aqua.sega.allnet; + +import com.fasterxml.jackson.databind.ObjectMapper; +import icu.samnyan.aqua.sega.allnet.model.response.PowerOnResponse; +import icu.samnyan.aqua.sega.allnet.util.Decoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.io.InputStream; +import java.time.Instant; +import java.util.Map; +import java.util.zip.DataFormatException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +public class AllNetController { + + private static final Logger logger = LoggerFactory.getLogger(AllNetController.class); + + @PostMapping(value = "/sys/servlet/PowerOn", produces = "text/plain") + String powerOn(InputStream dataStream) throws DataFormatException, IOException { + + byte[] bytes = dataStream.readAllBytes(); + Map reqMap = Decoder.decode(bytes); + + logger.info("Request: PowerOn, " + new ObjectMapper().writeValueAsString(reqMap)); + + String gameId = reqMap.getOrDefault("game_id", ""); + PowerOnResponse resp = new PowerOnResponse( + 1, + switchUri(gameId), + switchHost(gameId), + "123", + "", + "", + "1", + "W", + "X", + "Y", + "Z", + "JPN", + "456", + "+0900", + Instant.now().toString().substring(0, 19).concat("Z"), + "", + "3", + reqMap.get("token") + ); + logger.info("Response: " + new ObjectMapper().writeValueAsString(resp)); + return resp.toString().concat("\n"); + } + + private String switchUri(String gameId) { + switch (gameId) { + case "SDBT": + return "http://192.168.123.208:80/"; + case "SBZV": + return "http://192.168.123.208:80/diva/"; + default: + return ""; + } + } + + private String switchHost(String gameId) { + switch (gameId) { + case "SDDF": + return "http://127.0.0.1:?/"; + default: + return ""; + } + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/model/request/PowerOnRequest.java b/src/main/java/icu/samnyan/aqua/sega/allnet/model/request/PowerOnRequest.java new file mode 100644 index 0000000..0f41497 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/model/request/PowerOnRequest.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.allnet.model.request; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PowerOnRequest { + + private String game_id; + private String ver; + private String serial; + private String ip; + private String firm_ver; + private String boot_ver; + private String encode; + private String format_ver; + private String hops; + private String token; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java new file mode 100644 index 0000000..e22884f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.allnet.model.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PowerOnResponse { + private int stat; + private String uri; + private String host; + private String place_id; + private String name; + private String nickname; + private String region0; + private String region_name0; + private String region_name1; + private String region_name2; + private String region_name3; + private String country; + private String allnet_id; + private String client_timezone; + private String utc_time; + private String setting; + private String res_ver; + private String token; + + @Override + public String toString() { + return "stat=" + stat + + "&uri=" + uri + + "&host=" + host + + "&place_id=" + place_id + + "&name=" + name + + "&nickname=" + nickname + + "®ion0=" + region0 + + "®ion_name0=" + region_name0 + + "®ion_name1=" + region_name1 + + "®ion_name2=" + region_name2 + + "®ion_name3=" + region_name3 + + "&country=" + country + + "&allnet_id=" + allnet_id + + "&client_timezone=" + client_timezone + + "&utc_time=" + utc_time + + "&setting=" + setting + + "&res_ver=" + res_ver + + "&token=" + token; + } +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/util/Decoder.java b/src/main/java/icu/samnyan/aqua/sega/allnet/util/Decoder.java new file mode 100644 index 0000000..9c82f6a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/util/Decoder.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.allnet.util; + +import icu.samnyan.aqua.sega.util.Compression; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class Decoder { + + public static Map decode(byte[] src) { + byte[] bytes = Base64.getMimeDecoder().decode(src); + + + byte[] output = Compression.decompress(bytes); + + String outputString = new String(output, StandardCharsets.UTF_8).trim(); + String[] split = outputString.split("&"); + Map resultMap = new HashMap<>(); + for (String s : + split) { + String[] kv = s.split("="); + resultMap.put(kv[0], kv[1]); + } + + return resultMap; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletController.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletController.java new file mode 100644 index 0000000..7079908 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletController.java @@ -0,0 +1,249 @@ +package icu.samnyan.aqua.sega.chunithm.controller; + + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.impl.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("ChuniServlet") +public class ChuniServletController { + + private final GameLoginHandler gameLoginHandler; + private final GameLogoutHandler gameLogoutHandler; + private final GetGameChargeHandler getGameChargeHandler; + private final GetGameEventHandler getGameEventHandler; + private final GetGameIdlistHandler getGameIdlistHandler; + private final GetGameMessageHandler getGameMessageHandler; + private final GetGameRankingHandler getGameRankingHandler; + private final GetGameSaleHandler getGameSaleHandler; + private final GetGameSettingHandler getGameSettingHandler; + private final GetUserActivityHandler getUserActivityHandler; + private final GetUserCharacterHandler getUserCharacterHandler; + private final GetUserChargeHandler getUserChargeHandler; + private final GetUserCourseHandler getUserCourseHandler; + private final GetUserDataExHandler getUserDataExHandler; + private final GetUserDataHandler getUserDataHandler; + private final GetUserDuelHandler getUserDuelHandler; + private final GetUserItemHandler getUserItemHandler; + private final GetUserMapHandler getUserMapHandler; + private final GetUserMusicHandler getUserMusicHandler; + private final GetUserOptionExHandler getUserOptionExHandler; + private final GetUserOptionHandler getUserOptionHandler; + private final GetUserPreviewHandler getUserPreviewHandler; + private final GetUserRecentRatingHandler getUserRecentRatingHandler; + private final GetUserRegionHandler getUserRegionHandler; + private final UpsertClientBookkeepingHandler upsertClientBookkeepingHandler; + private final UpsertClientDevelopHandler upsertClientDevelopHandler; + private final UpsertClientErrorHandler upsertClientErrorHandler; + private final UpsertClientSettingHandler upsertClientSettingHandler; + private final UpsertClientTestmodeHandler upsertClientTestmodeHandler; + private final UpsertUserAllHandler upsertUserAllHandler; + private final UpsertUserChargelogHandler upsertUserChargelogHandler; + + @Autowired + public ChuniServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler, GetGameChargeHandler getGameChargeHandler, GetGameEventHandler getGameEventHandler, GetGameIdlistHandler getGameIdlistHandler, GetGameMessageHandler getGameMessageHandler, GetGameRankingHandler getGameRankingHandler, GetGameSaleHandler getGameSaleHandler, GetGameSettingHandler getGameSettingHandler, GetUserActivityHandler getUserActivityHandler, GetUserCharacterHandler getUserCharacterHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, GetUserDataExHandler getUserDataExHandler, GetUserDataHandler getUserDataHandler, GetUserDuelHandler getUserDuelHandler, GetUserItemHandler getUserItemHandler, GetUserMapHandler getUserMapHandler, GetUserMusicHandler getUserMusicHandler, GetUserOptionExHandler getUserOptionExHandler, GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler, UpsertClientBookkeepingHandler upsertClientBookkeepingHandler, UpsertClientDevelopHandler upsertClientDevelopHandler, UpsertClientErrorHandler upsertClientErrorHandler, UpsertClientSettingHandler upsertClientSettingHandler, UpsertClientTestmodeHandler upsertClientTestmodeHandler, UpsertUserAllHandler upsertUserAllHandler, UpsertUserChargelogHandler upsertUserChargelogHandler) { + this.gameLoginHandler = gameLoginHandler; + this.gameLogoutHandler = gameLogoutHandler; + this.getGameChargeHandler = getGameChargeHandler; + this.getGameEventHandler = getGameEventHandler; + this.getGameIdlistHandler = getGameIdlistHandler; + this.getGameMessageHandler = getGameMessageHandler; + this.getGameRankingHandler = getGameRankingHandler; + this.getGameSaleHandler = getGameSaleHandler; + this.getGameSettingHandler = getGameSettingHandler; + this.getUserActivityHandler = getUserActivityHandler; + this.getUserCharacterHandler = getUserCharacterHandler; + this.getUserChargeHandler = getUserChargeHandler; + this.getUserCourseHandler = getUserCourseHandler; + this.getUserDataExHandler = getUserDataExHandler; + this.getUserDataHandler = getUserDataHandler; + this.getUserDuelHandler = getUserDuelHandler; + this.getUserItemHandler = getUserItemHandler; + this.getUserMapHandler = getUserMapHandler; + this.getUserMusicHandler = getUserMusicHandler; + this.getUserOptionExHandler = getUserOptionExHandler; + this.getUserOptionHandler = getUserOptionHandler; + this.getUserPreviewHandler = getUserPreviewHandler; + this.getUserRecentRatingHandler = getUserRecentRatingHandler; + this.getUserRegionHandler = getUserRegionHandler; + this.upsertClientBookkeepingHandler = upsertClientBookkeepingHandler; + this.upsertClientDevelopHandler = upsertClientDevelopHandler; + this.upsertClientErrorHandler = upsertClientErrorHandler; + this.upsertClientSettingHandler = upsertClientSettingHandler; + this.upsertClientTestmodeHandler = upsertClientTestmodeHandler; + this.upsertUserAllHandler = upsertUserAllHandler; + this.upsertUserChargelogHandler = upsertUserChargelogHandler; + } + + @PostMapping("GameLoginApi") + String gameLogin(@ModelAttribute Map request) throws JsonProcessingException { + return gameLoginHandler.handle(request); + } + + @PostMapping("GameLogoutApi") + String gameLogout(@ModelAttribute Map request) throws JsonProcessingException { + return gameLogoutHandler.handle(request); + } + + @PostMapping("GetGameChargeApi") + String getGameCharge(@ModelAttribute Map request) throws JsonProcessingException { + return getGameChargeHandler.handle(request); + } + + @PostMapping("GetGameEventApi") + String getGameEvent(@ModelAttribute Map request) throws JsonProcessingException { + return getGameEventHandler.handle(request); + } + + @PostMapping("GetGameIdlistApi") + String getGameIdList(@ModelAttribute Map request) throws JsonProcessingException { + return getGameIdlistHandler.handle(request); + } + + @PostMapping("GetGameMessageApi") + String getGameMessage(@ModelAttribute Map request) throws JsonProcessingException { + return getGameMessageHandler.handle(request); + } + + @PostMapping("GetGameRankingApi") + String getGameRanking(@ModelAttribute Map request) throws JsonProcessingException { + return getGameRankingHandler.handle(request); + } + + @PostMapping("GetGameSaleApi") + String getGameSale(@ModelAttribute Map request) throws JsonProcessingException { + return getGameSaleHandler.handle(request); + } + + /** + * The game start up request + * + * @return + */ + @PostMapping("GetGameSettingApi") + String getGameSetting(@ModelAttribute Map request) throws JsonProcessingException { + return getGameSettingHandler.handle(request); + } + + @PostMapping("GetUserActivityApi") + String getUserActivity(@ModelAttribute Map request) throws JsonProcessingException { + return getUserActivityHandler.handle(request); + } + + @PostMapping("GetUserCharacterApi") + String getUserCharacter(@ModelAttribute Map request) throws JsonProcessingException { + return getUserCharacterHandler.handle(request); + } + + @PostMapping("GetUserChargeApi") + String getUserCharge(@ModelAttribute Map request) throws JsonProcessingException { + return getUserChargeHandler.handle(request); + } + + @PostMapping("GetUserCourseApi") + String getUserCourse(@ModelAttribute Map request) throws JsonProcessingException { + return getUserCourseHandler.handle(request); + } + + @PostMapping("GetUserDataApi") + String getUserData(@ModelAttribute Map request) throws JsonProcessingException { + return getUserDataHandler.handle(request); + } + + @PostMapping("GetUserDataExApi") + String getUserDataEx(@ModelAttribute Map request) throws JsonProcessingException { + return getUserDataExHandler.handle(request); + } + + @PostMapping("GetUserDuelApi") + String getUserDuel(@ModelAttribute Map request) throws JsonProcessingException { + return getUserDuelHandler.handle(request); + } + + @PostMapping("GetUserItemApi") + String getUserItem(@ModelAttribute Map request) throws JsonProcessingException { + return getUserItemHandler.handle(request); + } + + @PostMapping("GetUserMapApi") + String getUserMap(@ModelAttribute Map request) throws JsonProcessingException { + return getUserMapHandler.handle(request); + } + + @PostMapping("GetUserMusicApi") + String getUserMusic(@ModelAttribute Map request) throws JsonProcessingException { + return getUserMusicHandler.handle(request); + } + + @PostMapping("GetUserOptionApi") + String getUserOption(@ModelAttribute Map request) throws JsonProcessingException { + return getUserOptionHandler.handle(request); + } + + @PostMapping("GetUserOptionExApi") + String getUserOptionEx(@ModelAttribute Map request) throws JsonProcessingException { + return getUserOptionExHandler.handle(request); + } + + // Call when login. Return null if no profile exist + @PostMapping("GetUserPreviewApi") + String getUserPreview(@ModelAttribute Map request) throws JsonProcessingException { + return getUserPreviewHandler.handle(request); + } + + @PostMapping("GetUserRecentRatingApi") + String getUserRecentRating(@ModelAttribute Map request) throws JsonProcessingException { + return getUserRecentRatingHandler.handle(request); + } + + @PostMapping("GetUserRegionApi") + String getUserRegion(@ModelAttribute Map request) throws JsonProcessingException { + return getUserRegionHandler.handle(request); + } + + @PostMapping("UpsertClientBookkeepingApi") + String upsertClientBookkeeping(@ModelAttribute Map request) { + return "{\"returnCode\":\"1\"}"; + } + + @PostMapping("UpsertClientDevelopApi") + String upsertClientDevelop(@ModelAttribute Map request) { + return "{\"returnCode\":\"1\"}"; + } + + @PostMapping("UpsertClientErrorApi") + String upsertClientError(@ModelAttribute Map request) { + return "{\"returnCode\":\"1\"}"; + } + + @PostMapping("UpsertClientSettingApi") + String upsertClientSetting(@ModelAttribute Map request) { + return "{\"returnCode\":\"1\"}"; + } + + @PostMapping("UpsertClientTestmodeApi") + String upsertClientTestmode(@ModelAttribute Map request) { + return "{\"returnCode\":\"1\"}"; + } + + @PostMapping("UpsertUserAllApi") + String upsertUserAll(@ModelAttribute Map request) throws JsonProcessingException { + return upsertUserAllHandler.handle(request); + } + + @PostMapping("UpsertUserChargelogApi") + String upsertUserChargelog(@ModelAttribute Map request) throws JsonProcessingException { + return upsertUserChargelogHandler.handle(request); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletControllerAdvice.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletControllerAdvice.java new file mode 100644 index 0000000..efcfd57 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/controller/ChuniServletControllerAdvice.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.chunithm.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestControllerAdvice(basePackages = "icu.samnyan.aqua.sega.chunithm") +public class ChuniServletControllerAdvice { + + private static final Logger logger = LoggerFactory.getLogger(ChuniServletControllerAdvice.class); + + + /** + * Get the map object from json string + * + * @param request HttpServletRequest + */ + @ModelAttribute + public Map preHandle(HttpServletRequest request) throws IOException { + byte[] src = request.getInputStream().readAllBytes(); + String outputString = new String(src, StandardCharsets.UTF_8).trim(); + logger.info("Request " + request.getRequestURI() + ": " + outputString); + ObjectMapper mapper = new ObjectMapper(); + + return mapper.readValue(outputString, new TypeReference<>() { + }); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameChargeRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameChargeRepository.java new file mode 100644 index 0000000..da9a69b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameChargeRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.chunithm.dao.gamedata; + +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameCharge; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface GameChargeRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameEventRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameEventRepository.java new file mode 100644 index 0000000..6ca384f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameEventRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.chunithm.dao.gamedata; + +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameEvent; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface GameEventRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMessageRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMessageRepository.java new file mode 100644 index 0000000..85ae814 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMessageRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.chunithm.dao.gamedata; + +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameMessage; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface GameMessageRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMusicRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMusicRepository.java new file mode 100644 index 0000000..5e8b676 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/gamedata/GameMusicRepository.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.chunithm.dao.gamedata; + +import icu.samnyan.aqua.sega.chunithm.model.gamedata.Music; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface GameMusicRepository extends JpaRepository { + + Optional findByMusicId(int musicId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java new file mode 100644 index 0000000..6780099 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserActivity; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserActivityRepository extends JpaRepository { + + Optional findTopByUserAndActivityIdAndKindOrderByIdDesc(UserData user, int activityId, int kind); + + List findAllByUser_Card_ExtIdAndKindOrderBySortNumberDesc(long extId, int kind); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java new file mode 100644 index 0000000..5bfa47b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserCharacterRepository extends JpaRepository { + + Optional findTopByUserAndCharacterIdOrderByIdDesc(UserData user, int characterId); + + Page findByUser_Card_ExtId(long parseLong, Pageable pageable); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserChargeRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserChargeRepository.java new file mode 100644 index 0000000..b3f94f4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserChargeRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharge; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserChargeRepository extends JpaRepository { + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndChargeId(UserData extId, int chargeId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCourseRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCourseRepository.java new file mode 100644 index 0000000..1c6bfd9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCourseRepository.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCourse; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserCourseRepository extends JpaRepository { + Optional findTopByUserAndCourseIdOrderByIdDesc(UserData user, int courseId); + + Page findByUser_Card_ExtId(long aimeId, Pageable page); + + List findByUser_Card_ExtId(long aimeId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataExRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataExRepository.java new file mode 100644 index 0000000..d2d2c93 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataExRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDataEx; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserDataExRepository extends JpaRepository { + + Optional findByUser(UserData user); + + Optional findByUser_Card_ExtId(long userId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataRepository.java new file mode 100644 index 0000000..03bb98a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDataRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.general.model.Card; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserDataRepository extends JpaRepository { + + Optional findByCard(Card card); + + Optional findByCard_ExtId(long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDuelRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDuelRepository.java new file mode 100644 index 0000000..69b45e3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserDuelRepository.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDuel; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserDuelRepository extends JpaRepository { + + Optional findTopByUserAndDuelIdOrderByIdDesc(UserData user, int duelId); + + List findByUser_Card_ExtId(long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionExRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionExRepository.java new file mode 100644 index 0000000..4423dcd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionExRepository.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOptionEx; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserGameOptionExRepository extends JpaRepository { + Optional findByUser(UserData user); + + Optional findByUser_Card_ExtId(long parseLong); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionRepository.java new file mode 100644 index 0000000..1c07048 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserGameOptionRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOption; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserGameOptionRepository extends JpaRepository { + + Optional findByUser(UserData user); + + Optional findByUser_Card_ExtId(long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java new file mode 100644 index 0000000..70172c8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserItem; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserItemRepository extends JpaRepository { + + Optional findTopByUserAndItemIdOrderByIdDesc(UserData user, int itemId); + + Page findAllByUser_Card_ExtIdAndItemKind(long extId, int itemKind, Pageable pageable); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMapRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMapRepository.java new file mode 100644 index 0000000..cad3484 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMapRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMap; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserMapRepository extends JpaRepository { + List findAllByUser(UserData user); + + List findAllByUser_Card_ExtId(long extId); + + Optional findTopByUserAndMapIdOrderByIdDesc(UserData user, int mapId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMusicDetailRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMusicDetailRepository.java new file mode 100644 index 0000000..e5520bf --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserMusicDetailRepository.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMusicDetail; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserMusicDetailRepository extends JpaRepository { + + Optional findTopByUserAndMusicIdAndLevelOrderByIdDesc(UserData user, int musicId, int level); + + List findByUser_Card_ExtId(long parseLong); + + Page findByUser_Card_ExtId(long aimeId, Pageable page); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java new file mode 100644 index 0000000..f44f6f4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.chunithm.dao.userdata; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface UserPlaylogRepository extends JpaRepository { + List findByUser_Card_ExtIdAndLevelNot(long extId, int levelNot, Pageable page); + + List findByUser_Card_ExtId(long parseLong, Pageable page); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniRequestWrapper.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniRequestWrapper.java new file mode 100644 index 0000000..e4a4db5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniRequestWrapper.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.filter; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.ByteArrayInputStream; +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ChuniRequestWrapper extends HttpServletRequestWrapper { + + private ByteArrayInputStream input; + private ServletInputStream filterInput; + + public ChuniRequestWrapper(HttpServletRequest request, byte[] input) { + super(request); + this.input = new ByteArrayInputStream(input); + } + + + @Override + public ServletInputStream getInputStream() throws IOException { + if (filterInput == null) { + filterInput = new ServletInputStream() { + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + + @Override + public int read() throws IOException { + return input.read(); + } + }; + + + } + return filterInput; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniResponseWrapper.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniResponseWrapper.java new file mode 100644 index 0000000..89a82cc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/ChuniResponseWrapper.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.chunithm.filter; + +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ChuniResponseWrapper extends HttpServletResponseWrapper { + + private ByteArrayOutputStream output; + private ServletOutputStream filterOutput; + + + ChuniResponseWrapper(HttpServletResponse response) { + super(response); + output = new ByteArrayOutputStream(); + } + + @Override + public ServletOutputStream getOutputStream() throws IOException { + if (filterOutput == null) { + filterOutput = new ServletOutputStream() { + @Override + public boolean isReady() { + return false; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + + } + + @Override + public void write(int b) throws IOException { + output.write(b); + } + }; + } + return filterOutput; + } + + byte[] toByteArray() { + return output.toByteArray(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/CompressionFilter.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/CompressionFilter.java new file mode 100644 index 0000000..3dacf84 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/filter/CompressionFilter.java @@ -0,0 +1,58 @@ +package icu.samnyan.aqua.sega.chunithm.filter; + +import icu.samnyan.aqua.sega.util.Compression; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CompressionFilter extends OncePerRequestFilter { + + private static final Logger logger = LoggerFactory.getLogger(CompressionFilter.class); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + String encoding = request.getHeader("content-encoding"); + byte[] reqSrc = request.getInputStream().readAllBytes(); + + byte[] reqResult; + if (encoding != null && encoding.equals("deflate")) { + reqResult = Compression.decompress(reqSrc); + } else { + reqResult = reqSrc; + } + + ChuniRequestWrapper requestWrapper = new ChuniRequestWrapper(request, reqResult); + ChuniResponseWrapper responseWrapper = new ChuniResponseWrapper(response); + + filterChain.doFilter(requestWrapper, responseWrapper); + + byte[] respSrc = responseWrapper.toByteArray(); + byte[] respResult = Compression.compress(respSrc); + + + response.setContentLength(respResult.length); + response.setContentType("application/json; charset=utf-8"); + response.addHeader("Content-Encoding", "deflate"); + + response.getOutputStream().write(respResult); + + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + String path = request.getServletPath(); + return !path.startsWith("/ChuniServlet"); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/BaseHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/BaseHandler.java new file mode 100644 index 0000000..94060db --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/BaseHandler.java @@ -0,0 +1,13 @@ +package icu.samnyan.aqua.sega.chunithm.handler; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface BaseHandler { + + String handle(Map request) throws JsonProcessingException; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLoginHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLoginHandler.java new file mode 100644 index 0000000..2e9cbc4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLoginHandler.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.service.UserDataService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GameLoginHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GameLoginHandler.class); + + private final StringMapper mapper; + + private final UserDataService userDataService; + + public GameLoginHandler(StringMapper mapper, UserDataService userDataService) { + this.mapper = mapper; + this.userDataService = userDataService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Optional userDataOptional = userDataService.getUserByExtId(userId); + userDataOptional.ifPresent(userDataService::updateLoginTime); + + String json = mapper.write(new CodeResp(1)); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLogoutHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLogoutHandler.java new file mode 100644 index 0000000..b5c4e74 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GameLogoutHandler.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GameLogoutHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GameLogoutHandler.class); + + private final StringMapper mapper; + + public GameLogoutHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + String json = mapper.write(new CodeResp(1)); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameChargeHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameChargeHandler.java new file mode 100644 index 0000000..003faf5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameChargeHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.dao.gamedata.GameChargeRepository; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameCharge; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameChargeHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameChargeHandler.class); + private final GameChargeRepository gameChargeRepository; + private final StringMapper mapper; + + @Autowired + public GetGameChargeHandler(GameChargeRepository gameChargeRepository, StringMapper mapper) { + this.gameChargeRepository = gameChargeRepository; + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + List gameChargeList = gameChargeRepository.findAll(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("length", gameChargeList.size()); + resultMap.put("gameChargeList", gameChargeList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameEventHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameEventHandler.java new file mode 100644 index 0000000..bff1a15 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameEventHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.dao.gamedata.GameEventRepository; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameEvent; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameEventHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameEventHandler.class); + + private final GameEventRepository gameEventRepository; + + private final StringMapper mapper; + + @Autowired + public GetGameEventHandler(GameEventRepository gameEventRepository, StringMapper mapper) { + this.gameEventRepository = gameEventRepository; + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = (String) request.get("type"); + + List gameEventList = gameEventRepository.findAll(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("length", 0); + resultMap.put("gameEventList", gameEventList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameIdlistHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameIdlistHandler.java new file mode 100644 index 0000000..16426b4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameIdlistHandler.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameIdlistHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameIdlistHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetGameIdlistHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = (String) request.get("type"); + + List gameIdlistList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("length", 0); + resultMap.put("gameIdlistList", gameIdlistList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameMessageHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameMessageHandler.java new file mode 100644 index 0000000..895c4cc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameMessageHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.dao.gamedata.GameMessageRepository; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.GameMessage; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameMessageHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameMessageHandler.class); + + private final GameMessageRepository gameMessageRepository; + + private final StringMapper mapper; + + @Autowired + public GetGameMessageHandler(GameMessageRepository gameMessageRepository, StringMapper mapper) { + this.gameMessageRepository = gameMessageRepository; + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = (String) request.get("type"); + + List gameMessageList = gameMessageRepository.findAll(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("length", 0); + resultMap.put("gameMessageList", gameMessageList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java new file mode 100644 index 0000000..a58747c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameRankingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameRankingHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetGameRankingHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = (String) request.get("type"); + + List gameRankingList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("length", 0); + resultMap.put("gameRankingList", gameRankingList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSaleHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSaleHandler.java new file mode 100644 index 0000000..dbfd59e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSaleHandler.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.data.GameSale; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameSaleHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameSaleHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetGameSaleHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = (String) request.get("type"); + + List gameSaleList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("length", 0); + resultMap.put("gameSaleList", gameSaleList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSettingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSettingHandler.java new file mode 100644 index 0000000..5c104ea --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameSettingHandler.java @@ -0,0 +1,56 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.GetGameSettingResp; +import icu.samnyan.aqua.sega.chunithm.model.response.data.GameSetting; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameSettingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameSettingHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetGameSettingHandler(StringMapper mapper) { + this.mapper = mapper; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + + GameSetting gameSetting = new GameSetting( + 1, + false, + 10, + 0, + 0, + false, + 999, + 999, + 999); + + GetGameSettingResp resp = new GetGameSettingResp( + gameSetting, + false, + false + ); + + String json = mapper.write(resp); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserActivityHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserActivityHandler.java new file mode 100644 index 0000000..dc35895 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserActivityHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserActivity; +import icu.samnyan.aqua.sega.chunithm.service.UserActivityService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserActivityHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserActivityHandler.class); + + private final StringMapper mapper; + + private final UserActivityService userActivityService; + + @Autowired + public GetUserActivityHandler(StringMapper mapper, UserActivityService userActivityService) { + this.mapper = mapper; + this.userActivityService = userActivityService; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + String kind = (String) request.get("kind"); + + List userActivityList = userActivityService.getAllByUserIdAndKind(userId, kind); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userActivityList.size()); + resultMap.put("kind", kind); + resultMap.put("userActivityList", userActivityList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java new file mode 100644 index 0000000..77decc7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.chunithm.service.UserCharacterService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserCharacterHandler implements BaseHandler { + + + private static final Logger logger = LoggerFactory.getLogger(GetUserCharacterHandler.class); + + private final StringMapper mapper; + + private final UserCharacterService userCharacterService; + + + @Autowired + public GetUserCharacterHandler(StringMapper mapper, UserCharacterService userCharacterService) { + this.mapper = mapper; + this.userCharacterService = userCharacterService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + int nextIndex = Integer.parseInt((String) request.get("nextIndex")); + int maxCount = Integer.parseInt((String) request.get("maxCount")); + + int pageNum = nextIndex / maxCount; + + Page dbPage = userCharacterService.getByUser(userId, pageNum, maxCount); + + long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", dbPage.getNumberOfElements()); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex); + resultMap.put("userCharacterList", dbPage.getContent()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserChargeHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserChargeHandler.java new file mode 100644 index 0000000..59a009e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserChargeHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharge; +import icu.samnyan.aqua.sega.chunithm.service.UserChargeService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserChargeHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserChargeHandler.class); + + private final StringMapper mapper; + + private final UserChargeService userChargeService; + + @Autowired + public GetUserChargeHandler(StringMapper mapper, UserChargeService userChargeService) { + this.mapper = mapper; + this.userChargeService = userChargeService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + List userChargeList = userChargeService.getByUserId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userChargeList.size()); + resultMap.put("userChargeList", userChargeList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java new file mode 100644 index 0000000..efe65bd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java @@ -0,0 +1,58 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCourse; +import icu.samnyan.aqua.sega.chunithm.service.UserCourseService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserCourseHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserCourseHandler.class); + + private final StringMapper mapper; + + private final UserCourseService userCourseService; + + @Autowired + public GetUserCourseHandler(StringMapper mapper, UserCourseService userCourseService) { + this.mapper = mapper; + this.userCourseService = userCourseService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + int nextIndex = Integer.parseInt((String) request.get("nextIndex")); + int maxCount = Integer.parseInt((String) request.get("maxCount")); + + int pageNum = nextIndex / maxCount; + + Page dbPage = userCourseService.getByUser(userId, pageNum, maxCount); + + long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", dbPage.getNumberOfElements()); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex); + resultMap.put("userCourseList", dbPage.getContent()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java new file mode 100644 index 0000000..59300bc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDataEx; +import icu.samnyan.aqua.sega.chunithm.service.UserDataExService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserDataExHandler implements BaseHandler { + private static final Logger logger = LoggerFactory.getLogger(GetUserDataExHandler.class); + + private final StringMapper mapper; + + private final UserDataExService userDataExService; + + @Autowired + public GetUserDataExHandler(StringMapper mapper, UserDataExService userDataExService) { + this.mapper = mapper; + this.userDataExService = userDataExService; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Optional userDataExOptional = userDataExService.getUserByExtId(userId); + + if (userDataExOptional.isPresent()) { + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userDataEx", userDataExOptional.get()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } + + return null; + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataHandler.java new file mode 100644 index 0000000..cc1f9e5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataHandler.java @@ -0,0 +1,51 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.service.UserDataService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserDataHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDataHandler.class); + + private final StringMapper mapper; + + private final UserDataService userDataService; + + @Autowired + public GetUserDataHandler(StringMapper mapper, UserDataService userDataService) { + this.mapper = mapper; + this.userDataService = userDataService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Optional userDataOptional = userDataService.getUserByExtId(userId); + + if (userDataOptional.isPresent()) { + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userData", userDataOptional.get()); + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } + + return null; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java new file mode 100644 index 0000000..1f3715e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDuel; +import icu.samnyan.aqua.sega.chunithm.service.UserDuelService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserDuelHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDuelHandler.class); + + private final StringMapper mapper; + + private final UserDuelService userDuelService; + + @Autowired + public GetUserDuelHandler(StringMapper mapper, UserDuelService userDuelService) { + this.mapper = mapper; + this.userDuelService = userDuelService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + String duelId = (String) request.get("duelId"); + String isAllDuel = (String) request.get("isAllDuel"); + + // TODO: + + List userDuelList = userDuelService.getByUser(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userDuelList.size()); + resultMap.put("userDuelList", userDuelList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserItemHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserItemHandler.java new file mode 100644 index 0000000..cbdcf70 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserItemHandler.java @@ -0,0 +1,67 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserItem; +import icu.samnyan.aqua.sega.chunithm.service.UserItemService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Handler for getting user item. + * This get call before profile create. + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserItemHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserItemHandler.class); + + private final StringMapper mapper; + + private final UserItemService userItemService; + + public GetUserItemHandler(StringMapper mapper, UserItemService userItemService) { + this.mapper = mapper; + this.userItemService = userItemService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Long nextIndexVal = Long.parseLong((String) request.get("nextIndex")); + int maxCount = Integer.parseInt((String) request.get("maxCount")); + + Long mul = 10000000000L; + + int kind = (int) (nextIndexVal / mul); + int nextIndex = (int) (nextIndexVal % mul); + int pageNum = nextIndex / maxCount; + + Page userItemPage = userItemService.getByUserAndItemKind(userId, kind, pageNum, maxCount); + + List userItemList = userItemPage.getContent(); + + long currentIndex = kind * mul + maxCount * pageNum + userItemPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userItemPage.getNumberOfElements()); + resultMap.put("nextIndex", userItemPage.getNumberOfElements() < maxCount ? -1 : currentIndex); + resultMap.put("itemKind", kind); + resultMap.put("userItemList", userItemList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java new file mode 100644 index 0000000..3692cde --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMap; +import icu.samnyan.aqua.sega.chunithm.service.UserMapService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserMapHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserItemHandler.class); + + private final StringMapper mapper; + + private final UserMapService userMapService; + + @Autowired + public GetUserMapHandler(StringMapper mapper, UserMapService userMapService) { + this.mapper = mapper; + this.userMapService = userMapService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + List userMapList = userMapService.getByUser(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userMapList.size()); + resultMap.put("userMapList", userMapList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMusicHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMusicHandler.java new file mode 100644 index 0000000..4bbde87 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMusicHandler.java @@ -0,0 +1,98 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.data.UserMusicListItem; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMusicDetail; +import icu.samnyan.aqua.sega.chunithm.service.GameMusicService; +import icu.samnyan.aqua.sega.chunithm.service.UserMusicDetailService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Response: + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserMusicHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserMusicHandler.class); + + private final StringMapper mapper; + + private final UserMusicDetailService userMusicDetailService; + + private final GameMusicService gameMusicService; + + @Autowired + public GetUserMusicHandler(StringMapper mapper, UserMusicDetailService userMusicDetailService, GameMusicService gameMusicService) { + this.mapper = mapper; + this.userMusicDetailService = userMusicDetailService; + this.gameMusicService = gameMusicService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + int nextIndex = Integer.parseInt((String) request.get("nextIndex")); + int maxCount = Integer.parseInt((String) request.get("maxCount")); + + + List userMusicDetailList = userMusicDetailService.getByUser(userId); + + + Map> allMusicMap = new LinkedHashMap<>(); + + userMusicDetailList.forEach(userMusicDetail -> { + + int musicId = userMusicDetail.getMusicId(); + int level = userMusicDetail.getLevel(); + + if (allMusicMap.containsKey(musicId)) { + allMusicMap.get(musicId).put(level, userMusicDetail); + } else { + Map levelMap = new HashMap<>(); + levelMap.put(level, userMusicDetail); + allMusicMap.put(musicId, levelMap); + } + }); + + // Convert to result format + // Result Map + Map userMusicMap = new LinkedHashMap<>(); + + allMusicMap.forEach((mid, lvMap) -> { + UserMusicListItem list; + if (userMusicMap.containsKey(mid)) { + list = userMusicMap.get(mid); + } else { + list = new UserMusicListItem(0, new ArrayList<>()); + userMusicMap.put(mid, list); + } + list.getUserMusicDetailList().addAll(lvMap.values()); + list.setLength(lvMap.size()); + }); + + List result = userMusicMap.values().stream().skip(nextIndex).limit(maxCount).collect(Collectors.toList()); + + + long currentIndex = result.size(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", result.size()); + resultMap.put("nextIndex", allMusicMap.size() < maxCount ? -1 : currentIndex); + resultMap.put("userMusicList", result); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionExHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionExHandler.java new file mode 100644 index 0000000..697c14d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionExHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOptionEx; +import icu.samnyan.aqua.sega.chunithm.service.UserGameOptionExService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserOptionExHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserOptionExHandler.class); + + private final StringMapper mapper; + + private final UserGameOptionExService userGameOptionExService; + + @Autowired + public GetUserOptionExHandler(StringMapper mapper, UserGameOptionExService userGameOptionExService) { + this.mapper = mapper; + this.userGameOptionExService = userGameOptionExService; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Optional userGameOptionEx = userGameOptionExService.getByUserId(userId); + + if (userGameOptionEx.isPresent()) { + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userGameOptionEx", userGameOptionEx.get()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } + + return null; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionHandler.java new file mode 100644 index 0000000..0656f0f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserOptionHandler.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOption; +import icu.samnyan.aqua.sega.chunithm.service.UserGameOptionService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserOptionHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserOptionHandler.class); + + private final StringMapper mapper; + + private final UserGameOptionService userGameOptionService; + + @Autowired + public GetUserOptionHandler(StringMapper mapper, UserGameOptionService userGameOptionService) { + this.mapper = mapper; + this.userGameOptionService = userGameOptionService; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Optional userGameOption = userGameOptionService.getByUserId(userId); + + if (userGameOption.isPresent()) { + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userGameOption", userGameOption.get()); + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } + + return null; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserPreviewHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserPreviewHandler.java new file mode 100644 index 0000000..cb159d3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserPreviewHandler.java @@ -0,0 +1,90 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.GetUserPreviewResp; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOption; +import icu.samnyan.aqua.sega.chunithm.service.UserCharacterService; +import icu.samnyan.aqua.sega.chunithm.service.UserDataService; +import icu.samnyan.aqua.sega.chunithm.service.UserGameOptionService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Optional; + +/** + * The handler for loading basic profile information. + *

+ * return null if no profile exist + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserPreviewHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserPreviewHandler.class); + + private final StringMapper mapper; + + private final UserDataService userDataService; + private final UserCharacterService userCharacterService; + private final UserGameOptionService userGameOptionService; + + @Autowired + public GetUserPreviewHandler(StringMapper mapper, UserDataService userDataService, UserCharacterService userCharacterService, UserGameOptionService userGameOptionService) { + this.mapper = mapper; + this.userDataService = userDataService; + this.userCharacterService = userCharacterService; + this.userGameOptionService = userGameOptionService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + Optional userData = userDataService.getUserByExtId(userId); + + if (userData.isEmpty()) { + return null; + } + + + UserData user = userData.get(); + + GetUserPreviewResp resp = new GetUserPreviewResp(); + resp.setUserId(userId); + resp.setLogin(false); + resp.setLastLoginDate(user.getLastLoginDate()); + resp.setUserName(user.getUserName()); + resp.setReincarnationNum(user.getReincarnationNum()); + resp.setLevel(user.getLevel()); + resp.setExp(user.getExp()); + resp.setPlayerRating(user.getPlayerRating()); + resp.setLastGameId(user.getLastGameId()); + resp.setLastRomVersion(user.getLastRomVersion()); + resp.setLastDataVersion(user.getLastDataVersion()); + resp.setLastPlayDate(user.getLastPlayDate()); + resp.setTrophyId(user.getTrophyId()); + + Optional userCharacterOptional = userCharacterService.getByUserAndCharacterId(user, user.getCharacterId()); + userCharacterOptional.ifPresent(resp::setUserCharacter); + + Optional userGameOptionOptional = userGameOptionService.getByUser(user); + userGameOptionOptional.ifPresent(userGameOption -> { + resp.setPlayerLevel(userGameOption.getPlayerLevel()); + resp.setRating(userGameOption.getRating()); + resp.setHeadphone(userGameOption.getHeadphone()); + }); + + String json = mapper.write(resp); + logger.info("Response: " + json); + return json; + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRecentRatingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRecentRatingHandler.java new file mode 100644 index 0000000..ccbcc8c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRecentRatingHandler.java @@ -0,0 +1,56 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.data.UserRecentRating; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; +import icu.samnyan.aqua.sega.chunithm.service.UserPlaylogService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Return the recent play to calculate rating. Rating base on top 30 songs plus top 10 in recent 30 plays. + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserRecentRatingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserRecentRatingHandler.class); + + private final StringMapper mapper; + + private final UserPlaylogService userPlaylogService; + + @Autowired + public GetUserRecentRatingHandler(StringMapper mapper, UserPlaylogService userPlaylogService) { + this.mapper = mapper; + this.userPlaylogService = userPlaylogService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + List top = userPlaylogService.getRecent30Plays(userId); + List rating = top.stream().map(log -> new UserRecentRating(log.getMusicId(), log.getLevel(), "1030000", log.getScore())) + .collect(Collectors.toList()); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", rating.size()); + resultMap.put("userRecentRatingList", rating); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRegionHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRegionHandler.java new file mode 100644 index 0000000..56b4fe4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserRegionHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserRegionHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserRegionHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetUserRegionHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + + List userRegionList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", 0); + resultMap.put("userRegionList", userRegionList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientBookkeepingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientBookkeepingHandler.java new file mode 100644 index 0000000..069d315 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientBookkeepingHandler.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertClientBookkeepingHandler { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientDevelopHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientDevelopHandler.java new file mode 100644 index 0000000..f877221 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientDevelopHandler.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertClientDevelopHandler { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientErrorHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientErrorHandler.java new file mode 100644 index 0000000..829d3e3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientErrorHandler.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertClientErrorHandler { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientSettingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientSettingHandler.java new file mode 100644 index 0000000..bf33456 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientSettingHandler.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertClientSettingHandler { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientTestmodeHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientTestmodeHandler.java new file mode 100644 index 0000000..0a033de --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertClientTestmodeHandler.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertClientTestmodeHandler { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserAllHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserAllHandler.java new file mode 100644 index 0000000..aa0c752 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserAllHandler.java @@ -0,0 +1,350 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp; +import icu.samnyan.aqua.sega.chunithm.model.userdata.*; +import icu.samnyan.aqua.sega.chunithm.service.*; +import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.general.service.CardService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * The handler for save user data. Only send in the end of the session. + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertUserAllHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(UpsertUserAllHandler.class); + + private final StringMapper mapper; + + private final CardService cardService; + + private final UserDataService userDataService; + private final UserCharacterService userCharacterService; + private final UserGameOptionService userGameOptionService; + private final UserGameOptionExService userGameOptionExService; + private final UserMapService userMapService; + private final UserItemService userItemService; + private final UserMusicDetailService userMusicDetailService; + private final UserActivityService userActivityService; + private final UserPlaylogService userPlaylogService; + private final UserChargeService userChargeService; + private final UserDataExService userDataExService; + private final UserCourseService userCourseService; + private final UserDuelService userDuelService; + + @Autowired + public UpsertUserAllHandler(StringMapper mapper, CardService cardService, UserDataService userDataService, UserCharacterService userCharacterService, UserGameOptionService userGameOptionService, UserGameOptionExService userGameOptionExService, UserMapService userMapService, UserItemService userItemService, UserMusicDetailService userMusicDetailService, UserActivityService userActivityService, UserPlaylogService userPlaylogService, UserChargeService userChargeService, UserDataExService userDataExService, UserCourseService userCourseService, UserDuelService userDuelService) { + this.mapper = mapper; + this.cardService = cardService; + this.userDataService = userDataService; + this.userCharacterService = userCharacterService; + this.userGameOptionService = userGameOptionService; + this.userGameOptionExService = userGameOptionExService; + this.userMapService = userMapService; + this.userItemService = userItemService; + this.userMusicDetailService = userMusicDetailService; + this.userActivityService = userActivityService; + this.userPlaylogService = userPlaylogService; + this.userChargeService = userChargeService; + this.userDataExService = userDataExService; + this.userCourseService = userCourseService; + this.userDuelService = userDuelService; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + Map upsertUserAll = (Map) request.get("upsertUserAll"); + + // Not all field will be sent. Check if they are exist first. + + UserData userData; + UserData newUserData; + // UserData + if (!upsertUserAll.containsKey("userData")) { + return null; + } else { + Map userDataMap = ((List>) upsertUserAll.get("userData")).get(0); + + Optional userOptional = userDataService.getUserByExtId(userId); + + + if (userOptional.isPresent()) { + userData = userOptional.get(); + } else { + userData = new UserData(); + Card card = cardService.getCardByExtId(userId).orElseThrow(); + userData.setCard(card); + } + + // Map the map to object + newUserData = mapper.convert(userDataMap, UserData.class); + + newUserData.setId(userData.getId()); + newUserData.setCard(userData.getCard()); + + + // Decode Username + String userName = new String(newUserData.getUserName() + .getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + + + newUserData.setUserName(userName); + userDataService.saveAndFlushUserData(newUserData); + } + + // userGameOption + if (upsertUserAll.containsKey("userGameOption")) { + Map userGameOptionMap = ((List>) upsertUserAll.get("userGameOption")).get(0); + + Optional userGameOptionOptional = userGameOptionService.getByUser(newUserData); + + UserGameOption userGameOption = userGameOptionOptional.orElseGet(() -> new UserGameOption(newUserData)); + + UserGameOption newUserGameOption = mapper.convert(userGameOptionMap, UserGameOption.class); + newUserGameOption.setId(userGameOption.getId()); + newUserGameOption.setUser(userGameOption.getUser()); + + userGameOptionService.save(newUserGameOption); + + + } + + // userGameOptionEx + if (upsertUserAll.containsKey("userGameOptionEx")) { + Map userGameOptionExMap = ((List>) upsertUserAll.get("userGameOptionEx")).get(0); + + Optional userGameOptionExOptional = userGameOptionExService.getByUser(newUserData); + UserGameOptionEx userGameOptionEx = userGameOptionExOptional.orElseGet(() -> new UserGameOptionEx(newUserData)); + + UserGameOptionEx newUserGameOptionEx = mapper.convert(userGameOptionExMap, UserGameOptionEx.class); + newUserGameOptionEx.setId(userGameOptionEx.getId()); + newUserGameOptionEx.setUser(userGameOptionEx.getUser()); + + userGameOptionExService.save(newUserGameOptionEx); + } + + // userMapList + if (upsertUserAll.containsKey("userMapList")) { + + int mapPos = 0; + + List> userMapList = (List>) upsertUserAll.get("userMapList"); + Map newUserMapMap = new HashMap<>(); + + userMapList.forEach(userMapListMap -> { + String mapId = (String) userMapListMap.get("mapId"); + UserMap userMap; + Optional userMapOptional = userMapService.getByUserAndMapId(newUserData, mapId); + userMap = userMapOptional.orElseGet(() -> new UserMap(newUserData)); + + + UserMap newUserMap = mapper.convert(userMapListMap, UserMap.class); + newUserMap.setId(userMap.getId()); + newUserMap.setUser(userMap.getUser()); + + newUserMapMap.put(mapId, newUserMap); + + }); + userMapService.saveAll(newUserMapMap.values()); + } + + // userCharacterList + if (upsertUserAll.containsKey("userCharacterList")) { + + List> userCharacterList = (List>) upsertUserAll.get("userCharacterList"); + Map newCharacterMap = new HashMap<>(); + + userCharacterList.forEach(userCharacterMap -> { + String characterId = (String) userCharacterMap.get("characterId"); + + Optional userCharacterOptional = userCharacterService.getByUserAndCharacterId(newUserData, characterId); + UserCharacter userCharacter = userCharacterOptional.orElseGet(() -> new UserCharacter(newUserData)); + + UserCharacter newUserCharacter = mapper.convert(userCharacterMap, UserCharacter.class); + newUserCharacter.setId(userCharacter.getId()); + newUserCharacter.setUser(userCharacter.getUser()); + + newCharacterMap.put(characterId, newUserCharacter); + }); + userCharacterService.saveAll(newCharacterMap.values()); + } + + // userItemList + if (upsertUserAll.containsKey("userItemList")) { + + List> userItemList = (List>) upsertUserAll.get("userItemList"); + Map newUserItemMap = new HashMap<>(); + + userItemList.forEach(userItemMap -> { + String itemId = (String) userItemMap.get("itemId"); + + + Optional userItemOptional = userItemService.getByUserAndItemId(newUserData, itemId); + UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(newUserData)); + + UserItem newUserItem = mapper.convert(userItemMap, UserItem.class); + newUserItem.setId(userItem.getId()); + newUserItem.setUser(userItem.getUser()); + + newUserItemMap.put(itemId, newUserItem); + }); + userItemService.saveAll(newUserItemMap.values()); + } + + // userMusicDetailList + if (upsertUserAll.containsKey("userMusicDetailList")) { + + List> userMusicDetailList = (List>) upsertUserAll.get("userMusicDetailList"); + Map newUserMusicDetailMap = new HashMap<>(); + + userMusicDetailList.forEach(userMusicDetailMap -> { + String musicId = (String) userMusicDetailMap.get("musicId"); + String level = (String) userMusicDetailMap.get("level"); + + Optional userMusicDetailOptional = userMusicDetailService.getByUserAndMusicIdAndLevel(newUserData, musicId, level); + UserMusicDetail userMusicDetail = userMusicDetailOptional.orElseGet(() -> new UserMusicDetail(newUserData)); + + UserMusicDetail newUserMusicDetail = mapper.convert(userMusicDetailMap, UserMusicDetail.class); + newUserMusicDetail.setId(userMusicDetail.getId()); + newUserMusicDetail.setUser(userMusicDetail.getUser()); + + newUserMusicDetailMap.put(musicId + "," + level, newUserMusicDetail); + + }); + userMusicDetailService.saveAll(newUserMusicDetailMap.values()); + + } + + // userActivityList + if (upsertUserAll.containsKey("userActivityList")) { + + List> userActivityList = (List>) upsertUserAll.get("userActivityList"); + userActivityList.forEach(userActivityMap -> { + // No need to rename to activityId. jackson auto handle that + String activityId = (String) userActivityMap.get("id"); + String kind = (String) userActivityMap.get("kind"); + + Optional userActivityOptional = userActivityService.getByUserAndActivityIdAndKind(newUserData, activityId, kind); + UserActivity userActivity = userActivityOptional.orElseGet(() -> new UserActivity(newUserData)); + + UserActivity newUserActivity = mapper.convert(userActivityMap, UserActivity.class); + newUserActivity.setId(userActivity.getId()); + newUserActivity.setUser(userActivity.getUser()); + + userActivityService.save(newUserActivity); + + }); + } + + // userRecentRatingList + + // userChargeList + + if (upsertUserAll.containsKey("userChargeList")) { + List> userChargeList = (List>) upsertUserAll.get("userChargeList"); + List newUserChargeList = new ArrayList<>(); + userChargeList.forEach(userChargeMap -> { + String chargeId = (String) userChargeMap.get("chargeId"); + + Optional userChargeOptional = userChargeService.getByUserAndChargeId(newUserData, chargeId); + UserCharge userCharge = userChargeOptional.orElseGet(() -> new UserCharge(newUserData)); + + UserCharge newUserCharge = mapper.convert(userChargeMap, UserCharge.class); + newUserCharge.setId(userCharge.getId()); + newUserCharge.setUser(userCharge.getUser()); + newUserChargeList.add(newUserCharge); + }); + + userChargeService.saveAll(newUserChargeList); + } + + // userPlaylogList + if (upsertUserAll.containsKey("userPlaylogList")) { + + List> userPlaylogList = (List>) upsertUserAll.get("userPlaylogList"); + List newUserPlaylogList = new ArrayList<>(); + userPlaylogList.forEach(userPlayLogMap -> { + + UserPlaylog newUserPlaylog = mapper.convert(userPlayLogMap, UserPlaylog.class); + newUserPlaylog.setUser(newUserData); + + newUserPlaylogList.add(newUserPlaylog); + }); + + if (newUserPlaylogList.size() > 0) userPlaylogService.saveAll(newUserPlaylogList); + } + + + // userCourseList + if (upsertUserAll.containsKey("userCourseList")) { + List> userCourseList = (List>) upsertUserAll.get("userCourseList"); + + userCourseList.forEach(userCourseMap -> { + String courseId = (String) userCourseMap.get("courseId"); + + Optional userCourseOptional = userCourseService.getByUserAndCourseId(newUserData, courseId); + UserCourse userCourse = userCourseOptional.orElseGet(() -> new UserCourse(newUserData)); + + UserCourse newUserCourse = mapper.convert(userCourseMap, UserCourse.class); + newUserCourse.setId(userCourse.getId()); + newUserCourse.setUser(userCourse.getUser()); + + userCourseService.save(newUserCourse); + }); + } + + + // userDataEx + if (upsertUserAll.containsKey("userDataEx")) { + Map userDataExMap = ((List>) upsertUserAll.get("userDataEx")).get(0); + + Optional userDataExOptional = userDataExService.getByUser(newUserData); + UserDataEx userDataEx = userDataExOptional.orElseGet(() -> new UserDataEx(newUserData)); + + UserDataEx newUserDataEx = mapper.convert(userDataExMap, UserDataEx.class); + newUserDataEx.setId(userDataEx.getId()); + newUserDataEx.setUser(userDataEx.getUser()); + + userDataExService.save(newUserDataEx); + } + + // userDuelList + if (upsertUserAll.containsKey("userDuelList")) { + + List> userDuelList = (List>) upsertUserAll.get("userDuelList"); + Map newUserDuelMap = new HashMap<>(); + userDuelList.forEach(userDuelMap -> { + String duelId = (String) userDuelMap.get("duelId"); + + Optional userDuelOptional = userDuelService.getByUserAndDuelId(newUserData, duelId); + UserDuel userDuel = userDuelOptional.orElseGet(() -> new UserDuel(newUserData)); + + UserDuel newUserDuel = mapper.convert(userDuelMap, UserDuel.class); + newUserDuel.setId(userDuel.getId()); + newUserDuel.setUser(userDuel.getUser()); + + newUserDuelMap.put(duelId, newUserDuel); + }); + + userDuelService.saveAll(newUserDuelMap.values()); + } + + String json = mapper.write(new CodeResp(1)); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserChargelogHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserChargelogHandler.java new file mode 100644 index 0000000..a91c86b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/UpsertUserChargelogHandler.java @@ -0,0 +1,60 @@ +package icu.samnyan.aqua.sega.chunithm.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharge; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.service.UserChargeService; +import icu.samnyan.aqua.sega.chunithm.service.UserDataService; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UpsertUserChargelogHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(UpsertUserChargelogHandler.class); + + private final StringMapper mapper; + + private final UserDataService userDataService; + private final UserChargeService userChargeService; + + public UpsertUserChargelogHandler(StringMapper mapper, UserDataService userDataService, UserChargeService userChargeService) { + this.mapper = mapper; + this.userDataService = userDataService; + this.userChargeService = userChargeService; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String userId = (String) request.get("userId"); + UserData user = userDataService.getUserByExtId(userId).orElseThrow(); + + Map userChargeMap = (Map) request.get("userCharge"); + String chargeId = (String) userChargeMap.get("chargeId"); + UserCharge charge = mapper.convert(userChargeMap, UserCharge.class); + + UserCharge userCharge = userChargeService.getByUserAndChargeId(user, chargeId).orElseGet(() -> new UserCharge(user)); + userCharge.setChargeId(charge.getChargeId()); + userCharge.setStock(charge.getStock()); + userCharge.setPurchaseDate(charge.getPurchaseDate()); + userCharge.setValidDate(charge.getValidDate()); + userCharge.setParam1(charge.getParam1()); + userCharge.setParam2(charge.getParam2()); + userCharge.setParamDate(charge.getParamDate()); + + userChargeService.save(userCharge); + + String json = mapper.write(new CodeResp(1)); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Diff.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Diff.java new file mode 100644 index 0000000..1d756fa --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Diff.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum Diff { + + BASIC("BASIC"), + ADVANCED("ADVANCED"), + EXPERT("EXPERT"), + MASTER("MASTER"), + WE("WORLD'S END"); + + private String displayName; + + Diff(String displayName) { + this.displayName = displayName; + } + + public String displayName() { + return displayName; + } + + @Override + public String toString() { + return displayName; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameCharge.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameCharge.java new file mode 100644 index 0000000..5cbb1c2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameCharge.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniGameCharge") +@Table(name = "chuni_game_charge") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameCharge implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + private int orderId; + + @Column(unique = true) + private int chargeId; + + private int price; + + private LocalDateTime startDate; + + private LocalDateTime endDate; + + private int salePrice; + + private LocalDateTime saleStartDate; + + private LocalDateTime saleEndDate; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameEvent.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameEvent.java new file mode 100644 index 0000000..25e881e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameEvent.java @@ -0,0 +1,33 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniGameEvent") +@Table(name = "chuni_game_event") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameEvent implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + private int id; + + private int type; + + private LocalDateTime startDate; + + private LocalDateTime endDate; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameMessage.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameMessage.java new file mode 100644 index 0000000..e12b275 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/GameMessage.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniGameMessage") +@Table(name = "chuni_game_message") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + private int id; + + private int type; + + private String message; + + private LocalDateTime startDate; + + private LocalDateTime endDate; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Genre.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Genre.java new file mode 100644 index 0000000..be035f2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Genre.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum Genre { + POPS_ANIME("POPS & ANIME"), + RESERVE("Reserve"), + NICONICO("niconico"), + TOUHOU("東方Project"), + RESERVE2("Reserve2"), + ORIGINAL("Original"), + VARIETY("Variety"), + IRODORI("イロドリミドリ"), + KOTONOHA("言ノ葉Project"); + + + private String displayName; + + Genre(String displayName) { + this.displayName = displayName; + } + + public String displayName() { + return displayName; + } + + @Override + public String toString() { + return displayName; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Level.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Level.java new file mode 100644 index 0000000..01c629f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Level.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniMusicLevel") +@Table(name = "chuni_music_level") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Level implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "music_id") + private Music music; + + private boolean enable; + + private int level; + + private int levelDecimal; + + private int diff; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Music.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Music.java new file mode 100644 index 0000000..7d5a6de --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/gamedata/Music.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.chunithm.model.gamedata; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniMusic") +@Table(name = "chuni_music") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Music implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + private int musicId; + + private String name; + + private String sortName; + + // Copyright info + private String copyright; + + private String artistName; + + private Genre genre; + + private String releaseVersion; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "music") + @MapKey(name = "diff") + private Map levels; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/CodeResp.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/CodeResp.java new file mode 100644 index 0000000..90e7845 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/CodeResp.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.chunithm.model.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CodeResp { + private int returnCode; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetGameSettingResp.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetGameSettingResp.java new file mode 100644 index 0000000..77abd88 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetGameSettingResp.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.chunithm.model.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.sega.chunithm.model.response.data.GameSetting; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GetGameSettingResp { + + private GameSetting gameSetting; + @JsonProperty("isDumpUpload") + private boolean isDumpUpload; + @JsonProperty("isAou") + private boolean isAou; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetUserPreviewResp.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetUserPreviewResp.java new file mode 100644 index 0000000..87c3452 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/GetUserPreviewResp.java @@ -0,0 +1,38 @@ +package icu.samnyan.aqua.sega.chunithm.model.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharacter; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GetUserPreviewResp { + + private String userId; + @JsonProperty("isLogin") + private boolean isLogin; + private LocalDateTime lastLoginDate; + private String userName; + private int reincarnationNum; + private int level; + private String exp; + private int playerRating; + private String lastGameId; + private String lastRomVersion; + private String lastDataVersion; + private LocalDateTime lastPlayDate; + private int trophyId; + private UserCharacter userCharacter; + private int playerLevel; + private int rating; + private int headphone; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/AllMusicMapItem.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/AllMusicMapItem.java new file mode 100644 index 0000000..5f8ed7a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/AllMusicMapItem.java @@ -0,0 +1,8 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class AllMusicMapItem { + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java new file mode 100644 index 0000000..45d7a22 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameRanking { + private long id; + private long point; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSale.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSale.java new file mode 100644 index 0000000..1914b5f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSale.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameSale { + + private int orderId; + + private int type; + + private int id; + // should be float number?? + private int rate; + + private LocalDateTime startDate; + + private LocalDateTime endDate; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSetting.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSetting.java new file mode 100644 index 0000000..ee9a515 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameSetting.java @@ -0,0 +1,26 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameSetting { + private int dataVersion; + @JsonProperty("isMaintenance") + private boolean isMaintenance; + private int requestInterval; + private int rebootStartTime; + private int rebootEndTime; + @JsonProperty("isBackgroundDistribute") + private boolean isBackgroundDistribute; + private int maxCountCharacter; + private int maxCountItem; + private int maxCountMusic; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserMusicListItem.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserMusicListItem.java new file mode 100644 index 0000000..7fd74ad --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserMusicListItem.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMusicDetail; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserMusicListItem { + private int length; + private List userMusicDetailList; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserRecentRating.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserRecentRating.java new file mode 100644 index 0000000..a01be45 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/UserRecentRating.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.chunithm.model.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserRecentRating { + private int musicId; + private int difficultId; + private String romVersionCode; + private int score; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserActivity.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserActivity.java new file mode 100644 index 0000000..a476ebc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserActivity.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserActivity") +@Table(name = "chuni_user_activity", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "kind", "activity_id"})}) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({"kind", "id", "sortNumber", "param1", "param2", "param3", "param4"}) +public class UserActivity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int kind; + + @JsonProperty("id") + @Column(name = "activity_id") + private int activityId; + + private int sortNumber; + + private int param1; + + private int param2; + + private int param3; + + private int param4; + + public UserActivity(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java new file mode 100644 index 0000000..5023122 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserCharacter") +@Table(name = "chuni_user_character") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({"characterId", "playCount", "level", "skillId", "friendshipExp", "isValid", "isNewMark", "param1", "param2"}) +public class UserCharacter implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int characterId; + + private int playCount; + + private int level; + + private int skillId; + + private int friendshipExp; + + @JsonProperty("isValid") + private boolean isValid; + + @JsonProperty("isNewMark") + private boolean isNewMark; + + private int param1; + + private int param2; + + public UserCharacter(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java new file mode 100644 index 0000000..413dbfa --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserCharge") +@Table(name = "chuni_user_charge") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({"chargeId", "stock", "purchaseDate", "validDate", "param1", "param2", "paramDate"}) +public class UserCharge implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int chargeId; + + private int stock; + + private LocalDateTime purchaseDate; + + private LocalDateTime validDate; + + private int param1; + + private int param2; + + private LocalDateTime paramDate; + + public UserCharge(UserData user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java new file mode 100644 index 0000000..846b882 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java @@ -0,0 +1,75 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserCourse") +@Table(name = "chuni_user_course") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserCourse { + + @Id + @JsonIgnore + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int courseId; + + private int classId; + + private int playCount; + + private int scoreMax; + + @JsonProperty("isFullCombo") + private boolean isFullCombo; + + @JsonProperty("isAllJustice") + private boolean isAllJustice; + + @JsonProperty("isSuccess") + private boolean isSuccess; + + private int scoreRank; + + private int eventId; + + private LocalDateTime lastPlayDate; + + private int param1; + + private int param2; + + private int param3; + + private int param4; + + private int playerRating; + + @JsonProperty("isClear") + private boolean isClear; + + public UserCourse(UserData userData) { + user = userData; + } + + public UserCourse(int classId) { + this.classId = classId; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java new file mode 100644 index 0000000..9eb5220 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java @@ -0,0 +1,188 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserData") +@Table(name = "chuni_user_data") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "accessCode", + "userName", + "isWebJoin", + "webLimitDate", "level", + "reincarnationNum", + "exp", + "point", + "totalPoint", + "playCount", + "multiPlayCount", + "multiWinCount", + "requestResCount", + "acceptResCount", + "successResCount", + "playerRating", + "highestRating", + "nameplateId", + "frameId", + "characterId", + "trophyId", + "playedTutorialBit", + "firstTutorialCancelNum", + "masterTutorialCancelNum", + "totalRepertoireCount", + "totalMapNum", + "totalHiScore", + "totalBasicHighScore", + "totalAdvancedHighScore", + "totalExpertHighScore", + "totalMasterHighScore", + "eventWatchedDate", + "friendCount", + "isMaimai", + "firstGameId", + "firstRomVersion", + "firstDataVersion", + "firstPlayDate", + "lastGameId", + "lastRomVersion", + "lastDataVersion", + "lastPlayDate", + "lastPlaceId", + "lastPlaceName", + "lastRegionId", + "lastRegionName", + "lastAllNetId", + "lastClientId"}) +public class UserData implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonSerialize(using = AccessCodeSerializer.class) + @JsonProperty(value = "accessCode", access = JsonProperty.Access.READ_ONLY) + @OneToOne + @JoinColumn(name = "card_id") + private Card card; + // Access code in card + + private String userName; + + @JsonIgnore + private LocalDateTime lastLoginDate; + + @JsonProperty("isWebJoin") + private boolean isWebJoin; + + private String webLimitDate; + + private int level; + + private int reincarnationNum; + + private String exp; + + private long point; + + private long totalPoint; + + private int playCount; + + private int multiPlayCount; + + private int multiWinCount; + + private int requestResCount; + + private int acceptResCount; + + private int successResCount; + + private int playerRating; + + private int highestRating; + + private int nameplateId; + + private int frameId; + + // Currently selected UserCharacter + private int characterId; + + private int trophyId; + + private int playedTutorialBit; + + private int firstTutorialCancelNum; + + private int masterTutorialCancelNum; + + private int totalRepertoireCount; + + private int totalMapNum; + + private long totalHiScore; + + private long totalBasicHighScore; + + private long totalAdvancedHighScore; + + private long totalExpertHighScore; + + private long totalMasterHighScore; + + private LocalDateTime eventWatchedDate; + + private int friendCount; + + @JsonProperty("isMaimai") + private boolean isMaimai; + + private String firstGameId; + + private String firstRomVersion; + + private String firstDataVersion; + + private LocalDateTime firstPlayDate; + + private String lastGameId; + + private String lastRomVersion; + + private String lastDataVersion; + + private LocalDateTime lastPlayDate; + + private int lastPlaceId; + + private String lastPlaceName; + + private String lastRegionId; + + private String lastRegionName; + + private String lastAllNetId; + + private String lastClientId; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDataEx.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDataEx.java new file mode 100644 index 0000000..10b9219 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDataEx.java @@ -0,0 +1,142 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserDataEx") +@Table(name = "chuni_user_data_ex") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "compatibleCmVersion", + "medal", + "mapIconId", + "voiceId", + "ext1", + "ext2", + "ext3", + "ext4", + "ext5", + "ext6", + "ext7", + "ext8", + "ext9", + "ext10", + "ext11", + "ext12", + "ext13", + "ext14", + "ext15", + "ext16", + "ext17", + "ext18", + "ext19", + "ext20", + "extStr1", + "extStr2", + "extStr3", + "extStr4", + "extStr5", + "extLong1", + "extLong2", + "extLong3", + "extLong4", + "extLong5" +}) +public class UserDataEx implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private String compatibleCmVersion; + + private int medal; + + private int mapIconId; + + private int voiceId; + + private int ext1; + + private int ext2; + + private int ext3; + + private int ext4; + + private int ext5; + + private int ext6; + + private int ext7; + + private int ext8; + + private int ext9; + + private int ext10; + + private int ext11; + + private int ext12; + + private int ext13; + + private int ext14; + + private int ext15; + + private int ext16; + + private int ext17; + + private int ext18; + + private int ext19; + + private int ext20; + + private String extStr1; + + private String extStr2; + + private String extStr3; + + private String extStr4; + + private String extStr5; + + private long extLong1; + + private long extLong2; + + private long extLong3; + + private long extLong4; + + private long extLong5; + + + public UserDataEx(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java new file mode 100644 index 0000000..df035c2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserDuel") +@Table(name = "chuni_user_duel") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserDuel { + + @Id + @JsonIgnore + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int duelId; + + private int progress; + + private int point; + + @JsonProperty("isClear") + private boolean isClear; + + private LocalDateTime lastPlayDate; + + private int param1; + + private int param2; + + private int param3; + + private int param4; + + public UserDuel(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOption.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOption.java new file mode 100644 index 0000000..0976cbc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOption.java @@ -0,0 +1,106 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserGameOption") +@Table(name = "chuni_user_game_option") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "bgInfo", + "fieldColor", + "guideSound", + "soundEffect", + "guideLine", + "speed", + "optionSet", + "matching", + "judgePos", + "rating", + "judgeJustice", + "judgeAttack", + "headphone", + "playerLevel", + "successTap", + "successExTap", + "successSlideHold", + "successAir", + "successFlick", + "successSkill", + "successTapTimbre", + "privacy" +}) +public class UserGameOption implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @JsonIgnore + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int bgInfo; + + private int fieldColor; + + private int guideSound; + + private int soundEffect; + + private int guideLine; + + private int speed; + + private int optionSet; + + private int matching; + + private int judgePos; + + private int rating; + + private int judgeJustice; + + private int judgeAttack; + + private int headphone; + + private int playerLevel; + + private int successTap; + + private int successExTap; + + private int successSlideHold; + + private int successAir; + + private int successFlick; + + private int successSkill; + + private int successTapTimbre; + + private int privacy; + + + public UserGameOption(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOptionEx.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOptionEx.java new file mode 100644 index 0000000..b3442fe --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserGameOptionEx.java @@ -0,0 +1,100 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserGameOptionEx") +@Table(name = "chuni_user_game_option_ex") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "ext1", + "ext2", + "ext3", + "ext4", + "ext5", + "ext6", + "ext7", + "ext8", + "ext9", + "ext10", + "ext11", + "ext12", + "ext13", + "ext14", + "ext15", + "ext16", + "ext17", + "ext18", + "ext19", + "ext20" +}) +public class UserGameOptionEx implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int ext1; + + private int ext2; + + private int ext3; + + private int ext4; + + private int ext5; + + private int ext6; + + private int ext7; + + private int ext8; + + private int ext9; + + private int ext10; + + private int ext11; + + private int ext12; + + private int ext13; + + private int ext14; + + private int ext15; + + private int ext16; + + private int ext17; + + private int ext18; + + private int ext19; + + private int ext20; + + + public UserGameOptionEx(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java new file mode 100644 index 0000000..5eabd7b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java @@ -0,0 +1,49 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserItem") +@Table(name = "chuni_user_item") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({"itemKind", "itemId", "stock", "isValid"}) +public class UserItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + // Kind ,Type + private int itemKind; + + private int itemId; + + private int stock; + + @JsonProperty("isValid") + private boolean isValid; + + public UserItem(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java new file mode 100644 index 0000000..e4f86a4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java @@ -0,0 +1,69 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserMap") +@Table(name = "chuni_user_map") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "mapId", + "position", + "isClear", + "areaId", + "routeNumber", + "eventId", + "rate", + "statusCount", + "isValid" +}) +public class UserMap implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int mapId; + + private int position; + + @JsonProperty("isClear") + private boolean isClear; + + private int areaId; + + private int routeNumber; + + private int eventId; + + private int rate; + + private int statusCount; + + @JsonProperty("isValid") + private boolean isValid; + + public UserMap(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java new file mode 100644 index 0000000..587d593 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java @@ -0,0 +1,112 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserMusicDetail") +@Table(name = "chuni_user_music_detail") +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonPropertyOrder({ + "musicId", + "level", + "playCount", + "scoreMax", + "resRequestCount", + "resAcceptCount", + "resSuccessCount", + "missCount", + "maxComboCount", + "isFullCombo", + "isAllJustice", + "isSuccess", + "fullChain", + "maxChain", + "scoreRank", + "isLock" +}) +public class UserMusicDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int musicId; + + private int level; + + private int playCount; + + private int scoreMax; + + private int resRequestCount; + + private int resAcceptCount; + + private int resSuccessCount; + + private int missCount; + + private int maxComboCount; + + @JsonProperty("isFullCombo") + private boolean isFullCombo; + + @JsonProperty("isAllJustice") + private boolean isAllJustice; + + @JsonProperty("isSuccess") + private boolean isSuccess; + + private int fullChain; + + private int maxChain; + + private int scoreRank; + + @JsonProperty("isLock") + private boolean isLock; + + + public UserMusicDetail(UserData userData) { + user = userData; + } + + public UserMusicDetail(int musicId, int level, int playCount, int scoreMax, int resRequestCount, int resAcceptCount, int resSuccessCount, int missCount, int maxComboCount, boolean isFullCombo, boolean isAllJustice, boolean isSuccess, int fullChain, int maxChain, int scoreRank, boolean isLock) { + this.musicId = musicId; + this.level = level; + this.playCount = playCount; + this.scoreMax = scoreMax; + this.resRequestCount = resRequestCount; + this.resAcceptCount = resAcceptCount; + this.resSuccessCount = resSuccessCount; + this.missCount = missCount; + this.maxComboCount = maxComboCount; + this.isFullCombo = isFullCombo; + this.isAllJustice = isAllJustice; + this.isSuccess = isSuccess; + this.fullChain = fullChain; + this.maxChain = maxChain; + this.scoreRank = scoreRank; + this.isLock = isLock; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserPlaylog.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserPlaylog.java new file mode 100644 index 0000000..fe5cc7f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserPlaylog.java @@ -0,0 +1,146 @@ +package icu.samnyan.aqua.sega.chunithm.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "ChuniUserPlaylog") +@Table(name = "chuni_user_playlog") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserPlaylog implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int orderId; + + private int sortNumber; + + private int placeId; + + private LocalDateTime playDate; + + private LocalDateTime userPlayDate; + + private int musicId; + + private int level; + + private int customId; + + private int playedUserId1; + + private int playedUserId2; + + private int playedUserId3; + + private String playedUserName1; + + private String playedUserName2; + + private String playedUserName3; + + private int playedMusicLevel1; + + private int playedMusicLevel2; + + private int playedMusicLevel3; + + private int playedCustom1; + + private int playedCustom2; + + private int playedCustom3; + + private int track; + + private int score; + + private int rank; + + private int maxCombo; + + private int maxChain; + + private int rateTap; + + private int rateHold; + + private int rateSlide; + + private int rateAir; + + private int rateFlick; + + private int judgeGuilty; + + private int judgeAttack; + + private int judgeJustice; + + private int judgeCritical; + + private int eventId; + + private int playerRating; + + @JsonProperty("isNewRecord") + private boolean isNewRecord; + + @JsonProperty("isFullCombo") + private boolean isFullCombo; + + private int fullChainKind; + + @JsonProperty("isAllJustice") + private boolean isAllJustice; + + @JsonProperty("isContinue") + private boolean isContinue; + + @JsonProperty("isFreeToPlay") + private boolean isFreeToPlay; + + private int characterId; + + private int skillId; + + private int playKind; + + @JsonProperty("isClear") + private boolean isClear; + + private int skillLevel; + + private int skillEffect; + + private String placeName; + + @JsonProperty("isMaimai") + private boolean isMaimai; + + + public UserPlaylog(UserData userData) { + user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/GameMusicService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/GameMusicService.java new file mode 100644 index 0000000..b559310 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/GameMusicService.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.gamedata.GameMusicRepository; +import icu.samnyan.aqua.sega.chunithm.model.gamedata.Music; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class GameMusicService { + + private final GameMusicRepository gameMusicRepository; + + @Autowired + public GameMusicService(GameMusicRepository gameMusicRepository) { + this.gameMusicRepository = gameMusicRepository; + } + + public Music save(Music music) { + return gameMusicRepository.save(music); + } + + public List saveAll(List musicList) { + return gameMusicRepository.saveAll(musicList); + } + + @Cacheable("music") + public List getAll() { + return gameMusicRepository.findAll(); + } + + public Map getIdMap() { + Map musicMap = new LinkedHashMap<>(); + getAll().forEach(music -> musicMap.put(music.getMusicId(), music)); + return musicMap; + } + + public Optional getById(String musicId) { + return getById(Integer.parseInt(musicId)); + } + + public Optional getById(int musicId) { + return gameMusicRepository.findByMusicId(musicId); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java new file mode 100644 index 0000000..82b43de --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserActivityRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserActivity; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserActivityService { + + private final UserActivityRepository userActivityRepository; + + @Autowired + public UserActivityService(UserActivityRepository userActivityRepository) { + this.userActivityRepository = userActivityRepository; + } + + public UserActivity save(UserActivity userActivity) { + return userActivityRepository.save(userActivity); + } + + public List saveAll(List userActivityList) { + return userActivityRepository.saveAll(userActivityList); + } + + public Optional getByUserAndActivityIdAndKind(UserData user, String activityId, String kind) { + return userActivityRepository.findTopByUserAndActivityIdAndKindOrderByIdDesc(user, Integer.parseInt(activityId), Integer.parseInt(kind)); + } + + public List getAllByUserIdAndKind(String userId, String kind) { + return userActivityRepository.findAllByUser_Card_ExtIdAndKindOrderBySortNumberDesc(Long.parseLong(userId), Integer.parseInt(kind)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java new file mode 100644 index 0000000..09b2795 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserCharacterRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserCharacterService { + + private final UserCharacterRepository userCharacterRepository; + + @Autowired + public UserCharacterService(UserCharacterRepository userCharacterRepository) { + this.userCharacterRepository = userCharacterRepository; + } + + public Optional getByUserAndCharacterId(UserData user, String characterId) { + return getByUserAndCharacterId(user, Integer.parseInt(characterId)); + } + + public Optional getByUserAndCharacterId(UserData user, int characterId) { + return userCharacterRepository.findTopByUserAndCharacterIdOrderByIdDesc(user, characterId); + } + + public UserCharacter save(UserCharacter userCharacter) { + return userCharacterRepository.save(userCharacter); + } + + public List saveAll(Iterable userCharacter) { + return userCharacterRepository.saveAll(userCharacter); + } + + public Page getByUser(String userId, int pageNumber, int maxCount) { + Pageable pageable = PageRequest.of(pageNumber, maxCount); + return userCharacterRepository.findByUser_Card_ExtId(Long.parseLong(userId), pageable); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java new file mode 100644 index 0000000..a438652 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java @@ -0,0 +1,38 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserChargeRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCharge; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserChargeService { + + private final UserChargeRepository userChargeRepository; + + public UserChargeService(UserChargeRepository userChargeRepository) { + this.userChargeRepository = userChargeRepository; + } + + public UserCharge save(UserCharge userCharge) { + return userChargeRepository.save(userCharge); + } + + public List getByUserId(String userId) { + return userChargeRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } + + public Optional getByUserAndChargeId(UserData user, String chargeId) { + return userChargeRepository.findByUserAndChargeId(user, Integer.parseInt(chargeId)); + } + + public List saveAll(List newUserChargeList) { + return userChargeRepository.saveAll(newUserChargeList); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java new file mode 100644 index 0000000..875cbf0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserCourseRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserCourse; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserCourseService { + + private final UserCourseRepository userCourseRepository; + + @Autowired + public UserCourseService(UserCourseRepository userCourseRepository) { + this.userCourseRepository = userCourseRepository; + } + + public Optional getByUserAndCourseId(UserData user, String courseId) { + return userCourseRepository.findTopByUserAndCourseIdOrderByIdDesc(user, Integer.parseInt(courseId)); + } + + public UserCourse save(UserCourse userCourse) { + return userCourseRepository.save(userCourse); + } + + public List saveAll(Iterable userMusicDetail) { + return userCourseRepository.saveAll(userMusicDetail); + } + + public List getByUser(String userId) { + return userCourseRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } + + public Page getByUser(String userId, int pageNum, int maxCount) { + Pageable page = PageRequest.of(pageNum, maxCount); + return userCourseRepository.findByUser_Card_ExtId(Long.parseLong(userId), page); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java new file mode 100644 index 0000000..904a52f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserDataExRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDataEx; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserDataExService { + + private final UserDataExRepository userDataExRepository; + + @Autowired + public UserDataExService(UserDataExRepository userDataExRepository) { + this.userDataExRepository = userDataExRepository; + } + + public Optional getByUser(UserData user) { + return userDataExRepository.findByUser(user); + } + + public UserDataEx save(UserDataEx userDataEx) { + return userDataExRepository.save(userDataEx); + } + + public Optional getUserByExtId(String userId) { + return userDataExRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java new file mode 100644 index 0000000..fdfb421 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserDataRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserDataService { + + private final UserDataRepository userDataRepository; + + @Autowired + public UserDataService(UserDataRepository userDataRepository) { + this.userDataRepository = userDataRepository; + } + + public Optional getUserByExtId(String aimeId) { + return userDataRepository.findByCard_ExtId(Long.parseLong(aimeId)); + } + + public String updateLoginTime(UserData userData) { + userData.setLastLoginDate(LocalDateTime.now()); + + try { + userDataRepository.save(userData); + return "1"; + } catch (Exception e) { + return "0"; + } + } + + public UserData saveUserData(UserData userData) { + return userDataRepository.save(userData); + } + + public UserData saveAndFlushUserData(UserData userData) { + return userDataRepository.saveAndFlush(userData); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java new file mode 100644 index 0000000..ddfb172 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserDuelRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserDuel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserDuelService { + + private final UserDuelRepository userDuelRepository; + + @Autowired + public UserDuelService(UserDuelRepository userDuelRepository) { + this.userDuelRepository = userDuelRepository; + } + + public Optional getByUserAndDuelId(UserData user, String duelId) { + return userDuelRepository.findTopByUserAndDuelIdOrderByIdDesc(user, Integer.parseInt(duelId)); + } + + public UserDuel save(UserDuel userDuel) { + return userDuelRepository.save(userDuel); + } + + public List saveAll(Iterable userDuel) { + return userDuelRepository.saveAll(userDuel); + } + + public List getByUser(String userId) { + return userDuelRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java new file mode 100644 index 0000000..0c70487 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserGameOptionExRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOptionEx; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserGameOptionExService { + + private final UserGameOptionExRepository userGameOptionExRepository; + + @Autowired + public UserGameOptionExService(UserGameOptionExRepository userGameOptionExRepository) { + this.userGameOptionExRepository = userGameOptionExRepository; + } + + public Optional getByUser(UserData userData) { + return userGameOptionExRepository.findByUser(userData); + } + + public UserGameOptionEx save(UserGameOptionEx userGameOptionEx) { + return userGameOptionExRepository.save(userGameOptionEx); + } + + public Optional getByUserId(String userId) { + return userGameOptionExRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java new file mode 100644 index 0000000..c3b0947 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserGameOptionRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserGameOption; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserGameOptionService { + + private final UserGameOptionRepository userGameOptionRepository; + + @Autowired + public UserGameOptionService(UserGameOptionRepository userGameOptionRepository) { + this.userGameOptionRepository = userGameOptionRepository; + } + + public Optional getByUserId(String userId) { + return userGameOptionRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } + + public Optional getByUser(UserData user) { + return userGameOptionRepository.findByUser(user); + } + + public UserGameOption save(UserGameOption userGameOption) { + return userGameOptionRepository.save(userGameOption); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java new file mode 100644 index 0000000..4b9ad11 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserItemRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserItem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserItemService { + private final UserItemRepository userItemRepository; + + @Autowired + public UserItemService(UserItemRepository userItemRepository) { + this.userItemRepository = userItemRepository; + } + + + public Optional getByUserAndItemId(UserData user, String itemId) { + return userItemRepository.findTopByUserAndItemIdOrderByIdDesc(user, Integer.parseInt(itemId)); + } + + public UserItem save(UserItem userItem) { + return userItemRepository.save(userItem); + } + + public List saveAll(Iterable userItem) { + return userItemRepository.saveAll(userItem); + } + + public Page getByUserAndItemKind(String userId, int kind, int pageNumber, int maxCount) { + Pageable page = PageRequest.of(pageNumber, maxCount); + return userItemRepository.findAllByUser_Card_ExtIdAndItemKind(Long.parseLong(userId), kind, page); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java new file mode 100644 index 0000000..b9a0a0b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserMapRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserMapService { + + private final UserMapRepository userMapRepository; + + @Autowired + public UserMapService(UserMapRepository userMapRepository) { + this.userMapRepository = userMapRepository; + } + + public List getByUser(UserData user) { + return userMapRepository.findAllByUser(user); + } + + public List getByUser(String userId) { + return userMapRepository.findAllByUser_Card_ExtId(Long.parseLong(userId)); + } + + public Optional getByUserAndMapId(UserData user, String mapId) { + return userMapRepository.findTopByUserAndMapIdOrderByIdDesc(user, Integer.parseInt(mapId)); + } + + public UserMap save(UserMap userMap) { + return userMapRepository.save(userMap); + } + + public List saveAll(Iterable userMap) { + return userMapRepository.saveAll(userMap); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java new file mode 100644 index 0000000..03bd751 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserMusicDetailRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserMusicDetail; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserMusicDetailService { + + private final UserMusicDetailRepository userMusicDetailRepository; + + @Autowired + public UserMusicDetailService(UserMusicDetailRepository userMusicDetailRepository) { + this.userMusicDetailRepository = userMusicDetailRepository; + } + + public Optional getByUserAndMusicIdAndLevel(UserData user, String musicId, String level) { + return userMusicDetailRepository.findTopByUserAndMusicIdAndLevelOrderByIdDesc(user, Integer.parseInt(musicId), Integer.parseInt(level)); + } + + public UserMusicDetail save(UserMusicDetail userMusicDetail) { + return userMusicDetailRepository.save(userMusicDetail); + } + + public List saveAll(Iterable userMusicDetail) { + return userMusicDetailRepository.saveAll(userMusicDetail); + } + + public List getByUser(String userId) { + return userMusicDetailRepository.findByUser_Card_ExtId(Long.parseLong(userId)); + } + + public Page getByUser(String userId, int pageNum, int maxCount) { + Pageable page = PageRequest.of(pageNum, maxCount); + return userMusicDetailRepository.findByUser_Card_ExtId(Long.parseLong(userId), page); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java new file mode 100644 index 0000000..09ce1e1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.chunithm.service; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserPlaylogRepository; +import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class UserPlaylogService { + + private final UserPlaylogRepository userPlaylogRepository; + + @Autowired + public UserPlaylogService(UserPlaylogRepository userPlaylogRepository) { + this.userPlaylogRepository = userPlaylogRepository; + } + + public UserPlaylog save(UserPlaylog userPlaylog) { + return userPlaylogRepository.save(userPlaylog); + } + + public List saveAll(List userPlaylogList) { + return userPlaylogRepository.saveAll(userPlaylogList); + } + + public List getRecent30Plays(String userId) { + Pageable page = PageRequest.of(0, 30, Sort.by(Sort.Direction.DESC, "userPlayDate")); + return userPlaylogRepository.findByUser_Card_ExtIdAndLevelNot(Long.parseLong(userId), 4, page); + } + + public List getRecentPlays(String userId) { + Pageable page = PageRequest.of(0, 50, Sort.by(Sort.Direction.DESC, "userPlayDate")); + return userPlaylogRepository.findByUser_Card_ExtId(Long.parseLong(userId), page); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaController.java b/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaController.java new file mode 100644 index 0000000..bd1b088 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaController.java @@ -0,0 +1,292 @@ +package icu.samnyan.aqua.sega.diva.controller; + +import icu.samnyan.aqua.sega.diva.handler.boot.AttendHandler; +import icu.samnyan.aqua.sega.diva.handler.boot.GameInitHandler; +import icu.samnyan.aqua.sega.diva.handler.card.*; +import icu.samnyan.aqua.sega.diva.handler.databank.*; +import icu.samnyan.aqua.sega.diva.handler.ingame.*; +import icu.samnyan.aqua.sega.diva.handler.operation.PingHandler; +import icu.samnyan.aqua.sega.diva.handler.user.*; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.request.boot.GameInitRequest; +import icu.samnyan.aqua.sega.diva.model.request.card.CardProcedureRequest; +import icu.samnyan.aqua.sega.diva.model.request.card.ChangeNameRequest; +import icu.samnyan.aqua.sega.diva.model.request.card.ChangePasswdRequest; +import icu.samnyan.aqua.sega.diva.model.request.card.RegistrationRequest; +import icu.samnyan.aqua.sega.diva.model.request.databank.BannerDataRequest; +import icu.samnyan.aqua.sega.diva.model.request.databank.PsRankingRequest; +import icu.samnyan.aqua.sega.diva.model.request.ingame.*; +import icu.samnyan.aqua.sega.diva.model.request.user.PdUnlockRequest; +import icu.samnyan.aqua.sega.diva.model.request.user.PreStartRequest; +import icu.samnyan.aqua.sega.diva.model.request.user.SpendCreditRequest; +import icu.samnyan.aqua.sega.diva.model.request.user.StartRequest; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("/diva") +public class DivaController { + + private static final Logger logger = LoggerFactory.getLogger(DivaController.class); + + private final GameInitHandler gameInitHandler; + private final AttendHandler attendHandler; + + private final CardProcedureHandler cardProcedureHandler; + private final ChangeNameHandler changeNameHandler; + private final ChangePasswdHandler changePasswdHandler; + private final InitPasswdHandler initPasswdHandler; + private final RegistrationHandler registrationHandler; + + /** + * Databank + */ + private final BannerInfoHandler bannerInfoHandler; + private final BannerDataHandler bannerDataHandler; + private final CmPlyInfoHandler cmPlyInfoHandler; + private final ContestInfoHandler contestInfoHandler; + private final CstmzItmCtlgHandler cstmzItmCtlgHandler; + private final CstmzItmNgMdlListHandler cstmzItmNgMdlListHandler; + private final FestaInfoHandler festaInfoHandler; + private final NgWordHandler ngWordHandler; + private final NvRankingHandler nvRankingHandler; + private final PsRankingHandler psRankingHandler; + private final PstdHCtrlHandler pstdHCtrlHandler; + private final PstdItemNgLstHandler pstdItemNgLstHandler; + private final PvDefChrLstHandler pvDefChrLstHandler; + private final PvListHandler pvListHandler; + private final PvNgMdlLstHandler pvNgMdlLstHandler; + private final QstInfHandler qstInfHandler; + private final RmtWpLstHandler rmtWpLstHandler; + private final ShopCatalogHandler shopCatalogHandler; + + private final BuyCstmzItmHandler buyCstmzItmHandler; + private final BuyModuleHandler buyModuleHandler; + private final GetPvPdHandler getPvPdHandler; + private final ShopExitHandler shopExitHandler; + private final StageResultHandler stageResultHandler; + private final StageStartHandler stageStartHandler; + private final StoreSsHandler storeSsHandler; + + private final PingHandler pingHandler; + + private final EndHandler endHandler; + private final PdUnlockHandler pdUnlockHandler; + private final PreStartHandler preStartHandler; + private final SpendCreditHandler spendCreditHandler; + private final StartHandler startHandler; + + private final DivaMapper mapper; + + public DivaController(GameInitHandler gameInitHandler, AttendHandler attendHandler, CardProcedureHandler cardProcedureHandler, ChangeNameHandler changeNameHandler, ChangePasswdHandler changePasswdHandler, InitPasswdHandler initPasswdHandler, RegistrationHandler registrationHandler, BannerInfoHandler bannerInfoHandler, BannerDataHandler bannerDataHandler, CmPlyInfoHandler cmPlyInfoHandler, ContestInfoHandler contestInfoHandler, CstmzItmCtlgHandler cstmzItmCtlgHandler, CstmzItmNgMdlListHandler cstmzItmNgMdlListHandler, FestaInfoHandler festaInfoHandler, NgWordHandler ngWordHandler, NvRankingHandler nvRankingHandler, PsRankingHandler psRankingHandler, PstdHCtrlHandler pstdHCtrlHandler, PstdItemNgLstHandler pstdItemNgLstHandler, PvDefChrLstHandler pvDefChrLstHandler, PvListHandler pvListHandler, PvNgMdlLstHandler pvNgMdlLstHandler, QstInfHandler qstInfHandler, RmtWpLstHandler rmtWpLstHandler, ShopCatalogHandler shopCatalogHandler, BuyCstmzItmHandler buyCstmzItmHandler, BuyModuleHandler buyModuleHandler, GetPvPdHandler getPvPdHandler, ShopExitHandler shopExitHandler, StageResultHandler stageResultHandler, StageStartHandler stageStartHandler, StoreSsHandler storeSsHandler, PingHandler pingHandler, EndHandler endHandler, PdUnlockHandler pdUnlockHandler, PreStartHandler preStartHandler, SpendCreditHandler spendCreditHandler, StartHandler startHandler, DivaMapper mapper) { + this.gameInitHandler = gameInitHandler; + this.attendHandler = attendHandler; + this.cardProcedureHandler = cardProcedureHandler; + this.changeNameHandler = changeNameHandler; + this.changePasswdHandler = changePasswdHandler; + this.initPasswdHandler = initPasswdHandler; + this.registrationHandler = registrationHandler; + this.bannerInfoHandler = bannerInfoHandler; + this.bannerDataHandler = bannerDataHandler; + this.cmPlyInfoHandler = cmPlyInfoHandler; + this.contestInfoHandler = contestInfoHandler; + this.cstmzItmCtlgHandler = cstmzItmCtlgHandler; + this.cstmzItmNgMdlListHandler = cstmzItmNgMdlListHandler; + this.festaInfoHandler = festaInfoHandler; + this.ngWordHandler = ngWordHandler; + this.nvRankingHandler = nvRankingHandler; + this.psRankingHandler = psRankingHandler; + this.pstdHCtrlHandler = pstdHCtrlHandler; + this.pstdItemNgLstHandler = pstdItemNgLstHandler; + this.pvDefChrLstHandler = pvDefChrLstHandler; + this.pvListHandler = pvListHandler; + this.pvNgMdlLstHandler = pvNgMdlLstHandler; + this.qstInfHandler = qstInfHandler; + this.rmtWpLstHandler = rmtWpLstHandler; + this.shopCatalogHandler = shopCatalogHandler; + this.buyCstmzItmHandler = buyCstmzItmHandler; + this.buyModuleHandler = buyModuleHandler; + this.getPvPdHandler = getPvPdHandler; + this.shopExitHandler = shopExitHandler; + this.stageResultHandler = stageResultHandler; + this.stageStartHandler = stageStartHandler; + this.storeSsHandler = storeSsHandler; + this.pingHandler = pingHandler; + this.endHandler = endHandler; + this.pdUnlockHandler = pdUnlockHandler; + this.preStartHandler = preStartHandler; + this.spendCreditHandler = spendCreditHandler; + this.startHandler = startHandler; + this.mapper = mapper; + } + + + @PostMapping(value = "", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) + public String formRequest(HttpServletRequest request) throws IOException { + String bodyStr = new String(request.getInputStream().readAllBytes()); + Map body = parse(bodyStr); + + String command = (String) body.getOrDefault("cmd", ""); + + logger.info("{}: {}", command, body.toString()); + + switch (command) { + + // Boot + case "game_init": + return gameInitHandler.handle(mapper.convert(body, GameInitRequest.class)); + case "attend": + return attendHandler.handle(mapper.convert(body, GameInitRequest.class)); + + // + case "test": + return gameInitHandler.handle(mapper.convert(body, BaseRequest.class)); + + // Databank + case "nv_ranking": + return nvRankingHandler.handle(mapper.convert(body, BaseRequest.class)); + case "ps_ranking": + return psRankingHandler.handle(mapper.convert(body, PsRankingRequest.class)); + case "pv_list": + return pvListHandler.handle(mapper.convert(body, BaseRequest.class)); + case "ng_word": + return ngWordHandler.handle(mapper.convert(body, BaseRequest.class)); + case "rmt_wp_list": + return rmtWpLstHandler.handle(mapper.convert(body, BaseRequest.class)); + case "festa_info": + return festaInfoHandler.handle(mapper.convert(body, BaseRequest.class)); + case "contest_info": + return contestInfoHandler.handle(mapper.convert(body, BaseRequest.class)); + case "pv_def_chr_list": + return pvDefChrLstHandler.handle(mapper.convert(body, BaseRequest.class)); + case "pv_ng_mdl_list": + return pvNgMdlLstHandler.handle(mapper.convert(body, BaseRequest.class)); + case "cstmz_itm_ng_mdl_list": + return cstmzItmNgMdlListHandler.handle(mapper.convert(body, BaseRequest.class)); + case "banner_info": + return bannerInfoHandler.handle(mapper.convert(body, BaseRequest.class)); + case "banner_data": + return bannerDataHandler.handle(mapper.convert(body, BannerDataRequest.class)); + case "cm_ply_info": + return cmPlyInfoHandler.handle(mapper.convert(body, BaseRequest.class)); + case "qst_inf": + return qstInfHandler.handle(mapper.convert(body, BaseRequest.class)); + case "pstd_h_ctrl": + return pstdHCtrlHandler.handle(mapper.convert(body, BaseRequest.class)); + case "pstd_item_ng_lst": + return pstdItemNgLstHandler.handle(mapper.convert(body, BaseRequest.class)); + case "shop_catalog": + return shopCatalogHandler.handle(mapper.convert(body, BaseRequest.class)); + case "cstmz_itm_ctlg": + return cstmzItmCtlgHandler.handle(mapper.convert(body, BaseRequest.class)); + + case "card_procedure": + return cardProcedureHandler.handle(mapper.convert(body, CardProcedureRequest.class)); + case "registration": + return registrationHandler.handle(mapper.convert(body, RegistrationRequest.class)); + case "init_passwd": + return initPasswdHandler.handle(mapper.convert(body, GameInitRequest.class)); + case "change_passwd": + return changePasswdHandler.handle(mapper.convert(body, ChangePasswdRequest.class)); + case "change_name": + return changeNameHandler.handle(mapper.convert(body, ChangeNameRequest.class)); + + case "pre_start": + return preStartHandler.handle(mapper.convert(body, PreStartRequest.class)); + case "start": + return startHandler.handle(mapper.convert(body, StartRequest.class)); + case "pd_unlock": + return pdUnlockHandler.handle(mapper.convert(body, PdUnlockRequest.class)); + case "spend_credit": + return spendCreditHandler.handle(mapper.convert(body, SpendCreditRequest.class)); + case "no_card_end": + return gameInitHandler.handle(mapper.convert(body, GameInitRequest.class)); + case "end": + return endHandler.handle(mapper.convert(body, StageResultRequest.class)); + + case "get_pv_pd": + return getPvPdHandler.handle(mapper.convert(body, GetPvPdRequest.class)); + case "buy_module": + return buyModuleHandler.handle(mapper.convert(body, BuyModuleRequest.class)); + case "buy_cstmz_itm": + return buyCstmzItmHandler.handle(mapper.convert(body, BuyCstmzItmRequest.class)); + case "shop_exit": + return shopExitHandler.handle(mapper.convert(body, ShopExitRequest.class)); + case "stage_start": + return stageStartHandler.handle(mapper.convert(body, StageStartRequest.class)); + case "stage_result": + return stageResultHandler.handle(mapper.convert(body, StageResultRequest.class)); + case "store_ss": + return gameInitHandler.handle(mapper.convert(body, GameInitRequest.class)); + + default: + return "stat=0"; + + } + } + + @PostMapping(value = "", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public String fileRequest(@RequestParam String query, @RequestParam(required = false) MultipartFile bin) throws IOException, ServletException { + + Map body = parse(query); + + String command = (String) body.getOrDefault("cmd", ""); + + logger.info("{}: {}", command, body.toString()); + + switch (command) { + case "ping": + return pingHandler.handle(mapper.convert(body, BaseRequest.class)); + case "investigate": + return gameInitHandler.handle(mapper.convert(body, BaseRequest.class)); + case "store_ss": + return storeSsHandler.handle(mapper.convert(body, StoreSsRequest.class), bin); + default: + return "stat=1"; + } + } + + private Map parse(String form) { + String[] kvps = form.split("&"); + Map body = new LinkedHashMap<>(); + for (String kvp : + kvps) { + String[] k = kvp.split("="); + k[1] = URLDecoder.decode(k[1], StandardCharsets.UTF_8); + Object value; + if (k[1].contains(",")) { + value = deArray(k[1]); + } else { + value = k[1]; + } + body.put(k[0], value); + } + return body; + } + + private Object deArray(String input) { + if (!input.contains(",")) return input; + return Arrays.stream(input.split(",")).map(x -> URLDecoder.decode(x, StandardCharsets.UTF_8)) + .map(this::deArray).collect(Collectors.toList()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaControllerAdvice.java b/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaControllerAdvice.java new file mode 100644 index 0000000..901ab1e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/controller/DivaControllerAdvice.java @@ -0,0 +1,11 @@ +package icu.samnyan.aqua.sega.diva.controller; + +import org.springframework.web.bind.annotation.ControllerAdvice; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@ControllerAdvice(basePackages = "icu.samnyan.aqua.sega.diva") +public class DivaControllerAdvice { + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/ContestRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/ContestRepository.java new file mode 100644 index 0000000..6c112e4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/ContestRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.gamedata.Contest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface ContestRepository extends JpaRepository { + List findTop8ByEnable(boolean enable); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaCustomizeRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaCustomizeRepository.java new file mode 100644 index 0000000..013212b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaCustomizeRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaCustomize; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface DivaCustomizeRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaModuleRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaModuleRepository.java new file mode 100644 index 0000000..45e8218 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/DivaModuleRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaModule; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface DivaModuleRepository extends JpaRepository { + Optional findById(int id); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/FestaRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/FestaRepository.java new file mode 100644 index 0000000..cb11585 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/FestaRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.gamedata.Festa; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface FestaRepository extends JpaRepository { + List findTop2ByEnableOrderByCreateDateDesc(boolean enable); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/NgWordsRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/NgWordsRepository.java new file mode 100644 index 0000000..996a642 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/NgWordsRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.gamedata.NgWords; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface NgWordsRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/PvEntryRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/PvEntryRepository.java new file mode 100644 index 0000000..5c59660 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/gamedata/PvEntryRepository.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.diva.dao.gamedata; + +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.gamedata.PvEntry; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PvEntryRepository extends JpaRepository { + List findByDifficulty(Difficulty difficulty); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/GameSessionRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/GameSessionRepository.java new file mode 100644 index 0000000..f589ce8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/GameSessionRepository.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface GameSessionRepository extends JpaRepository { + Optional findByPdId(PlayerProfile profile); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayLogRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayLogRepository.java new file mode 100644 index 0000000..70bae61 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayLogRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayLog; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayLogRepository extends JpaRepository { + Page findByPdId_PdIdOrderByDateTimeDesc(int pdId, Pageable page); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerContestRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerContestRepository.java new file mode 100644 index 0000000..6665e3a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerContestRepository.java @@ -0,0 +1,17 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerContest; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface PlayerContestRepository extends JpaRepository { + Optional findByPdIdAndContestId(PlayerProfile pdId, int contestId); + + List findTop4ByPdIdOrderByLastUpdateTimeDesc(PlayerProfile pdId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerCustomizeRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerCustomizeRepository.java new file mode 100644 index 0000000..a0c280b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerCustomizeRepository.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerCustomize; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayerCustomizeRepository extends JpaRepository { + List findByPdId(PlayerProfile profile); + + Page findByPdId_PdId(int pdId, Pageable page); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerModuleRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerModuleRepository.java new file mode 100644 index 0000000..1be14a4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerModuleRepository.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerModule; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayerModuleRepository extends JpaRepository { + List findByPdId(PlayerProfile profile); + + Page findByPdId_PdId(int pdId, Pageable pageable); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerProfileRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerProfileRepository.java new file mode 100644 index 0000000..c2eaedf --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerProfileRepository.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayerProfileRepository extends JpaRepository { + + Optional findByPdId(int pdId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvCustomizeRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvCustomizeRepository.java new file mode 100644 index 0000000..5b31c16 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvCustomizeRepository.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvCustomize; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayerPvCustomizeRepository extends JpaRepository { + Optional findByPdIdAndPvId(PlayerProfile profile, int pvId); + + Optional findByPdId_PdIdAndPvId(int pdId, int pvId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java new file mode 100644 index 0000000..c2ef162 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository +public interface PlayerPvRecordRepository extends JpaRepository { + Optional findByPdIdAndPvIdAndEditionAndDifficulty(PlayerProfile profile, int pvId, Edition edition, Difficulty difficulty); + + @Query("SELECT COUNT(t1.id) as ranking from DivaPlayerPvRecord as t1 " + + "where t1.maxScore >= (" + + "SELECT maxScore from DivaPlayerPvRecord where pvId = :pvId and pdId = :pdId and edition = :edition and difficulty = :difficulty" + + ") and t1.pvId = :pvId and t1.edition = :edition and t1.difficulty = :difficulty") + Integer rankByPvIdAndPdIdAndEditionAndDifficulty(@Param("pvId") int pvId, + @Param("pdId") PlayerProfile pdId, + @Param("edition") Edition edition, + @Param("difficulty") Difficulty difficulty + ); + + List findByPdId(PlayerProfile profile); + + Optional findByIdAndPdId_PdId(long id, int pdId); + + List findByPdIdAndEdition(PlayerProfile profile, Edition edition); + + List findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScore(int pvId, Edition edition, Difficulty difficulty); + + Page findByPdId_PdIdOrderByPvId(int pdId, Pageable page); + + List findByPdId_PdIdAndPvId(int pdId, int pvId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerScreenShotRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerScreenShotRepository.java new file mode 100644 index 0000000..3497782 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerScreenShotRepository.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.diva.dao.userdata; + +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerScreenShot; +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface PlayerScreenShotRepository extends JpaRepository { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/exception/ProfileNotFoundException.java b/src/main/java/icu/samnyan/aqua/sega/diva/exception/ProfileNotFoundException.java new file mode 100644 index 0000000..9235e68 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/exception/ProfileNotFoundException.java @@ -0,0 +1,7 @@ +package icu.samnyan.aqua.sega.diva.exception; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ProfileNotFoundException extends RuntimeException { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/exception/PvRecordDataException.java b/src/main/java/icu/samnyan/aqua/sega/diva/exception/PvRecordDataException.java new file mode 100644 index 0000000..0dffb4a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/exception/PvRecordDataException.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.diva.exception; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class PvRecordDataException extends RuntimeException { + public PvRecordDataException(String message) { + super(message); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotExistException.java b/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotExistException.java new file mode 100644 index 0000000..f1a223d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotExistException.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.diva.exception; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class SessionNotExistException extends RuntimeException { + + public SessionNotExistException(String message) { + super(message); + } + + public SessionNotExistException() { + super(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotFoundException.java b/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotFoundException.java new file mode 100644 index 0000000..e3220ca --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/exception/SessionNotFoundException.java @@ -0,0 +1,7 @@ +package icu.samnyan.aqua.sega.diva.exception; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class SessionNotFoundException extends RuntimeException { +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java b/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java new file mode 100644 index 0000000..442e548 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/filter/DivaCompressionFilter.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.diva.filter; + +import icu.samnyan.aqua.sega.chunithm.filter.ChuniRequestWrapper; +import icu.samnyan.aqua.sega.util.Compression; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Base64; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class DivaCompressionFilter extends OncePerRequestFilter { + + private static final Logger logger = LoggerFactory.getLogger(DivaCompressionFilter.class); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + String encoding = request.getHeader("pragma"); + byte[] reqSrc = request.getInputStream().readAllBytes(); + + byte[] reqResult; + if (encoding != null && encoding.equals("DFI")) { + reqResult = Base64.getMimeDecoder().decode(reqSrc); + reqResult = Compression.decompress(reqResult); + } else { + reqResult = reqSrc; + } + + ChuniRequestWrapper requestWrapper = new ChuniRequestWrapper(request, reqResult); + + filterChain.doFilter(requestWrapper, response); + + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + String path = request.getServletPath(); + return !path.startsWith("/diva"); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/BaseHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/BaseHandler.java new file mode 100644 index 0000000..46e0af6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/BaseHandler.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.diva.handler; + +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class BaseHandler { + + protected final DivaMapper mapper; + + public BaseHandler(DivaMapper mapper) { + this.mapper = mapper; + } + + protected String build(Map map) { + StringBuilder sb = new StringBuilder(); + map.forEach((key, val) -> { + if (val != null) { + if (val instanceof String) { + if (!val.equals("")) { + sb.append(key).append("="); + sb.append(val); + sb.append("&"); + } + } else { + sb.append(key).append("="); +// sb.append(URLEncoder.encode(String.valueOf(val), StandardCharsets.UTF_8)); + sb.append(val); + sb.append("&"); + } + } + }); + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/AttendHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/AttendHandler.java new file mode 100644 index 0000000..d33bef3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/AttendHandler.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.diva.handler.boot; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.attend.DispersalParameter; +import icu.samnyan.aqua.sega.diva.model.common.attend.EtcParameter; +import icu.samnyan.aqua.sega.diva.model.common.attend.GameBalanceParameter; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.boot.AttendResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class AttendHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(AttendHandler.class); + + public AttendHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + AttendResponse response = new AttendResponse( + request.getCmd(), + request.getReq_id(), + "ok", + new EtcParameter().toInternal(), + new DispersalParameter().toInternal(), + new GameBalanceParameter().toInternal(), + LocalDateTime.now() + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/GameInitHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/GameInitHandler.java new file mode 100644 index 0000000..820c081 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/boot/GameInitHandler.java @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.sega.diva.handler.boot; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.boot.GameInitResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GameInitHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GameInitHandler.class); + + public GameInitHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + GameInitResponse response = new GameInitResponse( + request.getCmd(), + request.getReq_id(), + "ok", + "0,0", + "FFFF" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/CardProcedureHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/CardProcedureHandler.java new file mode 100644 index 0000000..2e3fd0b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/CardProcedureHandler.java @@ -0,0 +1,105 @@ +package icu.samnyan.aqua.sega.diva.handler.card; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.common.StartMode; +import icu.samnyan.aqua.sega.diva.model.request.card.CardProcedureRequest; +import icu.samnyan.aqua.sega.diva.model.response.card.CardProcedureResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CardProcedureHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CardProcedureHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public CardProcedureHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(CardProcedureRequest request) { + Optional profileOptional = playerProfileService.findByPdId(request.getAime_id()); + CardProcedureResponse response; + if (profileOptional.isEmpty()) { + response = new CardProcedureResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + PlayerProfile profile = profileOptional.get(); + + Optional sessionOptional = gameSessionRepository.findByPdId(profile); + if (sessionOptional.isPresent()) { + GameSession session = sessionOptional.get(); + if (session.getLastUpdateTime().isBefore(LocalDateTime.now().minusMinutes(5))) { + gameSessionRepository.delete(session); + } + response = new CardProcedureResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + GameSession session = new GameSession( + ThreadLocalRandom.current().nextInt(100, 99999), + profile, + StartMode.CARD_PROCEDURE, + LocalDateTime.now(), + LocalDateTime.now(), + -1, + -1, + profile.getLevel(), + profile.getLevelExp(), + profile.getLevel(), + profile.getLevelExp(), + profile.getVocaloidPoints() + ); + + gameSessionRepository.save(session); + response = new CardProcedureResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + 100, + session.getAcceptId(), + profile.getPdId(), + profile.getPlayerName(), + profile.getLevel(), + profile.getLevelExp(), + profile.getLevelTitle(), + profile.getPlateEffectId(), + profile.getPlateId(), + profile.getVocaloidPoints(), + profile.getPasswordStatus() + ); + } + } + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangeNameHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangeNameHandler.java new file mode 100644 index 0000000..9d95289 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangeNameHandler.java @@ -0,0 +1,60 @@ +package icu.samnyan.aqua.sega.diva.handler.card; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.request.card.ChangeNameRequest; +import icu.samnyan.aqua.sega.diva.model.response.card.ChangeNameResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ChangeNameHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(ChangeNameHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public ChangeNameHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(ChangeNameRequest request) { + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + profile.setPlayerName(request.getPlayer_name()); + + ChangeNameResponse response = new ChangeNameResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + profile.getPdId(), + session.getAcceptId(), + profile.getPlayerName() + ); + + playerProfileService.save(profile); + gameSessionRepository.delete(session); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangePasswdHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangePasswdHandler.java new file mode 100644 index 0000000..4d5d493 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/ChangePasswdHandler.java @@ -0,0 +1,61 @@ +package icu.samnyan.aqua.sega.diva.handler.card; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.PassStat; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.request.card.ChangePasswdRequest; +import icu.samnyan.aqua.sega.diva.model.response.card.ChangePasswdResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ChangePasswdHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(ChangePasswdHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public ChangePasswdHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(ChangePasswdRequest request) { + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + profile.setPasswordStatus(PassStat.SET); + profile.setPassword(request.getNew_passwd()); + + ChangePasswdResponse response = new ChangePasswdResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + profile.getPdId(), + session.getAcceptId() + ); + + playerProfileService.save(profile); + gameSessionRepository.delete(session); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/InitPasswdHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/InitPasswdHandler.java new file mode 100644 index 0000000..8efca6a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/InitPasswdHandler.java @@ -0,0 +1,42 @@ +package icu.samnyan.aqua.sega.diva.handler.card; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class InitPasswdHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(InitPasswdHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public InitPasswdHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(BaseRequest request) { + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "0"); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/RegistrationHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/RegistrationHandler.java new file mode 100644 index 0000000..3bd1014 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/card/RegistrationHandler.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.diva.handler.card; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.request.card.RegistrationRequest; +import icu.samnyan.aqua.sega.diva.model.response.card.RegistrationResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class RegistrationHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(RegistrationHandler.class); + + private final PlayerProfileService playerProfileService; + + public RegistrationHandler(DivaMapper mapper, PlayerProfileService playerProfileService) { + super(mapper); + this.playerProfileService = playerProfileService; + } + + public String handle(RegistrationRequest request) { + RegistrationResponse response; + if (playerProfileService.findByPdId(request.getAime_id()).isPresent()) { + response = new RegistrationResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED, + -1); + } else { + PlayerProfile profile = playerProfileService.register(request); + response = new RegistrationResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + profile.getPdId()); + } + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerDataHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerDataHandler.java new file mode 100644 index 0000000..5b177e5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerDataHandler.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.databank.BannerDataRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.BannerDataResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class BannerDataHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(BannerDataHandler.class); + + public BannerDataHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BannerDataRequest request) { + BannerDataResponse response = new BannerDataResponse( + request.getCmd(), + request.getReq_id(), + "ok", + LocalDateTime.now(), + "***", + "***", + request.getBd_id() + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerInfoHandler.java new file mode 100644 index 0000000..f0598f4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/BannerInfoHandler.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.BannerInfoResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class BannerInfoHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(BannerInfoHandler.class); + + public BannerInfoHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + BannerInfoResponse response = new BannerInfoResponse( + request.getCmd(), + request.getReq_id(), + "ok", + null, + null, + null, + null, + null + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CmPlyInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CmPlyInfoHandler.java new file mode 100644 index 0000000..211e72b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CmPlyInfoHandler.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CmPlyInfoHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CmPlyInfoHandler.class); + + public CmPlyInfoHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok"); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ContestInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ContestInfoHandler.java new file mode 100644 index 0000000..eefe0ef --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ContestInfoHandler.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.ContestRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.gamedata.Contest; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.ContestInfoResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ContestInfoHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CmPlyInfoHandler.class); + + private final ContestRepository contestRepository; + + public ContestInfoHandler(DivaMapper mapper, ContestRepository contestRepository) { + super(mapper); + this.contestRepository = contestRepository; + } + + public String handle(BaseRequest request) { + List contestList = contestRepository.findTop8ByEnable(true); + String ci_str = "***"; + if (!contestList.isEmpty()) { + StringBuilder sb = new StringBuilder(); + contestList.forEach(x -> sb.append(URIEncoder.encode(x.getString())).append(",")); + sb.append("%2A%2A%2A,".repeat(Math.max(0, 8 - contestList.size()))); + sb.deleteCharAt(sb.length() - 1); + ci_str = sb.toString(); + } + ContestInfoResponse response = new ContestInfoResponse( + request.getCmd(), + request.getReq_id(), + "ok", + LocalDateTime.now(), + ci_str + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmCtlgHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmCtlgHandler.java new file mode 100644 index 0000000..ebf0a9e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmCtlgHandler.java @@ -0,0 +1,51 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.DivaCustomizeRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaCustomize; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.CstmzItmCtlgResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CstmzItmCtlgHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CstmzItmCtlgHandler.class); + + private final DivaCustomizeRepository customizeRepository; + + public CstmzItmCtlgHandler(DivaMapper mapper, DivaCustomizeRepository customizeRepository) { + super(mapper); + this.customizeRepository = customizeRepository; + } + + public String handle(BaseRequest request) { + List customizeList = customizeRepository.findAll(); + + CstmzItmCtlgResponse response = new CstmzItmCtlgResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + URIEncoder.encode(customizeList.stream().map(DivaCustomize::toInternal).map(URIEncoder::encode) + .collect(Collectors.joining(","))) + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmNgMdlListHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmNgMdlListHandler.java new file mode 100644 index 0000000..be9ec0a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/CstmzItmNgMdlListHandler.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.CstmzItmNgMdlListResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class CstmzItmNgMdlListHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(CstmzItmCtlgHandler.class); + + public CstmzItmNgMdlListHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + CstmzItmNgMdlListResponse response = new CstmzItmNgMdlListResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/FestaInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/FestaInfoHandler.java new file mode 100644 index 0000000..ddd18a3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/FestaInfoHandler.java @@ -0,0 +1,57 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.FestaRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.collection.FestaCollection; +import icu.samnyan.aqua.sega.diva.model.gamedata.Festa; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.FestaInfoResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class FestaInfoHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(FestaInfoHandler.class); + + private final FestaRepository festaRepository; + + public FestaInfoHandler(DivaMapper mapper, FestaRepository festaRepository) { + super(mapper); + this.festaRepository = festaRepository; + } + + public String handle(BaseRequest request) { + List festaList = festaRepository.findTop2ByEnableOrderByCreateDateDesc(true); + FestaCollection collection = new FestaCollection(festaList); + + FestaInfoResponse response = new FestaInfoResponse( + request.getCmd(), + request.getReq_id(), + "ok", + collection.getIds(), + collection.getNames(), + collection.getKinds(), + collection.getDiffs(), + collection.getPvIds(), + collection.getAttr(), + collection.getAddVps(), + collection.getVpMultipliers(), + collection.getStarts(), + collection.getEnds(), + collection.getLastUpdateTime() + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NgWordHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NgWordHandler.java new file mode 100644 index 0000000..cffe2a7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NgWordHandler.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class NgWordHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(NgWordHandler.class); + + public NgWordHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok"); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NvRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NvRankingHandler.java new file mode 100644 index 0000000..2f021c9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/NvRankingHandler.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.NvRankingResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class NvRankingHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(NvRankingHandler.class); + + public NvRankingHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + NvRankingResponse response = new NvRankingResponse( + request.getCmd(), + request.getReq_id(), + "ok", + null, + null, + null, + null + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java new file mode 100644 index 0000000..2ec9d02 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java @@ -0,0 +1,114 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvRecordRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.common.collection.PsRankingCollection; +import icu.samnyan.aqua.sega.diva.model.request.databank.PsRankingRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PsRankingResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PsRankingHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PsRankingHandler.class); + + private final PlayerPvRecordRepository playerPvRecordRepository; + + public PsRankingHandler(DivaMapper mapper, PlayerPvRecordRepository playerPvRecordRepository) { + super(mapper); + this.playerPvRecordRepository = playerPvRecordRepository; + } + + public String handle(PsRankingRequest request) { + Edition edition = Edition.ORIGINAL; + Difficulty difficulty = Difficulty.HARD; + + switch (request.getRnk_ps_idx()) { + case 0: + difficulty = Difficulty.HARD; + break; + case 1: + difficulty = Difficulty.EXTREME; + break; + case 2: { + difficulty = Difficulty.EXTREME; + edition = Edition.EXTRA; + break; + } + } + + int[] list = request.getRnk_ps_pv_id_lst(); + Map resultCollections = new LinkedHashMap<>(); + for (int i : + list) { + + List records = playerPvRecordRepository.findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScore(i, Edition.ORIGINAL, difficulty); + resultCollections.put(i, new PsRankingCollection(i, edition, records)); + } + + List pvIds = new LinkedList<>(); + List edition1 = new LinkedList<>(); + List edition2 = new LinkedList<>(); + List edition3 = new LinkedList<>(); + List score1 = new LinkedList<>(); + List score2 = new LinkedList<>(); + List score3 = new LinkedList<>(); + List name1 = new LinkedList<>(); + List name2 = new LinkedList<>(); + List name3 = new LinkedList<>(); + + resultCollections.forEach((key, obj) -> { + pvIds.add(key); + edition1.add(obj.getFirst().getEdition().getValue()); + edition2.add(obj.getSecond().getEdition().getValue()); + edition3.add(obj.getThird().getEdition().getValue()); + score1.add(obj.getFirst().getMaxScore()); + score2.add(obj.getSecond().getMaxScore()); + score3.add(obj.getThird().getMaxScore()); + name1.add(URIEncoder.encode(obj.getFirst().getPdId() != null ? obj.getFirst().getPdId().getPlayerName() : "xxx")); + name2.add(URIEncoder.encode(obj.getSecond().getPdId() != null ? obj.getFirst().getPdId().getPlayerName() : "xxx")); + name3.add(URIEncoder.encode(obj.getThird().getPdId() != null ? obj.getFirst().getPdId().getPlayerName() : "xxx")); + }); + + PsRankingResponse response = new PsRankingResponse( + request.getCmd(), + request.getReq_id(), + "ok", + LocalDateTime.now(), + LocalDateTime.now(), + request.getRnk_ps_idx(), + pvIds.stream().map(Object::toString).collect(Collectors.joining(",")), + edition1.stream().map(Object::toString).collect(Collectors.joining(",")), + edition2.stream().map(Object::toString).collect(Collectors.joining(",")), + edition3.stream().map(Object::toString).collect(Collectors.joining(",")), + score1.stream().map(Object::toString).collect(Collectors.joining(",")), + score2.stream().map(Object::toString).collect(Collectors.joining(",")), + score3.stream().map(Object::toString).collect(Collectors.joining(",")), + name1.stream().map(Object::toString).collect(Collectors.joining(",")), + name2.stream().map(Object::toString).collect(Collectors.joining(",")), + name3.stream().map(Object::toString).collect(Collectors.joining(",")) + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdHCtrlHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdHCtrlHandler.java new file mode 100644 index 0000000..17c21d2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdHCtrlHandler.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PstdHCtrlResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PstdHCtrlHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PstdHCtrlHandler.class); + + public PstdHCtrlHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + PstdHCtrlResponse response = new PstdHCtrlResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***,***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdItemNgLstHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdItemNgLstHandler.java new file mode 100644 index 0000000..ef0bb0d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PstdItemNgLstHandler.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PstdItemNgLstResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PstdItemNgLstHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PstdItemNgLstHandler.class); + + public PstdItemNgLstHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + PstdItemNgLstResponse response = new PstdItemNgLstResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***", + "***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvDefChrLstHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvDefChrLstHandler.java new file mode 100644 index 0000000..838dddf --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvDefChrLstHandler.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PvDefChrLstResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PvDefChrLstHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PvDefChrLstHandler.class); + + public PvDefChrLstHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + PvDefChrLstResponse response = new PvDefChrLstResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvListHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvListHandler.java new file mode 100644 index 0000000..cb0e4f8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvListHandler.java @@ -0,0 +1,80 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.PvEntryRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.gamedata.PvEntry; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PvListResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PvListHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(BannerDataHandler.class); + + private final PvEntryRepository pvEntryRepository; + + private final DateTimeFormatter df; + + public PvListHandler(DivaMapper mapper, PvEntryRepository pvEntryRepository) { + super(mapper); + this.pvEntryRepository = pvEntryRepository; + this.df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + } + + public String handle(BaseRequest request) { + StringBuilder sb = new StringBuilder(); + + List easyList = pvEntryRepository.findByDifficulty(Difficulty.EASY); + List normalList = pvEntryRepository.findByDifficulty(Difficulty.NORMAL); + List hardList = pvEntryRepository.findByDifficulty(Difficulty.HARD); + List extremeList = pvEntryRepository.findByDifficulty(Difficulty.EXTREME); + + sb.append(URIEncoder.encode(difficultyString(easyList))).append(","); + sb.append(URIEncoder.encode(difficultyString(normalList))).append(","); + sb.append(URIEncoder.encode(difficultyString(hardList))).append(","); + sb.append(URIEncoder.encode(difficultyString(extremeList))).append(","); + sb.append("%2A%2A%2A"); + + PvListResponse response = new PvListResponse( + request.getCmd(), + request.getReq_id(), + "ok", + LocalDateTime.now(), + sb.toString()); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + + private String entryString(PvEntry entry) { + return "" + entry.getPvId() + "," + + entry.getVersion() + "," + + entry.getEdition().getValue() + "," + + df.format(entry.getDemoStart()) + "," + + df.format(entry.getDemoEnd()) + "," + + df.format(entry.getPlayableStart()) + "," + + df.format(entry.getPlayableEnd()); + } + + private String difficultyString(List list) { + StringBuilder sb = new StringBuilder(); + list.forEach(x -> sb.append(URIEncoder.encode(entryString(x))).append(",")); + if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvNgMdlLstHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvNgMdlLstHandler.java new file mode 100644 index 0000000..a4d0088 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PvNgMdlLstHandler.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.PvNgMdlLstResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PvNgMdlLstHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PvNgMdlLstHandler.class); + + public PvNgMdlLstHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + + PvNgMdlLstResponse response = new PvNgMdlLstResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/QstInfHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/QstInfHandler.java new file mode 100644 index 0000000..c6fc2c7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/QstInfHandler.java @@ -0,0 +1,42 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.QstInfResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class QstInfHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(QstInfHandler.class); + + public QstInfHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + + QstInfResponse response = new QstInfResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + null, + null + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/RmtWpLstHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/RmtWpLstHandler.java new file mode 100644 index 0000000..80718a6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/RmtWpLstHandler.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.RmtWpLstResponse; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class RmtWpLstHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(QstInfHandler.class); + + public RmtWpLstHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + RmtWpLstResponse response = new RmtWpLstResponse( + request.getCmd(), + request.getReq_id(), + "ok", + DivaDateTimeUtil.getString(LocalDateTime.now()), + "***" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ShopCatalogHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ShopCatalogHandler.java new file mode 100644 index 0000000..804ae76 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/ShopCatalogHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.diva.handler.databank; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.DivaModuleRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaModule; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.databank.ShopCatalogResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ShopCatalogHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(ShopCatalogHandler.class); + + private final DivaModuleRepository moduleRepository; + + public ShopCatalogHandler(DivaMapper mapper, DivaModuleRepository moduleRepository) { + super(mapper); + this.moduleRepository = moduleRepository; + } + + public String handle(BaseRequest request) { + List moduleList = moduleRepository.findAll(); + + ShopCatalogResponse response = new ShopCatalogResponse( + request.getCmd(), + request.getReq_id(), + "ok", + LocalDateTime.now(), + URIEncoder.encode(moduleList.stream().map(DivaModule::toInternal).map(URIEncoder::encode) + .collect(Collectors.joining(","))) + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyCstmzItmHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyCstmzItmHandler.java new file mode 100644 index 0000000..bf3a504 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyCstmzItmHandler.java @@ -0,0 +1,92 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.DivaCustomizeRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaCustomize; +import icu.samnyan.aqua.sega.diva.model.request.ingame.BuyCstmzItmRequest; +import icu.samnyan.aqua.sega.diva.model.response.ingame.BuyCstmzItmResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerCustomizeService; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class BuyCstmzItmHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(BuyCstmzItmHandler.class); + + private final DivaCustomizeRepository divaCustomizeRepository; + + private final PlayerProfileService playerProfileService; + + private final PlayerCustomizeService playerCustomizeService; + + private final GameSessionRepository gameSessionRepository; + + public BuyCstmzItmHandler(DivaMapper mapper, DivaCustomizeRepository divaCustomizeRepository, PlayerProfileService playerProfileService, PlayerCustomizeService playerCustomizeService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.divaCustomizeRepository = divaCustomizeRepository; + this.playerProfileService = playerProfileService; + this.playerCustomizeService = playerCustomizeService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(BuyCstmzItmRequest request) { + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + Optional customizeOptional = divaCustomizeRepository.findById(request.getCstmz_itm_id()); + + BuyCstmzItmResponse response; + if (customizeOptional.isEmpty()) { + response = new BuyCstmzItmResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + if (session.getVp() < customizeOptional.get().getPrice()) { + response = new BuyCstmzItmResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + playerCustomizeService.buy(profile, request.getCstmz_itm_id()); + session.setVp(session.getVp() - customizeOptional.get().getPrice()); + gameSessionRepository.save(session); + + response = new BuyCstmzItmResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + request.getCstmz_itm_id(), + playerCustomizeService.getModuleHaveString(profile), + session.getVp() + ); + } + } + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyModuleHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyModuleHandler.java new file mode 100644 index 0000000..fb4649b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/BuyModuleHandler.java @@ -0,0 +1,92 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.DivaModuleRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.gamedata.DivaModule; +import icu.samnyan.aqua.sega.diva.model.request.ingame.BuyModuleRequest; +import icu.samnyan.aqua.sega.diva.model.response.ingame.BuyModuleResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerModuleService; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class BuyModuleHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(BuyModuleHandler.class); + + private final DivaModuleRepository divaModuleRepository; + + private final PlayerProfileService playerProfileService; + + private final PlayerModuleService playerModuleService; + + private final GameSessionRepository gameSessionRepository; + + public BuyModuleHandler(DivaMapper mapper, DivaModuleRepository divaModuleRepository, PlayerProfileService playerProfileService, PlayerModuleService playerModuleService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.divaModuleRepository = divaModuleRepository; + this.playerProfileService = playerProfileService; + this.playerModuleService = playerModuleService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(BuyModuleRequest request) { + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + Optional moduleOptional = divaModuleRepository.findById(request.getMdl_id()); + + BuyModuleResponse response; + if (moduleOptional.isEmpty()) { + response = new BuyModuleResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + if (session.getVp() < moduleOptional.get().getPrice()) { + response = new BuyModuleResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.FAILED + ); + } else { + playerModuleService.buy(profile, request.getMdl_id()); + session.setVp(session.getVp() - moduleOptional.get().getPrice()); + gameSessionRepository.save(session); + + response = new BuyModuleResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS, + request.getMdl_id(), + playerModuleService.getModuleHaveString(profile), + session.getVp() + ); + } + } + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/GetPvPdHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/GetPvPdHandler.java new file mode 100644 index 0000000..873507a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/GetPvPdHandler.java @@ -0,0 +1,109 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvCustomizeRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvRecordRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.request.ingame.GetPvPdRequest; +import icu.samnyan.aqua.sega.diva.model.response.ingame.GetPvPdResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvCustomize; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import icu.samnyan.aqua.sega.util.URIEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetPvPdHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetPvPdHandler.class); + + private final PlayerPvRecordRepository pvRecordRepository; + private final PlayerPvCustomizeRepository pvCustomizeRepository; + private final PlayerProfileRepository profileRepository; + + public GetPvPdHandler(DivaMapper mapper, PlayerPvRecordRepository pvRecordRepository, PlayerPvCustomizeRepository pvCustomizeRepository, PlayerProfileRepository profileRepository) { + super(mapper); + this.pvRecordRepository = pvRecordRepository; + this.pvCustomizeRepository = pvCustomizeRepository; + this.profileRepository = profileRepository; + } + + public String handle(GetPvPdRequest request) { + + PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + StringBuilder pd = new StringBuilder(); + + for (int pvId : + request.getPd_pv_id_lst()) { + if (pvId == -1) { + pd.append("***").append(","); + } else { + int diff = request.getDifficulty(); + Difficulty difficulty = Difficulty.fromValue(diff); + Optional edition0optional = pvRecordRepository.findByPdIdAndPvIdAndEditionAndDifficulty(profile, pvId, Edition.ORIGINAL, difficulty); + PlayerPvRecord edition0 = edition0optional.orElseGet(() -> new PlayerPvRecord(pvId, Edition.ORIGINAL)); + PlayerPvRecord edition1 = pvRecordRepository.findByPdIdAndPvIdAndEditionAndDifficulty(profile, pvId, Edition.EXTRA, difficulty).orElseGet(() -> new PlayerPvRecord(pvId, Edition.EXTRA)); + PlayerPvCustomize customize = pvCustomizeRepository.findByPdIdAndPvId(profile, pvId).orElseGet(() -> new PlayerPvCustomize(profile, pvId)); + + String str = getString(edition0, customize) + "," + getString(edition1, customize); +// logger.info(str); + pd.append(URIEncoder.encode(str)).append(","); + } + } + pd.deleteCharAt(pd.length() - 1); + + + GetPvPdResponse response = new GetPvPdResponse( + request.getCmd(), + request.getReq_id(), + "ok", + pd.toString(), + false, + DivaDateTimeUtil.getString(LocalDateTime.now()) + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + + + private String getString(PlayerPvRecord record, PlayerPvCustomize customize) { + return + "" + record.getPvId() + "," + + record.getEdition().getValue() + "," + + record.getResult().getValue() + "," + + record.getMaxScore() + "," + + record.getMaxAttain() + "," + + record.getChallengeKind().getValue() + "," + + customize.getModule() + "," + + customize.getCustomize() + "," + + customize.getCustomizeFlag() + "," + + customize.getSkin() + "," + + customize.getButtonSe() + "," + + customize.getSlideSe() + "," + + customize.getChainSlideSe() + "," + + customize.getSliderTouchSe() + "," + + "15," + + "0," + + "0," + + "-1,-1," + + pvRecordRepository.rankByPvIdAndPdIdAndEditionAndDifficulty(record.getPvId(), record.getPdId(), record.getEdition(), record.getDifficulty()) + "," + + record.getRgoPurchased() + "," + + record.getRgoPlayed(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/ShopExitHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/ShopExitHandler.java new file mode 100644 index 0000000..56ba182 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/ShopExitHandler.java @@ -0,0 +1,70 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvCustomizeRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.request.ingame.ShopExitRequest; +import icu.samnyan.aqua.sega.diva.model.response.ingame.ShopExitResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvCustomize; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import static icu.samnyan.aqua.sega.diva.util.DivaStringUtils.arrToCsv; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class ShopExitHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(ShopExitHandler.class); + + private final PlayerProfileRepository playerProfileRepository; + + private final PlayerPvCustomizeRepository pvCustomizeRepository; + + public ShopExitHandler(DivaMapper mapper, PlayerProfileRepository playerProfileRepository, PlayerPvCustomizeRepository pvCustomizeRepository) { + super(mapper); + this.playerProfileRepository = playerProfileRepository; + this.pvCustomizeRepository = pvCustomizeRepository; + } + + public String handle(ShopExitRequest request) { + + PlayerProfile profile = playerProfileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + PlayerPvCustomize customize = pvCustomizeRepository.findByPdIdAndPvId(profile, request.getPly_pv_id()).orElseGet(() -> new PlayerPvCustomize(profile, request.getPly_pv_id())); + + if (request.getUse_pv_mdl_eqp() == 1) { + customize.setModule(arrToCsv(request.getMdl_eqp_pv_ary())); + customize.setCustomize(arrToCsv(request.getC_itm_eqp_pv_ary())); + customize.setCustomizeFlag(arrToCsv(request.getMs_itm_flg_pv_ary())); + } else { + customize.setModule("-1,-1,-1"); + customize.setCustomize("-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1"); + customize.setCustomizeFlag("1,1,1,1,1,1,1,1,1,1,1,1"); + } + + profile.setCommonModule(arrToCsv(request.getMdl_eqp_cmn_ary())); + profile.setCommonCustomizeItems(arrToCsv(request.getC_itm_eqp_cmn_ary())); + profile.setModuleSelectItemFlag(arrToCsv(request.getMs_itm_flg_cmn_ary())); + + playerProfileRepository.save(profile); + pvCustomizeRepository.save(customize); + ShopExitResponse response = new ShopExitResponse( + request.getCmd(), + request.getReq_id(), + "ok", + Result.SUCCESS + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java new file mode 100644 index 0000000..50f664b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java @@ -0,0 +1,212 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayLogRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvRecordRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.*; +import icu.samnyan.aqua.sega.diva.model.request.ingame.StageResultRequest; +import icu.samnyan.aqua.sega.diva.model.response.ingame.StageResultResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayLog; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import icu.samnyan.aqua.sega.diva.util.DivaCalculator; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +import static icu.samnyan.aqua.sega.diva.model.common.Const.NULL_QUEST; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class StageResultHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(StageResultHandler.class); + + private final GameSessionRepository gameSessionRepository; + private final PlayerPvRecordRepository pvRecordRepository; + private final PlayerProfileRepository profileRepository; + private final PlayLogRepository playLogRepository; + + private final DivaCalculator divaCalculator; + + public StageResultHandler(DivaMapper mapper, GameSessionRepository gameSessionRepository, PlayerPvRecordRepository pvRecordRepository, PlayerProfileRepository profileRepository, PlayLogRepository playLogRepository, DivaCalculator divaCalculator) { + super(mapper); + this.gameSessionRepository = gameSessionRepository; + this.pvRecordRepository = pvRecordRepository; + this.profileRepository = profileRepository; + this.playLogRepository = playLogRepository; + this.divaCalculator = divaCalculator; + } + + public String handle(StageResultRequest request) { + StageResultResponse response; + if (request.getPd_id() != -1) { + PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + // Get the last played index + int[] pvIds = request.getStg_ply_pv_id(); + int stageIndex = session.getStageIndex(); + + // Convert to play log object + PlayLog log = getLog(request, profile, stageIndex); + logger.debug("Stage Result Object: {}", log.toString()); + + PlayerPvRecord record = pvRecordRepository.findByPdIdAndPvIdAndEditionAndDifficulty(profile, log.getPvId(), log.getEdition(), log.getDifficulty()) + .orElseGet(() -> new PlayerPvRecord(profile, log.getPvId(), log.getEdition(), log.getDifficulty())); + + // Update pvRecord field + record.setMaxScore(Math.max(record.getMaxScore(), log.getScore())); + record.setMaxAttain(Math.max(record.getMaxAttain(), log.getAttainPoint())); + + if (record.getResult().getValue() < log.getClearResult().getValue()) { + record.setResult(log.getClearResult()); + } + + String[] updateRgo = log.getRhythmGameOptions().split(","); + String[] oldRgo = record.getRgoPlayed().split(","); + for (int i = 0; i < updateRgo.length; i++) { + if (updateRgo[i].equals("1")) { + oldRgo[i] = "1"; + } + } + record.setRgoPlayed(StringUtils.join(oldRgo, ",")); + + session.setVp(session.getVp() + log.getVp()); + session.setLastPvId(log.getPvId()); + session.setLastUpdateTime(LocalDateTime.now()); + + LevelInfo levelInfo = divaCalculator.getLevelInfo(profile); + session.setOldLevelNumber(session.getLevelNumber()); + session.setOldLevelExp(session.getLevelExp()); + session.setLevelNumber(levelInfo.getLevelNumber()); + session.setLevelExp(levelInfo.getLevelExp()); + + pvRecordRepository.save(record); + playLogRepository.save(log); + gameSessionRepository.save(session); +// profileRepository.save(profile); + + String cnp_sp = StringUtils.join(request.getCr_sp(), ","); + cnp_sp = cnp_sp.substring(cnp_sp.indexOf(",") + 1) + ",-1"; + response = new StageResultResponse( + request.getCmd(), + request.getReq_id(), + "ok", + ChallengeKind.UNDEFINED.getValue(), + session.getOldLevelNumber(), + session.getOldLevelExp(), + session.getLevelNumber(), + session.getLevelExp(), + profile.getLevelTitle(), + profile.getPlateEffectId(), + profile.getPlateId(), + session.getVp(), + 0, + request.getCr_cid(), + request.getCr_tv(), + cnp_sp, + "xxx", + "-1,-1,-1,-1,-1", + "xxx", + "xxx", + "xxx", + "xxx", + "xxx", + 0, + LocalDateTime.now(), + -1, + -1, + 0, + 0, + 0, + -1, + NULL_QUEST, + NULL_QUEST, + NULL_QUEST, + NULL_QUEST, + NULL_QUEST, + "-1,-1,-1,-1,-1", + "-1,-1,-1,-1,-1", + "-1,-1,-1,-1,-1" + ); + } else { + response = new StageResultResponse( + request.getCmd(), + request.getReq_id(), + "ok" + ); + } + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + + private PlayLog getLog(StageResultRequest request, PlayerProfile profile, int i) { + return new PlayLog( + profile, + request.getStg_ply_pv_id()[i], + Difficulty.fromValue(request.getStg_difficulty()[i]), + Edition.fromValue(request.getStg_edtn()[i]), + request.getStg_scrpt_ver()[i], + request.getStg_score()[i], + ChallengeKind.fromValue(request.getStg_chllng_kind()[i]), + request.getStg_chllng_result()[i], + ClearResult.fromValue(request.getStg_clr_kind()[i]), + request.getStg_vcld_pts()[i], + request.getStg_cool_cnt()[i], + request.getStg_cool_pct()[i], + request.getStg_fine_cnt()[i], + request.getStg_fine_pct()[i], + request.getStg_safe_cnt()[i], + request.getStg_safe_pct()[i], + request.getStg_sad_cnt()[i], + request.getStg_sad_pct()[i], + request.getStg_wt_wg_cnt()[i], + request.getStg_wt_wg_pct()[i], + request.getStg_max_cmb()[i], + request.getStg_chance_tm()[i], + request.getStg_sm_hl()[i], + request.getStg_atn_pnt()[i], + request.getStg_skin_id()[i], + request.getStg_btn_se()[i], + request.getStg_btn_se_vol()[i], + request.getStg_sld_se()[i], + request.getStg_chn_sld_se()[i], + request.getStg_sldr_tch_se()[i], + slice(request.getStg_mdl_id(), 3, i), + request.getStg_cpt_rslt()[i], + request.getStg_sld_scr()[i], + request.getStg_vcl_chg()[i], + slice(request.getStg_c_itm_id(), 12, i), + slice(request.getStg_rgo(), 3, i), + request.getStg_ss_num()[i], + request.getTime_stamp().toLocalDateTime() +// ZonedDateTime.parse(request.getTime_stamp()).toLocalDateTime() + ); + } + + public String slice(int[] arr, int length, int offset) { + StringBuilder sb = new StringBuilder(); + + for (int i = length * offset; i < length * (offset + 1); i++) { + sb.append(arr[i]).append(","); + } + + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java new file mode 100644 index 0000000..4a1da24 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.ingame.StageStartRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class StageStartHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(StageResultHandler.class); + + private final GameSessionRepository gameSessionRepository; + private final PlayerProfileRepository profileRepository; + + public StageStartHandler(DivaMapper mapper, GameSessionRepository gameSessionRepository, PlayerProfileRepository profileRepository) { + super(mapper); + this.gameSessionRepository = gameSessionRepository; + this.profileRepository = profileRepository; + } + + public String handle(StageStartRequest request) { + if (request.getPd_id() != -1) { + PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + session.setStageIndex(session.getStageIndex() + 1); + + gameSessionRepository.save(session); + } + + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok"); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StoreSsHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StoreSsHandler.java new file mode 100644 index 0000000..61823d6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StoreSsHandler.java @@ -0,0 +1,82 @@ +package icu.samnyan.aqua.sega.diva.handler.ingame; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerScreenShotRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.ingame.StoreSsRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerScreenShot; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.time.ZoneOffset; + +import static icu.samnyan.aqua.sega.diva.util.DivaStringUtils.arrToCsv; + + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class StoreSsHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(StoreSsHandler.class); + + private final PlayerProfileRepository profileRepository; + + private final PlayerScreenShotRepository screenShotRepository; + + public StoreSsHandler(DivaMapper mapper, PlayerProfileRepository profileRepository, PlayerScreenShotRepository screenShotRepository) { + super(mapper); + this.profileRepository = profileRepository; + this.screenShotRepository = screenShotRepository; + } + + + public String handle(StoreSsRequest request, MultipartFile file) { + PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + + BaseResponse response; + try { + String filename = request.getPd_id() + "-" + LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + ".jpg"; + Files.write(Paths.get("data/" + filename), file.getBytes()); + + PlayerScreenShot ss = new PlayerScreenShot( + profile, + filename, + request.getPd_id(), + arrToCsv(request.getSs_mdl_id()), + arrToCsv(request.getSs_c_itm_id()) + ); + screenShotRepository.save(ss); + + response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok"); + + } catch (IOException e) { + logger.error("Screenshot save failed", e); + + response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "0"); + } + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/operation/PingHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/operation/PingHandler.java new file mode 100644 index 0000000..902536d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/operation/PingHandler.java @@ -0,0 +1,36 @@ +package icu.samnyan.aqua.sega.diva.handler.operation; + +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import icu.samnyan.aqua.sega.diva.model.response.operation.PingResponse; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PingHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PingHandler.class); + + public PingHandler(DivaMapper mapper) { + super(mapper); + } + + public String handle(BaseRequest request) { + + PingResponse response = new PingResponse( + request.getCmd(), + request.getReq_id(), + "ok" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java new file mode 100644 index 0000000..a3c0c22 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java @@ -0,0 +1,120 @@ +package icu.samnyan.aqua.sega.diva.handler.user; + +import icu.samnyan.aqua.sega.diva.dao.gamedata.ContestRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerContestRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.ContestBorder; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.common.SortMode; +import icu.samnyan.aqua.sega.diva.model.gamedata.Contest; +import icu.samnyan.aqua.sega.diva.model.request.ingame.StageResultRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerContest; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +import static icu.samnyan.aqua.sega.diva.util.DivaStringUtils.getDummyString; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class EndHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(EndHandler.class); + + private final ContestRepository contestRepository; + + private final PlayerProfileService playerProfileService; + + private final PlayerContestRepository playerContestRepository; + + private final GameSessionRepository gameSessionRepository; + + public EndHandler(DivaMapper mapper, ContestRepository contestRepository, PlayerProfileService playerProfileService, PlayerContestRepository playerContestRepository, GameSessionRepository gameSessionRepository) { + super(mapper); + this.contestRepository = contestRepository; + this.playerProfileService = playerProfileService; + this.playerContestRepository = playerContestRepository; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(StageResultRequest request) { + + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + + profile.setHeadphoneVolume(request.getHp_vol()); + profile.setButtonSeOn(request.isBtn_se_vol()); + profile.setButtonSeVolume(request.getBtn_se_vol2()); + profile.setSliderSeVolume(request.getSldr_se_vol2()); + profile.setVocaloidPoints(session.getVp()); + profile.setLevel(session.getLevelNumber()); + profile.setLevelExp(session.getLevelExp()); + profile.setNextPvId(request.getNxt_pv_id()); + profile.setNextDifficulty(Difficulty.fromValue(request.getNxt_dffclty())); + profile.setNextEdition(Edition.fromValue(request.getNxt_edtn())); + profile.setSortMode(SortMode.fromValue(request.getSort_kind())); + + if (request.getCr_cid() != -1) { + Contest contest = contestRepository.findById(request.getCr_cid()).orElseGet(Contest::new); + ContestBorder currentResultRank = getContestRank(contest, request.getCr_tv()); + if (request.getCr_if() == 0) { + // Do contest is playing + profile.setContestNowPlayingEnable(true); + profile.setContestNowPlayingId(request.getCr_cid()); + profile.setContestNowPlayingResultRank(currentResultRank); + profile.setContestNowPlayingValue(request.getCr_tv()); + profile.setContestNowPlayingSpecifier(String.join(",", request.getCr_sp())); + } else { + PlayerContest contestRecord = playerContestRepository.findByPdIdAndContestId(profile, request.getCr_cid()).orElseGet(() -> new PlayerContest(profile, request.getCr_cid())); + contestRecord.setStartCount(contestRecord.getStartCount() + 1); + contestRecord.setBestValue(Math.max(contestRecord.getBestValue(), request.getCr_tv())); + contestRecord.setResultRank(currentResultRank.getValue() > contestRecord.getResultRank().getValue() ? currentResultRank : contestRecord.getResultRank()); + contestRecord.setLastUpdateTime(LocalDateTime.now()); + + playerContestRepository.save(contestRecord); + profile.setContestNowPlayingEnable(false); + profile.setContestNowPlayingId(-1); + profile.setContestNowPlayingResultRank(ContestBorder.NONE); + profile.setContestNowPlayingValue(-1); + profile.setContestNowPlayingSpecifier(getDummyString("-1", 60)); + } + } + + + playerProfileService.save(profile); + gameSessionRepository.delete(session); + + + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + + private ContestBorder getContestRank(Contest contest, int value) { + if (value >= contest.getGoldBorders()) return ContestBorder.GOLD; + if (value >= contest.getSliverBorders()) return ContestBorder.SILVER; + if (value >= contest.getBronzeBorders()) return ContestBorder.BRONZE; + return ContestBorder.NONE; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PdUnlockHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PdUnlockHandler.java new file mode 100644 index 0000000..890fdfd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PdUnlockHandler.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.diva.handler.user; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.user.PdUnlockRequest; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PdUnlockHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PdUnlockHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public PdUnlockHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + + public String handle(PdUnlockRequest request) { + + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + gameSessionRepository.delete(session); + + BaseResponse response = new BaseResponse( + request.getCmd(), + request.getReq_id(), + "ok" + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PreStartHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PreStartHandler.java new file mode 100644 index 0000000..ca97e72 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/PreStartHandler.java @@ -0,0 +1,126 @@ +package icu.samnyan.aqua.sega.diva.handler.user; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.PreStartResult; +import icu.samnyan.aqua.sega.diva.model.common.StartMode; +import icu.samnyan.aqua.sega.diva.model.request.user.PreStartRequest; +import icu.samnyan.aqua.sega.diva.model.response.user.PreStartResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class PreStartHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(PreStartHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + public PreStartHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + } + + public String handle(PreStartRequest request) { + Optional profileOptional = playerProfileService.findByPdId(request.getAime_id()); + PreStartResponse response; + boolean normalStart = false; + if (profileOptional.isEmpty()) { + response = new PreStartResponse( + request.getCmd(), + request.getReq_id(), + "ok", + PreStartResult.NEW_REGISTRATION); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } else { + PlayerProfile profile = profileOptional.get(); + + Optional sessionOptional = gameSessionRepository.findByPdId(profile); + if (sessionOptional.isPresent()) { + GameSession session = sessionOptional.get(); + if (!session.getLastUpdateTime().isBefore(LocalDateTime.now().minusMinutes(5)) && session.getStartMode() == StartMode.START) { + + response = new PreStartResponse( + request.getCmd(), + request.getReq_id(), + "ok", + PreStartResult.ALREADY_PLAYING + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } else { + gameSessionRepository.delete(session); + } + } + + GameSession session = new GameSession( + ThreadLocalRandom.current().nextInt(100, 99999), + profile, + StartMode.PRE_START, + LocalDateTime.now(), + LocalDateTime.now(), + -1, + -1, + profile.getLevel(), + profile.getLevelExp(), + profile.getLevel(), + profile.getLevelExp(), + profile.getVocaloidPoints() + ); + + gameSessionRepository.save(session); + + response = new PreStartResponse( + request.getCmd(), + request.getReq_id(), + "ok", + PreStartResult.SUCCESS, + session.getAcceptId(), + profile.getPdId(), + profile.getPlayerName(), + profile.getSortMode(), + profile.getLevel(), + profile.getLevelExp(), + profile.getLevelTitle(), + profile.getPlateEffectId(), + profile.getPlateId(), + profile.getCommonModule(), + profile.getCommonModuleSetTime(), + profile.getCommonSkin(), + profile.getButtonSe(), + profile.getSlideSe(), + profile.getChainSlideSe(), + profile.getSliderTouchSe(), + profile.getVocaloidPoints(), + profile.getPasswordStatus() + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/SpendCreditHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/SpendCreditHandler.java new file mode 100644 index 0000000..ca1f544 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/SpendCreditHandler.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.diva.handler.user; + +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.request.user.SpendCreditRequest; +import icu.samnyan.aqua.sega.diva.model.response.user.SpendCreditResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class SpendCreditHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(SpendCreditHandler.class); + + private final PlayerProfileService playerProfileService; + + public SpendCreditHandler(DivaMapper mapper, PlayerProfileService playerProfileService) { + super(mapper); + this.playerProfileService = playerProfileService; + } + + public String handle(SpendCreditRequest request) { + + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + + SpendCreditResponse response = new SpendCreditResponse( + request.getCmd(), + request.getReq_id(), + "ok", + "-1,-1,x,-1,-1,x,x,-1,x,-1,-1,x,-1,-1,x,x,-1,x,-1,-1,x,-1,-1,x,x,-1,x,-1,-1,x,-1,-1,x,x,-1,x,-1,-1,x,-1,-1,x,x,-1,x,-1,-1,x,-1,-1,x,x,-1,x", + 0, + profile.getVocaloidPoints(), + profile.getLevelTitle(), + profile.getPlateEffectId(), + profile.getPlateId() + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/StartHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/StartHandler.java new file mode 100644 index 0000000..9f5df03 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/StartHandler.java @@ -0,0 +1,242 @@ +package icu.samnyan.aqua.sega.diva.handler.user; + +import icu.samnyan.aqua.sega.diva.dao.userdata.GameSessionRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerContestRepository; +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvRecordRepository; +import icu.samnyan.aqua.sega.diva.exception.ProfileNotFoundException; +import icu.samnyan.aqua.sega.diva.exception.PvRecordDataException; +import icu.samnyan.aqua.sega.diva.exception.SessionNotFoundException; +import icu.samnyan.aqua.sega.diva.handler.BaseHandler; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.common.StartMode; +import icu.samnyan.aqua.sega.diva.model.common.collection.ClearSet; +import icu.samnyan.aqua.sega.diva.model.common.collection.ClearTally; +import icu.samnyan.aqua.sega.diva.model.request.user.StartRequest; +import icu.samnyan.aqua.sega.diva.model.response.user.StartResponse; +import icu.samnyan.aqua.sega.diva.model.userdata.GameSession; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerContest; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import icu.samnyan.aqua.sega.diva.service.PlayerCustomizeService; +import icu.samnyan.aqua.sega.diva.service.PlayerModuleService; +import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; +import icu.samnyan.aqua.sega.diva.util.DivaMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class StartHandler extends BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(StartHandler.class); + + private final PlayerProfileService playerProfileService; + + private final GameSessionRepository gameSessionRepository; + + private final PlayerCustomizeService playerCustomizeService; + + private final PlayerModuleService playerModuleService; + + private final PlayerPvRecordRepository playerPvRecordRepository; + + private final PlayerContestRepository playerContestRepository; + + public StartHandler(DivaMapper mapper, PlayerProfileService playerProfileService, GameSessionRepository gameSessionRepository, PlayerCustomizeService playerCustomizeService, PlayerModuleService playerModuleService, PlayerPvRecordRepository playerPvRecordRepository, PlayerContestRepository playerContestRepository) { + super(mapper); + this.playerProfileService = playerProfileService; + this.gameSessionRepository = gameSessionRepository; + this.playerCustomizeService = playerCustomizeService; + this.playerModuleService = playerModuleService; + this.playerPvRecordRepository = playerPvRecordRepository; + this.playerContestRepository = playerContestRepository; + } + + public String handle(StartRequest request) { + + PlayerProfile profile = playerProfileService.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); + GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); + + session.setStartMode(StartMode.START); + gameSessionRepository.save(session); + + String module_have = playerModuleService.getModuleHaveString(profile); + String customize_have = playerCustomizeService.getModuleHaveString(profile); + + Map contestResult = getContestResult(profile); + + StartResponse response = new StartResponse( + request.getCmd(), + request.getReq_id(), + "ok", + profile.getPdId(), + Result.SUCCESS, + session.getAcceptId(), + session.getAcceptId(), + profile.getPlayerName(), + profile.getHeadphoneVolume(), + profile.isButtonSeOn(), + profile.getButtonSeVolume(), + profile.getSliderSeVolume(), + profile.getSortMode(), + profile.getLevel(), + profile.getLevelExp(), + profile.getLevelTitle(), + profile.getPlateEffectId(), + profile.getPlateId(), + profile.getCommonModule(), + profile.getCommonCustomizeItems(), + profile.getModuleSelectItemFlag(), + LocalDateTime.now(), + module_have, + customize_have, + profile.isPreferPerPvModule(), + profile.isPreferCommonModule(), + profile.isUsePerPvSkin(), + profile.isUsePerPvButtonSe(), + profile.isUsePerPvSliderSe(), + profile.isUsePerPvChainSliderSe(), + profile.isUsePerPvTouchSliderSe(), + profile.getVocaloidPoints(), + profile.getNextPvId(), + profile.getNextDifficulty(), + profile.getNextEdition(), + contestResult.get("cv_cid"), // contest progress + contestResult.get("cv_sc"), + contestResult.get("cv_rr"), + contestResult.get("cv_bv"), + contestResult.get("cv_bf"), + profile.isContestNowPlayingEnable() ? profile.getContestNowPlayingId() : -1, + profile.getContestNowPlayingValue(), + profile.getContestNowPlayingResultRank(), + profile.getContestNowPlayingSpecifier(), + profile.getMyList0(), + profile.getMyList1(), + profile.getMyList2(), + null, + null, +// getDummyString("-1", 40), +// getDummyString("-1", 40), + profile.isShowClearBorder(), + profile.isShowInterimRanking(), + profile.isShowClearStatus(), + countClearStatus(profile), + profile.isShowRgoSetting(), + null, // Currently quest not working + null, + null, + null, + null, + null + ); + + String resp = this.build(mapper.toMap(response)); + logger.info("Response: {}", resp); + + return resp; + } + + private String countClearStatus(PlayerProfile profile) { + List pvRecordList = playerPvRecordRepository.findByPdId(profile); + ClearTally clearTally = new ClearTally(); + pvRecordList.forEach(x -> { + switch (x.getEdition()) { + case ORIGINAL: { + switch (x.getResult()) { + case CHEAP: + getDiff(x, clearTally).addClear(); + break; + case STANDARD: + getDiff(x, clearTally).addClear(); + break; + case GREAT: + getDiff(x, clearTally).addGreat(); + break; + case EXCELLENT: + getDiff(x, clearTally).addExcellent(); + break; + case PERFECT: + getDiff(x, clearTally).addPerfect(); + break; + } + break; + } + case EXTRA: { + switch (x.getResult()) { + case CHEAP: + clearTally.getExtraExtreme().addClear(); + break; + case STANDARD: + clearTally.getExtraExtreme().addClear(); + break; + case GREAT: + clearTally.getExtraExtreme().addGreat(); + break; + case EXCELLENT: + clearTally.getExtraExtreme().addExcellent(); + break; + case PERFECT: + clearTally.getExtraExtreme().addPerfect(); + break; + } + } + } + }); + return clearTally.toInternal(); + } + + private ClearSet getDiff(PlayerPvRecord record, ClearTally clearTally) { + switch (record.getDifficulty()) { + case EASY: + return clearTally.getEasy(); + case NORMAL: + return clearTally.getNormal(); + case HARD: + return clearTally.getHard(); + case EXTREME: + return clearTally.getExtreme(); + default: + throw new PvRecordDataException("Difficulty data not exist, record id:" + record.getId()); + } + } + + private Map getContestResult(PlayerProfile profile) { + List cv_cid = new LinkedList<>(); + List cv_sc = new LinkedList<>(); + List cv_rr = new LinkedList<>(); + List cv_bv = new LinkedList<>(); + List cv_bf = new LinkedList<>(); + List contestList = playerContestRepository.findTop4ByPdIdOrderByLastUpdateTimeDesc(profile); + contestList.forEach(x -> { + cv_cid.add(x.getContestId()); + cv_sc.add(x.getStartCount()); + cv_rr.add(x.getResultRank().getValue()); + cv_bv.add(x.getBestValue()); + cv_bf.add(-1); + }); + for (int i = cv_cid.size(); i < 4; i++) { + cv_cid.add(-1); + cv_sc.add(-1); + cv_rr.add(-1); + cv_bv.add(-1); + cv_bf.add(-1); + } + Map result = new HashMap<>(); + result.put("cv_cid", cv_cid.stream().map(Object::toString).collect(Collectors.joining(","))); + result.put("cv_sc", cv_sc.stream().map(Object::toString).collect(Collectors.joining(","))); + result.put("cv_rr", cv_rr.stream().map(Object::toString).collect(Collectors.joining(","))); + result.put("cv_bv", cv_bv.stream().map(Object::toString).collect(Collectors.joining(","))); + result.put("cv_bf", cv_bf.stream().map(Object::toString).collect(Collectors.joining(","))); + return result; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/Internalizable.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/Internalizable.java new file mode 100644 index 0000000..a73145e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/Internalizable.java @@ -0,0 +1,8 @@ +package icu.samnyan.aqua.sega.diva.model; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface Internalizable { + String toInternal(); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ChallengeKind.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ChallengeKind.java new file mode 100644 index 0000000..6dd6e81 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ChallengeKind.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ChallengeKind { + UNDEFINED(-1), + CLEAR(0), + GREAT(1), + EXCELLENT(2), + PERFECT(3), + COMPLETED(4); + + + private int value; + + ChallengeKind(int i) { + this.value = i; + } + + public static ChallengeKind fromValue(int i) { + for (ChallengeKind challengeKind : + ChallengeKind.values()) { + if (challengeKind.getValue() == i) return challengeKind; + } + return ChallengeKind.UNDEFINED; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ClearResult.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ClearResult.java new file mode 100644 index 0000000..9fcea20 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ClearResult.java @@ -0,0 +1,36 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ClearResult implements ValueEnum { + NO_CLEAR(-1), + MISS_TAKE(0), + CHEAP(1), + STANDARD(2), + GREAT(3), + EXCELLENT(4), + PERFECT(5); + + + private int value; + + ClearResult(int i) { + this.value = i; + } + + public static ClearResult fromValue(int i) { + for (ClearResult clearResult : + ClearResult.values()) { + if (clearResult.getValue() == i) return clearResult; + } + return ClearResult.NO_CLEAR; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Const.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Const.java new file mode 100644 index 0000000..e1c1d81 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Const.java @@ -0,0 +1,11 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class Const { + public final static String ALL_NOT_HAVE = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + public final static String ALL_NOT_HAVE_TEST = "0"; + public final static String ALL_HAVE = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; + public final static String NULL_QUEST = "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1"; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestBorder.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestBorder.java new file mode 100644 index 0000000..0ab8303 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestBorder.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ContestBorder { + NONE(-1), + BRONZE(0), + SILVER(1), + GOLD(2); + + + private int value; + + ContestBorder(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestLeague.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestLeague.java new file mode 100644 index 0000000..c192da6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestLeague.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ContestLeague { + BEGINNER(0), + INTERMEDIATE(1), + ADVANCED(2), + PROFESSIONAL(3); + + + private int value; + + ContestLeague(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestNormaType.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestNormaType.java new file mode 100644 index 0000000..bccf31e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestNormaType.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ContestNormaType { + SCORE(0), + PERCENTAGE(1), + COOL_PERCENTAGE(2); + + + private int value; + + ContestNormaType(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestStageLimit.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestStageLimit.java new file mode 100644 index 0000000..578fa8a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ContestStageLimit.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum ContestStageLimit { + UNLIMITED(0), + LIMITED(1); + + + private int value; + + ContestStageLimit(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Difficulty.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Difficulty.java new file mode 100644 index 0000000..a444cd2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Difficulty.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum Difficulty { + UNDEFINED(-1), + EASY(0), + NORMAL(1), + HARD(2), + EXTREME(3); + + + private int value; + + Difficulty(int i) { + this.value = i; + } + + public static Difficulty fromValue(int i) { + for (Difficulty difficulty : + Difficulty.values()) { + if (difficulty.getValue() == i) return difficulty; + } + return Difficulty.UNDEFINED; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Edition.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Edition.java new file mode 100644 index 0000000..bb783b2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Edition.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum Edition { + ORIGINAL(0), + EXTRA(1); + + + private int value; + + Edition(int i) { + this.value = i; + } + + public static Edition fromValue(int i) { + for (Edition edition : + Edition.values()) { + if (edition.getValue() == i) return edition; + } + return Edition.ORIGINAL; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/FestaKind.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/FestaKind.java new file mode 100644 index 0000000..75c910c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/FestaKind.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum FestaKind { + PINK_FESTA(0), + GREEN_FESTA(1); + + + private int value; + + FestaKind(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/LevelInfo.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/LevelInfo.java new file mode 100644 index 0000000..7e7222f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/LevelInfo.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LevelInfo { + private int levelNumber; + private int levelExp; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PassStat.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PassStat.java new file mode 100644 index 0000000..4185829 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PassStat.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum PassStat { + MISS(0), + SET(1), + RESET(2), + REISSUE(3); + + + private int value; + + PassStat(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PreStartResult.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PreStartResult.java new file mode 100644 index 0000000..77a210d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/PreStartResult.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum PreStartResult { + SUCCESS(1), + FAILED(0), + CARD_TOO_NEW(-1), + ALREADY_PLAYING(-2), + NEW_REGISTRATION(-3), + CARD_BANNED(-4); + + + private int value; + + PreStartResult(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Result.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Result.java new file mode 100644 index 0000000..77b383b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/Result.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum Result { + FAILED(0), + SUCCESS(1); + + + private int value; + + Result(int i) { + this.value = i; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/SortMode.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/SortMode.java new file mode 100644 index 0000000..31ee310 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/SortMode.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum SortMode { + COMPLEXITY(0), + NAME(1), + RELEASE_DATE(2), + MY_LIST_A(3), + MY_LIST_B(4), + MY_LIST_C(5); + + + private int value; + + SortMode(int i) { + this.value = i; + } + + public static SortMode fromValue(int i) { + for (SortMode sortMode : + SortMode.values()) { + if (sortMode.getValue() == i) return sortMode; + } + return SortMode.RELEASE_DATE; + } + + @JsonValue + public int getValue() { + return value; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/StartMode.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/StartMode.java new file mode 100644 index 0000000..83b13a1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/StartMode.java @@ -0,0 +1,10 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public enum StartMode { + PRE_START, + START, + CARD_PROCEDURE +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ValueEnum.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ValueEnum.java new file mode 100644 index 0000000..17c3307 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/ValueEnum.java @@ -0,0 +1,8 @@ +package icu.samnyan.aqua.sega.diva.model.common; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface ValueEnum { + int getValue(); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/DispersalParameter.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/DispersalParameter.java new file mode 100644 index 0000000..f8d91a8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/DispersalParameter.java @@ -0,0 +1,35 @@ +package icu.samnyan.aqua.sega.diva.model.common.attend; + +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +public class DispersalParameter implements Internalizable { + private int max_pd_items = 30; + private int max_ps_rankings = 100; + private int max_uploadable_screenshots = 2; + private int ss_upload_delay = 1; + + @Override + public String toInternal() { + List list = new LinkedList<>(); + list.add(max_pd_items); + list.add(1); + list.add(max_ps_rankings); + list.add(max_uploadable_screenshots); + list.add(ss_upload_delay); + list.add(1); + list.addAll(Collections.nCopies(100, 0)); + return list.stream().limit(100).map(Object::toString).collect(Collectors.joining(",")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/EtcParameter.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/EtcParameter.java new file mode 100644 index 0000000..c5b92b6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/EtcParameter.java @@ -0,0 +1,61 @@ +package icu.samnyan.aqua.sega.diva.model.common.attend; + +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +public class EtcParameter implements Internalizable { + private Boolean module_shop_close = false; + private Boolean card_reissue_close = true; + private Boolean card_renewal_close = true; + private Boolean reset_passwd_close = true; + private Boolean change_passwd_close = false; + private Boolean change_name_close = false; + private Boolean encore_mode_close = true; + private Boolean third_stg_mode_close = false; + private Integer slow_down_threshold = 0; + private Boolean log_write_flag = false; + private Boolean daily_quest_close = true; + private Boolean weekly_quest_close = true; + private Boolean special_quest_close = true; + private Boolean nppg_close = false; + + @Override + public String toInternal() { + List list = new LinkedList<>(); + list.add(module_shop_close); + list.add(card_reissue_close); + list.add(card_renewal_close); + list.add(reset_passwd_close); + list.add(change_passwd_close); + list.add(change_name_close); + list.add(encore_mode_close); + list.add(third_stg_mode_close); + list.add(slow_down_threshold); + list.add(log_write_flag); + list.add(daily_quest_close); + list.add(weekly_quest_close); + list.add(special_quest_close); + list.add(nppg_close); + list.addAll(Collections.nCopies(100, 0)); + return list.stream().limit(100).map(x -> { + if (x instanceof Boolean) { + return (Boolean) x ? "1" : "0"; + } + if (x instanceof Integer) { + return String.valueOf(x); + } + return "0"; + }).collect(Collectors.joining(",")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceParameter.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceParameter.java new file mode 100644 index 0000000..e842305 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceParameter.java @@ -0,0 +1,99 @@ +package icu.samnyan.aqua.sega.diva.model.common.attend; + +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +public class GameBalanceParameter implements Internalizable { + + private int name_change_price = 100; + private GameBalanceTrialBidSet easy_trials = new GameBalanceTrialBidSet( + new GameBalanceTrialBid(5, 10), + new GameBalanceTrialBid(10, 25), + new GameBalanceTrialBid(20, 50), + new GameBalanceTrialBid(30, 90) + ); + private GameBalanceTrialBidSet normal_trials = new GameBalanceTrialBidSet( + new GameBalanceTrialBid(5, 10), + new GameBalanceTrialBid(10, 25), + new GameBalanceTrialBid(20, 50), + new GameBalanceTrialBid(30, 90) + ); + private GameBalanceTrialBidSet hard_trials = new GameBalanceTrialBidSet( + new GameBalanceTrialBid(5, 10), + new GameBalanceTrialBid(10, 25), + new GameBalanceTrialBid(20, 50), + new GameBalanceTrialBid(30, 90) + ); + private GameBalanceTrialBidSet extreme_trials = new GameBalanceTrialBidSet( + new GameBalanceTrialBid(5, 10), + new GameBalanceTrialBid(10, 25), + new GameBalanceTrialBid(20, 50), + new GameBalanceTrialBid(30, 90) + ); + private GameBalanceTrialBidSet extra_extreme_trials = new GameBalanceTrialBidSet( + new GameBalanceTrialBid(5, 10), + new GameBalanceTrialBid(10, 25), + new GameBalanceTrialBid(20, 50), + new GameBalanceTrialBid(30, 90) + ); + + @Override + public String toInternal() { + Integer[] arr = new Integer[]{ + this.name_change_price, + 0, // unkn + 1, + 1, + 1, + 2, + 3, + 4, // unkn + 1, + 1, + 1, + 3, + 4, + 5, // unkn + 1, + 1, + 1, + 4, + 5, + 6, // unkn + 1, + 1, + 1, + 5, + 6, + 7, // unkn + 4, + 4, + 4, + 9, + 10, + 14 // unkn + }; + List list = new LinkedList<>(Arrays.asList(arr)); + list.addAll(easy_trials.getArr()); + list.addAll(normal_trials.getArr()); + list.addAll(hard_trials.getArr()); + list.addAll(extreme_trials.getArr()); + list.addAll(extra_extreme_trials.getArr()); + list.add(10); + list.add(30); + list.addAll(Collections.nCopies(100, 0)); + return list.stream().limit(100).map(Object::toString).collect(Collectors.joining(",")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBid.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBid.java new file mode 100644 index 0000000..e53c2e5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBid.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.diva.model.common.attend; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +public class GameBalanceTrialBid { + private int pay; + private int win; + + public String getString() { + return pay + "," + win; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBidSet.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBidSet.java new file mode 100644 index 0000000..4b72609 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/attend/GameBalanceTrialBidSet.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.diva.model.common.attend; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +public class GameBalanceTrialBidSet { + private GameBalanceTrialBid clear; + private GameBalanceTrialBid great; + private GameBalanceTrialBid excellent; + private GameBalanceTrialBid perfect; + + public List getArr() { + Integer[] arr = new Integer[]{ + clear.getPay(), + clear.getWin(), + great.getPay(), + great.getWin(), + excellent.getPay(), + excellent.getWin(), + perfect.getPay(), + perfect.getWin(), + }; + return new LinkedList<>(Arrays.asList(arr)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearSet.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearSet.java new file mode 100644 index 0000000..4ffb33a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearSet.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.diva.model.common.collection; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +public class ClearSet { + private int clear = 0; + private int great = 0; + private int excellent = 0; + private int perfect = 0; + + public void addClear() { + this.clear += 1; + } + + public void addGreat() { + this.great += 1; + } + + public void addExcellent() { + this.excellent += 1; + } + + public void addPerfect() { + this.perfect += 1; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearTally.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearTally.java new file mode 100644 index 0000000..bea57e2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/ClearTally.java @@ -0,0 +1,49 @@ +package icu.samnyan.aqua.sega.diva.model.common.collection; + +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +public class ClearTally implements Internalizable { + + private ClearSet easy = new ClearSet(); + private ClearSet normal = new ClearSet(); + private ClearSet hard = new ClearSet(); + private ClearSet extreme = new ClearSet(); + private ClearSet extraExtreme = new ClearSet(); + + @Override + public String toInternal() { + List list = new LinkedList<>(); + list.add(easy.getClear()); + list.add(easy.getGreat()); + list.add(easy.getExcellent()); + list.add(easy.getPerfect()); + list.add(normal.getClear()); + list.add(normal.getGreat()); + list.add(normal.getExcellent()); + list.add(normal.getPerfect()); + list.add(hard.getClear()); + list.add(hard.getGreat()); + list.add(hard.getExcellent()); + list.add(hard.getPerfect()); + list.add(extreme.getClear()); + list.add(extreme.getGreat()); + list.add(extreme.getExcellent()); + list.add(extreme.getPerfect()); + list.add(extraExtreme.getClear()); + list.add(extraExtreme.getGreat()); + list.add(extraExtreme.getExcellent()); + list.add(extraExtreme.getPerfect()); + return list.stream().map(Object::toString).collect(Collectors.joining(",")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/FestaCollection.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/FestaCollection.java new file mode 100644 index 0000000..15ec767 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/FestaCollection.java @@ -0,0 +1,79 @@ +package icu.samnyan.aqua.sega.diva.model.common.collection; + +import icu.samnyan.aqua.sega.diva.model.gamedata.Festa; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.util.URIEncoder; +import lombok.Data; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +public class FestaCollection { + private Festa firstFesta = new Festa(); + private Festa secondFesta = new Festa(); + + public FestaCollection(Festa firstFesta, Festa secondFesta) { + this.firstFesta = firstFesta; + this.secondFesta = secondFesta; + } + + public FestaCollection(Festa firstFesta) { + this.firstFesta = firstFesta; + } + + public FestaCollection(List festas) { + if (festas.size() >= 2) { + this.firstFesta = festas.get(0); + this.secondFesta = festas.get(1); + } else if (festas.size() == 1) { + this.firstFesta = festas.get(0); + } + } + + public String getIds() { + return this.firstFesta.getId() + "," + this.secondFesta.getId(); + } + + public String getNames() { + return URIEncoder.encode(this.firstFesta.getName()) + "," + URIEncoder.encode(this.secondFesta.getName()); + } + + public String getKinds() { + return this.firstFesta.getKind().getValue() + "," + this.secondFesta.getKind().getValue(); + } + + public String getDiffs() { + return this.firstFesta.getDifficulty().getValue() + "," + this.secondFesta.getDifficulty().getValue(); + } + + public String getPvIds() { + return this.firstFesta.getPvList() + "," + this.secondFesta.getPvList(); + } + + public String getAttr() { + return this.firstFesta.getAttributes() + "," + this.secondFesta.getAttributes(); + } + + public String getAddVps() { + return this.firstFesta.getAddVP() + "," + this.secondFesta.getAddVP(); + } + + public String getVpMultipliers() { + return this.firstFesta.getVpMultiplier() + "," + this.secondFesta.getVpMultiplier(); + } + + public String getStarts() { + return DivaDateTimeUtil.getString(this.firstFesta.getStart()) + "," + DivaDateTimeUtil.getString(this.secondFesta.getStart()); + } + + public String getEnds() { + return DivaDateTimeUtil.getString(this.firstFesta.getEnd()) + "," + DivaDateTimeUtil.getString(this.secondFesta.getEnd()); + } + + public String getLastUpdateTime() { + return DivaDateTimeUtil.getString(this.firstFesta.getCreateDate().compareTo(this.secondFesta.getCreateDate()) < 0 ? this.firstFesta.getCreateDate() : this.secondFesta.getCreateDate()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/PsRankingCollection.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/PsRankingCollection.java new file mode 100644 index 0000000..0f6b64a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/common/collection/PsRankingCollection.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.diva.model.common.collection; + +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import lombok.Data; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +public class PsRankingCollection { + private PlayerPvRecord first; + private PlayerPvRecord second; + private PlayerPvRecord third; + + public PsRankingCollection(int pvId, Edition edition, List list) { + this.first = new PlayerPvRecord(pvId, edition); + this.second = new PlayerPvRecord(pvId, edition); + this.third = new PlayerPvRecord(pvId, edition); + if (list.size() >= 1) { + this.first = list.get(0); + } + if (list.size() >= 2) { + this.second = list.get(1); + } + if (list.size() >= 3) { + this.third = list.get(2); + } + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Contest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Contest.java new file mode 100644 index 0000000..f94def8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Contest.java @@ -0,0 +1,227 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.ContestLeague; +import icu.samnyan.aqua.sega.diva.model.common.ContestNormaType; +import icu.samnyan.aqua.sega.diva.model.common.ContestStageLimit; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.util.URIEncoder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaContest") +@Table(name = "diva_contest") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Contest implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private int id; + + private boolean enable; + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + private String name; + + private String description; + + @Enumerated(EnumType.STRING) + private ContestLeague league; + + private int stars; + + private int minComplexity; + + private int maxComplexity; + + private int stages; + + @Enumerated(EnumType.STRING) + private ContestStageLimit stageLimit; + + @Enumerated(EnumType.STRING) + private ContestNormaType normaType; + + private int bronzeBorders = 0; + + private int sliverBorders = 0; + + private int goldBorders = 0; + + public String getString() { + List list = new LinkedList<>(); + list.add(this.id); + list.add(DivaDateTimeUtil.format(this.startTime)); + list.add(DivaDateTimeUtil.format(this.endTime)); + list.add(URIEncoder.encode(this.name)); + list.add(URIEncoder.encode(this.description)); + list.add(this.league.getValue()); + list.add(this.stars); + list.add(this.stages); + list.add(this.stageLimit.getValue()); + list.add(this.normaType.getValue()); + list.add(this.bronzeBorders); + list.add(this.sliverBorders); + list.add(this.goldBorders); + list.add(-1); + list.add(-2); + list.add(this.minComplexity); + list.add(this.maxComplexity); + list.add(-1); + list.add(-2); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("-2"); + list.add("7fffffffffffffffffffffffffffffff"); + return list.stream().map(Object::toString).collect(Collectors.joining(",")); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaCustomize.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaCustomize.java new file mode 100644 index 0000000..3a1b89f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaCustomize.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.util.URIEncoder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaCustomize") +@Table(name = "diva_customize") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DivaCustomize implements Serializable, Internalizable { + + private static final long serialVersionUID = 1L; + + @Id + @JsonIgnore + private int id; + + private String name; + + private int price; + + private LocalDateTime releaseDate; + + private LocalDateTime endDate; + + private int sortOrder; + + @Override + public String toInternal() { + return id + ",0," + + URIEncoder.encode(name) + "," + + price + "," + + DivaDateTimeUtil.format(releaseDate) + "," + + DivaDateTimeUtil.format(endDate) + "," + + sortOrder; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaModule.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaModule.java new file mode 100644 index 0000000..65fea98 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/DivaModule.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.Internalizable; +import icu.samnyan.aqua.sega.diva.util.DivaDateTimeUtil; +import icu.samnyan.aqua.sega.util.URIEncoder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaModule") +@Table(name = "diva_module") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DivaModule implements Serializable, Internalizable { + + private static final long serialVersionUID = 1L; + + @Id + @JsonIgnore + private int id; + + private String name; + + private int price; + + private LocalDateTime releaseDate; + + private LocalDateTime endDate; + + private int sortOrder; + + @Override + public String toInternal() { + return id + ",0," + + URIEncoder.encode(name) + "," + + price + "," + + DivaDateTimeUtil.format(releaseDate) + "," + + DivaDateTimeUtil.format(endDate) + "," + + sortOrder; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Festa.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Festa.java new file mode 100644 index 0000000..70ac809 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/Festa.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.FestaKind; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaFesta") +@Table(name = "diva_festa") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Festa implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private int id = -1; + + private boolean enable = true; + + private String name = "xxx"; + + @Enumerated(EnumType.STRING) + private FestaKind kind = FestaKind.PINK_FESTA; + + @Enumerated(EnumType.STRING) + private Difficulty difficulty = Difficulty.UNDEFINED; + + private String pvList = "ALL"; + + private String attributes = "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; + + private Integer addVP = 0; + + private Integer vpMultiplier = 1; + + private LocalDateTime start = LocalDateTime.of(2005, 1, 1, 0, 0); + + private LocalDateTime end = LocalDateTime.of(2005, 1, 1, 0, 0); + + private LocalDateTime createDate = LocalDateTime.of(2005, 1, 1, 0, 0); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/NgWords.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/NgWords.java new file mode 100644 index 0000000..b97883e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/NgWords.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaNgWords") +@Table(name = "diva_ng_words") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class NgWords implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private int id; + + private String word; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/PvEntry.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/PvEntry.java new file mode 100644 index 0000000..420f15a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/gamedata/PvEntry.java @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.diva.model.gamedata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPvEntry") +@Table(name = "diva_pv_entry") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PvEntry implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + private int pvId; + + @Enumerated(EnumType.STRING) + private Difficulty difficulty; + + private int version; + + @Enumerated(EnumType.STRING) + private Edition edition; + + private LocalDateTime demoStart; + + private LocalDateTime demoEnd; + + private LocalDateTime playableStart; + + private LocalDateTime playableEnd; + + public PvEntry(int pvId, Difficulty difficulty, int version, Edition edition, LocalDateTime demoStart, LocalDateTime demoEnd, LocalDateTime playableStart, LocalDateTime playableEnd) { + this.pvId = pvId; + this.difficulty = difficulty; + this.version = version; + this.edition = edition; + this.demoStart = demoStart; + this.demoEnd = demoEnd; + this.playableStart = playableStart; + this.playableEnd = playableEnd; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/BaseRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/BaseRequest.java new file mode 100644 index 0000000..93d19c2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/BaseRequest.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.diva.model.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.ZonedDateTime; + +/** + * Data format from https://dev.s-ul.eu/mikumiku/minime/wikis/home + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class BaseRequest { + private String cmd; // Command + private String req_id; // Request Id + private String game_id; // Game Id + private String r_ver; // Game Version + private String kc_serial; // KeyChip Serial + private String b_serial; // Board Serial + private String place_id; // Place Id + private ZonedDateTime time_stamp; + private String start_up_mode; // Satellite mode, as on dipsw#1, 0 is SUB and 1 is MAIN + private String cmm_dly_mod; + private String cmm_dly_sec; + private String cmm_err_mod; + private String country_code; + private String region_code; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/FormRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/FormRequest.java new file mode 100644 index 0000000..4aca88d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/FormRequest.java @@ -0,0 +1,17 @@ +package icu.samnyan.aqua.sega.diva.model.request; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FormRequest { + private String query; + private MultipartFile bin; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/AttendRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/AttendRequest.java new file mode 100644 index 0000000..5356cb7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/AttendRequest.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.request.boot; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * https://dev.s-ul.eu/mikumiku/minime/wikis/Command/attend + * + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class AttendRequest extends BaseRequest { + public String atnd_lut; // Date-Time of last attend state update + public String atnd_prm1; // Etc. Parameter, only 14 are used, but array of 100 int + public String atnd_prm2; // Game balance parameter, only 89 are used of 100 + public String atnd_prm3; // Dispersal parameter, only 6 used of 100 +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/GameInitRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/GameInitRequest.java new file mode 100644 index 0000000..22b70a1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/boot/GameInitRequest.java @@ -0,0 +1,14 @@ +package icu.samnyan.aqua.sega.diva.model.request.boot; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class GameInitRequest extends BaseRequest { + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/CardProcedureRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/CardProcedureRequest.java new file mode 100644 index 0000000..003fadd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/CardProcedureRequest.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.request.card; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class CardProcedureRequest extends BaseRequest { + private int cd_adm_cmd; + private String a_code; + private int aime_id; + private String aime_a_code; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangeNameRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangeNameRequest.java new file mode 100644 index 0000000..ee069b0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangeNameRequest.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.diva.model.request.card; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ChangeNameRequest extends BaseRequest { + private String a_code; + private int aime_id; + private String aime_a_code; + private int pd_id; + private int accept_idx; + private String player_name; + private int chg_name_price; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangePasswdRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangePasswdRequest.java new file mode 100644 index 0000000..116a336 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/ChangePasswdRequest.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.request.card; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ChangePasswdRequest extends BaseRequest { + private String a_code; + private int aime_id; + private String aime_a_code; + private int pd_id; + private int accept_idx; + private String new_passwd; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/RegistrationRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/RegistrationRequest.java new file mode 100644 index 0000000..25ec98d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/card/RegistrationRequest.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.diva.model.request.card; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class RegistrationRequest extends BaseRequest { + private String pmm; + private String idm; + private String mmgameid; + private String mmuid; + private String a_code; + private int aime_id; + private String aime_a_code; + private String key_obj_type; + private String player_name; + private String passwd; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/BannerDataRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/BannerDataRequest.java new file mode 100644 index 0000000..c88dec0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/BannerDataRequest.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.diva.model.request.databank; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class BannerDataRequest extends BaseRequest { + private int bd_id; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/PsRankingRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/PsRankingRequest.java new file mode 100644 index 0000000..fbfc61a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/databank/PsRankingRequest.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.diva.model.request.databank; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class PsRankingRequest extends BaseRequest { + private int[] rnk_ps_pv_id_lst; + private int rnk_ps_idx; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyCstmzItmRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyCstmzItmRequest.java new file mode 100644 index 0000000..991a8fd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyCstmzItmRequest.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class BuyCstmzItmRequest extends BaseRequest { + private int pd_id; + private int accept_idx; + private int start_idx; + private int cstmz_itm_id; + private int cstmz_itm_price; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyModuleRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyModuleRequest.java new file mode 100644 index 0000000..a3780f8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/BuyModuleRequest.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class BuyModuleRequest extends BaseRequest { + private int pd_id; + private int accept_idx; + private int start_idx; + private int mdl_id; + private int mdl_price; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/GetPvPdRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/GetPvPdRequest.java new file mode 100644 index 0000000..ddeadc2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/GetPvPdRequest.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class GetPvPdRequest extends BaseRequest { + private int pd_id; + private int difficulty; + private int[] pd_pv_id_lst; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/ShopExitRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/ShopExitRequest.java new file mode 100644 index 0000000..569aa3c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/ShopExitRequest.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ShopExitRequest extends BaseRequest { + private int pd_id; + private int accept_idx; + private int start_idx; + private int use_pv_mdl_eqp; + private int ply_pv_id; + private int[] mdl_eqp_cmn_ary; + private int[] c_itm_eqp_cmn_ary; + private int[] ms_itm_flg_cmn_ary; + private int[] mdl_eqp_pv_ary; + private int[] c_itm_eqp_pv_ary; + private int[] ms_itm_flg_pv_ary; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageResultRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageResultRequest.java new file mode 100644 index 0000000..8d0c6de --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageResultRequest.java @@ -0,0 +1,111 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class StageResultRequest extends BaseRequest { + public int pd_id; + public int accept_idx; + public int start_idx; + public int hp_vol; + public boolean btn_se_vol; + public int btn_se_vol2; + public int sldr_se_vol2; + public boolean use_pv_mdl_eqp; + public int vcld_pts; + public int nxt_pv_id; + public int nxt_dffclty; + public int nxt_edtn; + public int sort_kind; + public int nblss_ltt_stts; + public int nblss_ltt_tckt; + public int[] my_qst_id; + public int[] my_qst_sts; + public boolean free_play; + public int game_type; + public int[] stg_difficulty; + public int[] stg_edtn; + public int[] stg_ply_pv_id; + public int[] stg_sel_pv_id; + public int[] stg_scrpt_ver; + public int[] stg_score; + public int[] stg_chllng_kind; + public int[] stg_chllng_result; + public int[] stg_clr_kind; + public int[] stg_vcld_pts; + public int[] stg_cool_cnt; + public int[] stg_cool_pct; + public int[] stg_fine_cnt; + public int[] stg_fine_pct; + public int[] stg_safe_cnt; + public int[] stg_safe_pct; + public int[] stg_sad_cnt; + public int[] stg_sad_pct; + public int[] stg_wt_wg_cnt; + public int[] stg_wt_wg_pct; + + public int[] stg_max_cmb; + public int[] stg_chance_tm; + public int[] stg_sm_hl; + public int[] stg_atn_pnt; + public int[] stg_skin_id; + public int[] stg_btn_se; + public int[] stg_btn_se_vol; + public int[] stg_sld_se; + public int[] stg_chn_sld_se; + public int[] stg_sldr_tch_se; + public int[] stg_mdl_id; + public int[] stg_sel_mdl_id; + public int[] stg_rvl_pd_id; + public int[] stg_rvl_wl; + public int[] stg_cpt_rslt; + public int[] stg_sld_scr; + public int[] stg_is_sr_gm; + public int[] stg_pv_brnch_rslt; + public int[] stg_vcl_chg; + public int[] stg_c_itm_id; + public int[] stg_ms_itm_flg; + public int[] stg_rgo; + public int[] stg_ss_num; + public int[] stg_is_cs_scs; + public int[] stg_is_nppg_use; + public int[] stg_p_std_lo_id; + public int[] stg_p_std_is_to; + public int[] stg_p_std_is_ccu; + public int[] stg_p_std_is_tiu; + public int[] stg_p_std_is_iu; + public int[] stg_p_std_is_npu; + public int[] stg_p_std_is_du; + + public int ply_pv_id; + + public int ttl_vp_add; + public int ttl_vp_sub; + + public int continue_cnt; + public int[] gu_cmd; + + public int[] mdl_eqp_cmn_ary; + public int[] c_itm_eqp_cmn_ary; + public int[] ms_itm_flg_cmn_ary; + public int[] mdl_eqp_pv_ary; + public int[] c_itm_eqp_pv_ary; + public int[] ms_itm_flg_pv_ary; + public int[] stg_mdl_s_sts; + + public int cr_cid; + public int cr_sc; + public int cr_tv; + public int cr_if; + public String[] cr_sp; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageStartRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageStartRequest.java new file mode 100644 index 0000000..0bcd228 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StageStartRequest.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class StageStartRequest extends BaseRequest { + public int pd_id; + public int accept_idx; + public int start_idx; + public boolean free_play; + public int game_type; + public int[] stg_difficulty; + public int[] stg_edtn; + public int[] stg_ply_pv_id; + public int[] stg_sel_pv_id; // + public int[] stg_scrpt_ver; + + public int[] stg_skin_id; + public int[] stg_btn_se; + public int[] stg_btn_se_vol; + public int[] stg_sld_se; + public int[] stg_chn_sld_se; + public int[] stg_sldr_tch_se; + public int[] stg_mdl_id; + public int[] stg_sel_mdl_id; + public int[] stg_rvl_pd_id; + public int[] stg_c_itm_id; + public int[] stg_ms_itm_flg; + public int[] stg_rgo; + public int[] stg_ss_num; + public int[] stg_is_cs_scs; + + public int continue_cnt; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StoreSsRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StoreSsRequest.java new file mode 100644 index 0000000..00112ab --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/ingame/StoreSsRequest.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.diva.model.request.ingame; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class StoreSsRequest extends BaseRequest { + private int pd_id; + private String ss_dat_id; + private int ss_pv_id; + private int ss_sel_pv_id; + private int[] ss_mdl_id; + private int[] ss_sel_mdl_id; + private int[] ss_c_itm_id; + private int[] ss_pxl_sz; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PdUnlockRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PdUnlockRequest.java new file mode 100644 index 0000000..04ab9f8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PdUnlockRequest.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.diva.model.request.user; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class PdUnlockRequest extends BaseRequest { + private int pd_id; + private int accept_idx; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PreStartRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PreStartRequest.java new file mode 100644 index 0000000..8117e6f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/PreStartRequest.java @@ -0,0 +1,26 @@ +package icu.samnyan.aqua.sega.diva.model.request.user; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class PreStartRequest extends BaseRequest { + private String pmm; + private String idm; + private String mmgameid; + private String mmuid; + private String a_code; + private int aime_id; + private String aime_a_code; + private String key_obj_type; + private boolean exec_vu; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/SpendCreditRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/SpendCreditRequest.java new file mode 100644 index 0000000..c6f5338 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/SpendCreditRequest.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.request.user; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class SpendCreditRequest extends BaseRequest { + private int pd_id; + private int[] my_qst_id; + private int[] my_qst_sts; + private int crdt_typ; + private int[] cmpgn_id; + private int[] cmpgn_pb; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/StartRequest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/StartRequest.java new file mode 100644 index 0000000..846a3e5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/request/user/StartRequest.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.diva.model.request.user; + +import icu.samnyan.aqua.sega.diva.model.request.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class StartRequest extends BaseRequest { + public int pd_id; + public int accept_idx; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/BaseResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/BaseResponse.java new file mode 100644 index 0000000..0920ffe --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/BaseResponse.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.model.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class BaseResponse { + private String cmd; + private String req_id; + private String stat; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/AttendResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/AttendResponse.java new file mode 100644 index 0000000..bad9fd5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/AttendResponse.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.diva.model.response.boot; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class AttendResponse extends BaseResponse { + private String atnd_prm1; + private String atnd_prm2; + private String atnd_prm3; + private LocalDateTime atnd_lut; + + public AttendResponse(String cmd, String req_id, String stat, String atnd_prm1, String atnd_prm2, String atnd_prm3, LocalDateTime atnd_lut) { + super(cmd, req_id, stat); + this.atnd_prm1 = atnd_prm1; + this.atnd_prm2 = atnd_prm2; + this.atnd_prm3 = atnd_prm3; + this.atnd_lut = atnd_lut; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/GameInitResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/GameInitResponse.java new file mode 100644 index 0000000..5674396 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/boot/GameInitResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.boot; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class GameInitResponse extends BaseResponse { + private String db_close; + private String retry_time; + + public GameInitResponse(String cmd, String req_id, String stat, String db_close, String retry_time) { + super(cmd, req_id, stat); + this.db_close = db_close; + this.retry_time = retry_time; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/CardProcedureResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/CardProcedureResponse.java new file mode 100644 index 0000000..b04c7bb --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/CardProcedureResponse.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.diva.model.response.card; + +import icu.samnyan.aqua.sega.diva.model.common.PassStat; +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class CardProcedureResponse extends BaseResponse { + private Result cd_adm_result; + private int chg_name_price = 100; + private int accept_idx; + private int pd_id; + private String player_name; + private Integer lv_num; + private Integer lv_pnt; + private String lv_str; + private Integer lv_efct_id; + private Integer lv_plt_id; + private Integer vcld_pts; + private PassStat passwd_stat; + + public CardProcedureResponse(String cmd, String req_id, String stat, Result cd_adm_result, int chg_name_price, int accept_idx, int pd_id, String player_name, Integer lv_num, Integer lv_pnt, String lv_str, Integer lv_efct_id, Integer lv_plt_id, Integer vcld_pts, PassStat passwd_stat) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + this.chg_name_price = chg_name_price; + this.accept_idx = accept_idx; + this.pd_id = pd_id; + this.player_name = player_name; + this.lv_num = lv_num; + this.lv_pnt = lv_pnt; + this.lv_str = lv_str; + this.lv_efct_id = lv_efct_id; + this.lv_plt_id = lv_plt_id; + this.vcld_pts = vcld_pts; + this.passwd_stat = passwd_stat; + } + + public CardProcedureResponse(String cmd, String req_id, String stat, Result cd_adm_result) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangeNameResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangeNameResponse.java new file mode 100644 index 0000000..1f560ad --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangeNameResponse.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.sega.diva.model.response.card; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ChangeNameResponse extends BaseResponse { + private Result cd_adm_result; + private int accept_idx; + private int pd_id; + private String player_name; + + public ChangeNameResponse(String cmd, String req_id, String stat, Result cd_adm_result, int accept_idx, int pd_id, String player_name) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + this.accept_idx = accept_idx; + this.pd_id = pd_id; + this.player_name = player_name; + } + + public ChangeNameResponse(String cmd, String req_id, String stat, Result cd_adm_result) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangePasswdResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangePasswdResponse.java new file mode 100644 index 0000000..58913a9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/ChangePasswdResponse.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.sega.diva.model.response.card; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ChangePasswdResponse extends BaseResponse { + private Result cd_adm_result; + private int accept_idx; + private int pd_id; + + public ChangePasswdResponse(String cmd, String req_id, String stat, Result cd_adm_result, int accept_idx, int pd_id) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + this.accept_idx = accept_idx; + this.pd_id = pd_id; + } + + public ChangePasswdResponse(String cmd, String req_id, String stat, Result cd_adm_result) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/RegistrationResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/RegistrationResponse.java new file mode 100644 index 0000000..446a2b2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/card/RegistrationResponse.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.diva.model.response.card; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class RegistrationResponse extends BaseResponse { + private Result cd_adm_result; + private int pd_id; + + public RegistrationResponse(String cmd, String req_id, String stat, Result cd_adm_result, int pd_id) { + super(cmd, req_id, stat); + this.cd_adm_result = cd_adm_result; + this.pd_id = pd_id; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerDataResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerDataResponse.java new file mode 100644 index 0000000..103e802 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerDataResponse.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class BannerDataResponse extends BaseResponse { + private LocalDateTime bd_ut; + private String bd_ti; + private String bd_hs; + private int bd_id; + + public BannerDataResponse(String cmd, String req_id, String stat, LocalDateTime bd_ut, String bd_ti, String bd_hs, int bd_id) { + super(cmd, req_id, stat); + this.bd_ut = bd_ut; + this.bd_ti = bd_ti; + this.bd_hs = bd_hs; + this.bd_id = bd_id; + } +} + diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerInfoResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerInfoResponse.java new file mode 100644 index 0000000..091aa7d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/BannerInfoResponse.java @@ -0,0 +1,28 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class BannerInfoResponse extends BaseResponse { + private String bi_lut; + // Array of 10 + private String bi_id; + private String bi_st; + private String bi_et; + private String bi_ut; + + public BannerInfoResponse(String cmd, String req_id, String stat, String bi_lut, String bi_id, String bi_st, String bi_et, String bi_ut) { + super(cmd, req_id, stat); + this.bi_lut = bi_lut; + this.bi_id = bi_id; + this.bi_st = bi_st; + this.bi_et = bi_et; + this.bi_ut = bi_ut; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ContestInfoResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ContestInfoResponse.java new file mode 100644 index 0000000..4c6731f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ContestInfoResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ContestInfoResponse extends BaseResponse { + private LocalDateTime ci_lut; + private String ci_str; + + public ContestInfoResponse(String cmd, String req_id, String stat, LocalDateTime ci_lut, String ci_str) { + super(cmd, req_id, stat); + this.ci_lut = ci_lut; + this.ci_str = ci_str; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmCtlgResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmCtlgResponse.java new file mode 100644 index 0000000..36296b8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmCtlgResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class CstmzItmCtlgResponse extends BaseResponse { + private String cstmz_itm_ctlg_lut; + private String cstmz_itm_ctlg; + + public CstmzItmCtlgResponse(String cmd, String req_id, String stat, String cstmz_itm_ctlg_lut, String cstmz_itm_ctlg) { + super(cmd, req_id, stat); + this.cstmz_itm_ctlg_lut = cstmz_itm_ctlg_lut; + this.cstmz_itm_ctlg = cstmz_itm_ctlg; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmNgMdlListResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmNgMdlListResponse.java new file mode 100644 index 0000000..2bd4b5f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/CstmzItmNgMdlListResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class CstmzItmNgMdlListResponse extends BaseResponse { + private String cinml_lut; + private String cinm_lst; + + public CstmzItmNgMdlListResponse(String cmd, String req_id, String stat, String cinml_lut, String cinm_lst) { + super(cmd, req_id, stat); + this.cinml_lut = cinml_lut; + this.cinm_lst = cinm_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/FestaInfoResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/FestaInfoResponse.java new file mode 100644 index 0000000..86c29e1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/FestaInfoResponse.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class FestaInfoResponse extends BaseResponse { + private String fi_id; + private String fi_name; + private String fi_kind; + private String fi_difficulty; + private String fi_pv_id_lst; + private String fi_attr; + private String fi_add_vp; + private String fi_mul_vp; + private String fi_st; + private String fi_et; + private String fi_lut; + + public FestaInfoResponse(String cmd, String req_id, String stat, String fi_id, String fi_name, String fi_kind, String fi_difficulty, String fi_pv_id_lst, String fi_attr, String fi_add_vp, String fi_mul_vp, String fi_st, String fi_et, String fi_lut) { + super(cmd, req_id, stat); + this.fi_id = fi_id; + this.fi_name = fi_name; + this.fi_kind = fi_kind; + this.fi_difficulty = fi_difficulty; + this.fi_pv_id_lst = fi_pv_id_lst; + this.fi_attr = fi_attr; + this.fi_add_vp = fi_add_vp; + this.fi_mul_vp = fi_mul_vp; + this.fi_st = fi_st; + this.fi_et = fi_et; + this.fi_lut = fi_lut; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/NvRankingResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/NvRankingResponse.java new file mode 100644 index 0000000..fc3d9f8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/NvRankingResponse.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class NvRankingResponse extends BaseResponse { + private String rnk_nv_tag_str; + private LocalDateTime rnk_nv_ts; + private String rnk_nv_data; + private LocalDateTime rnk_nv_lut; + + public NvRankingResponse(String cmd, String req_id, String stat, String rnk_nv_tag_str, LocalDateTime rnk_nv_ts, String rnk_nv_data, LocalDateTime rnk_nv_lut) { + super(cmd, req_id, stat); + this.rnk_nv_tag_str = rnk_nv_tag_str; + this.rnk_nv_ts = rnk_nv_ts; + this.rnk_nv_data = rnk_nv_data; + this.rnk_nv_lut = rnk_nv_lut; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PsRankingResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PsRankingResponse.java new file mode 100644 index 0000000..b4784a0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PsRankingResponse.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PsRankingResponse extends BaseResponse { + private LocalDateTime rnk_ps_lut; + private LocalDateTime rnk_ps_ts; + private int rnk_ps_dffclty; + private String rnk_ps_pv_id; + private String rnk_ps_edtn1; + private String rnk_ps_edtn2; + private String rnk_ps_edtn3; + private String rnk_ps_scr1; + private String rnk_ps_scr2; + private String rnk_ps_scr3; + private String rnk_ps_nm1; + private String rnk_ps_nm2; + private String rnk_ps_nm3; + + public PsRankingResponse(String cmd, String req_id, String stat, LocalDateTime rnk_ps_lut, LocalDateTime rnk_ps_ts, int rnk_ps_dffclty, String rnk_ps_pv_id, String rnk_ps_edtn1, String rnk_ps_edtn2, String rnk_ps_edtn3, String rnk_ps_scr1, String rnk_ps_scr2, String rnk_ps_scr3, String rnk_ps_nm1, String rnk_ps_nm2, String rnk_ps_nm3) { + super(cmd, req_id, stat); + this.rnk_ps_lut = rnk_ps_lut; + this.rnk_ps_ts = rnk_ps_ts; + this.rnk_ps_dffclty = rnk_ps_dffclty; + this.rnk_ps_pv_id = rnk_ps_pv_id; + this.rnk_ps_edtn1 = rnk_ps_edtn1; + this.rnk_ps_edtn2 = rnk_ps_edtn2; + this.rnk_ps_edtn3 = rnk_ps_edtn3; + this.rnk_ps_scr1 = rnk_ps_scr1; + this.rnk_ps_scr2 = rnk_ps_scr2; + this.rnk_ps_scr3 = rnk_ps_scr3; + this.rnk_ps_nm1 = rnk_ps_nm1; + this.rnk_ps_nm2 = rnk_ps_nm2; + this.rnk_ps_nm3 = rnk_ps_nm3; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdHCtrlResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdHCtrlResponse.java new file mode 100644 index 0000000..6106f49 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdHCtrlResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PstdHCtrlResponse extends BaseResponse { + private String p_std_hc_lut; + private String p_std_hc_str; + + public PstdHCtrlResponse(String cmd, String req_id, String stat, String p_std_hc_lut, String p_std_hc_str) { + super(cmd, req_id, stat); + this.p_std_hc_lut = p_std_hc_lut; + this.p_std_hc_str = p_std_hc_str; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdItemNgLstResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdItemNgLstResponse.java new file mode 100644 index 0000000..b09c5d6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PstdItemNgLstResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PstdItemNgLstResponse extends BaseResponse { + private String p_std_i_n_lut; + private String p_std_i_ie_n_lst; + private String p_std_i_se_n_lst; + + public PstdItemNgLstResponse(String cmd, String req_id, String stat, String p_std_i_n_lut, String p_std_i_ie_n_lst, String p_std_i_se_n_lst) { + super(cmd, req_id, stat); + this.p_std_i_n_lut = p_std_i_n_lut; + this.p_std_i_ie_n_lst = p_std_i_ie_n_lst; + this.p_std_i_se_n_lst = p_std_i_se_n_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvDefChrLstResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvDefChrLstResponse.java new file mode 100644 index 0000000..212efad --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvDefChrLstResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PvDefChrLstResponse extends BaseResponse { + private String pdcl_lut; + private String pdc_lst; + + public PvDefChrLstResponse(String cmd, String req_id, String stat, String pdcl_lut, String pdc_lst) { + super(cmd, req_id, stat); + this.pdcl_lut = pdcl_lut; + this.pdc_lst = pdc_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvListResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvListResponse.java new file mode 100644 index 0000000..18f6ca9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvListResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PvListResponse extends BaseResponse { + private LocalDateTime pvl_lut; + private String pv_lst; + + public PvListResponse(String cmd, String req_id, String stat, LocalDateTime pvl_lut, String pv_lst) { + super(cmd, req_id, stat); + this.pvl_lut = pvl_lut; + this.pv_lst = pv_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvNgMdlLstResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvNgMdlLstResponse.java new file mode 100644 index 0000000..23884e5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/PvNgMdlLstResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PvNgMdlLstResponse extends BaseResponse { + private String pnml_lut; + private String pnm_lst; + + public PvNgMdlLstResponse(String cmd, String req_id, String stat, String pnml_lut, String pnm_lst) { + super(cmd, req_id, stat); + this.pnml_lut = pnml_lut; + this.pnm_lst = pnm_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/QstInfResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/QstInfResponse.java new file mode 100644 index 0000000..9b86d81 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/QstInfResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class QstInfResponse extends BaseResponse { + private String qi_lut; + private String qhi_str; + private String qrai_str; + + public QstInfResponse(String cmd, String req_id, String stat, String qi_lut, String qhi_str, String qrai_str) { + super(cmd, req_id, stat); + this.qi_lut = qi_lut; + this.qhi_str = qhi_str; + this.qrai_str = qrai_str; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/RmtWpLstResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/RmtWpLstResponse.java new file mode 100644 index 0000000..ef1c03a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/RmtWpLstResponse.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class RmtWpLstResponse extends BaseResponse { + private String rwl_lut; + private String rw_lst; + + public RmtWpLstResponse(String cmd, String req_id, String stat, String rwl_lut, String rw_lst) { + super(cmd, req_id, stat); + this.rwl_lut = rwl_lut; + this.rw_lst = rw_lst; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ShopCatalogResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ShopCatalogResponse.java new file mode 100644 index 0000000..697ea64 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/databank/ShopCatalogResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.databank; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ShopCatalogResponse extends BaseResponse { + private LocalDateTime shp_ctlg_lut; + private String shp_ctlg; + + public ShopCatalogResponse(String cmd, String req_id, String stat, LocalDateTime shp_ctlg_lut, String shp_ctlg) { + super(cmd, req_id, stat); + this.shp_ctlg_lut = shp_ctlg_lut; + this.shp_ctlg = shp_ctlg; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyCstmzItmResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyCstmzItmResponse.java new file mode 100644 index 0000000..4a3784f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyCstmzItmResponse.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.sega.diva.model.response.ingame; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class BuyCstmzItmResponse extends BaseResponse { + private Result shp_rslt; + private int cstmz_itm_id; + private String cstmz_itm_have; + private int vcld_pts; + + public BuyCstmzItmResponse(String cmd, String req_id, String stat, Result shp_rslt, int cstmz_itm_id, String cstmz_itm_have, int vcld_pts) { + super(cmd, req_id, stat); + this.shp_rslt = shp_rslt; + this.cstmz_itm_id = cstmz_itm_id; + this.cstmz_itm_have = cstmz_itm_have; + this.vcld_pts = vcld_pts; + } + + public BuyCstmzItmResponse(String cmd, String req_id, String stat, Result shp_rslt) { + super(cmd, req_id, stat); + this.shp_rslt = shp_rslt; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyModuleResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyModuleResponse.java new file mode 100644 index 0000000..19a1907 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/BuyModuleResponse.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.sega.diva.model.response.ingame; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class BuyModuleResponse extends BaseResponse { + private Result shp_rslt; + private int mdl_id; + private String mdl_have; + private int vcld_pts; + + public BuyModuleResponse(String cmd, String req_id, String stat, Result shp_rslt, int mdl_id, String mdl_have, int vcld_pts) { + super(cmd, req_id, stat); + this.shp_rslt = shp_rslt; + this.mdl_id = mdl_id; + this.mdl_have = mdl_have; + this.vcld_pts = vcld_pts; + } + + public BuyModuleResponse(String cmd, String req_id, String stat, Result shp_rslt) { + super(cmd, req_id, stat); + this.shp_rslt = shp_rslt; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/GetPvPdResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/GetPvPdResponse.java new file mode 100644 index 0000000..96f3ae5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/GetPvPdResponse.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.diva.model.response.ingame; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class GetPvPdResponse extends BaseResponse { + private String pd_by_pv_id; + private Boolean pdddt_flg; + private String pdddt_tm; + + public GetPvPdResponse(String cmd, String req_id, String stat, String pd_by_pv_id, Boolean pdddt_flg, String pdddt_tm) { + super(cmd, req_id, stat); + this.pd_by_pv_id = pd_by_pv_id; + this.pdddt_flg = pdddt_flg; + this.pdddt_tm = pdddt_tm; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/ShopExitResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/ShopExitResponse.java new file mode 100644 index 0000000..5ffa93f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/ShopExitResponse.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.model.response.ingame; + +import icu.samnyan.aqua.sega.diva.model.common.Result; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class ShopExitResponse extends BaseResponse { + private Result shp_rslt; + + public ShopExitResponse(String cmd, String req_id, String stat, Result shp_rslt) { + super(cmd, req_id, stat); + this.shp_rslt = shp_rslt; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/StageResultResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/StageResultResponse.java new file mode 100644 index 0000000..fa11d15 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/ingame/StageResultResponse.java @@ -0,0 +1,104 @@ +package icu.samnyan.aqua.sega.diva.model.response.ingame; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class StageResultResponse extends BaseResponse { + + private int chllng_kind; + private int lv_num_old; + private int lv_pnt_old; + private int lv_num; + private int lv_pnt; + private String lv_str; + private int lv_efct_id; + private int lv_plt_id; + private int vcld_pts; + private int prsnt_vcld_pts; + private int cnp_cid; + private int cnp_val; + private String cnp_sp; + // private int crwd_kind = -1; +// private String crwd_value = "-1,-1,-1"; +// private String crwd_str_0 = "N/A"; +// private String crwd_str_1 = "N/A"; +// private int cerwd_kind = -1; +// private int cerwd_value = -1; +// private String cerwd_str_0 = "N/A"; +// private String cerwd_str_1 = "N/A"; + private String ttl_str_ary = "xxx"; + private String ttl_plt_id_ary = "-1,-1,-1,-1,-1"; + private String ttl_desc_ary = "xxx"; + private String skin_id_ary = "xxx"; + private String skin_name_ary = "xxx"; + private String skin_illust_ary = "xxx"; + private String skin_desc_ary = "xxx"; + private int pdddt_flg = 0; + private LocalDateTime pdddt_tm; + private int nblss_ltt_stts = -1; + private int nblss_ltt_tckt = -1; + private int nblss_ltt_is_opn = 0; + private int nblss_ltt_prz = 0; + private int nblss_ltt_nxt_stts = 0; + private int nblss_ltt_nxt_tckt = -1; + private String my_qst_id; + private String my_qst_r_qid; + private String my_qst_r_knd; + private String my_qst_r_vl; + private String my_qst_r_nflg; + private String my_ccd_r_qid; + private String my_ccd_r_hnd; + private String my_ccd_r_vp; + + public StageResultResponse(String cmd, String req_id, String stat) { + super(cmd, req_id, stat); + } + + public StageResultResponse(String cmd, String req_id, String stat, int chllng_kind, int lv_num_old, int lv_pnt_old, int lv_num, int lv_pnt, String lv_str, int lv_efct_id, int lv_plt_id, int vcld_pts, int prsnt_vcld_pts, int cnp_cid, int cnp_val, String cnp_sp, String ttl_str_ary, String ttl_plt_id_ary, String ttl_desc_ary, String skin_id_ary, String skin_name_ary, String skin_illust_ary, String skin_desc_ary, int pdddt_flg, LocalDateTime pdddt_tm, int nblss_ltt_stts, int nblss_ltt_tckt, int nblss_ltt_is_opn, int nblss_ltt_prz, int nblss_ltt_nxt_stts, int nblss_ltt_nxt_tckt, String my_qst_id, String my_qst_r_qid, String my_qst_r_knd, String my_qst_r_vl, String my_qst_r_nflg, String my_ccd_r_qid, String my_ccd_r_hnd, String my_ccd_r_vp) { + super(cmd, req_id, stat); + this.chllng_kind = chllng_kind; + this.lv_num_old = lv_num_old; + this.lv_pnt_old = lv_pnt_old; + this.lv_num = lv_num; + this.lv_pnt = lv_pnt; + this.lv_str = lv_str; + this.lv_efct_id = lv_efct_id; + this.lv_plt_id = lv_plt_id; + this.vcld_pts = vcld_pts; + this.prsnt_vcld_pts = prsnt_vcld_pts; + this.cnp_cid = cnp_cid; + this.cnp_val = cnp_val; + this.cnp_sp = cnp_sp; + this.ttl_str_ary = ttl_str_ary; + this.ttl_plt_id_ary = ttl_plt_id_ary; + this.ttl_desc_ary = ttl_desc_ary; + this.skin_id_ary = skin_id_ary; + this.skin_name_ary = skin_name_ary; + this.skin_illust_ary = skin_illust_ary; + this.skin_desc_ary = skin_desc_ary; + this.pdddt_flg = pdddt_flg; + this.pdddt_tm = pdddt_tm; + this.nblss_ltt_stts = nblss_ltt_stts; + this.nblss_ltt_tckt = nblss_ltt_tckt; + this.nblss_ltt_is_opn = nblss_ltt_is_opn; + this.nblss_ltt_prz = nblss_ltt_prz; + this.nblss_ltt_nxt_stts = nblss_ltt_nxt_stts; + this.nblss_ltt_nxt_tckt = nblss_ltt_nxt_tckt; + this.my_qst_id = my_qst_id; + this.my_qst_r_qid = my_qst_r_qid; + this.my_qst_r_knd = my_qst_r_knd; + this.my_qst_r_vl = my_qst_r_vl; + this.my_qst_r_nflg = my_qst_r_nflg; + this.my_ccd_r_qid = my_ccd_r_qid; + this.my_ccd_r_hnd = my_ccd_r_hnd; + this.my_ccd_r_vp = my_ccd_r_vp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/operation/PingResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/operation/PingResponse.java new file mode 100644 index 0000000..5584506 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/operation/PingResponse.java @@ -0,0 +1,56 @@ +package icu.samnyan.aqua.sega.diva.model.response.operation; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import icu.samnyan.aqua.sega.util.URIEncoder; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PingResponse extends BaseResponse { + private String ping_b_msg = URIEncoder.encode("Server testing No other news"); + private String ping_m_msg = URIEncoder.encode("Nothing special Server testing No other news"); + private String atnd_lut; + private String fi_lut; + private String ci_lut; + private String qi_lut; + private String pvl_lut; + private String pdcl_lut; + private String pnml_lut; + private String cinml_lut; + private String rwl_lut; + private String bdlol_lut; + private String shp_ctlg_lut; + private String cstmz_itm_ctlg_lut; + private String ngwl_lut; + private String rnk_nv_lut; + private String rnk_ps_lut; + private String bi_lut; + private String cpi_lut; + private String p_std_hc_lut; + private String p_std_i_n_lut; + + private String req_inv_cmd_num; + private String req_inv_cmd_prm1; + private String req_inv_cmd_prm2; + private String req_inv_cmd_prm3; + private String req_inv_cmd_prm4; + + private boolean pow_save_flg = false; + + private Integer nblss_dnt_p = 0; + private Integer nblss_ltt_rl_vp = 0; + private Integer nblss_ex_ltt_flg = 0; + + private String nblss_dnt_st_tm; + private String nblss_dnt_ed_tm; + private String nblss_ltt_st_tm; + private String nblss_ltt_ed_tm; + + public PingResponse(String cmd, String req_id, String stat) { + super(cmd, req_id, stat); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/PreStartResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/PreStartResponse.java new file mode 100644 index 0000000..7202fb5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/PreStartResponse.java @@ -0,0 +1,73 @@ +package icu.samnyan.aqua.sega.diva.model.response.user; + +import icu.samnyan.aqua.sega.diva.model.common.PassStat; +import icu.samnyan.aqua.sega.diva.model.common.PreStartResult; +import icu.samnyan.aqua.sega.diva.model.common.SortMode; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class PreStartResponse extends BaseResponse { + + private PreStartResult ps_result; + private Integer accept_idx; + private Integer nblss_ltt_stts; + private Integer nblss_ltt_tckt; + private Integer nblss_ltt_is_opn; + + private Integer pd_id; + private String player_name; + private SortMode sort_kind; + private Integer lv_num; + private Integer lv_pnt; + private String lv_str; + private Integer lv_efct_id; + private Integer lv_plt_id; + private String mdl_eqp_ary; + private LocalDateTime mdl_eqp_tm; + private Integer skn_eqp; + private Integer btn_se_eqp; + private Integer sld_se_eqp; + private Integer chn_sld_se_eqp; + private Integer sldr_tch_se_eqp; + private Integer vcld_pts; + private PassStat passwd_stat; + + public PreStartResponse(String cmd, String req_id, String stat, PreStartResult ps_result) { + super(cmd, req_id, stat); + this.ps_result = ps_result; + } + + public PreStartResponse(String cmd, String req_id, String stat, PreStartResult ps_result, Integer accept_idx, Integer pd_id, String player_name, SortMode sort_kind, Integer lv_num, Integer lv_pnt, String lv_str, Integer lv_efct_id, Integer lv_plt_id, String mdl_eqp_ary, LocalDateTime mdl_eqp_tm, Integer skn_eqp, Integer btn_se_eqp, Integer sld_se_eqp, Integer chn_sld_se_eqp, Integer sldr_tch_se_eqp, Integer vcld_pts, PassStat passwd_stat) { + super(cmd, req_id, stat); + this.ps_result = ps_result; + this.accept_idx = accept_idx; + this.nblss_ltt_stts = -1; + this.nblss_ltt_tckt = -1; + this.nblss_ltt_is_opn = -1; + this.pd_id = pd_id; + this.player_name = player_name; + this.sort_kind = sort_kind; + this.lv_num = lv_num; + this.lv_pnt = lv_pnt; + this.lv_str = lv_str; + this.lv_efct_id = lv_efct_id; + this.lv_plt_id = lv_plt_id; + this.mdl_eqp_ary = mdl_eqp_ary; + this.mdl_eqp_tm = mdl_eqp_tm; + this.skn_eqp = skn_eqp; + this.btn_se_eqp = btn_se_eqp; + this.sld_se_eqp = sld_se_eqp; + this.chn_sld_se_eqp = chn_sld_se_eqp; + this.sldr_tch_se_eqp = sldr_tch_se_eqp; + this.vcld_pts = vcld_pts; + this.passwd_stat = passwd_stat; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/SpendCreditResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/SpendCreditResponse.java new file mode 100644 index 0000000..5bc3b04 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/SpendCreditResponse.java @@ -0,0 +1,29 @@ +package icu.samnyan.aqua.sega.diva.model.response.user; + +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class SpendCreditResponse extends BaseResponse { + private String cmpgn_rslt; + private int cmpgn_rslt_num; + private int vcld_pts; + private String lv_str; + private int lv_efct_id; + private int lv_plt_id; + + public SpendCreditResponse(String cmd, String req_id, String stat, String cmpgn_rslt, int cmpgn_rslt_num, int vcld_pts, String lv_str, int lv_efct_id, int lv_plt_id) { + super(cmd, req_id, stat); + this.cmpgn_rslt = cmpgn_rslt; + this.cmpgn_rslt_num = cmpgn_rslt_num; + this.vcld_pts = vcld_pts; + this.lv_str = lv_str; + this.lv_efct_id = lv_efct_id; + this.lv_plt_id = lv_plt_id; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/StartResponse.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/StartResponse.java new file mode 100644 index 0000000..b605433 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/response/user/StartResponse.java @@ -0,0 +1,148 @@ +package icu.samnyan.aqua.sega.diva.model.response.user; + +import icu.samnyan.aqua.sega.diva.model.common.*; +import icu.samnyan.aqua.sega.diva.model.response.BaseResponse; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +import static icu.samnyan.aqua.sega.diva.model.common.Const.ALL_HAVE; +import static icu.samnyan.aqua.sega.diva.model.common.Const.ALL_NOT_HAVE; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Getter +@Setter +public class StartResponse extends BaseResponse { + + private int pd_id; + private Result start_result = Result.SUCCESS; + private int accept_idx; + private int start_idx; + private String player_name; + private int hp_vol = 100; + private boolean btn_se_vol = true; + private int btn_se_vol2 = 100; + private int sldr_se_vol2 = 10; + private SortMode sort_kind = SortMode.RELEASE_DATE; + private int lv_num; + private int lv_pnt; + private String lv_str; + private int lv_efct_id; + private int lv_plt_id; + private String mdl_eqp_ary; + private String c_itm_eqp_ary; + private String ms_itm_flg_ary; + private LocalDateTime mdl_eqp_tm = LocalDateTime.now(); + private String mdl_have = ALL_HAVE; + private String cstmz_itm_have = ALL_HAVE; + private boolean use_pv_mdl_eqp = false; + private boolean use_mdl_pri = false; + private boolean use_pv_skn_eqp = false; + private boolean use_pv_btn_se_eqp = false; + private boolean use_pv_sld_se_eqp = false; + private boolean use_pv_chn_sld_se_eqp = false; + private boolean use_pv_sldr_tch_se_eqp = false; + private int vcld_pts = 300; + private int nxt_pv_id = -1; + private Difficulty nxt_dffclty = Difficulty.NORMAL; + private Edition nxt_edtn = Edition.ORIGINAL; + + // Contest play history, array of 4 + private String cv_cid; + private String cv_sc; + private String cv_rr; + private String cv_bv; + private String cv_bf; + + // Contest now playing id, return -1 if no current playing contest + private int cnp_cid = -1; + private int cnp_val = 0; + private ContestBorder cnp_rr = ContestBorder.NONE; + private String cnp_sp = ""; + + private String my_lst_0; + private String my_lst_1; + private String my_lst_2; + private String my_lst_3; // Unused + private String my_lst_4; // Unused + + private boolean dsp_clr_brdr; + private boolean dsp_intrm_rnk; + private boolean dsp_clr_sts; + + private String clr_sts; + + private boolean rgo_sts; + + private String my_qst_id; + private String my_qst_sts; + private String my_qst_prgrs; + private String my_qst_et; + + private String p_std_ie_have = ALL_NOT_HAVE; + private String p_std_se_have = ALL_NOT_HAVE; + + public StartResponse(String cmd, String req_id, String stat, int pd_id, Result start_result, int accept_idx, int start_idx, String player_name, int hp_vol, boolean btn_se_vol, int btn_se_vol2, int sldr_se_vol2, SortMode sort_kind, int lv_num, int lv_pnt, String lv_str, int lv_efct_id, int lv_plt_id, String mdl_eqp_ary, String c_itm_eqp_ary, String ms_itm_flg_ary, LocalDateTime mdl_eqp_tm, String mdl_have, String cstmz_itm_have, boolean use_pv_mdl_eqp, boolean use_mdl_pri, boolean use_pv_skn_eqp, boolean use_pv_btn_se_eqp, boolean use_pv_sld_se_eqp, boolean use_pv_chn_sld_se_eqp, boolean use_pv_sldr_tch_se_eqp, int vcld_pts, int nxt_pv_id, Difficulty nxt_dffclty, Edition nxt_edtn, String cv_cid, String cv_sc, String cv_rr, String cv_bv, String cv_bf, int cnp_cid, int cnp_val, ContestBorder cnp_rr, String cnp_sp, String my_lst_0, String my_lst_1, String my_lst_2, String my_lst_3, String my_lst_4, boolean dsp_clr_brdr, boolean dsp_intrm_rnk, boolean dsp_clr_sts, String clr_sts, boolean rgo_sts, String my_qst_id, String my_qst_sts, String my_qst_prgrs, String my_qst_et, String p_std_ie_have, String p_std_se_have) { + super(cmd, req_id, stat); + this.pd_id = pd_id; + this.start_result = start_result; + this.accept_idx = accept_idx; + this.start_idx = start_idx; + this.player_name = player_name; + this.hp_vol = hp_vol; + this.btn_se_vol = btn_se_vol; + this.btn_se_vol2 = btn_se_vol2; + this.sldr_se_vol2 = sldr_se_vol2; + this.sort_kind = sort_kind; + this.lv_num = lv_num; + this.lv_pnt = lv_pnt; + this.lv_str = lv_str; + this.lv_efct_id = lv_efct_id; + this.lv_plt_id = lv_plt_id; + this.mdl_eqp_ary = mdl_eqp_ary; + this.c_itm_eqp_ary = c_itm_eqp_ary; + this.ms_itm_flg_ary = ms_itm_flg_ary; + this.mdl_eqp_tm = mdl_eqp_tm; + this.mdl_have = mdl_have; + this.cstmz_itm_have = cstmz_itm_have; + this.use_pv_mdl_eqp = use_pv_mdl_eqp; + this.use_mdl_pri = use_mdl_pri; + this.use_pv_skn_eqp = use_pv_skn_eqp; + this.use_pv_btn_se_eqp = use_pv_btn_se_eqp; + this.use_pv_sld_se_eqp = use_pv_sld_se_eqp; + this.use_pv_chn_sld_se_eqp = use_pv_chn_sld_se_eqp; + this.use_pv_sldr_tch_se_eqp = use_pv_sldr_tch_se_eqp; + this.vcld_pts = vcld_pts; + this.nxt_pv_id = nxt_pv_id; + this.nxt_dffclty = nxt_dffclty; + this.nxt_edtn = nxt_edtn; + this.cv_cid = cv_cid; + this.cv_sc = cv_sc; + this.cv_rr = cv_rr; + this.cv_bv = cv_bv; + this.cv_bf = cv_bf; + this.cnp_cid = cnp_cid; + this.cnp_val = cnp_val; + this.cnp_rr = cnp_rr; + this.cnp_sp = cnp_sp; + this.my_lst_0 = my_lst_0; + this.my_lst_1 = my_lst_1; + this.my_lst_2 = my_lst_2; + this.my_lst_3 = my_lst_3; + this.my_lst_4 = my_lst_4; + this.dsp_clr_brdr = dsp_clr_brdr; + this.dsp_intrm_rnk = dsp_intrm_rnk; + this.dsp_clr_sts = dsp_clr_sts; + this.clr_sts = clr_sts; + this.rgo_sts = rgo_sts; + this.my_qst_id = my_qst_id; + this.my_qst_sts = my_qst_sts; + this.my_qst_prgrs = my_qst_prgrs; + this.my_qst_et = my_qst_et; + this.p_std_ie_have = p_std_ie_have; + this.p_std_se_have = p_std_se_have; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/GameSession.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/GameSession.java new file mode 100644 index 0000000..e182e6b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/GameSession.java @@ -0,0 +1,71 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.StartMode; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaGameSession") +@Table(name = "diva_game_session") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GameSession implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + private int acceptId; + + @OneToOne + @JoinColumn(name = "pd_id", unique = true) + private PlayerProfile pdId; + + @Enumerated(EnumType.STRING) + private StartMode startMode; + + private LocalDateTime startTime; + + private LocalDateTime lastUpdateTime; + + private Integer stageIndex; + + private Integer lastPvId; + + private Integer levelNumber; + + private Integer levelExp; + + private Integer oldLevelNumber; + + private Integer oldLevelExp; + + private Integer vp; + + public GameSession(int acceptId, PlayerProfile pdId, StartMode startMode, LocalDateTime startTime, LocalDateTime lastUpdateTime, Integer stageIndex, Integer lastPvId, Integer levelNumber, Integer levelExp, Integer oldLevelNumber, Integer oldLevelExp, Integer vp) { + this.acceptId = acceptId; + this.pdId = pdId; + this.startMode = startMode; + this.startTime = startTime; + this.lastUpdateTime = lastUpdateTime; + this.stageIndex = stageIndex; + this.lastPvId = lastPvId; + this.levelNumber = levelNumber; + this.levelExp = levelExp; + this.oldLevelNumber = oldLevelNumber; + this.oldLevelExp = oldLevelExp; + this.vp = vp; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayLog.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayLog.java new file mode 100644 index 0000000..f723819 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayLog.java @@ -0,0 +1,157 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.ChallengeKind; +import icu.samnyan.aqua.sega.diva.model.common.ClearResult; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayLog") +@Table(name = "diva_play_log") +@Data +public class PlayLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + @JsonIgnore + private PlayerProfile pdId; + + private int pvId; + + @Enumerated(EnumType.STRING) + private Difficulty difficulty; + + @Enumerated(EnumType.STRING) + private Edition edition; + + private int scriptVer; + + private int score; + + @Enumerated(EnumType.STRING) + private ChallengeKind challengeKind; + + private int challengeResult; + + @Enumerated(EnumType.STRING) + private ClearResult clearResult; + + private int vp; + + private int coolCount; + + private int coolPercent; + + private int fineCount; + + private int finePercent; + + private int safeCount; + + private int safePercent; + + private int sadCount; + + private int sadPercent; + + private int wrongCount; + + private int wrongPercent; + + private int maxCombo; + + private int chanceTime; + + private int holdScore; + + private int attainPoint; + + private int skinId; + + private int buttonSe; + + private int buttonSeVol; + + private int sliderSe; + + private int ChainSlideSe; + + private int SliderTouchSe; + + private String modules; + + private int stageCompletion; + + private int slideScore; + + private int isVocalChange; + + private String customizeItems; + +// private String customizeItemFlags; + + private String rhythmGameOptions; + + private int screenShotCount = -1; + + private LocalDateTime dateTime; + + public PlayLog() { + } + + public PlayLog(PlayerProfile pdId, int pvId, Difficulty difficulty, Edition edition, int scriptVer, int score, ChallengeKind challengeKind, int challengeResult, ClearResult clearResult, int vp, int coolCount, int coolPercent, int fineCount, int finePercent, int safeCount, int safePercent, int sadCount, int sadPercent, int wrongCount, int wrongPercent, int maxCombo, int chanceTime, int holdScore, int attainPoint, int skinId, int buttonSe, int buttonSeVol, int sliderSe, int chainSlideSe, int sliderTouchSe, String modules, int stageCompletion, int slideScore, int isVocalChange, String customizeItems, String rhythmGameOptions, int screenShotCount, LocalDateTime dateTime) { + this.pdId = pdId; + this.pvId = pvId; + this.difficulty = difficulty; + this.edition = edition; + this.scriptVer = scriptVer; + this.score = score; + this.challengeKind = challengeKind; + this.challengeResult = challengeResult; + this.clearResult = clearResult; + this.vp = vp; + this.coolCount = coolCount; + this.coolPercent = coolPercent; + this.fineCount = fineCount; + this.finePercent = finePercent; + this.safeCount = safeCount; + this.safePercent = safePercent; + this.sadCount = sadCount; + this.sadPercent = sadPercent; + this.wrongCount = wrongCount; + this.wrongPercent = wrongPercent; + this.maxCombo = maxCombo; + this.chanceTime = chanceTime; + this.holdScore = holdScore; + this.attainPoint = attainPoint; + this.skinId = skinId; + this.buttonSe = buttonSe; + this.buttonSeVol = buttonSeVol; + this.sliderSe = sliderSe; + ChainSlideSe = chainSlideSe; + SliderTouchSe = sliderTouchSe; + this.modules = modules; + this.stageCompletion = stageCompletion; + this.slideScore = slideScore; + this.isVocalChange = isVocalChange; + this.customizeItems = customizeItems; + this.rhythmGameOptions = rhythmGameOptions; + this.screenShotCount = screenShotCount; + this.dateTime = dateTime; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerContest.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerContest.java new file mode 100644 index 0000000..28af5f9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerContest.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.ContestBorder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerContest") +@Table(name = "diva_player_contest", uniqueConstraints = {@UniqueConstraint(columnNames = {"pd_id", "contest_id"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerContest implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + private PlayerProfile pdId; + + @Column(name = "contest_id") + private int contestId; + + private int startCount = 0; + + @Enumerated(EnumType.STRING) + private ContestBorder resultRank = ContestBorder.NONE; + + private int bestValue = -1; + + private int flag = -1; + + private LocalDateTime lastUpdateTime = LocalDateTime.now(); + + public PlayerContest(PlayerProfile pdId, int contestId) { + this.pdId = pdId; + this.contestId = contestId; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerCustomize.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerCustomize.java new file mode 100644 index 0000000..6cdf440 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerCustomize.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerCustomize") +@Table(name = "diva_player_customize", uniqueConstraints = {@UniqueConstraint(columnNames = {"pd_id", "customize_id"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerCustomize implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + private PlayerProfile pdId; + + @Column(name = "customize_id") + private int customizeId; + + public PlayerCustomize(PlayerProfile profile, int customizeId) { + this.pdId = profile; + this.customizeId = customizeId; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerModule.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerModule.java new file mode 100644 index 0000000..4500172 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerModule.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerModule") +@Table(name = "diva_player_module", uniqueConstraints = {@UniqueConstraint(columnNames = {"pd_id", "module_id"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerModule implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + private PlayerProfile pdId; + + @Column(name = "module_id") + private int moduleId; + + public PlayerModule(PlayerProfile profile, int moduleId) { + this.pdId = profile; + this.moduleId = moduleId; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java new file mode 100644 index 0000000..2273178 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java @@ -0,0 +1,159 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +import static icu.samnyan.aqua.sega.diva.util.DivaStringUtils.getDummyString; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerProfile") +@Table(name = "diva_player_profile") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerProfile implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @Column(unique = true) + private int pdId; + + private String playerName = "xxx"; + + private int vocaloidPoints = 300; + + private int level = 1; + + private int levelExp = 0; + + private String levelTitle = "xxx"; + + private int plateId = -1; + + private int plateEffectId = -1; + + @Enumerated(EnumType.STRING) + private PassStat passwordStatus = PassStat.MISS; + + @JsonIgnore + private String password = "**********"; + + /** + * Game play customize + */ + private boolean preferPerPvModule = true; + + private boolean preferCommonModule = false; + + private boolean usePerPvSkin = false; + + private boolean usePerPvButtonSe = false; + + private boolean usePerPvSliderSe = false; + + private boolean usePerPvChainSliderSe = false; + + private boolean usePerPvTouchSliderSe = false; + + private String commonModule = "-999,-999,-999"; + + private String commonCustomizeItems = "-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999"; + + private LocalDateTime commonModuleSetTime = LocalDateTime.now(); + + private String moduleSelectItemFlag = "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1"; + + // -1 is disable + private int commonSkin = -1; + + /** + * Sound Setting + */ + private int headphoneVolume = 100; + + private boolean buttonSeOn = true; + + private int buttonSeVolume = 100; + + private int sliderSeVolume = 100; + + private int buttonSe = -1; + + private int chainSlideSe = -1; + + private int slideSe = -1; + + private int sliderTouchSe = -1; + + /** + * View Setting + */ + @Enumerated(EnumType.STRING) + private SortMode sortMode = SortMode.RELEASE_DATE; + + @JsonIgnore + private int nextPvId = -1; + + @JsonIgnore + @Enumerated(EnumType.STRING) + private Difficulty nextDifficulty = Difficulty.NORMAL; + + @JsonIgnore + @Enumerated(EnumType.STRING) + private Edition nextEdition = Edition.ORIGINAL; + + private boolean showInterimRanking = true; + + private boolean showClearStatus = true; + + private boolean showClearBorder = true; + + private boolean showRgoSetting = true; + + @JsonIgnore + private boolean contestNowPlayingEnable = false; + + @JsonIgnore + private int contestNowPlayingId = -1; + + // Contest now playing progress + @JsonIgnore + private int contestNowPlayingValue = -1; + + @JsonIgnore + @Enumerated(EnumType.STRING) + private ContestBorder contestNowPlayingResultRank = ContestBorder.NONE; + + // This store the current progress of contest + @JsonIgnore + private String contestNowPlayingSpecifier = ""; + + + /** + * MyList, comma separate string + */ + private String myList0 = getDummyString("-1", 40); + + private String myList1 = getDummyString("-1", 40); + + private String myList2 = getDummyString("-1", 40); + + public PlayerProfile(int pdId, String playerName) { + this.pdId = pdId; + this.playerName = playerName; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvCustomize.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvCustomize.java new file mode 100644 index 0000000..2c06117 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvCustomize.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerPvCustomize") +@Table(name = "diva_player_pv_customize", uniqueConstraints = {@UniqueConstraint(columnNames = {"pd_id", "pv_id"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerPvCustomize implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + private PlayerProfile pdId; + + @Column(name = "pv_id") + private int pvId = -1; + + private String module = "-999,-999,-999"; + + private String customize = "-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999"; + + private String customizeFlag = "-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1"; + + private int skin = -1; + + private int buttonSe = -1; + + private int slideSe = -1; + + private int chainSlideSe = -1; + + private int sliderTouchSe = -1; + + public PlayerPvCustomize(PlayerProfile pdId, int pvId) { + this.pdId = pdId; + this.pvId = pvId; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvRecord.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvRecord.java new file mode 100644 index 0000000..7a2cdd7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerPvRecord.java @@ -0,0 +1,71 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import icu.samnyan.aqua.sega.diva.model.common.ChallengeKind; +import icu.samnyan.aqua.sega.diva.model.common.ClearResult; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerPvRecord") +@Table(name = "diva_player_pv_record", uniqueConstraints = {@UniqueConstraint(columnNames = {"pd_id", "pv_id", "edition", "difficulty"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlayerPvRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + @JsonIgnore + private PlayerProfile pdId; + + @Column(name = "pv_id") + private int pvId = -1; + + @Enumerated(EnumType.STRING) + private Edition edition = Edition.ORIGINAL; + + @Enumerated(EnumType.STRING) + private Difficulty difficulty = Difficulty.NORMAL; + + @Enumerated(EnumType.STRING) + private ClearResult result = ClearResult.NO_CLEAR; + + private int maxScore = -1; + + private int maxAttain = -1; + + @Enumerated(EnumType.STRING) + private ChallengeKind challengeKind = ChallengeKind.UNDEFINED; + + private String rgoPurchased = "0,0,0"; + + private String rgoPlayed = "0,0,0"; + + public PlayerPvRecord(int pvId, Edition edition) { + this.pvId = pvId; + this.edition = edition; + } + + public PlayerPvRecord(PlayerProfile pdId, int pvId, Edition edition, Difficulty difficulty) { + this.pdId = pdId; + this.pvId = pvId; + this.edition = edition; + this.difficulty = difficulty; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerScreenShot.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerScreenShot.java new file mode 100644 index 0000000..18ef35e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerScreenShot.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.diva.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "DivaPlayerScreenShot") +@Table(name = "diva_player_screen_shot") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PlayerScreenShot { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @ManyToOne + @JoinColumn(name = "pd_id") + private PlayerProfile pdId; + + private int pvId; + + private String fileName; + + private String moduleList; + + private String customizeList; + + public PlayerScreenShot(PlayerProfile pdId, String fileName, int pvId, String moduleList, String customizeList) { + this.pdId = pdId; + this.fileName = fileName; + this.pvId = pvId; + this.moduleList = moduleList; + this.customizeList = customizeList; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerCustomizeService.java b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerCustomizeService.java new file mode 100644 index 0000000..525bbd3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerCustomizeService.java @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.sega.diva.service; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerCustomizeRepository; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerCustomize; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.math.BigInteger; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class PlayerCustomizeService { + + private final PlayerCustomizeRepository playerCustomizeRepository; + + public PlayerCustomizeService(PlayerCustomizeRepository playerCustomizeRepository) { + this.playerCustomizeRepository = playerCustomizeRepository; + } + + public PlayerCustomize buy(PlayerProfile profile, int customizeId) { + return playerCustomizeRepository.save(new PlayerCustomize(profile, customizeId)); + } + + public String getModuleHaveString(PlayerProfile profile) { + List customizeList = playerCustomizeRepository.findByPdId(profile); + BigInteger customize_have = new BigInteger("0"); + for (PlayerCustomize customize : + customizeList) { + customize_have = customize_have.or(BigInteger.valueOf(1).shiftLeft(customize.getCustomizeId())); + } + return StringUtils.leftPad(customize_have.toString(16), 250, "0"); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerModuleService.java b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerModuleService.java new file mode 100644 index 0000000..e072481 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerModuleService.java @@ -0,0 +1,38 @@ +package icu.samnyan.aqua.sega.diva.service; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerModuleRepository; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerModule; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.math.BigInteger; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class PlayerModuleService { + + private final PlayerModuleRepository playerModuleRepository; + + public PlayerModuleService(PlayerModuleRepository playerModuleRepository) { + this.playerModuleRepository = playerModuleRepository; + } + + public PlayerModule buy(PlayerProfile profile, int moduleId) { + return playerModuleRepository.save(new PlayerModule(profile, moduleId)); + } + + public String getModuleHaveString(PlayerProfile profile) { + List moduleList = playerModuleRepository.findByPdId(profile); + BigInteger module_have = new BigInteger("0"); + for (PlayerModule module : + moduleList) { + module_have = module_have.or(BigInteger.valueOf(1).shiftLeft(module.getModuleId())); + } + System.out.println(module_have.toString(2)); + return StringUtils.leftPad(module_have.toString(16), 250, "0").toUpperCase(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerProfileService.java b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerProfileService.java new file mode 100644 index 0000000..1946214 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/service/PlayerProfileService.java @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.sega.diva.service; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerProfileRepository; +import icu.samnyan.aqua.sega.diva.model.request.card.RegistrationRequest; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class PlayerProfileService { + + private final PlayerProfileRepository playerProfileRepository; + + public PlayerProfileService(PlayerProfileRepository playerProfileRepository) { + this.playerProfileRepository = playerProfileRepository; + } + + public Optional findByPdId(int pdId) { + return playerProfileRepository.findByPdId(pdId); + } + + public PlayerProfile register(RegistrationRequest request) { + PlayerProfile profile = new PlayerProfile(); + profile.setPdId(request.getAime_id()); + profile.setPlayerName(request.getPlayer_name()); + + return playerProfileRepository.save(profile); + } + + public PlayerProfile save(PlayerProfile profile) { + return playerProfileRepository.save(profile); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaCalculator.java b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaCalculator.java new file mode 100644 index 0000000..86cddc8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaCalculator.java @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.sega.diva.util; + +import icu.samnyan.aqua.sega.diva.dao.userdata.PlayerPvRecordRepository; +import icu.samnyan.aqua.sega.diva.model.common.Edition; +import icu.samnyan.aqua.sega.diva.model.common.LevelInfo; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerProfile; +import icu.samnyan.aqua.sega.diva.model.userdata.PlayerPvRecord; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class DivaCalculator { + + private final PlayerPvRecordRepository playerPvRecordRepository; + + public DivaCalculator(PlayerPvRecordRepository playerPvRecordRepository) { + this.playerPvRecordRepository = playerPvRecordRepository; + } + + public LevelInfo getLevelInfo(PlayerProfile profile) { + List recordList = playerPvRecordRepository.findByPdIdAndEdition(profile, Edition.ORIGINAL); + int totalAttain = 0; + for (PlayerPvRecord record : + recordList) { + totalAttain += record.getMaxAttain(); + } + + int level = totalAttain / 13979; + int exp = Math.round((totalAttain % 13979) / 13979.0f * 100.0f); + + return new LevelInfo(level, exp); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeSerializer.java b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeSerializer.java new file mode 100644 index 0000000..a27d5dc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeSerializer.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.diva.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class DivaDateTimeSerializer extends StdSerializer { + + public DivaDateTimeSerializer() { + this(null); + } + + public DivaDateTimeSerializer(Class t) { + super(t); + } + + @Override + public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(DivaDateTimeUtil.getString(value)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeUtil.java b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeUtil.java new file mode 100644 index 0000000..6ae4ed5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaDateTimeUtil.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.diva.util; + +import icu.samnyan.aqua.sega.util.URIEncoder; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class DivaDateTimeUtil { + + public static String getString(LocalDateTime time) { + return URIEncoder.encode(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0").format(time)); + } + + public static String format(LocalDateTime time) { + return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0").format(time); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaMapper.java b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaMapper.java new file mode 100644 index 0000000..3a5ebae --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaMapper.java @@ -0,0 +1,56 @@ +package icu.samnyan.aqua.sega.diva.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import icu.samnyan.aqua.sega.util.jackson.BooleanNumberDeserializer; +import icu.samnyan.aqua.sega.util.jackson.BooleanNumberSerializer; +import icu.samnyan.aqua.sega.util.jackson.ZonedDateTimeDeserializer; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class DivaMapper { + private final ObjectMapper mapper; + + public DivaMapper() { + mapper = new ObjectMapper().configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + SimpleModule module = new SimpleModule(); + module.addSerializer(LocalDateTime.class, new DivaDateTimeSerializer()); + module.addSerializer(Boolean.class, new BooleanNumberSerializer()); + module.addSerializer(boolean.class, new BooleanNumberSerializer()); + module.addDeserializer(Boolean.class, new BooleanNumberDeserializer()); + module.addDeserializer(boolean.class, new BooleanNumberDeserializer()); + + module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0"))); + module.addDeserializer(ZonedDateTime.class, new ZonedDateTimeDeserializer()); + mapper.registerModule(module); + } + + public String write(Object o) throws JsonProcessingException { + return mapper.writeValueAsString(o); + + } + + public T convert(Map map, Class toClass) { + return mapper.convertValue(map, toClass); + } + + public LinkedHashMap toMap(Object object) { + return mapper.convertValue(object, new TypeReference<>() { + }); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaStringUtils.java b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaStringUtils.java new file mode 100644 index 0000000..0df6b01 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/diva/util/DivaStringUtils.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.diva.util; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class DivaStringUtils { + + public static String arrToCsv(int[] arr) { + StringBuilder sb = new StringBuilder(); + for (int i : + arr) { + sb.append(i).append(","); + } + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } + + public static String getDummyString(String content, int length) { + StringBuilder sb = new StringBuilder(); + sb.append((content + ",").repeat(length)); + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/general/dao/CardRepository.java b/src/main/java/icu/samnyan/aqua/sega/general/dao/CardRepository.java new file mode 100644 index 0000000..416d1c8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/general/dao/CardRepository.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.general.dao; + +import icu.samnyan.aqua.sega.general.model.Card; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("SegaCardRepository") +public interface CardRepository extends JpaRepository { + + Optional findByExtId(long extId); + + Optional findByLuid(String luid); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java b/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java new file mode 100644 index 0000000..954bcb9 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.general.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "SegaCard") +@Table(name = "sega_card") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Card implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + // A external id + @Column(name = "ext_id", unique = true) + private long extId; + + // Access Code + @Column(unique = true) + private String luid; + + @Column(name = "register_time") + private LocalDateTime registerTime; + @Column(name = "access_time") + private LocalDateTime accessTime; + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java b/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java new file mode 100644 index 0000000..f13952d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java @@ -0,0 +1,26 @@ +package icu.samnyan.aqua.sega.general.service; + +import icu.samnyan.aqua.sega.general.dao.CardRepository; +import icu.samnyan.aqua.sega.general.model.Card; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Service +public class CardService { + + private final CardRepository cardRepository; + + @Autowired + public CardService(CardRepository cardRepository) { + this.cardRepository = cardRepository; + } + + public Optional getCardByExtId(String extId) { + return cardRepository.findByExtId(Long.parseLong(extId)); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/ByteBufUtil.java b/src/main/java/icu/samnyan/aqua/sega/util/ByteBufUtil.java new file mode 100644 index 0000000..557e64c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/ByteBufUtil.java @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.util; + +import io.netty.buffer.ByteBuf; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ByteBufUtil { + + private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + + /** + * Read bytes from start to current writer index + * Not modifying the reader index + * + * @param byteBuf The input buffer + * @return bytes + */ + public static byte[] toBytes(ByteBuf byteBuf) { + + int readerPos = byteBuf.readerIndex(); + byteBuf.resetReaderIndex(); + byte[] result = new byte[byteBuf.readableBytes()]; + byteBuf.readBytes(result); + + byteBuf.readerIndex(readerPos); + return result; + } + + /** + * Move writer index to the capacity and read all the byte to the end + * Not modifying the reader index + * + * @param byteBuf The input buffer + * @return bytes + */ + public static byte[] toAllBytes(ByteBuf byteBuf) { + + int readerPos = byteBuf.readerIndex(); + byteBuf.resetReaderIndex(); + byteBuf.writerIndex(byteBuf.capacity()); + byte[] result = new byte[byteBuf.capacity()]; + byteBuf.readBytes(result); + + byteBuf.readerIndex(readerPos); + return result; + } + + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/Compression.java b/src/main/java/icu/samnyan/aqua/sega/util/Compression.java new file mode 100644 index 0000000..016e0ad --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/Compression.java @@ -0,0 +1,57 @@ +package icu.samnyan.aqua.sega.util; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class Compression { + + public static byte[] decompress(byte[] src) { + ByteBuf result = Unpooled.buffer(); + byte[] buffer = new byte[100]; + Inflater decompressor = new Inflater(); + decompressor.setInput(src); + + try { + while (!decompressor.finished()) { + int count = decompressor.inflate(buffer); + if (count == 0) { + break; + } + result.writeBytes(buffer, result.readerIndex(), count); + } + decompressor.end(); + + return ByteBufUtil.toBytes(result); + } catch (DataFormatException e) { + e.printStackTrace(); + return new byte[0]; + } + + } + + public static byte[] compress(byte[] src) { + ByteBuf result = Unpooled.buffer(); + byte[] buffer = new byte[100]; + Deflater compressor = new Deflater(); + compressor.setInput(src); + compressor.finish(); + + while (!compressor.finished()) { + int count = compressor.deflate(buffer); + if (count == 0) { + break; + } + result.writeBytes(buffer, result.readerIndex(), count); + } + compressor.end(); + + return ByteBufUtil.toBytes(result); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/URIEncoder.java b/src/main/java/icu/samnyan/aqua/sega/util/URIEncoder.java new file mode 100644 index 0000000..8916984 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/URIEncoder.java @@ -0,0 +1,14 @@ +package icu.samnyan.aqua.sega.util; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class URIEncoder { + + public static String encode(String str) { + return URLEncoder.encode(str, StandardCharsets.UTF_8).replaceAll("\\+", "%20"); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java new file mode 100644 index 0000000..f031ccd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/AccessCodeSerializer.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import icu.samnyan.aqua.sega.general.model.Card; + +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class AccessCodeSerializer extends StdSerializer { + + public AccessCodeSerializer() { + this(null); + } + + public AccessCodeSerializer(Class t) { + super(t); + } + + @Override + public void serialize(Card value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(value.getLuid()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java new file mode 100644 index 0000000..aafbc91 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberDeserializer.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class BooleanNumberDeserializer extends JsonDeserializer { + + @Override + public Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return !"0".equals(p.getText()); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java new file mode 100644 index 0000000..66532c6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanNumberSerializer.java @@ -0,0 +1,26 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class BooleanNumberSerializer extends StdSerializer { + + public BooleanNumberSerializer() { + this(null); + } + + public BooleanNumberSerializer(Class t) { + super(t); + } + + @Override + public void serialize(Boolean value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeNumber(value ? 1 : 0); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java new file mode 100644 index 0000000..340cca1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanStringSerializer.java @@ -0,0 +1,26 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class BooleanStringSerializer extends StdSerializer { + + public BooleanStringSerializer() { + this(null); + } + + public BooleanStringSerializer(Class t) { + super(t); + } + + @Override + public void serialize(Boolean value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(value.toString()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java new file mode 100644 index 0000000..88b6212 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ByteBufSerializer.java @@ -0,0 +1,30 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; + +import java.io.IOException; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ByteBufSerializer extends StdSerializer { + + public ByteBufSerializer() { + this(null); + } + + public ByteBufSerializer(Class t) { + super(t); + } + + @Override + public void serialize(ByteBuf value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeString(ByteBufUtil.hexDump(value)); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java new file mode 100644 index 0000000..6db31c1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/StringMapper.java @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class StringMapper { + + private final ObjectMapper mapper; + + public StringMapper() { + mapper = new ObjectMapper().configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true); + SimpleModule module = new SimpleModule(); + module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + module.addSerializer(Boolean.class, new BooleanStringSerializer()); + module.addSerializer(boolean.class, new BooleanStringSerializer()); + + module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + mapper.registerModule(module); + } + + public String write(Object o) throws JsonProcessingException { + return mapper.writeValueAsString(o); + + } + + public T convert(Map map, Class toClass) { + return mapper.convertValue(map, toClass); + } + + public LinkedHashMap toMap(Object object) { + return mapper.convertValue(object, new TypeReference<>() { + }); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java new file mode 100644 index 0000000..fcdaa23 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/ZonedDateTimeDeserializer.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.util.jackson; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.ZonedDateTime; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public class ZonedDateTimeDeserializer extends JsonDeserializer { + + @Override + public ZonedDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return ZonedDateTime.parse(p.getText()); + } +} diff --git a/src/main/java/icu/samnyan/aqua/spring/configuration/Config.java b/src/main/java/icu/samnyan/aqua/spring/configuration/Config.java new file mode 100644 index 0000000..82b5e29 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/spring/configuration/Config.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.spring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Configuration +public class Config { + + @Bean + public CommonsMultipartResolver multipartResolver() { + CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); + multipartResolver.setMaxUploadSize(-1); + return multipartResolver; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..f0aeaf9 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,30 @@ +## AimeDb server setting +aimedb.server.enable=true +aimedb.server.port=22345 +## Server host return to client when boot up. +## Please notice some game won't work with localhost or 127.0.0.1 +## Set this to same port to Http Server Port +allnet.server.host=localhost +allnet.server.port=80 +## Http Server Port +## Only change this if you have a reverse proxy running. +## The game rely on 80 port for boot up command +server.port=80 +## Logging +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=20MB +## Database Setting +########## For Sqlite ########## +spring.datasource.driver-class-name=org.sqlite.JDBC +spring.datasource.url=jdbc:sqlite:data/db.sqlite +#auto schema update will case sqlite error +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLiteDialect +########## For Mysql ########## +#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver +#spring.datasource.username= +#spring.datasource.password= +#spring.datasource.url=jdbc:mariadb://localhost:3306/?useSSL=false +#spring.jpa.hibernate.ddl-auto=update +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB10Dialect +## You can add any Spring Boot properties below \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..2f8b674 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,8464 @@ +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (1, 2310, '2029-01-01 00:00:00.000000', 0, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (2, 2230, '2029-01-01 00:00:00.000000', 1, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (3, 2220, '2029-01-01 00:00:00.000000', 2, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (4, 2210, '2029-01-01 00:00:00.000000', 3, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (5, 2060, '2029-01-01 00:00:00.000000', 4, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (6, 2050, '2029-01-01 00:00:00.000000', 5, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (7, 2040, '2029-01-01 00:00:00.000000', 6, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (8, 2030, '2029-01-01 00:00:00.000000', 7, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (9, 2020, '2029-01-01 00:00:00.000000', 8, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); +INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date, + start_date) +VALUES (10, 2010, '2029-01-01 00:00:00.000000', 9, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000', + '2019-01-01 00:00:00.000000'); + +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (3, 'nora2r', 'なし', 6, 'B.B.K.K.B.K.K.', 'v1 1.00.00', 'BBKKBKK'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (6, 'ソニック カラーズ', 'なし', 6, 'Reach for the Stars', 'v1 1.00.00', 'REACHFORTHESTARS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (7, 'cosMo@暴走P', 'Crypton Future Media piapro ヤマハ', 2, '初音ミクの消失', 'v1 1.10.00', 'ハツネミクノシヨウシツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (14, 'ClariS 「魔法少女まどか☆マギカ」', 'なし', 0, 'コネクト', 'v1 1.00.00', 'コネクト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (18, '黒うさP', 'なし', 2, '千本桜', 'v1 1.00.00', 'センホンサクラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (19, 'Nankumo/CUBE3', 'なし', 6, 'DRAGONLADY', 'v1 1.05.00', 'DRAGONLADY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (20, 'REDALiCE (HARDCORE TANO*C)', '上海アリス幻樂団', 3, 'taboo tears you up', 'v1 1.15.00', 'TABOOTEARSYOUUP'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (21, 'ビートまりお', '上海アリス幻樂団', 3, 'ナイト・オブ・ナイツ', 'v1 1.00.00', 'ナイトオフナイツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (23, 'れるりり', 'なし', 2, '一触即発☆禅ガール', 'v1 1.00.00', 'イツシヨクソクハツセンカウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (24, 'ハチ', 'なし', 2, 'ドーナツホール', 'v1 1.25.00', 'トウナツホウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (27, 'sasakure.UK', 'なし', 2, 'タイガーランペイジ', 'v1 1.00.00', 'タイカウランヘイシ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (28, '目黒将司「ペルソナ4 ダンシング・オールナイト」', 'ATLUS', 6, 'Pursuing My True Self', 'v1 1.00.00', 'PURSUINGMYTRUESELF'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (33, 'from PACA PACA PASSION', 'D4Enterprise', 6, 'Blue Noise', 'v1 1.00.00', 'BLUENOISE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (34, 'ALI PROJECT', 'なし', 0, '亡國覚醒カタルシス', 'v1 1.20.00', 'ホウコクカクセイカタルシス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (35, 'SHIKI', 'なし', 6, 'Lapis', 'v1 1.05.00', 'LAPIS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (37, 'Lia「AIR」', 'なし', 0, '鳥の詩', 'v1 1.10.00', 'トリノウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (38, '164', 'GUMI(Megpoid)', 2, '天ノ弱', 'v1 1.00.00', 'アマノシヤク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (41, 'Silver Forest', '上海アリス幻樂団', 3, 'sweet little sister', 'v1 1.00.00', 'SWEETLITTLESISTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (45, 'paraoka', 'なし', 6, 'L9', 'v1 1.00.00', 'L9'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (46, 'Masayoshi Minoshima', '上海アリス幻樂団', 3, 'Bad Apple!! feat.nomico', 'v1 1.00.00', 'BADAPPLEFEATNOMICO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (47, 'kemu', 'なし', 2, '六兆年と一夜物語', 'v1 1.00.00', 'ロクチヨウネントイチヤモノカタリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (48, 't+pazolite feat.鈴木 ななこ', '上海アリス幻樂団', 3, 'Unlimited Spark!', 'v1 1.00.00', 'UNLIMITEDSPARK'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (49, 'SYNC.ART''S feat.美里', '上海アリス幻樂団', 3, 'エピクロスの虹はもう見えない', 'v1 1.00.00', 'エヒクロスノニシハモウミエナイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (50, 'SEGA', 'なし', 5, 'Sinfonie Nr. 9 d-moll op. 125', 'v1 1.00.00', 'SINFONIENR9DMOLLOP125'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (51, 'cubesato', 'なし', 5, 'My First Phone', 'v1 1.00.00', 'MYFIRSTPHONE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (52, '削除', 'なし', 5, 'Cyberozar', 'v1 1.05.00', 'CYBEROZAR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (53, 'owl*tree', 'なし', 5, 'Teriqma', 'v1 1.00.00', 'TERIQMA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (55, 'JITTERIN''JINN [covered by ろん]', 'なし', 0, '夏祭り', 'v1 1.10.00', 'ナツマツリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (59, 'れるりり feat.ろん', 'なし', 5, 'Invitation', 'v1 1.00.00', 'INVITATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (61, 'Morrigan', 'なし', 5, 'GOLDEN RULE', 'v1 1.05.00', 'GOLDENRULE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (62, '六弦アリス', 'なし', 5, '名も無い鳥', 'v1 1.05.00', 'ナモナイトリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (63, 'Godspeed', 'なし', 5, 'Gate of Fate', 'v1 1.00.00', 'GATEOFFATE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (64, 'あべにゅうぷろじぇくと feat.佐倉 紗織 produced by ave;new', 'なし', 5, '今ぞ♡崇め奉れ☆オマエらよ!!~姫の秘メタル渇望~', 'v1 1.00.00', + 'イマソアカメタテマツレオマエラヨヒメノヒメタルカツホウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (65, 'ESTi', 'なし', 5, 'Anemone', 'v1 1.00.00', 'ANEMONE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (66, '豚乙女', 'なし', 5, '明るい未来', 'v1 1.10.00', 'アカルイミライ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (67, 'halyosy', 'なし', 5, '昵懇レファレンス', 'v1 1.00.00', 'シツコンレフアレンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (68, 'solfa feat.茶太', 'なし', 5, '乗り切れ受験ウォーズ', 'v1 1.00.00', 'ノリキレシユケンウオウス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (69, 'Sampling Masters MEGA', 'なし', 5, 'The wheel to the right', 'v1 1.00.00', 'THEWHEELTOTHERIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (70, 'SEXY-SYNTHESIZER', 'なし', 5, 'STAR', 'v1 1.00.00', 'STAR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (71, 't+pazolite', 'なし', 5, 'Infantoon Fantasy', 'v1 1.00.00', 'INFANTOONFANTASY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (72, 'Morrigan feat.Lily', 'なし', 5, 'Genesis', 'v1 1.05.00', 'GENESIS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (73, 'A-One', 'なし', 5, 'MUSIC PЯAYER', 'v1 1.05.00', 'MUSICPRAYER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (74, 'TaNaBaTa', 'なし', 5, 'リリーシア', 'v1 1.00.00', 'リリウシア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (75, 'DECO*27 feat.echo', 'なし', 5, 'Counselor', 'v1 1.00.00', 'COUNSELOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (76, 'WASi303', 'なし', 5, 'luna blu', 'v1 1.00.00', 'LUNABLU'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (77, 'ゼッケン屋', 'なし', 5, 'ケモノガル', 'v1 1.10.00', 'ケモノカル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (78, 'LiSA', 'なし', 0, 'crossing field', 'v1 1.00.00', 'CROSSINGFIELD'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (79, '片霧烈火オンザみんマンション', 'なし', 5, 'GO!GO!ラブリズム♥', 'v1 1.00.00', 'GOGOラフリスム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (80, '古代 祐三', 'なし', 5, 'Grab your sword', 'v1 1.00.00', 'GRABYOURSWORD'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (81, 'SEGA', 'なし', 5, 'Sinfonie Nr. 9 d-moll op. 125 (Master)', 'v1 1.00.00', 'SINFONIENR9DMOLLOP125MASTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (82, 'Aiko Oi', 'なし', 5, 'Memories of Sun and Moon', 'v1 1.00.00', 'MEMORIESOFSUNANDMOON'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (83, 'Neru', 'なし', 2, 'ロストワンの号哭', 'v1 1.00.00', 'ロストワンノコウコク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (88, '長沼 英樹', 'なし', 6, 'The Concept of Love', 'v1 1.00.00', 'THECONCEPTOFLOVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (89, 'from PACA PACA PASSION Special', 'D4Enterprise', 6, 'JET', 'v1 1.00.00', 'JET'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (90, 'Osamu Kubota', 'なし', 5, 'L''épisode', 'v1 1.05.00', 'LEPISODE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (91, 'myu314 feat.あまね(COOL&CREATE)', '上海アリス幻樂団', 3, 'Yet Another ”drizzly rain”', 'v1 1.00.00', + 'YETANOTHERDRIZZLYRAIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (92, 'ビートまりお', '上海アリス幻樂団', 3, '最終鬼畜妹・一部声', 'v1 1.00.00', 'サイシユウキチクイモウトイチフコエ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (93, 'Silver Forest', '上海アリス幻樂団', 3, '蒼空に舞え、墨染の桜', 'v1 1.05.00', 'ソラニマエスミソメノサクラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (94, 'Last Note.', 'GUMI(Megpoid)', 2, 'セツナトリップ', 'v1 1.00.00', 'セツナトリツフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (95, '海田 明里', 'なし', 5, '砂漠のハンティングガール♡', 'v1 1.00.00', 'サハクノハンテインクカウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (96, 'ARM+夕野ヨシミ (IOSYS) feat.miko', '上海アリス幻樂団', 3, 'チルノのパーフェクトさんすう教室', 'v1 1.00.00', 'チルノノハウフエクトサンスウキヨウシツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (97, 'ビートまりお', '上海アリス幻樂団', 3, 'Help me, ERINNNNNN!!', 'v1 1.00.00', 'HELPMEERINNNNNN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (98, 'ARM+夕野ヨシミ (IOSYS) feat.藤咲かりん', '上海アリス幻樂団', 3, '魔理沙は大変なものを盗んでいきました', 'v1 1.00.00', 'マリサハタイヘンナモノヲヌスンテイキマシタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (99, 'そらる・ろん×れるりり', 'なし', 8, '言ノ葉カルマ', 'v1 1.00.00', 'コトノハカルマ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (100, '霜月はるか', 'なし', 5, 'After the rain', 'v1 1.00.00', 'AFTERTHERAIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (101, 'Yoko Shimomura', 'なし', 5, 'Tango Rouge', 'v1 1.00.00', 'TANGOROUGE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (102, 'COOL&CREATE', 'なし', 5, 'Tuning Rangers', 'v1 1.10.00', 'TUNINGRANGERS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (103, 'cosMo@暴走P', 'なし', 5, 'エンドマークに希望と涙を添えて', 'v1 1.00.00', 'エントマウクニキホウトナミタヲソエテ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (104, 'MOSAIC.WAV', 'なし', 5, 'とーきょー全域★アキハバラ?', 'v1 1.00.00', 'トウキヨウセンイキアキハハラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (105, '景山 将太', 'なし', 5, 'overcome', 'v1 1.00.00', 'OVERCOME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (106, 'Cranky feat.おもしろ三国志', 'なし', 5, '宛城、炎上!!', 'v1 1.05.00', 'エンシヨウエンシヨウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (107, 'Queen P.A.L.', 'なし', 5, 'We Gonna Journey', 'v1 1.00.00', 'WEGONNAJOURNEY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (108, '浜渦 正志', 'なし', 5, 'The ether', 'v1 1.00.00', 'THEETHER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (113, 'DECO*27', 'なし', 2, 'ストリーミングハート', 'v1 1.00.00', 'ストリウミンクハウト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (114, '八王子P', 'なし', 2, 'Sweet Devil', 'v1 1.00.00', 'SWEETDEVIL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (115, 'Alstroemeria Records', '上海アリス幻樂団', 3, 'Dreaming', 'v1 1.00.00', 'DREAMING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (116, 'supercell 「化物語」', 'なし', 0, '君の知らない物語', 'v1 1.00.00', 'キミノシラナイモノカタリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (117, 'M.S.S Project', 'なし', 2, 'M.S.S.Planet', 'v1 1.00.00', 'MSSPLANET'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (118, 'ピノキオピー', 'なし', 2, '腐れ外道とチョコレゐト', 'v1 1.00.00', 'クサレケトウトチヨコレイト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (119, 'じん', 'なし', 2, 'アウターサイエンス', 'v1 1.10.00', 'アウタウサイエンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (120, 'koutaq', '上海アリス幻樂団', 3, '四次元跳躍機関', 'v1 1.00.00', 'ヨシケンチヨウヤクキカン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (121, '石鹸屋', '上海アリス幻樂団', 3, '東方妖々夢 ~the maximum moving about~', 'v1 1.05.00', 'トウホウヨウヨウムTHEMAXIMUMMOVINGABOUT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (122, 'どぶウサギ', '上海アリス幻樂団', 3, '少女幻葬戦慄曲 ~ Necro Fantasia', 'v1 1.05.00', 'シヨウシヨケンソウセンリツキヨクNECROFANTASIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (123, '発熱巫女~ず', '上海アリス幻樂団', 3, '橙の幻想郷音頭', 'v1 1.05.00', 'チエンノケンソウキヨウオント'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (124, 'VisualArt''s/Key「AIR」', 'なし', 0, '夏影', 'v1 1.10.00', 'ナツカケ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (128, 'Junk', 'なし', 6, 'The Formula', 'v1 1.00.00', 'THEFORMULA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (131, 'じん 「カゲロウプロジェクト」', 'なし', 2, 'チルドレンレコード', 'v1 1.05.00', 'チルトレンレコウト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (132, 'kemu', 'なし', 2, 'イカサマライフゲイム', 'v1 1.00.00', 'イカサマライフケイム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (133, '40mP', 'GUMI(Megpoid)', 2, 'シリョクケンサ', 'v1 1.00.00', 'シリヨクケンサ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (134, 'orangentle', 'なし', 6, 'HAELEQUIN (Original Remaster)', 'v1 1.00.00', 'HAELEQUINORIGINALREMASTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (135, '削除', 'なし', 6, 'Vallista', 'v1 1.00.00', 'VALLISTA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (136, 'Grand Thaw / Rigel Theatre', 'なし', 6, 'Äventyr', 'v1 1.00.00', 'AEVENTYR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (137, 'LV.4', 'なし', 6, 'Angel dust', 'v1 1.10.00', 'ANGELDUST'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (138, 'siromaru + cranky', 'なし', 6, 'conflict', 'v1 1.00.00', 'CONFLICT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (140, 'MintJam', 'なし', 5, 'Guilty', 'v1 1.00.00', 'GUILTY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (141, 'sasakure.UK', 'なし', 5, '閃鋼のブリューナク', 'v1 1.00.00', 'センコウノフリユウナク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (142, '削除', 'なし', 6, 'Altale', 'v1 1.00.00', 'ALTALE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (143, 'ryo(supercell)', 'なし', 2, 'ODDS&ENDS', 'v1 1.00.00', 'ODDSENDS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (144, 'xi', 'なし', 6, 'Aragami', 'v1 1.00.00', 'ARAGAMI'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (145, 'イロドリミドリ', 'なし', 7, 'Change Our MIRAI!', 'v1 1.00.00', 'CHANGEOURMIRAI'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (146, '40mP feat.シャノ', 'なし', 5, '夕暮れワンルーム', 'v1 1.00.00', 'ユウクレワンルウム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (147, 'ふわりP', 'なし', 5, 'こころここから', 'v1 1.00.00', 'ココロココカラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (148, '植松 伸夫', 'なし', 5, 'Theme of SeelischTact', 'v1 1.00.00', 'THEMEOFSEELISCHTACT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (149, '岸田教団&THE明星ロケッツ', '上海アリス幻樂団', 3, '緋色のDance', 'v1 1.00.00', 'ヒイロノDANCE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (150, '御形 アリシアナ(CV:福原 綾香)', 'なし', 7, 'brilliant better', 'v1 1.00.00', 'BRILLIANTBETTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (151, '光田 康典', 'なし', 5, 'Alma', 'v1 1.00.00', 'ALMA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (152, '伊藤 賢治', 'なし', 5, 'Gustav Battle', 'v1 1.00.00', 'GUSTAVBATTLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (154, 'ナノ feat.MY FIRST STORY 「蒼き鋼のアルペジオ ‐アルス・ノヴァ‐」', 'なし', 0, 'SAVIOR OF SONG', 'v1 1.00.00', 'SAVIOROFSONG'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (156, 'Mitchie M', 'なし', 2, 'FREELY TOMORROW', 'v1 1.00.00', 'FREELYTOMORROW'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (157, 'ギガ', 'なし', 2, 'ギガンティックO.T.N', 'v1 1.00.00', 'キカンテイツクOTN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (158, '天王洲 なずな(CV:山本 彩乃)', 'なし', 7, 'フォルテシモBELL', 'v1 1.00.00', 'フオルテシモBELL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (159, 'SEGA Sound Unit[H.]', 'なし', 0, 'ジングルベル', 'v1 1.00.00', 'シンクルヘル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (160, 'S!N・高橋菜々×ひとしずく・やま△', 'なし', 8, '言ノ葉遊戯', 'v1 1.00.00', 'コトノハユウキ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (161, '小仏 凪(CV:佐倉 薫)', 'なし', 7, '私の中の幻想的世界観及びその顕現を想起させたある現実での出来事に関する一考察', 'v1 1.00.00', + 'ワタシノナカノケンソウテキセカイカンオヨヒソノケンケンヲソウキサセタアルケンシツテノテキコトニカンスルイチコウサツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (163, 'M.S.S Project', 'なし', 5, '幾四音-Ixion-', 'v1 1.00.00', 'イクシオンIXION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (165, 'sasakure.UK', 'GUMI(Megpoid)', 2, 'ぼくらの16bit戦争', 'v1 1.00.00', 'ホクラノ16BITウオウス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (166, 'wowaka', 'なし', 2, '裏表ラバーズ', 'v1 1.00.00', 'ウラオモテラハウス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (167, 'れるりり', 'なし', 2, '脳漿炸裂ガール', 'v1 1.00.00', 'ノウシヨウサクレツカウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (168, 'さつき が てんこもり', 'なし', 2, 'ネトゲ廃人シュプレヒコール', 'v1 1.00.00', 'ネトケハイシンシユフレヒコウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (169, 'Junk', 'なし', 6, 'elegante', 'v1 1.00.00', 'ELEGANTE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (170, '箱部 なる(CV:M・A・O)', 'なし', 7, 'DETARAME ROCK&ROLL THEORY', 'v1 1.00.00', 'DETARAMEROCKROLLTHEORY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (171, 'from PACA PACA PASSION', 'D4Enterprise', 6, 'XL TECHNO', 'v1 1.05.00', 'XLTECHNO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (173, 'xi', 'なし', 6, 'Halcyon', 'v1 1.05.00', 'HALCYON'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (176, '小塚良太「ペルソナ4 ダンシング・オールナイト」', 'ATLUS', 6, 'Dance!', 'v1 1.00.00', 'DANCE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (177, 'じまんぐ', '上海アリス幻樂団', 3, 'Jimang Shot', 'v1 1.05.00', 'JIMANGSHOT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (178, 'marasy', 'なし', 5, 'stella=steLLa', 'v1 1.00.00', 'STELLASTELLA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (179, 'ピノキオピー', 'なし', 2, 'すろぉもぉしょん', 'v1 1.00.00', 'スロオモオシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (180, '光吉猛修', 'なし', 5, '怒槌', 'v1 1.00.00', 'イカスチ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (181, 'こじろー', 'GUMI(Megpoid)', 2, 'ユクエシレズ', 'v1 1.00.00', 'ユクエシレス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (186, '石鹸屋', '上海アリス幻樂団', 3, 'ってゐ! ~えいえんてゐVer~', 'v1 1.10.00', 'ツテイエイエンテイVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (187, 'ARM+夕野ヨシミ (IOSYS) feat.miko', '上海アリス幻樂団', 3, '患部で止まってすぐ溶ける~狂気の優曇華院', 'v1 1.10.00', + 'カンフテトマツテスクトケルキヨウキノウトンケイン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (189, 'ARM+夕野ヨシミ (IOSYS) feat.miko', '上海アリス幻樂団', 3, 'ひれ伏せ愚民どもっ!', 'v1 1.10.00', 'ヒレフセクミントモツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (190, 'IRON ATTACK!', '上海アリス幻樂団', 3, 'エテルニタス・ルドロジー', 'v1 1.10.00', 'エテルニタスルトロシウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (191, 'セブンスヘブンMAXION', '上海アリス幻樂団', 3, '幽闇に目醒めしは', 'v1 1.15.00', 'ユウヤミニメサメシハ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (192, '矢鴇つかさ feat. 三澤秋', '上海アリス幻樂団', 3, 'Starlight Vision', 'v1 1.15.00', 'STARLIGHTVISION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (193, 'void+夕野ヨシミ (IOSYS) feat.藤原鞠菜', '上海アリス幻樂団', 3, 'Club Ibuki in Break All', 'v1 1.15.00', + 'CLUBIBUKIINBREAKALL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (194, 'Silver Forest', '上海アリス幻樂団', 3, 'Phantasm Brigade', 'v1 1.15.00', 'PHANTASMBRIGADE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (195, 'あ~るの~と(いえろ~ぜぶら)', '上海アリス幻樂団', 3, '永遠のメロディ', 'v1 1.15.00', 'エイエンノメロテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (196, 'xi', 'なし', 6, 'FREEDOM DiVE', 'v1 1.05.00', 'FREEDOMDIVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (197, 'sasakure.UK', 'なし', 6, 'Jack-the-Ripper◆', 'v1 1.05.00', 'JACKTHERIPPER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (198, 'sasakure.UK', 'なし', 6, 'AVALON', 'v1 1.25.00', 'AVALON'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (199, '明坂 芹菜(CV:新田 恵海)', 'なし', 7, 'ハート・ビート', 'v1 1.05.00', 'ハウトヒウト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (200, 'イロドリミドリ', 'なし', 7, '無敵We are one!!', 'v1 1.05.00', 'ムテキWEAREONE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (201, 't+pazolite', 'なし', 5, 'Contrapasso -inferno-', 'v1 1.05.00', 'CONTRAPASSOINFERNO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (202, 'Tatsh', 'なし', 5, 'GEMINI -C-', 'v1 1.05.00', 'GEMINIC'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (203, 'DJ YOSHITAKA', 'Konami Amusement', 6, 'FLOWER', 'v1 1.00.00', 'FLOWER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (204, '日向美ビタースイーツ♪', 'Konami Amusement', 6, 'ちくわパフェだよ☆CKP', 'v1 1.00.00', 'チクワハフエタヨCKP'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (205, 'Masayoshi Minoshima feat.Mei Ayakura', 'なし', 5, 'SNIPE WHOLE', 'v1 1.05.00', 'SNIPEWHOLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (206, '目黒将司「ペルソナ4 ダンシング・オールナイト」', 'ATLUS', 6, 'Signs Of Love (“Never More” ver.)', 'v1 1.00.00', + 'SIGNSOFLOVENEVERMOREVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (207, '目黒将司 Remixed by 浅倉大介「ペルソナ4 ダンシング・オールナイト」', 'ATLUS', 6, 'Your Affection (Daisuke Asakura Remix)', + 'v1 1.00.00', 'YOURAFFECTIONDAISUKEASAKURAREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (208, 'DOT96', 'なし', 6, 'SAMBISTA', 'v1 1.05.00', 'SAMBISTA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (210, 'Orangestar', 'なし', 2, 'アスノヨゾラ哨戒班', 'v1 1.05.00', 'アスノヨソラシヨウカイハン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (211, 'ゆうゆ', 'なし', 2, '天樂', 'v1 1.05.00', 'テンカク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (212, '銀サク', 'なし', 2, 'いろは唄', 'v1 1.05.00', 'イロハウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (213, 'otetsu', 'なし', 2, '星屑ユートピア', 'v1 1.05.00', 'ホシクスユウトヒア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (216, '放課後楽園部 「ミカグラ学園組曲」', 'なし', 2, '放課後革命', 'v1 1.05.00', 'ホウカコカクメイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (217, '放課後楽園部 「ミカグラ学園組曲」', 'なし', 2, '楽園ファンファーレ', 'v1 1.05.00', 'ラクエンフアンフアウレ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (218, 'tilt-six feat.バル', 'なし', 5, 'サウンドプレイヤー', 'v1 1.10.00', 'サウントフレイヤウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (219, 'きくお', 'なし', 5, '玩具狂奏曲 -終焉-', 'v1 1.10.00', 'カンクキヨウソウキヨクシユウエン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (220, 'じん 「カゲロウプロジェクト」', 'なし', 2, '如月アテンション', 'v1 1.05.00', 'キサラキアテンシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (222, 'sasakure.UK', 'なし', 2, 'Mr. Wonderland', 'v1 1.05.00', 'MRWONDERLAND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (223, 'kemu', 'なし', 2, 'カミサマネジマキ', 'v1 1.05.00', 'カミサマネシマキ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (224, '40mP', 'なし', 2, '恋愛裁判', 'v1 1.05.00', 'レンアイサイハン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (225, 'n-buna', 'なし', 2, 'ウミユリ海底譚', 'v1 1.05.00', 'ウミユリカイテイタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (226, 't+pazolite', 'なし', 5, 'Garakuta Doll Play', 'v1 1.05.00', 'GARAKUTADOLLPLAY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (227, 'ゆりん・柿チョコ×Neru', 'なし', 8, '洗脳', 'v1 1.05.00', 'センノウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (228, 'n.k', 'なし', 2, 'このふざけた素晴らしき世界は、僕の為にある', 'v1 1.05.00', 'コノフサケタスハラシキセカイハホクノタメニアル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (229, '-45', 'なし', 5, '紅華刑', 'v1 1.10.00', 'クレナイカケイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (230, 'Maozon', 'なし', 5, 'Hyperion', 'v1 1.10.00', 'HYPERION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (232, 'dj TAKA meets DJ YOSHITAKA', 'Konami Amusement', 6, 'Elemental Creation', 'v1 1.05.00', + 'ELEMENTALCREATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (233, 'TAG', 'Konami Amusement', 6, 'アルストロメリア', 'v1 1.05.00', 'アルストロメリア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (234, 'INNOCENT NOIZE', 'なし', 5, 'Devastating Blaster', 'v1 1.15.00', 'DEVASTATINGBLASTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (235, '新庄 かなえ(CV:三森 すずこ) 「てーきゅう」', 'なし', 0, 'ファッとして桃源郷', 'v1 1.05.00', 'フアツトシテトウケンキヨウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (238, 'レベッカ [covered by 光吉猛修]', 'なし', 0, 'フレンズ', 'v1 1.10.00', 'フレンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (240, 'じん 「カゲロウプロジェクト」', 'なし', 2, '夜咄ディセイブ', 'v1 1.05.00', 'ヨハナシテイセイフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (243, 'UNISON SQUARE GARDEN', 'Licensed by TOY''S FACTORY INC.', 0, 'シュガーソングとビターステップ', 'v1 1.05.00', + 'シユカウソンクトヒタウステツフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (244, '歌組雪月花 夜々(原田 ひとみ)/いろり(茅野 愛衣)/小紫(小倉 唯) 「機巧少女は傷つかない」', '機巧少女は傷つかない製作委員会', 0, '回レ!雪月花', 'v1 1.05.00', + 'マワレセツケツカ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (245, 'イロドリミドリ', 'なし', 7, 'Help me, あーりん!', 'v1 1.05.00', 'HELPMEアウリン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (246, 'イロドリミドリ', 'なし', 7, 'なるとなぎのパーフェクトロックンロール教室', 'v1 1.05.00', 'ナルトナキノハウフエクトロツクンロウルキヨウシツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (247, '蒼井 翔太 「ファンタシースターオンライン2 ジ アニメーション」', 'なし', 0, '絶世スターゲイト', 'v1 1.05.00', 'セツセイスタウケイト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (248, 'Katzeohr & Spiegel', 'なし', 5, 'Schrecklicher Aufstand', 'v1 1.10.00', 'SCHRECKLICHERAUFSTAND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (249, '並木晃一', 'なし', 5, 'ドライヴ・オン・ザ・レインボー', 'v1 1.15.00', 'トライウオンサレインホウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (250, '少女病', 'なし', 5, 'Philosopher', 'v1 1.10.00', 'PHILOSOPHER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (251, 'ひとしずく×やま△', 'なし', 2, 'Crazy ∞ nighT', 'v1 1.05.00', 'CRAZYNIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (252, 'DECO*27', 'なし', 2, '愛迷エレジー', 'v1 1.05.00', 'アイマイエレシウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (253, 'YATAGARASU', 'なし', 5, 'Warcry', 'v1 1.15.00', 'WARCRY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (254, 'n-buna feat.ヤギヌマカナ', 'なし', 5, 'その群青が愛しかったようだった', 'v1 1.10.00', 'ソノクンシヨウカイトシカツタヨウタツタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (256, 'ひーちゃんとあーちゃんとたーちゃん', 'なし', 5, '札付きのワル ~マイケルのうた~', 'v1 1.15.00', 'フタツキノワルマイケルノウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (257, 'じーざすP feat.kradness', 'なし', 5, 'BOKUTO', 'v1 1.10.00', 'BOKUTO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (258, 'Team Grimoire', 'なし', 5, 'TiamaT:F minor', 'v1 1.15.00', 'TIAMATFMINOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (259, 'Cranky', 'なし', 5, 'Oshama Scramble! (Cranky Remix)', 'v1 1.10.00', 'OSHAMASCRAMBLECRANKYREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (260, 'さつき が てんこもり feat.YURiCa/花たん', 'なし', 5, 'D.E.A.D.L.Y.', 'v1 1.10.00', 'DEADLY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (261, 'lumo', 'なし', 5, 'ロボットプラネットユートピア', 'v1 1.10.00', 'ロホツトフラネツトユウトヒア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (262, 'D-Cee', 'なし', 5, 'Tidal Wave', 'v1 1.10.00', 'TIDALWAVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (263, 'livetune', 'illustration by 穂嶋 piapro', 2, 'Hand in Hand', 'v1 1.10.00', 'HANDINHAND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (264, '月鈴 白奈(CV:高野 麻里佳)', 'なし', 7, 'My Dearest Song', 'v1 1.10.00', 'MYDEARESTSONG'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (265, '箱部 なる(CV:M・A・O)', 'なし', 7, '猫祭り', 'v1 1.15.00', 'ネコマツリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (266, 'solfa feat.茶太', 'なし', 5, 'ゲシュタルト!テスト期間!!', 'v1 1.15.00', 'ケシユタルトテストキカン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (267, 'Orangestar', 'なし', 5, '心象蜃気楼', 'v1 1.10.00', 'シンシヨウシンキロウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (268, '御形 アリシアナ(CV:福原 綾香)', 'なし', 7, 'Bang Babang Bang!!!', 'v1 1.15.00', 'BANGBABANGBANG'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (269, '隣人部「僕は友達が少ないNEXT」', '僕は友達が少ないNEXT', 0, '僕らの翼', 'v1 1.10.00', 'ホクラノツハサ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (270, 'トーマ', 'なし', 2, 'エンヴィキャットウォーク', 'v1 1.10.00', 'エンウイキヤツトウオウク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (271, 'じーざすP(ワンダフル☆オポチュニティ!)', 'Crypton Future Media piapro', 2, '鬼KYOKAN', 'v1 1.10.00', 'オニKYOKAN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (272, 'Last Note.', 'GUMI(Megpoid)', 2, '有頂天ビバーチェ', 'v1 1.10.00', 'ウチヨウテンヒハウチエ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (273, 'Mitchie M', 'Crypton Future Media piapro', 2, 'ビバハピ', 'v1 1.10.00', 'ヒハハヒ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (274, '霜月はるか', 'なし', 5, '願い星', 'v1 1.15.00', 'ネカイホシ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (275, 'DECO*27', 'Crypton Future Media piapro', 2, '愛言葉', 'v1 1.10.00', 'アイコトハ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (276, '田口囁一/感傷ベクトル', 'なし', 5, '後夜祭', 'v1 1.10.00', 'コウヤサイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (277, '小仏 凪(CV:佐倉 薫)', 'なし', 7, 'TRUST', 'v1 1.15.00', 'TRUST'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (278, '40mP', 'Crypton Future Media piapro', 2, 'からくりピエロ', 'v1 1.10.00', 'カラクリヒエロ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (279, 'ゆうゆ', 'Crypton Future Media piapro', 2, '深海少女', 'v1 1.10.00', 'シンカイシヨウシヨ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (280, 'じーざすP(ワンダフル☆オポチュニティ!)', 'Crypton Future Media piapro', 2, 'リモコン', 'v1 1.10.00', 'リモコン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (281, 'cosMo@暴走P', 'GUMI(Megpoid)', 2, 'ラクガキスト', 'v1 1.10.00', 'ラクカキスト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (282, 'Last Note.', 'Crypton Future Media piapro', 2, 'アカツキアライヴァル', 'v1 1.10.00', 'アカツキアライウアル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (283, 'おにゅうP', 'Crypton Future Media piapro', 2, '神曲', 'v1 1.10.00', 'カミキヨク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (284, 'うたたP', '2017 VOCALOMAKETS Powered by Bumpy Factory Corporation.', 2, '幸せになれる隠しコマンドがあるらしい', 'v1 1.10.00', + 'シアワセニナレルカクシコマントカアルラシイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (286, 'livetune', 'illustration by mebae piapro', 2, 'Tell Your World', 'v1 1.10.00', 'TELLYOURWORLD'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (287, 'doriko', 'Crypton Future Media piapro', 2, 'ロミオとシンデレラ', 'v1 1.10.00', 'ロミオトシンテレラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (288, '折戸伸治 feat.北沢綾香', 'なし', 5, 'First Twinkle', 'v1 1.10.00', 'FIRSTTWINKLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (289, 'ピノキオピー', 'なし', 5, 'ウソラセラ', 'v1 1.10.00', 'ウソラセラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (290, '真宮寺さくら(横山智佐)&帝国歌劇団「サクラ大戦」', 'なし', 6, '檄!帝国華撃団', 'v1 1.10.00', 'ケキテイコクカケキタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (291, '削除', 'なし', 6, 'Kronos', 'v1 1.10.00', 'KRONOS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (292, '幽閉サテライト', '上海アリス幻樂団', 3, '月に叢雲華に風', 'v1 1.10.00', 'ツキニムラクモハナニカセ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (293, 'kemu', 'Crypton Future Media piapro GUMI(Megpoid)', 2, 'インビジブル', 'v1 1.10.00', 'インヒシフル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (294, 'kemu', 'GUMI(Megpoid)', 2, '人生リセットボタン', 'v1 1.10.00', 'シンセイリセツトホタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (295, '志方あきこ', 'なし', 5, '響', 'v1 1.15.00', 'ヒヒキ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (296, '土間うまる [CV.田中あいみ]「干物妹!うまるちゃん」', '干物妹!うまるちゃん', 0, 'かくしん的☆めたまるふぉ~ぜっ!', 'v1 1.10.00', 'カクシンテキメタマルフオウセツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (297, 'カラフル・サウンズ・ポート', 'なし', 6, '風仁雷仁', 'v1 1.10.00', 'フウシンライシン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (298, 'from PACA PACA PASSION 2', 'D4Enterprise', 6, 'PRIVATE SERVICE', 'v1 1.10.00', 'PRIVATESERVICE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (299, '本間芽衣子(茅野愛衣)、安城鳴子(戸松遥)、鶴見知利子(早見沙織)「あの日見た花の名前を僕達はまだ知らない。」', 'ANOHANA PROJECT', 0, + 'secret base ~君がくれたもの~ (10 years after Ver.)', 'v1 1.10.00', 'SECRETBASEキミカクレタモノ10YEARSAFTERVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (300, 'A-One', '上海アリス幻樂団', 3, 'No Routine', 'v1 1.10.00', 'NOROUTINE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (301, 'のぼる↑', 'Crypton Future Media piapro', 2, '白い雪のプリンセスは', 'v1 1.10.00', 'シロイユキノフリンセスハ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (302, 'Feryquitous feat.Sennzai', 'なし', 6, 'Strahv', 'v1 1.10.00', 'STRAHV'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (303, 'Tomoko Sasaki「NiGHTS~星降る夜の物語~」', 'なし', 6, 'Dreams Dreams:Kids Ver.', 'v1 1.10.00', 'DREAMSDREAMSKIDSVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (304, '電脳戦機バーチャロンフォース', 'バーチャロン', 6, 'In The Blue Sky ''01', 'v1 1.10.00', 'INTHEBLUESKY01'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (305, '豚乙女', '上海アリス幻樂団', 3, '幻想のサテライト', 'v1 1.10.00', 'ケンソウノサテライト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (306, '紅色リトマス', 'Konami Amusement', 6, '凛として咲く花の如く', 'v1 1.10.00', 'リントシテサクハナノコトク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (307, 'owl*tree', 'なし', 5, 'Paqqin', 'v1 1.10.00', 'PAQQIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (308, 'カラスは真っ白', 'なし', 0, 'fake!fake!', 'v1 1.10.00', 'FAKEFAKE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (309, 'LiSA', 'なし', 0, 'Rising Hope', 'v1 1.10.00', 'RISINGHOPE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (310, 'マチゲリータ', 'なし', 5, '覚醒楽奏メタフィクション', 'v1 1.15.00', 'カクセイカツソウメタフイクシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (311, '隣人部「僕は友達が少ないNEXT」', '僕は友達が少ないNEXT', 0, 'Be My Friend', 'v1 1.10.00', 'BEMYFRIEND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (312, '羽瀬川小鳩(CV:花澤香菜)・高山マリア(CV:井口裕香)「僕は友達が少ないNEXT」', '僕は友達が少ないNEXT', 0, 'ぶいえす!!らいばる!!', 'v1 1.10.00', + 'フイエスライハル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (313, '妹S(シスターズ)(土間うまる [CV.田中あいみ]、海老名菜々 [CV.影山灯]、本場切絵 [CV.白石晴香]、橘・シルフィンフォード [CV.古川由利奈])「干物妹!うまるちゃん」', + '干物妹!うまるちゃん', 0, 'ひだまりデイズ', 'v1 1.10.00', 'ヒタマリテイス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (314, '鈴木このみ「ノーゲーム・ノーライフ」', 'ノーゲーム・ノーライフ', 0, 'This game', 'v1 1.10.00', 'THISGAME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (315, '白(CV:茅野愛衣)「ノーゲーム・ノーライフ」', 'ノーゲーム・ノーライフ', 0, 'オラシオン', 'v1 1.10.00', 'オラシオン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (316, 'ika', 'Crypton Future Media piapro', 2, 'みくみくにしてあげる♪【してやんよ】', 'v1 1.10.00', 'ミクミクニシテアケルシテヤンヨ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (317, 'SHIKI', 'なし', 6, 'Air', 'v1 1.10.00', 'AIR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (318, 'Lunatic Sounds', 'なし', 6, 'DataErr0r', 'v1 1.10.00', 'DATAERR0R'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (319, 'ETIA. feat.Jenga', 'なし', 6, 'Say A Vengeance', 'v1 1.10.00', 'SAYAVENGEANCE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (320, 'eoll', 'なし', 6, '010', 'v1 1.10.00', '010'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (321, 'Grand Thaw / Rigel Theatre', 'なし', 6, 'ERIS -Legend of Gaidelia-', 'v1 1.10.00', 'ERISLEGENDOFGAIDELIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (322, 'ゆうゆ / 篠螺悠那', '上海アリス幻樂団', 3, 'Imperishable Night 2006 (2016 Refine)', 'v1 1.10.00', + 'IMPERISHABLENIGHT20062016REFINE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (323, 'Mastermind(xi+nora2r)', 'なし', 6, 'Dreadnought', 'v1 1.10.00', 'DREADNOUGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (324, 'Ras', 'なし', 6, 'STAGER', 'v1 1.10.00', 'STAGER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (325, 'naotyu-', 'なし', 6, 'Her Majesty', 'v1 1.10.00', 'HERMAJESTY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (326, 'Street', 'なし', 6, 'Sakura Fubuki', 'v1 1.10.00', 'SAKURAFUBUKI'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (327, 'Queen P.A.L.', 'なし', 6, 'JULIAN', 'v1 1.10.00', 'JULIAN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (328, 'ねこみみ魔法使い', 'なし', 6, '★LittlE HearTs★', 'v1 1.10.00', 'LITTLEHEARTS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (329, 'Yosh(Survive Said The Prophet)「ボーダーブレイク」', 'なし', 6, 'STAIRWAY TO GENERATION', 'v1 1.10.00', + 'STAIRWAYTOGENERATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (330, 'イロドリミドリ', 'なし', 7, 'ドキドキDREAM!!!', 'v1 1.10.00', 'トキトキDREAM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (331, '月鈴 那知(CV:今村 彩夏)', 'なし', 7, '猛進ソリストライフ!', 'v1 1.10.00', 'モウシンソリストライフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (332, 'un:c・ろん×じーざすP', 'なし', 8, '空威張りビヘイビア', 'v1 1.10.00', 'カライハリヒヘイヒア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (334, 'from PACA PACA PASSION', 'D4Enterprise', 6, 'FLOATED CALM', 'v1 1.15.00', 'FLOATEDCALM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (335, 'Massive New Krew', 'なし', 5, 'Supersonic Generation', 'v1 1.15.00', 'SUPERSONICGENERATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (336, 'OSTER project', 'VOCAL: GUMI(VOCALOID Megpoid) INTERNET ヤマハ', 2, 'シジョウノコエ VOCALO ver.', 'v1 1.10.00', + 'シシヨウノコエVOCALOVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (337, '天王洲 なずな(CV:山本 彩乃)', 'なし', 7, 'Tic Tac DREAMIN’', 'v1 1.15.00', 'TICTACDREAMIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (338, '明坂 芹菜(CV:新田 恵海)', 'なし', 7, 'SPICY SWINGY STYLE', 'v1 1.15.00', 'SPICYSWINGYSTYLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (339, 'れるりり feat.ろん', 'なし', 5, 'RevolutionGame', 'v1 1.15.00', 'REVOLUTIONGAME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (340, 'イロドリミドリ', 'なし', 7, 'Still', 'v1 1.15.00', 'STILL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (341, 'かたほとり feat.桃箱', 'なし', 5, 'おまかせ!!トラブルメイ娘☆とれびちゃん', 'v1 1.15.00', 'オマカセトラフルメイコトレヒチヤン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (342, 'ULTRA-PRISM', 'なし', 5, 'オススメ☆♂♀☆でぃすとぴあ', 'v1 1.15.00', 'オススメオスメステイストヒア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (343, 'Petit Rabbit''s「ご注文はうさぎですか??」', 'Koi・芳文社/ご注文は製作委員会ですか??', 0, 'Daydream café', 'v1 1.15.00', + 'DAYDREAMCAFE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (344, 'Petit Rabbit''s「ご注文はうさぎですか??」', 'Koi・芳文社/ご注文は製作委員会ですか??', 0, 'ノーポイッ!', 'v1 1.15.00', 'ノウホイツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (345, 'DALI [covered by 光吉猛修]', 'なし', 0, 'ムーンライト伝説', 'v1 1.15.00', 'ムウンライトテンセツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (348, 'Rhodanthe*', 'きんいろモザイク製作委員会', 0, 'Jumping!!', 'v1 1.15.00', 'JUMPING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (349, 'Wake Up, Girls!', 'Wake Up, Girls!製作委員会', 0, '極上スマイル', 'v1 1.15.00', 'コクシヨウスマイル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (350, '佐咲紗花', 'おりもとみまな(ヤングチャンピオン烈)/ばくおん!!製作委員会', 0, 'FEEL×ALIVE', 'v1 1.15.00', 'FEELALIVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (351, '佐倉羽音(CV.上田麗奈)、鈴乃木凜(CV.東山奈央)、天野恩紗(CV.内山夕実)、三ノ輪聖(CV.山口立花子)', 'おりもとみまな(ヤングチャンピオン烈)/ばくおん!!製作委員会', 0, + 'ぶぉん!ぶぉん!らいど・おん!', 'v1 1.15.00', 'フオンフオンライトオン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (352, 'セブンスシスターズ「Tokyo 7th シスターズ」', 'Donuts Co. Ltd.', 0, 'Star☆Glitter', 'v1 1.15.00', 'STARGLITTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (353, '777☆SISTERS「Tokyo 7th シスターズ」', 'Donuts Co. Ltd.', 0, 'H-A-J-I-M-A-R-I-U-T-A-!!', 'v1 1.15.00', + 'HAJIMARIUTA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (354, 'あべにゅうぷろじぇくと feat.佐倉紗織&井上みゆ「パチスロ快盗天使ツインエンジェル」', 'Sammy', 0, 'ラブリー☆えんじぇる!!', 'v1 1.15.00', 'ラフリウエンシエル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (355, '茶太「CLANNAD -クラナド-」', 'なし', 0, 'だんご大家族', 'v1 1.15.00', 'タンコタイカソク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (356, 'とりぷる♣ふぃーりんぐ(和久井 優/金澤まい/今村彩夏)「三者三葉」', '荒井チェリー・芳文社/三者三葉製作委員会', 0, 'クローバー♣かくめーしょん', 'v1 1.15.00', + 'クロウハウカクメウシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (357, 'とりぷる♣ふぃーりんぐ(和久井 優/金澤まい/今村彩夏)「三者三葉」', '荒井チェリー・芳文社/三者三葉製作委員会', 0, 'ぐーちょきパレード', 'v1 1.15.00', 'クウチヨキハレウト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (358, 'Lia「Angel Beats!」', 'VisualArt''s/Key/Angel Beats! Project', 0, 'My Soul,Your Beats!', 'v1 1.15.00', + 'MYSOULYOURBEATS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (359, 'Girls Dead Monster「Angel Beats!」', 'VisualArt''s/Key/Angel Beats! Project', 0, 'Thousand Enemies', + 'v1 1.15.00', 'THOUSANDENEMIES'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (360, 'Suara「うたわれるもの」', 'なし', 0, '夢想歌', 'v1 1.15.00', 'ムソウカ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (362, 'KOTOKO', 'なし', 0, 'Face of Fact', 'v1 1.15.00', 'FACEOFFACT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (363, 'ave;new feat.佐倉紗織', 'なし', 0, 'true my heart -Lovable mix-', 'v1 1.15.00', 'TRUEMYHEARTLOVABLEMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (365, 'halyosy', 'Crypton Future Media piapro', 2, '桜ノ雨', 'v1 1.15.00', 'サクラノアメ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (367, 'みきとP', 'Crypton Future Media piapro GUMI(Megpoid)', 2, 'いーあるふぁんくらぶ', 'v1 1.15.00', 'イウアルフアンクラフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (368, 'ギガ/れをる', 'Crypton Future Media piapro', 2, 'おこちゃま戦争', 'v1 1.15.00', 'オコチヤマセンソウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (369, 'ナユタン星人', 'なし', 2, 'エイリアンエイリアン', 'v1 1.15.00', 'エイリアンエイリアン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (370, '梅とら', 'なし', 2, '虎視眈々', 'v1 1.15.00', 'コシタンタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (371, 'wowaka', 'なし', 2, 'アンハッピーリフレイン', 'v1 1.15.00', 'アンハツヒウリフレイン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (372, 'ピノキオピー', 'なし', 2, 'すきなことだけでいいです', 'v1 1.15.00', 'スキナコトタケテイイテス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (373, 'ナナホシ管弦楽団', 'なし', 2, 'デリヘル呼んだら君が来た', 'v1 1.15.00', 'テリヘルヨンタラキミカキタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (374, '和田たけあき(くらげP)', '2017 VOCALOMAKETS Powered by Bumpy Factory Corporation.', 2, 'チュルリラ・チュルリラ・ダッダッダ!', + 'v1 1.15.00', 'チユルリラチユルリラタツタツタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (375, '40mP', 'なし', 2, 'だんだん早くなる', 'v1 1.15.00', 'タンタンハヤクナル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (376, 'CIRCRUSH', 'なし', 2, 'ECHO', 'v1 1.15.00', 'ECHO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (377, '幽閉サテライト', '上海アリス幻樂団', 3, '泡沫、哀のまほろば', 'v1 1.15.00', 'ウタカタアイノマホロハ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (379, '魂音泉', '上海アリス幻樂団', 3, '愛き夜道 feat. ランコ、雨天決行', 'v1 1.15.00', 'ウキヨミチFEATランコウテンケツコウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (380, '発熱巫女~ず', '上海アリス幻樂団', 3, 'Starlight Dance Floor', 'v1 1.15.00', 'STARLIGHTDANCEFLOOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (381, 'Liz Triangle', '上海アリス幻樂団', 3, 'Witches night', 'v1 1.15.00', 'WITCHESNIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (382, 'ビートまりお × Cranky', '上海アリス幻樂団', 3, 'Help me, ERINNNNNN!! -Cranky remix-', 'v1 1.15.00', + 'HELPMEERINNNNNNCRANKYREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (383, '博麗神社例大祭コラボユニット', '上海アリス幻樂団', 3, '仙酌絶唱のファンタジア', 'v1 1.15.00', 'センシヤクセツシヨウノフアンタシア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (384, '光吉猛修「東方幻想麻雀」', '上海アリス幻樂団', 3, 'キュアリアス光吉古牌 -祭-', 'v1 1.15.00', 'キユアリアスミツヨシクウハイマツリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (385, 'DJ YOSHITAKA', 'Konami Amusement', 6, 'Evans', 'v1 1.15.00', 'EVANS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (386, 'TJ.hangneil', 'なし', 6, '神威', 'v1 1.15.00', 'カムイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (388, 'EBIMAYO', 'なし', 6, 'GOODTEK', 'v1 1.15.00', 'GOODTEK'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (389, 'void (Mournfinale) feat. コツキミヤ (Gt. えば)', 'なし', 6, 'Name of oath', 'v1 1.15.00', 'NAMEOFOATH'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (390, 'syatten', 'なし', 6, 'Bird Sprite', 'v1 1.15.00', 'BIRDSPRITE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (391, 'loos feat. 柊莉杏', 'なし', 6, 'オモイヨシノ', 'v1 1.25.00', 'オモイヨシノ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (393, 'BACO', 'なし', 6, 'Dengeki Tube', 'v1 1.15.00', 'DENGEKITUBE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (394, 'セガ・ハード・ガールズ', 'TVアニメ『Hi☆sCoool! セハガール』', 0, '若い力 -SEGA HARD GIRLS MIX-', 'v1 1.15.00', + 'ワカイチカラSEGAHARDGIRLSMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (395, '「新豪血寺一族 -煩悩解放-」', 'なし', 6, 'レッツゴー!陰陽師', 'v1 1.15.00', 'レツツコウオンミヨウシ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (396, '月鈴姉妹(イロドリミドリ)', 'なし', 7, 'あねぺったん', 'v1 1.15.00', 'アネヘツタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (397, 'sampling masters MEGA「パワードリフト」', 'なし', 5, 'Like the Wind [Reborn]', 'v1 1.15.00', 'LIKETHEWINDREBORN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (398, '伊東歌詞太郎・ろん×れるりり', 'なし', 8, '天国と地獄 -言ノ葉リンネ-', 'v1 1.15.00', 'テンコクトシコクコトノハリンネ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (399, '片霧烈火', 'なし', 5, '最愛テトラグラマトン', 'v1 1.15.00', 'サイアイテトラクラマトン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (402, 'ろん×田中秀和(MONACA)', 'なし', 8, '悪戯', 'v1 1.15.00', 'イタスラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (403, '高橋菜々×岡部啓一(MONACA)', 'なし', 8, 'りばーぶ', 'v1 1.15.00', 'リハウフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (404, '柿チョコ×みきとP', 'なし', 8, 'Barbed Eye', 'v1 1.15.00', 'BARBEDEYE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (405, 'ろん×黒魔', 'なし', 8, '分からない', 'v1 1.15.00', 'ワカラナイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (406, '伊東歌詞太郎・ろん×まらしぃ', 'なし', 8, '相思創愛', 'v1 1.20.00', 'ソウシソウアイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (407, '穴山大輔', 'なし', 5, '混沌を越えし我らが神聖なる調律主を讃えよ', 'v1 1.15.00', 'コントンヲコエシワレラカシンセイナルチヨウリツシユヲタタエヨ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (409, 'Sta', 'なし', 6, 'Finite', 'v1 1.15.00', 'FINITE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (410, 'ナノ「チェインクロニクル ~ヘクセイタスの閃~」', 'SEGA/チェンクロ・フィルムパートナーズ', 0, 'MY LIBERATION', 'v1 1.15.00', 'MYLIBERATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (411, 'kemu', 'なし', 2, '地球最後の告白を', 'v1 1.15.00', 'チキユウサイコノコクハクヲ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (413, 'Sampling Masters なる&せりな(イロドリミドリ)', 'なし', 7, 'The wheel to the Night ~インド人が夢に!?~', 'v1 1.25.00', + 'THEWHEELTOTHENIGHTイントシンカユメニ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (414, 'Morrigan feat.Lily', 'なし', 5, 'We Gonna Party -Feline Groove Mix-', 'v1 1.15.00', + 'WEGONNAPARTYFELINEGROOVEMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (416, 'SoundTeMP「ラグナロクオンライン」', 'Gravity', 6, 'Through The Tower', 'v1 1.15.00', 'THROUGHTHETOWER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (417, '鈴木このみ「Re:ゼロから始める異世界生活」', '長月達平・株式会社KADOKAWA刊/Re:ゼロから始める異世界生活製作委員会', 0, 'Redo', 'v1 1.15.00', 'REDO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (419, 'fourfolium「NEW GAME!」', 'NEW GAME!', 0, 'SAKURAスキップ', 'v1 1.20.00', 'SAKURAスキツフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (420, 'fourfolium「NEW GAME!」', 'NEW GAME!', 0, 'Now Loading!!!!', 'v1 1.20.00', 'NOWLOADING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (421, 'RADWIMPS「君の名は。」', '君の名は。', 0, '前前前世', 'v1 1.20.00', 'センセンセンセ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (422, '藍井エイル', 'なし', 0, 'MEMORIA', 'v1 1.20.00', 'MEMORIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (424, 'JaccaPoP', 'なし', 0, 'MIRU key way', 'v1 1.20.00', 'MIRUKEYWAY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (426, '幽閉サテライト', '上海アリス幻樂団', 3, '華鳥風月', 'v1 1.20.00', 'カチヨウフウケツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (427, '豚乙女', '上海アリス幻樂団', 3, '儚きもの人間', 'v1 1.20.00', 'ハカナキモノニンケン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (430, '御形アリシアナオンザイロドリマンション(イロドリミドリ)', 'なし', 7, 'GO!GO!ラブリズム♥ ~あーりん書類審査通過記念Ver.~', 'v1 1.20.00', + 'GOGOラフリスムアウリンシヨルイシンサツウカキネンVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (431, 'イロドリミドリ', 'なし', 7, 'Session High⤴', 'v1 1.20.00', 'SESSIONHIGH'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (432, 'ナユタン星人', 'なし', 5, '光線チューニング', 'v1 1.20.00', 'コウセンチユウニンク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (433, '青島探偵事務所器楽捜査部B担', 'なし', 5, '立川浄穢捕物帳', 'v1 1.20.00', 'タチカワシヨウエトリモノチヨウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (434, 'baker', 'なし', 5, '眠れぬ夜君を想フ', 'v1 1.20.00', 'ネムレヌヨキミヲオモフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (435, '鬱P feat.000', 'なし', 5, 'JIGOKU STATION CENTRAL GATE', 'v1 1.20.00', 'JIGOKUSTATIONCENTRALGATE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (436, 'owl*tree feat.awao*tree', 'なし', 5, 'PinqPiq', 'v1 1.20.00', 'PINQPIQ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (437, 'bermei.inazawa', 'なし', 5, 'トリスメギストス', 'v1 1.20.00', 'トリスメキストス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (438, '魂音泉', 'なし', 5, 'WE GOTTA SOUL', 'v1 1.20.00', 'WEGOTTASOUL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (439, '幽閉サテライト', 'なし', 5, '哀しみ集め', 'v1 1.20.00', 'カナシミアツメ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (440, 't+pazolite feat.ななひら', 'なし', 5, 'キラメケ→Shoot it Now!', 'v1 1.20.00', 'キラメケSHOOTITNOW'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (441, 'Sampling Masters MEGA', 'なし', 5, 'Kattobi KEIKYU Rider', 'v1 1.20.00', 'KATTOBIKEIKYURIDER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (442, 't+pazolite', 'なし', 5, 'Glorious Crown (tpz over-Over-OVERCUTE REMIX)', 'v1 1.20.00', + 'GLORIOUSCROWNTPZOVEROVEROVERCUTEREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (444, 'tilt-six', 'なし', 2, 'エレクトロサチュレイタ', 'v1 1.20.00', 'エレクトロサチユレイタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (445, 'ゆよゆっペ/meola', 'Crypton Future Media piapro', 2, 'Palette', 'v1 1.20.00', 'PALETTE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (446, 'まらしぃ', 'Crypton Future Media piapro', 2, 'アマツキツネ', 'v1 1.20.00', 'アマツキツネ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (447, 'ナユタン星人', 'なし', 2, 'パーフェクト生命', 'v1 1.20.00', 'ハウフエクトセイメイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (448, 'きくお', 'なし', 2, 'のぼれ!すすめ!高い塔', 'v1 1.20.00', 'ノホレススメタカイトウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (449, '鬱P', 'Crypton Future Media piapro', 2, '害虫', 'v1 1.20.00', 'カイチユウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (454, 'MOSAIC.WAV', 'なし', 0, 'ガチャガチャきゅ~と・ふぃぎゅ@メイト', 'v1 1.20.00', 'カチヤカチヤキユウトフイキユアツトメイト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (455, '電気式華憐音楽集団', 'なし', 0, 'Vampire', 'v1 1.20.00', 'VAMPIRE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (456, 'Silver Forest', '上海アリス幻樂団', 3, 'ケロ⑨destiny', 'v1 1.20.00', 'ケロ9DESTINY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (457, 'NJK Record (3L&maria♂polo)', '上海アリス幻樂団', 3, 'Last Moments', 'v1 1.20.00', 'LASTMOMENTS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (458, '豚乙女', '上海アリス幻樂団', 3, '風に乗せた願い', 'v1 1.20.00', 'カセニノセタネカイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (459, '魂音泉', '上海アリス幻樂団', 3, '天狗の落とし文 feat. ytr', 'v1 1.20.00', 'テンクノオトシフミFEATYTR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (460, 'あ~るの~と(いえろ~ぜぶら&電開製作所)', '上海アリス幻樂団', 3, '星色夜空', 'v1 1.25.00', 'ホシイロヨソラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (462, 'Halozy', '上海アリス幻樂団', 3, '物凄い勢いでけーねが物凄いうた', 'v1 1.25.00', 'モノスコイイキオイテケウネカモノスコイウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (463, 'Junk', 'なし', 5, 'Wake up Dreamer', 'v1 1.20.00', 'WAKEUPDREAMER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (464, 'void (Mournfinale)', 'なし', 5, 'World Vanquisher', 'v1 1.20.00', 'WORLDVANQUISHER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (465, 'LeaF', 'なし', 5, 'macrocosmos', 'v1 1.25.00', 'MACROCOSMOS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (466, 'Powerless feat.kakichoco', 'なし', 5, 'Iudicium', 'v1 1.20.00', 'IUDICIUM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (467, 'q/stol', 'なし', 5, 'Twice up Scenery', 'v1 1.20.00', 'TWICEUPSCENERY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (468, '月鈴 那知(CV:今村 彩夏)', 'なし', 7, '奏者はただ背中と提琴で語るのみ', 'v1 1.20.00', 'ソウシヤハタタセナカトハイオリンテカタルノミ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (469, 'Tatsh', 'なし', 5, 'Xevel', 'v1 1.20.00', 'XEVEL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (470, 'Drop&祇羽 feat. 葉月ゆら「太鼓の達人」より', 'なし', 6, 'セイクリッド ルイン', 'v1 1.20.00', 'セイクリツトルイン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (471, 'cosMo VS dj TAKA「SOUND VOLTEX」より', 'なし', 6, '極圏', 'v1 1.20.00', 'キヨクケン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (472, 'MASAKI(ZUNTATA)「グルーヴコースター 3EX ドリームパーティー」より', 'なし', 6, 'Scarlet Lance', 'v1 1.20.00', 'SCARLETLANCE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (473, 'ChouCho', 'なし', 0, 'DreamRiser', 'v1 1.30.00', 'DREAMRISER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (475, '讃州中学勇者部(照井春佳、三森すずこ、内山夕実、黒沢ともよ、長妻樹里)「結城友奈は勇者である」', 'Project 2H', 0, 'ホシトハナ', 'v1 1.20.00', 'ホシトハナ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (476, 'Dixie Flatline', 'Crypton Future Media piapro', 2, 'Just Be Friends', 'v1 1.20.00', 'JUSTBEFRIENDS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (477, 'iroha(sasaki)/kuma(alfred)', 'Crypton Future Media piapro', 2, '炉心融解', 'v1 1.20.00', 'ロシンユウカイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (478, 'halyosy', 'Crypton Future Media piapro', 2, 'Fire◎Flower', 'v1 1.20.00', 'FIREFLOWER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (479, 'シンP', 'Crypton Future Media piapro', 2, '卑怯戦隊うろたんだー', 'v1 1.20.00', 'ヒキヨウセンタイウロタンタウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (481, '小仏 凪(CV:佐倉 薫)', 'なし', 7, 'イロトリドリのメロディ', 'v1 1.20.00', 'イロトリトリノメロテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (482, 'Hi☆sCoool! セハガール', 'TVアニメ『Hi☆sCoool! セハガール』', 0, 'セハガガガンバッちゃう!!', 'v1 1.20.00', 'セハカカカンハツチヤウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (483, '光吉猛修「バーニングレンジャー」', 'なし', 6, 'Burning Hearts ~炎のANGEL~', 'v1 1.20.00', 'BURNINGHEARTSホノオノANGEL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (485, 'クーナ(CV.喜多村英梨)「PHANTASY STAR ONLINE 2」', 'SEGA', 0, 'Our Fighting', 'v1 1.20.00', 'OURFIGHTING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (486, 'Hiro「maimai」より', 'なし', 5, 'VERTeX', 'v1 1.20.00', 'VERTEX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (487, '箱部 なる(CV:M・A・O)', 'なし', 7, '-OutsideR:RequieM-', 'v1 1.20.00', 'OUTSIDERREQUIEM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (488, '月鈴姉妹(イロドリミドリ)', 'なし', 7, '夢と夢~あの日のメロディ~', 'v1 1.20.00', 'ユメトユメアノヒノメロテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (489, 'OSTER project feat.ジェム', 'なし', 5, 'La Baguette Magique', 'v1 1.20.00', 'LABAGUETTEMAGIQUE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (490, 'HALFBY', 'なし', 5, 'bubble attack', 'v1 1.20.00', 'BUBBLEATTACK'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (491, 'うたたP', 'なし', 5, 'The Darkness of Valhalla', 'v1 1.25.00', 'THEDARKNESSOFVALHALLA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (492, '40mP feat.シャノ', 'なし', 5, '時の冒険者', 'v1 1.20.00', 'トキノホウケンシヤ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (493, 'Crusher-P', 'なし', 5, 'Rendezvous', 'v1 1.20.00', 'RENDEZVOUS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (494, 'doriko feat.VALSHE', 'なし', 5, 'EXECUTOR', 'v1 1.20.00', 'EXECUTOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (495, 'Suara「うたわれるもの 偽りの仮面」', 'うたわれるもの偽りの仮面製作委員会', 0, '不安定な神様', 'v1 1.20.00', 'フアンテイナカミサマ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (496, 'HiTECH NINJA', 'なし', 5, 'Hyper Active', 'v1 1.20.00', 'HYPERACTIVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (497, 'SOUND HOLIC feat. Nana Takahashi', 'なし', 5, 'L''épilogue', 'v1 1.20.00', 'LEPILOGUE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (498, 'EB (aka EarBreaker)', 'なし', 5, 'D✪N’T ST✪P R✪CKIN’ ~[✪_✪] MIX~', 'v1 1.20.00', 'DONTSTOPROCKINROBOMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (499, 'Project Grimoire', 'なし', 5, 'Caliburne ~Story of the Legendary sword~', 'v1 1.20.00', + 'CALIBURNESTORYOFTHELEGENDARYSWORD'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (500, '御形 アリシアナ(CV:福原 綾香)', 'なし', 7, 'プリズム', 'v1 1.20.00', 'フリスム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (501, 'Suara「うたわれるもの 二人の白皇」', 'AQUAPLUS', 0, '星灯', 'v1 1.20.00', 'ヒカリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (502, '真理絵', 'なし', 0, 'Clover Heart''s', 'v1 1.20.00', 'CLOVERHEARTS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (503, 'ろん×Junky', 'なし', 2, 'スイートマジック', 'v1 1.20.00', 'スイウトマシツク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (504, 'LeaF', '上海アリス幻樂団', 3, 'Calamity Fortune', 'v1 1.20.00', 'CALAMITYFORTUNE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (505, 'あ~るの~と(いえろ~ぜぶら)', '上海アリス幻樂団', 3, 'Melody!', 'v1 1.20.00', 'MELODY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (506, '-45', 'なし', 6, 'G e n g a o z o', 'v1 1.20.00', 'GENGAOZO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (509, '水樹奈々「戦姫絶唱シンフォギアG」', 'Project シンフォギアG', 0, 'Vitalization', 'v1 1.20.00', 'VITALIZATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (512, 'ぬゆり', 'なし', 2, 'フラジール', 'v1 1.20.00', 'フラシウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (513, 'Lemm', 'なし', 2, 'Absolunote', 'v1 1.20.00', 'ABSOLUNOTE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (514, 'hanzo', 'なし', 2, '木彫り鯰と右肩ゾンビ', 'v1 1.20.00', 'キホリナマストミキカタソンヒ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (515, 'GigaReol', 'なし', 2, 'ヒビカセ', 'v1 1.25.00', 'ヒヒカセ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (516, 'niki', 'なし', 2, 'WAVE', 'v1 1.20.00', 'WAVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (517, '小野隊長とJimmy親分', 'なし', 5, '高気圧ねこロック', 'v1 1.30.00', 'コウキアツネコロツク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (522, '水谷瑠奈(NanosizeMir)「Rewrite」', 'なし', 0, 'Philosophyz', 'v1 1.20.00', 'PHILOSOPHYZ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (523, '立花響(悠木碧)、風鳴翼(水樹奈々)、雪音クリス(高垣彩陽)、マリア・カデンツァヴナ・イヴ(日笠陽子)、月読調(南條愛乃)、暁切歌(茅野愛衣)、天羽奏(高山みなみ)「戦姫絶唱シンフォギアG」', + 'Project シンフォギアG', 0, '虹色のフリューゲル', 'v1 1.20.00', 'ニシイロノフリユウケル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (524, 'カラフル・サウンズ・ポート', 'なし', 6, 'ETERNAL DRAIN', 'v1 1.20.00', 'ETERNALDRAIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (525, 'MYTH & ROID「Re:ゼロから始める異世界生活」', '長月達平・株式会社KADOKAWA刊/Re:ゼロから始める異世界生活製作委員会', 0, 'Paradisus-Paradoxum', + 'v1 1.20.00', 'PARADISUSPARADOXUM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (526, 'どうぶつビスケッツ×PPP「けものフレンズ」', 'けものフレンズ', 0, 'ようこそジャパリパークへ', 'v1 1.20.00', 'ヨウコソシヤハリハウクヘ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (528, 'IOSYSと愉快な⑨周年フレンズ', '上海アリス幻樂団', 3, 'チルノのパーフェクトさんすう教室 ⑨周年バージョン', 'v1 1.20.00', + 'チルノノハウフエクトサンスウキヨウシツ9シユウネンハウシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (529, '逢坂大河(CV:釘宮理恵)・櫛枝実乃梨(CV:堀江由衣)・川嶋亜美(CV:喜多村英梨)「とらドラ!」', 'とらドラ!', 0, 'プレパレード', 'v1 1.20.00', 'フレハレウト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (530, '逢坂大河(CV:釘宮理恵)・櫛枝実乃梨(CV:堀江由衣)・川嶋亜美(CV:喜多村英梨)「とらドラ!」', 'とらドラ!', 0, 'オレンジ', 'v1 1.20.00', 'オレンシ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (531, '逢坂大河(CV:釘宮理恵)・川嶋亜美(CV:喜多村英梨)「とらドラ!」', 'とらドラ!', 0, 'ホーリーナイト', 'v1 1.20.00', 'ホウリウナイト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (532, 'クーナ(CV.喜多村英梨)「PHANTASY STAR ONLINE 2」', 'SEGA', 0, 'Cosmic twinkle star', 'v1 1.20.00', + 'COSMICTWINKLESTAR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (533, 'クーナ(CV.喜多村英梨)「PHANTASY STAR ONLINE 2」', 'SEGA', 0, '終わりなき物語', 'v1 1.20.00', 'オワリナキモノカタリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (534, 'kanone', 'なし', 5, 'BlazinG AIR', 'v1 1.25.00', 'BLAZINGAIR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (535, 'shu-t', 'なし', 2, 'Change me', 'v1 1.20.00', 'CHANGEME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (537, '平野 綾、茅原実里、後藤邑子 TVアニメ「涼宮ハルヒの憂鬱」', 'SOS団', 0, 'ハレ晴レユカイ', 'v1 1.20.00', 'ハレハレユカイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (538, 'WAiKURO', 'なし', 5, 'AMAZING MIGHTYYYY!!!!', 'v1 1.20.00', 'AMAZINGMIGHTYYYY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (540, 'ハチ', 'REISSUE RECORDS', 2, '砂の惑星 feat. HATSUNE MIKU', 'v1 1.20.00', 'スナノワクセイFEATHATSUNEMIKU'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (541, 'ClariS「エロマンガ先生」', 'エロマンガ先生', 0, 'ヒトリゴト', 'v1 1.25.00', 'ヒトリコト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (542, 'TrySail「エロマンガ先生」', 'エロマンガ先生', 0, 'adrenaline!!!', 'v1 1.25.00', 'ADRENALINE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (544, 'らびりんず【千矢(CV.原田彩楓)&紺(CV.本渡 楓)&小梅(CV.久保ユリカ)&ノノ(CV.佳村はるか)】「うらら迷路帖」', 'なし', 0, '夢路らびりんす', 'v1 1.25.00', + 'ユメシラヒリンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (545, 'A応P「おそ松さん」', 'おそ松さん製作委員会', 0, '全力バタンキュー', 'v1 1.25.00', 'センリヨクハタンキユウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (546, 'ZAQ「劇場版トリニティセブン」', 'なし', 0, 'Last Proof', 'v1 1.25.00', 'LASTPROOF'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (547, 'kemu', 'なし', 2, '拝啓ドッペルゲンガー', 'v1 1.25.00', 'ハイケイトツヘルケンカウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (548, 'LeaF', 'なし', 6, 'Doppelganger', 'v1 1.25.00', 'DOPPELGANGER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (549, '幽閉サテライト', '上海アリス幻樂団', 3, '色は匂へど散りぬるを', 'v1 1.25.00', 'イロハニオヘトチリヌルヲ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (550, '天王洲 なずな(CV:山本 彩乃)', 'なし', 7, 'ポルカドット', 'v1 1.25.00', 'ホルカトツト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (551, 'xi', 'なし', 5, 'Sparking Revolver', 'v1 1.25.00', 'SPARKINGREVOLVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (552, 'Masahiro “Godspeed” Aoki', 'なし', 5, 'Gate of Doom', 'v1 1.25.00', 'GATEOFDOOM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (553, 'ナユタン星人「#コンパス」', 'コンパス', 2, 'ダンスロボットダンス', 'v1 1.25.00', 'タンスロホツトタンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (554, 'かいりきベア「#コンパス」', 'コンパス', 2, 'アルカリレットウセイ', 'v1 1.25.00', 'アルカリレツトウセイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (555, 'ポリスピカデリー「#コンパス」', 'コンパス', 2, 'キレキャリオン', 'v1 1.25.00', 'キレキヤリオン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (556, 'niki「#コンパス」', 'コンパス', 2, 'グラーヴェ', 'v1 1.25.00', 'クラウウエ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (557, 'PolyphonicBranch「#コンパス」', 'レトロマニア狂想曲', 2, 'レトロマニア狂想曲', 'v1 1.25.00', 'レトロマニアキヨウソウキヨク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (558, 'イロドリミドリ', 'なし', 7, 'イロドリミドリ杯花映塚全一決定戦公式テーマソング『ウソテイ』', 'v1 1.25.00', + 'イロトリミトリハイカエイツカセンイチケツテイセンコウシキテウマソンクウソテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (559, 'NAOKI underground', 'なし', 5, 'otorii INNOVATED -[i]3-', 'v1 1.25.00', 'OTORIIINNOVATEDI3'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (560, 'SPRiNGS「温泉むすめ」', '温泉むすめ', 0, '未来イマジネーション!', 'v1 1.25.00', 'ミライイマシネウシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (561, 'SPRiNGS「温泉むすめ」', '温泉むすめ', 0, '純情-SAKURA-', 'v1 1.25.00', 'シユンシヨウSAKURA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (562, 'SPRiNGS「温泉むすめ」', '温泉むすめ', 0, '青春サイダー', 'v1 1.25.00', 'セイシユンサイタウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (564, '明坂 芹菜(CV:新田 恵海)', 'なし', 7, 'Very! Merry!! Session!!!', 'v1 1.25.00', 'VERYMERRYSESSION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (565, 'happy machine', 'なし', 5, 'popcorn', 'v1 1.25.00', 'POPCORN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (566, 'Tomggg', 'なし', 5, 'Pastel Party', 'v1 1.25.00', 'PASTELPARTY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (567, 'Yunomi feat.nicamoq', 'なし', 5, 'はちみつアドベンチャー', 'v1 1.25.00', 'ハチミツアトヘンチヤウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (568, 'YUC''e', 'なし', 5, 'CHOCOLATE BOMB!!!!', 'v1 1.25.00', 'CHOCOLATEBOMB'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (569, 'Pa''s Lam System', 'なし', 5, 'Twilight', 'v1 1.25.00', 'TWILIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (570, 'cosMo@暴走P', 'なし', 5, 'ねぇ、壊れタ人形ハ何処へ棄テらレるノ?', 'v1 1.25.00', 'ネエコワレタニンキヨウハトコヘステラレルノ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (572, '暁Records', '上海アリス幻樂団', 3, 'WARNING×WARNING×WARNING', 'v1 1.25.00', 'WARNINGWARNINGWARNING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (573, 'SOUND HOLIC feat. Nana Takahashi', '上海アリス幻樂団', 3, 'Grip & Break down !!', 'v1 1.30.00', 'GRIPBREAKDOWN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (574, 'パトリシア・オブ・エンド(CV:高森奈津美)・黒木未知(CV:仙台エリ)・夕莉シャチ(CV:浅川悠)・明日原ユウキ(CV:種﨑敦美)「ノラと皇女と野良猫ハート」', 'ノラと皇女と野良猫ハート', 0, + 'ネ!コ!', 'v1 1.25.00', 'ネコ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (575, 'ハチ', 'マトリョシカ', 2, 'マトリョシカ', 'v1 1.25.00', 'マトリヨシカ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (577, '米津玄師', 'ゴーゴー幽霊船', 0, 'ゴーゴー幽霊船', 'v1 1.25.00', 'コウコウユウレイセン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (578, 'Grand Thaw / Rigel Theatre', 'なし', 6, 'La Flesvelka', 'v1 1.25.00', 'LAFLESVELKA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (579, 'Baby''s breath「天使の3P!」', '天使の3P!', 0, '羽ばたきのバースデイ', 'v1 1.25.00', 'ハハタキノハウステイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (580, 'Baby''s breath「天使の3P!」', '天使の3P!', 0, '楔', 'v1 1.25.00', 'クサヒ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (581, 'ターニャ・デグレチャフ(CV.悠木碧)「幼女戦記」', '幼女戦記製作委員会', 0, 'Los! Los! Los!', 'v1 1.25.00', 'LOSLOSLOS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (582, 'いとうかなこ「CHAOS;CHILD」', 'なし', 0, 'Uncontrollable', 'v1 1.25.00', 'UNCONTROLLABLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (583, '電気式華憐音楽集団', 'なし', 0, '碧き孤島のアングゥィス', 'v1 1.25.00', 'アオキコトウノアンクウイス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (585, 'あべにゅうぷろじぇくと feat.天月めぐる&如月すみれ「ツインエンジェルBREAK」', 'Sammy', 0, 'ラブって♡ジュエリー♪えんじぇる☆ブレイク!!', 'v1 1.25.00', + 'ラフツテシユエリウエンシエルフレイク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (586, 'みるくちゃん「ツインエンジェルBREAK」', 'Sammy', 0, 'ぶれいくるみるくらぶ!', 'v1 1.25.00', 'フレイクルミルクラフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (587, '月鈴 白奈(CV:高野 麻里佳)', 'なし', 7, 'クレッシェンド・ストーリー', 'v1 1.25.00', 'クレツシエントストウリウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (588, '霜月はるか', 'なし', 5, 'Sentimental Snow', 'v1 1.25.00', 'SENTIMENTALSNOW'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (589, 'solfa feat.茶太', 'なし', 5, 'サンシャインサマー☆夏期講習', 'v1 1.25.00', 'サンシヤインサマウカキコウシユウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (590, '片霧烈火オンザみんマンション', 'なし', 5, 'NYAN-NYA, More! ラブシャイン、Chu♥', 'v1 1.25.00', 'NYANNYAMOREラフシヤインCHU'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (591, 'ガヴリール(富田美憂),ヴィーネ(大西沙織),サターニャ(大空直美),ラフィエル(花澤香菜)「ガヴリールドロップアウト」', 'ガヴリールドロップアウト', 0, 'ガヴリールドロップキック', + 'v1 1.25.00', 'カウリウルトロツフキツク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (592, 'れるりり', 'なし', 2, '厨病激発ボーイ', 'v1 1.25.00', 'チユウヒヨウケキハツホウイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (593, '骨盤P', 'Crypton Future Media piapro', 2, 'StargazeR', 'v1 1.25.00', 'STARGAZER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (594, 'DECO*27', 'Crypton Future Media piapro', 2, 'ゴーストルール', 'v1 1.25.00', 'コウストルウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (595, 'ピノキオピー', 'Crypton Future Media piapro', 2, '頓珍漢の宴', 'v1 1.25.00', 'トンチンカンノエン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (597, 'Machico「この素晴らしい世界に祝福を!2」', 'この素晴らしい世界に祝福を!2', 0, 'TOMORROW', 'v1 1.25.00', 'TOMORROW'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (599, 'Carotte☆(ripple&めらみぽっぷ)', 'なし', 6, 'Chocolate Happy', 'v1 1.25.00', 'CHOCOLATEHAPPY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (600, '月鈴 那知(ヴァイオリン) 伴奏:イロドリミドリ', 'なし', 7, '管弦楽組曲 第3番 ニ長調「第2曲(G線上のアリア)」BWV.1068-2', 'v1 1.25.00', + 'カンケンカククミキヨクタイ3ハンニチヨウチヨウタイ2キヨクGセンシヨウノアリアBWV10682'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (601, 'なずな師匠&小仏亭ちゃんなぎ(イロドリミドリ)', 'なし', 7, 'ここで一席! Oshama Scramble!', 'v1 1.25.00', 'ココテイツセキOSHAMASCRAMBLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (605, 'A-One', '上海アリス幻樂団', 3, 'Scream out! -CHUNITHM Tuning-', 'v1 1.25.00', 'SCREAMOUTCHUNITHMTUNING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (606, '3L (NJK Record)', '上海アリス幻樂団', 3, 'Spring of Dreams', 'v1 1.25.00', 'SPRINGOFDREAMS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (607, 'Tatsh feat. 月子', '上海アリス幻樂団', 3, 'Floating Darkness', 'v1 1.25.00', 'FLOATINGDARKNESS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (609, '劇団ひととせ「ひなこのーと」', 'ひなこのーと', 0, 'あ・え・い・う・え・お・あお!!', 'v1 1.25.00', 'アエイウエオアオ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (610, '劇団ひととせ「ひなこのーと」', 'ひなこのーと', 0, 'かーてんこーる!!!!!', 'v1 1.25.00', 'カウテンコウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (611, 'セブンスシスターズ「Tokyo 7th シスターズ」', 'SEVENTH HAVEN', 0, 'SEVENTH HAVEN', 'v1 1.25.00', 'SEVENTHHAVEN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (612, 'Lia「Charlotte」', 'なし', 0, 'Bravely You', 'v1 1.25.00', 'BRAVELYYOU'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (613, 'L.I.N.K.s(相坂優歌/石原 舞/高橋李依/生田善子/山本希望)「アンジュ・ヴィエルジュ」', 'なし', 0, 'Link with U', 'v1 1.25.00', 'LINKWITHU'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (614, 'イロドリミドリ', 'なし', 7, 'Change Our MIRAI! (Our 7 Lights)', 'v1 1.25.00', 'CHANGEOURMIRAIOUR7LIGHTS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (615, 'M2U', 'なし', 5, 'Dual Fractal', 'v1 1.25.00', 'DUALFRACTAL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (616, 'Taishi', 'なし', 5, 'Drivessover', 'v1 1.25.00', 'DRIVESSOVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (617, 'cybermiso', 'なし', 5, 'Surveiller et punir', 'v1 1.25.00', 'SURVEILLERETPUNIR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (618, '光吉猛修 VS 穴山大輔', 'なし', 5, '業 -善なる神とこの世の悪について-', 'v1 1.25.00', 'コウセンナルカミトコノヨノアクニツイテ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (619, 'Cres.', 'なし', 6, 'End Time', 'v1 1.30.00', 'ENDTIME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (620, '高宮なすの(CV:鳴海杏子)「てーきゅう」', '亀井戸高校テニス部', 0, 'メニメニマニマニ', 'v1 1.25.00', 'メニメニマニマニ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (621, 'トマリン(CV:小倉唯)「てーきゅう」', '亀井戸高校テニス部', 0, 'ニホンゴワカリマセン', 'v1 1.25.00', 'ニホンコワカリマセン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (622, 'RO-KYU-BU!「ロウきゅーぶ!SS」', 'なし', 0, 'Get goal!', 'v1 1.25.00', 'GETGOAL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (623, 'RO-KYU-BU!「ロウきゅーぶ!SS」', 'なし', 0, 'Rolling Rolling!', 'v1 1.25.00', 'ROLLINGROLLING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (624, '雀が原中学卓球部「灼熱の卓球娘」', 'なし', 0, '灼熱スイッチ', 'v1 1.25.00', 'シヤクネツスイツチ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (625, 'DETRO a.k.a ルゼ', 'なし', 6, 'volcanic', 'v1 1.25.00', 'VOLCANIC'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (626, 'wowaka', 'なし', 2, 'アンノウン・マザーグース', 'v1 1.25.00', 'アンノウンマサウクウス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (627, '魂音泉', '上海アリス幻樂団', 3, 'ゆけむり魂温泉 II', 'v1 1.25.00', 'ユケムリタマオンセンII'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (628, 'ビートまりお(COOL&CREATE)', '上海アリス幻樂団', 3, 'サドマミホリック', 'v1 1.25.00', 'サトマミホリツク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (629, 'Kai「Wonderland Wars」', 'SEGA', 6, 'Candyland Symphony', 'v1 1.25.00', 'CANDYLANDSYMPHONY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (631, 'Storyteller', 'Crypton Future Media piapro', 2, '初音ミクの激唱', 'v1 1.25.00', 'ハツネミクノケキシヨウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (632, 'Silver Forest', '上海アリス幻樂団', 3, 'つるぺったん', 'v1 1.25.00', 'ツルヘツタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (633, 'Sou×マチゲリータ', 'なし', 8, '咲キ誇レ常世ノ華', 'v1 1.25.00', 'サキホコレトコヨノハナ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (635, 'D.watt feat. ビートまりお (COOL&CREATE)', '上海アリス幻樂団', 3, 'チルノおかんのさいきょう☆バイブスごはん', 'v1 1.25.00', + 'チルノオカンノサイキヨウハイフスコハン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (636, 'Last Note.', 'なし', 2, '放課後ストライド', 'v1 1.25.00', 'ホウカコストライト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (637, 'ゆずひこ feat.めらみぽっぷ', '上海アリス幻樂団', 3, 'きゅうりバーにダイブ', 'v1 1.25.00', 'キユウリハウニタイフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (638, '清水一人(歌:近藤佳奈子)「新甲虫王者ムシキング」', 'SEGA', 6, 'むしとりのうた', 'v1 1.25.00', 'ムシトリノウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (639, 'fripSide「とある科学の超電磁砲S」', 'とある科学の超電磁砲S', 0, 'sister''s noise', 'v1 1.30.00', 'SISTERSNOISE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (640, '上坂すみれ「ポプテピピック」', 'ポプテピピック', 0, 'POP TEAM EPIC', 'v1 1.30.00', 'POPTEAMEPIC'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (642, 'fhána', '青空のラプソディ', 0, '青空のラプソディ', 'v1 1.30.00', 'アオソラノラフソテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (644, 'PAULA TERRY', 'Butterfly -CHUNITHM edit-', 0, 'Butterfly -CHUNITHM edit-', 'v1 1.30.00', + 'BUTTERFLYCHUNITHMEDIT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (645, 'Machico「りゅうおうのおしごと!」', 'りゅうおうのおしごと!', 0, 'コレカラ', 'v1 1.30.00', 'コレカラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (646, 'Suara「うたわれるもの斬」', 'なし', 0, '理燃-コトワリ-', 'v1 1.30.00', 'コトワリ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (647, '鈴木このみ「Summer Pockets」', 'アルカテイル', 0, 'アルカテイル', 'v1 1.30.00', 'アルカテイル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (648, 'saya「宇宙よりも遠い場所」', '宇宙よりも遠い場所', 0, 'The Girls Are Alright!', 'v1 1.30.00', 'THEGIRLSAREALRIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (649, 'StylipS', 'Licensed by Lantis Records/BANDAI NAMCO Arts Inc.', 0, 'MIRACLE RUSH', 'v1 1.30.00', + 'MIRACLERUSH'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (650, '橋本みゆき', 'Licensed by Lantis Records/BANDAI NAMCO Arts Inc.', 0, 'Futuristic Player', 'v1 1.30.00', + 'FUTURISTICPLAYER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (651, 'OxT「オーバーロード」', 'オーバーロード', 0, 'Clattanoia', 'v1 1.30.00', 'CLATTANOIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (652, 'MYTH & ROID「オーバーロード」', 'オーバーロード', 0, 'L.L.L.', 'v1 1.30.00', 'LLL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (653, 'じん×kemu', 'Crypton Future Media piapro', 2, 'ミリオン/ワンズ', 'v1 1.30.00', 'ミリオンワンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (654, '日向電工', 'なし', 2, 'ブリキノダンス', 'v1 1.30.00', 'フリキノタンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (655, 'ねじ式', '2017 VOCALOMAKETS Powered by Bumpy Factory Corporation.', 2, 'フリィダム ロリィタ', 'v1 1.30.00', + 'フリイタムロリイタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (656, 'Orangestar', 'なし', 2, 'DAYBREAK FRONTLINE', 'v1 1.30.00', 'DAYBREAKFRONTLINE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (657, 'みきとP', 'なし', 2, 'バレリーコ', 'v1 1.30.00', 'ハレリウコ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (658, 'ろん', 'なし', 2, 'おちゃめ機能', 'v1 1.30.00', 'オチヤメキノウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (659, 'まふまふ', 'なし', 2, '輪廻転生', 'v1 1.30.00', 'リンネテンセイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (660, 'バルーン', 'なし', 2, 'シャルル', 'v1 1.30.00', 'シヤルル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (662, '石鹸屋', '上海アリス幻樂団', 3, '地獄の端にて君を待つ', 'v1 1.30.00', 'シコクノハシニテキミヲマツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (663, 'Silver Forest', '上海アリス幻樂団', 3, '聖少女サクリファイス', 'v1 1.30.00', 'セイシヨウシヨサクリフアイス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (664, 'ARM+夕野ヨシミ (IOSYS) feat.藤枝あかね', '上海アリス幻樂団', 3, '究極焼肉レストラン!お燐の地獄亭!', 'v1 1.30.00', + 'キユウキヨクヤキニクレストランオリンノシコクテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (665, 'NJK Record', '上海アリス幻樂団', 3, 'WARNING!', 'v1 1.30.00', 'WARNING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (666, 'DiGiTAL WiNG feat. 花たん', '上海アリス幻樂団', 3, 'Paranoia', 'v1 1.30.00', 'PARANOIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (667, 'ビートまりお × Cranky', '上海アリス幻樂団', 3, 'ナイト・オブ・ナイツ (Cranky Remix)', 'v1 1.30.00', 'ナイトオフナイツCRANKYREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (668, 'ノマ', 'Brain Power', 6, 'Brain Power', 'v1 1.30.00', 'BRAINPOWER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (669, 'Cranky VS MASAKI「グルーヴコースター 3EX ドリームパーティー」より', 'なし', 6, 'ouroboros -twin stroke of the end-', 'v1 1.30.00', + 'OUROBOROSTWINSTROKEOFTHEEND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (670, 'BEMANI Sound Team "TAG"「SOUND VOLTEX」より', 'なし', 6, 'GERBERA', 'v1 1.30.00', 'GERBERA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (671, 'steμ feat.siroa「太鼓の達人」より', 'なし', 6, 'Taiko Drum Monster', 'v1 1.30.00', 'TAIKODRUMMONSTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (672, '目黒将司 Remixed by 小西利樹「ペルソナ5 ダンシング・スターナイト」', 'ATLUS', 6, 'Blooming Villain (ATLUS Konishi Remix)', + 'v1 1.30.00', 'BLOOMINGVILLAINATLUSKONISHIREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (673, '小塚良太「ペルソナ5 ダンシング・スターナイト」', 'ATLUS', 6, 'GROOVY', 'v1 1.30.00', 'GROOVY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (674, '目黒将司「ペルソナ3 ダンシング・ムーンナイト」', 'ATLUS', 6, 'Mass Destruction ("P3" + "P3F" ver.)', 'v1 1.30.00', + 'MASSDESTRUCTIONP3P3FVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (675, '目黒将司 Remixed by 浅倉大介「ペルソナ3 ダンシング・ムーンナイト」', 'ATLUS', 6, '全ての人の魂の戦い (Daisuke Asakura Remix)', 'v1 1.30.00', + 'スヘテノヒトノタマシイノタタカイDAISUKEASAKURAREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (676, 'Silentroom', 'なし', 6, 'Nhelv', 'v1 1.30.00', 'NHELV'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (677, 'モリモリあつし', 'なし', 6, 'PUPA', 'v1 1.30.00', 'PUPA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (678, 'xi', 'なし', 6, 'Parousia', 'v1 1.30.00', 'PAROUSIA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (679, 'papyrus (orangentle)', 'なし', 6, 'Papyrus', 'v1 1.30.00', 'PAPYRUS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (681, '削除 feat. void (Mournfinale)', 'なし', 6, 'Black Lair', 'v1 1.30.00', 'BLACKLAIR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (682, '山本美禰子「トトリのアトリエ ~アーランドの錬金術士2~」', 'アトリエ ~アーランドの錬金術士~', 6, 'Pilgrimage', 'v1 1.30.00', 'PILGRIMAGE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (683, '五十嵐 撫子(CV:花井 美春)', 'なし', 7, 'オーケー? オーライ!', 'v1 1.30.00', 'オウケウオウライ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (684, '箱部 なる(CV:M・A・O)&月鈴 白奈(CV:高野 麻里佳)', 'なし', 7, 'Black''n White JAMMIN'' CATS', 'v1 1.30.00', + 'BLACKNWHITEJAMMINCATS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (685, '明坂 芹菜(CV:新田 恵海)&小仏 凪(CV:佐倉 薫)', 'なし', 7, 'ライトスピード・デイズ', 'v1 1.30.00', 'ライトスヒウトテイス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (686, '御形 アリシアナ(CV:福原 綾香)&天王洲 なずな(CV:山本 彩乃)', 'なし', 7, 'Fire me up', 'v1 1.30.00', 'FIREMEUP'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (688, '40mP feat.シャノ', 'なし', 5, '朝焼けプラットホーム', 'v1 1.30.00', 'アサヤケフラツトホウム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (689, '164 feat.ウォルピスカーター', 'なし', 5, 'PAST', 'v1 1.30.00', 'PAST'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (690, 'Palme', 'なし', 5, 'Blessed', 'v1 1.30.00', 'BLESSED'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (691, 'emon(Tes.) feat.松平なな', 'なし', 5, 'FRIDAY FRIDAY', 'v1 1.30.00', 'FRIDAYFRIDAY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (692, '笑う角を曲がる', 'なし', 5, '足立オウフwwww', 'v1 1.30.00', 'アタチオウフWWWW'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (693, 'Snail''s House', 'なし', 5, 'Seagull', 'v1 1.30.00', 'SEAGULL'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (694, 'カヒーナムジカ', 'なし', 5, 'Blaster Heaven', 'v1 1.30.00', 'BLASTERHEAVEN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (695, 'Omoi feat.+α/あるふぁきゅん。', 'なし', 5, 'ハートアタック', 'v1 1.30.00', 'ハウトアタツク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (696, 'TORIENA', 'なし', 5, 'Summer is over', 'v1 1.30.00', 'SUMMERISOVER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (697, 'ぬゆり', 'なし', 5, 'folern', 'v1 1.30.00', 'FOLERN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (698, 'dawn-system', 'なし', 5, '2DVenture', 'v1 1.30.00', '2DVENTURE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (699, 'NirNo', 'なし', 5, 'ぜったい!昇天★鎮魂歌♂', 'v1 1.30.00', 'セツタイシヨウテンレクイエム'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (700, 'technoplanet', 'なし', 5, '夕焼けのRed Parade', 'v1 1.30.00', 'ユウヤケノREDPARADE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (701, 'Feryquitous', 'なし', 5, 'StufeStern', 'v1 1.30.00', 'STUFESTERN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (702, 'Acotto', 'なし', 5, 'スピカの天秤', 'v1 1.30.00', 'スヒカノテンヒン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (703, 'キノシタ feat.YURiCa/花たん', 'なし', 5, '涙色メモリア', 'v1 1.30.00', 'ナミタイロメモリア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (704, 'niki', 'なし', 5, 'Magic', 'v1 1.30.00', 'MAGIC'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (705, 'SLAVE.V-V-R feat.Fantastic Youth', 'なし', 5, '男装女形表裏一体発狂小娘の詐称疑惑と苦悩と情熱。', 'v1 1.30.00', + 'タンソウオンナカタヒヨウリイツタイハツキヨウコムスメノサシヨウキワクトクノウトシヨウネツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (706, '盛るP feat.鈴森あおい', 'なし', 5, 'コモリの怪物', 'v1 1.30.00', 'コモリノカイフツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (707, 'カルロス袴田(サイゼP) feat.あやぽんず*', 'なし', 5, '中学2年生のアンドロイド', 'v1 1.30.00', 'チユウカクニネンセイノアントロイト'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (708, 'Relect', 'なし', 5, 'Life', 'v1 1.30.00', 'LIFE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (710, 'Rigel Theatre feat.ミーウェル', 'なし', 5, 'Solstånd', 'v1 1.30.00', 'SOLSTAND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (711, 'owl*tree feat.yaki*tree', 'なし', 5, 'Sqlupp', 'v1 1.30.00', 'SQLUPP'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (712, 'USAO', 'なし', 5, 'Climax', 'v1 1.30.00', 'CLIMAX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (713, 'ガリガリさむし', 'なし', 5, 'larva', 'v1 1.30.00', 'LARVA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (715, 'Masayoshi Minoshima feat. 綾倉盟', 'なし', 5, 'CYCLES', 'v1 1.30.00', 'CYCLES'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (716, '豚乙女', 'なし', 5, '夢花火', 'v1 1.30.00', 'ユメハナヒ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (717, 'A-One', 'なし', 5, 'FEEL the BEATS', 'v1 1.30.00', 'FEELTHEBEATS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (720, 'みきとP', 'なし', 2, 'ロキ', 'v1 1.30.00', 'ロキ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (721, 'Endorfin.', 'なし', 5, 'Innocent Truth', 'v1 1.30.00', 'INNOCENTTRUTH'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (722, 'D-Cee', 'なし', 5, 'CITRUS MONSTER', 'v1 1.30.00', 'CITRUSMONSTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8000, 'M.S.S Project', 'なし', 5, '幾四音-Ixion-', 'v1 1.05.00', 'イクシオンIXION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8008, 'ビートまりお', '上海アリス幻樂団', 3, 'ナイト・オブ・ナイツ', 'v1 1.05.00', 'ナイトオフナイツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8020, 'nora2r', 'なし', 6, 'B.B.K.K.B.K.K.', 'v1 1.05.00', 'BBKKBKK'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8024, 'sasakure.UK', 'なし', 5, 'Garakuta Doll Play (sasakure.UK clutter remix)', 'v1 1.05.00', + 'GARAKUTADOLLPLAYSASAKUREUKCLUTTERREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8025, 'イロドリミドリ', 'なし', 7, 'Help me, あーりん!', 'v1 1.05.00', 'HELPMEアウリン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8026, 'xi', 'なし', 6, 'FREEDOM DiVE', 'v1 1.05.00', 'FREEDOMDIVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8029, 'Junk', 'なし', 6, 'elegante', 'v1 1.05.00', 'ELEGANTE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8033, '目黒将司 Remixed by 浅倉大介「ペルソナ4 ダンシング・オールナイト」', 'ATLUS', 6, 'Your Affection (Daisuke Asakura Remix)', + 'v1 1.10.00', 'YOURAFFECTIONDAISUKEASAKURAREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8034, 'れるりり', 'なし', 2, '一触即発☆禅ガール', 'v1 1.10.00', 'イツシヨクソクハツセンカウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8043, 'Morrigan feat.Lily', 'なし', 5, 'Genesis', 'v1 1.10.00', 'GENESIS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8045, 'dj TAKA meets DJ YOSHITAKA', 'Konami Amusement', 6, 'Elemental Creation', 'v1 1.10.00', + 'ELEMENTALCREATION'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8046, '銀サク', 'なし', 2, 'いろは唄', 'v1 1.10.00', 'イロハウタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8048, '光田 康典', 'なし', 5, 'Alma', 'v1 1.10.00', 'ALMA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8049, 'ARM+夕野ヨシミ (IOSYS) feat.miko', '上海アリス幻樂団', 3, 'チルノのパーフェクトさんすう教室', 'v1 1.10.00', 'チルノノハウフエクトサンスウキヨウシツ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8051, '歌組雪月花 夜々(原田 ひとみ)/いろり(茅野 愛衣)/小紫(小倉 唯) 「機巧少女は傷つかない」', '機巧少女は傷つかない製作委員会', 0, '回レ!雪月花', 'v1 1.10.00', + 'マワレセツケツカ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8053, 't+pazolite', 'なし', 5, 'Oshama Scramble!', 'v1 1.10.00', 'OSHAMASCRAMBLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8057, '海田 明里', 'なし', 5, '砂漠のハンティングガール♡', 'v1 1.10.00', 'サハクノハンテインクカウル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8058, 'SEGA Sound Unit[H.]', 'なし', 0, 'ジングルベル', 'v1 1.10.00', 'シンクルヘル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8059, 'cosMo@暴走P', 'なし', 5, 'エンドマークに希望と涙を添えて', 'v1 1.10.00', 'エントマウクニキホウトナミタヲソエテ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8063, 'DECO*27 feat.echo', 'なし', 5, 'Counselor', 'v1 1.10.00', 'COUNSELOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8064, 'DOT96', 'なし', 6, 'SAMBISTA', 'v1 1.10.00', 'SAMBISTA'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8065, 'Queen P.A.L.', 'なし', 5, 'We Gonna Journey', 'v1 1.10.00', 'WEGONNAJOURNEY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8066, '浜渦 正志', 'なし', 5, 'The ether', 'v1 1.10.00', 'THEETHER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8067, 'Nankumo/CUBE3', 'なし', 6, 'DRAGONLADY', 'v1 1.10.00', 'DRAGONLADY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8069, 'ねこみみ魔法使い', 'なし', 6, '★LittlE HearTs★', 'v1 1.15.00', 'LITTLEHEARTS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8070, 'owl*tree', 'なし', 5, 'Paqqin', 'v1 1.15.00', 'PAQQIN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8072, 'Godspeed', 'なし', 5, 'Gate of Fate', 'v1 1.15.00', 'GATEOFFATE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8073, '長沼 英樹', 'なし', 6, 'The Concept of Love', 'v1 1.15.00', 'THECONCEPTOFLOVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8074, 'A-One', 'なし', 5, 'MUSIC PЯAYER', 'v1 1.15.00', 'MUSICPRAYER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8078, '月鈴姉妹(イロドリミドリ)', 'なし', 7, 'あねぺったん', 'v1 1.15.00', 'アネヘツタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8079, 'Sampling Masters MEGA', 'なし', 5, 'The wheel to the right', 'v1 1.15.00', 'THEWHEELTOTHERIGHT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8080, 'Katzeohr & Spiegel', 'なし', 5, 'Schrecklicher Aufstand', 'v1 1.15.00', 'SCHRECKLICHERAUFSTAND'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8081, '真宮寺さくら(横山智佐)&帝国歌劇団「サクラ大戦」', 'なし', 6, '檄!帝国華撃団', 'v1 1.15.00', 'ケキテイコクカケキタン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8082, 'TJ.hangneil', 'なし', 6, '神威', 'v1 1.15.00', 'カムイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8084, '40mP', 'なし', 2, 'だんだん早くなる', 'v1 1.15.00', 'タンタンハヤクナル'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8085, 'IRON ATTACK!', '上海アリス幻樂団', 3, 'エテルニタス・ルドロジー', 'v1 1.15.00', 'エテルニタスルトロシウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8086, 'from PACA PACA PASSION', 'D4Enterprise', 6, 'Blue Noise', 'v1 1.15.00', 'BLUENOISE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8087, 'SHIKI', 'なし', 6, 'Air', 'v1 1.15.00', 'AIR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8089, 'BACO', 'なし', 6, 'Dengeki Tube', 'v1 1.15.00', 'DENGEKITUBE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8090, 'SoundTeMP「ラグナロクオンライン」', 'Gravity', 6, 'Title', 'v1 1.15.00', 'TITLE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8091, 'Cranky', 'なし', 5, 'Oshama Scramble! (Cranky Remix)', 'v1 1.15.00', 'OSHAMASCRAMBLECRANKYREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8092, 'SEXY-SYNTHESIZER', 'なし', 5, 'STAR', 'v1 1.20.00', 'STAR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8093, 'セブンスシスターズ「Tokyo 7th シスターズ」', 'Donuts Co. Ltd.', 0, 'Star☆Glitter', 'v1 1.20.00', 'STARGLITTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8094, '発熱巫女~ず', '上海アリス幻樂団', 3, 'Starlight Dance Floor', 'v1 1.20.00', 'STARLIGHTDANCEFLOOR'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8095, '妹S(シスターズ)(土間うまる [CV.田中あいみ]、海老名菜々 [CV.影山灯]、本場切絵 [CV.白石晴香]、橘・シルフィンフォード [CV.古川由利奈])「干物妹!うまるちゃん」', + '干物妹!うまるちゃん', 0, 'ひだまりデイズ', 'v1 1.20.00', 'ヒタマリテイス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8097, 'Junk', 'なし', 6, 'elegante', 'v1 1.20.00', 'ELEGANTE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8098, 'あべにゅうぷろじぇくと feat.佐倉 紗織 produced by ave;new', 'なし', 5, '今ぞ♡崇め奉れ☆オマエらよ!!~姫の秘メタル渇望~', 'v1 1.20.00', + 'イマソアカメタテマツレオマエラヨヒメノヒメタルカツホウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8099, 'D-Cee', 'なし', 5, 'Tidal Wave', 'v1 1.20.00', 'TIDALWAVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8100, 'paraoka', 'なし', 6, 'L9', 'v1 1.20.00', 'L9'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8101, 'れるりり feat.ろん', 'なし', 5, 'RevolutionGame', 'v1 1.20.00', 'REVOLUTIONGAME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8103, 'REDALiCE (HARDCORE TANO*C)', '上海アリス幻樂団', 3, 'taboo tears you up', 'v1 1.20.00', 'TABOOTEARSYOUUP'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8104, 'きくお', 'なし', 5, '玩具狂奏曲 -終焉-', 'v1 1.20.00', 'カンクキヨウソウキヨクシユウエン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8105, 'n-buna feat.ヤギヌマカナ', 'なし', 5, 'その群青が愛しかったようだった', 'v1 1.20.00', 'ソノクンシヨウカイトシカツタヨウタツタ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8106, 'じん', 'なし', 2, 'アウターサイエンス', 'v1 1.20.00', 'アウタウサイエンス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8107, 'Osamu Kubota', 'なし', 5, 'L''épisode', 'v1 1.20.00', 'LEPISODE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8108, '-45', 'なし', 6, 'G e n g a o z o', 'v1 1.20.00', 'GENGAOZO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8110, 'WAiKURO', 'なし', 5, 'AMAZING MIGHTYYYY!!!!', 'v1 1.20.00', 'AMAZINGMIGHTYYYY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8111, 'JaccaPoP', 'なし', 0, 'MIRU key way', 'v1 1.25.00', 'MIRUKEYWAY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8112, 'orangentle', 'なし', 6, 'HAELEQUIN (Original Remaster)', 'v1 1.25.00', 'HAELEQUINORIGINALREMASTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8113, '植松 伸夫', 'なし', 5, 'Theme of SeelischTact', 'v1 1.25.00', 'THEMEOFSEELISCHTACT'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8114, 't+pazolite', 'なし', 5, 'Glorious Crown (tpz over-Over-OVERCUTE REMIX)', 'v1 1.25.00', + 'GLORIOUSCROWNTPZOVEROVEROVERCUTEREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8115, 'セガ・ハード・ガールズ', 'TVアニメ『Hi☆sCoool! セハガール』', 0, '若い力 -SEGA HARD GIRLS MIX-', 'v1 1.25.00', + 'ワカイチカラSEGAHARDGIRLSMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8116, 'イロドリミドリ', 'なし', 7, 'イロドリミドリ杯花映塚全一決定戦公式テーマソング『ウソテイ』', 'v1 1.25.00', + 'イロトリミトリハイカエイツカセンイチケツテイセンコウシキテウマソンクウソテイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8117, 'SPRiNGS「温泉むすめ」', '温泉むすめ', 0, '青春サイダー', 'v1 1.25.00', 'セイシユンサイタウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8118, 'ろん×田中秀和(MONACA)', 'なし', 8, '悪戯', 'v1 1.25.00', 'イタスラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8119, 'TrySail「エロマンガ先生」', 'エロマンガ先生', 0, 'adrenaline!!!', 'v1 1.25.00', 'ADRENALINE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8120, 'lumo', 'なし', 5, 'ロボットプラネットユートピア', 'v1 1.25.00', 'ロホツトフラネツトユウトヒア'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8121, 'ピノキオピー', 'なし', 5, 'ウソラセラ', 'v1 1.25.00', 'ウソラセラ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8123, 'Tatsh', 'なし', 5, 'GEMINI -M-', 'v1 1.25.00', 'GEMINIM'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8124, 'DETRO a.k.a ルゼ', 'なし', 6, 'volcanic', 'v1 1.25.00', 'VOLCANIC'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8125, 'HiTECH NINJA', 'なし', 5, 'Hyper Active', 'v1 1.25.00', 'HYPERACTIVE'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8126, 'LeaF', 'なし', 5, 'macrocosmos', 'v1 1.25.00', 'MACROCOSMOS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8127, 'INNOCENT NOIZE', 'なし', 5, 'Devastating Blaster', 'v1 1.25.00', 'DEVASTATINGBLASTER'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8128, '紅色リトマス', 'Konami Amusement', 6, '凛として咲く花の如く', 'v1 1.25.00', 'リントシテサクハナノコトク'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8129, 'loos feat. Meramipop', 'なし', 5, 'Starlight Disco', 'v1 1.25.00', 'STARLIGHTDISCO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8130, 'Storyteller', 'Crypton Future Media piapro', 2, '初音ミクの激唱', 'v1 1.30.00', 'ハツネミクノケキシヨウ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8131, 'SPRiNGS「温泉むすめ」', '温泉むすめ', 0, '未来イマジネーション!', 'v1 1.30.00', 'ミライイマシネウシヨン'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8132, 'ゆずひこ feat.めらみぽっぷ', '上海アリス幻樂団', 3, 'きゅうりバーにダイブ', 'v1 1.30.00', 'キユウリハウニタイフ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8133, 'Morrigan feat.Lily', 'なし', 5, 'Genesis', 'v1 1.30.00', 'GENESIS'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8134, 'EB (aka EarBreaker)', 'なし', 5, 'D✪N’T ST✪P R✪CKIN’ ~[✪_✪] MIX~', 'v1 1.30.00', 'DONTSTOPROCKINROBOMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8135, '暁Records', '上海アリス幻樂団', 3, 'WARNING×WARNING×WARNING', 'v1 1.30.00', 'WARNINGWARNINGWARNING'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8136, 'LV.4', 'なし', 6, 'Angel dust', 'v1 1.30.00', 'ANGELDUST'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8137, '-45', 'なし', 6, 'G e n g a o z o', 'v1 1.30.00', 'GENGAOZO'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8138, '雀が原中学卓球部「灼熱の卓球娘」', 'なし', 0, '灼熱スイッチ', 'v1 1.30.00', 'シヤクネツスイツチ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8139, 'Tomggg', 'なし', 5, 'Pastel Party', 'v1 1.30.00', 'PASTELPARTY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8140, '豚乙女', '上海アリス幻樂団', 3, '風に乗せた願い', 'v1 1.30.00', 'カセニノセタネカイ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8141, 'Cres.', 'なし', 6, 'End Time', 'v1 1.30.00', 'ENDTIME'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8142, 't+pazolite', 'なし', 5, 'Glorious Crown (tpz over-Over-OVERCUTE REMIX)', 'v1 1.30.00', + 'GLORIOUSCROWNTPZOVEROVEROVERCUTEREMIX'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8143, 'セブンスシスターズ「Tokyo 7th シスターズ」', 'SEVENTH HAVEN', 0, 'SEVENTH HAVEN', 'v1 1.30.00', 'SEVENTHHAVEN'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8144, 'wowaka', 'なし', 2, '裏表ラバーズ', 'v1 1.30.00', 'ウラオモテラハウス'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8145, 'q/stol', 'なし', 5, 'Twice up Scenery', 'v1 1.30.00', 'TWICEUPSCENERY'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8146, 'イロドリミドリ', 'なし', 7, 'なるがちゃんなぎにいよいよえれー目にあわされる話', 'v1 1.30.00', 'ナルカチヤンナキニイヨイヨエレウメニアワサレルハナシ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8147, '光吉猛修', 'なし', 5, '怒槌~光吉猛修一部謎~', 'v1 1.30.00', 'イカスチミツヨシタケノフイチフナソ'); +INSERT INTO chuni_music (music_id, artist_name, copyright, genre, name, release_version, sort_name) +VALUES (8148, 'どうぶつビスケッツ×PPP「けものフレンズ」', 'けものフレンズ', 0, 'ようこそジャパリパークへ', 'v1 1.30.00', 'ヨウコソシヤハリハウクヘ'); + + +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (3, 0, true, 3, 0, 3); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (4, 1, true, 5, 0, 3); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (5, 2, true, 10, 0, 3); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (6, 3, true, 11, 80, 3); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (7, 0, true, 3, 0, 6); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (8, 1, true, 6, 0, 6); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (9, 2, true, 9, 50, 6); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (10, 3, true, 12, 30, 6); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (11, 0, true, 5, 0, 7); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (12, 1, true, 8, 0, 7); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (13, 2, true, 12, 0, 7); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (14, 3, true, 13, 40, 7); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (15, 0, true, 3, 0, 14); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (16, 1, true, 5, 0, 14); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (17, 2, true, 7, 30, 14); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (18, 3, true, 11, 50, 14); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (19, 0, true, 3, 0, 18); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (20, 1, true, 5, 0, 18); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (21, 2, true, 8, 40, 18); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (22, 3, true, 11, 80, 18); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (23, 0, true, 4, 0, 19); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (24, 1, true, 6, 0, 19); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (25, 2, true, 11, 40, 19); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (26, 3, true, 13, 20, 19); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (27, 0, true, 3, 0, 20); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (28, 1, true, 6, 0, 20); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (29, 2, true, 9, 50, 20); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (30, 3, true, 12, 80, 20); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (31, 0, true, 3, 0, 21); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (32, 1, true, 6, 0, 21); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (33, 2, true, 9, 0, 21); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (34, 3, true, 11, 90, 21); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (35, 0, true, 3, 0, 23); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (36, 1, true, 6, 0, 23); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (37, 2, true, 9, 60, 23); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (38, 3, true, 12, 30, 23); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (39, 0, true, 2, 0, 24); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (40, 1, true, 5, 0, 24); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (41, 2, true, 9, 50, 24); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (42, 3, true, 12, 70, 24); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (43, 0, true, 3, 0, 27); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (44, 1, true, 6, 0, 27); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (45, 2, true, 9, 90, 27); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (46, 3, true, 12, 50, 27); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (47, 0, true, 3, 0, 28); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (48, 1, true, 5, 0, 28); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (49, 2, true, 8, 50, 28); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (50, 3, true, 10, 70, 28); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (51, 0, true, 2, 0, 33); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (52, 1, true, 4, 0, 33); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (53, 2, true, 10, 10, 33); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (54, 3, true, 13, 30, 33); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (55, 0, true, 3, 0, 34); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (56, 1, true, 5, 0, 34); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (57, 2, true, 9, 20, 34); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (58, 3, true, 12, 20, 34); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (59, 0, true, 3, 0, 35); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (60, 1, true, 6, 0, 35); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (61, 2, true, 9, 70, 35); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (62, 3, true, 12, 40, 35); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (63, 0, true, 2, 0, 37); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (64, 1, true, 5, 0, 37); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (65, 2, true, 8, 50, 37); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (66, 3, true, 11, 30, 37); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (67, 0, true, 2, 0, 38); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (68, 1, true, 5, 0, 38); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (69, 2, true, 8, 60, 38); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (70, 3, true, 11, 10, 38); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (71, 0, true, 3, 0, 41); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (72, 1, true, 5, 0, 41); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (73, 2, true, 9, 60, 41); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (74, 3, true, 11, 60, 41); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (75, 0, true, 4, 0, 45); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (76, 1, true, 6, 0, 45); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (77, 2, true, 9, 60, 45); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (78, 3, true, 12, 60, 45); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (79, 0, true, 1, 0, 46); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (80, 1, true, 4, 0, 46); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (81, 2, true, 8, 10, 46); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (82, 3, true, 11, 0, 46); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (83, 0, true, 3, 0, 47); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (84, 1, true, 5, 0, 47); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (85, 2, true, 9, 90, 47); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (86, 3, true, 12, 50, 47); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (87, 0, true, 3, 0, 48); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (88, 1, true, 5, 0, 48); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (89, 2, true, 9, 50, 48); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (90, 3, true, 11, 80, 48); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (91, 0, true, 2, 0, 49); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (92, 1, true, 4, 0, 49); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (93, 2, true, 8, 0, 49); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (94, 3, true, 10, 0, 49); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (95, 0, true, 1, 0, 50); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (96, 1, true, 1, 0, 50); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (97, 2, true, 1, 0, 50); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (98, 3, true, 1, 0, 50); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (99, 0, true, 2, 0, 51); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (100, 1, true, 4, 0, 51); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (101, 2, true, 10, 0, 51); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (102, 3, true, 12, 80, 51); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (103, 0, true, 4, 0, 52); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (104, 1, true, 7, 80, 52); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (105, 2, true, 11, 10, 52); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (106, 3, true, 13, 20, 52); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (107, 0, true, 2, 0, 53); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (108, 1, true, 5, 0, 53); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (109, 2, true, 10, 0, 53); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (110, 3, true, 12, 30, 53); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (111, 0, true, 2, 0, 55); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (112, 1, true, 4, 0, 55); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (113, 2, true, 8, 40, 55); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (114, 3, true, 11, 20, 55); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (115, 0, true, 3, 0, 59); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (116, 1, true, 6, 0, 59); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (117, 2, true, 8, 70, 59); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (118, 3, true, 10, 90, 59); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (119, 0, true, 4, 0, 61); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (120, 1, true, 7, 0, 61); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (121, 2, true, 11, 0, 61); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (122, 3, true, 13, 60, 61); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (123, 0, true, 3, 0, 62); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (124, 1, true, 6, 0, 62); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (125, 2, true, 9, 70, 62); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (126, 3, true, 12, 50, 62); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (127, 0, true, 6, 0, 63); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (128, 1, true, 9, 0, 63); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (129, 2, true, 11, 70, 63); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (130, 3, true, 13, 40, 63); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (131, 0, true, 3, 0, 64); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (132, 1, true, 6, 0, 64); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (133, 2, true, 9, 50, 64); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (134, 3, true, 12, 80, 64); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (135, 0, true, 2, 0, 65); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (136, 1, true, 5, 0, 65); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (137, 2, true, 9, 60, 65); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (138, 3, true, 11, 10, 65); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (139, 0, true, 4, 0, 66); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (140, 1, true, 6, 0, 66); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (141, 2, true, 9, 60, 66); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (142, 3, true, 12, 30, 66); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (143, 0, true, 3, 0, 67); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (144, 1, true, 5, 0, 67); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (145, 2, true, 9, 0, 67); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (146, 3, true, 11, 20, 67); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (147, 0, true, 2, 0, 68); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (148, 1, true, 5, 0, 68); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (149, 2, true, 8, 80, 68); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (150, 3, true, 11, 50, 68); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (151, 0, true, 4, 0, 69); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (152, 1, true, 9, 50, 69); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (153, 2, true, 11, 90, 69); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (154, 3, true, 13, 40, 69); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (155, 0, true, 3, 0, 70); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (156, 1, true, 5, 0, 70); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (157, 2, true, 9, 70, 70); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (158, 3, true, 12, 40, 70); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (159, 0, true, 5, 0, 71); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (160, 1, true, 7, 0, 71); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (161, 2, true, 9, 90, 71); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (162, 3, true, 12, 40, 71); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (163, 0, true, 3, 0, 72); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (164, 1, true, 5, 0, 72); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (165, 2, true, 10, 0, 72); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (166, 3, true, 13, 50, 72); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (167, 0, true, 3, 0, 73); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (168, 1, true, 6, 0, 73); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (169, 2, true, 10, 40, 73); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (170, 3, true, 12, 80, 73); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (171, 0, true, 2, 0, 74); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (172, 1, true, 5, 0, 74); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (173, 2, true, 8, 70, 74); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (174, 3, true, 11, 0, 74); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (175, 0, true, 3, 0, 75); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (176, 1, true, 6, 0, 75); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (177, 2, true, 9, 70, 75); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (178, 3, true, 11, 70, 75); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (179, 0, true, 3, 0, 76); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (180, 1, true, 8, 10, 76); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (181, 2, true, 12, 0, 76); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (182, 3, true, 13, 50, 76); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (183, 0, true, 4, 0, 77); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (184, 1, true, 6, 0, 77); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (185, 2, true, 9, 50, 77); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (186, 3, true, 12, 80, 77); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (187, 0, true, 3, 0, 78); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (188, 1, true, 5, 0, 78); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (189, 2, true, 7, 50, 78); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (190, 3, true, 12, 20, 78); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (191, 0, true, 3, 0, 79); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (192, 1, true, 5, 0, 79); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (193, 2, true, 9, 80, 79); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (194, 3, true, 11, 10, 79); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (195, 0, true, 3, 0, 80); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (196, 1, true, 6, 0, 80); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (197, 2, true, 8, 0, 80); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (198, 3, true, 10, 50, 80); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (199, 0, true, 1, 0, 81); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (200, 1, true, 1, 0, 81); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (201, 2, true, 1, 0, 81); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (202, 3, true, 1, 0, 81); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (203, 0, true, 4, 0, 82); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (204, 1, true, 6, 0, 82); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (205, 2, true, 8, 50, 82); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (206, 3, true, 12, 50, 82); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (207, 0, true, 3, 0, 83); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (208, 1, true, 6, 0, 83); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (209, 2, true, 9, 20, 83); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (210, 3, true, 12, 40, 83); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (211, 0, true, 3, 0, 88); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (212, 1, true, 6, 0, 88); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (213, 2, true, 10, 50, 88); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (214, 3, true, 12, 30, 88); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (215, 0, true, 2, 0, 89); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (216, 1, true, 5, 0, 89); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (217, 2, true, 8, 30, 89); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (218, 3, true, 11, 0, 89); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (219, 0, true, 4, 0, 90); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (220, 1, true, 7, 70, 90); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (221, 2, true, 11, 70, 90); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (222, 3, true, 13, 60, 90); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (223, 0, true, 3, 0, 91); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (224, 1, true, 5, 0, 91); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (225, 2, true, 9, 50, 91); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (226, 3, true, 11, 60, 91); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (227, 0, true, 3, 0, 92); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (228, 1, true, 7, 0, 92); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (229, 2, true, 10, 20, 92); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (230, 3, true, 13, 0, 92); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (231, 0, true, 3, 0, 93); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (232, 1, true, 5, 0, 93); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (233, 2, true, 8, 90, 93); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (234, 3, true, 12, 30, 93); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (235, 0, true, 2, 0, 94); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (236, 1, true, 5, 0, 94); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (237, 2, true, 8, 30, 94); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (238, 3, true, 12, 50, 94); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (239, 0, true, 3, 0, 95); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (240, 1, true, 5, 0, 95); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (241, 2, true, 9, 40, 95); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (242, 3, true, 12, 10, 95); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (243, 0, true, 3, 0, 96); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (244, 1, true, 5, 0, 96); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (245, 2, true, 8, 50, 96); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (246, 3, true, 11, 90, 96); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (247, 0, true, 3, 0, 97); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (248, 1, true, 5, 0, 97); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (249, 2, true, 8, 40, 97); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (250, 3, true, 10, 80, 97); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (251, 0, true, 3, 0, 98); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (252, 1, true, 6, 0, 98); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (253, 2, true, 8, 50, 98); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (254, 3, true, 11, 80, 98); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (255, 0, true, 3, 0, 99); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (256, 1, true, 7, 0, 99); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (257, 2, true, 9, 70, 99); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (258, 3, true, 12, 0, 99); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (259, 0, true, 2, 0, 100); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (260, 1, true, 5, 0, 100); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (261, 2, true, 8, 10, 100); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (262, 3, true, 10, 90, 100); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (263, 0, true, 3, 0, 101); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (264, 1, true, 7, 70, 101); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (265, 2, true, 10, 70, 101); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (266, 3, true, 13, 0, 101); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (267, 0, true, 3, 0, 102); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (268, 1, true, 5, 0, 102); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (269, 2, true, 9, 70, 102); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (270, 3, true, 12, 50, 102); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (271, 0, true, 4, 0, 103); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (272, 1, true, 7, 40, 103); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (273, 2, true, 11, 70, 103); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (274, 3, true, 13, 70, 103); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (275, 0, true, 3, 0, 104); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (276, 1, true, 7, 0, 104); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (277, 2, true, 10, 20, 104); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (278, 3, true, 12, 50, 104); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (279, 0, true, 2, 0, 105); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (280, 1, true, 4, 0, 105); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (281, 2, true, 8, 70, 105); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (282, 3, true, 10, 70, 105); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (283, 0, true, 5, 0, 106); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (284, 1, true, 9, 50, 106); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (285, 2, true, 12, 20, 106); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (286, 3, true, 13, 80, 106); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (287, 0, true, 3, 0, 107); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (288, 1, true, 6, 0, 107); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (289, 2, true, 11, 0, 107); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (290, 3, true, 13, 10, 107); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (291, 0, true, 3, 0, 108); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (292, 1, true, 5, 0, 108); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (293, 2, true, 10, 70, 108); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (294, 3, true, 12, 20, 108); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (295, 0, true, 3, 0, 113); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (296, 1, true, 6, 0, 113); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (297, 2, true, 8, 60, 113); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (298, 3, true, 11, 40, 113); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (299, 0, true, 2, 0, 114); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (300, 1, true, 4, 0, 114); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (301, 2, true, 8, 90, 114); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (302, 3, true, 11, 90, 114); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (303, 0, true, 2, 0, 115); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (304, 1, true, 4, 0, 115); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (305, 2, true, 8, 40, 115); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (306, 3, true, 11, 70, 115); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (307, 0, true, 3, 0, 116); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (308, 1, true, 5, 0, 116); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (309, 2, true, 7, 90, 116); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (310, 3, true, 10, 50, 116); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (311, 0, true, 2, 0, 117); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (312, 1, true, 5, 0, 117); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (313, 2, true, 8, 70, 117); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (314, 3, true, 11, 90, 117); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (315, 0, true, 3, 0, 118); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (316, 1, true, 6, 0, 118); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (317, 2, true, 9, 70, 118); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (318, 3, true, 12, 30, 118); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (319, 0, true, 3, 0, 119); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (320, 1, true, 6, 0, 119); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (321, 2, true, 9, 0, 119); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (322, 3, true, 12, 30, 119); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (323, 0, true, 2, 0, 120); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (324, 1, true, 5, 0, 120); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (325, 2, true, 8, 40, 120); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (326, 3, true, 12, 70, 120); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (327, 0, true, 3, 0, 121); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (328, 1, true, 6, 0, 121); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (329, 2, true, 9, 50, 121); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (330, 3, true, 12, 70, 121); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (331, 0, true, 3, 0, 122); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (332, 1, true, 6, 0, 122); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (333, 2, true, 9, 60, 122); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (334, 3, true, 12, 70, 122); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (335, 0, true, 1, 0, 123); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (336, 1, true, 4, 0, 123); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (337, 2, true, 8, 10, 123); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (338, 3, true, 10, 70, 123); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (339, 0, true, 1, 0, 124); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (340, 1, true, 4, 0, 124); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (341, 2, true, 8, 30, 124); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (342, 3, true, 12, 20, 124); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (343, 0, true, 4, 0, 128); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (344, 1, true, 6, 0, 128); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (345, 2, true, 9, 90, 128); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (346, 3, true, 12, 70, 128); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (347, 0, true, 3, 0, 131); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (348, 1, true, 6, 0, 131); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (349, 2, true, 10, 0, 131); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (350, 3, true, 12, 70, 131); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (351, 0, true, 3, 0, 132); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (352, 1, true, 6, 0, 132); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (353, 2, true, 9, 80, 132); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (354, 3, true, 12, 20, 132); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (355, 0, true, 3, 0, 133); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (356, 1, true, 5, 0, 133); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (357, 2, true, 7, 60, 133); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (358, 3, true, 11, 50, 133); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (359, 0, true, 5, 0, 134); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (360, 1, true, 8, 50, 134); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (361, 2, true, 12, 20, 134); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (362, 3, true, 13, 80, 134); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (363, 0, true, 4, 0, 135); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (364, 1, true, 6, 0, 135); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (365, 2, true, 10, 10, 135); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (366, 3, true, 13, 60, 135); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (367, 0, true, 3, 0, 136); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (368, 1, true, 6, 0, 136); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (369, 2, true, 9, 70, 136); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (370, 3, true, 12, 60, 136); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (371, 0, true, 4, 0, 137); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (372, 1, true, 7, 0, 137); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (373, 2, true, 11, 60, 137); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (374, 3, true, 13, 70, 137); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (375, 0, true, 4, 0, 138); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (376, 1, true, 6, 0, 138); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (377, 2, true, 10, 70, 138); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (378, 3, true, 13, 30, 138); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (379, 0, true, 3, 0, 140); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (380, 1, true, 6, 0, 140); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (381, 2, true, 9, 30, 140); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (382, 3, true, 11, 90, 140); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (383, 0, true, 4, 0, 141); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (384, 1, true, 9, 0, 141); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (385, 2, true, 11, 70, 141); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (386, 3, true, 13, 50, 141); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (387, 0, true, 3, 0, 142); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (388, 1, true, 5, 0, 142); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (389, 2, true, 9, 50, 142); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (390, 3, true, 12, 70, 142); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (391, 0, true, 2, 0, 143); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (392, 1, true, 5, 0, 143); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (393, 2, true, 9, 30, 143); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (394, 3, true, 10, 60, 143); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (395, 0, true, 3, 0, 144); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (396, 1, true, 6, 0, 144); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (397, 2, true, 9, 30, 144); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (398, 3, true, 13, 50, 144); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (399, 0, true, 3, 0, 145); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (400, 1, true, 5, 0, 145); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (401, 2, true, 8, 70, 145); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (402, 3, true, 11, 80, 145); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (403, 0, true, 3, 0, 146); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (404, 1, true, 6, 0, 146); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (405, 2, true, 9, 80, 146); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (406, 3, true, 11, 70, 146); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (407, 0, true, 2, 0, 147); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (408, 1, true, 5, 0, 147); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (409, 2, true, 8, 70, 147); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (410, 3, true, 10, 30, 147); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (411, 0, true, 3, 0, 148); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (412, 1, true, 6, 0, 148); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (413, 2, true, 9, 0, 148); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (414, 3, true, 11, 50, 148); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (415, 0, true, 3, 0, 149); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (416, 1, true, 6, 0, 149); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (417, 2, true, 9, 60, 149); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (418, 3, true, 12, 20, 149); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (419, 0, true, 3, 0, 150); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (420, 1, true, 5, 0, 150); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (421, 2, true, 10, 0, 150); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (422, 3, true, 11, 80, 150); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (423, 0, true, 3, 0, 151); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (424, 1, true, 5, 0, 151); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (425, 2, true, 9, 50, 151); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (426, 3, true, 12, 70, 151); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (427, 0, true, 4, 0, 152); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (428, 1, true, 7, 50, 152); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (429, 2, true, 12, 0, 152); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (430, 3, true, 13, 0, 152); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (431, 0, true, 3, 0, 154); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (432, 1, true, 6, 0, 154); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (433, 2, true, 10, 0, 154); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (434, 3, true, 12, 80, 154); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (435, 0, true, 2, 0, 156); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (436, 1, true, 4, 0, 156); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (437, 2, true, 8, 0, 156); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (438, 3, true, 11, 40, 156); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (439, 0, true, 3, 0, 157); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (440, 1, true, 6, 0, 157); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (441, 2, true, 10, 0, 157); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (442, 3, true, 13, 0, 157); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (443, 0, true, 2, 0, 158); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (444, 1, true, 5, 0, 158); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (445, 2, true, 8, 70, 158); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (446, 3, true, 11, 0, 158); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (447, 0, true, 2, 0, 159); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (448, 1, true, 5, 0, 159); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (449, 2, true, 8, 90, 159); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (450, 3, true, 13, 30, 159); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (451, 0, true, 3, 0, 160); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (452, 1, true, 6, 0, 160); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (453, 2, true, 9, 50, 160); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (454, 3, true, 11, 60, 160); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (455, 0, true, 3, 0, 161); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (456, 1, true, 6, 0, 161); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (457, 2, true, 9, 30, 161); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (458, 3, true, 12, 50, 161); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (459, 0, true, 3, 0, 163); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (460, 1, true, 6, 0, 163); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (461, 2, true, 9, 50, 163); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (462, 3, true, 11, 30, 163); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (463, 0, true, 3, 0, 165); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (464, 1, true, 6, 0, 165); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (465, 2, true, 9, 70, 165); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (466, 3, true, 12, 80, 165); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (467, 0, true, 3, 0, 166); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (468, 1, true, 6, 0, 166); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (469, 2, true, 9, 50, 166); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (470, 3, true, 11, 80, 166); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (471, 0, true, 3, 0, 167); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (472, 1, true, 7, 0, 167); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (473, 2, true, 10, 80, 167); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (474, 3, true, 12, 70, 167); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (475, 0, true, 3, 0, 168); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (476, 1, true, 6, 0, 168); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (477, 2, true, 9, 30, 168); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (478, 3, true, 11, 90, 168); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (479, 0, true, 2, 0, 169); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (480, 1, true, 5, 0, 169); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (481, 2, true, 10, 0, 169); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (482, 3, true, 11, 60, 169); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (483, 0, true, 3, 0, 170); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (484, 1, true, 6, 0, 170); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (485, 2, true, 9, 20, 170); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (486, 3, true, 11, 20, 170); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (487, 0, true, 2, 0, 171); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (488, 1, true, 5, 0, 171); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (489, 2, true, 10, 90, 171); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (490, 3, true, 12, 60, 171); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (491, 0, true, 3, 0, 173); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (492, 1, true, 7, 0, 173); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (493, 2, true, 10, 70, 173); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (494, 3, true, 13, 30, 173); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (495, 0, true, 3, 0, 176); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (496, 1, true, 7, 0, 176); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (497, 2, true, 9, 10, 176); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (498, 3, true, 11, 30, 176); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (499, 0, true, 3, 0, 177); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (500, 1, true, 5, 0, 177); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (501, 2, true, 9, 70, 177); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (502, 3, true, 12, 70, 177); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (503, 0, true, 3, 0, 178); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (504, 1, true, 6, 0, 178); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (505, 2, true, 10, 0, 178); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (506, 3, true, 12, 70, 178); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (507, 0, true, 3, 0, 179); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (508, 1, true, 5, 0, 179); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (509, 2, true, 8, 50, 179); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (510, 3, true, 11, 30, 179); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (511, 0, true, 6, 0, 180); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (512, 1, true, 9, 70, 180); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (513, 2, true, 12, 70, 180); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (514, 3, true, 14, 0, 180); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (515, 0, true, 2, 0, 181); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (516, 1, true, 5, 0, 181); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (517, 2, true, 8, 10, 181); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (518, 3, true, 10, 80, 181); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (519, 0, true, 3, 0, 186); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (520, 1, true, 5, 0, 186); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (521, 2, true, 9, 70, 186); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (522, 3, true, 11, 90, 186); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (523, 0, true, 3, 0, 187); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (524, 1, true, 7, 0, 187); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (525, 2, true, 11, 0, 187); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (526, 3, true, 13, 10, 187); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (527, 0, true, 3, 0, 189); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (528, 1, true, 6, 0, 189); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (529, 2, true, 10, 30, 189); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (530, 3, true, 12, 70, 189); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (531, 0, true, 3, 0, 190); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (532, 1, true, 7, 0, 190); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (533, 2, true, 10, 10, 190); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (534, 3, true, 12, 60, 190); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (535, 0, true, 2, 0, 191); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (536, 1, true, 4, 0, 191); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (537, 2, true, 8, 40, 191); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (538, 3, true, 11, 70, 191); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (539, 0, true, 3, 0, 192); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (540, 1, true, 6, 0, 192); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (541, 2, true, 9, 80, 192); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (542, 3, true, 12, 50, 192); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (543, 0, true, 3, 0, 193); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (544, 1, true, 6, 0, 193); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (545, 2, true, 9, 90, 193); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (546, 3, true, 12, 50, 193); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (547, 0, true, 3, 0, 194); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (548, 1, true, 5, 0, 194); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (549, 2, true, 9, 0, 194); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (550, 3, true, 13, 0, 194); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (551, 0, true, 3, 0, 195); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (552, 1, true, 5, 0, 195); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (553, 2, true, 8, 50, 195); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (554, 3, true, 12, 30, 195); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (555, 0, true, 5, 0, 196); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (556, 1, true, 8, 50, 196); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (557, 2, true, 11, 50, 196); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (558, 3, true, 13, 70, 196); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (559, 0, true, 4, 0, 197); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (560, 1, true, 8, 30, 197); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (561, 2, true, 11, 70, 197); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (562, 3, true, 13, 10, 197); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (563, 0, true, 4, 0, 198); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (564, 1, true, 7, 90, 198); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (565, 2, true, 11, 70, 198); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (566, 3, true, 13, 50, 198); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (567, 0, true, 3, 0, 199); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (568, 1, true, 6, 0, 199); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (569, 2, true, 10, 0, 199); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (570, 3, true, 12, 10, 199); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (571, 0, true, 3, 0, 200); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (572, 1, true, 6, 0, 200); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (573, 2, true, 9, 70, 200); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (574, 3, true, 12, 10, 200); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (575, 0, true, 4, 0, 201); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (576, 1, true, 9, 70, 201); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (577, 2, true, 12, 10, 201); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (578, 3, true, 13, 90, 201); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (579, 0, true, 4, 0, 202); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (580, 1, true, 7, 0, 202); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (581, 2, true, 11, 20, 202); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (582, 3, true, 13, 20, 202); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (583, 0, true, 3, 0, 203); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (584, 1, true, 5, 0, 203); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (585, 2, true, 9, 50, 203); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (586, 3, true, 12, 30, 203); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (587, 0, true, 3, 0, 204); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (588, 1, true, 6, 0, 204); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (589, 2, true, 9, 30, 204); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (590, 3, true, 11, 20, 204); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (591, 0, true, 4, 0, 205); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (592, 1, true, 6, 0, 205); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (593, 2, true, 10, 70, 205); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (594, 3, true, 12, 70, 205); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (595, 0, true, 3, 0, 206); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (596, 1, true, 5, 0, 206); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (597, 2, true, 8, 80, 206); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (598, 3, true, 12, 20, 206); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (599, 0, true, 3, 0, 207); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (600, 1, true, 5, 0, 207); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (601, 2, true, 9, 70, 207); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (602, 3, true, 11, 70, 207); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (603, 0, true, 3, 0, 208); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (604, 1, true, 7, 0, 208); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (605, 2, true, 10, 0, 208); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (606, 3, true, 12, 70, 208); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (607, 0, true, 3, 0, 210); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (608, 1, true, 6, 0, 210); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (609, 2, true, 9, 50, 210); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (610, 3, true, 12, 40, 210); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (611, 0, true, 3, 0, 211); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (612, 1, true, 6, 0, 211); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (613, 2, true, 9, 80, 211); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (614, 3, true, 12, 20, 211); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (615, 0, true, 3, 0, 212); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (616, 1, true, 5, 0, 212); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (617, 2, true, 9, 10, 212); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (618, 3, true, 12, 10, 212); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (619, 0, true, 3, 0, 213); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (620, 1, true, 6, 0, 213); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (621, 2, true, 9, 50, 213); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (622, 3, true, 11, 90, 213); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (623, 0, true, 3, 0, 216); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (624, 1, true, 6, 0, 216); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (625, 2, true, 9, 80, 216); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (626, 3, true, 12, 30, 216); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (627, 0, true, 3, 0, 217); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (628, 1, true, 5, 0, 217); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (629, 2, true, 9, 50, 217); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (630, 3, true, 11, 80, 217); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (631, 0, true, 3, 0, 218); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (632, 1, true, 5, 0, 218); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (633, 2, true, 9, 20, 218); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (634, 3, true, 12, 40, 218); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (635, 0, true, 5, 0, 219); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (636, 1, true, 9, 30, 219); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (637, 2, true, 12, 70, 219); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (638, 3, true, 14, 0, 219); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (639, 0, true, 2, 0, 220); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (640, 1, true, 5, 0, 220); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (641, 2, true, 9, 50, 220); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (642, 3, true, 12, 30, 220); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (643, 0, true, 3, 0, 222); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (644, 1, true, 6, 0, 222); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (645, 2, true, 11, 10, 222); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (646, 3, true, 12, 90, 222); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (647, 0, true, 3, 0, 223); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (648, 1, true, 7, 0, 223); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (649, 2, true, 11, 0, 223); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (650, 3, true, 13, 0, 223); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (651, 0, true, 2, 0, 224); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (652, 1, true, 4, 0, 224); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (653, 2, true, 8, 80, 224); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (654, 3, true, 11, 40, 224); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (655, 0, true, 3, 0, 225); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (656, 1, true, 5, 0, 225); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (657, 2, true, 9, 90, 225); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (658, 3, true, 12, 10, 225); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (659, 0, true, 5, 0, 226); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (660, 1, true, 8, 70, 226); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (661, 2, true, 12, 30, 226); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (662, 3, true, 13, 80, 226); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (663, 0, true, 2, 0, 227); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (664, 1, true, 5, 0, 227); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (665, 2, true, 8, 50, 227); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (666, 3, true, 11, 50, 227); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (667, 0, true, 3, 0, 228); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (668, 1, true, 5, 0, 228); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (669, 2, true, 8, 70, 228); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (670, 3, true, 12, 0, 228); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (671, 0, true, 4, 0, 229); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (672, 1, true, 7, 0, 229); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (673, 2, true, 12, 0, 229); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (674, 3, true, 13, 40, 229); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (675, 0, true, 3, 0, 230); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (676, 1, true, 6, 0, 230); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (677, 2, true, 10, 10, 230); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (678, 3, true, 12, 50, 230); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (679, 0, true, 3, 0, 232); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (680, 1, true, 7, 0, 232); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (681, 2, true, 11, 30, 232); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (682, 3, true, 13, 50, 232); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (683, 0, true, 3, 0, 233); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (684, 1, true, 5, 0, 233); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (685, 2, true, 9, 70, 233); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (686, 3, true, 12, 20, 233); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (687, 0, true, 3, 0, 234); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (688, 1, true, 8, 40, 234); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (689, 2, true, 12, 20, 234); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (690, 3, true, 13, 90, 234); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (691, 0, true, 3, 0, 235); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (692, 1, true, 6, 0, 235); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (693, 2, true, 9, 60, 235); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (694, 3, true, 12, 50, 235); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (695, 0, true, 2, 0, 238); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (696, 1, true, 5, 0, 238); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (697, 2, true, 8, 50, 238); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (698, 3, true, 11, 90, 238); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (699, 0, true, 3, 0, 240); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (700, 1, true, 6, 0, 240); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (701, 2, true, 10, 10, 240); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (702, 3, true, 12, 60, 240); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (703, 0, true, 2, 0, 243); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (704, 1, true, 5, 0, 243); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (705, 2, true, 9, 20, 243); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (706, 3, true, 12, 20, 243); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (707, 0, true, 3, 0, 244); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (708, 1, true, 5, 0, 244); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (709, 2, true, 9, 70, 244); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (710, 3, true, 12, 30, 244); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (711, 0, true, 3, 0, 245); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (712, 1, true, 5, 0, 245); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (713, 2, true, 9, 60, 245); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (714, 3, true, 11, 40, 245); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (715, 0, true, 3, 0, 246); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (716, 1, true, 6, 0, 246); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (717, 2, true, 10, 90, 246); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (718, 3, true, 12, 80, 246); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (719, 0, true, 3, 0, 247); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (720, 1, true, 6, 0, 247); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (721, 2, true, 9, 60, 247); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (722, 3, true, 11, 70, 247); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (723, 0, true, 5, 0, 248); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (724, 1, true, 9, 0, 248); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (725, 2, true, 12, 50, 248); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (726, 3, true, 13, 90, 248); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (727, 0, true, 2, 0, 249); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (728, 1, true, 5, 0, 249); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (729, 2, true, 10, 70, 249); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (730, 3, true, 12, 70, 249); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (731, 0, true, 4, 0, 250); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (732, 1, true, 7, 50, 250); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (733, 2, true, 11, 80, 250); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (734, 3, true, 13, 50, 250); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (735, 0, true, 3, 0, 251); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (736, 1, true, 6, 0, 251); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (737, 2, true, 8, 90, 251); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (738, 3, true, 12, 50, 251); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (739, 0, true, 3, 0, 252); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (740, 1, true, 6, 0, 252); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (741, 2, true, 9, 90, 252); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (742, 3, true, 12, 30, 252); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (743, 0, true, 3, 0, 253); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (744, 1, true, 7, 40, 253); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (745, 2, true, 10, 10, 253); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (746, 3, true, 13, 10, 253); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (747, 0, true, 3, 0, 254); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (748, 1, true, 6, 0, 254); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (749, 2, true, 9, 90, 254); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (750, 3, true, 11, 70, 254); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (751, 0, true, 3, 0, 256); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (752, 1, true, 6, 0, 256); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (753, 2, true, 10, 20, 256); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (754, 3, true, 12, 70, 256); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (755, 0, true, 3, 0, 257); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (756, 1, true, 7, 70, 257); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (757, 2, true, 10, 20, 257); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (758, 3, true, 13, 0, 257); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (759, 0, true, 4, 0, 258); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (760, 1, true, 9, 60, 258); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (761, 2, true, 12, 80, 258); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (762, 3, true, 14, 0, 258); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (763, 0, true, 4, 0, 259); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (764, 1, true, 7, 40, 259); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (765, 2, true, 11, 30, 259); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (766, 3, true, 13, 0, 259); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (767, 0, true, 3, 0, 260); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (768, 1, true, 6, 0, 260); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (769, 2, true, 9, 50, 260); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (770, 3, true, 12, 40, 260); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (771, 0, true, 3, 0, 261); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (772, 1, true, 6, 0, 261); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (773, 2, true, 9, 70, 261); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (774, 3, true, 12, 30, 261); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (775, 0, true, 4, 0, 262); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (776, 1, true, 7, 70, 262); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (777, 2, true, 10, 80, 262); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (778, 3, true, 13, 50, 262); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (779, 0, true, 3, 0, 263); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (780, 1, true, 5, 0, 263); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (781, 2, true, 8, 80, 263); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (782, 3, true, 11, 70, 263); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (783, 0, true, 3, 0, 264); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (784, 1, true, 5, 0, 264); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (785, 2, true, 8, 80, 264); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (786, 3, true, 12, 20, 264); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (787, 0, true, 3, 0, 265); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (788, 1, true, 6, 0, 265); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (789, 2, true, 9, 90, 265); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (790, 3, true, 12, 30, 265); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (791, 0, true, 3, 0, 266); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (792, 1, true, 5, 0, 266); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (793, 2, true, 9, 60, 266); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (794, 3, true, 12, 70, 266); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (795, 0, true, 3, 0, 267); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (796, 1, true, 5, 0, 267); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (797, 2, true, 9, 60, 267); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (798, 3, true, 11, 50, 267); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (799, 0, true, 3, 0, 268); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (800, 1, true, 6, 0, 268); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (801, 2, true, 10, 70, 268); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (802, 3, true, 12, 80, 268); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (803, 0, true, 3, 0, 269); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (804, 1, true, 5, 0, 269); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (805, 2, true, 8, 50, 269); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (806, 3, true, 11, 10, 269); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (807, 0, true, 3, 0, 270); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (808, 1, true, 6, 0, 270); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (809, 2, true, 9, 60, 270); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (810, 3, true, 12, 40, 270); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (811, 0, true, 4, 0, 271); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (812, 1, true, 6, 0, 271); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (813, 2, true, 10, 0, 271); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (814, 3, true, 12, 80, 271); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (815, 0, true, 2, 0, 272); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (816, 1, true, 6, 0, 272); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (817, 2, true, 8, 70, 272); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (818, 3, true, 11, 70, 272); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (819, 0, true, 3, 0, 273); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (820, 1, true, 6, 0, 273); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (821, 2, true, 9, 0, 273); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (822, 3, true, 11, 90, 273); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (823, 0, true, 3, 0, 274); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (824, 1, true, 5, 0, 274); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (825, 2, true, 8, 70, 274); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (826, 3, true, 11, 60, 274); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (827, 0, true, 2, 0, 275); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (828, 1, true, 4, 0, 275); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (829, 2, true, 8, 40, 275); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (830, 3, true, 11, 50, 275); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (831, 0, true, 3, 0, 276); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (832, 1, true, 5, 0, 276); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (833, 2, true, 9, 80, 276); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (834, 3, true, 12, 30, 276); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (835, 0, true, 3, 0, 277); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (836, 1, true, 6, 0, 277); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (837, 2, true, 9, 50, 277); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (838, 3, true, 12, 40, 277); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (839, 0, true, 2, 0, 278); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (840, 1, true, 5, 0, 278); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (841, 2, true, 8, 70, 278); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (842, 3, true, 11, 70, 278); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (843, 0, true, 3, 0, 279); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (844, 1, true, 5, 0, 279); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (845, 2, true, 8, 50, 279); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (846, 3, true, 11, 70, 279); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (847, 0, true, 3, 0, 280); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (848, 1, true, 5, 0, 280); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (849, 2, true, 8, 60, 280); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (850, 3, true, 11, 80, 280); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (851, 0, true, 4, 0, 281); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (852, 1, true, 7, 0, 281); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (853, 2, true, 11, 10, 281); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (854, 3, true, 13, 40, 281); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (855, 0, true, 2, 0, 282); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (856, 1, true, 5, 0, 282); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (857, 2, true, 9, 90, 282); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (858, 3, true, 11, 70, 282); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (859, 0, true, 3, 0, 283); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (860, 1, true, 5, 0, 283); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (861, 2, true, 8, 70, 283); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (862, 3, true, 12, 0, 283); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (863, 0, true, 3, 0, 284); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (864, 1, true, 5, 0, 284); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (865, 2, true, 10, 20, 284); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (866, 3, true, 12, 70, 284); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (867, 0, true, 3, 0, 286); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (868, 1, true, 5, 0, 286); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (869, 2, true, 8, 60, 286); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (870, 3, true, 11, 50, 286); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (871, 0, true, 3, 0, 287); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (872, 1, true, 6, 0, 287); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (873, 2, true, 10, 0, 287); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (874, 3, true, 11, 90, 287); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (875, 0, true, 3, 0, 288); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (876, 1, true, 5, 0, 288); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (877, 2, true, 8, 80, 288); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (878, 3, true, 11, 60, 288); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (879, 0, true, 3, 0, 289); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (880, 1, true, 6, 0, 289); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (881, 2, true, 10, 70, 289); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (882, 3, true, 12, 60, 289); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (883, 0, true, 2, 0, 290); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (884, 1, true, 4, 0, 290); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (885, 2, true, 8, 10, 290); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (886, 3, true, 11, 30, 290); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (887, 0, true, 3, 0, 291); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (888, 1, true, 5, 0, 291); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (889, 2, true, 9, 80, 291); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (890, 3, true, 12, 40, 291); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (891, 0, true, 3, 0, 292); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (892, 1, true, 5, 0, 292); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (893, 2, true, 8, 50, 292); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (894, 3, true, 12, 10, 292); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (895, 0, true, 4, 0, 293); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (896, 1, true, 7, 0, 293); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (897, 2, true, 10, 80, 293); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (898, 3, true, 13, 20, 293); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (899, 0, true, 4, 0, 294); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (900, 1, true, 7, 40, 294); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (901, 2, true, 10, 30, 294); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (902, 3, true, 12, 80, 294); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (903, 0, true, 3, 0, 295); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (904, 1, true, 5, 0, 295); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (905, 2, true, 9, 80, 295); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (906, 3, true, 12, 0, 295); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (907, 0, true, 3, 0, 296); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (908, 1, true, 5, 0, 296); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (909, 2, true, 8, 70, 296); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (910, 3, true, 12, 10, 296); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (911, 0, true, 3, 0, 297); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (912, 1, true, 5, 0, 297); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (913, 2, true, 9, 30, 297); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (914, 3, true, 12, 30, 297); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (915, 0, true, 3, 0, 298); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (916, 1, true, 5, 0, 298); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (917, 2, true, 9, 80, 298); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (918, 3, true, 12, 60, 298); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (919, 0, true, 1, 0, 299); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (920, 1, true, 4, 0, 299); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (921, 2, true, 8, 70, 299); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (922, 3, true, 11, 40, 299); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (923, 0, true, 2, 0, 300); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (924, 1, true, 6, 0, 300); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (925, 2, true, 9, 30, 300); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (926, 3, true, 12, 20, 300); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (927, 0, true, 3, 0, 301); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (928, 1, true, 6, 0, 301); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (929, 2, true, 9, 60, 301); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (930, 3, true, 12, 20, 301); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (931, 0, true, 4, 0, 302); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (932, 1, true, 7, 70, 302); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (933, 2, true, 11, 0, 302); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (934, 3, true, 13, 30, 302); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (935, 0, true, 1, 0, 303); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (936, 1, true, 4, 0, 303); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (937, 2, true, 7, 80, 303); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (938, 3, true, 10, 60, 303); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (939, 0, true, 3, 0, 304); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (940, 1, true, 5, 0, 304); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (941, 2, true, 8, 40, 304); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (942, 3, true, 11, 70, 304); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (943, 0, true, 3, 0, 305); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (944, 1, true, 7, 0, 305); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (945, 2, true, 11, 0, 305); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (946, 3, true, 13, 10, 305); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (947, 0, true, 3, 0, 306); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (948, 1, true, 5, 0, 306); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (949, 2, true, 9, 40, 306); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (950, 3, true, 12, 20, 306); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (951, 0, true, 3, 0, 307); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (952, 1, true, 6, 0, 307); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (953, 2, true, 10, 10, 307); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (954, 3, true, 12, 70, 307); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (955, 0, true, 3, 0, 308); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (956, 1, true, 6, 0, 308); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (957, 2, true, 9, 40, 308); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (958, 3, true, 11, 90, 308); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (959, 0, true, 3, 0, 309); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (960, 1, true, 6, 0, 309); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (961, 2, true, 9, 20, 309); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (962, 3, true, 12, 50, 309); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (963, 0, true, 3, 0, 310); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (964, 1, true, 7, 70, 310); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (965, 2, true, 11, 20, 310); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (966, 3, true, 13, 30, 310); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (967, 0, true, 3, 0, 311); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (968, 1, true, 5, 0, 311); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (969, 2, true, 8, 90, 311); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (970, 3, true, 11, 80, 311); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (971, 0, true, 4, 0, 312); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (972, 1, true, 8, 0, 312); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (973, 2, true, 11, 0, 312); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (974, 3, true, 13, 20, 312); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (975, 0, true, 2, 0, 313); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (976, 1, true, 4, 0, 313); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (977, 2, true, 8, 50, 313); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (978, 3, true, 11, 40, 313); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (979, 0, true, 3, 0, 314); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (980, 1, true, 6, 0, 314); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (981, 2, true, 9, 40, 314); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (982, 3, true, 11, 80, 314); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (983, 0, true, 3, 0, 315); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (984, 1, true, 5, 0, 315); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (985, 2, true, 8, 60, 315); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (986, 3, true, 11, 30, 315); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (987, 0, true, 3, 0, 316); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (988, 1, true, 5, 0, 316); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (989, 2, true, 8, 70, 316); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (990, 3, true, 11, 50, 316); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (991, 0, true, 3, 0, 317); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (992, 1, true, 7, 0, 317); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (993, 2, true, 10, 10, 317); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (994, 3, true, 13, 40, 317); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (995, 0, true, 3, 0, 318); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (996, 1, true, 7, 0, 318); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (997, 2, true, 10, 30, 318); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (998, 3, true, 13, 0, 318); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (999, 0, true, 3, 0, 319); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1000, 1, true, 6, 0, 319); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1001, 2, true, 9, 80, 319); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1002, 3, true, 12, 70, 319); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1003, 0, true, 2, 0, 320); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1004, 1, true, 6, 0, 320); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1005, 2, true, 9, 60, 320); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1006, 3, true, 12, 60, 320); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1007, 0, true, 3, 0, 321); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1008, 1, true, 6, 0, 321); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1009, 2, true, 9, 40, 321); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1010, 3, true, 12, 50, 321); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1011, 0, true, 4, 0, 322); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1012, 1, true, 7, 70, 322); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1013, 2, true, 11, 0, 322); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1014, 3, true, 13, 60, 322); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1015, 0, true, 4, 0, 323); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1016, 1, true, 7, 70, 323); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1017, 2, true, 10, 90, 323); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1018, 3, true, 13, 60, 323); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1019, 0, true, 3, 0, 324); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1020, 1, true, 5, 0, 324); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1021, 2, true, 10, 0, 324); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1022, 3, true, 12, 60, 324); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1023, 0, true, 3, 0, 325); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1024, 1, true, 6, 0, 325); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1025, 2, true, 9, 40, 325); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1026, 3, true, 12, 60, 325); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1027, 0, true, 3, 0, 326); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1028, 1, true, 7, 0, 326); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1029, 2, true, 9, 20, 326); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1030, 3, true, 12, 50, 326); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1031, 0, true, 3, 0, 327); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1032, 1, true, 6, 0, 327); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1033, 2, true, 10, 90, 327); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1034, 3, true, 12, 70, 327); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1035, 0, true, 4, 0, 328); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1036, 1, true, 8, 0, 328); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1037, 2, true, 11, 40, 328); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1038, 3, true, 13, 80, 328); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1039, 0, true, 3, 0, 329); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1040, 1, true, 5, 0, 329); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1041, 2, true, 9, 70, 329); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1042, 3, true, 12, 30, 329); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1043, 0, true, 3, 0, 330); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1044, 1, true, 6, 0, 330); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1045, 2, true, 9, 70, 330); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1046, 3, true, 12, 10, 330); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1047, 0, true, 4, 0, 331); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1048, 1, true, 7, 0, 331); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1049, 2, true, 9, 80, 331); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1050, 3, true, 12, 20, 331); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1051, 0, true, 3, 0, 332); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1052, 1, true, 6, 0, 332); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1053, 2, true, 9, 0, 332); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1054, 3, true, 12, 30, 332); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1055, 0, true, 3, 0, 334); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1056, 1, true, 5, 0, 334); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1057, 2, true, 10, 0, 334); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1058, 3, true, 12, 40, 334); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1059, 0, true, 4, 0, 335); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1060, 1, true, 7, 50, 335); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1061, 2, true, 11, 20, 335); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1062, 3, true, 13, 40, 335); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1063, 0, true, 3, 0, 336); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1064, 1, true, 5, 0, 336); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1065, 2, true, 9, 50, 336); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1066, 3, true, 12, 20, 336); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1067, 0, true, 3, 0, 337); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1068, 1, true, 5, 0, 337); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1069, 2, true, 8, 90, 337); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1070, 3, true, 11, 80, 337); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1071, 0, true, 3, 0, 338); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1072, 1, true, 6, 0, 338); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1073, 2, true, 9, 80, 338); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1074, 3, true, 12, 30, 338); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1075, 0, true, 2, 0, 339); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1076, 1, true, 5, 0, 339); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1077, 2, true, 8, 80, 339); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1078, 3, true, 11, 70, 339); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1079, 0, true, 3, 0, 340); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1080, 1, true, 5, 0, 340); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1081, 2, true, 9, 20, 340); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1082, 3, true, 12, 50, 340); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1083, 0, true, 3, 0, 341); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1084, 1, true, 6, 0, 341); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1085, 2, true, 9, 90, 341); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1086, 3, true, 13, 10, 341); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1087, 0, true, 4, 0, 342); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1088, 1, true, 7, 80, 342); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1089, 2, true, 10, 60, 342); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1090, 3, true, 13, 40, 342); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1091, 0, true, 3, 0, 343); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1092, 1, true, 5, 0, 343); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1093, 2, true, 8, 50, 343); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1094, 3, true, 11, 60, 343); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1095, 0, true, 2, 0, 344); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1096, 1, true, 5, 0, 344); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1097, 2, true, 8, 30, 344); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1098, 3, true, 11, 80, 344); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1099, 0, true, 2, 0, 345); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1100, 1, true, 5, 0, 345); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1101, 2, true, 8, 50, 345); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1102, 3, true, 11, 70, 345); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1103, 0, true, 2, 0, 348); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1104, 1, true, 5, 0, 348); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1105, 2, true, 9, 30, 348); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1106, 3, true, 11, 30, 348); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1107, 0, true, 2, 0, 349); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1108, 1, true, 5, 0, 349); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1109, 2, true, 8, 70, 349); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1110, 3, true, 10, 70, 349); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1111, 0, true, 3, 0, 350); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1112, 1, true, 6, 0, 350); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1113, 2, true, 9, 60, 350); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1114, 3, true, 12, 70, 350); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1115, 0, true, 3, 0, 351); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1116, 1, true, 6, 0, 351); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1117, 2, true, 9, 0, 351); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1118, 3, true, 12, 90, 351); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1119, 0, true, 3, 0, 352); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1120, 1, true, 6, 0, 352); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1121, 2, true, 9, 30, 352); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1122, 3, true, 12, 0, 352); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1123, 0, true, 3, 0, 353); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1124, 1, true, 5, 0, 353); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1125, 2, true, 8, 40, 353); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1126, 3, true, 10, 90, 353); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1127, 0, true, 3, 0, 354); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1128, 1, true, 6, 0, 354); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1129, 2, true, 9, 50, 354); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1130, 3, true, 12, 30, 354); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1131, 0, true, 1, 0, 355); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1132, 1, true, 4, 0, 355); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1133, 2, true, 7, 80, 355); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1134, 3, true, 10, 10, 355); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1135, 0, true, 3, 0, 356); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1136, 1, true, 6, 0, 356); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1137, 2, true, 9, 10, 356); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1138, 3, true, 12, 30, 356); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1139, 0, true, 2, 0, 357); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1140, 1, true, 5, 0, 357); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1141, 2, true, 8, 30, 357); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1142, 3, true, 11, 70, 357); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1143, 0, true, 2, 0, 358); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1144, 1, true, 4, 0, 358); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1145, 2, true, 9, 30, 358); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1146, 3, true, 11, 70, 358); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1147, 0, true, 3, 0, 359); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1148, 1, true, 5, 0, 359); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1149, 2, true, 8, 70, 359); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1150, 3, true, 11, 80, 359); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1151, 0, true, 2, 0, 360); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1152, 1, true, 5, 0, 360); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1153, 2, true, 8, 30, 360); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1154, 3, true, 11, 30, 360); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1155, 0, true, 3, 0, 362); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1156, 1, true, 5, 0, 362); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1157, 2, true, 9, 50, 362); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1158, 3, true, 12, 10, 362); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1159, 0, true, 2, 0, 363); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1160, 1, true, 4, 0, 363); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1161, 2, true, 8, 50, 363); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1162, 3, true, 11, 60, 363); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1163, 0, true, 1, 0, 365); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1164, 1, true, 4, 0, 365); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1165, 2, true, 8, 0, 365); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1166, 3, true, 10, 90, 365); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1167, 0, true, 2, 0, 367); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1168, 1, true, 5, 0, 367); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1169, 2, true, 8, 40, 367); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1170, 3, true, 11, 40, 367); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1171, 0, true, 4, 0, 368); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1172, 1, true, 7, 40, 368); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1173, 2, true, 10, 0, 368); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1174, 3, true, 12, 80, 368); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1175, 0, true, 3, 0, 369); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1176, 1, true, 5, 0, 369); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1177, 2, true, 9, 50, 369); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1178, 3, true, 11, 70, 369); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1179, 0, true, 3, 0, 370); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1180, 1, true, 5, 0, 370); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1181, 2, true, 8, 70, 370); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1182, 3, true, 12, 40, 370); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1183, 0, true, 3, 0, 371); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1184, 1, true, 7, 0, 371); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1185, 2, true, 9, 90, 371); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1186, 3, true, 12, 70, 371); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1187, 0, true, 2, 0, 372); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1188, 1, true, 5, 0, 372); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1189, 2, true, 8, 30, 372); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1190, 3, true, 12, 20, 372); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1191, 0, true, 3, 0, 373); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1192, 1, true, 6, 0, 373); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1193, 2, true, 8, 90, 373); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1194, 3, true, 12, 40, 373); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1195, 0, true, 3, 0, 374); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1196, 1, true, 6, 0, 374); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1197, 2, true, 10, 0, 374); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1198, 3, true, 12, 60, 374); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1199, 0, true, 3, 0, 375); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1200, 1, true, 5, 0, 375); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1201, 2, true, 9, 0, 375); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1202, 3, true, 11, 50, 375); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1203, 0, true, 3, 0, 376); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1204, 1, true, 5, 0, 376); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1205, 2, true, 9, 70, 376); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1206, 3, true, 12, 20, 376); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1207, 0, true, 3, 0, 377); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1208, 1, true, 5, 0, 377); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1209, 2, true, 8, 40, 377); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1210, 3, true, 11, 50, 377); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1211, 0, true, 2, 0, 379); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1212, 1, true, 5, 0, 379); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1213, 2, true, 8, 30, 379); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1214, 3, true, 12, 0, 379); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1215, 0, true, 3, 0, 380); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1216, 1, true, 5, 0, 380); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1217, 2, true, 8, 70, 380); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1218, 3, true, 11, 40, 380); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1219, 0, true, 3, 0, 381); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1220, 1, true, 6, 0, 381); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1221, 2, true, 8, 70, 381); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1222, 3, true, 12, 0, 381); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1223, 0, true, 3, 0, 382); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1224, 1, true, 6, 0, 382); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1225, 2, true, 9, 40, 382); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1226, 3, true, 12, 20, 382); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1227, 0, true, 3, 0, 383); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1228, 1, true, 5, 0, 383); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1229, 2, true, 9, 20, 383); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1230, 3, true, 12, 60, 383); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1231, 0, true, 3, 0, 384); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1232, 1, true, 5, 0, 384); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1233, 2, true, 10, 0, 384); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1234, 3, true, 12, 40, 384); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1235, 0, true, 3, 0, 385); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1236, 1, true, 7, 50, 385); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1237, 2, true, 10, 80, 385); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1238, 3, true, 13, 40, 385); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1239, 0, true, 5, 0, 386); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1240, 1, true, 8, 90, 386); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1241, 2, true, 12, 70, 386); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1242, 3, true, 13, 90, 386); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1243, 0, true, 4, 0, 388); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1244, 1, true, 7, 40, 388); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1245, 2, true, 10, 70, 388); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1246, 3, true, 13, 30, 388); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1247, 0, true, 3, 0, 389); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1248, 1, true, 7, 0, 389); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1249, 2, true, 11, 0, 389); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1250, 3, true, 13, 50, 389); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1251, 0, true, 3, 0, 390); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1252, 1, true, 5, 0, 390); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1253, 2, true, 8, 80, 390); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1254, 3, true, 12, 20, 390); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1255, 0, true, 3, 0, 391); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1256, 1, true, 5, 0, 391); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1257, 2, true, 8, 50, 391); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1258, 3, true, 11, 50, 391); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1259, 0, true, 4, 0, 393); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1260, 1, true, 7, 90, 393); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1261, 2, true, 11, 70, 393); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1262, 3, true, 13, 90, 393); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1263, 0, true, 3, 0, 394); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1264, 1, true, 6, 0, 394); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1265, 2, true, 8, 60, 394); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1266, 3, true, 11, 70, 394); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1267, 0, true, 2, 0, 395); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1268, 1, true, 5, 0, 395); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1269, 2, true, 8, 30, 395); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1270, 3, true, 11, 90, 395); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1271, 0, true, 3, 0, 396); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1272, 1, true, 6, 0, 396); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1273, 2, true, 9, 40, 396); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1274, 3, true, 12, 10, 396); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1275, 0, true, 4, 0, 397); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1276, 1, true, 8, 50, 397); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1277, 2, true, 11, 0, 397); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1278, 3, true, 13, 50, 397); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1279, 0, true, 2, 0, 398); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1280, 1, true, 5, 0, 398); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1281, 2, true, 9, 50, 398); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1282, 3, true, 11, 80, 398); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1283, 0, true, 3, 0, 399); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1284, 1, true, 6, 0, 399); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1285, 2, true, 9, 70, 399); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1286, 3, true, 12, 60, 399); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1287, 0, true, 3, 0, 402); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1288, 1, true, 5, 0, 402); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1289, 2, true, 9, 60, 402); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1290, 3, true, 12, 20, 402); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1291, 0, true, 2, 0, 403); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1292, 1, true, 4, 0, 403); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1293, 2, true, 8, 50, 403); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1294, 3, true, 11, 20, 403); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1295, 0, true, 3, 0, 404); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1296, 1, true, 5, 0, 404); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1297, 2, true, 9, 40, 404); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1298, 3, true, 12, 0, 404); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1299, 0, true, 3, 0, 405); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1300, 1, true, 7, 0, 405); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1301, 2, true, 10, 70, 405); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1302, 3, true, 13, 20, 405); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1303, 0, true, 3, 0, 406); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1304, 1, true, 6, 0, 406); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1305, 2, true, 9, 80, 406); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1306, 3, true, 12, 40, 406); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1307, 0, true, 5, 0, 407); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1308, 1, true, 9, 90, 407); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1309, 2, true, 13, 20, 407); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1310, 3, true, 14, 10, 407); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1311, 0, true, 3, 0, 409); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1312, 1, true, 7, 0, 409); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1313, 2, true, 10, 90, 409); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1314, 3, true, 13, 90, 409); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1315, 0, true, 3, 0, 410); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1316, 1, true, 6, 0, 410); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1317, 2, true, 10, 10, 410); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1318, 3, true, 12, 70, 410); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1319, 0, true, 3, 0, 411); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1320, 1, true, 6, 0, 411); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1321, 2, true, 9, 0, 411); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1322, 3, true, 12, 30, 411); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1323, 0, true, 3, 0, 413); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1324, 1, true, 6, 0, 413); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1325, 2, true, 10, 90, 413); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1326, 3, true, 13, 0, 413); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1327, 0, true, 4, 0, 414); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1328, 1, true, 7, 50, 414); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1329, 2, true, 11, 30, 414); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1330, 3, true, 13, 30, 414); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1331, 0, true, 2, 0, 416); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1332, 1, true, 5, 0, 416); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1333, 2, true, 9, 50, 416); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1334, 3, true, 12, 40, 416); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1335, 0, true, 3, 0, 417); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1336, 1, true, 6, 0, 417); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1337, 2, true, 9, 70, 417); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1338, 3, true, 12, 40, 417); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1339, 0, true, 3, 0, 419); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1340, 1, true, 6, 0, 419); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1341, 2, true, 9, 30, 419); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1342, 3, true, 11, 70, 419); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1343, 0, true, 3, 0, 420); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1344, 1, true, 5, 0, 420); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1345, 2, true, 9, 0, 420); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1346, 3, true, 12, 30, 420); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1347, 0, true, 3, 0, 421); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1348, 1, true, 5, 0, 421); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1349, 2, true, 8, 80, 421); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1350, 3, true, 11, 90, 421); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1351, 0, true, 2, 0, 422); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1352, 1, true, 5, 0, 422); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1353, 2, true, 8, 90, 422); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1354, 3, true, 11, 60, 422); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1355, 0, true, 3, 0, 424); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1356, 1, true, 5, 0, 424); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1357, 2, true, 8, 50, 424); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1358, 3, true, 11, 60, 424); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1359, 0, true, 2, 0, 426); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1360, 1, true, 4, 0, 426); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1361, 2, true, 8, 70, 426); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1362, 3, true, 11, 50, 426); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1363, 0, true, 3, 0, 427); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1364, 1, true, 6, 0, 427); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1365, 2, true, 9, 90, 427); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1366, 3, true, 12, 50, 427); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1367, 0, true, 3, 0, 430); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1368, 1, true, 5, 0, 430); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1369, 2, true, 9, 80, 430); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1370, 3, true, 12, 10, 430); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1371, 0, true, 3, 0, 431); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1372, 1, true, 6, 0, 431); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1373, 2, true, 10, 0, 431); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1374, 3, true, 12, 60, 431); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1375, 0, true, 3, 0, 432); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1376, 1, true, 6, 0, 432); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1377, 2, true, 9, 50, 432); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1378, 3, true, 12, 30, 432); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1379, 0, true, 3, 0, 433); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1380, 1, true, 6, 0, 433); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1381, 2, true, 9, 80, 433); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1382, 3, true, 13, 0, 433); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1383, 0, true, 3, 0, 434); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1384, 1, true, 5, 0, 434); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1385, 2, true, 10, 10, 434); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1386, 3, true, 13, 30, 434); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1387, 0, true, 4, 0, 435); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1388, 1, true, 7, 90, 435); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1389, 2, true, 11, 40, 435); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1390, 3, true, 13, 30, 435); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1391, 0, true, 3, 0, 436); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1392, 1, true, 5, 0, 436); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1393, 2, true, 10, 10, 436); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1394, 3, true, 12, 50, 436); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1395, 0, true, 4, 0, 437); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1396, 1, true, 6, 0, 437); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1397, 2, true, 10, 0, 437); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1398, 3, true, 13, 20, 437); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1399, 0, true, 3, 0, 438); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1400, 1, true, 6, 0, 438); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1401, 2, true, 8, 70, 438); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1402, 3, true, 12, 20, 438); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1403, 0, true, 2, 0, 439); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1404, 1, true, 5, 0, 439); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1405, 2, true, 9, 30, 439); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1406, 3, true, 12, 0, 439); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1407, 0, true, 3, 0, 440); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1408, 1, true, 6, 0, 440); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1409, 2, true, 9, 70, 440); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1410, 3, true, 12, 90, 440); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1411, 0, true, 4, 0, 441); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1412, 1, true, 8, 0, 441); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1413, 2, true, 12, 50, 441); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1414, 3, true, 13, 80, 441); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1415, 0, true, 4, 0, 442); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1416, 1, true, 9, 50, 442); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1417, 2, true, 12, 60, 442); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1418, 3, true, 13, 90, 442); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1419, 0, true, 2, 0, 444); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1420, 1, true, 5, 0, 444); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1421, 2, true, 9, 0, 444); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1422, 3, true, 11, 70, 444); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1423, 0, true, 3, 0, 445); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1424, 1, true, 5, 0, 445); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1425, 2, true, 8, 30, 445); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1426, 3, true, 12, 10, 445); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1427, 0, true, 3, 0, 446); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1428, 1, true, 6, 0, 446); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1429, 2, true, 9, 10, 446); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1430, 3, true, 11, 80, 446); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1431, 0, true, 3, 0, 447); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1432, 1, true, 6, 0, 447); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1433, 2, true, 10, 40, 447); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1434, 3, true, 12, 70, 447); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1435, 0, true, 3, 0, 448); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1436, 1, true, 6, 0, 448); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1437, 2, true, 9, 90, 448); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1438, 3, true, 13, 30, 448); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1439, 0, true, 4, 0, 449); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1440, 1, true, 7, 0, 449); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1441, 2, true, 10, 20, 449); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1442, 3, true, 13, 20, 449); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1443, 0, true, 3, 0, 454); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1444, 1, true, 6, 0, 454); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1445, 2, true, 9, 60, 454); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1446, 3, true, 12, 50, 454); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1447, 0, true, 3, 0, 455); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1448, 1, true, 5, 0, 455); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1449, 2, true, 9, 70, 455); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1450, 3, true, 12, 60, 455); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1451, 0, true, 3, 0, 456); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1452, 1, true, 5, 0, 456); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1453, 2, true, 9, 90, 456); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1454, 3, true, 12, 70, 456); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1455, 0, true, 3, 0, 457); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1456, 1, true, 6, 0, 457); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1457, 2, true, 9, 30, 457); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1458, 3, true, 12, 50, 457); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1459, 0, true, 2, 0, 458); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1460, 1, true, 6, 0, 458); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1461, 2, true, 9, 70, 458); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1462, 3, true, 12, 80, 458); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1463, 0, true, 3, 0, 459); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1464, 1, true, 5, 0, 459); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1465, 2, true, 9, 50, 459); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1466, 3, true, 12, 40, 459); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1467, 0, true, 2, 0, 460); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1468, 1, true, 4, 0, 460); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1469, 2, true, 8, 40, 460); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1470, 3, true, 10, 20, 460); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1471, 0, true, 3, 0, 462); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1472, 1, true, 6, 0, 462); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1473, 2, true, 9, 20, 462); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1474, 3, true, 12, 20, 462); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1475, 0, true, 3, 0, 463); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1476, 1, true, 6, 0, 463); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1477, 2, true, 9, 80, 463); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1478, 3, true, 12, 60, 463); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1479, 0, true, 4, 0, 464); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1480, 1, true, 9, 80, 464); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1481, 2, true, 12, 70, 464); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1482, 3, true, 14, 10, 464); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1483, 0, true, 4, 0, 465); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1484, 1, true, 9, 50, 465); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1485, 2, true, 12, 50, 465); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1486, 3, true, 14, 0, 465); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1487, 0, true, 3, 0, 466); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1488, 1, true, 7, 40, 466); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1489, 2, true, 11, 90, 466); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1490, 3, true, 13, 70, 466); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1491, 0, true, 2, 0, 467); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1492, 1, true, 5, 0, 467); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1493, 2, true, 10, 40, 467); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1494, 3, true, 13, 20, 467); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1495, 0, true, 4, 0, 468); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1496, 1, true, 7, 0, 468); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1497, 2, true, 10, 60, 468); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1498, 3, true, 12, 90, 468); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1499, 0, true, 4, 0, 469); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1500, 1, true, 8, 40, 469); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1501, 2, true, 12, 0, 469); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1502, 3, true, 13, 90, 469); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1503, 0, true, 3, 0, 470); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1504, 1, true, 7, 0, 470); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1505, 2, true, 11, 40, 470); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1506, 3, true, 13, 50, 470); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1507, 0, true, 4, 0, 471); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1508, 1, true, 7, 50, 471); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1509, 2, true, 11, 70, 471); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1510, 3, true, 13, 60, 471); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1511, 0, true, 4, 0, 472); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1512, 1, true, 7, 70, 472); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1513, 2, true, 11, 90, 472); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1514, 3, true, 13, 60, 472); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1515, 0, true, 3, 0, 473); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1516, 1, true, 5, 0, 473); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1517, 2, true, 8, 50, 473); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1518, 3, true, 11, 50, 473); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1519, 0, true, 3, 0, 475); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1520, 1, true, 5, 0, 475); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1521, 2, true, 9, 40, 475); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1522, 3, true, 11, 60, 475); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1523, 0, true, 3, 0, 476); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1524, 1, true, 5, 0, 476); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1525, 2, true, 9, 20, 476); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1526, 3, true, 11, 70, 476); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1527, 0, true, 3, 0, 477); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1528, 1, true, 5, 0, 477); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1529, 2, true, 8, 80, 477); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1530, 3, true, 11, 90, 477); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1531, 0, true, 3, 0, 478); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1532, 1, true, 6, 0, 478); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1533, 2, true, 8, 60, 478); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1534, 3, true, 12, 40, 478); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1535, 0, true, 3, 0, 479); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1536, 1, true, 5, 0, 479); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1537, 2, true, 9, 40, 479); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1538, 3, true, 12, 30, 479); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1539, 0, true, 3, 0, 481); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1540, 1, true, 5, 0, 481); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1541, 2, true, 9, 0, 481); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1542, 3, true, 12, 50, 481); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1543, 0, true, 3, 0, 482); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1544, 1, true, 6, 0, 482); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1545, 2, true, 9, 70, 482); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1546, 3, true, 12, 60, 482); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1547, 0, true, 3, 0, 483); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1548, 1, true, 5, 0, 483); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1549, 2, true, 9, 60, 483); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1550, 3, true, 12, 50, 483); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1551, 0, true, 3, 0, 485); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1552, 1, true, 6, 0, 485); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1553, 2, true, 9, 30, 485); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1554, 3, true, 11, 80, 485); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1555, 0, true, 4, 0, 486); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1556, 1, true, 8, 70, 486); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1557, 2, true, 11, 90, 486); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1558, 3, true, 13, 70, 486); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1559, 0, true, 3, 0, 487); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1560, 1, true, 6, 0, 487); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1561, 2, true, 10, 80, 487); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1562, 3, true, 12, 70, 487); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1563, 0, true, 2, 0, 488); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1564, 1, true, 4, 0, 488); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1565, 2, true, 8, 40, 488); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1566, 3, true, 11, 30, 488); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1567, 0, true, 2, 0, 489); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1568, 1, true, 5, 0, 489); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1569, 2, true, 9, 40, 489); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1570, 3, true, 12, 50, 489); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1571, 0, true, 2, 0, 490); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1572, 1, true, 6, 0, 490); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1573, 2, true, 10, 70, 490); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1574, 3, true, 12, 90, 490); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1575, 0, true, 3, 0, 491); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1576, 1, true, 5, 0, 491); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1577, 2, true, 9, 80, 491); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1578, 3, true, 12, 50, 491); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1579, 0, true, 3, 0, 492); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1580, 1, true, 6, 0, 492); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1581, 2, true, 9, 80, 492); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1582, 3, true, 12, 70, 492); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1583, 0, true, 3, 0, 493); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1584, 1, true, 7, 0, 493); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1585, 2, true, 10, 50, 493); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1586, 3, true, 12, 50, 493); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1587, 0, true, 3, 0, 494); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1588, 1, true, 6, 0, 494); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1589, 2, true, 9, 20, 494); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1590, 3, true, 12, 70, 494); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1591, 0, true, 3, 0, 495); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1592, 1, true, 5, 0, 495); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1593, 2, true, 9, 50, 495); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1594, 3, true, 12, 10, 495); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1595, 0, true, 3, 0, 496); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1596, 1, true, 7, 0, 496); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1597, 2, true, 10, 70, 496); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1598, 3, true, 13, 30, 496); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1599, 0, true, 2, 0, 497); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1600, 1, true, 5, 0, 497); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1601, 2, true, 9, 80, 497); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1602, 3, true, 12, 50, 497); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1603, 0, true, 3, 0, 498); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1604, 1, true, 6, 0, 498); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1605, 2, true, 9, 50, 498); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1606, 3, true, 12, 50, 498); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1607, 0, true, 4, 0, 499); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1608, 1, true, 8, 40, 499); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1609, 2, true, 12, 10, 499); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1610, 3, true, 13, 90, 499); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1611, 0, true, 2, 0, 500); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1612, 1, true, 5, 0, 500); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1613, 2, true, 8, 50, 500); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1614, 3, true, 11, 70, 500); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1615, 0, true, 2, 0, 501); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1616, 1, true, 5, 0, 501); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1617, 2, true, 8, 60, 501); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1618, 3, true, 11, 50, 501); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1619, 0, true, 2, 0, 502); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1620, 1, true, 5, 0, 502); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1621, 2, true, 8, 90, 502); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1622, 3, true, 11, 80, 502); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1623, 0, true, 2, 0, 503); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1624, 1, true, 5, 0, 503); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1625, 2, true, 8, 70, 503); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1626, 3, true, 11, 80, 503); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1627, 0, true, 4, 0, 504); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1628, 1, true, 8, 70, 504); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1629, 2, true, 11, 50, 504); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1630, 3, true, 13, 70, 504); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1631, 0, true, 3, 0, 505); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1632, 1, true, 6, 0, 505); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1633, 2, true, 9, 0, 505); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1634, 3, true, 11, 90, 505); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1635, 0, true, 4, 0, 506); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1636, 1, true, 8, 0, 506); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1637, 2, true, 12, 40, 506); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1638, 3, true, 13, 60, 506); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1639, 0, true, 3, 0, 509); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1640, 1, true, 6, 0, 509); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1641, 2, true, 9, 60, 509); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1642, 3, true, 12, 10, 509); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1643, 0, true, 2, 0, 512); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1644, 1, true, 5, 0, 512); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1645, 2, true, 8, 90, 512); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1646, 3, true, 11, 60, 512); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1647, 0, true, 3, 0, 513); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1648, 1, true, 6, 0, 513); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1649, 2, true, 9, 80, 513); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1650, 3, true, 12, 30, 513); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1651, 0, true, 3, 0, 514); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1652, 1, true, 5, 0, 514); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1653, 2, true, 9, 50, 514); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1654, 3, true, 12, 40, 514); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1655, 0, true, 3, 0, 515); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1656, 1, true, 5, 0, 515); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1657, 2, true, 9, 10, 515); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1658, 3, true, 12, 50, 515); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1659, 0, true, 3, 0, 516); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1660, 1, true, 5, 0, 516); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1661, 2, true, 8, 40, 516); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1662, 3, true, 12, 20, 516); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1663, 0, true, 3, 0, 517); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1664, 1, true, 6, 0, 517); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1665, 2, true, 10, 10, 517); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1666, 3, true, 12, 60, 517); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1667, 0, true, 3, 0, 522); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1668, 1, true, 5, 0, 522); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1669, 2, true, 8, 50, 522); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1670, 3, true, 11, 90, 522); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1671, 0, true, 3, 0, 523); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1672, 1, true, 5, 0, 523); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1673, 2, true, 9, 50, 523); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1674, 3, true, 11, 80, 523); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1675, 0, true, 3, 0, 524); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1676, 1, true, 5, 0, 524); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1677, 2, true, 9, 40, 524); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1678, 3, true, 12, 60, 524); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1679, 0, true, 3, 0, 525); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1680, 1, true, 6, 0, 525); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1681, 2, true, 9, 40, 525); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1682, 3, true, 12, 40, 525); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1683, 0, true, 3, 0, 526); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1684, 1, true, 5, 0, 526); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1685, 2, true, 9, 60, 526); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1686, 3, true, 12, 10, 526); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1687, 0, true, 3, 0, 528); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1688, 1, true, 5, 0, 528); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1689, 2, true, 9, 80, 528); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1690, 3, true, 12, 90, 528); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1691, 0, true, 3, 0, 529); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1692, 1, true, 5, 0, 529); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1693, 2, true, 9, 50, 529); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1694, 3, true, 11, 80, 529); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1695, 0, true, 3, 0, 530); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1696, 1, true, 5, 0, 530); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1697, 2, true, 8, 90, 530); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1698, 3, true, 11, 50, 530); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1699, 0, true, 2, 0, 531); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1700, 1, true, 4, 0, 531); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1701, 2, true, 8, 10, 531); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1702, 3, true, 10, 70, 531); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1703, 0, true, 3, 0, 532); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1704, 1, true, 5, 0, 532); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1705, 2, true, 8, 80, 532); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1706, 3, true, 12, 40, 532); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1707, 0, true, 3, 0, 533); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1708, 1, true, 5, 0, 533); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1709, 2, true, 8, 70, 533); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1710, 3, true, 12, 30, 533); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1711, 0, true, 3, 0, 534); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1712, 1, true, 6, 0, 534); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1713, 2, true, 10, 10, 534); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1714, 3, true, 13, 30, 534); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1715, 0, true, 3, 0, 535); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1716, 1, true, 6, 0, 535); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1717, 2, true, 9, 50, 535); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1718, 3, true, 12, 50, 535); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1719, 0, true, 3, 0, 537); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1720, 1, true, 6, 0, 537); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1721, 2, true, 9, 50, 537); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1722, 3, true, 12, 0, 537); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1723, 0, true, 4, 0, 538); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1724, 1, true, 8, 90, 538); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1725, 2, true, 12, 0, 538); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1726, 3, true, 13, 80, 538); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1727, 0, true, 3, 0, 540); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1728, 1, true, 5, 0, 540); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1729, 2, true, 8, 30, 540); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1730, 3, true, 12, 30, 540); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1731, 0, true, 3, 0, 541); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1732, 1, true, 5, 0, 541); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1733, 2, true, 9, 10, 541); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1734, 3, true, 11, 70, 541); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1735, 0, true, 2, 0, 542); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1736, 1, true, 5, 0, 542); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1737, 2, true, 8, 70, 542); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1738, 3, true, 11, 70, 542); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1739, 0, true, 2, 0, 544); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1740, 1, true, 5, 0, 544); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1741, 2, true, 8, 90, 544); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1742, 3, true, 11, 70, 544); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1743, 0, true, 3, 0, 545); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1744, 1, true, 5, 0, 545); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1745, 2, true, 8, 40, 545); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1746, 3, true, 11, 40, 545); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1747, 0, true, 3, 0, 546); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1748, 1, true, 6, 0, 546); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1749, 2, true, 9, 50, 546); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1750, 3, true, 12, 40, 546); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1751, 0, true, 3, 0, 547); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1752, 1, true, 6, 0, 547); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1753, 2, true, 10, 0, 547); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1754, 3, true, 13, 10, 547); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1755, 0, true, 6, 0, 548); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1756, 1, true, 9, 80, 548); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1757, 2, true, 11, 80, 548); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1758, 3, true, 13, 80, 548); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1759, 0, true, 2, 0, 549); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1760, 1, true, 4, 0, 549); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1761, 2, true, 8, 70, 549); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1762, 3, true, 11, 20, 549); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1763, 0, true, 3, 0, 550); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1764, 1, true, 5, 0, 550); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1765, 2, true, 8, 50, 550); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1766, 3, true, 11, 30, 550); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1767, 0, true, 4, 0, 551); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1768, 1, true, 7, 70, 551); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1769, 2, true, 11, 40, 551); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1770, 3, true, 13, 60, 551); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1771, 0, true, 4, 0, 552); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1772, 1, true, 8, 50, 552); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1773, 2, true, 12, 0, 552); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1774, 3, true, 13, 80, 552); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1775, 0, true, 3, 0, 553); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1776, 1, true, 6, 0, 553); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1777, 2, true, 9, 0, 553); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1778, 3, true, 12, 40, 553); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1779, 0, true, 3, 0, 554); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1780, 1, true, 5, 0, 554); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1781, 2, true, 8, 40, 554); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1782, 3, true, 11, 60, 554); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1783, 0, true, 2, 0, 555); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1784, 1, true, 5, 0, 555); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1785, 2, true, 9, 20, 555); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1786, 3, true, 12, 30, 555); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1787, 0, true, 2, 0, 556); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1788, 1, true, 5, 0, 556); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1789, 2, true, 9, 40, 556); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1790, 3, true, 12, 0, 556); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1791, 0, true, 3, 0, 557); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1792, 1, true, 5, 0, 557); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1793, 2, true, 9, 70, 557); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1794, 3, true, 12, 50, 557); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1795, 0, true, 3, 0, 558); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1796, 1, true, 6, 0, 558); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1797, 2, true, 9, 60, 558); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1798, 3, true, 12, 30, 558); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1799, 0, true, 4, 0, 559); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1800, 1, true, 9, 50, 559); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1801, 2, true, 12, 60, 559); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1802, 3, true, 13, 90, 559); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1803, 0, true, 3, 0, 560); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1804, 1, true, 5, 0, 560); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1805, 2, true, 9, 20, 560); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1806, 3, true, 11, 90, 560); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1807, 0, true, 3, 0, 561); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1808, 1, true, 6, 0, 561); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1809, 2, true, 9, 70, 561); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1810, 3, true, 12, 50, 561); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1811, 0, true, 3, 0, 562); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1812, 1, true, 5, 0, 562); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1813, 2, true, 9, 0, 562); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1814, 3, true, 12, 50, 562); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1815, 0, true, 3, 0, 564); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1816, 1, true, 6, 0, 564); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1817, 2, true, 9, 40, 564); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1818, 3, true, 12, 30, 564); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1819, 0, true, 2, 0, 565); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1820, 1, true, 6, 0, 565); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1821, 2, true, 9, 70, 565); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1822, 3, true, 11, 90, 565); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1823, 0, true, 2, 0, 566); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1824, 1, true, 6, 0, 566); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1825, 2, true, 10, 70, 566); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1826, 3, true, 12, 90, 566); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1827, 0, true, 3, 0, 567); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1828, 1, true, 5, 0, 567); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1829, 2, true, 9, 30, 567); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1830, 3, true, 12, 40, 567); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1831, 0, true, 3, 0, 568); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1832, 1, true, 7, 0, 568); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1833, 2, true, 10, 90, 568); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1834, 3, true, 13, 30, 568); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1835, 0, true, 3, 0, 569); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1836, 1, true, 6, 0, 569); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1837, 2, true, 11, 30, 569); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1838, 3, true, 13, 50, 569); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1839, 0, true, 4, 0, 570); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1840, 1, true, 8, 10, 570); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1841, 2, true, 12, 40, 570); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1842, 3, true, 13, 80, 570); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1843, 0, true, 3, 0, 572); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1844, 1, true, 5, 0, 572); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1845, 2, true, 9, 70, 572); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1846, 3, true, 12, 40, 572); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1847, 0, true, 3, 0, 573); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1848, 1, true, 6, 0, 573); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1849, 2, true, 9, 60, 573); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1850, 3, true, 12, 30, 573); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1851, 0, true, 3, 0, 574); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1852, 1, true, 6, 0, 574); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1853, 2, true, 9, 30, 574); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1854, 3, true, 12, 0, 574); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1855, 0, true, 3, 0, 575); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1856, 1, true, 6, 0, 575); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1857, 2, true, 9, 30, 575); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1858, 3, true, 12, 20, 575); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1859, 0, true, 3, 0, 577); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1860, 1, true, 5, 0, 577); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1861, 2, true, 9, 70, 577); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1862, 3, true, 12, 50, 577); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1863, 0, true, 3, 0, 578); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1864, 1, true, 6, 0, 578); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1865, 2, true, 9, 10, 578); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1866, 3, true, 12, 50, 578); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1867, 0, true, 3, 0, 579); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1868, 1, true, 5, 0, 579); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1869, 2, true, 9, 20, 579); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1870, 3, true, 11, 90, 579); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1871, 0, true, 3, 0, 580); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1872, 1, true, 6, 0, 580); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1873, 2, true, 9, 60, 580); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1874, 3, true, 12, 40, 580); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1875, 0, true, 3, 0, 581); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1876, 1, true, 6, 0, 581); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1877, 2, true, 9, 70, 581); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1878, 3, true, 12, 30, 581); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1879, 0, true, 2, 0, 582); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1880, 1, true, 6, 0, 582); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1881, 2, true, 9, 40, 582); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1882, 3, true, 12, 40, 582); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1883, 0, true, 3, 0, 583); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1884, 1, true, 5, 0, 583); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1885, 2, true, 9, 60, 583); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1886, 3, true, 12, 80, 583); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1887, 0, true, 3, 0, 585); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1888, 1, true, 5, 0, 585); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1889, 2, true, 8, 80, 585); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1890, 3, true, 12, 60, 585); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1891, 0, true, 3, 0, 586); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1892, 1, true, 5, 0, 586); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1893, 2, true, 9, 0, 586); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1894, 3, true, 12, 40, 586); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1895, 0, true, 3, 0, 587); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1896, 1, true, 6, 0, 587); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1897, 2, true, 9, 10, 587); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1898, 3, true, 12, 40, 587); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1899, 0, true, 2, 0, 588); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1900, 1, true, 4, 0, 588); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1901, 2, true, 8, 0, 588); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1902, 3, true, 11, 50, 588); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1903, 0, true, 3, 0, 589); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1904, 1, true, 6, 0, 589); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1905, 2, true, 10, 60, 589); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1906, 3, true, 12, 90, 589); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1907, 0, true, 3, 0, 590); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1908, 1, true, 6, 0, 590); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1909, 2, true, 10, 70, 590); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1910, 3, true, 12, 60, 590); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1911, 0, true, 3, 0, 591); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1912, 1, true, 5, 0, 591); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1913, 2, true, 8, 80, 591); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1914, 3, true, 12, 10, 591); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1915, 0, true, 3, 0, 592); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1916, 1, true, 5, 0, 592); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1917, 2, true, 9, 40, 592); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1918, 3, true, 12, 50, 592); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1919, 0, true, 2, 0, 593); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1920, 1, true, 5, 0, 593); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1921, 2, true, 8, 90, 593); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1922, 3, true, 12, 20, 593); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1923, 0, true, 3, 0, 594); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1924, 1, true, 5, 0, 594); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1925, 2, true, 9, 70, 594); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1926, 3, true, 12, 70, 594); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1927, 0, true, 3, 0, 595); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1928, 1, true, 6, 0, 595); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1929, 2, true, 10, 0, 595); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1930, 3, true, 13, 0, 595); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1931, 0, true, 2, 0, 597); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1932, 1, true, 5, 0, 597); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1933, 2, true, 9, 20, 597); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1934, 3, true, 11, 60, 597); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1935, 0, true, 3, 0, 599); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1936, 1, true, 5, 0, 599); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1937, 2, true, 9, 40, 599); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1938, 3, true, 11, 10, 599); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1939, 0, true, 3, 0, 600); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1940, 1, true, 7, 0, 600); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1941, 2, true, 11, 90, 600); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1942, 3, true, 13, 50, 600); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1943, 0, true, 3, 0, 601); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1944, 1, true, 6, 0, 601); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1945, 2, true, 9, 90, 601); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1946, 3, true, 12, 50, 601); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1947, 0, true, 3, 0, 605); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1948, 1, true, 6, 0, 605); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1949, 2, true, 9, 70, 605); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1950, 3, true, 12, 40, 605); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1951, 0, true, 3, 0, 606); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1952, 1, true, 5, 0, 606); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1953, 2, true, 8, 80, 606); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1954, 3, true, 12, 20, 606); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1955, 0, true, 3, 0, 607); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1956, 1, true, 6, 0, 607); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1957, 2, true, 9, 50, 607); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1958, 3, true, 12, 70, 607); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1959, 0, true, 3, 0, 609); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1960, 1, true, 5, 0, 609); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1961, 2, true, 9, 20, 609); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1962, 3, true, 12, 40, 609); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1963, 0, true, 3, 0, 610); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1964, 1, true, 5, 0, 610); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1965, 2, true, 8, 90, 610); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1966, 3, true, 11, 90, 610); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1967, 0, true, 2, 0, 611); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1968, 1, true, 5, 0, 611); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1969, 2, true, 8, 70, 611); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1970, 3, true, 12, 10, 611); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1971, 0, true, 2, 0, 612); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1972, 1, true, 5, 0, 612); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1973, 2, true, 8, 40, 612); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1974, 3, true, 11, 60, 612); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1975, 0, true, 3, 0, 613); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1976, 1, true, 6, 0, 613); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1977, 2, true, 8, 90, 613); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1978, 3, true, 11, 70, 613); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1979, 0, true, 3, 0, 614); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1980, 1, true, 5, 0, 614); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1981, 2, true, 8, 90, 614); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1982, 3, true, 12, 50, 614); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1983, 0, true, 2, 0, 615); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1984, 1, true, 6, 0, 615); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1985, 2, true, 10, 80, 615); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1986, 3, true, 12, 80, 615); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1987, 0, true, 3, 0, 616); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1988, 1, true, 7, 0, 616); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1989, 2, true, 11, 30, 616); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1990, 3, true, 12, 80, 616); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1991, 0, true, 3, 0, 617); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1992, 1, true, 7, 0, 617); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1993, 2, true, 11, 90, 617); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1994, 3, true, 13, 90, 617); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1995, 0, true, 4, 0, 618); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1996, 1, true, 9, 70, 618); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1997, 2, true, 13, 0, 618); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1998, 3, true, 14, 10, 618); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (1999, 0, true, 3, 0, 619); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2000, 1, true, 8, 60, 619); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2001, 2, true, 12, 70, 619); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2002, 3, true, 13, 90, 619); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2003, 0, true, 2, 0, 620); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2004, 1, true, 5, 0, 620); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2005, 2, true, 8, 70, 620); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2006, 3, true, 12, 30, 620); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2007, 0, true, 3, 0, 621); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2008, 1, true, 6, 0, 621); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2009, 2, true, 9, 10, 621); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2010, 3, true, 11, 60, 621); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2011, 0, true, 2, 0, 622); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2012, 1, true, 5, 0, 622); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2013, 2, true, 9, 0, 622); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2014, 3, true, 11, 40, 622); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2015, 0, true, 3, 0, 623); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2016, 1, true, 6, 0, 623); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2017, 2, true, 8, 50, 623); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2018, 3, true, 11, 90, 623); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2019, 0, true, 3, 0, 624); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2020, 1, true, 6, 0, 624); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2021, 2, true, 8, 80, 624); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2022, 3, true, 12, 10, 624); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2023, 0, true, 4, 0, 625); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2024, 1, true, 9, 0, 625); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2025, 2, true, 12, 40, 625); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2026, 3, true, 13, 50, 625); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2027, 0, true, 3, 0, 626); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2028, 1, true, 6, 0, 626); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2029, 2, true, 9, 30, 626); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2030, 3, true, 12, 60, 626); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2031, 0, true, 2, 0, 627); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2032, 1, true, 4, 0, 627); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2033, 2, true, 8, 90, 627); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2034, 3, true, 12, 20, 627); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2035, 0, true, 3, 0, 628); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2036, 1, true, 6, 0, 628); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2037, 2, true, 10, 80, 628); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2038, 3, true, 13, 20, 628); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2039, 0, true, 3, 0, 629); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2040, 1, true, 7, 10, 629); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2041, 2, true, 10, 10, 629); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2042, 3, true, 12, 40, 629); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2043, 0, true, 5, 0, 631); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2044, 1, true, 8, 80, 631); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2045, 2, true, 12, 40, 631); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2046, 3, true, 13, 70, 631); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2047, 0, true, 3, 0, 632); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2048, 1, true, 6, 0, 632); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2049, 2, true, 8, 80, 632); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2050, 3, true, 12, 40, 632); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2051, 0, true, 3, 0, 633); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2052, 1, true, 6, 0, 633); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2053, 2, true, 9, 20, 633); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2054, 3, true, 12, 40, 633); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2055, 0, true, 3, 0, 635); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2056, 1, true, 6, 0, 635); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2057, 2, true, 9, 90, 635); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2058, 3, true, 12, 60, 635); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2059, 0, true, 3, 0, 636); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2060, 1, true, 6, 0, 636); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2061, 2, true, 9, 50, 636); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2062, 3, true, 12, 10, 636); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2063, 0, true, 3, 0, 637); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2064, 1, true, 5, 0, 637); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2065, 2, true, 9, 50, 637); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2066, 3, true, 13, 40, 637); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2067, 0, true, 1, 0, 638); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2068, 1, true, 4, 0, 638); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2069, 2, true, 7, 40, 638); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2070, 3, true, 10, 60, 638); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2071, 0, true, 2, 0, 639); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2072, 1, true, 5, 0, 639); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2073, 2, true, 8, 50, 639); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2074, 3, true, 11, 50, 639); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2075, 0, true, 3, 0, 640); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2076, 1, true, 5, 0, 640); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2077, 2, true, 8, 90, 640); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2078, 3, true, 12, 0, 640); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2079, 0, true, 3, 0, 642); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2080, 1, true, 6, 0, 642); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2081, 2, true, 8, 80, 642); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2082, 3, true, 11, 80, 642); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2083, 0, true, 2, 0, 644); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2084, 1, true, 5, 0, 644); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2085, 2, true, 9, 40, 644); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2086, 3, true, 11, 40, 644); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2087, 0, true, 3, 0, 645); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2088, 1, true, 6, 0, 645); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2089, 2, true, 8, 50, 645); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2090, 3, true, 11, 50, 645); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2091, 0, true, 3, 0, 646); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2092, 1, true, 5, 0, 646); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2093, 2, true, 8, 30, 646); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2094, 3, true, 12, 20, 646); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2095, 0, true, 2, 0, 647); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2096, 1, true, 5, 0, 647); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2097, 2, true, 8, 70, 647); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2098, 3, true, 10, 90, 647); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2099, 0, true, 3, 0, 648); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2100, 1, true, 5, 0, 648); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2101, 2, true, 8, 70, 648); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2102, 3, true, 11, 70, 648); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2103, 0, true, 2, 0, 649); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2104, 1, true, 5, 0, 649); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2105, 2, true, 8, 90, 649); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2106, 3, true, 11, 70, 649); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2107, 0, true, 3, 0, 650); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2108, 1, true, 6, 0, 650); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2109, 2, true, 9, 40, 650); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2110, 3, true, 12, 20, 650); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2111, 0, true, 3, 0, 651); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2112, 1, true, 5, 0, 651); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2113, 2, true, 9, 40, 651); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2114, 3, true, 12, 40, 651); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2115, 0, true, 3, 0, 652); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2116, 1, true, 6, 0, 652); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2117, 2, true, 9, 20, 652); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2118, 3, true, 12, 70, 652); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2119, 0, true, 3, 0, 653); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2120, 1, true, 6, 0, 653); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2121, 2, true, 9, 60, 653); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2122, 3, true, 12, 30, 653); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2123, 0, true, 3, 0, 654); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2124, 1, true, 5, 0, 654); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2125, 2, true, 9, 40, 654); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2126, 3, true, 12, 30, 654); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2127, 0, true, 2, 0, 655); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2128, 1, true, 5, 0, 655); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2129, 2, true, 8, 80, 655); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2130, 3, true, 11, 80, 655); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2131, 0, true, 2, 0, 656); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2132, 1, true, 5, 0, 656); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2133, 2, true, 9, 20, 656); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2134, 3, true, 11, 50, 656); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2135, 0, true, 3, 0, 657); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2136, 1, true, 5, 0, 657); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2137, 2, true, 9, 0, 657); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2138, 3, true, 11, 70, 657); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2139, 0, true, 2, 0, 658); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2140, 1, true, 5, 0, 658); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2141, 2, true, 8, 50, 658); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2142, 3, true, 12, 0, 658); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2143, 0, true, 3, 0, 659); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2144, 1, true, 6, 0, 659); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2145, 2, true, 9, 70, 659); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2146, 3, true, 12, 40, 659); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2147, 0, true, 3, 0, 660); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2148, 1, true, 5, 0, 660); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2149, 2, true, 8, 40, 660); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2150, 3, true, 11, 60, 660); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2151, 0, true, 3, 0, 662); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2152, 1, true, 6, 0, 662); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2153, 2, true, 9, 50, 662); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2154, 3, true, 12, 40, 662); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2155, 0, true, 2, 0, 663); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2156, 1, true, 5, 0, 663); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2157, 2, true, 9, 10, 663); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2158, 3, true, 12, 80, 663); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2159, 0, true, 3, 0, 664); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2160, 1, true, 6, 0, 664); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2161, 2, true, 8, 60, 664); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2162, 3, true, 12, 10, 664); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2163, 0, true, 3, 0, 665); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2164, 1, true, 5, 0, 665); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2165, 2, true, 9, 70, 665); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2166, 3, true, 12, 50, 665); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2167, 0, true, 3, 0, 666); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2168, 1, true, 5, 0, 666); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2169, 2, true, 9, 70, 666); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2170, 3, true, 12, 40, 666); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2171, 0, true, 3, 0, 667); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2172, 1, true, 6, 0, 667); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2173, 2, true, 10, 0, 667); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2174, 3, true, 13, 20, 667); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2175, 0, true, 3, 0, 668); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2176, 1, true, 7, 0, 668); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2177, 2, true, 11, 0, 668); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2178, 3, true, 13, 30, 668); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2179, 0, true, 3, 0, 669); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2180, 1, true, 8, 30, 669); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2181, 2, true, 10, 90, 669); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2182, 3, true, 13, 60, 669); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2183, 0, true, 4, 0, 670); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2184, 1, true, 8, 40, 670); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2185, 2, true, 11, 60, 670); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2186, 3, true, 13, 60, 670); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2187, 0, true, 3, 0, 671); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2188, 1, true, 7, 0, 671); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2189, 2, true, 11, 80, 671); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2190, 3, true, 13, 40, 671); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2191, 0, true, 2, 0, 672); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2192, 1, true, 5, 0, 672); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2193, 2, true, 9, 70, 672); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2194, 3, true, 12, 50, 672); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2195, 0, true, 3, 0, 673); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2196, 1, true, 6, 0, 673); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2197, 2, true, 9, 50, 673); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2198, 3, true, 12, 30, 673); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2199, 0, true, 2, 0, 674); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2200, 1, true, 5, 0, 674); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2201, 2, true, 9, 10, 674); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2202, 3, true, 12, 10, 674); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2203, 0, true, 3, 0, 675); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2204, 1, true, 6, 0, 675); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2205, 2, true, 8, 90, 675); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2206, 3, true, 12, 40, 675); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2207, 0, true, 3, 0, 676); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2208, 1, true, 6, 0, 676); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2209, 2, true, 12, 10, 676); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2210, 3, true, 13, 60, 676); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2211, 0, true, 4, 0, 677); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2212, 1, true, 7, 50, 677); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2213, 2, true, 11, 70, 677); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2214, 3, true, 13, 60, 677); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2215, 0, true, 4, 0, 678); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2216, 1, true, 7, 0, 678); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2217, 2, true, 10, 70, 678); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2218, 3, true, 13, 50, 678); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2219, 0, true, 3, 0, 679); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2220, 1, true, 5, 0, 679); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2221, 2, true, 9, 10, 679); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2222, 3, true, 12, 50, 679); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2223, 0, true, 2, 0, 681); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2224, 1, true, 6, 0, 681); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2225, 2, true, 9, 20, 681); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2226, 3, true, 12, 60, 681); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2227, 0, true, 2, 0, 682); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2228, 1, true, 4, 0, 682); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2229, 2, true, 8, 70, 682); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2230, 3, true, 10, 90, 682); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2231, 0, true, 3, 0, 683); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2232, 1, true, 6, 0, 683); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2233, 2, true, 9, 20, 683); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2234, 3, true, 11, 70, 683); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2235, 0, true, 3, 0, 684); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2236, 1, true, 6, 0, 684); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2237, 2, true, 9, 40, 684); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2238, 3, true, 12, 10, 684); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2239, 0, true, 3, 0, 685); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2240, 1, true, 5, 0, 685); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2241, 2, true, 9, 50, 685); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2242, 3, true, 12, 50, 685); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2243, 0, true, 3, 0, 686); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2244, 1, true, 5, 0, 686); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2245, 2, true, 9, 10, 686); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2246, 3, true, 12, 40, 686); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2247, 0, true, 3, 0, 688); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2248, 1, true, 5, 0, 688); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2249, 2, true, 9, 40, 688); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2250, 3, true, 11, 60, 688); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2251, 0, true, 3, 0, 689); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2252, 1, true, 6, 0, 689); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2253, 2, true, 9, 60, 689); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2254, 3, true, 12, 50, 689); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2255, 0, true, 3, 0, 690); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2256, 1, true, 5, 0, 690); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2257, 2, true, 9, 70, 690); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2258, 3, true, 12, 70, 690); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2259, 0, true, 2, 0, 691); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2260, 1, true, 5, 0, 691); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2261, 2, true, 8, 70, 691); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2262, 3, true, 11, 80, 691); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2263, 0, true, 3, 0, 692); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2264, 1, true, 6, 0, 692); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2265, 2, true, 10, 70, 692); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2266, 3, true, 13, 0, 692); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2267, 0, true, 3, 0, 693); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2268, 1, true, 6, 0, 693); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2269, 2, true, 9, 20, 693); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2270, 3, true, 12, 50, 693); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2271, 0, true, 3, 0, 694); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2272, 1, true, 6, 0, 694); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2273, 2, true, 9, 40, 694); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2274, 3, true, 12, 10, 694); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2275, 0, true, 3, 0, 695); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2276, 1, true, 7, 0, 695); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2277, 2, true, 10, 30, 695); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2278, 3, true, 13, 40, 695); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2279, 0, true, 3, 0, 696); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2280, 1, true, 6, 0, 696); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2281, 2, true, 9, 50, 696); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2282, 3, true, 12, 80, 696); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2283, 0, true, 4, 0, 697); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2284, 1, true, 8, 0, 697); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2285, 2, true, 12, 50, 697); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2286, 3, true, 13, 70, 697); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2287, 0, true, 3, 0, 698); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2288, 1, true, 7, 0, 698); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2289, 2, true, 9, 70, 698); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2290, 3, true, 12, 70, 698); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2291, 0, true, 4, 0, 699); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2292, 1, true, 6, 0, 699); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2293, 2, true, 9, 90, 699); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2294, 3, true, 13, 50, 699); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2295, 0, true, 4, 0, 700); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2296, 1, true, 8, 60, 700); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2297, 2, true, 12, 30, 700); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2298, 3, true, 13, 80, 700); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2299, 0, true, 3, 0, 701); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2300, 1, true, 5, 0, 701); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2301, 2, true, 10, 30, 701); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2302, 3, true, 13, 40, 701); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2303, 0, true, 4, 0, 702); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2304, 1, true, 8, 10, 702); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2305, 2, true, 12, 10, 702); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2306, 3, true, 13, 80, 702); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2307, 0, true, 3, 0, 703); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2308, 1, true, 6, 0, 703); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2309, 2, true, 9, 70, 703); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2310, 3, true, 12, 20, 703); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2311, 0, true, 2, 0, 704); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2312, 1, true, 5, 0, 704); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2313, 2, true, 9, 40, 704); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2314, 3, true, 12, 0, 704); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2315, 0, true, 3, 0, 705); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2316, 1, true, 6, 0, 705); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2317, 2, true, 10, 20, 705); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2318, 3, true, 12, 90, 705); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2319, 0, true, 4, 0, 706); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2320, 1, true, 7, 50, 706); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2321, 2, true, 11, 0, 706); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2322, 3, true, 13, 10, 706); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2323, 0, true, 3, 0, 707); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2324, 1, true, 8, 30, 707); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2325, 2, true, 10, 60, 707); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2326, 3, true, 13, 40, 707); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2327, 0, true, 3, 0, 708); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2328, 1, true, 5, 0, 708); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2329, 2, true, 10, 0, 708); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2330, 3, true, 13, 20, 708); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2331, 0, true, 2, 0, 710); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2332, 1, true, 5, 0, 710); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2333, 2, true, 9, 50, 710); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2334, 3, true, 12, 40, 710); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2335, 0, true, 3, 0, 711); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2336, 1, true, 6, 0, 711); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2337, 2, true, 12, 0, 711); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2338, 3, true, 13, 50, 711); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2339, 0, true, 4, 0, 712); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2340, 1, true, 9, 70, 712); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2341, 2, true, 12, 70, 712); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2342, 3, true, 13, 90, 712); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2343, 0, true, 4, 0, 713); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2344, 1, true, 8, 70, 713); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2345, 2, true, 12, 0, 713); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2346, 3, true, 13, 80, 713); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2347, 0, true, 2, 0, 715); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2348, 1, true, 5, 0, 715); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2349, 2, true, 8, 70, 715); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2350, 3, true, 11, 90, 715); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2351, 0, true, 2, 0, 716); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2352, 1, true, 5, 0, 716); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2353, 2, true, 9, 0, 716); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2354, 3, true, 12, 30, 716); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2355, 0, true, 3, 0, 717); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2356, 1, true, 6, 0, 717); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2357, 2, true, 9, 60, 717); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2358, 3, true, 11, 90, 717); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2359, 0, true, 2, 0, 720); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2360, 1, true, 5, 0, 720); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2361, 2, true, 9, 0, 720); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2362, 3, true, 12, 0, 720); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2363, 0, true, 3, 0, 721); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2364, 1, true, 7, 0, 721); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2365, 2, true, 9, 80, 721); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2366, 3, true, 13, 10, 721); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2367, 0, true, 4, 0, 722); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2368, 1, true, 8, 40, 722); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2369, 2, true, 11, 20, 722); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2370, 3, true, 13, 70, 722); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2371, 4, true, 0, 0, 8000); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2372, 4, true, 0, 0, 8008); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2373, 4, true, 0, 0, 8020); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2374, 4, true, 0, 0, 8024); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2375, 4, true, 0, 0, 8025); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2376, 4, true, 0, 0, 8026); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2377, 4, true, 0, 0, 8029); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2378, 4, true, 0, 0, 8033); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2379, 4, true, 0, 0, 8034); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2380, 4, true, 0, 0, 8043); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2381, 4, true, 0, 0, 8045); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2382, 4, true, 0, 0, 8046); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2383, 4, true, 0, 0, 8048); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2384, 4, true, 0, 0, 8049); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2385, 4, true, 0, 0, 8051); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2386, 4, true, 0, 0, 8053); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2387, 4, true, 0, 0, 8057); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2388, 4, true, 0, 0, 8058); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2389, 4, true, 0, 0, 8059); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2390, 4, true, 0, 0, 8063); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2391, 4, true, 0, 0, 8064); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2392, 4, true, 0, 0, 8065); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2393, 4, true, 0, 0, 8066); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2394, 4, true, 0, 0, 8067); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2395, 4, true, 0, 0, 8069); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2396, 4, true, 0, 0, 8070); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2397, 4, true, 0, 0, 8072); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2398, 4, true, 0, 0, 8073); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2399, 4, true, 0, 0, 8074); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2400, 4, true, 0, 0, 8078); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2401, 4, true, 0, 0, 8079); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2402, 4, true, 0, 0, 8080); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2403, 4, true, 0, 0, 8081); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2404, 4, true, 0, 0, 8082); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2405, 4, true, 0, 0, 8084); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2406, 4, true, 0, 0, 8085); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2407, 4, true, 0, 0, 8086); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2408, 4, true, 0, 0, 8087); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2409, 4, true, 0, 0, 8089); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2410, 4, true, 0, 0, 8090); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2411, 4, true, 0, 0, 8091); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2412, 4, true, 0, 0, 8092); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2413, 4, true, 0, 0, 8093); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2414, 4, true, 0, 0, 8094); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2415, 4, true, 0, 0, 8095); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2416, 4, true, 0, 0, 8097); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2417, 4, true, 0, 0, 8098); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2418, 4, true, 0, 0, 8099); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2419, 4, true, 0, 0, 8100); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2420, 4, true, 0, 0, 8101); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2421, 4, true, 0, 0, 8103); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2422, 4, true, 0, 0, 8104); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2423, 4, true, 0, 0, 8105); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2424, 4, true, 0, 0, 8106); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2425, 4, true, 0, 0, 8107); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2426, 4, true, 0, 0, 8108); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2427, 4, true, 0, 0, 8110); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2428, 4, true, 0, 0, 8111); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2429, 4, true, 0, 0, 8112); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2430, 4, true, 0, 0, 8113); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2431, 4, true, 0, 0, 8114); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2432, 4, true, 0, 0, 8115); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2433, 4, true, 0, 0, 8116); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2434, 4, true, 0, 0, 8117); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2435, 4, true, 0, 0, 8118); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2436, 4, true, 0, 0, 8119); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2437, 4, true, 0, 0, 8120); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2438, 4, true, 0, 0, 8121); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2439, 4, true, 0, 0, 8123); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2440, 4, true, 0, 0, 8124); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2441, 4, true, 0, 0, 8125); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2442, 4, true, 0, 0, 8126); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2443, 4, true, 0, 0, 8127); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2444, 4, true, 0, 0, 8128); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2445, 4, true, 0, 0, 8129); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2446, 4, true, 0, 0, 8130); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2447, 4, true, 0, 0, 8131); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2448, 4, true, 0, 0, 8132); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2449, 4, true, 0, 0, 8133); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2450, 4, true, 0, 0, 8134); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2451, 4, true, 0, 0, 8135); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2452, 4, true, 0, 0, 8136); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2453, 4, true, 0, 0, 8137); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2454, 4, true, 0, 0, 8138); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2455, 4, true, 0, 0, 8139); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2456, 4, true, 0, 0, 8140); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2457, 4, true, 0, 0, 8141); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2458, 4, true, 0, 0, 8142); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2459, 4, true, 0, 0, 8143); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2460, 4, true, 0, 0, 8144); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2461, 4, true, 0, 0, 8145); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2462, 4, true, 0, 0, 8146); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2463, 4, true, 0, 0, 8147); +INSERT INTO chuni_music_level (id, diff, enable, level, level_decimal, music_id) +VALUES (2464, 4, true, 0, 0, 8148); + +INSERT INTO diva_contest (id, bronze_borders, description, enable, end_time, gold_borders, league, max_complexity, + min_complexity, name, norma_type, sliver_borders, stage_limit, stages, stars, start_time) +VALUES (317, 16000, '難易度よりの楽曲より合計★以上となるように曲を選択', true, '2021-01-22 00:00:00.000000', 32000, + 'ADVANCED', 20, 10, '第二十三回難易度合計コンテスト', 'PERCENTAGE', 28000, 'UNLIMITED', 4, 32, '2020-01-08 00:00:00.000000'); +INSERT INTO diva_contest (id, bronze_borders, description, enable, end_time, gold_borders, league, max_complexity, + min_complexity, name, norma_type, sliver_borders, stage_limit, stages, stars, start_time) +VALUES (318, 15000, '難易度よりの楽曲より合計★以上となるように曲を選択', true, '2021-01-22 00:00:00.000000', 30000, + 'INTERMEDIATE', 16, 8, '第二十三回難易度合計コンテスト', 'PERCENTAGE', 26000, 'UNLIMITED', 4, 24, + '2020-01-08 00:00:00.000000'); +INSERT INTO diva_contest (id, bronze_borders, description, enable, end_time, gold_borders, league, max_complexity, + min_complexity, name, norma_type, sliver_borders, stage_limit, stages, stars, start_time) +VALUES (319, 14000, '難易度よりの楽曲より合計★以上となるように曲を選択', true, '2021-01-22 00:00:00.000000', 28000, 'BEGINNER', + 11, 2, '第二十三回難易度合計コンテスト', 'PERCENTAGE', 24000, 'UNLIMITED', 4, 16, '2020-01-08 00:00:00.000000'); + +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (0, '2029-01-31 15:00:00.000000', '縁なしメガネ(銀)', 50, '2013-10-12 15:00:00.000000', 0); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (1, '2029-01-31 15:00:00.000000', '縁なしメガネ(赤)', 50, '2013-10-12 15:00:00.000000', 1); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (2, '2029-01-31 15:00:00.000000', 'ナイロールメガネ(銀)', 100, '2013-10-12 15:00:00.000000', 2); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (3, '2029-01-31 15:00:00.000000', 'ナイロールメガネ(茶)', 100, '2014-04-17 15:00:00.000000', 3); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (4, '2029-01-31 15:00:00.000000', 'フルフレームメガネ(橙)', 100, '2014-04-17 15:00:00.000000', 4); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (5, '2029-01-31 15:00:00.000000', 'フルフレームメガネ(黒)', 100, '2013-10-12 15:00:00.000000', 5); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (6, '2029-01-31 15:00:00.000000', 'アンダーリムメガネ(青)', 50, '2014-03-11 15:00:00.000000', 8); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (7, '2029-01-31 15:00:00.000000', 'アンダーリムメガネ(ピンク)', 50, '2014-06-14 15:00:00.000000', 9); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (8, '2029-01-31 15:00:00.000000', 'ぐるぐるメガネ', 150, '2014-10-25 15:00:00.000000', 15); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (9, '2029-01-31 15:00:00.000000', '三角メガネ(黒)', 100, '2014-01-24 15:00:00.000000', 10); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (10, '2029-01-31 15:00:00.000000', '三角メガネ(赤)', 100, '2014-04-17 15:00:00.000000', 11); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (11, '2029-01-31 15:00:00.000000', 'サングラス', 150, '2015-02-08 15:00:00.000000', 16); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (12, '2029-01-31 15:00:00.000000', 'ゴーグル', 150, '2015-01-01 15:00:00.000000', 17); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (13, '2029-01-31 15:00:00.000000', '電脳バイザー', 150, '2015-02-08 15:00:00.000000', 18); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (14, '2029-01-31 15:00:00.000000', '片眼鏡', 150, '2015-04-30 15:00:00.000000', 14); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (15, '2029-01-31 15:00:00.000000', 'アイマスク', 150, '2014-11-22 15:00:00.000000', 19); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (16, '2029-01-31 15:00:00.000000', 'キラ目マスク', 200, '2015-06-19 15:00:00.000000', 20); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (17, '2029-01-31 15:00:00.000000', '眼帯(黒)', 150, '2013-10-12 15:00:00.000000', 23); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (18, '2029-01-31 15:00:00.000000', '眼帯(緑)', 150, '2014-01-24 15:00:00.000000', 24); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (19, '2029-01-31 15:00:00.000000', '眼帯(黄)', 150, '2014-03-11 15:00:00.000000', 25); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (20, '2029-01-31 15:00:00.000000', '眼帯(オレンジ)', 150, '2014-06-14 15:00:00.000000', 26); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (21, '2029-01-31 15:00:00.000000', '眼帯(ピンク)', 150, '2014-06-14 15:00:00.000000', 27); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (22, '2029-01-31 15:00:00.000000', '眼帯(青)', 150, '2013-10-12 15:00:00.000000', 28); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (23, '2029-01-31 15:00:00.000000', '眼帯(赤)', 150, '2013-10-12 15:00:00.000000', 29); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (24, '2029-01-31 15:00:00.000000', '眼帯(白)', 150, '2015-08-21 15:00:00.000000', 22); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (25, '2029-01-31 15:00:00.000000', '京劇仮面(青)', 200, '2016-02-07 15:00:00.000000', 33); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (26, '2029-01-31 15:00:00.000000', '京劇仮面(赤)', 200, '2016-02-07 15:00:00.000000', 34); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (27, '2029-01-31 15:00:00.000000', 'バタフライマスク', 200, '2015-08-21 15:00:00.000000', 30); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (28, '2029-01-31 15:00:00.000000', 'マスカレードマスク', 200, '2014-08-23 15:00:00.000000', 31); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (30, '2029-01-31 15:00:00.000000', 'ガスマスク', 200, '2015-08-21 15:00:00.000000', 39); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (31, '2029-01-31 15:00:00.000000', '能面(般若)', 200, '2015-08-21 15:00:00.000000', 40); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (32, '2029-01-31 15:00:00.000000', '能面(女)', 200, '2015-06-19 15:00:00.000000', 41); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (33, '2029-01-31 15:00:00.000000', '能面(翁)', 200, '2015-06-19 15:00:00.000000', 42); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (34, '2029-01-31 15:00:00.000000', '白マスク', 150, '2014-08-23 15:00:00.000000', 35); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (35, '2029-01-31 15:00:00.000000', '白マスク(ペロ舌)', 200, '2014-10-25 15:00:00.000000', 36); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (36, '2029-01-31 15:00:00.000000', '白マスク(ω)', 200, '2015-01-01 15:00:00.000000', 37); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (37, '2029-01-31 15:00:00.000000', '白マスク(ε)', 200, '2015-06-19 15:00:00.000000', 38); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (38, '2029-01-31 15:00:00.000000', 'ネコひげ', 50, '2015-04-30 15:00:00.000000', 43); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (39, '2029-01-31 15:00:00.000000', '天使の輪', 200, '2015-08-21 15:00:00.000000', 10); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (40, '2029-01-31 15:00:00.000000', 'ひよこ', 200, '2014-08-23 15:00:00.000000', 11); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (41, '2029-01-31 15:00:00.000000', 'ナースキャップ', 100, '2013-10-12 15:00:00.000000', 0); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (42, '2029-01-31 15:00:00.000000', 'メイドカチューシャ', 100, '2014-01-24 15:00:00.000000', 1); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (43, '2029-01-31 15:00:00.000000', 'ネコミミ(黒)', 200, '2013-10-12 15:00:00.000000', 2); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (44, '2029-01-31 15:00:00.000000', 'ネコミミ(白)', 200, '2014-01-24 15:00:00.000000', 3); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (45, '2029-01-31 15:00:00.000000', 'ネコミミ(トラ)', 200, '2014-04-17 15:00:00.000000', 4); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (46, '2029-01-31 15:00:00.000000', 'ウサミミ(黒)', 200, '2014-03-11 15:00:00.000000', 5); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (47, '2029-01-31 15:00:00.000000', 'ウサミミ(白)', 200, '2013-10-12 15:00:00.000000', 6); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (48, '2029-01-31 15:00:00.000000', 'ウサミミ(ピンク)', 200, '2014-10-25 15:00:00.000000', 7); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (49, '2029-01-31 15:00:00.000000', '一本角', 150, '2014-04-17 15:00:00.000000', 8); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (50, '2029-01-31 15:00:00.000000', '悪魔の角', 200, '2015-06-19 15:00:00.000000', 9); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (51, '2029-01-31 15:00:00.000000', 'クセ毛+A(緑)', 150, '2014-06-14 15:00:00.000000', 12); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (52, '2029-01-31 15:00:00.000000', 'クセ毛+B(黄)', 150, '2014-08-23 15:00:00.000000', 22); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (53, '2029-01-31 15:00:00.000000', 'クセ毛+C(黄)', 150, '2014-10-25 15:00:00.000000', 31); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (54, '2029-01-31 15:00:00.000000', 'クセ毛+D(ピンク)', 150, '2014-11-22 15:00:00.000000', 41); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (55, '2029-01-31 15:00:00.000000', 'クセ毛+E(青)', 150, '2015-01-01 15:00:00.000000', 51); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (56, '2029-01-31 15:00:00.000000', 'クセ毛+F(こげ茶)', 150, '2015-02-08 15:00:00.000000', 61); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (57, '2029-01-31 15:00:00.000000', '蝶ネクタイ(金)', 100, '2014-01-24 15:00:00.000000', 0); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (58, '2029-01-31 15:00:00.000000', '蝶ネクタイ(黒)', 100, '2013-10-12 15:00:00.000000', 1); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (59, '2029-01-31 15:00:00.000000', '蝶ネクタイ(赤)', 100, '2013-10-12 15:00:00.000000', 2); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (60, '2029-01-31 15:00:00.000000', 'リボン(青)', 150, '2014-03-11 15:00:00.000000', 3); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (61, '2029-01-31 15:00:00.000000', 'リボン(黄)', 150, '2013-10-12 15:00:00.000000', 4); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (62, '2029-01-31 15:00:00.000000', 'リボン(ピンク)', 150, '2013-10-12 15:00:00.000000', 5); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (67, '2029-01-31 15:00:00.000000', '鈴(金)', 150, '2014-11-22 15:00:00.000000', 6); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (68, '2029-01-31 15:00:00.000000', '鈴(銀)', 150, '2014-11-22 15:00:00.000000', 7); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (69, '2029-01-31 15:00:00.000000', '光の翼', 200, '2015-01-01 15:00:00.000000', 1); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (70, '2029-01-31 15:00:00.000000', '天使の翼', 200, '2015-08-21 15:00:00.000000', 0); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (71, '2029-01-31 15:00:00.000000', '蝶の羽根', 200, '2015-04-30 15:00:00.000000', 3); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (72, '2029-01-31 15:00:00.000000', '悪魔の翼', 200, '2015-06-19 15:00:00.000000', 2); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (73, '2029-01-31 15:00:00.000000', 'ぬいぐるみ', 200, '2013-10-12 15:00:00.000000', 8); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (74, '2029-01-31 15:00:00.000000', 'リュックサック', 150, '2013-10-12 15:00:00.000000', 4); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (75, '2029-01-31 15:00:00.000000', 'ナップサック', 100, '2014-01-24 15:00:00.000000', 5); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (76, '2029-01-31 15:00:00.000000', 'ランドセル(黒)', 150, '2014-03-11 15:00:00.000000', 6); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (77, '2029-01-31 15:00:00.000000', 'ランドセル(赤)', 150, '2014-03-11 15:00:00.000000', 7); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (78, '2029-01-31 15:00:00.000000', 'ロケット', 150, '2014-08-23 15:00:00.000000', 9); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (79, '2029-01-31 15:00:00.000000', 'ネコしっぽ(黒)', 200, '2013-10-12 15:00:00.000000', 11); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (80, '2029-01-31 15:00:00.000000', 'ネコしっぽ(白)', 200, '2014-01-24 15:00:00.000000', 12); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (81, '2029-01-31 15:00:00.000000', 'ネコしっぽ(トラ)', 200, '2014-04-17 15:00:00.000000', 13); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (82, '2029-01-31 15:00:00.000000', 'ウサしっぽ(黒)', 200, '2014-03-11 15:00:00.000000', 14); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (83, '2029-01-31 15:00:00.000000', 'ウサしっぽ(白)', 200, '2013-10-12 15:00:00.000000', 15); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (84, '2029-01-31 15:00:00.000000', 'ウサしっぽ(ピンク)', 200, '2014-10-25 15:00:00.000000', 16); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (85, '2029-01-31 15:00:00.000000', '狐しっぽ', 350, '2014-06-14 15:00:00.000000', 17); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (86, '2029-01-31 15:00:00.000000', '悪魔の尾', 200, '2015-02-08 15:00:00.000000', 18); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (87, '2029-01-31 15:00:00.000000', '赤ぷよぼう', 400, '2016-10-20 15:00:00.000000', 66); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (88, '2029-01-31 15:00:00.000000', '緑ぷよのかみどめ', 400, '2016-10-20 15:00:00.000000', 67); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (89, '2029-01-31 15:00:00.000000', 'ゼンマイ', 150, '2015-08-21 15:00:00.000000', 10); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (97, '2029-01-31 15:00:00.000000', 'ゴールドクラウン', 350, '2016-02-07 15:00:00.000000', 70); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (98, '2029-01-31 15:00:00.000000', 'プラチナクラウン', 350, '2016-02-07 15:00:00.000000', 71); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (99, '2029-01-31 15:00:00.000000', 'シャープメガネ(藍)', 100, '2014-10-25 15:00:00.000000', 6); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (100, '2029-01-31 15:00:00.000000', 'シャープメガネ(紫)', 100, '2014-01-24 15:00:00.000000', 7); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (101, '2029-01-31 15:00:00.000000', '丸メガネ(銀)', 150, '2014-01-24 15:00:00.000000', 12); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (102, '2029-01-31 15:00:00.000000', '丸メガネ(べっ甲)', 150, '2014-04-17 15:00:00.000000', 13); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (103, '2029-01-31 15:00:00.000000', 'たこルカ', 400, '2016-06-17 15:00:00.000000', 68); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (104, '2029-01-31 15:00:00.000000', 'シテヤンヨ', 400, '2016-04-16 15:00:00.000000', 69); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (105, '2029-01-31 15:00:00.000000', 'はちゅねミク', 400, '2015-01-01 15:00:00.000000', 19); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (106, '2029-01-31 15:00:00.000000', 'リンの幼虫', 400, '2016-02-07 15:00:00.000000', 20); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (107, '2029-01-31 15:00:00.000000', '劇画マスク', 200, '2016-02-07 15:00:00.000000', 21); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (115, '2029-01-31 15:00:00.000000', 'シャープサングラス', 150, '2014-08-23 15:00:00.000000', 45); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (116, '2029-01-31 15:00:00.000000', '水中メガネ', 200, '2015-01-01 15:00:00.000000', 44); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (117, '2029-01-31 15:00:00.000000', 'パーティー眼鏡', 100, '2015-04-30 15:00:00.000000', 48); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (118, '2029-01-31 15:00:00.000000', 'ピエロ鼻', 50, '2015-06-19 15:00:00.000000', 46); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (119, '2029-01-31 15:00:00.000000', 'キツネ面', 200, '2016-04-16 15:00:00.000000', 47); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (120, '2029-01-31 15:00:00.000000', 'ミニシルクハット', 350, '2014-06-14 15:00:00.000000', 74); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (121, '2029-01-31 15:00:00.000000', 'コック帽', 50, '2013-10-12 15:00:00.000000', 73); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (122, '2029-01-31 15:00:00.000000', '烏帽子', 50, '2015-04-30 15:00:00.000000', 72); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (123, '2029-01-31 15:00:00.000000', 'ミクダヨー', 1500, '2015-04-30 15:00:00.000000', 76); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (124, '2029-01-31 15:00:00.000000', '記章', 100, '2014-11-22 15:00:00.000000', 8); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (131, '2029-01-31 15:00:00.000000', 'ポスター付リュックサック', 150, '2014-04-17 15:00:00.000000', 21); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (132, '2029-01-31 15:00:00.000000', 'リコーダー付ランドセル(黒)', 150, '2015-02-08 15:00:00.000000', 22); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (133, '2029-01-31 15:00:00.000000', 'リコーダー付ランドセル(赤)', 150, '2015-02-08 15:00:00.000000', 23); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (134, '2029-01-31 15:00:00.000000', 'ミクダヨー(ミニ)', 500, '2014-11-22 15:00:00.000000', 75); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (135, '2029-01-31 15:00:00.000000', 'クセ毛+A(黄)', 150, '2014-06-14 15:00:00.000000', 13); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (136, '2029-01-31 15:00:00.000000', 'クセ毛+A(ピンク)', 150, '2014-06-14 15:00:00.000000', 14); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (137, '2029-01-31 15:00:00.000000', 'クセ毛+A(青)', 150, '2014-06-14 15:00:00.000000', 15); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (138, '2029-01-31 15:00:00.000000', 'クセ毛+A(こげ茶)', 150, '2014-06-14 15:00:00.000000', 16); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (139, '2029-01-31 15:00:00.000000', 'クセ毛+A(金)', 150, '2014-06-14 15:00:00.000000', 17); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (140, '2029-01-31 15:00:00.000000', 'クセ毛+A(銀)', 150, '2014-06-14 15:00:00.000000', 18); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (141, '2029-01-31 15:00:00.000000', 'クセ毛+A(茶)', 150, '2014-06-14 15:00:00.000000', 19); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (142, '2029-01-31 15:00:00.000000', 'クセ毛+A(赤)', 150, '2014-06-14 15:00:00.000000', 20); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (143, '2029-01-31 15:00:00.000000', 'クセ毛+B(緑)', 150, '2014-08-23 15:00:00.000000', 21); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (144, '2029-01-31 15:00:00.000000', 'クセ毛+B(ピンク)', 150, '2014-08-23 15:00:00.000000', 23); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (145, '2029-01-31 15:00:00.000000', 'クセ毛+B(青)', 150, '2014-08-23 15:00:00.000000', 24); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (146, '2029-01-31 15:00:00.000000', 'クセ毛+B(こげ茶)', 150, '2014-08-23 15:00:00.000000', 25); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (147, '2029-01-31 15:00:00.000000', 'クセ毛+B(金)', 150, '2014-08-23 15:00:00.000000', 26); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (148, '2029-01-31 15:00:00.000000', 'クセ毛+B(銀)', 150, '2014-08-23 15:00:00.000000', 27); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (149, '2029-01-31 15:00:00.000000', 'クセ毛+B(茶)', 150, '2014-08-23 15:00:00.000000', 28); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (150, '2029-01-31 15:00:00.000000', 'クセ毛+B(赤)', 150, '2014-08-23 15:00:00.000000', 29); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (151, '2029-01-31 15:00:00.000000', 'クセ毛+C(緑)', 150, '2014-10-25 15:00:00.000000', 30); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (152, '2029-01-31 15:00:00.000000', 'クセ毛+C(ピンク)', 150, '2014-10-25 15:00:00.000000', 32); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (153, '2029-01-31 15:00:00.000000', 'クセ毛+C(青)', 150, '2014-10-25 15:00:00.000000', 33); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (154, '2029-01-31 15:00:00.000000', 'クセ毛+C(こげ茶)', 150, '2014-10-25 15:00:00.000000', 34); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (155, '2029-01-31 15:00:00.000000', 'クセ毛+C(金)', 150, '2014-10-25 15:00:00.000000', 35); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (156, '2029-01-31 15:00:00.000000', 'クセ毛+C(銀)', 150, '2014-10-25 15:00:00.000000', 36); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (157, '2029-01-31 15:00:00.000000', 'クセ毛+C(茶)', 150, '2014-10-25 15:00:00.000000', 37); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (158, '2029-01-31 15:00:00.000000', 'クセ毛+C(赤)', 150, '2014-10-25 15:00:00.000000', 38); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (159, '2029-01-31 15:00:00.000000', 'クセ毛+D(緑)', 150, '2014-11-22 15:00:00.000000', 39); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (160, '2029-01-31 15:00:00.000000', 'クセ毛+D(黄)', 150, '2014-11-22 15:00:00.000000', 40); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (161, '2029-01-31 15:00:00.000000', 'クセ毛+D(青)', 150, '2014-11-22 15:00:00.000000', 42); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (162, '2029-01-31 15:00:00.000000', 'クセ毛+D(こげ茶)', 150, '2014-11-22 15:00:00.000000', 43); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (163, '2029-01-31 15:00:00.000000', 'クセ毛+D(金)', 150, '2014-11-22 15:00:00.000000', 44); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (164, '2029-01-31 15:00:00.000000', 'クセ毛+D(銀)', 150, '2014-11-22 15:00:00.000000', 45); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (165, '2029-01-31 15:00:00.000000', 'クセ毛+D(茶)', 150, '2014-11-22 15:00:00.000000', 46); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (166, '2029-01-31 15:00:00.000000', 'クセ毛+D(赤)', 150, '2014-11-22 15:00:00.000000', 47); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (167, '2029-01-31 15:00:00.000000', 'クセ毛+E(緑)', 150, '2015-01-01 15:00:00.000000', 48); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (168, '2029-01-31 15:00:00.000000', 'クセ毛+E(黄)', 150, '2015-01-01 15:00:00.000000', 49); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (169, '2029-01-31 15:00:00.000000', 'クセ毛+E(ピンク)', 150, '2015-01-01 15:00:00.000000', 50); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (170, '2029-01-31 15:00:00.000000', 'クセ毛+E(こげ茶)', 150, '2015-01-01 15:00:00.000000', 52); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (171, '2029-01-31 15:00:00.000000', 'クセ毛+E(金)', 150, '2015-01-01 15:00:00.000000', 53); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (172, '2029-01-31 15:00:00.000000', 'クセ毛+E(銀)', 150, '2015-01-01 15:00:00.000000', 54); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (173, '2029-01-31 15:00:00.000000', 'クセ毛+E(茶)', 150, '2015-01-01 15:00:00.000000', 55); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (174, '2029-01-31 15:00:00.000000', 'クセ毛+E(赤)', 150, '2015-01-01 15:00:00.000000', 56); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (175, '2029-01-31 15:00:00.000000', 'クセ毛+F(緑)', 150, '2015-02-08 15:00:00.000000', 57); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (176, '2029-01-31 15:00:00.000000', 'クセ毛+F(黄)', 150, '2015-02-08 15:00:00.000000', 58); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (177, '2029-01-31 15:00:00.000000', 'クセ毛+F(ピンク)', 150, '2015-02-08 15:00:00.000000', 59); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (178, '2029-01-31 15:00:00.000000', 'クセ毛+F(青)', 150, '2015-02-08 15:00:00.000000', 60); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (179, '2029-01-31 15:00:00.000000', 'クセ毛+F(金)', 150, '2015-02-08 15:00:00.000000', 62); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (180, '2029-01-31 15:00:00.000000', 'クセ毛+F(銀)', 150, '2015-02-08 15:00:00.000000', 63); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (181, '2029-01-31 15:00:00.000000', 'クセ毛+F(茶)', 150, '2015-02-08 15:00:00.000000', 64); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (182, '2029-01-31 15:00:00.000000', 'クセ毛+F(赤)', 150, '2015-02-08 15:00:00.000000', 65); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (183, '2029-01-31 15:00:00.000000', 'イヌミミ', 200, '2015-11-14 15:00:00.000000', 77); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (184, '2029-01-31 15:00:00.000000', '羊角', 200, '2016-10-20 15:00:00.000000', 78); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (185, '2029-01-31 15:00:00.000000', '悪魔の頭羽', 200, '2016-10-20 15:00:00.000000', 79); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (186, '2029-01-31 15:00:00.000000', 'とりの巣', 200, '2016-04-16 15:00:00.000000', 80); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (187, '2029-01-31 15:00:00.000000', 'おばけの三角ずきん', 200, '2016-08-19 15:00:00.000000', 81); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (188, '2029-01-31 15:00:00.000000', 'パラボラアンテナ', 200, '2016-12-23 15:00:00.000000', 82); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (189, '2029-01-31 15:00:00.000000', 'パーティ帽(赤)', 100, '2017-01-14 15:00:00.000000', 83); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (190, '2029-01-31 15:00:00.000000', 'パーティ帽(青)', 100, '2017-01-14 15:00:00.000000', 84); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (191, '2029-01-31 15:00:00.000000', 'パーティ帽(黄)', 100, '2017-01-14 15:00:00.000000', 85); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (192, '2029-01-31 15:00:00.000000', 'ホホジロザメ', 300, '2016-08-19 15:00:00.000000', 86); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (193, '2029-01-31 15:00:00.000000', 'パンプキンヘッド', 300, '2015-11-14 15:00:00.000000', 87); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (194, '2029-01-31 15:00:00.000000', '雪だるまヘッド(ノーマル)', 300, '2017-01-14 15:00:00.000000', 88); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (195, '2029-01-31 15:00:00.000000', '雪だるまヘッド(笑顔)', 300, '2017-01-14 15:00:00.000000', 89); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (196, '2029-01-31 15:00:00.000000', 'ハート(頭)', 200, '2017-02-17 15:00:00.000000', 90); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (197, '2029-01-31 15:00:00.000000', 'ぷんぷん', 200, '2016-12-23 15:00:00.000000', 91); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (198, '2029-01-31 15:00:00.000000', '汗(右)', 100, '2015-11-14 15:00:00.000000', 92); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (199, '2029-01-31 15:00:00.000000', '汗(左)', 100, '2015-11-14 15:00:00.000000', 93); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (200, '2029-01-31 15:00:00.000000', '!?', 200, '2016-12-23 15:00:00.000000', 94); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (201, '2029-01-31 15:00:00.000000', 'でかメガネ', 150, '2016-08-19 15:00:00.000000', 49); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (204, '2029-01-31 15:00:00.000000', 'つけひげ', 150, '2017-01-14 15:00:00.000000', 52); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (205, '2029-01-31 15:00:00.000000', 'くちばし', 100, '2016-04-16 15:00:00.000000', 53); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (208, '2029-01-31 15:00:00.000000', '目隠し線', 200, '2016-06-17 15:00:00.000000', 56); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (210, '2029-01-31 15:00:00.000000', 'つけえり', 150, '2015-04-30 15:00:00.000000', 15); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (211, '2029-01-31 15:00:00.000000', 'ハーモニカ', 150, '2016-04-16 15:00:00.000000', 16); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (212, '2029-01-31 15:00:00.000000', '金メダル', 200, '2016-06-17 15:00:00.000000', 17); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (213, '2029-01-31 15:00:00.000000', '銀メダル', 150, '2016-06-17 15:00:00.000000', 18); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (214, '2029-01-31 15:00:00.000000', '銅メダル', 100, '2016-06-17 15:00:00.000000', 19); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (215, '2029-01-31 15:00:00.000000', '前かけ(緑)', 100, '2016-12-23 15:00:00.000000', 20); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (216, '2029-01-31 15:00:00.000000', '前かけ(黄)', 100, '2016-12-23 15:00:00.000000', 21); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (217, '2029-01-31 15:00:00.000000', '前かけ(橙)', 100, '2016-12-23 15:00:00.000000', 22); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (218, '2029-01-31 15:00:00.000000', '前かけ(ピンク)', 100, '2016-12-23 15:00:00.000000', 23); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (219, '2029-01-31 15:00:00.000000', '前かけ(青)', 100, '2016-12-23 15:00:00.000000', 24); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (220, '2029-01-31 15:00:00.000000', '前かけ(赤)', 100, '2016-12-23 15:00:00.000000', 25); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (221, '2029-01-31 15:00:00.000000', '初心者マーク', 150, '2016-08-19 15:00:00.000000', 26); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (222, '2029-01-31 15:00:00.000000', 'タイマー(緑)', 50, '2015-11-14 15:00:00.000000', 27); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (223, '2029-01-31 15:00:00.000000', 'タイマー(赤)', 50, '2015-11-14 15:00:00.000000', 28); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (224, '2029-01-31 15:00:00.000000', 'ハート(胸)', 200, '2017-02-17 15:00:00.000000', 29); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (225, '2029-01-31 15:00:00.000000', '失恋ハート', 200, '2017-02-17 15:00:00.000000', 30); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (226, '2029-01-31 15:00:00.000000', '機械の翼', 200, '2016-04-16 15:00:00.000000', 24); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (227, '2029-01-31 15:00:00.000000', 'スクールバッグ', 150, '2017-02-17 15:00:00.000000', 25); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (228, '2029-01-31 15:00:00.000000', '押しボタン', 200, '2016-06-17 15:00:00.000000', 26); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (229, '2029-01-31 15:00:00.000000', 'イヌしっぽ', 200, '2015-11-14 15:00:00.000000', 27); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (230, '2029-01-31 15:00:00.000000', '恐竜しっぽ', 200, '2016-08-19 15:00:00.000000', 28); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (231, '2029-01-31 15:00:00.000000', '猫又しっぽ', 300, '2016-10-20 15:00:00.000000', 29); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (232, '2029-01-31 15:00:00.000000', '九尾しっぽ', 300, '2017-01-14 15:00:00.000000', 30); +INSERT INTO diva_customize (id, end_date, name, price, release_date, sort_order) +VALUES (233, '2029-01-31 15:00:00.000000', 'ぶらさがりネコ', 300, '2017-02-17 15:00:00.000000', 31); + +INSERT INTO diva_festa (id, addvp, attributes, create_date, difficulty, enable, end, kind, name, pv_list, start, + vp_multiplier) +VALUES (1, 39, '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', '2005-01-01 00:00:00.000000', 'UNDEFINED', true, + '2029-01-01 00:00:00.000000', 'PINK_FESTA', 'Project DIVA Festa', 'ALL', '2005-01-01 00:00:00.000000', 1); +INSERT INTO diva_festa (id, addvp, attributes, create_date, difficulty, enable, end, kind, name, pv_list, start, + vp_multiplier) +VALUES (2, 5, '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', '2005-01-01 00:00:00.000000', 'UNDEFINED', true, + '2029-01-01 00:00:00.000000', 'GREEN_FESTA', 'Aqua Festa', 'ALL', '2005-01-01 00:00:00.000000', 2); + +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (0, '2029-01-31 15:00:00.000000', '初音ミク', 0, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (1, '2029-01-31 15:00:00.000000', '弱音ハク', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (2, '2029-01-31 15:00:00.000000', '亞北ネル', 50, '2009-01-31 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (3, '2029-01-31 15:00:00.000000', 'メイコスタイル', 100, '2009-01-31 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (4, '2029-01-31 15:00:00.000000', 'リンスタイル', 100, '2009-01-31 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (5, '2029-01-31 15:00:00.000000', 'スペチャン5', 100, '2009-01-31 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (6, '2029-01-31 15:00:00.000000', 'スペチャン39', 50, '2009-01-31 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (7, '2029-01-31 15:00:00.000000', 'ガリア軍第7小隊', 100, '2009-01-31 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (8, '2029-01-31 15:00:00.000000', 'P-スタイルPB', 50, '2009-01-31 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (9, '2029-01-31 15:00:00.000000', 'P-スタイルCW', 50, '2009-01-31 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (10, '2029-01-31 15:00:00.000000', 'P-スタイルIS', 50, '2009-01-31 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (11, '2029-01-31 15:00:00.000000', 'P-スタイルRP', 50, '2009-01-31 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (12, '2029-01-31 15:00:00.000000', 'P-スタイルLP', 50, '2009-01-31 15:00:00.000000', 35); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (13, '2029-01-31 15:00:00.000000', 'P-スタイルFB', 50, '2009-01-31 15:00:00.000000', 36); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (14, '2029-01-31 15:00:00.000000', 'P-スタイルMG', 50, '2009-01-31 15:00:00.000000', 37); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (15, '2029-01-31 15:00:00.000000', 'P-スタイルCG', 300, '2009-01-31 15:00:00.000000', 38); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (16, '2029-01-31 15:00:00.000000', 'チア', 50, '2009-01-31 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (17, '2029-01-31 15:00:00.000000', 'プラグイン', 100, '2009-01-31 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (18, '2029-01-31 15:00:00.000000', 'ゴシック', 100, '2009-01-31 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (19, '2029-01-31 15:00:00.000000', 'プリンセス', 50, '2009-01-31 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (20, '2029-01-31 15:00:00.000000', 'ミコ', 100, '2009-01-31 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (21, '2029-01-31 15:00:00.000000', 'にゃんこ', 50, '2009-01-31 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (22, '2029-01-31 15:00:00.000000', 'ねむねむ', 100, '2009-01-31 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (23, '2029-01-31 15:00:00.000000', 'ハートハンター', 100, '2009-01-31 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (24, '2029-01-31 15:00:00.000000', 'ボーカル', 50, '2009-01-31 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (25, '2029-01-31 15:00:00.000000', 'パンク', 100, '2009-01-31 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (26, '2029-01-31 15:00:00.000000', 'ダンサー', 50, '2009-01-31 15:00:00.000000', 17); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (27, '2029-01-31 15:00:00.000000', 'スター', 100, '2009-01-31 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (28, '2029-01-31 15:00:00.000000', 'フェアリー', 100, '2009-01-31 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (29, '2029-01-31 15:00:00.000000', 'スクール', 100, '2009-01-31 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (30, '2029-01-31 15:00:00.000000', 'スノウ', 50, '2009-01-31 15:00:00.000000', 21); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (31, '2029-01-31 15:00:00.000000', 'アラビアン', 100, '2009-01-31 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (32, '2029-01-31 15:00:00.000000', 'みやび', 50, '2009-01-31 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (33, '2029-01-31 15:00:00.000000', 'チャイナ', 300, '2009-01-31 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (34, '2029-01-31 15:00:00.000000', 'マジシャン', 50, '2009-01-31 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (35, '2029-01-31 15:00:00.000000', 'ホワイトドレス', 100, '2009-01-31 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (36, '2029-01-31 15:00:00.000000', 'パイレーツ', 50, '2009-01-31 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (37, '2029-01-31 15:00:00.000000', 'VN02', 100, '2009-01-31 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (38, '2029-01-31 15:00:00.000000', 'ギャラクシー', 100, '2009-01-31 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (39, '2029-01-31 15:00:00.000000', 'ハツネミク', 100, '2009-01-31 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (40, '2029-01-31 15:00:00.000000', '鏡音リン', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (41, '2029-01-31 15:00:00.000000', '鏡音レン', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (42, '2029-01-31 15:00:00.000000', '巡音ルカ', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (43, '2029-01-31 15:00:00.000000', '咲音メイコ', 300, '2009-01-31 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (44, '2029-01-31 15:00:00.000000', 'メイコ', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (45, '2029-01-31 15:00:00.000000', 'カイト', 50, '2009-01-31 15:00:00.000000', 1); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (46, '2029-01-31 15:00:00.000000', '初音ミク+スイムウェアS', 1000, '2009-01-31 15:00:00.000000', 140); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (47, '2029-01-31 15:00:00.000000', '初音ミク+スイムウェア', 1000, '2009-01-31 15:00:00.000000', 141); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (48, '2029-01-31 15:00:00.000000', '鏡音リン+スイムウェア', 1000, '2009-01-31 15:00:00.000000', 39); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (49, '2029-01-31 15:00:00.000000', '鏡音レン+スイムウェア', 300, '2009-01-31 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (50, '2029-01-31 15:00:00.000000', '巡音ルカ+スイムウェア', 1000, '2009-01-31 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (51, '2029-01-31 15:00:00.000000', 'メイコ+スイムウェア', 1000, '2009-01-31 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (52, '2029-01-31 15:00:00.000000', 'カイト+スイムウェア', 300, '2009-01-31 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (53, '2029-01-31 15:00:00.000000', '初音ミク+アペンド', 300, '2010-09-30 15:00:00.000000', 152); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (54, '2029-01-31 15:00:00.000000', 'ホワイトワンピース', 100, '2010-12-15 15:00:00.000000', 49); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (55, '2029-01-31 15:00:00.000000', 'ナチュラル', 200, '2010-12-15 15:00:00.000000', 48); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (56, '2029-01-31 15:00:00.000000', 'スピリチュアル', 200, '2010-12-15 15:00:00.000000', 41); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (57, '2029-01-31 15:00:00.000000', 'カラフルドロップ', 200, '2011-01-26 15:00:00.000000', 57); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (58, '2029-01-31 15:00:00.000000', '初音ミク+蝶', 100, '2010-12-15 15:00:00.000000', 40); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (59, '2029-01-31 15:00:00.000000', 'チアフルキャンディ', 200, '2011-01-26 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (60, '2029-01-31 15:00:00.000000', 'スクールジャージ', 100, '2011-01-26 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (61, '2029-01-31 15:00:00.000000', '巡音ルカ+華', 100, '2010-12-15 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (62, '2029-01-31 15:00:00.000000', '初音ミク+クリスマス', 150, '2010-12-29 15:00:00.000000', 153); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (63, '2029-01-31 15:00:00.000000', '鏡音リン+クリスマス', 150, '2010-12-29 15:00:00.000000', 50); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (64, '2029-01-31 15:00:00.000000', '鏡音レン+クリスマス', 150, '2010-12-29 15:00:00.000000', 41); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (65, '2029-01-31 15:00:00.000000', '巡音ルカ+クリスマス', 150, '2010-12-29 15:00:00.000000', 40); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (66, '2029-01-31 15:00:00.000000', 'メイコ+クリスマス', 150, '2010-12-29 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (67, '2029-01-31 15:00:00.000000', 'カイト+クリスマス', 150, '2010-12-29 15:00:00.000000', 41); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (68, '2029-01-31 15:00:00.000000', '雪ミク+2010', 300, '2011-03-02 15:00:00.000000', 154); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (69, '2029-01-31 15:00:00.000000', 'ヴィンテージドレス', 200, '2011-03-16 15:00:00.000000', 39); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (70, '2029-01-31 15:00:00.000000', 'ピンクポップス', 100, '2011-03-02 15:00:00.000000', 55); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (71, '2029-01-31 15:00:00.000000', 'ピンクポップス+AS', 100, '2011-03-02 15:00:00.000000', 56); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (72, '2029-01-31 15:00:00.000000', 'リアクター', 200, '2011-03-23 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (73, '2029-01-31 15:00:00.000000', 'パンキッシュ', 200, '2011-03-23 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (74, '2029-01-31 15:00:00.000000', 'ハードロック', 200, '2011-03-02 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (75, '2029-01-31 15:00:00.000000', 'クラシック', 200, '2011-03-16 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (76, '2029-01-31 15:00:00.000000', 'スカーレット', 200, '2011-03-16 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (77, '2029-01-31 15:00:00.000000', '雪ミク+2011', 300, '2011-03-02 15:00:00.000000', 155); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (78, '2029-01-31 15:00:00.000000', 'おさんぽスタイル', 150, '2011-08-25 15:00:00.000000', 42); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (79, '2029-01-31 15:00:00.000000', 'みくずきん', 150, '2011-06-19 15:00:00.000000', 43); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (80, '2029-01-31 15:00:00.000000', 'イエロー', 150, '2011-11-30 15:00:00.000000', 44); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (81, '2029-01-31 15:00:00.000000', 'ジャー★ジ', 150, '2011-10-07 15:00:00.000000', 45); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (82, '2029-01-31 15:00:00.000000', 'ノーブル', 150, '2011-06-19 15:00:00.000000', 46); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (83, '2029-01-31 15:00:00.000000', 'パウダー', 150, '2011-10-07 15:00:00.000000', 47); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (84, '2029-01-31 15:00:00.000000', 'エールダンジュ', 150, '2011-11-30 15:00:00.000000', 50); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (85, '2029-01-31 15:00:00.000000', 'スペイシーナース', 200, '2012-04-12 15:00:00.000000', 51); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (86, '2029-01-31 15:00:00.000000', '初音ミク+キュート', 200, '2011-08-25 15:00:00.000000', 52); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (87, '2029-01-31 15:00:00.000000', 'エンジェル', 200, '2012-02-09 15:00:00.000000', 53); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (88, '2029-01-31 15:00:00.000000', 'サイハテミク', 150, '2011-08-25 15:00:00.000000', 54); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (89, '2029-01-31 15:00:00.000000', '∞', 200, '2012-03-13 15:00:00.000000', 58); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (90, '2029-01-31 15:00:00.000000', '初音ミク+スイムウェアB', 1000, '2011-08-25 15:00:00.000000', 143); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (91, '2029-01-31 15:00:00.000000', 'アシンメトリーR', 200, '2011-10-07 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (92, '2029-01-31 15:00:00.000000', 'EoEスタイル', 200, '2011-11-30 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (93, '2029-01-31 15:00:00.000000', '鏡音リン+キュート', 200, '2011-08-25 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (94, '2029-01-31 15:00:00.000000', '鏡音リン+スイムウェアT', 1000, '2011-08-25 15:00:00.000000', 41); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (95, '2029-01-31 15:00:00.000000', 'アシンメトリーL', 200, '2011-10-07 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (96, '2029-01-31 15:00:00.000000', '鏡音レン+スイムウェアWS', 750, '2011-08-25 15:00:00.000000', 35); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (97, '2029-01-31 15:00:00.000000', 'シフォンワンピース', 150, '2011-07-20 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (98, '2029-01-31 15:00:00.000000', 'フロイライン', 200, '2011-10-07 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (99, '2029-01-31 15:00:00.000000', 'VFスーツ', 200, '2012-02-09 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (100, '2029-01-31 15:00:00.000000', '巡音ルカ+スイムウェアP', 1000, '2011-08-25 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (101, '2029-01-31 15:00:00.000000', 'キャンパス', 200, '2012-03-13 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (102, '2029-01-31 15:00:00.000000', 'ネコサイバー', 300, '2011-07-20 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (103, '2029-01-31 15:00:00.000000', 'カイト+スイムウェアV', 750, '2011-08-25 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (104, '2029-01-31 15:00:00.000000', 'カイト+スイムウェアV+AS', 750, '2011-08-25 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (105, '2029-01-31 15:00:00.000000', 'ふわふわコート', 200, '2011-11-30 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (106, '2029-01-31 15:00:00.000000', 'モダンガール', 150, '2012-04-12 15:00:00.000000', 4); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (107, '2029-01-31 15:00:00.000000', 'モダンガール+AS', 150, '2012-04-12 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (108, '2029-01-31 15:00:00.000000', 'メイコ+スイムウェアB', 1000, '2011-08-25 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (109, '2029-01-31 15:00:00.000000', 'エスニック', 200, '2011-06-19 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (110, '2029-01-31 15:00:00.000000', '亞北ネル+スイムウェア', 1000, '2011-08-25 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (111, '2029-01-31 15:00:00.000000', 'サイバーダイブ', 200, '2011-06-19 15:00:00.000000', 2); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (112, '2029-01-31 15:00:00.000000', '弱音ハク+スイムウェア', 1000, '2011-08-25 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (113, '2029-01-31 15:00:00.000000', 'ブラックワンピース', 300, '2011-06-19 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (114, '2029-01-31 15:00:00.000000', 'ブラックワンピース+NS', 300, '2011-06-19 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (115, '2029-01-31 15:00:00.000000', '咲音メイコ+スイムウェア', 1000, '2011-08-25 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (116, '2029-01-31 15:00:00.000000', 'メイコ+大正浪漫', 250, '2011-11-30 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (117, '2029-01-31 15:00:00.000000', '鏡音リン+スクールウェア', 250, '2012-01-05 15:00:00.000000', 45); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (118, '2029-01-31 15:00:00.000000', '鏡音レン+スクールウェア', 250, '2012-01-05 15:00:00.000000', 40); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (119, '2029-01-31 15:00:00.000000', '巡音ルカ+魔女っ娘Style', 250, '2012-03-01 15:00:00.000000', 37); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (120, '2029-01-31 15:00:00.000000', 'カイト+ホワイトブレザー', 250, '2012-03-13 15:00:00.000000', 38); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (121, '2029-01-31 15:00:00.000000', 'フェアリーマカロン', 300, '2011-07-20 15:00:00.000000', 41); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (122, '2029-01-31 15:00:00.000000', 'セクシープディング', 300, '2011-07-20 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (124, '2029-01-31 15:00:00.000000', 'ホワイト・イヴ', 250, '2012-12-04 15:00:00.000000', 61); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (125, '2029-01-31 15:00:00.000000', 'Hello+World.', 250, '2012-11-03 15:00:00.000000', 68); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (126, '2029-01-31 15:00:00.000000', 'レーシングミク2010ver.', 200, '2012-12-21 15:00:00.000000', 62); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (127, '2029-01-31 15:00:00.000000', 'レーシングミク2011ver.', 250, '2013-01-05 15:00:00.000000', 63); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (128, '2029-01-31 15:00:00.000000', 'フェイ・イェン+スタイル', 250, '2012-12-21 15:00:00.000000', 66); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (129, '2029-01-31 15:00:00.000000', '回転少女', 250, '2012-12-04 15:00:00.000000', 71); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (130, '2029-01-31 15:00:00.000000', 'ラセツトムクロ', 250, '2012-06-23 15:00:00.000000', 69); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (131, '2029-01-31 15:00:00.000000', 'オービット', 250, '2012-12-04 15:00:00.000000', 60); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (132, '2029-01-31 15:00:00.000000', 'パッチワーク', 250, '2012-05-25 15:00:00.000000', 65); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (133, '2029-01-31 15:00:00.000000', 'ソニックスタイル', 250, '2012-09-30 15:00:00.000000', 59); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (134, '2029-01-31 15:00:00.000000', 'チロル', 250, '2012-11-03 15:00:00.000000', 64); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (135, '2029-01-31 15:00:00.000000', 'コンフリクト', 200, '2012-05-25 15:00:00.000000', 70); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (136, '2029-01-31 15:00:00.000000', 'シャイニー', 250, '2012-08-04 15:00:00.000000', 72); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (137, '2029-01-31 15:00:00.000000', 'TYPE2020', 250, '2012-09-30 15:00:00.000000', 67); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (138, '2029-01-31 15:00:00.000000', '部活少女', 250, '2012-08-30 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (139, '2029-01-31 15:00:00.000000', 'ゴシック・パープル', 250, '2012-08-30 15:00:00.000000', 3); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (141, '2029-01-31 15:00:00.000000', '鏡音リン+アペンド', 300, '2012-01-26 15:00:00.000000', 51); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (142, '2029-01-31 15:00:00.000000', 'ネームレス+No.1', 200, '2013-01-26 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (143, '2029-01-31 15:00:00.000000', 'レーシングリン2010ver.', 200, '2012-12-21 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (144, '2029-01-31 15:00:00.000000', 'ブラックスター', 250, '2012-10-13 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (145, '2029-01-31 15:00:00.000000', '陽炎', 250, '2012-05-25 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (146, '2029-01-31 15:00:00.000000', '鏡音リン+蘇芳', 150, '2012-05-04 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (147, '2029-01-31 15:00:00.000000', '鏡音レン+アペンド', 300, '2012-01-26 15:00:00.000000', 42); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (148, '2029-01-31 15:00:00.000000', 'ブルームーン', 250, '2012-10-13 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (149, '2029-01-31 15:00:00.000000', '鏡音レン+藍鉄', 150, '2012-05-04 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (150, '2029-01-31 15:00:00.000000', 'ストレンジダーク', 250, '2012-08-04 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (151, '2029-01-31 15:00:00.000000', 'ネームレス+No.7', 200, '2013-01-26 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (153, '2029-01-31 15:00:00.000000', 'サイレンス', 250, '2012-08-04 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (154, '2029-01-31 15:00:00.000000', 'レーシングルカ2010ver.', 200, '2012-12-21 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (155, '2029-01-31 15:00:00.000000', 'サイバーネイション', 300, '2012-01-14 15:00:00.000000', 42); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (156, '2029-01-31 15:00:00.000000', 'ナギサ・レプカ', 200, '2012-11-03 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (157, '2029-01-31 15:00:00.000000', 'ナギサ・レプカ+AS', 200, '2012-11-03 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (158, '2029-01-31 15:00:00.000000', '時雨', 250, '2012-06-23 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (159, '2029-01-31 15:00:00.000000', 'スミレ', 250, '2012-08-04 15:00:00.000000', 5); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (160, '2029-01-31 15:00:00.000000', 'VFニンジャ', 200, '2013-03-14 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (161, '2029-01-31 15:00:00.000000', 'VFニンジャ+AS', 200, '2013-03-14 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (162, '2029-01-31 15:00:00.000000', '怪盗ブラックテール', 250, '2012-12-04 15:00:00.000000', 6); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (163, '2029-01-31 15:00:00.000000', '紅葉', 250, '2012-06-23 15:00:00.000000', 8); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (164, '2029-01-31 15:00:00.000000', 'レーシングメイコ2010ver.', 200, '2012-12-21 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (165, '2029-01-31 15:00:00.000000', 'ローレライ', 250, '2012-09-30 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (166, '2029-01-31 15:00:00.000000', 'ノスタルジー', 250, '2012-08-30 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (167, '2029-01-31 15:00:00.000000', '雪ミク+2012', 300, '2012-01-18 15:00:00.000000', 156); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (168, '2029-01-31 15:00:00.000000', 'AMERICANA', 300, '2012-08-30 15:00:00.000000', 167); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (169, '2029-01-31 15:00:00.000000', '桜ミク', 300, '2012-05-04 15:00:00.000000', 168); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (170, '2029-01-31 15:00:00.000000', '巡音ルカ+コンフリクト', 300, '2012-05-25 15:00:00.000000', 43); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (171, '2029-01-31 15:00:00.000000', '鏡音リン+蘇芳+妖狐', 200, '2012-05-04 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (172, '2029-01-31 15:00:00.000000', '鏡音レン+藍鉄+妖狐', 200, '2012-05-04 15:00:00.000000', 7); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (188, '2029-01-31 15:00:00.000000', 'ドリーマー', 250, '2013-03-01 15:00:00.000000', 120); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (189, '2029-01-31 15:00:00.000000', '初音ミク+妄想ガール', 250, '2013-01-05 15:00:00.000000', 121); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (190, '2029-01-31 15:00:00.000000', '雪ミク+2013', 300, '2013-01-16 15:00:00.000000', 157); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (191, '2029-01-31 15:00:00.000000', '鏡音リン+妄想ガール', 250, '2013-01-05 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (192, '2029-01-31 15:00:00.000000', 'ロジカリスト', 250, '2013-01-05 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (193, '2029-01-31 15:00:00.000000', 'オンザロック', 250, '2013-03-01 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (194, '2029-01-31 15:00:00.000000', '雪ミク+2013+AS', 300, '2013-01-16 15:00:00.000000', 158); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (195, '2029-01-31 15:00:00.000000', 'ディープスカイ', 250, '2014-03-24 15:00:00.000000', 73); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (196, '2029-01-31 15:00:00.000000', '紫揚羽', 250, '2015-05-22 15:00:00.000000', 74); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (197, '2029-01-31 15:00:00.000000', 'メモリア', 250, '2015-04-25 15:00:00.000000', 75); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (198, '2029-01-31 15:00:00.000000', '理系少女', 250, '2014-07-09 15:00:00.000000', 76); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (199, '2029-01-31 15:00:00.000000', 'ピエレッタ', 250, '2013-10-24 15:00:00.000000', 77); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (200, '2029-01-31 15:00:00.000000', 'イノセント', 250, '2014-05-16 15:00:00.000000', 78); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (201, '2029-01-31 15:00:00.000000', '堕悪天使', 250, '2014-05-16 15:00:00.000000', 79); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (202, '2029-01-31 15:00:00.000000', 'サマーメモリー', 250, '2014-09-27 15:00:00.000000', 80); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (203, '2029-01-31 15:00:00.000000', '初音ミク+翠玉', 250, '2016-06-25 15:00:00.000000', 81); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (204, '2029-01-31 15:00:00.000000', 'ソリチュード', 250, '2015-05-22 15:00:00.000000', 82); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (205, '2029-01-31 15:00:00.000000', 'ホーリーゴッデス', 250, '2015-06-27 15:00:00.000000', 83); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (206, '2029-01-31 15:00:00.000000', 'フォニュエールスタイル', 250, '2014-08-28 15:00:00.000000', 84); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (207, '2029-01-31 15:00:00.000000', 'ねこねこケープ', 250, '2014-07-09 15:00:00.000000', 85); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (208, '2029-01-31 15:00:00.000000', 'アジテーション', 250, '2013-10-24 15:00:00.000000', 86); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (209, '2029-01-31 15:00:00.000000', 'スターヴォイス', 200, '2013-10-24 15:00:00.000000', 87); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (210, '2029-01-31 15:00:00.000000', 'ハートビート', 250, '2014-10-16 15:00:00.000000', 89); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (211, '2029-01-31 15:00:00.000000', 'パンジー', 250, '2013-10-24 15:00:00.000000', 90); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (212, '2029-01-31 15:00:00.000000', 'レーシングミク2012ver.', 250, '2013-04-11 15:00:00.000000', 91); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (213, '2029-01-31 15:00:00.000000', 'わがまま工場長', 250, '2015-06-27 15:00:00.000000', 92); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (214, '2029-01-31 15:00:00.000000', 'Hello,Good+night.', 250, '2014-03-24 15:00:00.000000', 93); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (215, '2029-01-31 15:00:00.000000', '初音ミク+みずたまビキニ', 1000, '2013-08-03 15:00:00.000000', 145); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (216, '2029-01-31 15:00:00.000000', '初音ミク+スクール競泳', 1000, '2013-07-05 15:00:00.000000', 144); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (217, '2029-01-31 15:00:00.000000', '初音ミク+浴衣スタイル', 200, '2013-08-30 15:00:00.000000', 94); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (218, '2029-01-31 15:00:00.000000', 'らんみんぐ', 250, '2013-05-25 15:00:00.000000', 95); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (219, '2029-01-31 15:00:00.000000', 'リボンガール', 250, '2013-03-01 15:00:00.000000', 96); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (220, '2029-01-31 15:00:00.000000', 'メランコリー', 250, '2014-02-14 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (221, '2029-01-31 15:00:00.000000', 'トランスミッター', 250, '2014-05-16 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (222, '2029-01-31 15:00:00.000000', '鏡音リン+桜月', 250, '2014-01-09 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (223, '2029-01-31 15:00:00.000000', '鏡音リン+雨', 250, '2014-08-28 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (224, '2029-01-31 15:00:00.000000', '鏡音リン+しましまビキニ', 1000, '2013-08-03 15:00:00.000000', 42); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (225, '2029-01-31 15:00:00.000000', '鏡音リン+SW+スクール', 1000, '2013-07-05 15:00:00.000000', 43); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (226, '2029-01-31 15:00:00.000000', '鏡音リン+浴衣スタイル', 150, '2013-08-30 15:00:00.000000', 17); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (227, '2029-01-31 15:00:00.000000', '魔導師のタマゴ', 250, '2013-10-10 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (228, '2029-01-31 15:00:00.000000', 'スタイリッシュエナジーR', 250, '2013-05-04 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (229, '2029-01-31 15:00:00.000000', 'トラッドスクール', 250, '2013-01-26 15:00:00.000000', 21); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (230, '2029-01-31 15:00:00.000000', 'スターマイン', 250, '2013-10-24 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (231, '2029-01-31 15:00:00.000000', 'レシーバー', 250, '2014-05-16 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (232, '2029-01-31 15:00:00.000000', '鏡音レン+鳳月', 250, '2014-08-28 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (233, '2029-01-31 15:00:00.000000', '鏡音レン+鶴', 250, '2014-01-09 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (234, '2029-01-31 15:00:00.000000', 'バッドボーイ', 200, '2013-10-24 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (235, '2029-01-31 15:00:00.000000', '鏡音レン+SW+ボクサー', 1000, '2013-07-05 15:00:00.000000', 36); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (236, '2029-01-31 15:00:00.000000', '鏡音レン+浴衣スタイル', 200, '2013-08-30 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (237, '2029-01-31 15:00:00.000000', 'スタイリッシュエナジーL', 250, '2013-05-04 15:00:00.000000', 17); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (238, '2029-01-31 15:00:00.000000', '生徒会執行部', 250, '2013-01-26 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (239, '2029-01-31 15:00:00.000000', 'バッドボーイ+AS', 200, '2013-10-24 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (240, '2029-01-31 15:00:00.000000', 'ゆるふわコーデ', 250, '2014-07-24 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (241, '2029-01-31 15:00:00.000000', 'エターナルホワイト', 250, '2014-01-09 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (242, '2029-01-31 15:00:00.000000', 'アムール', 250, '2014-05-16 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (243, '2029-01-31 15:00:00.000000', '巡音ルカ+紅玉', 250, '2016-06-25 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (244, '2029-01-31 15:00:00.000000', '巡音ルカ+リゾートビキニ', 1000, '2013-08-03 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (245, '2029-01-31 15:00:00.000000', '巡音ルカ+競泳タイプ', 1000, '2013-07-05 15:00:00.000000', 35); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (246, '2029-01-31 15:00:00.000000', '巡音ルカ+浴衣スタイル', 200, '2013-08-30 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (247, '2029-01-31 15:00:00.000000', '森の妖精姫', 250, '2013-10-10 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (248, '2029-01-31 15:00:00.000000', 'クイン・ビー', 250, '2013-05-25 15:00:00.000000', 17); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (249, '2029-01-31 15:00:00.000000', '放課後モード', 250, '2013-03-01 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (250, '2029-01-31 15:00:00.000000', 'レクイエム', 250, '2014-01-16 15:00:00.000000', 9); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (251, '2029-01-31 15:00:00.000000', 'ギルティ', 250, '2014-05-16 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (252, '2029-01-31 15:00:00.000000', 'ジェネラル', 200, '2013-10-24 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (253, '2029-01-31 15:00:00.000000', 'KAITO+ハーフスパッツ', 1000, '2013-07-05 15:00:00.000000', 36); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (254, '2029-01-31 15:00:00.000000', 'KAITO+浴衣スタイル', 200, '2013-08-30 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (255, '2029-01-31 15:00:00.000000', 'ジーニアス', 250, '2013-06-14 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (256, '2029-01-31 15:00:00.000000', '学ラン★パーカー', 250, '2013-03-14 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (257, '2029-01-31 15:00:00.000000', 'ジェネラル+AS', 200, '2013-10-24 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (258, '2029-01-31 15:00:00.000000', 'ブルークリスタル', 250, '2014-12-04 15:00:00.000000', 10); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (259, '2029-01-31 15:00:00.000000', 'ノエル・ルージュ', 250, '2014-01-09 15:00:00.000000', 11); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (260, '2029-01-31 15:00:00.000000', 'MEIKO+ロングパレオ', 1000, '2013-08-03 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (261, '2029-01-31 15:00:00.000000', 'MEIKO+ウォーターポロ', 1000, '2013-07-05 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (262, '2029-01-31 15:00:00.000000', 'MEIKO+浴衣スタイル', 200, '2013-08-30 15:00:00.000000', 12); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (263, '2029-01-31 15:00:00.000000', 'ホイッスル', 250, '2013-06-14 15:00:00.000000', 13); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (264, '2029-01-31 15:00:00.000000', 'グラデュエート', 250, '2013-03-14 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (265, '2029-01-31 15:00:00.000000', 'BBオペレーター', 250, '2013-04-11 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (266, '2029-01-31 15:00:00.000000', '鏡音リン+浴衣スタイル+AS', 150, '2013-08-30 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (267, '2029-01-31 15:00:00.000000', 'カイト+V3', 300, '2013-04-11 15:00:00.000000', 42); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (268, '2029-01-31 15:00:00.000000', '深海少女', 250, '2013-08-30 15:00:00.000000', 169); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (269, '2029-01-31 15:00:00.000000', 'ハニーウィップ', 250, '2014-11-01 15:00:00.000000', 148); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (270, '2029-01-31 15:00:00.000000', '壱ノ桜・桜花', 150, '2015-04-25 15:00:00.000000', 149); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (271, '2029-01-31 15:00:00.000000', 'リンちゃん愛し隊1号', 200, '2015-01-17 15:00:00.000000', 151); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (272, '2029-01-31 15:00:00.000000', 'シザーズ', 250, '2014-07-24 15:00:00.000000', 46); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (273, '2029-01-31 15:00:00.000000', '弐ノ桜・胡蝶', 200, '2015-04-25 15:00:00.000000', 47); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (274, '2029-01-31 15:00:00.000000', '鏡音リン+Future+Style', 300, '2015-01-17 15:00:00.000000', 49); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (275, '2029-01-31 15:00:00.000000', 'トリッカー', 250, '2015-01-17 15:00:00.000000', 38); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (276, '2029-01-31 15:00:00.000000', '弐ノ桜・扇舞', 200, '2015-04-25 15:00:00.000000', 39); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (277, '2029-01-31 15:00:00.000000', '参ノ桜・楓香', 200, '2015-04-25 15:00:00.000000', 38); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (278, '2029-01-31 15:00:00.000000', 'リンちゃん愛し隊2号', 200, '2015-01-17 15:00:00.000000', 39); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (279, '2029-01-31 15:00:00.000000', '零ノ桜・蒼雪', 150, '2015-04-25 15:00:00.000000', 39); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (280, '2029-01-31 15:00:00.000000', '零ノ桜・紅椿', 200, '2015-04-25 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (281, '2029-01-31 15:00:00.000000', 'リンケージ', 250, '2014-01-16 15:00:00.000000', 147); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (282, '2029-01-31 15:00:00.000000', 'スターヴォイス+AS', 200, '2013-10-24 15:00:00.000000', 88); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (283, '2029-01-31 15:00:00.000000', '重音テト', 300, '2013-10-24 15:00:00.000000', 14); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (284, '2029-01-31 15:00:00.000000', '雪ミク+2014', 300, '2014-01-16 15:00:00.000000', 159); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (285, '2029-01-31 15:00:00.000000', '雪ミク+2014+AS', 100, '2029-01-31 15:00:00.000000', 160); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (286, '2029-01-31 15:00:00.000000', 'CA+初音ミク', 250, '2014-02-14 15:00:00.000000', 122); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (287, '2029-01-31 15:00:00.000000', 'CA+鏡音リン', 250, '2014-02-14 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (288, '2029-01-31 15:00:00.000000', 'CA+巡音ルカ', 250, '2014-02-14 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (289, '2029-01-31 15:00:00.000000', 'CA+メイコ', 250, '2014-02-14 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (290, '2029-01-31 15:00:00.000000', 'マジカルミライ', 300, '2014-03-11 15:00:00.000000', 170); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (291, '2029-01-31 15:00:00.000000', 'Cheerful+ミク', 150, '2014-03-24 15:00:00.000000', 123); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (292, '2029-01-31 15:00:00.000000', 'Cheerful+ミク+AS', 150, '2014-03-24 15:00:00.000000', 124); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (293, '2029-01-31 15:00:00.000000', 'Cheerful+リン', 200, '2014-03-24 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (294, '2029-01-31 15:00:00.000000', 'Cheerful+レン', 200, '2014-03-24 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (295, '2029-01-31 15:00:00.000000', 'Cheerful+ルカ', 200, '2014-03-24 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (296, '2029-01-31 15:00:00.000000', 'Cheerful+カイト', 200, '2014-03-24 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (297, '2029-01-31 15:00:00.000000', 'Cheerful+メイコ', 200, '2014-03-24 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (298, '2029-01-31 15:00:00.000000', 'Cheerful+カイト+AS', 200, '2029-01-31 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (299, '2029-01-31 15:00:00.000000', '初音ミク+V3', 300, '2014-09-27 15:00:00.000000', 171); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (300, '2029-01-31 15:00:00.000000', 'アバンガード', 250, '2015-08-29 15:00:00.000000', 97); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (301, '2029-01-31 15:00:00.000000', 'ナナイロライン', 250, '2015-09-27 15:00:00.000000', 98); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (302, '2029-01-31 15:00:00.000000', 'ブレス・ユー', 250, '2015-11-07 15:00:00.000000', 99); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (303, '2029-01-31 15:00:00.000000', '花詞', 250, '2015-12-04 15:00:00.000000', 100); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (304, '2029-01-31 15:00:00.000000', '華車', 250, '2015-12-04 15:00:00.000000', 101); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (305, '2029-01-31 15:00:00.000000', 'リグレット', 250, '2015-12-04 15:00:00.000000', 102); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (306, '2029-01-31 15:00:00.000000', 'マリオネット', 250, '2015-12-04 15:00:00.000000', 104); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (308, '2029-01-31 15:00:00.000000', 'ライアー', 250, '2016-02-27 15:00:00.000000', 105); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (309, '2029-01-31 15:00:00.000000', '月光アゲハ', 250, '2016-01-21 15:00:00.000000', 106); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (310, '2029-01-31 15:00:00.000000', 'サイレン', 250, '2015-11-07 15:00:00.000000', 107); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (311, '2029-01-31 15:00:00.000000', 'ローザ・ビアンカ', 250, '2016-07-29 15:00:00.000000', 108); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (313, '2029-01-31 15:00:00.000000', 'メテオライト', 250, '2015-08-29 15:00:00.000000', 111); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (314, '2029-01-31 15:00:00.000000', 'シャノワール', 200, '2015-07-25 15:00:00.000000', 112); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (315, '2029-01-31 15:00:00.000000', 'シャノワール+AS', 200, '2015-07-25 15:00:00.000000', 113); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (316, '2029-01-31 15:00:00.000000', 'シュープリーム', 250, '2016-04-30 15:00:00.000000', 114); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (317, '2029-01-31 15:00:00.000000', 'オレンジブロッサム', 250, '2015-09-27 15:00:00.000000', 115); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (318, '2029-01-31 15:00:00.000000', 'ディメンション', 250, '2015-08-29 15:00:00.000000', 116); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (319, '2029-01-31 15:00:00.000000', 'ストリートポップ', 250, '2016-02-27 15:00:00.000000', 117); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (320, '2029-01-31 15:00:00.000000', 'ゆるふわパステル', 250, '2016-02-27 15:00:00.000000', 118); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (321, '2029-01-31 15:00:00.000000', '夢見るパンダ', 250, '2015-07-25 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (322, '2029-01-31 15:00:00.000000', 'フェイカー', 250, '2016-02-27 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (323, '2029-01-31 15:00:00.000000', 'ヒマワリ', 200, '2016-01-21 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (324, '2029-01-31 15:00:00.000000', 'ソレイユ', 250, '2016-01-21 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (325, '2029-01-31 15:00:00.000000', 'フェアリーワンピース', 250, '2016-01-21 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (326, '2029-01-31 15:00:00.000000', '恋するシロクマ', 250, '2015-07-25 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (327, '2029-01-31 15:00:00.000000', 'アヤサキ', 200, '2016-01-21 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (328, '2029-01-31 15:00:00.000000', 'シエル', 250, '2016-01-21 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (329, '2029-01-31 15:00:00.000000', 'イレイザー', 250, '2016-02-27 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (330, '2029-01-31 15:00:00.000000', 'ホワイトエッジ', 250, '2016-01-21 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (331, '2029-01-31 15:00:00.000000', 'サクセサー', 250, '2015-08-29 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (332, '2029-01-31 15:00:00.000000', 'テンプテーション', 250, '2016-02-27 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (334, '2029-01-31 15:00:00.000000', 'リクルーター', 250, '2015-02-26 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (335, '2029-01-31 15:00:00.000000', 'フローラル', 250, '2016-02-27 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (336, '2029-01-31 15:00:00.000000', 'ローザ・ブルー', 250, '2016-07-29 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (338, '2029-01-31 15:00:00.000000', 'オリジネイター', 250, '2016-02-27 15:00:00.000000', 19); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (339, '2029-01-31 15:00:00.000000', 'ホリデイ', 250, '2015-12-04 15:00:00.000000', 20); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (340, '2029-01-31 15:00:00.000000', 'ブレイジング', 250, '2015-12-04 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (341, '2029-01-31 15:00:00.000000', 'マリーン・リボン', 250, '2015-12-04 15:00:00.000000', 17); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (343, '2029-01-31 15:00:00.000000', 'うさみみパーカー', 250, '2016-09-30 15:00:00.000000', 119); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (344, '2029-01-31 15:00:00.000000', 'アルパーカー+R', 250, '2016-10-28 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (345, '2029-01-31 15:00:00.000000', 'アルパーカー+L', 250, '2016-10-28 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (346, '2029-01-31 15:00:00.000000', 'ねこみみパーカー', 250, '2016-09-30 15:00:00.000000', 24); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (347, '2029-01-31 15:00:00.000000', 'おサカナつなぎ', 250, '2016-11-26 15:00:00.000000', 21); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (348, '2029-01-31 15:00:00.000000', 'ひつじさんウェア', 250, '2016-11-26 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (349, '2029-01-31 15:00:00.000000', '初音ミク+スイムウェア/ST', 1000, '2016-08-27 15:00:00.000000', 142); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (350, '2029-01-31 15:00:00.000000', '鏡音リン+スイムウェア/ST', 1000, '2016-08-27 15:00:00.000000', 40); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (351, '2029-01-31 15:00:00.000000', '鏡音レン+スイムウェア/ST', 300, '2016-08-27 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (352, '2029-01-31 15:00:00.000000', '巡音ルカ+スイムウェアP/ST', 1000, '2016-08-27 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (353, '2029-01-31 15:00:00.000000', 'KAITO+スイムウェアV/ST', 750, '2016-08-27 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (354, '2029-01-31 15:00:00.000000', 'KAITO+スイムウェアV+AS/ST', 750, '2016-08-27 15:00:00.000000', 35); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (355, '2029-01-31 15:00:00.000000', 'MEIKO+スイムウェア/ST', 1000, '2016-08-27 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (356, '2029-01-31 15:00:00.000000', 'M・S・J', 300, '2016-04-30 15:00:00.000000', 15); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (359, '2029-01-31 15:00:00.000000', 'out+of+the+gravity', 250, '2014-09-27 15:00:00.000000', 126); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (360, '2029-01-31 15:00:00.000000', 'インタビュア+ミク', 250, '2014-11-01 15:00:00.000000', 127); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (361, '2029-01-31 15:00:00.000000', 'インタビュア+ルカ', 250, '2014-11-01 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (362, '2029-01-31 15:00:00.000000', 'スイートパンプキン', 300, '2014-11-01 15:00:00.000000', 172); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (363, '2029-01-31 15:00:00.000000', 'MEIKO+V3', 300, '2014-12-04 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (364, '2029-01-31 15:00:00.000000', '雪ミク+2015', 300, '2015-01-17 15:00:00.000000', 161); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (365, '2029-01-31 15:00:00.000000', '壱ノ桜・白桜花', 150, '2015-04-25 15:00:00.000000', 150); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (366, '2029-01-31 15:00:00.000000', '零ノ桜・白雪', 150, '2015-04-25 15:00:00.000000', 40); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (367, '2029-01-31 15:00:00.000000', 'ダイヤモンドダスト', 250, '2015-02-26 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (368, '2029-01-31 15:00:00.000000', 'アイスフォグ', 250, '2015-02-26 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (369, '2029-01-31 15:00:00.000000', 'テレカクシパーカー+黄色', 250, '2015-05-22 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (370, '2029-01-31 15:00:00.000000', 'テレカクシパーカー+青色', 250, '2015-05-22 15:00:00.000000', 26); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (371, '2029-01-31 15:00:00.000000', 'スチャラカハツネ', 250, '2015-06-27 15:00:00.000000', 130); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (372, '2029-01-31 15:00:00.000000', 'マジックシェフ', 250, '2015-07-25 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (373, '2029-01-31 15:00:00.000000', 'グラデーションリゾート', 1000, '2015-09-05 15:00:00.000000', 146); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (374, '2029-01-31 15:00:00.000000', 'ミラクルスターリゾート', 1000, '2015-09-05 15:00:00.000000', 44); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (375, '2029-01-31 15:00:00.000000', 'ポップスターリゾート', 1000, '2015-09-05 15:00:00.000000', 37); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (376, '2029-01-31 15:00:00.000000', 'トゥインクルリゾート', 1000, '2015-09-05 15:00:00.000000', 36); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (377, '2029-01-31 15:00:00.000000', 'プレイドリゾート', 1000, '2015-09-05 15:00:00.000000', 37); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (378, '2029-01-31 15:00:00.000000', 'バイカラーリボンリゾート', 1000, '2015-09-05 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (379, '2029-01-31 15:00:00.000000', 'ありふれミク', 250, '2015-09-27 15:00:00.000000', 128); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (380, '2029-01-31 15:00:00.000000', 'P4Dスタイル', 300, '2016-07-22 15:00:00.000000', 173); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (381, '2029-01-31 15:00:00.000000', 'PIANO*GIRL', 250, '2015-11-07 15:00:00.000000', 129); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (382, '2029-01-31 15:00:00.000000', '重音テト+スイムウェア', 1000, '2015-12-04 15:00:00.000000', 16); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (383, '2029-01-31 15:00:00.000000', '巡音ルカV4X', 300, '2016-02-27 15:00:00.000000', 44); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (385, '2029-01-31 15:00:00.000000', 'Trip+The+Light+Fantastic', 250, '2016-05-26 15:00:00.000000', 132); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (386, '2029-01-31 15:00:00.000000', 'Poppin+Delight', 250, '2016-05-26 15:00:00.000000', 33); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (387, '2029-01-31 15:00:00.000000', 'Bebop+Knave', 250, '2016-05-26 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (389, '2029-01-31 15:00:00.000000', 'プランセス・ブランシュ', 250, '2016-05-26 15:00:00.000000', 133); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (390, '2029-01-31 15:00:00.000000', 'プランス・ブラン', 250, '2016-05-26 15:00:00.000000', 27); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (391, '2029-01-31 15:00:00.000000', 'アドレサンスプリンセス', 250, '2016-05-26 15:00:00.000000', 34); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (392, '2029-01-31 15:00:00.000000', 'アドレサンスナイト', 250, '2016-05-26 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (393, '2029-01-31 15:00:00.000000', 'マーチ・ヘイヤ', 250, '2016-09-30 15:00:00.000000', 136); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (394, '2029-01-31 15:00:00.000000', 'アゲアゲアゲイン', 250, '2016-03-25 15:00:00.000000', 131); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (395, '2029-01-31 15:00:00.000000', 'エトワール', 250, '2016-07-29 15:00:00.000000', 135); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (398, '2029-01-31 15:00:00.000000', 'フェアウェル', 250, '2016-07-29 15:00:00.000000', 134); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (399, '2029-01-31 15:00:00.000000', '天袖', 250, '2017-01-20 15:00:00.000000', 36); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (402, '2029-01-31 15:00:00.000000', '雪ミク+2016', 300, '2016-01-21 15:00:00.000000', 162); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (403, '2029-01-31 15:00:00.000000', 'パジャマパーティ+ミク', 250, '2017-02-25 15:00:00.000000', 139); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (404, '2029-01-31 15:00:00.000000', 'パジャマパーティ+リン', 250, '2017-02-25 15:00:00.000000', 38); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (405, '2029-01-31 15:00:00.000000', 'パジャマパーティ+レン', 250, '2017-02-25 15:00:00.000000', 32); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (406, '2029-01-31 15:00:00.000000', 'パジャマパーティ+ルカ', 250, '2017-02-25 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (407, '2029-01-31 15:00:00.000000', 'パジャマパーティ+カイト', 250, '2017-02-25 15:00:00.000000', 30); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (408, '2029-01-31 15:00:00.000000', 'パジャマパーティ+メイコ', 250, '2017-02-25 15:00:00.000000', 23); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (409, '2029-01-31 15:00:00.000000', 'Phantom+Thief+ミク', 250, '2016-11-26 15:00:00.000000', 137); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (410, '2029-01-31 15:00:00.000000', 'Phantom+Thief+リン', 250, '2016-11-26 15:00:00.000000', 35); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (411, '2029-01-31 15:00:00.000000', 'Phantom+Thief+メイコ', 250, '2016-11-26 15:00:00.000000', 21); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (412, '2029-01-31 15:00:00.000000', 'Phantom+Thief+カイト', 250, '2016-11-26 15:00:00.000000', 28); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (413, '2029-01-31 15:00:00.000000', '鉄道員・鶯', 250, '2017-01-20 15:00:00.000000', 138); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (414, '2029-01-31 15:00:00.000000', '鉄道員・金糸雀', 250, '2017-01-20 15:00:00.000000', 37); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (415, '2029-01-31 15:00:00.000000', '鉄道員・銀朱', 250, '2017-01-20 15:00:00.000000', 31); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (416, '2029-01-31 15:00:00.000000', '鉄道員・薔薇', 250, '2017-01-20 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (417, '2029-01-31 15:00:00.000000', '鉄道員・空', 250, '2017-01-20 15:00:00.000000', 29); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (418, '2029-01-31 15:00:00.000000', '鉄道員・紅葡萄', 250, '2017-01-20 15:00:00.000000', 22); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (419, '2029-01-31 15:00:00.000000', '雪ミク+2017', 300, '2017-01-20 15:00:00.000000', 163); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (420, '2029-01-31 15:00:00.000000', 'ヒマワリ+AS', 200, '2016-01-21 15:00:00.000000', 25); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (421, '2029-01-31 15:00:00.000000', 'アヤサキ+AS', 200, '2016-01-21 15:00:00.000000', 21); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (422, '2029-01-31 15:00:00.000000', 'みくりすたる☆', 300, '2016-06-25 15:00:00.000000', 125); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (423, '2029-01-31 15:00:00.000000', 'マイディアバニー', 1000, '2017-09-30 15:00:00.000000', 174); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (424, '2029-01-31 15:00:00.000000', 'ローザ・ノッテ', 250, '2017-01-20 15:00:00.000000', 110); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (425, '2029-01-31 15:00:00.000000', 'ローザ・ルーノ', 250, '2017-01-20 15:00:00.000000', 18); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (426, '2029-01-31 15:00:00.000000', 'GHOST', 250, '2018-01-12 15:00:00.000000', 175); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (427, '2029-01-31 15:00:00.000000', 'セレブレーション', 300, '2018-01-12 15:00:00.000000', 176); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (428, '2029-01-31 15:00:00.000000', '雪ミク+2018+AS', 300, '2019-05-23 15:00:00.000000', 165); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (429, '2029-01-31 15:00:00.000000', '雪ミク+2019', 300, '2019-05-23 15:00:00.000000', 166); +INSERT INTO diva_module (id, end_date, name, price, release_date, sort_order) +VALUES (430, '2029-01-31 15:00:00.000000', '雪ミク+2018', 300, '2019-05-23 15:00:00.000000', 164); + +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (1, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2019-03-01 15:00:00.000000', 16, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (2, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2019-03-01 15:00:00.000000', 20, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (3, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2017-01-11 15:00:00.000000', 41, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (4, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2017-12-10 15:00:00.000000', 42, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (5, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2017-11-09 15:00:00.000000', 44, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (6, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2017-12-10 15:00:00.000000', 48, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (7, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2019-03-01 15:00:00.000000', 86, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (8, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2017-11-09 15:00:00.000000', 204, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (9, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', '2029-01-31 15:00:00.000000', + '2018-09-07 15:00:00.000000', 213, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (10, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 220, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (11, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 225, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (12, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 249, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (13, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 250, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (14, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 254, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (15, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 257, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (16, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 259, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (17, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 260, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (18, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 261, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (19, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 263, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (20, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-04-02 15:00:00.000000', 266, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (21, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2016-11-09 15:00:00.000000', 267, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (22, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 410, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (23, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 427, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (24, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 600, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (25, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 602, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (26, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 604, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (27, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 605, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (28, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 613, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (29, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 615, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (30, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 616, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (31, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 638, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (32, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 710, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (33, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 722, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (34, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 723, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (35, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 725, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (36, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 726, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (37, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 727, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (38, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 730, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (39, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 733, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (40, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 734, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (41, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 737, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (42, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 739, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (43, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EASY', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 832, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (44, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 12, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (45, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 20, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (46, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 41, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (47, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 42, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (48, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 44, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (49, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 48, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (50, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 86, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (51, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 91, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (52, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 204, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (53, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 213, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (54, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 215, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (55, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 218, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (56, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 220, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (57, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 222, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (58, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 225, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (59, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 227, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (60, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 249, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (61, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 250, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (62, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 254, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (63, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 257, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (64, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 259, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (65, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 260, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (66, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 261, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (67, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 263, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (68, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-04-02 15:00:00.000000', 266, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (69, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2016-11-09 15:00:00.000000', 267, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (70, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 410, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (71, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 412, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (72, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 417, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (73, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 425, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (74, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 427, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (75, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 431, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (76, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 435, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (77, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 441, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (78, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 600, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (79, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 602, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (80, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 604, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (81, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 605, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (82, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 613, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (83, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 615, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (84, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 616, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (85, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 617, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (86, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 625, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (87, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 638, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (88, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 639, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (89, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 710, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (90, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 722, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (91, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 723, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (92, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 725, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (93, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 726, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (94, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 727, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (95, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 730, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (96, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 733, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (97, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 734, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (98, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 737, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (99, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 739, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (100, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 832, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (101, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 906, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (102, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 908, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (103, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 909, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (104, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 910, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (105, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 911, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (106, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'NORMAL', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 913, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (107, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 12, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (108, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 16, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (109, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 20, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (110, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 41, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (111, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 42, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (112, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 44, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (113, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 48, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (114, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 86, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (115, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 91, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (116, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 204, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (117, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 213, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (118, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 215, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (119, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 218, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (120, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 220, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (121, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 222, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (122, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 225, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (123, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 227, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (124, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 249, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (125, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 250, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (126, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 254, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (127, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 257, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (128, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 259, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (129, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 260, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (130, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 261, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (131, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 263, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (132, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-04-02 15:00:00.000000', 266, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (133, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2016-11-09 15:00:00.000000', 267, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (134, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 410, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (135, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 412, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (136, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 417, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (137, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 425, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (138, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 427, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (139, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 431, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (140, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 435, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (141, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 441, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (142, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 600, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (143, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 602, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (144, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 604, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (145, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 605, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (146, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 613, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (147, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 615, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (148, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 616, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (149, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 617, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (150, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 625, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (151, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 638, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (152, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 639, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (153, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 710, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (154, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 722, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (155, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 723, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (156, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 725, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (157, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 726, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (158, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 727, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (159, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 730, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (160, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 733, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (161, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 734, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (162, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 737, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (163, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 739, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (164, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 832, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (165, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 905, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (166, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 906, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (167, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 907, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (168, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 908, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (169, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 909, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (170, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 910, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (171, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 911, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (172, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 912, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (173, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'HARD', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 913, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (174, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 12, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (175, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 12, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (176, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 16, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (177, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 16, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (178, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 20, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (179, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 20, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (180, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 41, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (181, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 41, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (182, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 42, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (183, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 42, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (184, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 44, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (185, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 44, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (186, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 48, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (187, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 48, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (188, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 86, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (189, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 86, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (190, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 91, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (191, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 91, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (192, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 204, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (193, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 204, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (194, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 213, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (195, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 213, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (196, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 215, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (197, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 215, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (198, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 218, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (199, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 218, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (200, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 220, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (201, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 220, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (202, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 222, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (203, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 222, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (204, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 225, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (205, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 225, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (206, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 227, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (207, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-12-10 15:00:00.000000', 227, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (208, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 249, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (209, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 250, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (210, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 254, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (211, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 257, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (212, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 259, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (213, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 260, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (214, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 261, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (215, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 263, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (216, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-04-02 15:00:00.000000', 266, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (217, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2016-11-09 15:00:00.000000', 267, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (218, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 410, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (219, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 410, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (220, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 412, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (221, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 412, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (222, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 417, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (223, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 417, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (224, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 425, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (225, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 425, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (226, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 427, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (227, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 427, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (228, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 431, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (229, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 431, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (230, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 435, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (231, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 435, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (232, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 441, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (233, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2019-03-01 15:00:00.000000', 441, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (234, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 600, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (235, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 600, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (236, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 602, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (237, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 602, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (238, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 604, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (239, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 605, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (240, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 605, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (241, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 613, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (242, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 613, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (243, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 615, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (244, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 615, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (245, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 616, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (246, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 616, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (247, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 617, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (248, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 617, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (249, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 625, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (250, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 625, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (251, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 638, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (252, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 638, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (253, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 639, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (254, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-05-03 15:00:00.000000', 639, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (255, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 710, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (256, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 722, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (257, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 723, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (258, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 725, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (259, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 726, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (260, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-11-09 15:00:00.000000', 727, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (261, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 730, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (262, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'EXTRA', + '2029-01-31 15:00:00.000000', '2018-09-07 15:00:00.000000', 730, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (263, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 733, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (264, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 734, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (265, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 737, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (266, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 739, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (267, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2017-01-11 15:00:00.000000', 832, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (268, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 905, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (269, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 906, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (270, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 907, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (271, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 908, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (272, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 909, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (273, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-07-05 15:00:00.000000', 910, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (274, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 911, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (275, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 912, 1); +INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version) +VALUES (276, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL', + '2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 913, 1); \ No newline at end of file diff --git a/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java b/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java new file mode 100644 index 0000000..2292033 --- /dev/null +++ b/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; + +@TestPropertySource(locations = "classpath:application-test.properties") +@SpringBootTest +class AquaServerApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties new file mode 100644 index 0000000..fe78bb7 --- /dev/null +++ b/src/test/resources/application-test.properties @@ -0,0 +1,11 @@ +# For testing +## AimeDb server setting +aimedb.server.enable=true +aimedb.server.port=22345 +allnet.server.host=localhost +allnet.server.port=80 +## Http Server Port +server.port=80 +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:db +spring.jpa.hibernate.ddl-auto=create-drop