diff --git a/.env-github-actions b/.env-github-actions index 1e5f04b8c..7cdad8e5b 100644 --- a/.env-github-actions +++ b/.env-github-actions @@ -8,7 +8,7 @@ AML_LOCATION_PROVIDER=http://ip2country:5000/{} AML_DEBUG=True DJANGO_SETTINGS_MODULE=aml.development_settings REACT_APP_API_ROOT=http://localhost:8000 -REACT_APP_EXPERIMENT_SLUG=fe +REACT_APP_EXPERIMENT_SLUG=gold-msi REACT_APP_AML_HOME=https://www.amsterdammusiclab.nl REACT_APP_HTML_PAGE_TITLE=Amsterdam Music Lab Experiment REACT_APP_HTML_OG_DESCRIPTION=Listening experiments from the Amsterdam Music Lab. Test your musical knowledge and skills in engaging citizen-science experiments. diff --git a/.env.dist b/.env.dist index 92187bc60..cea75fe88 100644 --- a/.env.dist +++ b/.env.dist @@ -13,10 +13,10 @@ DJANGO_SUPERUSER_USERNAME=admin # do not use in production! DJANGO_SUPERUSER_PASSWORD=admin # do not use in production! DJANGO_SUPERUSER_EMAIL=mail@example.com # do not use in production! AML_LOCATION_PROVIDER=http://ip2country:5000/{} # address of the ip2country container, don't change -ALLOWED_HOSTS=localhost # needs to be changed when running in production +AML_ALLOWED_HOSTS="backend.muscle.local" # needs to be changed when running in production -REACT_APP_API_ROOT=http://localhost:8000 # address of the server, don't change -REACT_APP_EXPERIMENT_SLUG=gmsi # experiment slug that the frontend redirects to +REACT_APP_API_ROOT=http://backend.muscle.local # address of the server, don't change +REACT_APP_EXPERIMENT_SLUG=gold-msi # experiment slug that the frontend redirects to REACT_APP_AML_HOME=https://www.amsterdammusiclab.nl # website you will be redirected to if you do not agree with an informed consent form REACT_APP_LOGO_URL= # optional: link to logo REACT_APP_HTML_PAGE_TITLE=Amsterdam Music Lab Experiment # optional: information for web crawlers @@ -27,3 +27,4 @@ REACT_APP_HTML_OG_TITLE=Amsterdam Music Lab Experiment # optional: information f REACT_APP_HTML_OG_URL= # optional: information for web crawlers REACT_APP_HTML_BODY_CLASS= # optional: assign a css class to the tag in index.html, for custom styling REACT_APP_SENTRY_DSN= # optional: link to sentry instance, e.g. https://xxx@xxx.ingest.sentry.io/xxx +REACT_APP_STRICT= # optional: use StrictMode for development diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 205b17f66..571007b63 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: - name: Run Backend Tests run: sudo docker-compose --env-file .env-github-actions run server bash -c "coverage run manage.py test" - name: Generate Backend Coverage Report (Inline) - run: sudo docker-compose --env-file .env-github-actions run server bash -c "coverage report" + run: sudo docker-compose --env-file .env-github-actions run server bash -c "coverage report --show-missing" # Generate coverage badge (only for main and develop branches) - name: Generate Backend Coverage Report (XML) and Badge @@ -24,7 +24,7 @@ jobs: # Push coverage badge to separate branch (only for main and develop branches) - name: Push Backend Coverage Badge to separate branch continue-on-error: true - if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' + if: github.ref == 'refs/heads/develop' run: | if git ls-remote --heads origin code-coverage-badges; then git fetch origin code-coverage-badges @@ -54,7 +54,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Lint Backend - continue-on-error: true + continue-on-error: false run: sudo docker-compose --env-file .env-github-actions run server bash -c "flake8" frontend-test: @@ -63,7 +63,43 @@ jobs: steps: - uses: actions/checkout@v3 - name: Run Frontend Tests - run: sudo docker-compose --env-file .env-github-actions run client yarn test:ci --watchAll=false + run: sudo docker-compose --env-file .env-github-actions run client yarn test:ci + + frontend-coverage-badge: + name: Generate Frontend Coverage Badge + needs: frontend-test + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/develop' + steps: + - uses: actions/checkout@v3 + - name: Generate Frontend Coverage Report (XML) and Badge + run: | + sudo docker-compose --env-file .env-github-actions run client yarn test:ci --coverageDirectory=public/coverage + sudo docker-compose --env-file .env-github-actions run client yarn coverage-badges -s public/coverage/coverage-summary.json -o public/coverage/coverage-frontend-badge-new.svg --label 'Frontend Code Coverage' + - name: Push Frontend Coverage Badge to separate branch + continue-on-error: true + run: | + if git ls-remote --heads origin code-coverage-badges; then + git fetch origin code-coverage-badges + git checkout code-coverage-badges + else + git checkout -b code-coverage-badges + git push origin code-coverage-badges + fi + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + rm frontend/coverage-frontend-badge.svg -f + sudo mv frontend/public/coverage/coverage-frontend-badge-new.svg frontend/coverage-frontend-badge.svg + git add frontend/coverage-frontend-badge.svg + git commit -m "Add frontend coverage badge for commit $GITHUB_SHA" + git push origin code-coverage-badges + # Check if there are any changes + if git diff --staged --quiet; then + echo "No changes in coverage badge. Skipping commit and push." + else + git commit -m "Add frontend coverage badge for commit $GITHUB_SHA" + git push origin code-coverage-badges + fi frontend-lint: name: Lint Frontend diff --git a/.github/workflows/podman.yml b/.github/workflows/podman.yml new file mode 100644 index 000000000..d45978f6d --- /dev/null +++ b/.github/workflows/podman.yml @@ -0,0 +1,132 @@ +name: Podman build & deploy + +on: + push: + branches: + - develop + workflow_dispatch: + + # temporarily also for PRs + pull_request: + branches: + - develop + +jobs: + deploy-test: + name: Deploy to test environment + environment: Test + runs-on: tst + if: github.ref == 'refs/heads/develop' + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + env: + + # Variables + AML_ALLOWED_HOSTS: ${{ vars.AML_ALLOWED_HOSTS }} + AML_CORS_ORIGIN_WHITELIST: ${{ vars.AML_CORS_ORIGIN_WHITELIST }} + AML_DEBUG: ${{ vars.AML_DEBUG }} + AML_LOCATION_PROVIDER: ${{ vars.AML_LOCATION_PROVIDER }} + AML_SUBPATH: ${{ vars.AML_SUBPATH }} + DJANGO_SETTINGS_MODULE: ${{ vars.DJANGO_SETTINGS_MODULE }} + SQL_DATABASE: ${{ vars.SQL_DATABASE }} + SQL_HOST: ${{ vars.SQL_HOST }} + SQL_PORT: ${{ vars.SQL_PORT }} + REACT_APP_API_ROOT: ${{ vars.REACT_APP_API_ROOT }} + REACT_APP_EXPERIMENT_SLUG: ${{ vars.REACT_APP_EXPERIMENT_SLUG }} + REACT_APP_AML_HOME: ${{ vars.REACT_APP_AML_HOME }} + REACT_APP_HTML_PAGE_TITLE: ${{ vars.REACT_APP_HTML_PAGE_TITLE }} + + # Secrets + AML_SECRET_KEY: ${{ secrets.AML_SECRET_KEY }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SQL_USER: ${{ secrets.SQL_USER }} + SQL_PASSWORD: ${{ secrets.SQL_PASSWORD }} + REACT_APP_SENTRY_DSN: ${{ secrets.REACT_APP_SENTRY_DSN }} + DJANGO_SUPERUSER_USERNAME: ${{ secrets.DJANGO_SUPERUSER_USERNAME }} + DJANGO_SUPERUSER_PASSWORD: ${{ secrets.DJANGO_SUPERUSER_PASSWORD }} + DJANGO_SUPERUSER_EMAIL: ${{ secrets.DJANGO_SUPERUSER_EMAIL }} + + # Prevent podman services from exiting after startup + RUNNER_TRACKING_ID: "" + + steps: + - uses: actions/checkout@v4 + - name: Create .env file + run: | + touch .env + echo "REACT_APP_API_ROOT=$REACT_APP_API_ROOT" >> .env + echo "REACT_APP_EXPERIMENT_SLUG=$REACT_APP_EXPERIMENT_SLUG" >> .env + echo "REACT_APP_AML_HOME=$REACT_APP_AML_HOME" >> .env + echo "REACT_APP_HTML_PAGE_TITLE=$REACT_APP_HTML_PAGE_TITLE" >> .env + echo "REACT_APP_SENTRY_DSN=$REACT_APP_SENTRY_DSN" >> .env + cp .env frontend/.env + - name: Build Podman images + run: podman-compose -f docker-compose-deploy.yml build + - name: Deploy Podman images + run: podman-compose -f docker-compose-deploy.yml up -d --force-recreate + - name: Prune old images + run: podman image prune -a -f + - name: Check Podman images + run: podman-compose -f docker-compose-deploy.yml ps + - name: Check logs + run: podman-compose -f docker-compose-deploy.yml logs + + deploy-acceptance: + name: Deploy to acceptance environment + environment: Acceptance + runs-on: ACC + if: github.ref == 'refs/heads/main' || github.ref == 'refs/tags/*' || 1 == 1 # Temporarily always run during testing + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + env: + + # Variables + AML_ALLOWED_HOSTS: ${{ vars.AML_ALLOWED_HOSTS }} + AML_CORS_ORIGIN_WHITELIST: ${{ vars.AML_CORS_ORIGIN_WHITELIST }} + AML_DEBUG: ${{ vars.AML_DEBUG }} + AML_LOCATION_PROVIDER: ${{ vars.AML_LOCATION_PROVIDER }} + AML_SUBPATH: ${{ vars.AML_SUBPATH }} + DJANGO_SETTINGS_MODULE: ${{ vars.DJANGO_SETTINGS_MODULE }} + SQL_DATABASE: ${{ vars.SQL_DATABASE }} + SQL_HOST: ${{ vars.SQL_HOST }} + SQL_PORT: ${{ vars.SQL_PORT }} + REACT_APP_API_ROOT: ${{ vars.REACT_APP_API_ROOT }} + REACT_APP_EXPERIMENT_SLUG: ${{ vars.REACT_APP_EXPERIMENT_SLUG }} + REACT_APP_AML_HOME: ${{ vars.REACT_APP_AML_HOME }} + REACT_APP_HTML_PAGE_TITLE: ${{ vars.REACT_APP_HTML_PAGE_TITLE }} + + # Secrets + AML_SECRET_KEY: ${{ secrets.AML_SECRET_KEY }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SQL_USER: ${{ secrets.SQL_USER }} + SQL_PASSWORD: ${{ secrets.SQL_PASSWORD }} + REACT_APP_SENTRY_DSN: ${{ secrets.REACT_APP_SENTRY_DSN }} + DJANGO_SUPERUSER_USERNAME: ${{ secrets.DJANGO_SUPERUSER_USERNAME }} + DJANGO_SUPERUSER_PASSWORD: ${{ secrets.DJANGO_SUPERUSER_PASSWORD }} + DJANGO_SUPERUSER_EMAIL: ${{ secrets.DJANGO_SUPERUSER_EMAIL }} + + # Prevent podman services from exiting after startup + RUNNER_TRACKING_ID: "" + + steps: + - uses: actions/checkout@v4 + - name: Create .env file + run: | + touch .env + echo "REACT_APP_API_ROOT=$REACT_APP_API_ROOT" >> .env + echo "REACT_APP_EXPERIMENT_SLUG=$REACT_APP_EXPERIMENT_SLUG" >> .env + echo "REACT_APP_AML_HOME=$REACT_APP_AML_HOME" >> .env + echo "REACT_APP_HTML_PAGE_TITLE=$REACT_APP_HTML_PAGE_TITLE" >> .env + echo "REACT_APP_SENTRY_DSN=$REACT_APP_SENTRY_DSN" >> .env + cp .env frontend/.env + - name: Build Podman images + run: podman-compose -f docker-compose-deploy.yml build + - name: Deploy Podman images + run: podman-compose -f docker-compose-deploy.yml up -d --force-recreate + - name: Prune old images + run: podman image prune -a -f + - name: Check Podman images + run: podman-compose -f docker-compose-deploy.yml ps + - name: Check logs + run: podman-compose -f docker-compose-deploy.yml logs + diff --git a/README.md b/README.md index da2a0bfef..71989f196 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![DOI](https://zenodo.org/badge/418963353.svg)](https://zenodo.org/badge/latestdoi/418963353) [![Test](https://github.com/Amsterdam-Music-Lab/MUSCLE/actions/workflows/ci.yml/badge.svg)](https://github.com/Amsterdam-Music-Lab/MUSCLE/actions/workflows/test.yml/badge.svg) ![Backend Code Coverage Percentage](https://raw.githubusercontent.com/Amsterdam-Music-Lab/MUSCLE/code-coverage-badges/backend/coverage-backend-badge.svg) +![Frontend Code Coverage Percentage](https://raw.githubusercontent.com/Amsterdam-Music-Lab/MUSCLE/code-coverage-badges/frontend/coverage-frontend-badge.svg) # MUSic-related Citizen Science Listening Experiments (MUSCLE) This application provides an easy way to implement and run online listening experiments for music research. It presents questions, and typically audio stimuli, to participants, and collects their feedback. @@ -23,11 +24,10 @@ Install [Docker Desktop](https://docs.docker.com/desktop/). ### Linux * Install [Docker Engine](https://docs.docker.com/engine/install/) * Install [Docker Compose](https://docs.docker.com/compose/install/) - -As of April 2022, [Docker Desktop for Linux](https://docs.docker.com/desktop/linux/) is still in Beta and have not been tested by us. +* Install [Docker Desktop](https://docs.docker.com/desktop/install/linux-install/) ## Development build -Make a copy of the file .env.dist (in the same directory as this README) and rename it to .env. This file contains variables used by Docker to start up a container network serving MUSCLE. +Make a copy of [the file](https://github.com/Amsterdam-Music-Lab/MUSCLE/blob/develop/.env.dist) `.env.dist` (in the same directory as this README) and rename it to `.env.` This file contains variables used by Docker to start up a container network serving MUSCLE. Start Docker (the app icon is a whale carrying containers). Then, open a terminal and run `docker-compose up` (add `sudo` on Linux). @@ -46,3 +46,7 @@ To stop the containers, press `ctrl-c` or (in another terminal) run ## Production build A production build should define its own `docker-compose.yaml`, making use of the `Dockerfile` of the `backend` and `frontend` environments. It should also define a custom .env file, with safe passwords for the SQL database and the Python backend. Instead of mounting the entire backend and frontend directory and using the development servers, the backend should serve with gunicorn, and the frontend should use a build script to compile static html, css and JavaScript. + +## Troubleshooting + +Please refer to the [wiki](https://github.com/Amsterdam-Music-Lab/MUSCLE/wiki/X.-Troubleshooting) a checklist of common issues and their solutions. diff --git a/backend/.flake8 b/backend/.flake8 new file mode 100644 index 000000000..0605143d0 --- /dev/null +++ b/backend/.flake8 @@ -0,0 +1,46 @@ +[flake8] +# Flake8 Configuration File + +# High Priority: Security and Correctness +# These issues are critical and should be addressed first. +extend-ignore = + E722, # Do not use bare 'except' + F722, # Syntax error identified by pyflakes + F821, # Undefined name + +# Medium Priority: Code Maintainability and Readability +# Improving these can greatly enhance code readability and maintainability. + E501, # Line too long + F401, # Unused import + F403, # 'from module import *' used; unable to detect undefined names + F405, # Name may be undefined, or defined from star imports + F811, # Redefinition of unused name from line N + F841, # Local variable name is assigned to but never used + +# Low Priority: Style Guide Adherence +# These are mostly about whitespace and indentation, which can be adjusted later. + E201, # Whitespace after '(' + E202, # Whitespace before ')' + E203, # Whitespace before ':' + E222, # Multiple spaces after operator + E225, # Missing whitespace around operator + E231, # Missing whitespace after ',' + E251, # Unexpected spaces around keyword / parameter equals + E262, # Inline comment should start with '# ' + E122, # Continuation line missing indentation or outdented + E124, # Closing bracket does not match visual indentation + E125, # Continuation line with same indent as next logical line + E127, # Continuation line over-indented for visual indent + E128, # Continuation line under-indented for visual indent + E131, # Continuation line unaligned for hanging indent + E261, # At least two spaces before inline comment + W191, # Indentation contains tabs + W291, # Trailing whitespace + W292, # No newline at end of file + W293, # Blank line contains whitespace + W391, # Blank line at end of file + W503, # Line break occurred before a binary operator + +# General Configuration +max-line-length = 120 +exclude = .venv, .git, __pycache__, build, dist diff --git a/backend/Dockerfile b/backend/Dockerfile index 4eda53084..3203cdf09 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.8 +FROM docker.io/python:3.8 ENV PYTHONUNBUFFERED 1 RUN apt-get -y update RUN apt-get install -y ffmpeg @@ -7,6 +7,6 @@ RUN apt-get install -y gettext WORKDIR /server COPY requirements/prod.txt /server/ RUN pip install -r prod.txt -# We add remainig code later, so pip install won't need to rerun if source code changes -COPY . /server/ +# We add remainig code later, so pip install won't need to rerun if source code changes +COPY . /server/ \ No newline at end of file diff --git a/backend/DockerfileDevelop b/backend/DockerfileDevelop index bcecba141..139171da6 100644 --- a/backend/DockerfileDevelop +++ b/backend/DockerfileDevelop @@ -1,9 +1,8 @@ -FROM python:3.8 +FROM docker.io/python:3.8 as base ENV PYTHONUNBUFFERED 1 RUN apt-get -y update RUN apt-get install -y ffmpeg WORKDIR /server COPY requirements/dev.txt /server/ -RUN pip install -r dev.txt - +RUN pip install -r dev.txt \ No newline at end of file diff --git a/backend/aml/base_settings.py b/backend/aml/base_settings.py index 911894c8c..691862cda 100644 --- a/backend/aml/base_settings.py +++ b/backend/aml/base_settings.py @@ -11,9 +11,12 @@ """ import os +import logging from corsheaders.defaults import default_headers import sentry_sdk +logger = logging.getLogger(__name__) + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -40,6 +43,7 @@ 'django.contrib.messages', 'django.contrib.staticfiles', 'inline_actions', + 'django_markup', 'corsheaders', 'experiment', 'participant', @@ -165,14 +169,24 @@ DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' -# Sentry -sentry_sdk.init( - dsn=os.getenv("SENTRY_DSN", ""), - # Set traces_sample_rate to 1.0 to capture 100% - # of transactions for performance monitoring. - traces_sample_rate=0.2, - # Set profiles_sample_rate to 1.0 to profile 100% - # of sampled transactions. - # We recommend adjusting this value in production. - profiles_sample_rate=0.2, -) +if os.getenv("SENTRY_DSN"): + sentry_sdk.init( + dsn=os.getenv("SENTRY_DSN", ""), + # Set traces_sample_rate to 1.0 to capture 100% + # of transactions for performance monitoring. + traces_sample_rate=0.2, + # Set profiles_sample_rate to 1.0 to profile 100% + # of sampled transactions. + # We recommend adjusting this value in production. + profiles_sample_rate=0.2, + ) +else: + logger.info("SENTRY_DSN is not defined. Skipping Sentry initialization.") + +MARKUP_SETTINGS = { + 'markdown': { + 'safe_mode': True + } +} + +SUBPATH = os.getenv('AML_SUBPATH', None) diff --git a/backend/aml/production_settings.py b/backend/aml/production_settings.py index 24bb4dfa4..f9ac05ee8 100644 --- a/backend/aml/production_settings.py +++ b/backend/aml/production_settings.py @@ -6,6 +6,8 @@ # Database # https://docs.djangoproject.com/en/3.0/ref/settings/#databases +# Static url is set to /django_static/ in the nginx configuration +# to avoid conflicts with the frontend's static files in /static/ STATIC_URL = '/django_static/' DATABASES = { diff --git a/backend/aml/urls.py b/backend/aml/urls.py index 3188931e7..9444450fc 100644 --- a/backend/aml/urls.py +++ b/backend/aml/urls.py @@ -40,6 +40,11 @@ # ^ The static helper function only works in debug mode # (https://docs.djangoproject.com/en/3.0/howto/static-files/) + +# Prefix all URLS with /server if AML_SUBPATH is set +if settings.SUBPATH: + urlpatterns = [path('server/', include(urlpatterns))] + # Debug toolbar if settings.DEBUG: import debug_toolbar diff --git a/backend/experiment/actions/__init__.py b/backend/experiment/actions/__init__.py index 74879c6d5..907198157 100644 --- a/backend/experiment/actions/__init__.py +++ b/backend/experiment/actions/__init__.py @@ -2,12 +2,12 @@ from .explainer import Explainer, Step from .form import * from .final import Final +from .frontend_style import EFrontendStyle, FrontendStyle from .html import HTML from .info import Info from .playback import Playback from .playlist import Playlist from .redirect import Redirect from .score import Score -from .start_session import StartSession from .toontjehoger import ToontjeHoger from .trial import Trial diff --git a/backend/experiment/actions/base_action.py b/backend/experiment/actions/base_action.py index c1c91ae77..152bc0f52 100644 --- a/backend/experiment/actions/base_action.py +++ b/backend/experiment/actions/base_action.py @@ -1,9 +1,19 @@ +from .frontend_style import FrontendStyle + + class BaseAction(object): ID = 'BASE' + style = None - def __init__(self): + def __init__(self, style: FrontendStyle = None): + self.style = style pass def action(self): - self.view = self.ID - return self.__dict__ + action_dict = self.__dict__ + action_dict['view'] = self.ID + + if self.style is not None: + action_dict['style'] = self.style.to_dict() + + return action_dict diff --git a/backend/experiment/actions/consent.py b/backend/experiment/actions/consent.py index 97bd629e8..ce0ec228f 100644 --- a/backend/experiment/actions/consent.py +++ b/backend/experiment/actions/consent.py @@ -1,10 +1,32 @@ from .base_action import BaseAction +from django.template.loader import render_to_string +from django.template import Template, Context +from django_markup.markup import formatter + + +def get_render_format(url): + """ + Detect markdown file by file extention + """ + url_length = len(url) + if url[(url_length-2):url_length].lower() == 'md': + return 'MARKDOWN' + return 'HTML' + class Consent(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for a view that ask consent for using the experiment data + - text: Uploaded file via experiment.consent (fileField) + - title: The title to be displayed + - confirm: The text on the confirm button + - deny: The text on the deny button + - url: If no text is provided the url will be used to load a template (HTML or MARKDOWN) + - render_format: (autodetected from the file extention) + 'HTML': (default) Allowed tags: html, django template language + 'MARKDOWN': Allowed tags: Markdown language - Relates to client component: Consent.js + Relates to client component: Consent.js """ # default consent text, that can be used for multiple experiments @@ -21,8 +43,28 @@ class Consent(BaseAction): # pylint: disable=too-few-public-methods amet, nec te atqui scribentur. Diam molestie posidonium te sit, \ ea sea expetenda suscipiantur contentiones." - def __init__(self, text=default_text, title='Informed consent', confirm='I agree', deny='Stop'): - self.text = text + def __init__(self, text, title='Informed consent', confirm='I agree', deny='Stop', url='', render_format='HTML'): + # Determine which text to use + if text!='': + # Uploaded consent via file field: experiment.consent (High priority) + with text.open('r') as f: + dry_text = f.read() + render_format = get_render_format(text.url) + elif url!='': + # Template file via url (Low priority) + dry_text = render_to_string(url) + render_format = get_render_format(url) + else: + # use default text + dry_text = self.default_text + # render text fot the consent component + if render_format == 'HTML': + template = Template(dry_text) + context = Context() + self.text = template.render(context) + if render_format == 'MARKDOWN': + self.text = formatter(dry_text, filter_name='markdown') self.title = title self.confirm = confirm self.deny = deny + self.render_format = render_format diff --git a/backend/experiment/actions/explainer.py b/backend/experiment/actions/explainer.py index adb5a4c2e..d605dc4c0 100644 --- a/backend/experiment/actions/explainer.py +++ b/backend/experiment/actions/explainer.py @@ -1,5 +1,6 @@ from .base_action import BaseAction + class Explainer(BaseAction): """ Provide data for a explainer that explains the experiment steps diff --git a/backend/experiment/actions/final.py b/backend/experiment/actions/final.py index 7f5c0502a..514d900c6 100644 --- a/backend/experiment/actions/final.py +++ b/backend/experiment/actions/final.py @@ -2,6 +2,7 @@ from .base_action import BaseAction + class Final(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for a final view diff --git a/backend/experiment/actions/form.py b/backend/experiment/actions/form.py index 6dd7257de..a1826d08a 100644 --- a/backend/experiment/actions/form.py +++ b/backend/experiment/actions/form.py @@ -4,6 +4,7 @@ from .styles import STYLE_NEUTRAL, STYLE_BOOLEAN_NEGATIVE_FIRST, STYLE_GRADIENT_7 from .base_action import BaseAction + class Question(BaseAction): ''' Question is part of a form. - key: description of question in results table @@ -45,6 +46,7 @@ def action(self): self.expected_response = result.expected_response return self.__dict__ + class NumberQuestion(Question): def __init__(self, input_type='number', min_value=0, max_value=120, **kwargs): super().__init__(**kwargs) @@ -53,6 +55,7 @@ def __init__(self, input_type='number', min_value=0, max_value=120, **kwargs): self.input_type = input_type self.view = 'STRING' + class TextQuestion(Question): def __init__(self, input_type='text', max_length=None, **kwargs): super().__init__(**kwargs) @@ -60,6 +63,7 @@ def __init__(self, input_type='text', max_length=None, **kwargs): self.input_type = input_type self.view = 'STRING' + class BooleanQuestion(Question): def __init__(self, choices=None, **kwargs): super().__init__(**kwargs) @@ -70,6 +74,7 @@ def __init__(self, choices=None, **kwargs): self.view = 'BUTTON_ARRAY' self.style = {STYLE_BOOLEAN_NEGATIVE_FIRST: True, 'buttons-large-gap': True} + class ChoiceQuestion(Question): def __init__(self, choices, min_values=1, **kwargs): super().__init__(**kwargs) @@ -143,6 +148,7 @@ def __init__(self, scale_steps=7, explainer=_("How much do you agree or disagree 5: _("Strongly Agree"), } + class LikertQuestionIcon(Question): def __init__(self, scale_steps=7, likert_view='ICON_RANGE', **kwargs): super().__init__(**kwargs) @@ -159,6 +165,7 @@ def __init__(self, scale_steps=7, likert_view='ICON_RANGE', **kwargs): } self.style = STYLE_GRADIENT_7 + class Form(BaseAction): ''' Form is a view which brings together an array of questions with submit and optional skip button - form: array of questions diff --git a/backend/experiment/actions/frontend_style.py b/backend/experiment/actions/frontend_style.py new file mode 100644 index 000000000..7e9130893 --- /dev/null +++ b/backend/experiment/actions/frontend_style.py @@ -0,0 +1,66 @@ +from enum import Enum + + +class EFrontendStyle(Enum): + EMPTY = '' + BOOLEAN = 'boolean' + BOOLEAN_NEGATIVE_FIRST = 'boolean-negative-first' + NEUTRAL = 'neutral' + NEUTRAL_INVERTED = 'neutral-inverted' + PRIMARY = 'primary' + SECONDARY = 'secondary' + SUCCESS = 'success' + NEGATIVE = 'negative' + INFO = 'info' + WARNING = 'warning' + + @staticmethod + def is_valid(value): + return value in EFrontendStyle.__members__.values() + + +class FrontendStyle: + + VALID_STYLES = EFrontendStyle.__members__.values() + + """ + Initialize the FrontendStyle with a root style. + :param root_style: The style name for the root element. + """ + def __init__(self, root_style: EFrontendStyle = EFrontendStyle.EMPTY): + + if not EFrontendStyle.is_valid(root_style): + raise ValueError(f"Invalid root style: {root_style}") + + self.styles = {'root': root_style} + + def get_style(self, element: str) -> str: + """ + Get the style for a specific element. + :param element: The element identifier for which to get the style. + :return: The style name for the given element. + """ + return self.styles.get(element, None) + + def apply_style(self, element: str, style: str) -> None: + """ + Apply a specific style to an element after validating the style. + :param element: The element identifier to apply the style to. + :param style: The style name to apply. + """ + if EFrontendStyle.is_valid(style): + self.styles[element] = style + else: + valid_styles = ', '.join([str(s) for s in self.VALID_STYLES]) + raise ValueError(f"Invalid style: {style}. Valid styles are {valid_styles}.") + + def to_dict(self) -> dict: + serialized_styles = { 'root': self.styles['root'].value } + + return serialized_styles + + def __str__(self): + return str(self.to_dict()) + + def __json__(self): + return self.to_dict() diff --git a/backend/experiment/actions/info.py b/backend/experiment/actions/info.py index 1084d7034..c0aecef6b 100644 --- a/backend/experiment/actions/info.py +++ b/backend/experiment/actions/info.py @@ -1,5 +1,6 @@ from .base_action import BaseAction + class Info(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for a view that shows information (HTML) diff --git a/backend/experiment/actions/playback.py b/backend/experiment/actions/playback.py index af2f3c56d..7d3453473 100644 --- a/backend/experiment/actions/playback.py +++ b/backend/experiment/actions/playback.py @@ -1,52 +1,154 @@ +from typing import List, Dict + +from .frontend_style import FrontendStyle from .base_action import BaseAction +# player types +TYPE_AUTOPLAY = 'AUTOPLAY' +TYPE_BUTTON = 'BUTTON' +TYPE_IMAGE = 'IMAGE' +TYPE_MULTIPLAYER = 'MULTIPLAYER' +TYPE_MATCHINGPAIRS = 'MATCHINGPAIRS' +TYPE_VISUALMATCHINGPAIRS = 'VISUALMATCHINGPAIRS' + +# playback methods +PLAY_EXTERNAL = 'EXTERNAL' +PLAY_HTML = 'HTML' +PLAY_BUFFER = 'BUFFER' +PLAY_NOAUDIO = 'NOAUDIO' + + class Playback(BaseAction): - ''' A playback wrapper for different kinds of players - - player_type: can be one of the following: - - 'AUTOPLAY' - player starts automatically - - 'BUTTON' - display one play button - - 'MULTIPLAYER' - display multiple small play buttons, one per section - - 'SPECTROGRAM' - extends multiplayer with a list of spectrograms + ''' A playback base class for different kinds of players - sections: a list of sections (in many cases, will only contain *one* section) - preload_message: text to display during preload - instruction: text to display during presentation of the sound - - play_config: define to override the following values: - - play_method: - - 'BUFFER': Use webaudio buffers. (recommended for stimuli up to 45s) - - 'HTML': Use the HTML tag. (recommended for stimuli longer than 45s) - - 'EXTERNAL': Use for externally hosted audio files. Web-audio api will be disabled - - ready_time: time before presentation of sound - - timeout_after_playback: pause in ms after playback has finished - - playhead: from where the audio file should play (offset in seconds from start) - - mute: whether audio should be muted - - auto_play: whether sound will start automatically - - stop_audio_after: after how many seconds playback audio should be stopped - - show_animation: whether to show an animation during playback - - (multiplayer) label_style: player index number style: NUMERIC, ALPHABETIC, ROMAN or empty (no label) - - play_once: the sound can only be played once - - resume_play: if the playback should resume from where a previous view left off - ''' - - TYPE_AUTOPLAY = 'AUTOPLAY' - TYPE_BUTTON = 'BUTTON' - TYPE_MULTIPLAYER = 'MULTIPLAYER' - TYPE_SPECTROGRAM = 'SPECTROGRAM' - - def __init__(self, sections, player_type='AUTOPLAY', preload_message='', instruction='', play_config=None): + - play_from: where in the audio file to start playing/ + - ready_time: how long to show the "Preload" view (loading spinner) + - show_animation: whether to show animations with this player + - mute: whether to mute the audio + - timeout_after_playback: once playback has finished, add optional timeout (in seconds) before proceeding + - stop_audio_after: stop playback after so many seconds + - resume_play: if the playback should resume from where a previous view left off + ''' + + def __init__(self, + sections, + preload_message='', + instruction='', + play_from=0, + ready_time=0, + show_animation=False, + mute=False, + timeout_after_playback=None, + stop_audio_after=None, + resume_play=False, + style=FrontendStyle() + ): self.sections = [{'id': s.id, 'url': s.absolute_url(), 'group': s.group} for s in sections] - self.ID = player_type + if str(sections[0].filename).startswith('http'): + self.play_method = PLAY_EXTERNAL + elif sections[0].duration > 45: + self.play_method = PLAY_HTML + else: + self.play_method = PLAY_BUFFER + self.show_animation = show_animation self.preload_message = preload_message self.instruction = instruction - self.play_config = { - 'play_method': 'BUFFER', - 'external_audio': False, - 'ready_time': 0, - 'playhead': 0, - 'show_animation': False, - 'mute': False, - 'play_once': False, - 'resume_play': False - } - if play_config: - self.play_config.update(play_config) + self.play_from = play_from + self.mute = mute + self.ready_time = ready_time + self.timeout_after_playback = timeout_after_playback + self.stop_audio_after = stop_audio_after + self.resume_play = resume_play + self.style = style + + +class Autoplay(Playback): + ''' + This player starts playing automatically + - show_animation: if True, show a countdown and moving histogram + ''' + + def __init__(self, sections, **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_AUTOPLAY + + +class PlayButton(Playback): + ''' + This player shows a button, which triggers playback + - play_once: if True, button will be disabled after one play + ''' + + def __init__(self, sections, play_once=False, **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_BUTTON + self.play_once = play_once + + +class Multiplayer(PlayButton): + ''' + This is a player with multiple play buttons + - stop_audio_after: after how many seconds to stop audio + - label_style: set if players should be labeled in alphabetic / numeric / roman style (based on player index) + - labels: pass list of strings if players should have custom labels + ''' + + def __init__(self, sections, stop_audio_after=5, labels=[], **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_MULTIPLAYER + self.stop_audio_after = stop_audio_after + if labels: + if len(labels) != len(self.sections): + raise UserWarning( + 'Number of labels and sections for the play buttons do not match') + self.labels = labels + + +class ImagePlayer(PlayButton): + ''' + This is a special case of the Multiplayer: + it shows an image next to each play button + ''' + + def __init__(self, sections, images, image_labels=[], **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_IMAGE + if len(images) != len(self.sections): + raise UserWarning( + 'Number of images and sections for the ImagePlayer do not match') + self.images = images + if image_labels: + if len(image_labels) != len(self.sections): + raise UserWarning( + 'Number of image labels and sections do not match') + self.image_labels = image_labels + + +class MatchingPairs(Multiplayer): + ''' + This is a special case of multiplayer: + play buttons are represented as cards + - sections: a list of sections (in many cases, will only contain *one* section) + - score_feedback_display: how to display the score feedback (large-top, small-bottom-right, hidden) + ''' + + def __init__(self, sections: List[Dict], score_feedback_display: str = 'large-top', **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_MATCHINGPAIRS + self.score_feedback_display = score_feedback_display + + +class VisualMatchingPairs(MatchingPairs): + ''' + This is a special case of multiplayer: + play buttons are represented as cards + this player does not play audio, but displays images instead + ''' + + def __init__(self, sections, **kwargs): + super().__init__(sections, **kwargs) + self.ID = TYPE_VISUALMATCHINGPAIRS + self.play_method = PLAY_NOAUDIO diff --git a/backend/experiment/actions/playlist.py b/backend/experiment/actions/playlist.py index a4fabfdae..32ae61e23 100644 --- a/backend/experiment/actions/playlist.py +++ b/backend/experiment/actions/playlist.py @@ -2,6 +2,7 @@ from .base_action import BaseAction + class Playlist(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for playlist selection view diff --git a/backend/experiment/actions/redirect.py b/backend/experiment/actions/redirect.py index 2860093ca..ec0d050a6 100644 --- a/backend/experiment/actions/redirect.py +++ b/backend/experiment/actions/redirect.py @@ -1,5 +1,6 @@ from .base_action import BaseAction + class Redirect(BaseAction): ID = 'REDIRECT' diff --git a/backend/experiment/actions/score.py b/backend/experiment/actions/score.py index 7888d5fca..943b0abf9 100644 --- a/backend/experiment/actions/score.py +++ b/backend/experiment/actions/score.py @@ -4,11 +4,12 @@ from .base_action import BaseAction + class Score(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for an intermediate score view - Relates to client component: Score.js + Relates to client component: Score.js """ ID = 'SCORE' @@ -57,7 +58,7 @@ def action(self): 'feedback': self.feedback, 'icon': self.icon, 'timer': self.timer - } + } if self.config['show_section']: action['last_song'] = self.session.last_song() if self.config['show_total_score']: @@ -66,9 +67,9 @@ def action(self): def default_score_message(self, score): """Fallback to generate a message for the given score""" - + # None - if score == None: + if score is None: score = 0 # Zero if score == 0: diff --git a/backend/experiment/actions/start_session.py b/backend/experiment/actions/start_session.py deleted file mode 100644 index 7e681983e..000000000 --- a/backend/experiment/actions/start_session.py +++ /dev/null @@ -1,13 +0,0 @@ -from .base_action import BaseAction - -class StartSession(BaseAction): # pylint: disable=too-few-public-methods - """ - Provide data for a StartSession view - - This is a required view in each experiment that handles the creation of a new session - - It should only be called after consent has been given by the participant - - As this view is more a technical step/necessity it doesn't have any additional data beside the view id - - Relates to client component: StartSession.js - """ - - ID = "START_SESSION" \ No newline at end of file diff --git a/backend/experiment/actions/toontjehoger.py b/backend/experiment/actions/toontjehoger.py index b9c2b9129..f19f14327 100644 --- a/backend/experiment/actions/toontjehoger.py +++ b/backend/experiment/actions/toontjehoger.py @@ -1,5 +1,6 @@ from .base_action import BaseAction + class ToontjeHoger(BaseAction): # pylint: disable=too-few-public-methods """ Provide data for a view that shows the ToontjeHoger homepage diff --git a/backend/experiment/actions/trial.py b/backend/experiment/actions/trial.py index fbd379931..6b2d526e4 100644 --- a/backend/experiment/actions/trial.py +++ b/backend/experiment/actions/trial.py @@ -2,6 +2,8 @@ from .base_action import BaseAction from experiment.actions.form import Form +from .frontend_style import FrontendStyle + class Trial(BaseAction): # pylint: disable=too-few-public-methods """ @@ -25,7 +27,7 @@ def __init__( title='', config = None, result_id = None, - style = None + style = FrontendStyle() ): ''' - playback: Playback object (may be None) @@ -61,7 +63,6 @@ def __init__( self.config.update(config) self.style = style - def action(self): """ Serialize data for experiment action @@ -73,8 +74,9 @@ def action(self): 'title': self.title, 'config': self.config, 'result_id': self.result_id, - 'style': self.style } + if self.style: + action['style'] = self.style.to_dict() if self.playback: action['playback'] = self.playback.action() if self.html: diff --git a/backend/experiment/actions/utils.py b/backend/experiment/actions/utils.py index bf5af61a7..ab80d6eff 100644 --- a/backend/experiment/actions/utils.py +++ b/backend/experiment/actions/utils.py @@ -7,6 +7,7 @@ from experiment.actions import Final + def final_action_with_optional_button(session, final_text, request_session): """ given a session, a score message and an optional session dictionary from an experiment series, return a Final.action, which has a button to continue to the next experiment if series is defined @@ -34,6 +35,7 @@ def final_action_with_optional_button(session, final_text, request_session): final_text=final_text, ) + def render_feedback_trivia(feedback, trivia): ''' Given two texts of feedback and trivia, render them in the final/feedback_trivia.html template.''' @@ -41,6 +43,7 @@ def render_feedback_trivia(feedback, trivia): return render_to_string(join('final', 'feedback_trivia.html'), context) + def get_average_difference(session, num_turnpoints, initial_value): """ return the average difference in milliseconds participants could hear @@ -56,6 +59,7 @@ def get_average_difference(session, num_turnpoints, initial_value): return initial_value return (sum([int(result.section.song.name) for result in last_turnpoints]) / last_turnpoints.count()) + def get_average_difference_level_based(session, num_turnpoints, initial_value): """ calculate the difference based on exponential decay, starting from an initial_value """ @@ -72,6 +76,7 @@ def get_average_difference_level_based(session, num_turnpoints, initial_value): # Difference by level starts at initial value (which is level 1, so 20/(2^0)) and then halves for every next level return sum([initial_value / (2 ** (int(result.section.song.name.split('_')[-1]) - 1)) for result in last_turnpoints]) / last_turnpoints.count() + def get_fallback_result(session): """ if there were no turnpoints (outliers): return the last result, or if there are no results, return None @@ -81,6 +86,7 @@ def get_fallback_result(session): return None return session.result_set.order_by('-created_at')[0] + def get_last_n_turnpoints(session, num_turnpoints): """ select all results associated with turnpoints in the result set @@ -90,5 +96,6 @@ def get_last_n_turnpoints(session, num_turnpoints): cutoff = min(all_results.count(), num_turnpoints) return all_results[:cutoff] + def randomize_playhead(min_jitter, max_jitter, silence_time, continuation_correctness): return silence_time + (random.uniform(min_jitter, max_jitter) if not continuation_correctness else 0) diff --git a/backend/experiment/actions/wrappers.py b/backend/experiment/actions/wrappers.py index 934ad5cdb..4c03d81c4 100644 --- a/backend/experiment/actions/wrappers.py +++ b/backend/experiment/actions/wrappers.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext as _ from .form import BooleanQuestion, ChoiceQuestion, Form -from .playback import Playback +from .playback import Autoplay, PlayButton from .trial import Trial from result.utils import prepare_result @@ -17,9 +17,8 @@ def two_alternative_forced(session, section, choices, expected_response=None, st Provide data for a Two Alternative Forced view that (auto)plays a section, shows a question and has two customizable buttons """ - playback = Playback( - [section], - 'BUTTON' + playback = PlayButton( + [section] ) key = 'choice' button_style = {'invisible-text': True, @@ -46,8 +45,9 @@ def two_alternative_forced(session, section, choices, expected_response=None, st return trial -def song_sync(session, section, title, play_method='BUFFER', - recognition_time=15, sync_time=15, min_jitter=10, max_jitter=15): +def song_sync(session, section, title, + recognition_time=15, sync_time=15, + min_jitter=10, max_jitter=15): trial_config = { 'response_time': recognition_time, 'auto_advance': True @@ -59,31 +59,25 @@ def song_sync(session, section, title, play_method='BUFFER', 'recognize', session, section=section, scoring_rule='SONG_SYNC_RECOGNITION'), submits=True )]), - playback=Playback([section], 'AUTOPLAY', play_config={ - 'ready_time': 3, - 'show_animation': True, - 'play_method': play_method - }, - preload_message=_('Get ready!'), - instruction=_('Do you recognize the song?'), - ), + playback=Autoplay([section], show_animation=True, + ready_time=3, + preload_message=_('Get ready!'), + instruction=_('Do you recognize the song?'), + ), config={**trial_config, 'break_round_on': {'EQUALS': ['TIMEOUT', 'no']}}, title=title ) silence_time = 4 silence = Trial( - playback=Playback([section], 'AUTOPLAY', + playback=Autoplay([section], + show_animation=True, instruction=_('Keep imagining the music'), - play_config={ - 'mute': True, - 'ready_time': 0, - 'show_animation': True, - }), + mute=True), config={ 'response_time': silence_time, 'auto_advance': True, - 'show_continue_button': False + 'show_continue_button': False, }, title=title ) @@ -99,15 +93,13 @@ def song_sync(session, section, title, play_method='BUFFER', scoring_rule='SONG_SYNC_CONTINUATION', expected_response='yes' if continuation_correctness else 'no') )]), - playback=Playback([section], 'AUTOPLAY', + playback=Autoplay([section], instruction=_( 'Did the track come back in the right place?'), - play_config={ - 'ready_time': 0, - 'playhead': randomize_playhead(min_jitter, max_jitter, silence_time, continuation_correctness), - 'show_animation': True, - 'resume_play': True - }), + show_animation=True, + play_from=randomize_playhead( + min_jitter, max_jitter, silence_time, continuation_correctness), + resume_play=True), config=trial_config, title=title ) diff --git a/backend/experiment/admin.py b/backend/experiment/admin.py index fca9d6f32..493f4924a 100644 --- a/backend/experiment/admin.py +++ b/backend/experiment/admin.py @@ -17,6 +17,7 @@ from result.models import Result from participant.models import Participant + class FeedbackInline(admin.TabularInline): """Inline to show results linked to given participant """ @@ -25,6 +26,7 @@ class FeedbackInline(admin.TabularInline): fields = ['text'] extra = 0 + class ExperimentAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): list_display = ('name', 'rules', 'rounds', 'playlist_count', 'session_count', 'active') @@ -32,7 +34,7 @@ class ExperimentAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): search_fields = ['name'] inline_actions = ['export', 'export_csv'] fields = ['name', 'slug', 'url', 'hashtag', 'language', 'active', 'rules', - 'rounds', 'bonus_points', 'playlists', 'experiment_series','questions'] + 'rounds', 'bonus_points', 'playlists', 'experiment_series','consent', 'questions'] inlines = [FeedbackInline] form = ExperimentForm @@ -138,13 +140,16 @@ def export_csv(self, request, obj, parent_obj=None): export_csv.short_description = "Export CSV" + admin.site.register(Experiment, ExperimentAdmin) + class ModelFormFieldAsJSON(ModelMultipleChoiceField): """ override clean method to prevent pk lookup to save querysets """ def clean(self, value): return value + class ExperimentSeriesForm(ModelForm): def __init__(self, *args, **kwargs): super(ModelForm, self).__init__(*args, **kwargs) @@ -158,8 +163,10 @@ class Meta: model = ExperimentSeries fields = ['name', 'first_experiments', 'random_experiments', 'last_experiments'] + class ExperimentSeriesAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): fields = ['name', 'first_experiments', 'random_experiments', 'last_experiments'] form = ExperimentSeriesForm + admin.site.register(ExperimentSeries, ExperimentSeriesAdmin) diff --git a/backend/experiment/forms.py b/backend/experiment/forms.py index 8e9c6fbd0..38ea4813a 100644 --- a/backend/experiment/forms.py +++ b/backend/experiment/forms.py @@ -13,7 +13,7 @@ ('participant_access_info', 'Participant access info'), ('session_start', 'Session start time'), ('session_end', 'Session end time'), - ('final_score', 'Final score') + ('final_score', 'Final score'), ] # result_keys for Export CSV @@ -22,7 +22,8 @@ ('result_score', 'Result score'), ('result_comment', 'Result comment'), ('expected_response', 'Expected response'), - ('given_response', 'Given response') + ('given_response', 'Given response'), + ('question_key', 'Question key'), ] # export_options for Export CSV @@ -144,6 +145,10 @@ class Meta: model = Experiment fields = ['name', 'slug', 'active', 'rules', 'rounds', 'bonus_points', 'playlists', 'experiment_series'] + help_texts = {'consent': 'Upload an HTML (.html) or MARKDOWN (.md) file with a text to ask a user its consent
\ + for using the experiment data for this instance of the experiment.
\ + This field will override any consent text loaded from the rules file.
\ + HTML files also allow django template tags so that the text can be translated'} class Media: js = ["experiment_admin.js"] diff --git a/backend/experiment/management/commands/bootstrap.py b/backend/experiment/management/commands/bootstrap.py index 9f36ed82e..5afd82b07 100644 --- a/backend/experiment/management/commands/bootstrap.py +++ b/backend/experiment/management/commands/bootstrap.py @@ -5,6 +5,7 @@ from experiment.models import Experiment from section.models import Playlist + class Command(BaseCommand): """ Command for creating a superuser and an experiment if they do not yet exist """ diff --git a/backend/experiment/management/commands/compileplaylist.py b/backend/experiment/management/commands/compileplaylist.py index 6fd0cbdda..f6a189aae 100644 --- a/backend/experiment/management/commands/compileplaylist.py +++ b/backend/experiment/management/commands/compileplaylist.py @@ -74,13 +74,12 @@ def handle(self, *args, **options): start_position = 0.0 with audioread.audio_open(audio_file) as f: duration = f.duration - restrict_to_nl = 0 group_tag_option = options.get('tag_group') if group_tag_option: group, tag = calculate_group_tag( filename, group_tag_option, i) row = [artist_name, song_name, - start_position, duration, filename, restrict_to_nl, + start_position, duration, filename, tag, group] csv_writer.writerow(row) diff --git a/backend/experiment/management/commands/createruleset.py b/backend/experiment/management/commands/createruleset.py new file mode 100644 index 000000000..d2455ea46 --- /dev/null +++ b/backend/experiment/management/commands/createruleset.py @@ -0,0 +1,111 @@ +import os.path + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = 'Creates a new experiment rules class' + + def handle(self, *args, **options): + # Ask for the experiment name + ruleset_name = input("What is the name of your experiment ruleset? (ex. Musical Preferences): ") + + # Create the experiment rule class + success = self.create_experiment_rule_class(ruleset_name) + + if not success: + return + + # Add the new experiment to ./experiment/rules/__init__.py + self.register_experiment_rule(ruleset_name, './experiment/rules/__init__.py') + + # Create a basic test file for the experiment + self.create_test_file(ruleset_name) + + def create_experiment_rule_class(self, ruleset_name): + # Get the experiment name in different cases + ruleset_name_snake_case, ruleset_name_snake_case_upper, ruleset_name_pascal_case = self.get_ruleset_name_cases(ruleset_name) + + # Create a new file for the experiment rules class + filename = f"./experiment/rules/{ruleset_name_snake_case}.py" + + # Check if the file already exists + if os.path.isfile(filename): + self.stdout.write(self.style.ERROR(f"Experiment ruleset \"{ruleset_name}\" already exists. Exiting without creating file(s).")) + return + + # Create the file by copying ./experiment/management/commands/templates/experiment.py + with open(filename, 'w') as f: + with open('./experiment/management/commands/templates/experiment.py', 'r') as template: + f.write(template.read() + .replace('NewExperimentRuleset', ruleset_name_pascal_case) + .replace('new_experiment_ruleset', ruleset_name_snake_case) + .replace('NEW_EXPERIMENT_RULESET', ruleset_name_snake_case_upper) + .replace('New Experiment Ruleset', ruleset_name.title()) + ) + + self.stdout.write(self.style.SUCCESS(f"Created {filename} for experiment ruleset \"{ruleset_name}\"")) + + return True + + def register_experiment_rule(self, ruleset_name, file_path): + + # Get the experiment name in different cases + ruleset_name_snake_case, ruleset_name_snake_case_upper, ruleset_name_pascal_case = self.get_ruleset_name_cases(ruleset_name) + + # New lines to add + new_import = f"from .{ruleset_name_snake_case} import {ruleset_name_pascal_case}\n" + new_dict_entry = f" {ruleset_name_pascal_case}.ID: {ruleset_name_pascal_case},\n" + + with open(file_path, 'r') as file: + lines = file.readlines() + + # Find the line to insert the new import, maintaining alphabetical order + import_index = next(i for i, line in enumerate(lines) if line.startswith('from .') and line > new_import) + lines.insert(import_index, new_import) + + # Find the line to insert the new dictionary entry, maintaining alphabetical order within the EXPERIMENT_RULES + dict_start_index = lines.index("EXPERIMENT_RULES = {\n") + 1 # Start after the opening brace + dict_end_index = lines.index("}\n", dict_start_index) # Find the closing brace + dict_entry_index = next((i for i, line in enumerate(lines[dict_start_index:dict_end_index], dict_start_index) if line > new_dict_entry), dict_end_index) + lines.insert(dict_entry_index, new_dict_entry) + + # Write the modified lines back to the file + with open(file_path, 'w') as file: + file.writelines(lines) + + self.stdout.write(self.style.SUCCESS(f"Registered ruleset \"{ruleset_name}\" in {file_path}")) + + def create_test_file(self, ruleset_name): + # Get the experiment name in different cases + ruleset_name_snake_case, ruleset_name_snake_case_upper, ruleset_name_pascal_case = self.get_ruleset_name_cases(ruleset_name) + + # Create a new file for the experiment class + filename = f"./experiment/rules/tests/test_{ruleset_name_snake_case}.py" + + # Check if the file already exists + if os.path.isfile(filename): + self.stdout.write(self.style.ERROR(f"File {filename} already exists. Exiting without creating file.")) + return + + # Create the file by copying ./experiment/management/commands/templates/experiment.py + with open(filename, 'w') as f: + with open('./experiment/management/commands/templates/test_experiment.py', 'r') as template: + f.write(template.read() + .replace('NewExperimentRuleset', ruleset_name_pascal_case) + .replace('new_experiment_ruleset', ruleset_name_snake_case) + .replace('NEW_EXPERIMENT_RULESET', ruleset_name_snake_case_upper) + .replace('New Experiment Ruleset', ruleset_name.title()) + ) + + self.stdout.write(self.style.SUCCESS(f"Created {filename} for experiment {ruleset_name}")) + + def get_ruleset_name_cases(self, ruleset_name): + # Convert experiment name to snake_case and lowercase every word and replace spaces with underscores + ruleset_name_snake_case = ruleset_name.lower().replace(' ', '_') + ruleset_name_snake_case_upper = ruleset_name_snake_case.upper() + + # Convert experiment name to PascalCase and capitalize every word and remove spaces + ruleset_name_pascal_case = ruleset_name.title().replace(' ', '') + + return ruleset_name_snake_case, ruleset_name_snake_case_upper, ruleset_name_pascal_case diff --git a/backend/experiment/management/commands/templates/experiment.py b/backend/experiment/management/commands/templates/experiment.py new file mode 100644 index 000000000..a39931dea --- /dev/null +++ b/backend/experiment/management/commands/templates/experiment.py @@ -0,0 +1,107 @@ +from typing import Final +from django.utils.translation import gettext_lazy as _ +from django.template.loader import render_to_string + +from experiment.actions import Consent, BooleanQuestion, Explainer, Final, Form, Playlist, Step, Trial +from experiment.actions.playback import Autoplay +from experiment.questions.demographics import EXTRA_DEMOGRAPHICS +from experiment.questions.utils import question_by_key +from experiment.rules.base import Base +from result.utils import prepare_result + + +class NewExperimentRuleset(Base): + ''' An experiment type that could be used to test musical preferences ''' + ID = 'NEW_EXPERIMENT_RULESET' + contact_email = 'info@example.com' + + def __init__(self): + + # Add your questions here + self.questions = [ + question_by_key('dgf_gender_identity'), + question_by_key('dgf_generation'), + question_by_key('dgf_musical_experience', EXTRA_DEMOGRAPHICS), + question_by_key('dgf_country_of_origin'), + question_by_key('dgf_education', drop_choices=[ + 'isced-2', 'isced-5']) + ] + + def first_round(self, experiment): + ''' Provide the first rounds of the experiment, + before session creation + The first_round must return at least one Info or Explainer action + Consent and Playlist are often desired, but optional + ''' + # 1. Informed consent (optional) + consent = Consent(experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop')) + + # 2. Choose playlist (optional, only relevant if there are multiple playlists the participant can choose from) + playlist = Playlist(experiment.playlists.all()) + + # 3. Explainer + explainer = Explainer( + instruction='Welcome to this new experiment', + steps=[ + Step(description=_('Please read the instructions carefully')), + Step(description=_('Next step of explanation')), + Step(description=_('Another step of explanation')), + ], + step_numbers=True + ) + + return [ + consent, + playlist, + explainer + ] + + def next_round(self, session): + # ask any questions defined in the admin interface + actions = self.get_questionnaire(session) + if actions: + return actions + + elif session.rounds_complete(): + # we have as many results as rounds in this experiment + # finish session and show Final view + session.finish() + session.save() + return [ + Final( + session, + final_text=_('Thank you for participating!'), + feedback_info=self.feedback_info() # show feedback bar, this line can be removed + ) + ] + else: + return self.get_trial(session) + + def get_trial(self, session): + # define a key, by which responses to this trial can be found in the database + key = 'test_trial' + # get a random section + section = session.section_from_any_song() + question = BooleanQuestion( + question=_( + "Do you like this song?"), + key=key, + result_id=prepare_result(key, session, section=section), + submits=True + ) + form = Form([question]) + playback = Autoplay([section]) + view = Trial( + playback=playback, + feedback_form=form, + title=_('Test experiment'), + config={ + 'response_time': section.duration, + 'listen_first': True + } + ) + return view + \ No newline at end of file diff --git a/backend/experiment/management/commands/templates/test_experiment.py b/backend/experiment/management/commands/templates/test_experiment.py new file mode 100644 index 000000000..7a61e794b --- /dev/null +++ b/backend/experiment/management/commands/templates/test_experiment.py @@ -0,0 +1,23 @@ +from django.test import TestCase + +from experiment.models import Experiment +from participant.models import Participant +from section.models import Playlist +from session.models import Session + + +class NewExperimentRulesetTest(TestCase): + + @classmethod + def setUpTestData(self): + self.participant = Participant.objects.create() + self.playlist = Playlist.objects.create(name='NewExperimentRuleset') + self.experiment = Experiment.objects.create(name='NewExperimentRuleset', rounds=5) + self.session = Session.objects.create( + experiment=self.experiment, + participant=self.participant, + playlist=self.playlist + ) + + def test_initializes_correctly(self): + assert self.experiment.name == 'NewExperimentRuleset' \ No newline at end of file diff --git a/backend/experiment/management/tests.py b/backend/experiment/management/tests.py index 04bc77ec8..4abdd16f3 100644 --- a/backend/experiment/management/tests.py +++ b/backend/experiment/management/tests.py @@ -14,14 +14,13 @@ def test_output_csv(self): filename = join(settings.MEDIA_ROOT,'tests','compileplaylist','audiofiles.csv') try: with open(filename) as csv_file: - rows = csv.DictReader(csv_file, fieldnames = ('artist','name','start_time','duration','filename','restrict_to_nl','tag','group')) + rows = csv.DictReader(csv_file, fieldnames = ('artist','name','start_time','duration','filename','tag','group')) for row in rows: if row['filename'] == 'tests/compileplaylist/silence_20sec.wav': self.assertEqual(row['artist'], 'default') self.assertEqual(row['name'], 'silence_20sec') self.assertEqual(row['start_time'], '0.0') self.assertEqual(row['duration'], '20.025850340136053') - self.assertEqual(row['restrict_to_nl'], '0') self.assertEqual(row['tag'], '0') self.assertEqual(row['group'], '0') finally: diff --git a/backend/experiment/migrations/0013_change_playlist_reference.py b/backend/experiment/migrations/0013_change_playlist_reference.py index ac794dc09..4dbf58062 100644 --- a/backend/experiment/migrations/0013_change_playlist_reference.py +++ b/backend/experiment/migrations/0013_change_playlist_reference.py @@ -1,5 +1,6 @@ from django.db import migrations, models + def apply_sections(apps, from_app, to_app): ''' create sections and playlists delete old ones when done ''' @@ -22,6 +23,7 @@ def apply_sections(apps, from_app, to_app): ) new_section.save() + def get_or_create_playlist(playlist, apps, to_app): Playlist = apps.get_model(to_app, 'Playlist') try: @@ -37,12 +39,15 @@ def get_or_create_playlist(playlist, apps, to_app): new_playlist.save() return new_playlist + def change_playlist_reference(apps, schema_editor): apply_changes(apps, 'experiment', 'section') + def backwards_change_playlist_reference(apps, schema_editor): apply_changes(apps, 'section', 'experiment') + def apply_changes(apps, from_app, to_app): Experiment = apps.get_model('experiment', 'Experiment') # first create sections and playlists @@ -57,12 +62,14 @@ def apply_changes(apps, from_app, to_app): exp.playlists.add(new_playlist) exp.save() + def get_playlist(playlist, apps, app_name='section'): Playlist = apps.get_model(app_name, 'Playlist') return Playlist.objects.get( name=playlist.name ) + class Migration(migrations.Migration): dependencies = [ diff --git a/backend/experiment/migrations/0018_set_default_question_data.py b/backend/experiment/migrations/0018_set_default_question_data.py index 5c1c33fb2..aa293e6ee 100644 --- a/backend/experiment/migrations/0018_set_default_question_data.py +++ b/backend/experiment/migrations/0018_set_default_question_data.py @@ -1,6 +1,7 @@ from django.db import migrations from experiment.rules import EXPERIMENT_RULES + def set_default_question_data(apps, schema_editor): Experiment = apps.get_model("experiment", "Experiment") diff --git a/backend/experiment/migrations/0019_create_consent_file_field.py b/backend/experiment/migrations/0019_create_consent_file_field.py new file mode 100644 index 000000000..95e582765 --- /dev/null +++ b/backend/experiment/migrations/0019_create_consent_file_field.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.24 on 2024-02-20 09:32 + +import django.core.validators +from django.db import migrations, models +import experiment.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('experiment', '0018_set_default_question_data'), + ] + + operations = [ + migrations.AlterModelOptions( + name='experimentseries', + options={'verbose_name_plural': 'Experiment Series'}, + ), + migrations.AddField( + model_name='experiment', + name='consent', + field=models.FileField(blank=True, default='', upload_to=experiment.models.consent_upload_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['md', 'html'])]), + ), + ] diff --git a/backend/experiment/models.py b/backend/experiment/models.py index 05874e15d..eba73ad68 100644 --- a/backend/experiment/models.py +++ b/backend/experiment/models.py @@ -2,16 +2,18 @@ from django.db import models from django.utils import timezone +from django.contrib.postgres.fields import ArrayField +from typing import List, Dict, Tuple, Any from experiment.rules import EXPERIMENT_RULES from experiment.standards.iso_languages import ISO_LANGUAGES - -from django.contrib.postgres.fields import ArrayField from .questions import QUESTIONS_CHOICES, get_default_question_keys -from django import forms + +from .validators import consent_file_validator language_choices = [(key, ISO_LANGUAGES[key]) for key in ISO_LANGUAGES.keys()] language_choices[0] = ('', 'Unset') + class ExperimentSeries(models.Model): """ A model to allow nesting multiple experiments into a 'parent' experiment """ name = models.CharField(max_length=64, default='') @@ -28,6 +30,12 @@ class Meta: verbose_name_plural = "Experiment Series" +def consent_upload_path(instance, filename): + """Generate path to save audio based on playlist.name""" + folder_name = instance.slug + return 'consent/{0}/{1}'.format(folder_name, filename) + + class Experiment(models.Model): """Root entity for configuring experiments""" @@ -49,6 +57,10 @@ class Experiment(models.Model): blank=True, default=get_default_question_keys ) + consent = models.FileField(upload_to=consent_upload_path, + blank=True, + default='', + validators=[consent_file_validator()]) class Meta: ordering = ['name'] @@ -88,12 +100,12 @@ def export_admin(self): ] }, } - + def export_sessions(self): # export session objects - return self.session_set.all() + return self.session_set.all() - def export_table(self, session_keys, result_keys, export_options): + def export_table(self, session_keys: List[str], result_keys: List[str], export_options: Dict[str, Any]) -> Tuple[List[Dict[str, Any]], List[str]]: """Export filtered tabular data for admin session_keys : session fieldnames to be included result_keys : result fieldnames to be included @@ -142,7 +154,7 @@ def export_table(self, session_keys, result_keys, export_options): this_row = copy.deepcopy(row) for result in session.result_set.all(): # Add all results to one row - if not 'wide_format' in export_options: + if 'wide_format' not in export_options: this_row = copy.deepcopy(row) # Get data for al potential result fields full_result_data = { @@ -151,8 +163,10 @@ def export_table(self, session_keys, result_keys, export_options): 'result_score': result.score, 'result_comment': result.comment, 'expected_response': result.expected_response, - 'given_response': result.given_response + 'given_response': result.given_response, + 'question_key': result.question_key, } + result_data = {} # Add counter for single row / wide format if 'wide_format' in export_options: @@ -183,7 +197,7 @@ def export_table(self, session_keys, result_keys, export_options): fieldnames.update(result_data.keys()) result_counter += 1 # Append row for long format - if not 'wide_format' in export_options: + if 'wide_format' not in export_options: rows.append(this_row) # Append row for wide format if 'wide_format' in export_options: @@ -204,6 +218,7 @@ def max_score(self): return 0 + class Feedback(models.Model): text = models.TextField() experiment = models.ForeignKey(Experiment, on_delete=models.CASCADE) diff --git a/backend/experiment/questions/__init__.py b/backend/experiment/questions/__init__.py index 2f5df33ae..3bef215ed 100644 --- a/backend/experiment/questions/__init__.py +++ b/backend/experiment/questions/__init__.py @@ -31,6 +31,7 @@ KEYS_ALL.extend([question.key for question in question_group[1]]) QUESTIONS_CHOICES.append( (question_group[0], [(q.key,"("+q.key+") "+q.question) for q in question_group[1]]) ) + def get_default_question_keys(): return [] @@ -39,5 +40,6 @@ def get_questions_from_keys(keys): """ Returns questions in the order of keys""" return [QUESTIONS_ALL[KEYS_ALL.index(key)] for key in keys] + if len(KEYS_ALL) != len(set(KEYS_ALL)): raise Exception("Duplicate question keys") diff --git a/backend/experiment/questions/musicgens.py b/backend/experiment/questions/musicgens.py index 120e1ca59..5c69ef528 100644 --- a/backend/experiment/questions/musicgens.py +++ b/backend/experiment/questions/musicgens.py @@ -2,6 +2,7 @@ from experiment.actions.form import LikertQuestion, RadiosQuestion + def musicgens_question(key, question): """Define a standard MusicGens question""" return LikertQuestion( @@ -18,6 +19,7 @@ def musicgens_question(key, question): explainer = _("Please tell us how much you agree") ) + def musicgens_radio_question(key, question): """Define a MusicGens question with three radio buttons """ return RadiosQuestion( @@ -30,6 +32,7 @@ def musicgens_radio_question(key, question): } ) + MUSICGENS_17_W_VARIANTS = [ musicgens_question( "P01_1", diff --git a/backend/experiment/questions/other.py b/backend/experiment/questions/other.py index 1d9217b41..5522f2a82 100644 --- a/backend/experiment/questions/other.py +++ b/backend/experiment/questions/other.py @@ -17,7 +17,7 @@ OTHER = [ - ChoiceQuestion( + ChoiceQuestion( key='dgf_region_of_origin', view='DROPDOWN', question=_( diff --git a/backend/experiment/questions/stomp.py b/backend/experiment/questions/stomp.py index f8d5f4621..d7463c7ac 100644 --- a/backend/experiment/questions/stomp.py +++ b/backend/experiment/questions/stomp.py @@ -1,5 +1,6 @@ from experiment.actions.form import LikertQuestion + def stomp_question(key, genre): """Define a standard STOMP question for a genre""" return LikertQuestion( @@ -17,6 +18,7 @@ def stomp_question(key, genre): explainer = "Indicate your musical preferences" ) + STOMP20 = [ stomp_question('stomp_alternative', 'alternative'), stomp_question('stomp_blues', 'blues'), diff --git a/backend/experiment/questions/tests.py b/backend/experiment/questions/tests.py index cbd8f2e67..20e05b687 100644 --- a/backend/experiment/questions/tests.py +++ b/backend/experiment/questions/tests.py @@ -7,6 +7,7 @@ from .demographics import DEMOGRAPHICS from .utils import unanswered_questions, total_unanswered_questions + class UtilsTestCase(TestCase): @classmethod diff --git a/backend/experiment/questions/tipi.py b/backend/experiment/questions/tipi.py index 4c2f041bb..a531e3976 100644 --- a/backend/experiment/questions/tipi.py +++ b/backend/experiment/questions/tipi.py @@ -1,5 +1,6 @@ from experiment.actions.form import LikertQuestion + def tipi_question(key, trait): """Define a standard STOMP question for a genre""" return LikertQuestion( @@ -7,6 +8,7 @@ def tipi_question(key, trait): question = "I see myself as %s." % trait, ) + TIPI = [ tipi_question('tipi_op', 'open to new experiences and complex'), tipi_question('tipi_on', 'conventional and uncreative'), diff --git a/backend/experiment/questions/utils.py b/backend/experiment/questions/utils.py index 1dd73fb2c..edf851ce6 100644 --- a/backend/experiment/questions/utils.py +++ b/backend/experiment/questions/utils.py @@ -5,23 +5,26 @@ from .demographics import DEMOGRAPHICS + def copy_shuffle(questions): qcopy = deepcopy(questions) random.shuffle(qcopy) return qcopy + def total_unanswered_questions(participant, questions=DEMOGRAPHICS): """ Return how many questions have not been answered yet by the participant""" profile_questions = participant.profile().values_list('question_key', flat=True) return len([question for question in questions if question.key not in profile_questions]) + def question_by_key(key, questions=DEMOGRAPHICS, is_skippable=None, drop_choices=[]): """Return question by given key""" for question in questions: if question.key == key: q = deepcopy(question) # Question is_skippable - if is_skippable != None: + if is_skippable is not None: q.is_skippable = is_skippable if hasattr(question, 'choices') and len(drop_choices): for choice in drop_choices: @@ -29,6 +32,7 @@ def question_by_key(key, questions=DEMOGRAPHICS, is_skippable=None, drop_choices return q return None + def unanswered_questions(participant, questions, randomize=False, cutoff_index=None): """Generator to give next unasked profile question and prepare its result - participant: participant who will be checked for unanswered questions @@ -39,7 +43,7 @@ def unanswered_questions(participant, questions, randomize=False, cutoff_index=N random.shuffle(questions) for question in questions[:cutoff_index]: profile_result = prepare_profile_result(question.key, participant) - if profile_result.given_response == None: - q = deepcopy(question) + if profile_result.given_response is None: + q = deepcopy(question) q.result_id = profile_result.pk yield q diff --git a/backend/experiment/rules/__init__.py b/backend/experiment/rules/__init__.py index d938c4a5e..4f5e2d372 100644 --- a/backend/experiment/rules/__init__.py +++ b/backend/experiment/rules/__init__.py @@ -1,19 +1,19 @@ +from .anisochrony import Anisochrony from .beat_alignment import BeatAlignment +from .categorization import Categorization from .duration_discrimination import DurationDiscrimination from .duration_discrimination_tone import DurationDiscriminationTone -from .anisochrony import Anisochrony -from .categorization import Categorization from .eurovision_2020 import Eurovision2020 from .gold_msi import GoldMSI from .h_bat import HBat from .h_bat_bfit import HBatBFIT from .hbat_bst import BST from .hooked import Hooked -from .tele_tunes import HookedTeleTunes from .huang_2022 import Huang2022 from .kuiper_2020 import Kuiper2020 from .listening_conditions import ListeningConditions -from .matching_pairs import MatchingPairs +from .matching_pairs import MatchingPairsGame +from .matching_pairs_lite import MatchingPairsLite from .matching_pairs_icmpc import MatchingPairsICMPC from .musical_preferences import MusicalPreferences from .rhythm_discrimination import RhythmDiscrimination @@ -21,49 +21,53 @@ from .rhythm_experiment_series_mri import RhythmExperimentSeriesMRI from .rhythm_experiment_series_unpaid import RhythmExperimentSeriesUnpaid from .speech2song import Speech2Song +from .tele_tunes import HookedTeleTunes from .thats_my_song import ThatsMySong -from .toontjehoger_home import ToontjeHogerHome from .toontjehoger_1_mozart import ToontjeHoger1Mozart from .toontjehoger_2_preverbal import ToontjeHoger2Preverbal from .toontjehoger_3_plink import ToontjeHoger3Plink from .toontjehoger_4_absolute import ToontjeHoger4Absolute from .toontjehoger_5_tempo import ToontjeHoger5Tempo from .toontjehoger_6_relative import ToontjeHoger6Relative +from .toontjehoger_home import ToontjeHogerHome +from .visual_matching_pairs import VisualMatchingPairsGame # Rules available to this application # If you create new Rules, add them to the list # so they can be referred to by the admin EXPERIMENT_RULES = { + Anisochrony.ID: Anisochrony, BeatAlignment.ID: BeatAlignment, - Speech2Song.ID: Speech2Song, + BST.ID: BST, + Categorization.ID: Categorization, DurationDiscrimination.ID: DurationDiscrimination, DurationDiscriminationTone.ID: DurationDiscriminationTone, - Anisochrony.ID: Anisochrony, + Eurovision2020.ID: Eurovision2020, + GoldMSI.ID: GoldMSI, HBat.ID: HBat, HBatBFIT.ID: HBatBFIT, - BST.ID: BST, Hooked.ID: Hooked, HookedTeleTunes.ID: HookedTeleTunes, - MatchingPairs.ID: MatchingPairs, + Huang2022.ID: Huang2022, + Kuiper2020.ID: Kuiper2020, + ListeningConditions.ID: ListeningConditions, + MatchingPairsGame.ID: MatchingPairsGame, + MatchingPairsLite.ID: MatchingPairsLite, MatchingPairsICMPC.ID: MatchingPairsICMPC, MusicalPreferences.ID: MusicalPreferences, RhythmDiscrimination.ID: RhythmDiscrimination, RhythmExperimentSeries.ID: RhythmExperimentSeries, RhythmExperimentSeriesMRI.ID: RhythmExperimentSeriesMRI, RhythmExperimentSeriesUnpaid.ID: RhythmExperimentSeriesUnpaid, - GoldMSI.ID: GoldMSI, - ListeningConditions.ID: ListeningConditions, - Huang2022.ID: Huang2022, - Categorization.ID: Categorization, - ToontjeHogerHome.ID: ToontjeHogerHome, + Speech2Song.ID: Speech2Song, + ThatsMySong.ID: ThatsMySong, ToontjeHoger1Mozart.ID: ToontjeHoger1Mozart, ToontjeHoger2Preverbal.ID: ToontjeHoger2Preverbal, ToontjeHoger3Plink.ID: ToontjeHoger3Plink, ToontjeHoger4Absolute.ID: ToontjeHoger4Absolute, ToontjeHoger5Tempo.ID: ToontjeHoger5Tempo, ToontjeHoger6Relative.ID: ToontjeHoger6Relative, - Eurovision2020.ID: Eurovision2020, - Kuiper2020.ID: Kuiper2020, - ThatsMySong.ID: ThatsMySong + ToontjeHogerHome.ID: ToontjeHogerHome, + VisualMatchingPairsGame.ID: VisualMatchingPairsGame } diff --git a/backend/experiment/rules/anisochrony.py b/backend/experiment/rules/anisochrony.py index 281faeb46..a4d0bdd88 100644 --- a/backend/experiment/rules/anisochrony.py +++ b/backend/experiment/rules/anisochrony.py @@ -4,12 +4,13 @@ from section.models import Section from experiment.actions import Trial, Explainer, Step from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.utils import render_feedback_trivia from .duration_discrimination import DurationDiscrimination logger = logging.getLogger(__name__) + class Anisochrony(DurationDiscrimination): ID = 'ANISOCHRONY' start_diff = 180000 @@ -64,7 +65,7 @@ def next_trial_action(self, session, trial_condition, difficulty): submits=True ) - playback = Playback([section]) + playback = Autoplay([section]) form = Form([question]) config = { 'listen_first': True, diff --git a/backend/experiment/rules/base.py b/backend/experiment/rules/base.py index f02f1d15d..2413c4b63 100644 --- a/backend/experiment/rules/base.py +++ b/backend/experiment/rules/base.py @@ -14,6 +14,7 @@ logger = logging.getLogger(__name__) + class Base(object): """Base class for other rules classes""" @@ -25,10 +26,20 @@ def __init__(self): def feedback_info(self): feedback_body = render_to_string('feedback/user_feedback.html', {'email': self.contact_email}) return { + # Header above the feedback form 'header': _("Do you have any remarks or questions?"), + + # Button text 'button': _("Submit"), + + # Body of the feedback form, can be HTML. Shown under the button 'contact_body': feedback_body, - 'thank_you': _("We appreciate your feedback!") + + # Thank you message after submitting feedback + 'thank_you': _("We appreciate your feedback!"), + + # Show a floating button on the right side of the screen to open the feedback form + 'show_float_button': False, } def calculate_score(self, result, data): @@ -39,6 +50,12 @@ def calculate_score(self, result, data): if scoring_rule: return scoring_rule(result, data) return None + + def calculate_intermediate_score(self, session, result): + """ process result data during a trial (i.e., between next_round calls) + return score + """ + return 0 def final_score_message(self, session): """Create final score message for given session, base on score per result""" @@ -112,7 +129,7 @@ def get_single_question(self, session, randomize=False): feedback_form=Form([question], is_skippable=question.is_skippable)) except StopIteration: return None - + def get_questionnaire(self, session, randomize=False, cutoff_index=None): ''' Get a list of questions to be asked in succession ''' @@ -127,7 +144,7 @@ def get_questionnaire(self, session, randomize=False, cutoff_index=None): feedback_form=Form([question], is_skippable=question.is_skippable) )) return trials - + def social_media_info(self, experiment, score): current_url = "{}/{}".format(settings.RELOAD_PARTICIPANT_TARGET, experiment.slug diff --git a/backend/experiment/rules/beat_alignment.py b/backend/experiment/rules/beat_alignment.py index 367ea9270..23d091208 100644 --- a/backend/experiment/rules/beat_alignment.py +++ b/backend/experiment/rules/beat_alignment.py @@ -4,9 +4,9 @@ from django.utils.translation import gettext_lazy as _ from .base import Base -from experiment.actions import Trial, Explainer, Consent, StartSession, Step +from experiment.actions import Trial, Explainer, Consent, Step from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.utils import final_action_with_optional_button, render_feedback_trivia from result.utils import prepare_result @@ -38,15 +38,12 @@ def first_round(self, experiment): step_numbers=True ) - # 2. Consent with default text - consent = Consent() - - # 3. Start session - start_session = StartSession() + # 2. Consent with admin text or default text + consent = Consent(experiment.consent) + return [ explainer, consent, - start_session ] def next_round(self, session, request_session=None): @@ -108,7 +105,7 @@ def next_practice_action(self, playlist, count): else: presentation_text = _( "In this example the beeps are NOT ALIGNED TO THE BEAT of the music.") - playback = Playback([section], + playback = Autoplay([section], instruction=presentation_text, preload_message=presentation_text, ) @@ -145,7 +142,7 @@ def next_trial_action(self, session, this_round): submits=True ) form = Form([question]) - playback = Playback([section]) + playback = Autoplay([section]) view = Trial( playback=playback, feedback_form=form, diff --git a/backend/experiment/rules/categorization.py b/backend/experiment/rules/categorization.py index 66ef5a5ed..f9e4b9b21 100644 --- a/backend/experiment/rules/categorization.py +++ b/backend/experiment/rules/categorization.py @@ -3,9 +3,8 @@ from django.db.models import Avg from experiment.actions.form import Form, ChoiceQuestion -from experiment.actions import Consent, Explainer, Score, StartSession, Trial, Final +from experiment.actions import Consent, Explainer, Score, Trial, Final from experiment.actions.wrappers import two_alternative_forced -from experiment.questions.utils import unanswered_questions from experiment.questions.demographics import EXTRA_DEMOGRAPHICS from experiment.questions.utils import question_by_key @@ -35,14 +34,15 @@ def first_round(self, experiment): steps=[], button_label='Ok' ) - # read consent from file - rendered = render_to_string( - 'consent/consent_categorization.html') + # Add consent from file or admin (admin has priority) consent = Consent( - rendered, title='Informed consent', confirm='I agree', deny='Stop') - - start_session = StartSession() - return [explainer, consent, start_session] + experiment.consent, + title='Informed consent', + confirm='I agree', + deny='Stop', + url='consent/consent_categorization.html' + ) + return [explainer, consent] def next_round(self, session): actions = self.get_questionnaire(session) diff --git a/backend/experiment/rules/duration_discrimination.py b/backend/experiment/rules/duration_discrimination.py index d68e2d39d..a69483215 100644 --- a/backend/experiment/rules/duration_discrimination.py +++ b/backend/experiment/rules/duration_discrimination.py @@ -1,4 +1,3 @@ -import math import logging from decimal import Decimal, ROUND_HALF_UP @@ -6,9 +5,9 @@ from .base import Base from section.models import Section -from experiment.actions import Trial, Consent, Explainer, StartSession, Step +from experiment.actions import Trial, Consent, Explainer, Step from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.utils import final_action_with_optional_button, render_feedback_trivia from experiment.actions.utils import get_average_difference from experiment.rules.util.practice import get_trial_condition_block, get_practice_views, practice_explainer @@ -35,18 +34,15 @@ def first_round(self, experiment): """Create data for the first experiment rounds""" explainer = self.intro_explanation() - # 2. Consent with default text - consent = Consent() + # 2. Consent with admin text or default text + consent = Consent(experiment.consent) explainer2 = practice_explainer() - start_session = StartSession() - return [ explainer, consent, explainer2, - start_session ] def next_round(self, session, request_session=None): @@ -64,7 +60,7 @@ def next_round(self, session, request_session=None): return actions else: - ##### Actual trials #### + # Actual trials action = self.staircasing_blocks( session, self.next_trial_action, request_session) return action @@ -141,7 +137,7 @@ def next_trial_action(self, session, trial_condition, difficulty): ) # create Result object and save expected result to database - playback = Playback([section]) + playback = Autoplay([section]) form = Form([question]) view = Trial( playback=playback, @@ -154,7 +150,7 @@ def next_trial_action(self, session, trial_condition, difficulty): } ) return view - + def get_question_text(self): return _("Is the second interval EQUALLY LONG as the first interval or LONGER?") @@ -300,7 +296,6 @@ def get_difficulty(self, session, multiplier=1.0): # return rounded difficulty # this uses the decimal module, since round() does not work entirely as expected return int(Decimal(str(current_difficulty)).quantize(Decimal('0'), rounding=ROUND_HALF_UP)) - def last_non_catch_correct(self, previous_results): """ check if previous responses (before the current one, which is correct) diff --git a/backend/experiment/rules/duration_discrimination_tone.py b/backend/experiment/rules/duration_discrimination_tone.py index 85a0b3c41..4fec51d7d 100644 --- a/backend/experiment/rules/duration_discrimination_tone.py +++ b/backend/experiment/rules/duration_discrimination_tone.py @@ -4,6 +4,7 @@ from experiment.actions.utils import render_feedback_trivia from .duration_discrimination import DurationDiscrimination + class DurationDiscriminationTone(DurationDiscrimination): ID = 'DURATION_DISCRIMINATION_TONE' condition = _('tone') diff --git a/backend/experiment/rules/eurovision_2020.py b/backend/experiment/rules/eurovision_2020.py index 398a28769..d632fa752 100644 --- a/backend/experiment/rules/eurovision_2020.py +++ b/backend/experiment/rules/eurovision_2020.py @@ -2,7 +2,7 @@ import random from django.utils.translation import gettext_lazy as _ from experiment.actions import Trial -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.form import BooleanQuestion, Form from experiment.actions.styles import STYLE_BOOLEAN_NEGATIVE_FIRST from experiment.actions.wrappers import song_sync @@ -139,12 +139,13 @@ def next_heard_before_action(self, session): print("Warning: no heard_before section found") section = session.playlist.get_section() - playback = Playback( - sections=[section], - play_config={'ready_time': 3, 'show_animation': True, - 'play_method': self.play_method}, - preload_message=_('Get ready!')) - expected_result = novelty[round_number] + playback = Autoplay( + sections = [section], + show_animation=True, + ready_time=3, + preload_message=_('Get ready!') + ) + expected_result=novelty[round_number] # create Result object and save expected result to database result_pk = prepare_result('heard_before', session, section=section, expected_response=expected_result, scoring_rule='REACTION_TIME') diff --git a/backend/experiment/rules/gold_msi.py b/backend/experiment/rules/gold_msi.py index bc5dc9166..9e8fa3947 100644 --- a/backend/experiment/rules/gold_msi.py +++ b/backend/experiment/rules/gold_msi.py @@ -1,10 +1,9 @@ from django.utils.translation import gettext_lazy as _ -from experiment.actions import Trial, Consent, StartSession -from experiment.actions.form import Form +from experiment.actions import Consent, FrontendStyle, EFrontendStyle from experiment.questions.goldsmiths import MSI_F3_MUSICAL_TRAINING from experiment.questions.demographics import EXTRA_DEMOGRAPHICS -from experiment.questions.utils import question_by_key, unanswered_questions +from experiment.questions.utils import question_by_key from experiment.actions.utils import final_action_with_optional_button from .base import Base @@ -27,11 +26,10 @@ def __init__(self): self.questions = MSI_F3_MUSICAL_TRAINING + demographics def first_round(self, experiment): - consent = Consent() - start_session = StartSession() + # Consent with admin text or default text + consent = Consent(experiment.consent) return [ consent, - start_session ] def next_round(self, session, request_session=None): @@ -40,3 +38,7 @@ def next_round(self, session, request_session=None): return questions else: return final_action_with_optional_button(session, '', request_session) + + def feedback_info(self): + info = super().feedback_info() + return info diff --git a/backend/experiment/rules/h_bat.py b/backend/experiment/rules/h_bat.py index 34b99750d..f350f1327 100644 --- a/backend/experiment/rules/h_bat.py +++ b/backend/experiment/rules/h_bat.py @@ -5,9 +5,9 @@ from .base import Base from section.models import Section -from experiment.actions import Trial, Consent, Explainer, Playlist, Step, StartSession +from experiment.actions import Trial, Consent, Explainer, Playlist, Step from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.rules.util.practice import get_practice_views, practice_explainer, get_trial_condition, get_trial_condition_block from experiment.actions.utils import final_action_with_optional_button, render_feedback_trivia @@ -62,16 +62,15 @@ def next_round(self, session, request_session=None): def first_round(self, experiment): explainer = self.intro_explainer() - consent = Consent() + # Consent with admin text or default text + consent = Consent(experiment.consent) explainer2 = practice_explainer() playlist = Playlist(experiment.playlists.all()) - start_session = StartSession() return [ explainer, consent, explainer2, playlist, - start_session ] def next_trial_action(self, session, trial_condition, level=1, *kwargs): @@ -105,7 +104,7 @@ def next_trial_action(self, session, trial_condition, level=1, *kwargs): view='BUTTON_ARRAY', submits=True ) - playback = Playback([section]) + playback = Autoplay([section]) form = Form([question]) view = Trial( playback=playback, @@ -179,13 +178,16 @@ def get_trivia(self): return _("When people listen to music, they often perceive an underlying regular pulse, like the woodblock \ in this task. This allows us to clap along with the music at a concert and dance together in synchrony.") + def get_previous_condition(previous_result): """ check if previous section was slower / in 2 (1) or faster / in 3 (0) """ return int(previous_result.section.tag) + def get_previous_level(previous_result): return int(previous_result.section.group) + def staircasing(session, trial_action_callback): trial_condition = get_trial_condition(2) previous_results = session.result_set.order_by('-created_at') diff --git a/backend/experiment/rules/h_bat_bfit.py b/backend/experiment/rules/h_bat_bfit.py index 9da884ba8..1fc4698c8 100644 --- a/backend/experiment/rules/h_bat_bfit.py +++ b/backend/experiment/rules/h_bat_bfit.py @@ -2,6 +2,7 @@ from .h_bat import HBat + class HBatBFIT(HBat): """ a class for the BFIT test, which has a different trivia section """ ID = 'H_BAT_BFIT' diff --git a/backend/experiment/rules/hbat_bst.py b/backend/experiment/rules/hbat_bst.py index 78f398fd9..2e29241dd 100644 --- a/backend/experiment/rules/hbat_bst.py +++ b/backend/experiment/rules/hbat_bst.py @@ -3,13 +3,14 @@ from section.models import Section from experiment.actions import Trial, Explainer, Step from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.utils import final_action_with_optional_button, render_feedback_trivia from experiment.actions.utils import get_average_difference_level_based from result.utils import prepare_result from .h_bat import HBat + class BST(HBat): """ Rules for the BST experiment, which follow closely the HBAT rules. """ @@ -61,7 +62,7 @@ def next_trial_action(self, session, trial_condition, level=1): expected_response=expected_response, scoring_rule='CORRECTNESS'), submits=True ) - playback = Playback([section]) + playback = Autoplay([section]) form = Form([question]) view = Trial( playback=playback, diff --git a/backend/experiment/rules/hooked.py b/backend/experiment/rules/hooked.py index 951891622..0e6274ff4 100644 --- a/backend/experiment/rules/hooked.py +++ b/backend/experiment/rules/hooked.py @@ -6,9 +6,9 @@ from django.template.loader import render_to_string from .base import Base -from experiment.actions import Consent, Explainer, Final, Playlist, Score, StartSession, Step, Trial +from experiment.actions import Consent, Explainer, Final, Playlist, Score, Step, Trial from experiment.actions.form import BooleanQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.questions.demographics import DEMOGRAPHICS from experiment.questions.goldsmiths import MSI_OTHER from experiment.questions.utils import question_by_key @@ -28,7 +28,7 @@ class Hooked(Base): """Superclass for Hooked experiment rules""" ID = 'HOOKED' - consent_file = 'consent_hooked.html' + consent_file = 'consent/consent_hooked.html' recognition_time = 15 # response time for "Do you know this song?" sync_time = 15 # response time for "Did the track come back in the right place?" # if the track continues in the wrong place: minimal shift forward (in seconds) @@ -70,26 +70,22 @@ def first_round(self, experiment): step_numbers=True, button_label=_("Let's go!")) - # 2. Get informed consent. - if self.consent_file: - rendered = render_to_string('consent/{}'.format(self.consent_file)) - consent = Consent(text=rendered, title=_( - 'Informed consent'), confirm=_('I agree'), deny=_('Stop')) - else: - # fall back to lorem ipsum if no consent_file is defined - consent = Consent() - + # 2. Add consent from file or admin (admin has priority) + consent = Consent( + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url=self.consent_file + ) + # 3. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 4. Start session. - start_session = StartSession() - return [ explainer, consent, playlist, - start_session ] def next_round(self, session): @@ -283,7 +279,7 @@ def next_song_sync_action(self, session, explainers=[]): if not section: logger.warning("Warning: no next_song_sync section found") section = session.section_from_any_song() - return song_sync(session, section, title=self.get_trial_title(session, round_number), play_method=self.play_method, + return song_sync(session, section, title=self.get_trial_title(session, round_number), recognition_time=self.recognition_time, sync_time=self.sync_time, min_jitter=self.min_jitter, max_jitter=self.max_jitter) @@ -307,11 +303,12 @@ def next_heard_before_action(self, session): if not section: logger.warning("Warning: no heard_before section found") section = session.section_from_any_song() - playback = Playback( + playback = Autoplay( [section], - play_config={'ready_time': 3, 'show_animation': True, - 'play_method': self.play_method}, - preload_message=_('Get ready!')) + show_animation=True, + ready_time=3, + preload_message=_('Get ready!') + ) expected_response = this_section_info.get('novelty') # create Result object and save expected result to database key = 'heard_before' diff --git a/backend/experiment/rules/huang_2022.py b/backend/experiment/rules/huang_2022.py index 3c2aee36b..cadfb72cc 100644 --- a/backend/experiment/rules/huang_2022.py +++ b/backend/experiment/rules/huang_2022.py @@ -4,9 +4,9 @@ from django.template.loader import render_to_string from django.conf import settings -from experiment.actions import HTML, Final, Score, Explainer, Step, Consent, StartSession, Redirect, Playlist, Trial -from experiment.actions.form import BooleanQuestion, ChoiceQuestion, Form, Question -from experiment.actions.playback import Playback +from experiment.actions import HTML, Final, Explainer, Step, Consent, Redirect, Playlist, Trial +from experiment.actions.form import BooleanQuestion, Form +from experiment.actions.playback import Autoplay from experiment.questions.demographics import EXTRA_DEMOGRAPHICS from experiment.questions.goldsmiths import MSI_ALL, MSI_OTHER from experiment.questions.other import OTHER @@ -42,20 +42,20 @@ def __init__(self): ] def first_round(self, experiment): - """Create data for the first experiment rounds.""" - # read consent form from file - rendered = render_to_string( - 'consent/consent_huang2021.html') - consent = Consent(rendered, title=_( - 'Informed consent'), confirm=_('I agree'), deny=_('Stop')) + """Create data for the first experiment rounds.""" + # Add consent from file or admin (admin has priority) + consent = Consent( + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url='consent/consent_huang2021.html' + ) playlist = Playlist(experiment.playlists.all()) - # start session - start_session = StartSession() return [ consent, playlist, - start_session ] def feedback_info(self): @@ -82,7 +82,7 @@ def next_round(self, session): if not plan: last_result = session.result_set.last() if not last_result: - playback = get_test_playback(self.play_method) + playback = get_test_playback() html = HTML(body='

{}

'.format(_('Do you hear the music?'))) form = Form(form=[BooleanQuestion( key='audio_check1', @@ -98,7 +98,7 @@ def next_round(self, session): if last_result.score == 0: # user indicated they couldn't hear the music if last_result.question_key == 'audio_check1': - playback = get_test_playback(self.play_method) + playback = get_test_playback() html = HTML(body=render_to_string('html/huang_2022/audio_check.html')) form = Form(form=[BooleanQuestion( key='audio_check2', @@ -232,13 +232,13 @@ def final_score_message(self, session): ] return " ".join([str(m) for m in messages]) -def get_test_playback(play_method): + +def get_test_playback(): from section.models import Section test_section = Section.objects.get(song__name='audiocheck') - playback = Playback(sections=[test_section], - play_config={ - 'play_method': play_method, - 'show_animation': True - }) + playback = Autoplay( + sections=[test_section], + show_animation=True + ) return playback \ No newline at end of file diff --git a/backend/experiment/rules/kuiper_2020.py b/backend/experiment/rules/kuiper_2020.py index 1011e77aa..e661299d7 100644 --- a/backend/experiment/rules/kuiper_2020.py +++ b/backend/experiment/rules/kuiper_2020.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from experiment.actions import Trial -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.form import BooleanQuestion, Form from experiment.actions.styles import STYLE_BOOLEAN_NEGATIVE_FIRST from experiment.actions.wrappers import song_sync @@ -129,11 +129,13 @@ def next_heard_before_action(self, session): print("Warning: no heard_before section found") section = session.section_from_any_song() - playback = Playback( + playback = Autoplay( [section], - play_config={'ready_time': 3, 'show_animation': True}, - preload_message=_('Get ready!')) - expected_result = novelty[round_number] + show_animation=True, + ready_time=3, + preload_message=_('Get ready!') + ) + expected_result=novelty[round_number] # create Result object and save expected result to database result_pk = prepare_result('heard_before', session, section=section, expected_response=expected_result, scoring_rule='REACTION_TIME') diff --git a/backend/experiment/rules/listening_conditions.py b/backend/experiment/rules/listening_conditions.py index 067fe0b43..32d1c1a25 100644 --- a/backend/experiment/rules/listening_conditions.py +++ b/backend/experiment/rules/listening_conditions.py @@ -2,9 +2,9 @@ from django.utils.translation import gettext_lazy as _ from .base import Base -from experiment.actions import Consent, Explainer, Step, Playback, Playlist, StartSession, Trial +from experiment.actions import Consent, Explainer, Step, Playlist, Trial from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.utils import final_action_with_optional_button from result.utils import prepare_result @@ -87,7 +87,7 @@ def next_round(self, session, request_session=None): instruction = _("You can now set the sound to a comfortable level. \ You can then adjust the volume to as high a level as possible without it being uncomfortable. \ When you are satisfied with the sound level, click Continue") - playback = Playback([section], instruction=instruction) + playback = Autoplay([section], instruction=instruction) message = _( "Please keep the eventual sound level the same over the course of the experiment.") actions = [ @@ -102,7 +102,8 @@ def next_round(self, session, request_session=None): return [view] def first_round(self, experiment): - consent = Consent() + # Consent with admin text or default text + consent = Consent(experiment.consent) explainer = Explainer( instruction=_( 'General listening instructions:'), @@ -116,10 +117,8 @@ def first_round(self, experiment): button_label=_('OK') ) playlist = Playlist(experiment.playlists.all()) - start_session = StartSession() return [ consent, explainer, playlist, - start_session ] diff --git a/backend/experiment/rules/matching_pairs.py b/backend/experiment/rules/matching_pairs.py index 5933d8382..fd908157d 100644 --- a/backend/experiment/rules/matching_pairs.py +++ b/backend/experiment/rules/matching_pairs.py @@ -1,20 +1,24 @@ import random +import json from django.utils.translation import gettext_lazy as _ from django.template.loader import render_to_string from .base import Base -from experiment.actions import Consent, Explainer, Final, Playlist, StartSession, Step, Trial -from experiment.actions.playback import Playback +from experiment.actions import Consent, Explainer, Final, Playlist, Step, Trial +from experiment.actions.playback import MatchingPairs from experiment.questions.demographics import EXTRA_DEMOGRAPHICS from experiment.questions.utils import question_by_key from result.utils import prepare_result from section.models import Section -class MatchingPairs(Base): + +class MatchingPairsGame(Base): ID = 'MATCHING_PAIRS' num_pairs = 8 + show_animation = True + score_feedback_display = 'large-top' contact_email = 'aml.tunetwins@gmail.com' def __init__(self): @@ -27,15 +31,17 @@ def __init__(self): ] def first_round(self, experiment): - rendered = render_to_string('consent/consent_matching_pairs.html') - consent = Consent(rendered, title=_( - 'Informed consent'), confirm=_('I agree'), deny=_('Stop')) + # Add consent from file or admin (admin has priority) + consent = Consent( + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url='consent/consent_matching_pairs.html' + ) # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - explainer = Explainer( instruction='', steps=[ @@ -50,12 +56,11 @@ def first_round(self, experiment): return [ consent, playlist, - explainer, - start_session + explainer ] def next_round(self, session): - if session.rounds_passed() < 1: + if session.rounds_passed() < 1: trials = self.get_questionnaire(session) if trials: intro_questions = Explainer( @@ -67,9 +72,7 @@ def next_round(self, session): trial = self.get_matching_pairs_trial(session) return [trial] else: - session.final_score += session.result_set.filter( - question_key='matching_pairs').last().score - session.save() + # final score saves the result from the cleared board into account social_info = self.social_media_info(session.experiment, session.final_score) social_info['apps'].append('clipboard') score = Final( @@ -107,23 +110,50 @@ def get_matching_pairs_trial(self, session): degradations = session.playlist.section_set.filter(group__in=selected_pairs, tag=degradation_type) player_sections = list(originals) + list(degradations) random.shuffle(player_sections) - playback = Playback( + + playback = MatchingPairs( sections=player_sections, - player_type='MATCHINGPAIRS', - play_config={'stop_audio_after': 5} + stop_audio_after=5, + show_animation=self.show_animation, + score_feedback_display=self.score_feedback_display, ) trial = Trial( title='Tune twins', playback=playback, feedback_form=None, - result_id=prepare_result('matching_pairs', session), config={'show_continue_button': False} ) return trial def calculate_score(self, result, data): - moves = data.get('result').get('moves') - for m in moves: - m['filename'] = str(Section.objects.get(pk=m.get('selectedSection')).filename) - score = data.get('result').get('score') + ''' not used in this experiment ''' + pass + + def calculate_intermediate_score(self, session, result): + ''' will be called every time two cards have been turned ''' + result_data = json.loads(result) + first_card = result_data['lastCard'] + first_section = Section.objects.get(pk=first_card['id']) + first_card['filename'] = str(first_section.filename) + second_card = result_data['currentCard'] + second_section = Section.objects.get(pk=second_card['id']) + second_card['filename'] = str(second_section.filename) + if first_section.group == second_section.group: + if 'seen' in second_card: + score = 20 + given_response = 'match' + else: + score = 10 + given_response = 'lucky match' + else: + if 'seen' in second_card: + score = -10 + given_response = 'misremembered' + else: + score = 0 + given_response = 'no match' + prepare_result('move', session, json_data=result_data, + score=score, given_response=given_response) return score + + diff --git a/backend/experiment/rules/matching_pairs_icmpc.py b/backend/experiment/rules/matching_pairs_icmpc.py index e9214b28f..389b88484 100644 --- a/backend/experiment/rules/matching_pairs_icmpc.py +++ b/backend/experiment/rules/matching_pairs_icmpc.py @@ -3,6 +3,7 @@ from .matching_pairs import MatchingPairs from experiment.actions.form import TextQuestion + class MatchingPairsICMPC(MatchingPairs): ID = 'MATCHING_PAIRS_ICMPC' diff --git a/backend/experiment/rules/matching_pairs_lite.py b/backend/experiment/rules/matching_pairs_lite.py new file mode 100644 index 000000000..3800c35f5 --- /dev/null +++ b/backend/experiment/rules/matching_pairs_lite.py @@ -0,0 +1,38 @@ +from django.utils.translation import gettext_lazy as _ + +from .matching_pairs import MatchingPairsGame +from experiment.actions import Final, Playlist, Info + + +class MatchingPairsLite(MatchingPairsGame): + ID = 'MATCHING_PAIRS_LITE' + num_pairs = 8 + show_animation = False + score_feedback_display = 'small-bottom-right' + contact_email = 'aml.tunetwins@gmail.com' + + def first_round(self, experiment): + # 2. Choose playlist. + playlist = Playlist(experiment.playlists.all()) + info = Info('', + heading='Press start to enter the game', + button_label='Start') + return [ + playlist, info + ] + + def next_round(self, session): + if session.rounds_passed() < 1: + trial = self.get_matching_pairs_trial(session) + return [trial] + else: + # final score saves the result from the cleared board into account + score = Final( + session, + title='Score', + final_text='End of the game', + button={ + 'text': 'Back to dashboard', + }, + ) + return score diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index c8fe18092..71656611e 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -8,9 +8,9 @@ from experiment.questions.goldsmiths import MSI_F1_ACTIVE_ENGAGEMENT from experiment.questions.other import OTHER -from experiment.actions import Consent, Explainer, Final, HTML, Playlist, Redirect, Step, StartSession, Trial +from experiment.actions import Consent, Explainer, Final, HTML, Playlist, Redirect, Step, Trial from experiment.actions.form import BooleanQuestion, ChoiceQuestion, Form, LikertQuestionIcon -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.actions.styles import STYLE_BOOLEAN, STYLE_BOOLEAN_NEGATIVE_FIRST from result.utils import prepare_result @@ -24,7 +24,7 @@ class MusicalPreferences(Base): ID = 'MUSICAL_PREFERENCES' - consent_file = 'consent_musical_preferences.html' + consent_file = 'consent/consent_musical_preferences.html' preference_offset = 20 knowledge_offset = 42 round_increment = 1 @@ -46,11 +46,14 @@ def __init__(self): question_by_key('dgf_region_of_residence', OTHER) ] - def first_round(self, experiment): - rendered = render_to_string('consent/{}'.format(self.consent_file) - ) + def first_round(self, experiment): + consent = Consent( - text=rendered, title=_('Informed consent'), confirm=_('I consent and continue.'), deny=_('I do not consent.') + experiment.consent, + title=_('Informed consent'), + confirm=_('I consent and continue.'), + deny=_('I do not consent.'), + url=self.consent_file ) playlist = Playlist(experiment.playlists.all()) explainer = Explainer( @@ -60,12 +63,10 @@ def first_round(self, experiment): ], button_label=_('OK') ) - start_session = StartSession() return [ consent, playlist, explainer, - start_session ] def next_round(self, session, request_session=None): @@ -111,9 +112,8 @@ def next_round(self, session, request_session=None): else: session.decrement_round() if last_result.question_key == 'audio_check1': - playback = get_test_playback('EXTERNAL') - html = HTML(body=render_to_string( - 'html/huang_2022/audio_check.html')) + playback = get_test_playback() + html = HTML(body=render_to_string('html/huang_2022/audio_check.html')) form = Form(form=[BooleanQuestion( key='audio_check2', choices={'no': _('Quit'), 'yes': _('Next')}, @@ -132,7 +132,7 @@ def next_round(self, session, request_session=None): return Redirect(settings.HOMEPAGE) else: session.decrement_round() - playback = get_test_playback('EXTERNAL') + playback = get_test_playback() html = HTML( body='

{}

'.format(_('Do you hear the music?'))) form = Form(form=[BooleanQuestion( @@ -198,7 +198,7 @@ def next_round(self, session, request_session=None): top_all )] - section = session.playlist.get_section() + section = session.section_from_unused_song() like_key = 'like_song' likert = LikertQuestionIcon( question=_('2. How much do you like this song?'), @@ -219,7 +219,7 @@ def next_round(self, session, request_session=None): result_id=prepare_result(know_key, session, section=section), style=STYLE_BOOLEAN ) - playback = Playback([section], play_config={'show_animation': True}) + playback = Autoplay([section], show_animation=True) form = Form([know, likert]) view = Trial( playback=playback, diff --git a/backend/experiment/rules/rhythm_discrimination.py b/backend/experiment/rules/rhythm_discrimination.py index b05d5fa51..3c8db21de 100644 --- a/backend/experiment/rules/rhythm_discrimination.py +++ b/backend/experiment/rules/rhythm_discrimination.py @@ -5,8 +5,8 @@ from experiment.actions.utils import final_action_with_optional_button, render_feedback_trivia from experiment.rules.util.practice import practice_explainer, practice_again_explainer, start_experiment_explainer -from experiment.actions import Trial, Consent, Explainer, StartSession, Step -from experiment.actions.playback import Playback +from experiment.actions import Trial, Consent, Explainer, Step +from experiment.actions.playback import Autoplay from experiment.actions.form import ChoiceQuestion, Form from result.utils import prepare_result @@ -84,18 +84,15 @@ def first_round(self, experiment): """Create data for the first experiment rounds""" explainer = intro_explainer() - # 2. Consent with default text - consent = Consent() + # 2. Consent with admin text or default text + consent = Consent(experiment.consent) explainer2 = practice_explainer() - start_session = StartSession() - return [ explainer, consent, explainer2, - start_session ] def next_round(self, session, request_session=None): @@ -106,7 +103,7 @@ def next_round(self, session, request_session=None): return next_trial_actions( session, next_round_number, request_session) - + def next_trial_actions(session, round_number, request_session): """ @@ -173,7 +170,7 @@ def next_trial_actions(session, round_number, request_session): submits=True ) form = Form([question]) - playback = Playback([section]) + playback = Autoplay([section]) if round_number < 5: title = _('practice') else: diff --git a/backend/experiment/rules/rhythm_experiment_series.py b/backend/experiment/rules/rhythm_experiment_series.py index 553290672..4b2f5fa2f 100644 --- a/backend/experiment/rules/rhythm_experiment_series.py +++ b/backend/experiment/rules/rhythm_experiment_series.py @@ -6,7 +6,7 @@ from django.template.loader import render_to_string from .base import Base -from experiment.actions import Consent, Explainer, Final, StartSession, Step +from experiment.actions import Consent, Explainer, Final, Step class RhythmExperimentSeries(Base): @@ -35,21 +35,23 @@ def intro_explainer(self): ], button_label=_("Continue") ) - def first_round(self, experiment): """Create data for the first experiment rounds.""" - # read consent form from file - rendered = render_to_string(self.consent_form) - consent = Consent(rendered, title=_( - 'Informed consent'), confirm=_('I agree'), deny=_('Stop')) - start_session = StartSession() + + # read consent form from file or admin (admin has priority) + consent = Consent( + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url=self.consent_form + ) + return [ consent, self.intro_explainer(), - start_session ] - def next_round(self, session): data = session.load_json_data() diff --git a/backend/experiment/rules/rhythm_experiment_series_mri.py b/backend/experiment/rules/rhythm_experiment_series_mri.py index 2efac5a8c..b4ea633fa 100644 --- a/backend/experiment/rules/rhythm_experiment_series_mri.py +++ b/backend/experiment/rules/rhythm_experiment_series_mri.py @@ -3,6 +3,7 @@ from . import RhythmExperimentSeries from experiment.actions import Explainer, Step + class RhythmExperimentSeriesMRI(RhythmExperimentSeries): ID = 'RHYTHM_SERIES_MRI' consent_form = 'consent/consent_MRI.html' diff --git a/backend/experiment/rules/rhythm_experiment_series_unpaid.py b/backend/experiment/rules/rhythm_experiment_series_unpaid.py index ccf02bdc1..a0b005e46 100644 --- a/backend/experiment/rules/rhythm_experiment_series_unpaid.py +++ b/backend/experiment/rules/rhythm_experiment_series_unpaid.py @@ -4,6 +4,7 @@ from . import RhythmExperimentSeries + class RhythmExperimentSeriesUnpaid(RhythmExperimentSeries): ID = 'RHYTHM_SERIES_UNPAID' consent_form = 'consent/consent_rhythm_unpaid.html' diff --git a/backend/experiment/rules/speech2song.py b/backend/experiment/rules/speech2song.py index 663194349..05e170315 100644 --- a/backend/experiment/rules/speech2song.py +++ b/backend/experiment/rules/speech2song.py @@ -5,9 +5,9 @@ from .base import Base -from experiment.actions import Consent, Explainer, Step, Final, Playlist, Trial, StartSession +from experiment.actions import Consent, Explainer, Step, Final, Playlist, Trial from experiment.actions.form import Form, RadiosQuestion -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from experiment.questions.demographics import EXTRA_DEMOGRAPHICS from experiment.questions.languages import LANGUAGE, LanguageQuestion from experiment.questions.utils import question_by_key @@ -47,22 +47,21 @@ def first_round(self, experiment): ], button_label=_('Start') ) - # read consent form from file - rendered = render_to_string( - 'consent/consent_speech2song.html') - + # Add consent from file or admin (admin has priority) consent = Consent( - rendered, title=_('Informed consent'), confirm=_('I agree'), deny=_('Stop')) + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url='consent/consent_speech2song.html' + ) playlist = Playlist(experiment.playlists.all()) - start_session = StartSession() - return [ explainer, consent, playlist, - start_session ] def next_round(self, session): @@ -166,6 +165,7 @@ def next_round(self, session): session, is_speech)) return actions + def next_single_representation(session, is_speech, group_id): """ combine a question after the first representation, and several repeated representations of the sound, @@ -175,6 +175,7 @@ def next_single_representation(session, is_speech, group_id): actions = [sound(section), speech_or_sound_question(session, section, is_speech)] return actions + def next_repeated_representation(session, is_speech, group_id=-1): if group_id >= 0: # for the Test case, there is no previous section to look at @@ -224,20 +225,16 @@ def question_sound(session, section): result_id=prepare_result(key, session, section=section, scoring_rule='LIKERT'), ) + def sound(section, n_representation=None): if n_representation and n_representation > 1: ready_time = 0 else: ready_time = 1 - config = { - 'ready_time': ready_time, - 'show_animation': False - } title = _('Listen carefully') - playback = Playback( + playback = Autoplay( sections = [section], - player_type='AUTOPLAY', - play_config=config + ready_time = ready_time, ) view = Trial( playback=playback, diff --git a/backend/experiment/rules/tele_tunes.py b/backend/experiment/rules/tele_tunes.py index 978648ad5..34801058b 100644 --- a/backend/experiment/rules/tele_tunes.py +++ b/backend/experiment/rules/tele_tunes.py @@ -13,7 +13,7 @@ class HookedTeleTunes(Hooked): sync_time = 6 min_jitter = 5 max_jitter = 10 - consent_file = 'consent_teletunes.html' + consent_file = 'consent/consent_teletunes.html' def __init__(self): self.questions = [ diff --git a/backend/experiment/rules/tests/test_duration_discrimination.py b/backend/experiment/rules/tests/test_duration_discrimination.py index 2b38efa7c..66aa42694 100644 --- a/backend/experiment/rules/tests/test_duration_discrimination.py +++ b/backend/experiment/rules/tests/test_duration_discrimination.py @@ -6,6 +6,7 @@ from section.models import Playlist, Section from session.models import Session + class DDITest(TestCase): fixtures = ['playlist', 'experiment'] @@ -37,6 +38,7 @@ def test_trial_action(self): section = regular_trial.playback.sections[0] assert section['id'] == diff_section.id + class AnisochronyTest(TestCase): fixtures = ['playlist', 'experiment'] diff --git a/backend/experiment/rules/tests/test_hbat.py b/backend/experiment/rules/tests/test_hbat.py index 046f005e7..5656276f1 100644 --- a/backend/experiment/rules/tests/test_hbat.py +++ b/backend/experiment/rules/tests/test_hbat.py @@ -7,6 +7,7 @@ from section.models import Playlist from session.models import Session + class HBatTest(TestCase): fixtures = ['playlist', 'experiment'] @@ -38,6 +39,7 @@ def test_trial_action(self): assert result assert result.expected_response == 'FASTER' + class HBat_BST_Test(TestCase): fixtures = ['playlist', 'experiment'] diff --git a/backend/experiment/rules/tests/test_hooked.py b/backend/experiment/rules/tests/test_hooked.py index dcd763c87..273dc4538 100644 --- a/backend/experiment/rules/tests/test_hooked.py +++ b/backend/experiment/rules/tests/test_hooked.py @@ -1,13 +1,13 @@ from django.test import TestCase from experiment.models import Experiment -from experiment.rules import Eurovision2020, Huang2022, ThatsMySong from experiment.questions.musicgens import MUSICGENS_17_W_VARIANTS from participant.models import Participant from result.models import Result from section.models import Playlist from session.models import Session + class HookedTest(TestCase): fixtures = ['playlist', 'experiment'] @@ -15,7 +15,7 @@ class HookedTest(TestCase): def setUpTestData(cls): ''' set up data for Hooked base class ''' cls.participant = Participant.objects.create() - + def test_hooked(self): experiment = Experiment.objects.create(name='Hooked', rules='HOOKED', rounds=3) playlist = Playlist.objects.get(name='Eurovision 2021') @@ -28,13 +28,13 @@ def test_hooked(self): rules = session.experiment_rules() rules.plan_sections(session) plan = session.load_json_data().get('plan') - assert plan != None + assert plan is not None actions = rules.next_song_sync_action(session) assert len(actions) == 3 actions = rules.next_song_sync_action(session) assert len(actions) == 3 action = rules.next_heard_before_action(session) - assert action != None + assert action is not None def test_eurovision(self): experiment = Experiment.objects.get(name='Hooked-Eurovision') @@ -49,7 +49,7 @@ def test_eurovision(self): for i in range(0, experiment.rounds): actions = rules.next_round(session) assert actions - + def test_thats_my_song(self): musicgen_keys = [q.key for q in MUSICGENS_17_W_VARIANTS] experiment = Experiment.objects.get(name='ThatsMySong') @@ -61,8 +61,8 @@ def test_thats_my_song(self): playlist=playlist ) rules = session.experiment_rules() - assert rules.feedback_info() == None - + assert rules.feedback_info() is None + for i in range(0, experiment.rounds): actions = rules.next_round(session) if i == experiment.rounds + 1: @@ -93,7 +93,7 @@ def test_thats_my_song(self): gender.save() elif i == 1: assert session.result_set.count() == 3 - assert session.load_json_data().get('plan') != None + assert session.load_json_data().get('plan') is not None assert len(actions) == 3 assert actions[0].feedback_form.form[0].key == 'recognize' assert actions[2].feedback_form.form[0].key == 'correct_place' @@ -115,7 +115,7 @@ def test_thats_my_song(self): assert len(actions) == 3 assert actions[1].feedback_form.form[0].key in musicgen_keys assert actions[2].feedback_form.form[0].key == 'heard_before' - + def test_hooked_china(self): experiment = Experiment.objects.get(name='Hooked-China') playlist = Playlist.objects.get(name='普通话') @@ -126,7 +126,7 @@ def test_hooked_china(self): playlist=playlist ) rules = session.experiment_rules() - assert rules.feedback_info() != None + assert rules.feedback_info() is not None question_trials = rules.get_questionnaire(session) # assert len(question_trials) == len(rules.questions) keys = [q.feedback_form.form[0].key for q in question_trials] diff --git a/backend/experiment/rules/tests/test_listening_conditions.py b/backend/experiment/rules/tests/test_listening_conditions.py index db21643e1..4f1caa5c8 100644 --- a/backend/experiment/rules/tests/test_listening_conditions.py +++ b/backend/experiment/rules/tests/test_listening_conditions.py @@ -4,7 +4,7 @@ from session.models import Session from experiment.models import Experiment from experiment.rules.listening_conditions import ListeningConditions -from experiment.actions import Consent, Explainer, Final, Playback, Playlist, StartSession, Trial, Form +from experiment.actions import Consent, Explainer, Final, Playback, Playlist, Trial, Form from experiment.actions.form import Form from experiment.actions.playback import Playback @@ -43,7 +43,6 @@ def test_first_round(self): self.assertIsInstance(actions[0], Consent) self.assertIsInstance(actions[1], Explainer) self.assertIsInstance(actions[2], Playlist) - self.assertIsInstance(actions[3], StartSession) def test_next_round_first_round(self): listening_conditions = ListeningConditions() diff --git a/backend/experiment/rules/tests/test_matching_pairs.py b/backend/experiment/rules/tests/test_matching_pairs.py index c4f26ce41..a7fc9abe5 100644 --- a/backend/experiment/rules/tests/test_matching_pairs.py +++ b/backend/experiment/rules/tests/test_matching_pairs.py @@ -1,31 +1,34 @@ +import json + from django.test import TestCase from experiment.models import Experiment -from experiment.rules import MatchingPairs from participant.models import Participant +from result.models import Result from section.models import Playlist from session.models import Session + class MatchingPairsTest(TestCase): @classmethod def setUpTestData(cls): section_csv = ( - "default,Crown_1_E1,0.0,10.0,MatchingPairs/Original/Crown_1_E1.mp3,0,Original,6\n" - "default,Crown_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Crown_1_E1.mp3,0,1stDegradation,6\n" - "default,Crown_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Crown_1_E1.mp3,0,2ndDegradation,6\n" - "default,ER_2_E1,0.0,10.0,MatchingPairs/Original/ER_2_E1.mp3,0,Original,21\n" - "default,ER_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_2_E1.mp3,0,1stDegradation,21\n" - "default,ER_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_2_E1.mp3,0,2ndDegradation,21\n" - "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_1_E1.mp3,0,Original,26\n" - "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_1_E1.mp3,0,1stDegradation,26\n" - "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_1_E1.mp3,0,2ndDegradation,26\n" - "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_12_E1.mp3,0,Original,44\n" - "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_12_E1.mp3,0,1stDegradation,44\n" - "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_12_E1.mp3,0,2ndDegradation,44\n" - "default,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_0_E1.mp3,0,1stDegradation,86\n" - "default,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_0_E1.mp3,0,2ndDegradation,86\n" - "default,TwinPeaks_1_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_1_E1.mp3,0,Original,86\n" + "default,Crown_1_E1,0.0,10.0,MatchingPairs/Original/Crown_1_E1.mp3,Original,6\n" + "default,Crown_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Crown_1_E1.mp3,1stDegradation,6\n" + "default,Crown_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Crown_1_E1.mp3,2ndDegradation,6\n" + "default,ER_2_E1,0.0,10.0,MatchingPairs/Original/ER_2_E1.mp3,Original,21\n" + "default,ER_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_2_E1.mp3,1stDegradation,21\n" + "default,ER_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_2_E1.mp3,2ndDegradation,21\n" + "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_1_E1.mp3,Original,26\n" + "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_1_E1.mp3,1stDegradation,26\n" + "default,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_1_E1.mp3,2ndDegradation,26\n" + "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_12_E1.mp3,Original,44\n" + "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_12_E1.mp3,1stDegradation,44\n" + "default,RickandMorty_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_12_E1.mp3,2ndDegradation,44\n" + "default,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_0_E1.mp3,1stDegradation,86\n" + "default,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_0_E1.mp3,2ndDegradation,86\n" + "default,TwinPeaks_1_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_1_E1.mp3,Original,86\n" ) cls.playlist = Playlist.objects.create(name='TestMatchingPairs') cls.playlist.csv = section_csv @@ -61,3 +64,40 @@ def test_matching_pairs_trial(self): assert len(pairs) == 1 assert len(degradations) == 0 self.session.increment_round() + + def intermediate_score_request(self, data): + request_data = {'json_data': json.dumps( + data), **self.csrf_token, **self.session_data} + self.client.post( + '/result/intermediate_score/', request_data) + result = Result.objects.filter( + question_key='move').last() + return result + + def test_intermediate_score(self): + participant_info = json.loads(self.client.get('/participant/').content) + self.csrf_token = { + 'csrfmiddlewaretoken': participant_info.get('csrf_token')} + self.session.participant = Participant.objects.get( + pk=int(participant_info.get('id'))) + self.session.save() + self.session_data = {'session_id': self.session.id} + sections = self.playlist.section_set.all() + data = {'lastCard': {'id': sections[0].id}, + 'currentCard': {'id': sections[1].id}} + result = self.intermediate_score_request(data) + assert result.score == 10 + assert result.given_response == 'lucky match' + data['currentCard'].update({'seen': True}) + result = self.intermediate_score_request(data) + assert result.score == 20 + assert result.given_response == 'match' + data['currentCard'] = {'id': sections[3].id, 'seen': True} + result = self.intermediate_score_request(data) + assert result.score == -10 + assert result.given_response == 'misremembered' + data['lastCard'].update({'seen': True}) + data['currentCard'].pop('seen') + result = self.intermediate_score_request(data) + assert result.score == 0 + assert result.given_response == 'no match' diff --git a/backend/experiment/rules/tests/test_musical_preferences.py b/backend/experiment/rules/tests/test_musical_preferences.py index d5dab048d..ee70f1ae5 100644 --- a/backend/experiment/rules/tests/test_musical_preferences.py +++ b/backend/experiment/rules/tests/test_musical_preferences.py @@ -9,6 +9,7 @@ from section.models import Playlist from session.models import Session + class MusicalPreferencesTest(TestCase): fixtures = ['playlist', 'experiment'] diff --git a/backend/experiment/rules/tests/test_rhythm_discrimination.py b/backend/experiment/rules/tests/test_rhythm_discrimination.py index a5a21602a..b4e042162 100644 --- a/backend/experiment/rules/tests/test_rhythm_discrimination.py +++ b/backend/experiment/rules/tests/test_rhythm_discrimination.py @@ -7,6 +7,7 @@ from section.models import Playlist from session.models import Session + class RhythmDiscriminationTest(TestCase): fixtures = ['playlist', 'experiment'] diff --git a/backend/experiment/rules/tests/test_rules_beat_alignment.py b/backend/experiment/rules/tests/test_rules_beat_alignment.py index 4dd6d68e8..127cdb50d 100644 --- a/backend/experiment/rules/tests/test_rules_beat_alignment.py +++ b/backend/experiment/rules/tests/test_rules_beat_alignment.py @@ -6,6 +6,7 @@ from session.models import Session import json + class BeatAlignmentRuleTest(TestCase): @classmethod @@ -33,7 +34,6 @@ def setUpTestData(cls): cls.experiment = Experiment.objects.create(rules='BEAT_ALIGNMENT', slug='ba', rounds=13) #rules is BeatAlignment.ID in beat_alignment.py cls.experiment.playlists.add(playlist) - def load_json(self, response): '''Asserts response status 200 OK, asserts content type json, loads and returns response.content json in a dictionary''' self.assertEqual(response.status_code, 200) @@ -45,7 +45,7 @@ def test_experiment(self): response_json = self.load_json(response) self.assertTrue( {'id','slug','name','class_name','rounds','playlists','next_round','loading_text'} <= response_json.keys() ) # 3 practice rounds (number hardcoded in BeatAlignment.first_round) - views_exp = ['EXPLAINER','CONSENT', 'START_SESSION'] + views_exp = ['EXPLAINER', 'CONSENT'] self.assertEquals(len(response_json['next_round']), len(views_exp)) for i in range(len(views_exp)): self.assertEquals(response_json['next_round'][i]['view'], views_exp[i]) diff --git a/backend/experiment/rules/tests/test_visual_matching_pairs.py b/backend/experiment/rules/tests/test_visual_matching_pairs.py new file mode 100644 index 000000000..b417a9241 --- /dev/null +++ b/backend/experiment/rules/tests/test_visual_matching_pairs.py @@ -0,0 +1,78 @@ +from django.test import TestCase + +from experiment.models import Experiment +from experiment.rules import VisualMatchingPairsGame +from participant.models import Participant +from section.models import Playlist +from session.models import Session + + +class VisualMatchingPairsTest(TestCase): + + @classmethod + def setUpTestData(self): + section_csv = ( + "owner,George,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTUyNjE0NzAzMl5BMl5BanBnXkFtZTYwMjQzMzU3._V1_FMjpg_UX1000_.jpg, vmp, 3\n" + "owner,George,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTUyNjE0NzAzMl5BMl5BanBnXkFtZTYwMjQzMzU3._V1_FMjpg_UX1000_.jpg, vmp, 3\n" + "owner,John,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTYwMDE4MzgzMF5BMl5BanBnXkFtZTYwMDQzMzU3._V1_FMjpg_UX1000_.jpg, vmp, 1\n" + "owner,John,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTYwMDE4MzgzMF5BMl5BanBnXkFtZTYwMDQzMzU3._V1_FMjpg_UX1000_.jpg, vmp, 1\n" + "owner,Paul,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTkyNTY0MzUxOV5BMl5BanBnXkFtZTYwNTQzMzU3._V1_.jpg, vmp, 2\n" + "owner,Paul,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTkyNTY0MzUxOV5BMl5BanBnXkFtZTYwNTQzMzU3._V1_.jpg, vmp, 2\n" + "owner,Ringo,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTU1NjY5NTY4N15BMl5BanBnXkFtZTYwNzQzMzU3._V1_.jpg, vmp, 4\n" + "owner,Ringo,0.0,1.0,https://m.media-amazon.com/images/M/MV5BMTU1NjY5NTY4N15BMl5BanBnXkFtZTYwNzQzMzU3._V1_.jpg, vmp, 4\n" + ) + self.playlist = Playlist.objects.create(name='TestVisualMatchingPairs') + self.playlist.csv = section_csv + self.playlist.update_sections() + + self.sections = list(self.playlist.section_set.filter(tag__contains='vmp')) + + self.participant = Participant.objects.create() + self.experiment = Experiment.objects.create(rules='VISUAL_MATCHING_PAIRS', slug='vmpairs', rounds=3) + + self.session = Session.objects.create( + experiment=self.experiment, + participant=self.participant, + playlist=self.playlist + ) + self.rules = VisualMatchingPairsGame() + + def test_visual_matching_pairs_trial(self): + trial = self.rules.get_visual_matching_pairs_trial(self.session) + self.assertIsNotNone(trial) + self.assertEqual(trial.title, 'Visual Tune twins') + self.assertIsNotNone(trial.playback) + self.assertEqual(trial.playback.ID, 'VISUALMATCHINGPAIRS') + + def test_calculate_score(self): + result = None + data = { + 'result': { + 'moves': [ + { "selectedSection": self.sections[1].id, "cardIndex": 1, "score": 0, "timestamp": 1 }, + { "selectedSection": self.sections[6].id, "cardIndex": 6, "score": 0, "timestamp": 2 }, + { "selectedSection": self.sections[7].id, "cardIndex": 5, "score": 0, "timestamp": 3 }, + { "selectedSection": self.sections[6].id, "cardIndex": 6, "score": 20, "timestamp": 4 }, + { "selectedSection": self.sections[2].id, "cardIndex": 2, "score": 0, "timestamp": 5 }, + { "selectedSection": self.sections[5].id, "cardIndex": 7, "score": 0, "timestamp": 6 }, + { "selectedSection": self.sections[3].id, "cardIndex": 3, "score": 0, "timestamp": 7 }, + { "selectedSection": self.sections[4].id, "cardIndex": 2, "score": 20, "timestamp": 8 }, + { "selectedSection": self.sections[5].id, "cardIndex": 7, "score": 0, "timestamp": 9 }, + { "selectedSection": self.sections[0].id, "cardIndex": 4, "score": 0, "timestamp": 10 }, + { "selectedSection": self.sections[0].id, "cardIndex": 4, "score": 0, "timestamp": 11 }, + { "selectedSection": self.sections[1].id, "cardIndex": 1, "score": 20, "timestamp": 12 }, + { "selectedSection": self.sections[5].id, "cardIndex": 7, "score": 0, "timestamp": 13 }, + { "selectedSection": self.sections[4].id, "cardIndex": 0, "score": 10, "timestamp": 14 } + ], + 'score': 10 + } + } + + score = self.rules.calculate_score(result, data) + self.assertEqual(score, 10) + + def test_next_round_logic(self): + self.session.increment_round() + next_round = self.rules.next_round(self.session) + self.assertEqual(len(next_round), 1) + self.assertEqual(next_round[0].title, 'Visual Tune twins') \ No newline at end of file diff --git a/backend/experiment/rules/thats_my_song.py b/backend/experiment/rules/thats_my_song.py index 812de9dff..63117dfcc 100644 --- a/backend/experiment/rules/thats_my_song.py +++ b/backend/experiment/rules/thats_my_song.py @@ -8,10 +8,11 @@ from .hooked import Hooked from result.utils import prepare_result + class ThatsMySong(Hooked): ID = 'THATS_MY_SONG' - consent_file = None + consent_file = '' relevant_keys = ['recognize', 'heard_before', 'playlist_decades'] round_modifier = 1 diff --git a/backend/experiment/rules/toontjehoger_1_mozart.py b/backend/experiment/rules/toontjehoger_1_mozart.py index 7105a734b..8a0fdf0ca 100644 --- a/backend/experiment/rules/toontjehoger_1_mozart.py +++ b/backend/experiment/rules/toontjehoger_1_mozart.py @@ -1,9 +1,9 @@ import logging from django.template.loader import render_to_string from os.path import join -from experiment.actions import Trial, Explainer, Step, Score, Final, StartSession, Playlist, Info, HTML +from experiment.actions import Trial, Explainer, Step, Score, Final, Playlist, Info, HTML from experiment.actions.form import ButtonArrayQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Autoplay from .base import Base from experiment.utils import non_breaking_spaces @@ -16,6 +16,7 @@ ANSWER_URL1 = "/images/experiments/toontjehoger/mozart-effect1-answer.webp" ANSWER_URL2 = "/images/experiments/toontjehoger/mozart-effect2-answer.webp" + def toontjehoger_ranks(session): score = session.final_score if score < 25: @@ -33,7 +34,7 @@ class ToontjeHoger1Mozart(Base): TITLE = "" SCORE_CORRECT = 50 SCORE_WRONG = 0 - + def first_round(self, experiment): """Create data for the first experiment rounds.""" @@ -52,13 +53,9 @@ def first_round(self, experiment): # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - return [ explainer, - playlist, - start_session + playlist ] def next_round(self, session, request_session=None): @@ -91,7 +88,6 @@ def next_round(self, session, request_session=None): # Final return self.get_final_round(session) - def get_answer_explainer(self, session, round): last_result = session.last_result() @@ -116,7 +112,7 @@ def get_answer_explainer(self, session, round): button_label="Volgende", ) return [info] - + def get_score(self, session): # Feedback message last_result = session.last_result() @@ -128,24 +124,20 @@ def get_score(self, session): config = {'show_total_score': True} score = Score(session, config=config, feedback=feedback) return [score] - + def get_image_trial(self, session, section_group, image_url, question, expected_response): # Config # ----------------- section = session.section_from_any_song( filter_by={'group': section_group}) - if section == None: + if section is None: raise Exception("Error: could not find section") # Step 1 # -------------------- # Listen - play_config = {'show_animation': True} - playback = Playback([section], - player_type=Playback.TYPE_AUTOPLAY, - play_config=play_config - ) + playback = Autoplay([section], show_animation=True) listen_config = { 'auto_advance': True, @@ -204,7 +196,7 @@ def get_explainer_round2(): ) return [explainer] - + def calculate_score(self, result, data): score = self.SCORE_CORRECT if result.expected_response == result.given_response else self.SCORE_WRONG return score diff --git a/backend/experiment/rules/toontjehoger_2_preverbal.py b/backend/experiment/rules/toontjehoger_2_preverbal.py index 4aa159443..916db931b 100644 --- a/backend/experiment/rules/toontjehoger_2_preverbal.py +++ b/backend/experiment/rules/toontjehoger_2_preverbal.py @@ -2,9 +2,9 @@ from django.template.loader import render_to_string from .toontjehoger_1_mozart import toontjehoger_ranks -from experiment.actions import Trial, Explainer, Step, Score, Final, StartSession, Playlist, Info, HTML +from experiment.actions import Trial, Explainer, Step, Score, Final, Playlist, Info, HTML from experiment.actions.form import ButtonArrayQuestion, ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import ImagePlayer from experiment.actions.styles import STYLE_NEUTRAL from .base import Base from os.path import join @@ -43,14 +43,10 @@ def first_round(self, experiment): # 3. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 4. Start session. - start_session = StartSession() - return [ explainer, spectrogram_info, playlist, - start_session ] def get_spectrogram_info(self): @@ -159,13 +155,12 @@ def get_round1_playback(self, session): "Error: could not find section C for round 1") # Player - play_config = { - 'label_style': 'ALPHABETIC', - 'spectrograms': ["/images/experiments/toontjehoger/spectrogram-trumpet.webp", "/images/experiments/toontjehoger/spectrogram-whale.webp", "/images/experiments/toontjehoger/spectrogram-human.webp"], - 'spectrogram_labels': ['Trompet', 'Walvis', 'Mens'], - } - playback = Playback( - [sectionA, sectionB, sectionC], player_type=Playback.TYPE_SPECTROGRAM, play_config=play_config) + playback = ImagePlayer( + [sectionA, sectionB, sectionC], + label_style='ALPHABETIC', + images=["/images/experiments/toontjehoger/spectrogram-trumpet.webp", "/images/experiments/toontjehoger/spectrogram-whale.webp", "/images/experiments/toontjehoger/spectrogram-human.webp"], + image_labels = ['Trompet', 'Walvis', 'Mens'] + ) trial = Trial( playback=playback, @@ -192,12 +187,11 @@ def get_round2(self, round, session): "Error: could not find section B for round 2") # Player - play_config = { - 'label_style': 'ALPHABETIC', - 'spectrograms': ["/images/experiments/toontjehoger/spectrogram-baby-french.webp", "/images/experiments/toontjehoger/spectrogram-baby-german.webp"] - } - playback = Playback( - [sectionA, sectionB], player_type=Playback.TYPE_SPECTROGRAM, play_config=play_config) + playback = ImagePlayer( + [sectionA, sectionB], + label_style='ALPHABETIC', + images=["/images/experiments/toontjehoger/spectrogram-baby-french.webp", "/images/experiments/toontjehoger/spectrogram-baby-german.webp"], + ) # Question key = 'baby' diff --git a/backend/experiment/rules/toontjehoger_3_plink.py b/backend/experiment/rules/toontjehoger_3_plink.py index e07a89d03..aac3c3c7a 100644 --- a/backend/experiment/rules/toontjehoger_3_plink.py +++ b/backend/experiment/rules/toontjehoger_3_plink.py @@ -3,7 +3,8 @@ from django.template.loader import render_to_string from .toontjehoger_1_mozart import toontjehoger_ranks -from experiment.actions import Explainer, Step, Score, Final, StartSession, Playback, Playlist, Info, Trial +from experiment.actions import Explainer, Step, Score, Final, Playlist, Info, Trial +from experiment.actions.playback import PlayButton from experiment.actions.form import AutoCompleteQuestion, RadiosQuestion, Form from .base import Base @@ -22,7 +23,7 @@ class ToontjeHoger3Plink(Base): SCORE_EXTRA_1_CORRECT = 4 SCORE_EXTRA_2_CORRECT = 4 SCORE_EXTRA_WRONG = 0 - + def first_round(self, experiment): """Create data for the first experiment rounds.""" @@ -43,15 +44,11 @@ def first_round(self, experiment): # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - return [ explainer, playlist, - start_session ] - + def next_round(self, session, request_session=None): """Get action data for the next round""" @@ -78,15 +75,15 @@ def get_last_results(self, session): if not last_results: logger.error("No last result") return "" - + if last_results[2].given_response != '': # delete other results, because these questions weren't asked last_results[0].delete() last_results[1].delete() return [last_results[2]] - + return last_results[:2] - + def get_score_view(self, session): last_results = self.get_last_results(session) section = last_results[0].section @@ -95,9 +92,11 @@ def get_score_view(self, session): if len(last_results) == 1: # plink result if last_results[0].expected_response == last_results[0].given_response: - feedback = "Goedzo! Je hoorde inderdaad {} van {}.".format(non_breaking_spaces(section.song.name), non_breaking_spaces(section.song.artist)) + feedback = "Goedzo! Je hoorde inderdaad {} van {}.".format( + non_breaking_spaces(section.song.name), non_breaking_spaces(section.song.artist)) else: - feedback = "Helaas! Je hoorde {} van {}.".format(non_breaking_spaces(section.song.name), non_breaking_spaces(section.song.artist)) + feedback = "Helaas! Je hoorde {} van {}.".format(non_breaking_spaces( + section.song.name), non_breaking_spaces(section.song.artist)) else: if score == 2 * self.SCORE_EXTRA_WRONG: feedback_prefix = "Helaas!" @@ -122,14 +121,13 @@ def get_score_view(self, session): # The \n results in a linebreak feedback = "{} {} \n {}".format( feedback_prefix, question_part, section_part) - + config = {'show_total_score': True} round_number = session.get_relevant_results(['plink']).count() - 1 - score_title = "Ronde %(number)d / %(total)d" %\ + score_title = "Ronde %(number)d / %(total)d" %\ {'number': round_number+1, 'total': session.experiment.rounds} return Score(session, config=config, feedback=feedback, score=score, title=score_title) - - + def get_plink_round(self, session, present_score=False): next_round = [] if present_score: @@ -143,11 +141,11 @@ def get_plink_round(self, session, present_score=False): # Get section to recognize section = session.section_from_unused_song() - if section == None: + if section is None: raise Exception("Error: could not find section") expected_response = section.pk - + question1 = AutoCompleteQuestion( key='plink', choices=choices, @@ -160,8 +158,7 @@ def get_plink_round(self, session, present_score=False): ) ) next_round.append(Trial( - playback=Playback( - player_type='BUTTON', + playback=PlayButton( sections=[section] ), feedback_form=Form( @@ -186,15 +183,14 @@ def get_plink_round(self, session, present_score=False): button_label="Start" ) next_round.append(extra_questions_intro) - + extra_rounds = [ self.get_era_question(session, section), self.get_emotion_question(session, section) ] - return [*next_round, *extra_rounds] - + def get_era_question(self, session, section): # Config @@ -219,7 +215,7 @@ def get_era_question(self, session, section): ) return Trial(feedback_form=Form([question])) - + def get_emotion_question(self, session, section): # Question @@ -241,7 +237,7 @@ def get_emotion_question(self, session, section): ) return Trial(feedback_form=Form([question])) - + def calculate_score(self, result, data): """ Calculate score, based on the data field @@ -249,12 +245,13 @@ def calculate_score(self, result, data): if result.question_key == 'plink': return self.SCORE_MAIN_CORRECT if result.expected_response == result.given_response else self.SCORE_MAIN_WRONG elif result.question_key == 'era': - result.session.save_json_data({'extra_questions_intro_shown': True}) + result.session.save_json_data( + {'extra_questions_intro_shown': True}) result.session.save() return self.SCORE_EXTRA_1_CORRECT if result.given_response == result.expected_response else self.SCORE_EXTRA_WRONG else: return self.SCORE_EXTRA_2_CORRECT if result.given_response == result.expected_response else self.SCORE_EXTRA_WRONG - + def get_final_round(self, session): # Finish session. diff --git a/backend/experiment/rules/toontjehoger_4_absolute.py b/backend/experiment/rules/toontjehoger_4_absolute.py index adde4623b..02166b49f 100644 --- a/backend/experiment/rules/toontjehoger_4_absolute.py +++ b/backend/experiment/rules/toontjehoger_4_absolute.py @@ -4,10 +4,11 @@ from django.template.loader import render_to_string from experiment.utils import non_breaking_spaces from .toontjehoger_1_mozart import toontjehoger_ranks -from experiment.actions import Trial, Explainer, Step, Score, Final, StartSession, Playlist, Info +from experiment.actions import Trial, Explainer, Step, Score, Final, Playlist, Info from experiment.actions.form import ButtonArrayQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Multiplayer from experiment.actions.styles import STYLE_NEUTRAL +from experiment.utils import create_player_labels from .base import Base from result.utils import prepare_result @@ -42,13 +43,9 @@ def first_round(self, experiment): # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - return [ explainer, playlist, - start_session ] def next_round(self, session, request_session=None): @@ -97,12 +94,7 @@ def get_round(self, session): random.shuffle(sections) # Player - play_config = { - 'label_style': 'ALPHABETIC', - } - - playback = Playback( - sections, player_type=Playback.TYPE_MULTIPLAYER, play_config=play_config) + playback = Multiplayer(sections, labels=create_player_labels(len(sections), 'alphabetic')) # Question key = 'pitch' diff --git a/backend/experiment/rules/toontjehoger_5_tempo.py b/backend/experiment/rules/toontjehoger_5_tempo.py index 1fdc2377c..1df1a824b 100644 --- a/backend/experiment/rules/toontjehoger_5_tempo.py +++ b/backend/experiment/rules/toontjehoger_5_tempo.py @@ -3,12 +3,12 @@ from os.path import join from django.template.loader import render_to_string from .toontjehoger_1_mozart import toontjehoger_ranks -from experiment.actions import Trial, Explainer, Step, Score, Final, StartSession, Playlist, Info +from experiment.actions import Trial, Explainer, Step, Score, Final, Playlist, Info from experiment.actions.form import ButtonArrayQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Multiplayer from experiment.actions.styles import STYLE_NEUTRAL from .base import Base -from experiment.utils import non_breaking_spaces +from experiment.utils import create_player_labels, non_breaking_spaces from result.utils import prepare_result @@ -42,13 +42,9 @@ def first_round(self, experiment): # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - return [ explainer, playlist, - start_session ] def next_round(self, session, request_session=None): @@ -136,12 +132,7 @@ def get_round(self, session, round): section_original = sections[0] if sections[0].group == "or" else sections[1] # Player - play_config = { - 'label_style': 'ALPHABETIC', - } - - playback = Playback( - sections, player_type=Playback.TYPE_MULTIPLAYER, play_config=play_config) + playback = Multiplayer(sections, labels=create_player_labels(len(sections), 'alphabetic')) # Question key = 'pitch' diff --git a/backend/experiment/rules/toontjehoger_6_relative.py b/backend/experiment/rules/toontjehoger_6_relative.py index 89a845007..4f4e711bc 100644 --- a/backend/experiment/rules/toontjehoger_6_relative.py +++ b/backend/experiment/rules/toontjehoger_6_relative.py @@ -2,9 +2,9 @@ from django.template.loader import render_to_string from os.path import join from .toontjehoger_1_mozart import toontjehoger_ranks -from experiment.actions import Trial, Explainer, Step, Score, Final, StartSession, Playlist, Info +from experiment.actions import Trial, Explainer, Step, Score, Final, Playlist, Info from experiment.actions.form import ChoiceQuestion, Form -from experiment.actions.playback import Playback +from experiment.actions.playback import Multiplayer from experiment.actions.styles import STYLE_BOOLEAN from .base import Base @@ -40,15 +40,11 @@ def first_round(self, experiment): # 2. Choose playlist. playlist = Playlist(experiment.playlists.all()) - # 3. Start session. - start_session = StartSession() - return [ explainer, playlist, - start_session ] - + def next_round(self, session, request_session=None): """Get action data for the next round""" @@ -65,7 +61,7 @@ def next_round(self, session, request_session=None): # Final return self.get_final_round(session) - + def get_score(self, session): # Feedback last_result = session.last_result() @@ -83,7 +79,7 @@ def get_score(self, session): config = {'show_total_score': True} score = Score(session, config=config, feedback=feedback) return [score] - + def get_round(self, round, session): # Config @@ -91,7 +87,7 @@ def get_round(self, round, session): # section 1 is always section 'a' section1 = session.section_from_any_song( filter_by={'tag': 'a'}) - if section1 == None: + if section1 is None: raise Exception( "Error: could not find section1 for round {}".format(round)) @@ -99,7 +95,7 @@ def get_round(self, round, session): tag = 'b' if round == 0 else 'c' section2 = session.section_from_any_song( filter_by={'tag': tag}) - if section2 == None: + if section2 is None: raise Exception( "Error: could not find section2 for round {}".format(round)) @@ -126,13 +122,11 @@ def get_round(self, round, session): form = Form([question]) # Player - play_config = { - 'label_style': 'CUSTOM', - 'labels': ['A', 'B' if round == 0 else 'C'], - 'play_once': True, - } - playback = Playback( - [section1, section2], player_type=Playback.TYPE_MULTIPLAYER, play_config=play_config) + playback = Multiplayer( + [section1, section2], + play_once=True, + labels=['A', 'B' if round == 0 else 'C'] + ) trial = Trial( playback=playback, diff --git a/backend/experiment/rules/toontjehoger_home.py b/backend/experiment/rules/toontjehoger_home.py index 324580625..3189ddf2b 100644 --- a/backend/experiment/rules/toontjehoger_home.py +++ b/backend/experiment/rules/toontjehoger_home.py @@ -74,7 +74,7 @@ def first_round(self, experiment): """Create data for the first experiment round""" # Session history - sessions = self.get_sessions(participant) + sessions = self.get_sessions(participant) # To be fixed in the future next_experiment_slug = self.get_next_experiment_slug(sessions) # Score diff --git a/backend/experiment/rules/util/practice.py b/backend/experiment/rules/util/practice.py index c30760374..43004242c 100644 --- a/backend/experiment/rules/util/practice.py +++ b/backend/experiment/rules/util/practice.py @@ -85,6 +85,7 @@ def practice_explainer(): button_label=_('Begin experiment') ) + def practice_again_explainer(): return Explainer( instruction=_( @@ -97,6 +98,7 @@ def practice_again_explainer(): button_label=_('Continue') ) + def start_experiment_explainer(): return Explainer( instruction=_( @@ -112,6 +114,7 @@ def start_experiment_explainer(): button_label=_('Start') ) + def get_trial_condition_block(session, n_trials_per_block): """ make a list of n_trials_per_blocks conditions, of which one is catch (=1) store updates in the session.json_data field diff --git a/backend/experiment/rules/visual_matching_pairs.py b/backend/experiment/rules/visual_matching_pairs.py new file mode 100644 index 000000000..23c355429 --- /dev/null +++ b/backend/experiment/rules/visual_matching_pairs.py @@ -0,0 +1,116 @@ +import random + +from django.utils.translation import gettext_lazy as _ +from django.template.loader import render_to_string + +from .base import Base +from experiment.actions import Consent, Explainer, Final, Playlist, Step, Trial +from experiment.actions.playback import VisualMatchingPairs +from experiment.questions.demographics import EXTRA_DEMOGRAPHICS +from experiment.questions.utils import question_by_key +from result.utils import prepare_result + +from section.models import Section + + +class VisualMatchingPairsGame(Base): + ID = 'VISUAL_MATCHING_PAIRS' + num_pairs = 8 + contact_email = 'aml.tunetwins@gmail.com' + + def __init__(self): + self.questions = [ + question_by_key('dgf_gender_identity'), + question_by_key('dgf_generation'), + question_by_key('dgf_musical_experience', EXTRA_DEMOGRAPHICS), + question_by_key('dgf_country_of_origin'), + question_by_key('dgf_education', drop_choices=['isced-2', 'isced-5']) + ] + + def first_round(self, experiment): + # Add consent from file or admin (admin has priority) + consent = Consent( + experiment.consent, + title=_('Informed consent'), + confirm=_('I agree'), + deny=_('Stop'), + url='consent/consent_matching_pairs.html' + ) + + playlist = Playlist(experiment.playlists.all()) + + explainer = Explainer( + instruction='', + steps=[ + Step(description=_('TuneTwins is a musical version of "Memory". It consists of 16 musical fragments. Your task is to listen and find the 8 matching pairs.')), + Step(description=_('Some versions of the game are easy and you will have to listen for identical pairs. Some versions are more difficult and you will have to listen for similar pairs, one of which is distorted.')), + Step(description=_('Click on another card to stop the current card from playing.')), + Step(description=_('Finding a match removes the pair from the board.')), + Step(description=_('Listen carefully to avoid mistakes and earn more points.')) + ], + step_numbers=True) + + return [ + consent, + playlist, + explainer + ] + + def next_round(self, session): + if session.rounds_passed() < 1: + trials = self.get_questionnaire(session) + if trials: + intro_questions = Explainer( + instruction=_('Before starting the game, we would like to ask you %i demographic questions.' % (len(trials))), + steps=[] + ) + return [intro_questions, *trials] + else: + trial = self.get_visual_matching_pairs_trial(session) + return [trial] + else: + session.final_score += session.result_set.filter( + question_key='visual_matching_pairs').last().score + session.save() + social_info = self.social_media_info(session.experiment, session.final_score) + social_info['apps'].append('clipboard') + score = Final( + session, + title='Score', + final_text='Can you score higher than your friends and family? Share and let them try!', + button={ + 'text': 'Play again', + }, + rank=self.rank(session, exclude_unfinished=False), + social=social_info, + feedback_info=self.feedback_info() + ) + cont = self.get_visual_matching_pairs_trial(session) + + return [score, cont] + + def get_visual_matching_pairs_trial(self, session): + + player_sections = list(session.playlist.section_set.filter(tag__contains='vmp')) + random.shuffle(player_sections) + + playback = VisualMatchingPairs( + sections=player_sections + ) + trial = Trial( + title='Visual Tune twins', + playback=playback, + feedback_form=None, + result_id=prepare_result('visual_matching_pairs', session), + config={'show_continue_button': False} + ) + + return trial + + def calculate_score(self, result, data): + moves = data.get('result').get('moves') + for m in moves: + m['filename'] = str(Section.objects.get(pk=m.get('selectedSection')).filename) + score = data.get('result').get('score') + + return score \ No newline at end of file diff --git a/backend/experiment/templates/dev/consent_mock.html b/backend/experiment/templates/dev/consent_mock.html new file mode 100644 index 000000000..604c9f43c --- /dev/null +++ b/backend/experiment/templates/dev/consent_mock.html @@ -0,0 +1 @@ +{% load i18n %}{% blocktranslate %}

test

{% endblocktranslate %} \ No newline at end of file diff --git a/backend/experiment/templates/dev/consent_mock.md b/backend/experiment/templates/dev/consent_mock.md new file mode 100644 index 000000000..c0ae62cf5 --- /dev/null +++ b/backend/experiment/templates/dev/consent_mock.md @@ -0,0 +1 @@ +#test \ No newline at end of file diff --git a/backend/experiment/templates/edit-sections.html b/backend/experiment/templates/edit-sections.html index 86c647ef5..9fb1a7360 100644 --- a/backend/experiment/templates/edit-sections.html +++ b/backend/experiment/templates/edit-sections.html @@ -45,7 +45,6 @@

Edit sections for playlist: {{playlist.name}}

Duration Group Tag - NL {% for section in sections %} @@ -64,11 +63,11 @@

Edit sections for playlist: {{playlist.name}}

value="{{ section.song.name}}" {% if not section.song %} placeholder="*" {% endif %}> - - @@ -79,13 +78,6 @@

Edit sections for playlist: {{playlist.name}}

- - - {% if section.song %} - - {% endif %} - {% endfor %} diff --git a/backend/experiment/tests/test_actions.py b/backend/experiment/tests/test_actions.py index 87ac88ea7..6091c0cd3 100644 --- a/backend/experiment/tests/test_actions.py +++ b/backend/experiment/tests/test_actions.py @@ -2,6 +2,7 @@ from experiment.actions.utils import randomize_playhead + class TestActions(TestCase): def test_randomize_playhead(self): diff --git a/backend/experiment/tests/test_actions_consent.py b/backend/experiment/tests/test_actions_consent.py new file mode 100644 index 000000000..7da77e90d --- /dev/null +++ b/backend/experiment/tests/test_actions_consent.py @@ -0,0 +1,53 @@ +from django.test import TestCase +from django.core.files.uploadedfile import SimpleUploadedFile + +from experiment.models import Experiment +from experiment.actions.consent import Consent + + +class ConsentTest(TestCase): + + @classmethod + def setUpTestData(cls): + Experiment.objects.create( + name='test_md', + slug='MARKDOWN', + consent=SimpleUploadedFile('consent.md', b'#test', content_type='text/html') + ) + Experiment.objects.create( + name='test_html', + slug='HTML', + consent=SimpleUploadedFile('consent.html', b'

test

', content_type='text/html') + ) + Experiment.objects.create( + name='test_template', + slug='TEMPLATE', + consent=SimpleUploadedFile('template.html', b'{% load i18n %}{% blocktranslate %}

test

{% endblocktranslate %}', content_type='text/html') + ) + + def test_markdown_rendering(self): + consent = Consent('', url='dev/consent_mock.md') + self.assertEqual(consent.render_format, 'MARKDOWN') + self.assertEqual(consent.text, '

test

') + + def test_html_rendering(self): + consent = Consent('', url='dev/consent_mock.html') + self.assertEqual(consent.render_format, 'HTML') + self.assertEqual(consent.text, '

test

') + + def test_uploaded_markdown_rendering(self): + experiment = Experiment.objects.get(slug='MARKDOWN') + consent = Consent(experiment.consent) + self.assertEqual(consent.render_format, 'MARKDOWN') + self.assertEqual(consent.text, '

test

') + + def test_uploaded_html_rendering(self): + experiment = Experiment.objects.get(slug='HTML') + consent = Consent(experiment.consent) + self.assertEqual(consent.render_format, 'HTML') + self.assertEqual(consent.text, '

test

') + + def test_template_language_rendering(self): + experiment = Experiment.objects.get(slug='TEMPLATE') + consent = Consent(experiment.consent) + self.assertEqual(consent.text, '

test

') diff --git a/backend/experiment/tests/test_actions_form.py b/backend/experiment/tests/test_actions_form.py new file mode 100644 index 000000000..c10a07676 --- /dev/null +++ b/backend/experiment/tests/test_actions_form.py @@ -0,0 +1,342 @@ +from django.test import TestCase + +from experiment.actions.form import BooleanQuestion, ChoiceQuestion, Form, NumberQuestion, TextQuestion, DropdownQuestion, AutoCompleteQuestion, RadiosQuestion, ButtonArrayQuestion, RangeQuestion, LikertQuestion, LikertQuestionIcon + + +class FormTest(TestCase): + def setUp(self): + self.questions = [NumberQuestion(key='test_key', min_value=1, max_value=10)] + self.form = Form(form=self.questions, submit_label='Submit', skip_label='Skip', is_skippable=True) + + def test_initialization(self): + self.assertEqual(len(self.form.form), 1) + self.assertEqual(self.form.submit_label, 'Submit') + self.assertEqual(self.form.skip_label, 'Skip') + self.assertTrue(self.form.is_skippable) + + def test_action_method(self): + action_result = self.form.action() + self.assertIn('form', action_result) + self.assertEqual(len(action_result['form']), 1) + self.assertIn('submit_label', action_result) + self.assertIn('skip_label', action_result) + self.assertIn('is_skippable', action_result) + + +class NumberQuestionTest(TestCase): + def setUp(self): + self.number_question = NumberQuestion( + key='test_key', + min_value=1, + max_value=10, + input_type='number' + ) + + def test_initialization(self): + self.assertEqual(self.number_question.key, 'test_key') + self.assertEqual(self.number_question.min_value, 1) + self.assertEqual(self.number_question.max_value, 10) + self.assertEqual(self.number_question.input_type, 'number') + + def test_action_method(self): + action_result = self.number_question.action() + self.assertIn('key', action_result) + self.assertIn('min_value', action_result) + self.assertIn('max_value', action_result) + self.assertEqual(action_result['min_value'], 1) + self.assertEqual(action_result['max_value'], 10) + + +class TextQuestionTest(TestCase): + def setUp(self): + self.text_question = TextQuestion( + key='test_key', + max_length=100, + input_type='text' + ) + + def test_initialization(self): + self.assertEqual(self.text_question.key, 'test_key') + self.assertEqual(self.text_question.max_length, 100) + self.assertEqual(self.text_question.input_type, 'text') + + def test_action_method(self): + action_result = self.text_question.action() + self.assertIn('key', action_result) + self.assertIn('max_length', action_result) + self.assertEqual(action_result['max_length'], 100) + + +class BooleanQuestionTest(TestCase): + def setUp(self): + self.boolean_question = BooleanQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + } + ) + + def test_initialization(self): + self.assertEqual(self.boolean_question.key, 'test_key') + self.assertEqual(self.boolean_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.boolean_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class ChoiceQuestionTest(TestCase): + def setUp(self): + self.choice_question = ChoiceQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + min_values=1 + ) + + def test_initialization(self): + self.assertEqual(self.choice_question.key, 'test_key') + self.assertEqual(self.choice_question.choices, {'no': 'No', 'yes': 'Yes'}) + self.assertEqual(self.choice_question.min_values, 1) + + def test_action_method(self): + action_result = self.choice_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + self.assertIn('min_values', action_result) + self.assertEqual(action_result['min_values'], 1) + + +class DropdownQuestionTest(TestCase): + def setUp(self): + self.dropdown_question = DropdownQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + ) + + def test_initialization(self): + self.assertEqual(self.dropdown_question.key, 'test_key') + self.assertEqual(self.dropdown_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.dropdown_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class AutoCompleteQuestionTest(TestCase): + def setUp(self): + self.autocomplete_question = AutoCompleteQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + ) + + def test_initialization(self): + self.assertEqual(self.autocomplete_question.key, 'test_key') + self.assertEqual(self.autocomplete_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.autocomplete_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class RadiosQuestionTest(TestCase): + def setUp(self): + self.radios_question = RadiosQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + ) + + def test_initialization(self): + self.assertEqual(self.radios_question.key, 'test_key') + self.assertEqual(self.radios_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.radios_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class ButtonArrayQuestionTest(TestCase): + def setUp(self): + self.buttonarray_question = ButtonArrayQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + ) + + def test_initialization(self): + self.assertEqual(self.buttonarray_question.key, 'test_key') + self.assertEqual(self.buttonarray_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.buttonarray_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class RangeQuestionTest(TestCase): + def setUp(self): + self.range_question = RangeQuestion( + key='test_key', + min_value=1, + max_value=10, + ) + + def test_initialization(self): + self.assertEqual(self.range_question.key, 'test_key') + self.assertEqual(self.range_question.min_value, 1) + self.assertEqual(self.range_question.max_value, 10) + + def test_action_method(self): + action_result = self.range_question.action() + self.assertIn('key', action_result) + self.assertIn('min_value', action_result) + self.assertIn('max_value', action_result) + self.assertEqual(action_result['min_value'], 1) + self.assertEqual(action_result['max_value'], 10) + + +class LikertQuestionCustomChoicesTest(TestCase): + def setUp(self): + self.likert_question = LikertQuestion( + key='test_key', + choices={ + 'no': 'No', + 'yes': 'Yes' + }, + ) + + def test_initialization(self): + self.assertEqual(self.likert_question.key, 'test_key') + self.assertEqual(self.likert_question.choices, {'no': 'No', 'yes': 'Yes'}) + + def test_action_method(self): + action_result = self.likert_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], {'no': 'No', 'yes': 'Yes'}) + + +class LikertQuestionSevenScaleStepsTest(TestCase): + def setUp(self): + self.likert_question = LikertQuestion( + key='test_key', + scale_steps=7, + ) + + def test_initialization(self): + self.assertEqual(self.likert_question.key, 'test_key') + self.assertEqual(self.likert_question.choices, { + 1: "Completely Disagree", + 2: "Strongly Disagree", + 3: "Disagree", + 4: "Neither Agree nor Disagree", + 5: "Agree", + 6: "Strongly Agree", + 7: "Completely Agree", + }) + + def test_action_method(self): + action_result = self.likert_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], { + 1: "Completely Disagree", + 2: "Strongly Disagree", + 3: "Disagree", + 4: "Neither Agree nor Disagree", + 5: "Agree", + 6: "Strongly Agree", + 7: "Completely Agree", + }) + + +class LikertQuestionFiveScaleStepsTest(TestCase): + def setUp(self): + self.likert_question = LikertQuestion( + key='test_key', + scale_steps=5, + ) + + def test_initialization(self): + self.assertEqual(self.likert_question.key, 'test_key') + self.assertEqual(self.likert_question.choices, { + 1: "Strongly Disagree", + 2: "Disagree", + 3: "Neither Agree nor Disagree", + 4: "Agree", + 5: "Strongly Agree", + }) + + def test_action_method(self): + action_result = self.likert_question.action() + self.assertIn('key', action_result) + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], { + 1: "Strongly Disagree", + 2: "Disagree", + 3: "Neither Agree nor Disagree", + 4: "Agree", + 5: "Strongly Agree", + }) + + +class LikertQuestionIconTest(TestCase): + def setUp(self): + self.likert_question_icon = LikertQuestionIcon( + key='test_key', + scale_steps=7, + likert_view="ICON_RANGE", + ) + + def test_initialization(self): + self.assertEqual(self.likert_question_icon.key, 'test_key') + self.assertEqual(self.likert_question_icon.view, 'ICON_RANGE') + self.assertEqual(self.likert_question_icon.choices, { + 1: 'fa-face-grin-hearts', + 2: 'fa-face-grin', + 3: 'fa-face-smile', + 4: 'fa-face-meh', + 5: 'fa-face-frown', + 6: 'fa-face-frown-open', + 7: 'fa-face-angry', + }) + + def test_action_method(self): + action_result = self.likert_question_icon.action() + self.assertIn('key', action_result) + self.assertIn('view', action_result) + self.assertEqual(action_result['view'], 'ICON_RANGE') + self.assertIn('choices', action_result) + self.assertEqual(action_result['choices'], { + 1: 'fa-face-grin-hearts', + 2: 'fa-face-grin', + 3: 'fa-face-smile', + 4: 'fa-face-meh', + 5: 'fa-face-frown', + 6: 'fa-face-frown-open', + 7: 'fa-face-angry', + }) diff --git a/backend/experiment/tests/test_actions_html.py b/backend/experiment/tests/test_actions_html.py new file mode 100644 index 000000000..79d913211 --- /dev/null +++ b/backend/experiment/tests/test_actions_html.py @@ -0,0 +1,11 @@ +from django.test import TestCase + +from experiment.actions.html import HTML + + +class HTMLTest(TestCase): + + def test_initialization(self): + test_html_body = "
Test HTML Content
" + html_action = HTML(body=test_html_body) + self.assertEqual(html_action.body, test_html_body) diff --git a/backend/experiment/tests/test_actions_info.py b/backend/experiment/tests/test_actions_info.py new file mode 100644 index 000000000..8fe2dec6d --- /dev/null +++ b/backend/experiment/tests/test_actions_info.py @@ -0,0 +1,36 @@ +import unittest + +from experiment.actions.info import Info + + +class TestInfo(unittest.TestCase): + + def test_initialization_all_parameters(self): + info = Info( + body="

Test Body

", + heading="Test Heading", + button_label="Test Label", + button_link="http://example.com" + ) + self.assertEqual(info.body, "

Test Body

") + self.assertEqual(info.heading, "Test Heading") + self.assertEqual(info.button_label, "Test Label") + self.assertEqual(info.button_link, "http://example.com") + + def test_initialization_only_body(self): + info = Info(body="

Only Body

") + self.assertEqual(info.body, "

Only Body

") + self.assertEqual(info.heading, "") + self.assertIsNone(info.button_label) + self.assertIsNone(info.button_link) + + def test_initialization_default_values(self): + info = Info(body="

Body

", heading="Heading") + self.assertEqual(info.body, "

Body

") + self.assertEqual(info.heading, "Heading") + self.assertIsNone(info.button_label) + self.assertIsNone(info.button_link) + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/experiment/tests/test_actions_playlist.py b/backend/experiment/tests/test_actions_playlist.py new file mode 100644 index 000000000..98223082e --- /dev/null +++ b/backend/experiment/tests/test_actions_playlist.py @@ -0,0 +1,38 @@ +import unittest +from unittest.mock import MagicMock + +from experiment.actions.playlist import Playlist + + +class TestPlaylist(unittest.TestCase): + + def setUp(self): + self.mock_playlists = [ + MagicMock(id=1, name='Playlist 1'), + MagicMock(id=2, name='Playlist 2') + ] + + self.mock_playlists[0].name = 'Playlist 1' + self.mock_playlists[1].name = 'Playlist 2' + + def test_initialization_with_playlists(self): + playlist_action = Playlist(playlists=self.mock_playlists) + self.assertEqual(len(playlist_action.playlists), 2) + self.assertEqual(playlist_action.playlists[0]['id'], 1) + self.assertEqual(playlist_action.playlists[0]['name'], 'Playlist 1') + + def test_initialization_with_empty_list(self): + playlist_action = Playlist(playlists=[]) + self.assertEqual(playlist_action.playlists, []) + + def test_playlists_structure(self): + playlist_action = Playlist(playlists=self.mock_playlists) + for playlist in playlist_action.playlists: + self.assertIn('id', playlist) + self.assertIn('name', playlist) + self.assertIsInstance(playlist['id'], int) + self.assertIsInstance(playlist['name'], str) + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/experiment/tests/test_actions_score.py b/backend/experiment/tests/test_actions_score.py new file mode 100644 index 000000000..579ec5544 --- /dev/null +++ b/backend/experiment/tests/test_actions_score.py @@ -0,0 +1,78 @@ +import unittest +from unittest.mock import Mock + +from experiment.actions.score import Score + + +class TestScore(unittest.TestCase): + + def setUp(self): + self.mock_session = Mock() + self.mock_session.last_score.return_value = 10 + self.mock_session.last_song.return_value = "Test Song" + self.mock_session.total_score.return_value = 50 + self.mock_session.rounds_passed.return_value = 2 + self.mock_session.experiment.rounds = 5 + + def test_initialization_full_parameters(self): + score = Score( + session=self.mock_session, + title="Test Title", + score=100, + score_message=lambda x: f"Score is {x}", + config={'show_section': True, 'show_total_score': True}, + icon="icon-test", + timer=5, + feedback="Test Feedback" + ) + self.assertEqual(score.title, "Test Title") + self.assertEqual(score.score, 100) + self.assertEqual(score.score_message(score.score), "Score is 100") + self.assertEqual(score.feedback, "Test Feedback") + self.assertEqual(score.config, {'show_section': True, 'show_total_score': True}) + self.assertEqual(score.icon, "icon-test") + self.assertEqual(score.texts, { + 'score': 'Total Score', + 'next': 'Next', + 'listen_explainer': 'You listened to:' + }) + self.assertEqual(score.timer, 5) + + def test_initialization_minimal_parameters(self): + score = Score(session=self.mock_session) + self.assertIsNone(score.title) + self.assertEqual(score.score, 10) + self.assertEqual(score.score_message, score.default_score_message) + self.assertIsNone(score.feedback) + self.assertEqual(score.config, {'show_section': False, 'show_total_score': False}) + self.assertIsNone(score.icon) + self.assertEqual(score.texts, { + 'score': 'Total Score', + 'next': 'Next', + 'listen_explainer': 'You listened to:' + }) + self.assertIsNone(score.timer) + + def test_action_serialization(self): + score = Score(session=self.mock_session, config={'show_section': True, 'show_total_score': True}) + action = score.action() + self.assertIn('view', action) + self.assertIn('last_song', action) + self.assertIn('total_score', action) + self.assertIn('score', action) + self.assertIn('score_message', action) + self.assertIn('texts', action) + self.assertIn('feedback', action) + self.assertIn('icon', action) + self.assertIn('timer', action) + + def test_default_score_message(self): + score = Score(session=self.mock_session) + self.assertIn(score.default_score_message(10), ["Correct"]) # Positive + self.assertIn(score.default_score_message(0), ["No points"]) # Zero + self.assertIn(score.default_score_message(-5), ["Incorrect"]) # Negative + self.assertIn(score.default_score_message(None), ["No points"]) # None + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/experiment/tests/test_admin_experiment.py b/backend/experiment/tests/test_admin_experiment.py index d3f40e408..610398676 100644 --- a/backend/experiment/tests/test_admin_experiment.py +++ b/backend/experiment/tests/test_admin_experiment.py @@ -11,7 +11,7 @@ from session.models import Session # Expected field count per model -EXPECTED_EXPERIMENT_FIELDS = 13 +EXPECTED_EXPERIMENT_FIELDS = 14 EXPECTED_SESSION_FIELDS = 9 EXPECTED_RESULT_FIELDS = 12 EXPECTED_PARTICIPANT_FIELDS = 5 @@ -20,11 +20,13 @@ class MockRequest: pass + request = MockRequest() this_experiment_admin = ExperimentAdmin( model=Experiment, admin_site=AdminSite) + class TestAdminExperiment(TestCase): @classmethod @@ -62,20 +64,17 @@ def test_participant_model(self): participant_fields = [key for key in participant] self.assertEqual(len(participant_fields), EXPECTED_PARTICIPANT_FIELDS) - class TestAdminExperimentExport(TestCase): fixtures = ['playlist', 'experiment'] - + @classmethod def setUpTestData(cls): cls.participant = Participant.objects.create(unique_hash=42) cls.experiment = Experiment.objects.get(name='Hooked-China') - print(cls.experiment) for playlist in cls.experiment.playlists.all(): - playlist.update_sections() - print(cls.experiment.pk) + playlist.update_sections() cls.session = Session.objects.create( experiment=cls.experiment, participant=cls.participant, @@ -84,14 +83,15 @@ def setUpTestData(cls): Result.objects.create( session=Session.objects.first(), expected_response = i, - given_response = i + given_response = i, + question_key = 'test_question_' + str(i), ) Result.objects.create( participant=cls.participant, question_key= i, - given_response = i + given_response = i, ) - + def setUp(self): self.client = Client() @@ -133,3 +133,18 @@ def test_admin_export(self): # test response from forced download self.assertEqual(response.status_code, 200) self.assertEqual(response['content-type'], 'application/x-zip-compressed') + + def test_export_table_includes_question_key(self): + session_keys = ['session_start', 'session_end'] + result_keys = ['question_key'] + export_options = ['convert_result_json'] # Adjust based on your needs + + # Call the method under test + rows, fieldnames = self.experiment.export_table(session_keys, result_keys, export_options) + + # Assert that 'question_key' is in the fieldnames and check its value in rows + self.assertIn('question_key', fieldnames) + for i in range(len(rows)): + row = rows[i] + self.assertIn('question_key', row) + self.assertEqual(row['question_key'], 'test_question_' + str(i)) \ No newline at end of file diff --git a/backend/experiment/tests/test_forms.py b/backend/experiment/tests/test_forms.py new file mode 100644 index 000000000..2e73b3ddf --- /dev/null +++ b/backend/experiment/tests/test_forms.py @@ -0,0 +1,47 @@ +from django.test import TestCase + +from experiment.forms import ExperimentForm, ExportForm, TemplateForm, EXPERIMENT_RULES, SESSION_CHOICES, RESULT_CHOICES, EXPORT_OPTIONS, TEMPLATE_CHOICES + + +class ExperimentFormTest(TestCase): + def test_form_fields(self): + form = ExperimentForm() + self.assertIn('name', form.fields) + self.assertIn('slug', form.fields) + self.assertIn('active', form.fields) + self.assertIn('rules', form.fields) + self.assertIn('questions', form.fields) + self.assertIn('rounds', form.fields) + self.assertIn('bonus_points', form.fields) + self.assertIn('playlists', form.fields) + self.assertIn('experiment_series', form.fields) + + def test_rules_field_choices(self): + form = ExperimentForm() + expected_choices = [(i, EXPERIMENT_RULES[i].__name__) for i in EXPERIMENT_RULES] + expected_choices.append(("", "---------")) + self.assertEqual(form.fields['rules'].choices, sorted(expected_choices)) + + +class ExportFormTest(TestCase): + def test_form_fields(self): + form = ExportForm() + self.assertIn('export_session_fields', form.fields) + self.assertIn('export_result_fields', form.fields) + self.assertIn('export_options', form.fields) + + def test_field_choices(self): + form = ExportForm() + self.assertEqual(form.fields['export_session_fields'].choices, SESSION_CHOICES) + self.assertEqual(form.fields['export_result_fields'].choices, RESULT_CHOICES) + self.assertEqual(form.fields['export_options'].choices, EXPORT_OPTIONS) + + +class TemplateFormTest(TestCase): + def test_form_fields(self): + form = TemplateForm() + self.assertIn('select_template', form.fields) + + def test_template_choices(self): + form = TemplateForm() + self.assertEqual(form.fields['select_template'].choices, TEMPLATE_CHOICES) diff --git a/backend/experiment/tests/test_frontend_style.py b/backend/experiment/tests/test_frontend_style.py new file mode 100644 index 000000000..6e4ce8a01 --- /dev/null +++ b/backend/experiment/tests/test_frontend_style.py @@ -0,0 +1,41 @@ +import unittest + +from experiment.actions.frontend_style import FrontendStyle, EFrontendStyle + + +class TestFrontendStyle(unittest.TestCase): + + def test_init_with_valid_root_style(self): + style = FrontendStyle(EFrontendStyle.PRIMARY) + self.assertEqual(style.get_style('root'), EFrontendStyle.PRIMARY) + + def test_init_with_invalid_root_style(self): + with self.assertRaises(ValueError): + FrontendStyle("invalid-style") + + def test_get_style(self): + style = FrontendStyle(EFrontendStyle.SECONDARY) + self.assertEqual(style.get_style('root'), EFrontendStyle.SECONDARY) + + def test_get_style_non_existing_element(self): + style = FrontendStyle(EFrontendStyle.SECONDARY) + self.assertIsNone(style.get_style('non-existing')) + + def test_apply_valid_style(self): + style = FrontendStyle(EFrontendStyle.EMPTY) + style.apply_style('root', EFrontendStyle.INFO) + self.assertEqual(style.get_style('root'), EFrontendStyle.INFO) + + def test_apply_invalid_style(self): + style = FrontendStyle(EFrontendStyle.EMPTY) + with self.assertRaises(ValueError): + style.apply_style('root', "invalid-style") + + def test_to_dict(self): + style = FrontendStyle(EFrontendStyle.NEUTRAL) + expected_dict = {'root': EFrontendStyle.NEUTRAL.value } + self.assertEqual(style.to_dict(), expected_dict) + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/experiment/tests/test_model_functions.py b/backend/experiment/tests/test_model_functions.py index 77a767aa1..2fb18c92f 100644 --- a/backend/experiment/tests/test_model_functions.py +++ b/backend/experiment/tests/test_model_functions.py @@ -1,6 +1,7 @@ from django.test import TestCase from experiment.models import Experiment, ExperimentSeries + class TestModelExperiment(TestCase): @classmethod def setUpTestData(cls): @@ -13,6 +14,7 @@ def test_separate_rules_instance(self): keys2 = [q.key for q in rules2.questions] assert keys1 != keys2 + class TestModelExperimentSeries(TestCase): def test_verbose_name_plural(self): diff --git a/backend/experiment/tests/test_rules_gold_msi.py b/backend/experiment/tests/test_rules_gold_msi.py new file mode 100644 index 000000000..d2025d08a --- /dev/null +++ b/backend/experiment/tests/test_rules_gold_msi.py @@ -0,0 +1,27 @@ +from django.test import TestCase +from django.core.files.uploadedfile import SimpleUploadedFile +from experiment.models import Experiment +from experiment.rules.gold_msi import GoldMSI + + +class TestGoldMSI(TestCase): + @classmethod + def setUpTestData(cls): + Experiment.objects.create( + name='test_md', + slug='MARKDOWN', + consent=SimpleUploadedFile('consent.md', b'#test', content_type='text/html') + ) + + def test_init(self): + goldMSI = GoldMSI() + assert goldMSI.ID == 'GOLD_MSI' + + def test_first_round(self): + experiment = Experiment.objects.first() + goldMSI = GoldMSI() + result = goldMSI.first_round(experiment) + + assert result[0].__class__.__name__ == 'Consent' + assert result[0].ID == 'CONSENT' + diff --git a/backend/experiment/tests/test_utils.py b/backend/experiment/tests/test_utils.py new file mode 100644 index 000000000..0ae83aea7 --- /dev/null +++ b/backend/experiment/tests/test_utils.py @@ -0,0 +1,14 @@ +from django.test import TestCase + +from experiment.utils import create_player_labels + + +class TestExperimentUtils(TestCase): + + def test_create_player_labels(self): + labels = create_player_labels(3, 'alphabetic') + assert labels == ['A', 'B', 'C'] + labels = create_player_labels(4, 'roman') + assert labels == ['I', 'II', 'III', 'IV'] + labels = create_player_labels(2) + assert labels == ['1', '2'] \ No newline at end of file diff --git a/backend/experiment/utils.py b/backend/experiment/utils.py index 03ed3354b..17dcaaa89 100644 --- a/backend/experiment/utils.py +++ b/backend/experiment/utils.py @@ -1,3 +1,5 @@ +import roman + def serialize(actions): ''' Serialize an array of actions ''' @@ -5,6 +7,7 @@ def serialize(actions): return [a.action() for a in actions] return actions.action() + def slugify(text): """Create a slug from given string""" non_url_safe = ['"', '#', '$', '%', '&', '+', @@ -16,12 +19,27 @@ def slugify(text): text = u'_'.join(text.split()) return text.lower() + def non_breaking_spaces(s): # Convert regular spaces to non breaking spacing # on the given string non_breaking_space = chr(160) return s.replace(" ", non_breaking_space) + def external_url(text, url): # Create a HTML element for an external url return '{}'.format(url, text) + + +def create_player_labels(num_labels, label_style='number'): + return [format_label(i, label_style) for i in range(num_labels)] + + +def format_label(number, label_style): + if label_style == 'alphabetic': + return chr(number + 65) + elif label_style == 'roman': + return roman.toRoman(number+1) + else: + return str(number+1) diff --git a/backend/experiment/validators.py b/backend/experiment/validators.py new file mode 100644 index 000000000..bf5ee0751 --- /dev/null +++ b/backend/experiment/validators.py @@ -0,0 +1,7 @@ +from django.core.validators import FileExtensionValidator + +valid_extensions = ['md', 'html'] + + +def consent_file_validator(): + return FileExtensionValidator(allowed_extensions=valid_extensions) diff --git a/backend/experiment/views.py b/backend/experiment/views.py index 0768f6a23..eeecc9b39 100644 --- a/backend/experiment/views.py +++ b/backend/experiment/views.py @@ -9,13 +9,13 @@ from .models import Experiment, Feedback from .utils import serialize from session.models import Session +from experiment.rules import EXPERIMENT_RULES logger = logging.getLogger(__name__) -from experiment.rules import EXPERIMENT_RULES - # Experiment + def get_experiment(request, slug): """Get experiment data from active experiment with given :slug DO NOT modify session data here, it will break participant_id system @@ -80,6 +80,7 @@ def get_experiment(request, slug): response.set_cookie(settings.LANGUAGE_COOKIE_NAME, None) return response + def post_feedback(request, slug): text = request.POST.get('feedback') experiment = experiment_or_404(slug) @@ -87,6 +88,7 @@ def post_feedback(request, slug): feedback.save() return JsonResponse({'status': 'ok'}) + def experiment_or_404(slug): # get experiment try: @@ -94,5 +96,6 @@ def experiment_or_404(slug): except Experiment.DoesNotExist: raise Http404("Experiment does not exist") + def default_questions(request, rules): return JsonResponse({'default_questions': [q.key for q in EXPERIMENT_RULES[rules]().questions]}) diff --git a/backend/manage.py b/backend/manage.py index 041efeacc..4ac5acba2 100755 --- a/backend/manage.py +++ b/backend/manage.py @@ -4,6 +4,7 @@ from os.path import join, dirname from dotenv import load_dotenv + def main(): env_path = join(dirname(__file__), '.env') load_dotenv(dotenv_path=env_path) diff --git a/backend/participant/apps.py b/backend/participant/apps.py index 103321f4c..cfc9ee2d2 100644 --- a/backend/participant/apps.py +++ b/backend/participant/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig + class ParticipantConfig(AppConfig): name = 'participant' diff --git a/backend/participant/tests.py b/backend/participant/tests.py index d23212dc4..74d1f868b 100644 --- a/backend/participant/tests.py +++ b/backend/participant/tests.py @@ -7,6 +7,7 @@ from session.models import Session from result.models import Result + class ParticipantTest(TestCase): @classmethod @@ -35,21 +36,21 @@ def setUp(self): self.session = self.client.session self.session['country_code'] = 'BLA' self.session.save() - + def set_participant(self): self.session['participant_id'] = self.participant.id self.session.save() - + def test_current_view(self): self.set_participant() response = json.loads(self.client.get('/participant/').content) assert response.get('id') == self.participant.id assert int(response.get('hash')) == self.participant.unique_hash - assert response.get('csrf_token') != None + assert response.get('csrf_token') is not None def test_profile(self): assert len(self.participant.profile()) == 1 - + def test_profile_object(self): po = self.participant.profile_object() assert len(po.keys()) == 2 @@ -65,5 +66,5 @@ def test_country_code(self): self.client.get('/participant/') participant = Participant.objects.last() assert participant.country_code == 'BLA' - + diff --git a/backend/participant/utils.py b/backend/participant/utils.py index 3a3a8b51b..d1ec74ece 100644 --- a/backend/participant/utils.py +++ b/backend/participant/utils.py @@ -13,6 +13,7 @@ def located_in_nl(request): """Return True if the requesting IP-address is located in NL""" return country(request) == 'nl' + def country(request): """Get country code of requesting ip""" @@ -38,6 +39,7 @@ def country(request): return country_code + def get_country_code(ip_address): """Get country code from given ip address""" @@ -56,6 +58,7 @@ def get_country_code(ip_address): except: return None + def visitor_ip_address(request): """Get visitor ip address from request""" @@ -67,6 +70,7 @@ def visitor_ip_address(request): return request.META.get('REMOTE_ADDR') + def get_participant(request): # get participant from session participant_id = request.session.get(PARTICIPANT_KEY, -1) @@ -76,6 +80,7 @@ def get_participant(request): except Participant.DoesNotExist: raise + def get_or_create_participant(request): """Get a participant from URL, the session, or create/add a new one""" diff --git a/backend/participant/views.py b/backend/participant/views.py index cabc4ef98..f40584cde 100644 --- a/backend/participant/views.py +++ b/backend/participant/views.py @@ -38,7 +38,7 @@ def scores(request): 'messages': { 'title': _('My profile'), 'summary': ngettext( - 'You have participated in %(count)d Amsterdam Music Lab experiment. Your best score is:', + 'You have participated in %(count)d Amsterdam Music Lab experiment. Your best score is:', 'You have partcipated in %(count)d Amsterdam Music Lab experiments. Your best scores are:', len(scores)) % {'count': len(scores)}, 'points': _('points'), diff --git a/backend/requirements.in/base.txt b/backend/requirements.in/base.txt index 30aeb7e60..e53e70cfc 100644 --- a/backend/requirements.in/base.txt +++ b/backend/requirements.in/base.txt @@ -20,6 +20,9 @@ IPToCC # PostgrSQL database client psycopg2 +# to convert labels to Roman numerals +roman + # Sentry SDK, for monitoring performance & errors. See also sentry.io. sentry-sdk @@ -31,3 +34,6 @@ coverage # Generate a code coverage badge genbadge[coverage] + +# Convert markdown to html +django-markup[all_filter_dependencies] diff --git a/backend/requirements.in/dev.txt b/backend/requirements.in/dev.txt index 9cbdba765..58728f34b 100644 --- a/backend/requirements.in/dev.txt +++ b/backend/requirements.in/dev.txt @@ -17,3 +17,6 @@ requests # Add pip-tools so we can use pip-compile in our develop environment pip-tools + +# Flake8 for linting +flake8 diff --git a/backend/requirements/dev.txt b/backend/requirements/dev.txt index d2b22fdcf..eaf6c4b12 100644 --- a/backend/requirements/dev.txt +++ b/backend/requirements/dev.txt @@ -12,6 +12,8 @@ audioread==2.1.9 # via -r requirements.in/base.txt autopep8==1.5.7 # via -r requirements.in/dev.txt +bleach==6.1.0 + # via django-markup build==1.0.3 # via pip-tools certifi==2023.7.22 @@ -28,39 +30,56 @@ coverage==7.3.2 # via -r requirements.in/base.txt defusedxml==0.7.1 # via genbadge -django==3.2.23 +django==3.2.24 # via # -r requirements.in/base.txt # django-cors-headers # django-debug-toolbar # django-inline-actions + # django-markup django-cors-headers==3.10.0 # via -r requirements.in/base.txt -django-debug-toolbar==3.2.2 +django-debug-toolbar==4.3.0 # via -r requirements.in/dev.txt django-inline-actions==2.4.0 # via -r requirements.in/base.txt +django-markup[all_filter_dependencies]==1.8.1 + # via -r requirements.in/base.txt +docutils==0.20.1 + # via + # django-markup + # python-creole +flake8==4.0.1 + # via -r requirements.in/dev.txt genbadge[coverage]==1.1.1 # via -r requirements.in/base.txt +html5lib==1.1 + # via textile idna==3.3 # via requests importlib-metadata==7.0.0 - # via build + # via + # build + # markdown iptocc==2.1.2 # via -r requirements.in/base.txt isort==5.9.3 # via pylint lazy-object-proxy==1.6.0 # via astroid +markdown==3.5.2 + # via django-markup mccabe==0.6.1 - # via pylint + # via + # flake8 + # pylint numpy==1.22.0 # via pandas packaging==23.2 # via build pandas==1.3.4 # via iptocc -pillow==10.1.0 +pillow==10.2.0 # via genbadge pip-tools==7.3.0 # via -r requirements.in/dev.txt @@ -69,7 +88,13 @@ platformdirs==2.4.0 psycopg2==2.9.1 # via -r requirements.in/base.txt pycodestyle==2.8.0 - # via autopep8 + # via + # autopep8 + # flake8 +pyflakes==2.4.0 + # via flake8 +pygments==2.17.2 + # via django-markup pylint==2.11.1 # via # -r requirements.in/dev.txt @@ -81,6 +106,8 @@ pylint-plugin-utils==0.6 # via pylint-django pyproject-hooks==1.0.0 # via build +python-creole==1.4.10 + # via django-markup python-dateutil==2.8.2 # via pandas python-dotenv==0.19.1 @@ -89,18 +116,29 @@ pytz==2021.3 # via # django # pandas +regex==2023.12.25 + # via textile requests==2.31.0 # via # -r requirements.in/dev.txt # genbadge +roman==4.1 + # via -r requirements.in/base.txt sentry-sdk==1.38.0 # via -r requirements.in/base.txt six==1.16.0 - # via python-dateutil + # via + # bleach + # html5lib + # python-dateutil +smartypants==2.0.1 + # via django-markup sqlparse==0.4.4 # via # django # django-debug-toolbar +textile==4.0.2 + # via django-markup toml==0.10.2 # via # autopep8 @@ -120,6 +158,10 @@ urllib3==1.26.18 # via # requests # sentry-sdk +webencodings==0.5.1 + # via + # bleach + # html5lib wheel==0.42.0 # via pip-tools wrapt==1.13.2 diff --git a/backend/requirements/prod.txt b/backend/requirements/prod.txt index 81daf2f11..de4794ebd 100644 --- a/backend/requirements/prod.txt +++ b/backend/requirements/prod.txt @@ -8,6 +8,8 @@ asgiref==3.7.2 # via django audioread==3.0.0 # via -r requirements.in/base.txt +bleach==6.1.0 + # via django-markup certifi==2023.11.17 # via # requests @@ -20,31 +22,48 @@ coverage==7.3.2 # via -r requirements.in/base.txt defusedxml==0.7.1 # via genbadge -django==3.2.23 +django==3.2.24 # via # -r requirements.in/base.txt # django-cors-headers # django-inline-actions + # django-markup django-cors-headers==4.0.0 # via -r requirements.in/base.txt django-inline-actions==2.4.0 # via -r requirements.in/base.txt +django-markup[all_filter_dependencies]==1.8.1 + # via -r requirements.in/base.txt +docutils==0.20.1 + # via + # django-markup + # python-creole genbadge[coverage]==1.1.1 # via -r requirements.in/base.txt gunicorn==20.1.0 # via -r requirements.in/prod.txt +html5lib==1.1 + # via textile idna==3.6 # via requests +importlib-metadata==7.0.1 + # via markdown iptocc==2.1.2 # via -r requirements.in/base.txt +markdown==3.5.2 + # via django-markup numpy==1.24.3 # via pandas pandas==1.5.3 # via iptocc -pillow==10.1.0 +pillow==10.2.0 # via genbadge psycopg2==2.9.6 # via -r requirements.in/base.txt +pygments==2.17.2 + # via django-markup +python-creole==1.4.10 + # via django-markup python-dateutil==2.8.2 # via pandas python-dotenv==1.0.0 @@ -53,14 +72,25 @@ pytz==2023.3 # via # django # pandas +regex==2023.12.25 + # via textile requests==2.31.0 # via genbadge +roman==4.1 + # via -r requirements.in/base.txt sentry-sdk==1.38.0 # via -r requirements.in/base.txt six==1.16.0 - # via python-dateutil + # via + # bleach + # html5lib + # python-dateutil +smartypants==2.0.1 + # via django-markup sqlparse==0.4.4 # via django +textile==4.0.2 + # via django-markup tqdm==4.65.0 # via -r requirements.in/base.txt typing-extensions==4.6.3 @@ -69,6 +99,12 @@ urllib3==2.1.0 # via # requests # sentry-sdk +webencodings==0.5.1 + # via + # bleach + # html5lib +zipp==3.17.0 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/backend/result/apps.py b/backend/result/apps.py index 05553ec4d..8cc17182b 100644 --- a/backend/result/apps.py +++ b/backend/result/apps.py @@ -1,5 +1,6 @@ from django.apps import AppConfig + class ResultConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'result' diff --git a/backend/result/migrations/0002_data_migration.py b/backend/result/migrations/0002_data_migration.py index d89e5b517..f2ca60ff6 100644 --- a/backend/result/migrations/0002_data_migration.py +++ b/backend/result/migrations/0002_data_migration.py @@ -5,6 +5,7 @@ logger = logging.getLogger(__name__) + def populate_results(apps, schema_editor): ExperimentResult = apps.get_model('experiment', 'Result') Profile = apps.get_model('experiment', 'Profile') @@ -44,6 +45,7 @@ def populate_results(apps, schema_editor): OldParticipant = apps.get_model('experiment', 'Participant') OldParticipant.objects.all().delete() + def backwards_populate_results(apps, schema_editor): ExperimentResult = apps.get_model('experiment', 'Result') Profile = apps.get_model('experiment', 'Profile') @@ -82,12 +84,14 @@ def backwards_populate_results(apps, schema_editor): OldParticipant = apps.get_model('participant', 'Participant') OldParticipant.objects.all().delete() + def attempt_set_section(new_result, result): try: new_result.section = result.section except: logging.warning('result {} could not set section {}'.format(new_result.id, result.section.id)) + def get_or_create_participant(participant, apps, app_name='participant'): Participant = apps.get_model(app_name, 'Participant') try: @@ -103,6 +107,7 @@ def get_or_create_participant(participant, apps, app_name='participant'): new_participant.save() return new_participant + def get_or_create_session(session, new_participant, apps, app_name='session'): Session = apps.get_model(app_name, 'Session') try: diff --git a/backend/result/migrations/0004_migrate_json_data_to_JSONField.py b/backend/result/migrations/0004_migrate_json_data_to_JSONField.py index e330970d7..6d123752f 100644 --- a/backend/result/migrations/0004_migrate_json_data_to_JSONField.py +++ b/backend/result/migrations/0004_migrate_json_data_to_JSONField.py @@ -3,6 +3,7 @@ from django.db import migrations import json + def forwards_func(apps, schema_editor): Result = apps.get_model('result', 'Result') for result in Result.objects.all(): @@ -11,12 +12,14 @@ def forwards_func(apps, schema_editor): result.json_temp[key] = value result.save() + def reverse_func(apps, schema_editor): Result = apps.get_model('result', 'Result') for result in Result.objects.all(): result.json_data = json.dumps(result.json_temp) result.save() + class Migration(migrations.Migration): dependencies = [('result', '0003_result_json_temp'),] diff --git a/backend/result/models.py b/backend/result/models.py index dd3b03727..240112fc0 100644 --- a/backend/result/models.py +++ b/backend/result/models.py @@ -5,6 +5,7 @@ from django.core.exceptions import ValidationError + # Create your models here. class Result(models.Model): """Score for each step in a session""" diff --git a/backend/result/score.py b/backend/result/score.py index 6fca9dfc7..a1f528f5f 100644 --- a/backend/result/score.py +++ b/backend/result/score.py @@ -5,6 +5,7 @@ logger = logging.getLogger(__name__) + def check_expected_response(result): try: return result.expected_response @@ -12,6 +13,7 @@ def check_expected_response(result): logger.log(e) return None + def correctness_score(result, data): expected_response = check_expected_response(result) if expected_response and expected_response == result.given_response: @@ -19,22 +21,27 @@ def correctness_score(result, data): else: return 0 + def boolean_score(result, data): if result.given_response == 'yes': return 1 else: return 0 + def likert_score(result, data): return int(data['value']) + def reverse_likert_score(result, data): return int(data['scale_steps']) + 1 - int(data['value']) + def categories_likert_score(result, data): choices = list(data['choices'].keys()) return choices.index(data['value']) + 1 + def reaction_time_score(result, data): expected_response = check_expected_response(result) json_data = result.load_json_data() @@ -45,6 +52,7 @@ def reaction_time_score(result, data): return math.ceil(timeout - time) else: return math.floor(-time) + def song_sync_recognition_score(result, data): if result.given_response == 'TIMEOUT' or result.given_response == 'no': @@ -54,7 +62,8 @@ def song_sync_recognition_score(result, data): time = json_data.get('decision_time') timeout = json_data.get('config').get('response_time') return math.ceil(timeout - time) - + + def song_sync_continuation_score(result, data): ''' modify previous result and return None''' previous_result = result.session.get_previous_result(['recognize']) @@ -63,6 +72,7 @@ def song_sync_continuation_score(result, data): previous_result.save() return None + SCORING_RULES = { 'BOOLEAN': boolean_score, 'CORRECTNESS': correctness_score, diff --git a/backend/result/tests/test_result.py b/backend/result/tests/test_result.py index ab579e4c2..bd6784e7c 100644 --- a/backend/result/tests/test_result.py +++ b/backend/result/tests/test_result.py @@ -5,6 +5,7 @@ from result.models import Result from session.models import Session + class ResultTest(TestCase): @classmethod diff --git a/backend/result/tests/test_views.py b/backend/result/tests/test_views.py index b0ed4832e..f5d0454d6 100644 --- a/backend/result/tests/test_views.py +++ b/backend/result/tests/test_views.py @@ -10,6 +10,7 @@ from result.utils import handle_results + class ResultTest(TestCase): @classmethod @@ -27,11 +28,11 @@ def setUp(self): session = self.client.session session['participant_id'] = self.participant.id session.save() - + def test_get(self): response = self.client.get('/result/speed_swallow/') assert response.status_code == 204 - + def test_create(self): result = Result.objects.create( question_key="speed_swallow", @@ -53,10 +54,10 @@ def test_create(self): assert response.status_code == 200 assert Result.objects.count() == 1 response = self.client.get('/result/speed_swallow/') - assert json.loads(response.content).get('answer') != None + assert json.loads(response.content).get('answer') is not None response = self.client.post('/result/score/', request) assert Result.objects.count() == 1 - + def test_handle_results_with_form(self): result1 = Result.objects.create( session=self.session @@ -74,9 +75,10 @@ def test_handle_results_with_form(self): handle_results(data, self.session) assert self.session.result_count() == 2 json_data = self.session.result_set.first().json_data - assert json_data.get('config') != None + assert json_data.get('config') is not None assert json_data.get('decision_time') == 42 + class ScoringTest(TestCase): @classmethod @@ -101,7 +103,7 @@ def setUpTestData(cls): participant=cls.participant, playlist=playlist ) - + def likert_request(self, rule, value, profile=False): result = Result.objects.create( question_key="test", @@ -119,7 +121,7 @@ def likert_request(self, rule, value, profile=False): }] } return self.make_request(action) - + def choice_request(self): result = Result.objects.create( session=self.session, @@ -145,8 +147,8 @@ def choice_request(self): ], } return self.make_request(view) - - def correctness_request(self, value): + + def correctness_request(self, value): result = Result.objects.create( session = self.session, section = self.section, @@ -180,7 +182,7 @@ def song_sync_recognize_request(self, result_type): ] } return self.make_request(view) - + def song_sync_continue_request(self, result_type): result = Result.objects.create( question_key='correct_place', @@ -199,7 +201,7 @@ def song_sync_continue_request(self, result_type): ] } return self.make_request(view) - + def make_request(self, view): """ set up the Django session data, return a request wrapping the view and id of the custom Session object """ @@ -211,34 +213,34 @@ def make_request(self, view): "session_id": session_id, "json_data": json.dumps(view) } - + def test_likert_score(self): client_request = self.likert_request('LIKERT', 2) response = self.client.post('/result/score/', client_request) assert response.status_code == 200 assert self.session.result_set.count() == 1 assert self.session.result_set.last().score == 2 - + def test_likert_reversed(self): client_request = self.likert_request('REVERSE_LIKERT', 2) response = self.client.post('/result/score/', client_request) assert response.status_code == 200 assert self.session.result_set.count() == 1 assert self.session.result_set.last().score == 6 - + def test_likert_profile(self): client_request = self.likert_request('LIKERT', 6, True) response = self.client.post('/result/score/', client_request) assert response.status_code == 200 assert self.session.result_set.count() == 1 assert self.session.result_set.last().score == 6 - + def test_categories_to_likert(self): client_request = self.choice_request() response = self.client.post('/result/score/', client_request) assert response.status_code == 200 assert self.session.result_set.last().score == 2 - + def test_correctness(self): client_request = self.correctness_request('spam') response = self.client.post('/result/score/', client_request) @@ -249,7 +251,7 @@ def test_correctness(self): assert response.status_code == 200 assert self.session.result_set.count() == 2 assert self.session.result_set.last().score == 0 - + def test_song_sync(self): client_request = self.song_sync_recognize_request("TIMEOUT") response = self.client.post('/result/score/', client_request) diff --git a/backend/result/urls.py b/backend/result/urls.py index d989560ec..6eb92176a 100644 --- a/backend/result/urls.py +++ b/backend/result/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from result.views import current_profile, consent, get_result, score +from result.views import current_profile, consent, get_result, intermediate_score, score app_name = 'result' @@ -9,6 +9,8 @@ name='current_profile'), path('score/', score, name='result_score'), + path('intermediate_score/', intermediate_score, + name='intermediate_score'), path('consent/', consent, name='register_consent'), path('/', get_result, diff --git a/backend/result/utils.py b/backend/result/utils.py index 5cc7ad741..37eac21c5 100644 --- a/backend/result/utils.py +++ b/backend/result/utils.py @@ -4,6 +4,7 @@ from experiment.questions.profile_scoring_rules import PROFILE_SCORING_RULES from result.score import SCORING_RULES + def get_result(session, data): result_id = data.get('result_id') try: @@ -16,6 +17,7 @@ def get_result(session, data): raise return result + def handle_results(data, session): """ if the given_result is an array of results, retrieve and save results for all of them @@ -35,6 +37,7 @@ def handle_results(data, session): result = score_result(form_element, session) return result + def prepare_profile_result(question_key, participant, **kwargs): ''' Create a Result object, and provide its id to be serialized - question_key: the key of the question in the questionnaire dictionaries @@ -60,7 +63,8 @@ def prepare_result(question_key: str, session: Session, **kwargs) -> int: - session: the session on which the Result is going to be registered possible kwargs: - section: optionally, provide a section to which the Result is going to be tied - - expected_response: optionally, provide the correct answer, used for scoring + - expected_response: optionally, provide the correct answer, used for scoring + - json_data: optionally, provide json data tied to this result - comment: optionally, provide a comment to be saved in the database, e.g. "training phase" - scoring_rule: optionally, provide a scoring rule ''' @@ -71,6 +75,7 @@ def prepare_result(question_key: str, session: Session, **kwargs) -> int: ) return result.id + def score_result(data, session): """ Create a result for given session, based on the result data @@ -101,6 +106,7 @@ def score_result(data, session): result.save() return result + def apply_scoring_rule(result, data): scoring_rule = SCORING_RULES.get(result.scoring_rule) if scoring_rule: diff --git a/backend/result/views.py b/backend/result/views.py index 3c130f258..7626e447b 100644 --- a/backend/result/views.py +++ b/backend/result/views.py @@ -8,25 +8,11 @@ from result.models import Result from result.utils import handle_results + @require_POST def score(request): """Create a new result for the given session, and return followup action""" - # Current participant - participant = get_participant(request) - # Get session for current participant - session_id = request.POST.get("session_id") - - if not session_id: - return HttpResponseBadRequest("session_id not defined") - try: - session = Session.objects.get( - pk=session_id, participant__id=participant.id) - except Session.DoesNotExist: - return HttpResponseServerError("No session found") - - # Prevent creating results when session is finished - if session.is_finished(): - return HttpResponseServerError("Session has already finished") + session = verify_session(request) # Create result based on POST data json_data = request.POST.get("json_data") @@ -47,6 +33,15 @@ def score(request): return JsonResponse({'success': True}) + +@require_POST +def intermediate_score(request): + session = verify_session(request) + result = request.POST.get("json_data") + score = session.experiment_rules().calculate_intermediate_score(session, result) + return JsonResponse({'score': score}) + + @require_POST def consent(request): ''' Register consent: in contrast to `create`, available without sending a session_id ''' @@ -79,3 +74,24 @@ def get_result(request, question): return JsonResponse({"answer": result.given_response}, json_dumps_params={'indent': 4}) + + +def verify_session(request): + # Current participant + participant = get_participant(request) + # Get session for current participant + session_id = request.POST.get("session_id") + + if not session_id: + return HttpResponseBadRequest("session_id not defined") + try: + session = Session.objects.get( + pk=session_id, participant__id=participant.id) + except Session.DoesNotExist: + return HttpResponseServerError("No session found") + + # Prevent creating results when session is finished + if session.is_finished(): + return HttpResponseServerError("Session has already finished") + + return session diff --git a/backend/section/admin.py b/backend/section/admin.py index 0aa542dd7..bf1ec36fa 100644 --- a/backend/section/admin.py +++ b/backend/section/admin.py @@ -6,12 +6,14 @@ from django.shortcuts import render, redirect from django.http import JsonResponse, HttpResponse from django.conf import settings +from django.urls import path from django.utils.translation import gettext_lazy as _ import audioread from .models import Section, Playlist, Song -from .forms import AddSections +from .forms import AddSections, PlaylistAdminForm + class SectionAdmin(admin.ModelAdmin): list_per_page = 50 @@ -29,27 +31,32 @@ class SectionAdmin(admin.ModelAdmin): # @admin.register(Playlist) + class SongAdmin(admin.ModelAdmin): list_per_page = 50 - list_display = ('artist', 'name') - search_fields = ['artist', 'name'] + list_display = ('artist', 'name') + search_fields = ['artist', 'name'] # Prevent large inner join list_select_related = () + admin.site.register(Song, SongAdmin) + class PlaylistAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): + form = PlaylistAdminForm + change_form_template = 'change_form.html' list_display = ('name', 'section_count', 'experiment_count') search_fields = ['name', 'section__song__artist', 'section__song__name'] inline_actions = ['add_sections', - 'edit_sections', 'export_json', 'export_csv'] + 'edit_sections', 'export_csv'] def save_model(self, request, obj, form, change): # store proces value process_csv = obj.process_csv - + # save playlist (so it sure has an id) super().save_model(request, obj, form, change) @@ -94,8 +101,8 @@ def add_sections(self, request, obj, parent_obj=None): continue if this_artist and this_name: this_song, created = Song.objects.get_or_create(artist=this_artist, name=this_name) - new_section.song = this_song - file_path = settings.MEDIA_ROOT + '/' + str(new_section.filename) + new_section.song = this_song + file_path = settings.MEDIA_ROOT + '/' + str(new_section.filename) with audioread.audio_open(file_path) as f: new_section.duration = f.duration new_section.save() @@ -122,7 +129,7 @@ def edit_sections(self, request, obj, parent_obj=None): for section in sections: # Create pre fix to get the right section fields pre_fix = str(section.id) - # Get data and update section + # Get data and update section this_artist = request.POST.get(pre_fix + '_artist') this_name = request.POST.get(pre_fix + '_name') if this_artist and this_name: @@ -130,16 +137,12 @@ def edit_sections(self, request, obj, parent_obj=None): if created: section.song = this_song else: - section.song = this_song - if request.POST.get(pre_fix + '_restricted'): - section.song.restricted = [{"restricted": "nl"}] - else: - section.song.restricted = [] + section.song = this_song section.song.save() section.start_time = request.POST.get(pre_fix + '_start_time') section.duration = request.POST.get(pre_fix + '_duration') section.tag = request.POST.get(pre_fix + '_tag') - section.group = request.POST.get(pre_fix + '_group') + section.group = request.POST.get(pre_fix + '_group') section.save() obj.save() return redirect('/admin/section/playlist') @@ -153,19 +156,6 @@ def edit_sections(self, request, obj, parent_obj=None): 'sections': sections} ) - def export_json(self, request, obj, parent_obj=None): - """Export playlist data in JSON, force download""" - - response = JsonResponse( - obj.export_admin(), json_dumps_params={'indent': 4}) - - # force download attachment - response['Content-Disposition'] = 'attachment; filename="playlist_' + \ - str(obj.id)+'.json"' - return response - - export_json.short_description = "Export JSON" - def export_csv(self, request, obj, parent_obj=None): """Export playlist sections to csv, force download""" @@ -182,5 +172,16 @@ def export_csv(self, request, obj, parent_obj=None): export_csv.short_description = "Export Sections CSV" + def export_csv_view(self, request, pk): + obj = self.get_object(request, pk) + return self.export_csv(request, obj) + + def get_urls(self): + urls = super().get_urls() + custom_urls = [ + path('/export_csv/', self.export_csv_view, name='section_playlist_export_csv'), + ] + return custom_urls + urls + admin.site.register(Playlist, PlaylistAdmin) diff --git a/backend/section/apps.py b/backend/section/apps.py index e0d79b6f9..55d1f0a34 100644 --- a/backend/section/apps.py +++ b/backend/section/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig + class SectionConfig(AppConfig): name = 'section' diff --git a/backend/section/fixtures/playlist.json b/backend/section/fixtures/playlist.json index 7210e3e8b..d82588361 100644 --- a/backend/section/fixtures/playlist.json +++ b/backend/section/fixtures/playlist.json @@ -5,7 +5,7 @@ "fields": { "name": "综合曲库", "process_csv": false, - "csv": "AGA江海迦,小问题,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.00.000.int.mp3,0,0,int\r\nAGA江海迦,小问题,14.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.14.166.v1.mp3,0,0,v1\r\nAGA江海迦,小问题,58.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.58.150.c1.mp3,0,0,c1\r\nAGA江海迦,小问题,87.795,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.27.795.v2.mp3,0,0,v2\r\nAGA江海迦,小问题,117.068,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.57.068.c2.mp3,0,0,c2\r\nTFBOYS,宠爱,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.00.000.int.mp3,0,0,int\r\nTFBOYS,宠爱,16.645,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.16.645.v1.mp3,0,0,v1\r\nTFBOYS,宠爱,48.643,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.48.643.c1.mp3,0,0,c1\r\nTFBOYS,宠爱,81.055,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.21.055.b.mp3,0,0,b\r\nTFBOYS,宠爱,95.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.35.000.v2.mp3,0,0,v2\r\nTWINS,下一站天后,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.00.000.int.mp3,0,0,int\r\nTWINS,下一站天后,12.787,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.12.787.v1.mp3,0,0,v1\r\nTWINS,下一站天后,52.904,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.52.904.c1.mp3,0,0,c1\r\nTWINS,下一站天后,88.668,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou01.28.668.v2.mp3,0,0,v2\r\nTWINS,下一站天后,128.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou02.08.819.c2.mp3,0,0,c2\r\nTWINS,风筝与风,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.00.000.int.mp3,0,0,int\r\nTWINS,风筝与风,21.505,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.21.505.v1.mp3,0,0,v1\r\nTWINS,风筝与风,51.404,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.51.404.c1.mp3,0,0,c1\r\nTWINS,风筝与风,93.627,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu01.33.627.v2.mp3,0,0,v2\r\nTWINS,风筝与风,123.392,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu02.03.392.c2.mp3,0,0,c2\r\n严艺丹,三寸天堂,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.00.000.int.mp3,0,0,int\r\n严艺丹,三寸天堂,33.257,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.33.257.v1.mp3,0,0,v1\r\n严艺丹,三寸天堂,84.416,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun01.24.416.c1.mp3,0,0,c1\r\n严艺丹,三寸天堂,141.101,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun02.21.101.v2.mp3,0,0,v2\r\n严艺丹,三寸天堂,192.58,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun03.12.580.b.mp3,0,0,b\r\n侧田,男人KTV,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.00.000.int.mp3,0,0,int\r\n侧田,男人KTV,31.263,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.31.263.v1.mp3,0,0,v1\r\n侧田,男人KTV,61.19,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.01.190.v2.mp3,0,0,v2\r\n侧田,男人KTV,90.017,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.30.017.c1.mp3,0,0,c1\r\n侧田,男人KTV,193.219,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv03.13.219.c2.mp3,0,0,c2\r\n凤凰传奇,最炫民族风,3.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.03.229.int.mp3,0,0,int\r\n凤凰传奇,最炫民族风,23.132,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.23.132.v1.mp3,0,0,v1\r\n凤凰传奇,最炫民族风,57.174,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.57.174.c1.mp3,0,0,c1\r\n凤凰传奇,最炫民族风,98.756,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.38.756.b.mp3,0,0,b\r\n凤凰传奇,最炫民族风,113.851,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.53.851.v2.mp3,0,0,v2\r\n凤凰传奇,自由飞翔,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.01.080.int.mp3,0,0,int\r\n凤凰传奇,自由飞翔,33.219,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.33.219.v1.mp3,0,0,v1\r\n凤凰传奇,自由飞翔,53.898,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.53.898.b.mp3,0,0,b\r\n凤凰传奇,自由飞翔,74.536,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.14.536.v2.mp3,0,0,v2\r\n凤凰传奇,自由飞翔,95.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.35.173.c1.mp3,0,0,c1\r\n刘德华,独自去偷欢,4.023,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.04.023.int.mp3,0,0,int\r\n刘德华,独自去偷欢,27.681,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.27.681.v1.mp3,0,0,v1\r\n刘德华,独自去偷欢,60.672,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.00.672.c1.mp3,0,0,c1\r\n刘德华,独自去偷欢,84.048,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.24.048.v2.mp3,0,0,v2\r\n刘德华,独自去偷欢,116.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.56.999.c2.mp3,0,0,c2\r\n刘柏辛,Manta,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.00.000.int.mp3,0,0,int\r\n刘柏辛,Manta,20.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.20.229.v1.mp3,0,0,v1\r\n刘柏辛,Manta,60.245,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.00.245.c1.mp3,0,0,c1\r\n刘柏辛,Manta,90.22,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.30.220.v2.mp3,0,0,v2\r\n刘柏辛,Manta,110.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.50.203.c2.mp3,0,0,c2\r\n刘海波,别来无恙,3.157,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.03.157.int.mp3,0,0,int\r\n刘海波,别来无恙,30.128,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.30.128.v1.mp3,0,0,v1\r\n刘海波,别来无恙,83.034,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.23.034.c1.mp3,0,0,c1\r\n刘海波,别来无恙,109.599,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.49.599.b.mp3,0,0,b\r\n刘海波,别来无恙,142.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai02.22.434.v2.mp3,0,0,v2\r\n卫兰,心乱如麻,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.00.000.int.mp3,0,0,int\r\n卫兰,心乱如麻,17.415,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.17.415.v1.mp3,0,0,v1\r\n卫兰,心乱如麻,66.578,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.06.578.c1.mp3,0,0,c1\r\n卫兰,心乱如麻,107.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.47.053.v2.mp3,0,0,v2\r\n卫兰,心乱如麻,156.13,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan02.36.130.c2.mp3,0,0,c2\r\n周杰伦,菊花台,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.00.000.int.mp3,0,0,int\r\n周杰伦,菊花台,36.122,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.36.122.v1.mp3,0,0,v1\r\n周杰伦,菊花台,94.547,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua01.34.547.c1.mp3,0,0,c1\r\n周杰伦,菊花台,137.341,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.17.341.b.mp3,0,0,b\r\n周杰伦,菊花台,151.205,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.31.205.v2.mp3,0,0,v2\r\n周杰伦/费玉清,千里之外,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.00.000.int.mp3,0,0,int\r\n周杰伦/费玉清,千里之外,24.523,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.24.523.v1.mp3,0,0,v1\r\n周杰伦/费玉清,千里之外,56.985,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.56.985.b.mp3,0,0,b\r\n周杰伦/费玉清,千里之外,73.051,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li01.13.051.c1.mp3,0,0,c1\r\n周杰伦/费玉清,千里之外,122.118,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li02.02.118.v2.mp3,0,0,v2\r\n大张伟,倍儿爽,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.00.000.int.mp3,0,0,int\r\n大张伟,倍儿爽,24.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.24.158.c1.mp3,0,0,c1\r\n大张伟,倍儿爽,40.52,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.40.520.v1.mp3,0,0,v1\r\n大张伟,倍儿爽,86.588,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.26.588.b.mp3,0,0,b\r\n大张伟,倍儿爽,101.441,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.41.441.v2.mp3,0,0,v2\r\n孙悦,哭泣的百合花,2.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.02.656.int.mp3,0,0,int\r\n孙悦,哭泣的百合花,30.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.30.829.v1.mp3,0,0,v1\r\n孙悦,哭泣的百合花,53.489,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.53.489.c1.mp3,0,0,c1\r\n孙悦,哭泣的百合花,126.887,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.06.887.v2.mp3,0,0,v2\r\n孙悦,哭泣的百合花,150.874,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.30.874.c2.mp3,0,0,c2\r\n孙楠,不见不散,2.274,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.02.274.int.mp3,0,0,int\r\n孙楠,不见不散,20.327,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.20.327.v1.mp3,0,0,v1\r\n孙楠,不见不散,50.743,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.50.743.c1.mp3,0,0,c1\r\n孙楠,不见不散,103.722,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San01.43.722.v2.mp3,0,0,v2\r\n孙楠,不见不散,134.404,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San02.14.404.c2.mp3,0,0,c2\r\n宋冬野,董小姐,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.00.000.int.mp3,0,0,int\r\n宋冬野,董小姐,34.747,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.34.747.v1.mp3,0,0,v1\r\n宋冬野,董小姐,84.733,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie01.24.733.c1.mp3,0,0,c1\r\n宋冬野,董小姐,152.651,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie02.32.651.v2.mp3,0,0,v2\r\n宋冬野,董小姐,185.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie03.05.620.c2.mp3,0,0,c2\r\n容祖儿,搜神记,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.00.000.int.mp3,0,0,int\r\n容祖儿,搜神记,21.082,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.21.082.v1.mp3,0,0,v1\r\n容祖儿,搜神记,75.074,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen01.15.074.c1.mp3,0,0,c1\r\n容祖儿,搜神记,145.721,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.25.721.v2.mp3,0,0,v2\r\n容祖儿,搜神记,162.705,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.42.705.c2.mp3,0,0,c2\r\n张国荣,当年情,0.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.00.999.int.mp3,0,0,int\r\n张国荣,当年情,24.978,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.24.978.v1.mp3,0,0,v1\r\n张国荣,当年情,73.227,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing01.13.227.c1.mp3,0,0,c1\r\n张国荣,当年情,132.8,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.12.800.b.mp3,0,0,b\r\n张国荣,当年情,169.518,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.49.518.v2.mp3,0,0,v2\r\n张国荣,沉默是金,0.654,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.00.654.int.mp3,0,0,int\r\n张国荣,沉默是金,27.546,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.14.055.c1.mp3,0,0,c1\r\n张国荣,沉默是金,74.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.27.546.v1.mp3,0,0,v1\r\n张国荣,沉默是金,97.269,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.37.269.v2.mp3,0,0,v2\r\n张国荣,沉默是金,120.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo02.00.256.b.mp3,0,0,b\r\n张国荣,风继续吹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.00.000.int.mp3,0,0,int\r\n张国荣,风继续吹,27.857,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.27.857.v1.mp3,0,0,v1\r\n张国荣,风继续吹,98.558,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui01.38.558.c1.mp3,0,0,c1\r\n张国荣,风继续吹,171.783,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui02.51.783.v2.mp3,0,0,v2\r\n张国荣,风继续吹,242.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui04.02.231.c2.mp3,0,0,c2\r\n张学友,只想一生跟你走,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.00.000.int.mp3,0,0,int\r\n张学友,只想一生跟你走,37.163,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.37.163.v1.mp3,0,0,v1\r\n张学友,只想一生跟你走,109.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou01.49.166.c1.mp3,0,0,c1\r\n张学友,只想一生跟你走,155.215,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou02.35.215.v2.mp3,0,0,v2\r\n张学友,只想一生跟你走,212.55,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou03.32.550.c2.mp3,0,0,c2\r\n张学友,夕阳醉了,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,0,int\r\n张学友,夕阳醉了,37.929,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,0,v1\r\n张学友,夕阳醉了,97.674,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,0,c1\r\n张学友,夕阳醉了,168.636,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,0,v2\r\n张学友,夕阳醉了,228.368,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,0,c2\r\n张学友,每天爱你多一些,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.00.000.int.mp3,0,0,int\r\n张学友,每天爱你多一些,18.033,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.18.033.v1.mp3,0,0,v1\r\n张学友,每天爱你多一些,77.419,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo01.17.419.c1.mp3,0,0,c1\r\n张学友,每天爱你多一些,133.052,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo02.13.052.v2.mp3,0,0,v2\r\n张学友,每天爱你多一些,192.599,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo03.12.599.c2.mp3,0,0,c2\r\n张学友,秀发乱了,5.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.05.561.int.mp3,0,0,int\r\n张学友,秀发乱了,22.777,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.22.777.v1.mp3,0,0,v1\r\n张学友,秀发乱了,49.261,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.49.261.c1.mp3,0,0,c1\r\n张学友,秀发乱了,111.909,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa01.51.909.b.mp3,0,0,b\r\n张学友,秀发乱了,126.842,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa02.06.842.v2.mp3,0,0,v2\r\n张学友,饿狼传说,0.615,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.00.615.int.mp3,0,0,int\r\n张学友,饿狼传说,35.603,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.35.603.v1.mp3,0,0,v1\r\n张学友,饿狼传说,66.648,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.06.648.v2.mp3,0,0,v2\r\n张学友,饿狼传说,97.622,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.37.622.c1.mp3,0,0,c1\r\n张学友,饿狼传说,114.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.54.053.b.mp3,0,0,b\r\n张靓颖,这就是爱情,1.559,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.01.559.int.mp3,0,0,int\r\n张靓颖,这就是爱情,16.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.16.297.v1.mp3,0,0,v1\r\n张靓颖,这就是爱情,66.839,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi01.06.839.c1.mp3,0,0,c1\r\n张靓颖,这就是爱情,123.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.03.593.v2.mp3,0,0,v2\r\n张靓颖,这就是爱情,174.227,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.54.227.c2.mp3,0,0,c2\r\n戚薇/袁成杰,外滩十八号,1.768,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.01.768.int.mp3,0,0,int\r\n戚薇/袁成杰,外滩十八号,21.734,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.21.734.v1.mp3,0,0,v1\r\n戚薇/袁成杰,外滩十八号,53.634,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.53.634.c1.mp3,0,0,c1\r\n戚薇/袁成杰,外滩十八号,86.972,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.26.972.v2.mp3,0,0,v2\r\n戚薇/袁成杰,外滩十八号,118.467,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.58.467.c2.mp3,0,0,c2\r\n方力申,好心好报,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.00.000.int.mp3,0,0,int\r\n方力申,好心好报,16.849,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.16.849.v1.mp3,0,0,v1\r\n方力申,好心好报,47.362,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.47.362.c1.mp3,0,0,c1\r\n方力申,好心好报,85.634,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.25.634.v2.mp3,0,0,v2\r\n方力申,好心好报,116.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.56.240.c2.mp3,0,0,c2\r\n时代少年团,要你管,2.293,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.02.293.int.mp3,0,0,int\r\n时代少年团,要你管,11.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.11.620.v1.mp3,0,0,v1\r\n时代少年团,要你管,58.745,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.58.745.c1.mp3,0,0,c1\r\n时代少年团,要你管,75.524,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan01.15.524.v2.mp3,0,0,v2\r\n时代少年团,要你管,154.626,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan02.34.626.b2.mp3,0,0,b2\r\n李克勤,一生不变,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.00.000.int.mp3,0,0,int\r\n李克勤,一生不变,30.968,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.30.968.v1.mp3,0,0,v1\r\n李克勤,一生不变,88.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian01.28.734.c1.mp3,0,0,c1\r\n李克勤,一生不变,124.72,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.04.721.v2.mp3,0,0,v2\r\n李克勤,一生不变,175.383,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.55.383.c2.mp3,0,0,c2\r\n李宇春,无价之姐,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.01.080.int.mp3,0,0,int\r\n李宇春,无价之姐,31.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.31.203.v1.mp3,0,0,v1\r\n李宇春,无价之姐,61.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.01.656.b.mp3,0,0,b\r\n李宇春,无价之姐,76.4,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.16.400.c1.mp3,0,0,c1\r\n李宇春,无价之姐,106.66,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.46.660.b2.mp3,0,0,b2\r\n李泉,时间飞了,0.59,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.00.590.v1.mp3,0,0,v1\r\n李泉,时间飞了,28.162,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.28.162.c1.mp3,0,0,c1\r\n李泉,时间飞了,56.999,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.56.999.b.mp3,0,0,b\r\n李泉,时间飞了,86.384,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.26.384.v2.mp3,0,0,v2\r\n李泉,时间飞了,113.998,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.53.998.c2.mp3,0,0,c2\r\n李荣浩,年少有为,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.00.000.int.mp3,0,0,int\r\n李荣浩,年少有为,29.703,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.29.703.v1.mp3,0,0,v1\r\n李荣浩,年少有为,87.343,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao01.27.343.c1.mp3,0,0,c1\r\n李荣浩,年少有为,146.25,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao02.26.250.v2.mp3,0,0,v2\r\n李荣浩,年少有为,203.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao03.23.732.c2.mp3,0,0,c2\r\n杨千嬅,姊妹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.00.000.int.mp3,0,0,int\r\n杨千嬅,姊妹,14.157,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.14.157.v1.mp3,0,0,v1\r\n杨千嬅,姊妹,69.754,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei01.09.754.c1.mp3,0,0,c1\r\n杨千嬅,姊妹,120.031,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.00.031.v2.mp3,0,0,v2\r\n杨千嬅,姊妹,175.714,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.55.714.c2.mp3,0,0,c2\r\n杨千嬅,小城大事,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.00.000.int.mp3,0,0,int\r\n杨千嬅,小城大事,17.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.17.734.v1.mp3,0,0,v1\r\n杨千嬅,小城大事,104.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.04.212.c1.mp3,0,0,c1\r\n杨千嬅,小城大事,112.828,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.52.828.v2.mp3,0,0,v2\r\n杨千嬅,小城大事,145.551,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng02.25.551.c2.mp3,0,0,c2\r\n杨千嬅,少女的祈祷,0.753,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.00.753.int.mp3,0,0,int\r\n杨千嬅,少女的祈祷,7.988,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.07.988.v1.mp3,0,0,v1\r\n杨千嬅,少女的祈祷,40.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.40.213.c1.mp3,0,0,c1\r\n杨千嬅,少女的祈祷,87.25,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.27.250.b.mp3,0,0,b\r\n杨千嬅,少女的祈祷,105.911,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.45.911.v2.mp3,0,0,v2\r\n杨坤,无所谓,1.307,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.01.307.int.mp3,0,0,int\r\n杨坤,无所谓,16.381,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.16.381.v1.mp3,0,0,v1\r\n杨坤,无所谓,80.294,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei01.20.894.c1.mp3,0,0,c1\r\n杨坤,无所谓,128.195,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.08.195.v2.mp3,0,0,v2\r\n杨坤,无所谓,160.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.40.370.c2.mp3,0,0,c2\r\n杨坤,那一天,2.268,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.02.268.int.mp3,0,0,int\r\n杨坤,那一天,31.798,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.31.798.v1.mp3,0,0,v1\r\n杨坤,那一天,90.218,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian01.30.218.c1.mp3,0,0,c1\r\n杨坤,那一天,120.587,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.00.587.b.mp3,0,0,b\r\n杨坤,那一天,149.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.29.970.v2.mp3,0,0,v2\r\n林子祥,在水中央,1.092,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.01.092.int.mp3,0,0,int\r\n林子祥,在水中央,31.294,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.31.294.v1.mp3,0,0,v1\r\n林子祥,在水中央,79.344,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.69.344.c1.mp3,0,0,c1\r\n林子祥,在水中央,103.341,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.43.341.v2.mp3,0,0,v2\r\n林子祥,在水中央,128.012,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang02.08.012.b.mp3,0,0,b\r\n林子祥,长路漫漫伴你闯,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.00.000.int.mp3,0,0,int\r\n林子祥,长路漫漫伴你闯,18.794,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.18.794.v1.mp3,0,0,v1\r\n林子祥,长路漫漫伴你闯,56.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.56.055.c1.mp3,0,0,c1\r\n林子祥,长路漫漫伴你闯,89.056,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu01.29.056.b.mp3,0,0,b\r\n林子祥,长路漫漫伴你闯,130.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu02.10.561.v2.mp3,0,0,v2\r\n梅艳芳,Stand By Me,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.00.000.int.mp3,0,0,int\r\n梅艳芳,Stand By Me,11.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.11.256.v1.mp3,0,0,v1\r\n梅艳芳,Stand By Me,43.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.43.212.c1.mp3,0,0,c1\r\n梅艳芳,Stand By Me,60.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By01.00.539.v2.mp3,0,0,v2\r\n梅艳芳,Stand By Me,125.317,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By02.05.317.v3.mp3,0,0,v3\r\n梅艳芳,似水流年,1.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.01.150.int.mp3,0,0,int\r\n梅艳芳,似水流年,27.379,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.27.379.v1.mp3,0,0,v1\r\n梅艳芳,似水流年,92.979,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian01.32.979.c1.mp3,0,0,c1\r\n梅艳芳,似水流年,134.296,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.14.296.b.mp3,0,0,b\r\n梅艳芳,似水流年,158.423,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.38.423.c2.mp3,0,0,c2\r\n梅艳芳,淑女,0.141,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.00.141.int.mp3,0,0,int\r\n梅艳芳,淑女,27.353,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.27.353.v1.mp3,0,0,v1\r\n梅艳芳,淑女,87.427,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv01.27.427.c1.mp3,0,0,c1\r\n梅艳芳,淑女,125.948,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.05.948.c2.mp3,0,0,c2\r\n梅艳芳,淑女,142.327,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.22.327.v2.mp3,0,0,v2\r\n梅艳芳,蔓珠沙华,1.188,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.01.188.int.mp3,0,0,int\r\n梅艳芳,蔓珠沙华,19.375,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.19.375.v1.mp3,0,0,v1\r\n梅艳芳,蔓珠沙华,85.221,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.25.221.c1.mp3,0,0,c1\r\n梅艳芳,蔓珠沙华,89.373,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.29.373.v2.mp3,0,0,v2\r\n梅艳芳,蔓珠沙华,241.238,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu04.01.238.c2.mp3,0,0,c2\r\n毛不易,平凡的一天,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.00.000.int.mp3,0,0,int\r\n毛不易,平凡的一天,15.483,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.15.483.v1.mp3,0,0,v1\r\n毛不易,平凡的一天,75.475,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian01.15.474.c1.mp3,0,0,c1\r\n毛不易,平凡的一天,122.638,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian02.02.638.v2.mp3,0,0,v2\r\n毛不易,平凡的一天,182.202,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian03.02.202.c2.mp3,0,0,c2\r\n毛不易,消愁,0.465,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.00.465.int.mp3,0,0,int\r\n毛不易,消愁,17.912,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.17.912.v1.mp3,0,0,v1\r\n毛不易,消愁,52.806,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.52.806.c1.mp3,0,0,c1\r\n毛不易,消愁,89.794,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.29.794.b.mp3,0,0,b\r\n毛不易,消愁,107.358,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.47.358.c2.mp3,0,0,c2\r\n水木年华,Forever Young,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.00.000.int.mp3,0,0,int\r\n水木年华,Forever Young,36.612,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.36.612.v1.mp3,0,0,v1\r\n水木年华,Forever Young,72.826,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.12.826.c1.mp3,0,0,c1\r\n水木年华,Forever Young,109.27,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.49.270.b.mp3,0,0,b\r\n水木年华,Forever Young,127.177,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young02.07.177.v2.mp3,0,0,v2\r\n汪峰,存在,1.153,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.01.153.v1.mp3,0,0,v1\r\n汪峰,存在,34.728,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.34.728.c1.mp3,0,0,c1\r\n汪峰,存在,72.685,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.12.685.b.mp3,0,0,b\r\n汪峰,存在,106.479,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.46.479.v2.mp3,0,0,v2\r\n汪峰,存在,139.997,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai02.19.997.c2.mp3,0,0,c2\r\n汪明荃,京华春梦,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.00.000.int.mp3,0,0,int\r\n汪明荃,京华春梦,17.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.17.631.v1.mp3,0,0,v1\r\n汪明荃,京华春梦,68.064,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.08.064.c1.mp3,0,0,c1\r\n汪明荃,京华春梦,93.314,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.33.314.v2.mp3,0,0,v2\r\n汪明荃,京华春梦,131.273,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua02.11.273.c2.mp3,0,0,c2\r\n汪苏泷,一笑倾城,0.94,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.00.940.int.mp3,0,0,int\r\n汪苏泷,一笑倾城,49.819,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.49.819.v1.mp3,0,0,v1\r\n汪苏泷,一笑倾城,81.251,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.21.251.c1.mp3,0,0,c1\r\n汪苏泷,一笑倾城,93.849,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.53.849.c2.mp3,0,0,c2\r\n汪苏泷,一笑倾城,131.427,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao02.11.427.v2.mp3,0,0,v2\r\n海伦,桥边姑娘,2.138,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.02.138.int.mp3,0,0,int\r\n海伦,桥边姑娘,16.984,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.16.984.v1.mp3,0,0,v1\r\n海伦,桥边姑娘,56.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.53.593.c1.mp3,0,0,c1\r\n海伦,桥边姑娘,85.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.25.306.b.mp3,0,0,b\r\n海伦,桥边姑娘,97.598,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.37.598.v2.mp3,0,0,v2\r\n王啸坤,带我去寻找,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.00.000.int.mp3,0,0,int\r\n王啸坤,带我去寻找,22.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.22.694.v1.mp3,0,0,v1\r\n王啸坤,带我去寻找,65.72,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.05.720.c1.mp3,0,0,c1\r\n王啸坤,带我去寻找,110.948,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.50.048.v2.mp3,0,0,v2\r\n王啸坤,带我去寻找,129.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao02.09.899.b.mp3,0,0,b\r\n王筝/水木年华,没有人比我更爱你,0.741,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.00.741.int.mp3,0,0,int\r\n王筝/水木年华,没有人比我更爱你,12.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.12.732.v1.mp3,0,0,v1\r\n王筝/水木年华,没有人比我更爱你,62.319,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren01.02.319.c1.mp3,0,0,c1\r\n王筝/水木年华,没有人比我更爱你,104.353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.04.353.v2.mp3,0,0,v2\r\n王筝/水木年华,没有人比我更爱你,163.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.43.899.c2.mp3,0,0,c2\r\n王菲,容易受伤的女人,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.00.000.int.mp3,0,0,int\r\n王菲,容易受伤的女人,17.644,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.17.644.v1.mp3,0,0,v1\r\n王菲,容易受伤的女人,61.181,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.01.181.c1.mp3,0,0,c1\r\n王菲,容易受伤的女人,76.667,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.16.667.v2.mp3,0,0,v2\r\n王菲,容易受伤的女人,148.342,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi02.28.342.c2.mp3,0,0,c2\r\n王菲,给自己的情书,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.00.000.int.mp3,0,0,int\r\n王菲,给自己的情书,12.538,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.12.538.v1.mp3,0,0,v1\r\n王菲,给自己的情书,46.768,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.46.768.c1.mp3,0,0,c1\r\n王菲,给自己的情书,81.085,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.21.085.v2.mp3,0,0,v2\r\n王菲,给自己的情书,115.336,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.55.336.c2.mp3,0,0,c2\r\n甄妮,明日话今天,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.00.000.int.mp3,0,0,int\r\n甄妮,明日话今天,13.126,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.13.126.v1.mp3,0,0,v1\r\n甄妮,明日话今天,39.421,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.39.421.c1.mp3,0,0,c1\r\n甄妮,明日话今天,67.248,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.07.248.b.mp3,0,0,b\r\n甄妮,明日话今天,93.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.33.631.v2.mp3,0,0,v2\r\n罗中旭,为爱存在,1.917,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.01.917.int.mp3,0,0,int\r\n罗中旭,为爱存在,13.961,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.13.961.v1.mp3,0,0,v1\r\n罗中旭,为爱存在,60.551,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.00.551.c1.mp3,0,0,c1\r\n罗中旭,为爱存在,97.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.37.765.v2.mp3,0,0,v2\r\n罗中旭,为爱存在,159.567,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai02.39.567.c2.mp3,0,0,c2\r\n罗中旭,爱在你身边,2.134,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.02.134.int.mp3,0,0,int\r\n罗中旭,爱在你身边,48.727,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.48.727.v1.mp3,0,0,v1\r\n罗中旭,爱在你身边,108.271,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian01.48.271.c1.mp3,0,0,c1\r\n罗中旭,爱在你身边,131.7,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.11.700.b.mp3,0,0,b\r\n罗中旭,爱在你身边,177.056,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.57.056.c3.mp3,0,0,c3\r\n罗中旭,让你心动,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.00.000.int.mp3,0,0,int\r\n罗中旭,让你心动,9.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.09.434.v1.mp3,0,0,v1\r\n罗中旭,让你心动,69.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.09.158.c1.mp3,0,0,c1\r\n罗中旭,让你心动,110.24,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.50.240.v2.mp3,0,0,v2\r\n罗中旭,让你心动,147.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong02.47.628.c2.mp3,0,0,c2\r\n罗文,好歌献给你,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.00.000.int.mp3,0,0,int\r\n罗文,好歌献给你,20.282,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.20.284.v1.mp3,0,0,v1\r\n罗文,好歌献给你,65.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.65.539.c1.mp3,0,0,c1\r\n罗文,好歌献给你,119.821,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge01.59.821.v2.mp3,0,0,v2\r\n罗文,好歌献给你,142.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge02.22.213.c2.mp3,0,0,c2\r\n罗文,小李飞刀,0.894,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.00.894.int.mp3,0,0,int\r\n罗文,小李飞刀,17.293,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.17.293.v1.mp3,0,0,v1\r\n罗文,小李飞刀,66.265,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.06.265.c1.mp3,0,0,c1\r\n罗文,小李飞刀,90.043,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.30.043.v2.mp3,0,0,v2\r\n罗文,小李飞刀,114.193,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.54.193.b.mp3,0,0,b\r\n罗文/甄妮,时间始终你好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.00.000.int.mp3,0,0,int\r\n罗文/甄妮,时间始终你好,14.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.14.231.v1.mp3,0,0,v1\r\n罗文/甄妮,时间始终你好,41.895,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.41.896.c1.mp3,0,0,c1\r\n罗文/甄妮,时间始终你好,57.573,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.57.573.v2.mp3,0,0,v2\r\n罗文/甄妮,时间始终你好,86.063,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian01.25.063.b.mp3,0,0,b\r\n羽泉,最美,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.00.000.int.mp3,0,0,int\r\n羽泉,最美,30.971,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.30.971.v1.mp3,0,0,v1\r\n羽泉,最美,71.261,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei01.11.261.c1.mp3,0,0,c1\r\n羽泉,最美,83.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei02.23.173.v2.mp3,0,0,v2\r\n羽泉,最美,93.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei03.03.173.c2.mp3,0,0,c2\r\n肖战,余年,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.00.000.int.mp3,0,0,int\r\n肖战,余年,21.716,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.21.716.v1.mp3,0,0,v1\r\n肖战,余年,60.537,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.00.537.c1.mp3,0,0,c1\r\n肖战,余年,118.834,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.58.834.v2.mp3,0,0,v2\r\n肖战,余年,157.224,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian02.37.224.c2.mp3,0,0,c2\r\n范晓萱,哭了,0.366,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.00.366.int.mp3,0,0,int\r\n范晓萱,哭了,24.564,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.24.564.v1.mp3,0,0,v1\r\n范晓萱,哭了,49.531,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.49.531.c1.mp3,0,0,c1\r\n范晓萱,哭了,86.835,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.26.385.v2.mp3,0,0,v2\r\n范晓萱,哭了,111.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.51.765.c2.mp3,0,0,c2\r\n草蜢,失恋,0.829,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.00.829.int.mp3,0,0,int\r\n草蜢,失恋,16.639,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.16.639.v1.mp3,0,0,v1\r\n草蜢,失恋,45.632,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.45.632.c1.mp3,0,0,c1\r\n草蜢,失恋,60.418,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.00.418.v2.mp3,0,0,v2\r\n草蜢,失恋,74.956,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.14.956.b.mp3,0,0,b\r\n蔡徐坤,情人,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.00.000.int.mp3,0,0,int\r\n蔡徐坤,情人,11.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.11.370.v1.mp3,0,0,v1\r\n蔡徐坤,情人,43.568,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.43.568.c1.mp3,0,0,c1\r\n蔡徐坤,情人,73.533,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.13.533.v2.mp3,0,0,v2\r\n蔡徐坤,情人,104.69,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.44.690.c2.mp3,0,0,c2\r\n薛之谦,认真的雪,1.61,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.01.610.int.mp3,0,0,int\r\n薛之谦,认真的雪,23.982,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.23.982.v1.mp3,0,0,v1\r\n薛之谦,认真的雪,61.015,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue01.01.015.c1.mp3,0,0,c1\r\n薛之谦,认真的雪,124.572,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.04.572.v2.mp3,0,0,v2\r\n薛之谦,认真的雪,143.385,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.23.385.c2.mp3,0,0,c2\r\n薛凯琪,奇洛李维斯回信,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.00.000.int.mp3,0,0,int\r\n薛凯琪,奇洛李维斯回信,28.511,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.28.511.v1.mp3,0,0,v1\r\n薛凯琪,奇洛李维斯回信,76.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.16.770.c1.mp3,0,0,c1\r\n薛凯琪,奇洛李维斯回信,118.029,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.58.029.v2.mp3,0,0,v2\r\n薛凯琪,奇洛李维斯回信,166.07,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si02.46.070.c2.mp3,0,0,c2\r\n许志安,女人之苦,1.472,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.01.472.int.mp3,0,0,int\r\n许志安,女人之苦,34.921,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.34.921.v1.mp3,0,0,v1\r\n许志安,女人之苦,72.563,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.12.563.v2.mp3,0,3,v2\r\n许志安,女人之苦,82.526,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.22.526.c1.mp3,0,0,c1\r\n许志安,女人之苦,157.947,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku02.37.947.c2.mp3,0,0,c2\r\n许志安,男人最痛,1.349,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.01.349.int.mp3,0,0,int\r\n许志安,男人最痛,34.598,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.34.598.v1.mp3,0,0,v1\r\n许志安,男人最痛,92.89,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui01.32.890.c1.mp3,0,0,c1\r\n许志安,男人最痛,150.755,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui02.30.755.v2.mp3,0,0,v2\r\n许志安,男人最痛,182.081,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui03.02.081.c2.mp3,0,0,c2\r\n谢东,笑脸,0.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.00.970.int.mp3,0,0,int\r\n谢东,笑脸,18.112,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.18.112.v1.mp3,0,0,v1\r\n谢东,笑脸,53.328,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.53.328.c1.mp3,0,0,c1\r\n谢东,笑脸,99.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian01.39.945.v2.mp3,0,0,v2\r\n谢东,笑脸,135.181,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian02.15.181.c2.mp3,0,0,c2\r\n谭咏麟,爱在深秋,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.00.000.int.mp3,0,0,int\r\n谭咏麟,爱在深秋,19.839,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.19.839.v1.mp3,0,0,v1\r\n谭咏麟,爱在深秋,73.253,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.13.253.c1.mp3,0,0,c1\r\n谭咏麟,爱在深秋,99.036,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.39.036.v2.mp3,0,0,v2\r\n谭咏麟,爱在深秋,166.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu02.46.266.c2.mp3,0,0,c2\r\n谭咏麟,爱情陷阱,1.148,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.01.148.int.mp3,0,0,int\r\n谭咏麟,爱情陷阱,20.623,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.20.623.v1.mp3,0,0,v1\r\n谭咏麟,爱情陷阱,72.468,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.12.468.c1.mp3,0,0,c1\r\n谭咏麟,爱情陷阱,92.441,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.32.441.b.mp3,0,0,b\r\n谭咏麟,爱情陷阱,111.859,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.51.859.v2.mp3,0,0,v2\r\n赵磊,成都,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.00.000.int.mp3,0,0,int\r\n赵磊,成都,18.028,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.18.208.v1.mp3,0,0,v1\r\n赵磊,成都,51.586,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.51.585.v2.mp3,0,0,v2\r\n赵磊,成都,83.3353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.23.335.c1.mp3,0,0,c1\r\n赵磊,成都,116.573,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.56.573.b.mp3,0,0,b\r\n郑中基,无赖,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.00.000.int.mp3,0,0,int\r\n郑中基,无赖,15.211,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.15.211.v1.mp3,0,0,v1\r\n郑中基,无赖,66.38,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai01.06.380.c1.mp3,0,0,c1\r\n郑中基,无赖,123.42,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.03.420.v2.mp3,0,0,v2\r\n郑中基,无赖,157.142,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.37.142.c2.mp3,0,0,c2\r\n郑秀文,终身美丽,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.00.000.int.mp3,0,0,int\r\n郑秀文,终身美丽,13.426,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.13.426.v1.mp3,0,0,v1\r\n郑秀文,终身美丽,68.817,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.08.817.c1.mp3,0,0,c1\r\n郑秀文,终身美丽,112.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.52.819.v2.mp3,0,0,v2\r\n郑秀文,终身美丽,138.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen02.18.770.c2.mp3,0,0,c2\r\n郑融,红绿灯,3.305,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.03.305.int.mp3,0,0,int\r\n郑融,红绿灯,20.984,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.20.984.v1.mp3,0,0,v1\r\n郑融,红绿灯,54.459,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.54.459.c1.mp3,0,0,c1\r\n郑融,红绿灯,89.5498,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.29.548.b.mp3,0,0,b\r\n郑融,红绿灯,105.075,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.45.075.v2.mp3,0,0,v2\r\n郑钧,回到拉萨,2.233,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.02.233.int.mp3,0,0,int\r\n郑钧,回到拉萨,28.066,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.28.066.v1.mp3,0,0,v1\r\n郑钧,回到拉萨,101.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa01.41.852.c1.mp3,0,0,c1\r\n郑钧,回到拉萨,171.001,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa02.51.001.b.mp3,0,0,b\r\n郑钧,回到拉萨,205.712,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa03.25.712.v2.mp3,0,0,v2\r\n郭富城,Para Para Sakura,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.00.000.int.mp3,0,0,int\r\n郭富城,Para Para Sakura,28.92,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.28.920.v1.mp3,0,0,v1\r\n郭富城,Para Para Sakura,54.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.54.398.c1.mp3,0,0,c1\r\n郭富城,Para Para Sakura,79.73,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.19.730.v2.mp3,0,0,v2\r\n郭富城,Para Para Sakura,105.171,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.45.171.c2.mp3,0,0,c2\r\n陈奕迅,K歌之王,2.307,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.02.307.int.mp3,0,0,int\r\n陈奕迅,K歌之王,13.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.13.266.v1.mp3,0,0,v1\r\n陈奕迅,K歌之王,63.987,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.03.987.c1.mp3,0,0,c1\r\n陈奕迅,K歌之王,115.357,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.55.357.v2.mp3,0,0,v2\r\n陈奕迅,K歌之王,139.916,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge02.19.916.c2.mp3,0,0,c2\r\n陈奕迅,Shall We Talk,5.765,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.05.765.int.mp3,0,0,int\r\n陈奕迅,Shall We Talk,10.125,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.10.125.v1.mp3,0,0,v1\r\n陈奕迅,Shall We Talk,49.035,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.49.035.c1.mp3,0,0,c1\r\n陈奕迅,Shall We Talk,88.98,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk01.28.980.v2.mp3,0,0,v2\r\n陈奕迅,Shall We Talk,134.893,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk02.14.893.c2.mp3,0,0,c2\r\n陈奕迅,夕阳无限好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,0,int\r\n陈奕迅,夕阳无限好,24.413,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,0,v1\r\n陈奕迅,夕阳无限好,73.359,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,0,c1\r\n陈奕迅,夕阳无限好,144.303,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,0,v2\r\n陈奕迅,夕阳无限好,169.766,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,0,c2\r\n陈奕迅,天下无双,1.191,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.01.191.int.mp3,0,0,int\r\n陈奕迅,天下无双,24.115,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.24.115.v1.mp3,0,0,v1\r\n陈奕迅,天下无双,69.836,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.09.836.b.mp3,0,0,b\r\n陈奕迅,天下无双,79.725,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.19.725.v2.mp3,0,0,v2\r\n陈奕迅,天下无双,100.448,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.40.448.c1.mp3,0,0,c1\r\n陈奕迅,富士山下,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.00.000.int.mp3,0,0,int\r\n陈奕迅,富士山下,22.083,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.22.083.v1.mp3,0,0,v1\r\n陈奕迅,富士山下,58.65,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.58.650.c1.mp3,0,0,c1\r\n陈奕迅,富士山下,102.915,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi01.42.916.v2.mp3,0,0,v2\r\n陈奕迅,富士山下,139.56,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi02.19.560.c2.mp3,0,0,c2\r\n陈奕迅,陀飞轮,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.00.000.int.mp3,0,0,int\r\n陈奕迅,陀飞轮,15.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.15.398.v1.mp3,0,0,v1\r\n陈奕迅,陀飞轮,71.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.11.240.c1.mp3,0,0,c1\r\n陈奕迅,陀飞轮,113.128,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.53.128.v2.mp3,0,0,v2\r\n陈奕迅,陀飞轮,142.661,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun02.22.661.c2.mp3,0,0,c2\r\n陈明,为了,10.652,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.10.652.int.mp3,0,0,int\r\n陈明,为了,31.213,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.31.213.v1.mp3,0,0,v1\r\n陈明,为了,61.145,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.01.145.b.mp3,0,0,b\r\n陈明,为了,104.931,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.44.931.c1.mp3,0,0,c1\r\n陈明,为了,149.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le02.29.945.v2.mp3,0,0,v2\r\n陈楚生,一个人唱情歌,1.12,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.01.120.int.mp3,0,0,int\r\n陈楚生,一个人唱情歌,16.356,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.16.356.v1.mp3,0,0,v1\r\n陈楚生,一个人唱情歌,48.322,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.48.322.c1.mp3,0,0,c1\r\n陈楚生,一个人唱情歌,94.255,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren01.34.255.v2.mp3,0,0,v2\r\n陈楚生,一个人唱情歌,126.314,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren02.06.314.c2.mp3,0,0,c2\r\n陈琳,不想骗自己,0.758,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.00.758.int.mp3,0,0,int\r\n陈琳,不想骗自己,33.298,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.33.298.v1.mp3,0,0,v1\r\n陈琳,不想骗自己,72.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.12.297.c1.mp3,0,0,c1\r\n陈琳,不想骗自己,94.647,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.34.647.v2.mp3,0,0,v2\r\n陈琳,不想骗自己,133.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji02.13.646.c2.mp3,0,0,c2\r\n陈琳,爱就爱了,1.126,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.01.126.int.mp3,0,0,int\r\n陈琳,爱就爱了,32.557,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.32.557.v1.mp3,0,0,v1\r\n陈琳,爱就爱了,89.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.29.285.c1.mp3,0,0,c1\r\n陈琳,爱就爱了,119.368,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.59.368.b.mp3,0,0,b\r\n陈琳,爱就爱了,150.738,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai02.30.738.v2.mp3,0,0,v2\r\n陈粒,小半,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.00.000.v1.mp3,0,0,v1\r\n陈粒,小半,51.323,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.51.323.c1.mp3,0,0,c1\r\n陈粒,小半,91.659,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban01.31.659.v2.mp3,0,0,v2\r\n陈粒,小半,143.018,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban02.23.018.c2.mp3,0,0,c2\r\n陈粒,小半,187.847,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban03.07.847.b.mp3,0,0,b\r\n霍尊,卷珠帘,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.00.000.int.mp3,0,0,int\r\n霍尊,卷珠帘,26.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.26.852.v1.mp3,0,0,v1\r\n霍尊,卷珠帘,99.667,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian01.39.667.c1.mp3,0,0,c1\r\n霍尊,卷珠帘,133.642,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.13.642.b.mp3,0,0,b\r\n霍尊,卷珠帘,171.266,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.51.266.c2.mp3,0,0,c2\r\n韩庚,My Logo,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.00.000.int.mp3,0,0,int\r\n韩庚,My Logo,15.674,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.15.674.v1.mp3,0,0,v1\r\n韩庚,My Logo,45.821,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.45.821.c1.mp3,0,0,c1\r\n韩庚,My Logo,69.891,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.09.891.v2.mp3,0,0,v2\r\n韩庚,My Logo,99.89,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.39.890.c2.mp3,0,0,c2\r\n韩红,天亮了,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.00.000.int.mp3,0,0,int\r\n韩红,天亮了,13.259,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.13.259.v1.mp3,0,0,v1\r\n韩红,天亮了,68.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.08.694.c1.mp3,0,0,c1\r\n韩红,天亮了,100.959,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.40.959.b.mp3,0,0,b\r\n韩红,天亮了,110.688,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.50.688.v2.mp3,0,0,v2\r\n马頔,南山南,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.00.000.c1.mp3,0,0,c1\r\n马頔,南山南,29.929,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.29.929.v1.mp3,0,0,v1\r\n马頔,南山南,133.151,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan02.13.151.v2.mp3,0,0,v2\r\n马頔,南山南,192.455,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.12.455.c2.mp3,0,0,c2\r\n马頔,南山南,229.26,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.49.260.b2.mp3,0,0,b2\r\n高林生,牵挂你的人是我,1.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.01.306.int.mp3,0,0,int\r\n高林生,牵挂你的人是我,18.431,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.18.431.v1.mp3,0,0,v1\r\n高林生,牵挂你的人是我,54.429,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.54.429.c1.mp3,0,0,c1\r\n高林生,牵挂你的人是我,92.618,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua01.32.618.b.mp3,0,0,b\r\n高林生,牵挂你的人是我,183.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua03.03.628.c2.mp3,0,0,c2\r\n黄征,野菊花,1.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.01.646.int.mp3,0,0,int\r\n黄征,野菊花,24.217,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.24.217.v1.mp3,0,0,v1\r\n黄征,野菊花,83.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.23.829.c1.mp3,0,0,c1\r\n黄征,野菊花,114.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.54.285.v2.mp3,0,0,v2\r\n黄征,野菊花,203.789,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua03.23.789.c2.mp3,0,0,c2\r\n黎明,对不起 我爱你,1.103,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.01.103.int.mp3,0,0,int\r\n黎明,对不起 我爱你,28.529,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.28.529.v1.mp3,0,0,v1\r\n黎明,对不起 我爱你,121.174,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.01.174.b.mp3,0,0,b\r\n黎明,对不起 我爱你,139.74,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.19.740.v2.mp3,0,0,v2\r\n黎明,对不起 我爱你,157.295,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.37.295.c2.mp3,0,0,c2\r\n" + "csv": "AGA江海迦,小问题,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.00.000.int.mp3,0,int\r\nAGA江海迦,小问题,14.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.14.166.v1.mp3,0,v1\r\nAGA江海迦,小问题,58.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.58.150.c1.mp3,0,c1\r\nAGA江海迦,小问题,87.795,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.27.795.v2.mp3,0,v2\r\nAGA江海迦,小问题,117.068,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.57.068.c2.mp3,0,c2\r\nTFBOYS,宠爱,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.00.000.int.mp3,0,int\r\nTFBOYS,宠爱,16.645,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.16.645.v1.mp3,0,v1\r\nTFBOYS,宠爱,48.643,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.48.643.c1.mp3,0,c1\r\nTFBOYS,宠爱,81.055,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.21.055.b.mp3,0,b\r\nTFBOYS,宠爱,95.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.35.000.v2.mp3,0,v2\r\nTWINS,下一站天后,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.00.000.int.mp3,0,int\r\nTWINS,下一站天后,12.787,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.12.787.v1.mp3,0,v1\r\nTWINS,下一站天后,52.904,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.52.904.c1.mp3,0,c1\r\nTWINS,下一站天后,88.668,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou01.28.668.v2.mp3,0,v2\r\nTWINS,下一站天后,128.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou02.08.819.c2.mp3,0,c2\r\nTWINS,风筝与风,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.00.000.int.mp3,0,int\r\nTWINS,风筝与风,21.505,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.21.505.v1.mp3,0,v1\r\nTWINS,风筝与风,51.404,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.51.404.c1.mp3,0,c1\r\nTWINS,风筝与风,93.627,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu01.33.627.v2.mp3,0,v2\r\nTWINS,风筝与风,123.392,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu02.03.392.c2.mp3,0,c2\r\n严艺丹,三寸天堂,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.00.000.int.mp3,0,int\r\n严艺丹,三寸天堂,33.257,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.33.257.v1.mp3,0,v1\r\n严艺丹,三寸天堂,84.416,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun01.24.416.c1.mp3,0,c1\r\n严艺丹,三寸天堂,141.101,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun02.21.101.v2.mp3,0,v2\r\n严艺丹,三寸天堂,192.58,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun03.12.580.b.mp3,0,b\r\n侧田,男人KTV,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.00.000.int.mp3,0,int\r\n侧田,男人KTV,31.263,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.31.263.v1.mp3,0,v1\r\n侧田,男人KTV,61.19,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.01.190.v2.mp3,0,v2\r\n侧田,男人KTV,90.017,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.30.017.c1.mp3,0,c1\r\n侧田,男人KTV,193.219,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv03.13.219.c2.mp3,0,c2\r\n凤凰传奇,最炫民族风,3.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.03.229.int.mp3,0,int\r\n凤凰传奇,最炫民族风,23.132,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.23.132.v1.mp3,0,v1\r\n凤凰传奇,最炫民族风,57.174,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.57.174.c1.mp3,0,c1\r\n凤凰传奇,最炫民族风,98.756,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.38.756.b.mp3,0,b\r\n凤凰传奇,最炫民族风,113.851,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.53.851.v2.mp3,0,v2\r\n凤凰传奇,自由飞翔,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.01.080.int.mp3,0,int\r\n凤凰传奇,自由飞翔,33.219,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.33.219.v1.mp3,0,v1\r\n凤凰传奇,自由飞翔,53.898,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.53.898.b.mp3,0,b\r\n凤凰传奇,自由飞翔,74.536,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.14.536.v2.mp3,0,v2\r\n凤凰传奇,自由飞翔,95.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.35.173.c1.mp3,0,c1\r\n刘德华,独自去偷欢,4.023,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.04.023.int.mp3,0,int\r\n刘德华,独自去偷欢,27.681,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.27.681.v1.mp3,0,v1\r\n刘德华,独自去偷欢,60.672,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.00.672.c1.mp3,0,c1\r\n刘德华,独自去偷欢,84.048,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.24.048.v2.mp3,0,v2\r\n刘德华,独自去偷欢,116.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.56.999.c2.mp3,0,c2\r\n刘柏辛,Manta,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.00.000.int.mp3,0,int\r\n刘柏辛,Manta,20.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.20.229.v1.mp3,0,v1\r\n刘柏辛,Manta,60.245,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.00.245.c1.mp3,0,c1\r\n刘柏辛,Manta,90.22,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.30.220.v2.mp3,0,v2\r\n刘柏辛,Manta,110.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.50.203.c2.mp3,0,c2\r\n刘海波,别来无恙,3.157,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.03.157.int.mp3,0,int\r\n刘海波,别来无恙,30.128,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.30.128.v1.mp3,0,v1\r\n刘海波,别来无恙,83.034,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.23.034.c1.mp3,0,c1\r\n刘海波,别来无恙,109.599,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.49.599.b.mp3,0,b\r\n刘海波,别来无恙,142.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai02.22.434.v2.mp3,0,v2\r\n卫兰,心乱如麻,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.00.000.int.mp3,0,int\r\n卫兰,心乱如麻,17.415,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.17.415.v1.mp3,0,v1\r\n卫兰,心乱如麻,66.578,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.06.578.c1.mp3,0,c1\r\n卫兰,心乱如麻,107.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.47.053.v2.mp3,0,v2\r\n卫兰,心乱如麻,156.13,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan02.36.130.c2.mp3,0,c2\r\n周杰伦,菊花台,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.00.000.int.mp3,0,int\r\n周杰伦,菊花台,36.122,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.36.122.v1.mp3,0,v1\r\n周杰伦,菊花台,94.547,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua01.34.547.c1.mp3,0,c1\r\n周杰伦,菊花台,137.341,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.17.341.b.mp3,0,b\r\n周杰伦,菊花台,151.205,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.31.205.v2.mp3,0,v2\r\n周杰伦/费玉清,千里之外,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.00.000.int.mp3,0,int\r\n周杰伦/费玉清,千里之外,24.523,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.24.523.v1.mp3,0,v1\r\n周杰伦/费玉清,千里之外,56.985,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.56.985.b.mp3,0,b\r\n周杰伦/费玉清,千里之外,73.051,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li01.13.051.c1.mp3,0,c1\r\n周杰伦/费玉清,千里之外,122.118,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li02.02.118.v2.mp3,0,v2\r\n大张伟,倍儿爽,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.00.000.int.mp3,0,int\r\n大张伟,倍儿爽,24.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.24.158.c1.mp3,0,c1\r\n大张伟,倍儿爽,40.52,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.40.520.v1.mp3,0,v1\r\n大张伟,倍儿爽,86.588,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.26.588.b.mp3,0,b\r\n大张伟,倍儿爽,101.441,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.41.441.v2.mp3,0,v2\r\n孙悦,哭泣的百合花,2.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.02.656.int.mp3,0,int\r\n孙悦,哭泣的百合花,30.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.30.829.v1.mp3,0,v1\r\n孙悦,哭泣的百合花,53.489,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.53.489.c1.mp3,0,c1\r\n孙悦,哭泣的百合花,126.887,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.06.887.v2.mp3,0,v2\r\n孙悦,哭泣的百合花,150.874,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.30.874.c2.mp3,0,c2\r\n孙楠,不见不散,2.274,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.02.274.int.mp3,0,int\r\n孙楠,不见不散,20.327,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.20.327.v1.mp3,0,v1\r\n孙楠,不见不散,50.743,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.50.743.c1.mp3,0,c1\r\n孙楠,不见不散,103.722,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San01.43.722.v2.mp3,0,v2\r\n孙楠,不见不散,134.404,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San02.14.404.c2.mp3,0,c2\r\n宋冬野,董小姐,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.00.000.int.mp3,0,int\r\n宋冬野,董小姐,34.747,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.34.747.v1.mp3,0,v1\r\n宋冬野,董小姐,84.733,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie01.24.733.c1.mp3,0,c1\r\n宋冬野,董小姐,152.651,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie02.32.651.v2.mp3,0,v2\r\n宋冬野,董小姐,185.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie03.05.620.c2.mp3,0,c2\r\n容祖儿,搜神记,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.00.000.int.mp3,0,int\r\n容祖儿,搜神记,21.082,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.21.082.v1.mp3,0,v1\r\n容祖儿,搜神记,75.074,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen01.15.074.c1.mp3,0,c1\r\n容祖儿,搜神记,145.721,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.25.721.v2.mp3,0,v2\r\n容祖儿,搜神记,162.705,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.42.705.c2.mp3,0,c2\r\n张国荣,当年情,0.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.00.999.int.mp3,0,int\r\n张国荣,当年情,24.978,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.24.978.v1.mp3,0,v1\r\n张国荣,当年情,73.227,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing01.13.227.c1.mp3,0,c1\r\n张国荣,当年情,132.8,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.12.800.b.mp3,0,b\r\n张国荣,当年情,169.518,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.49.518.v2.mp3,0,v2\r\n张国荣,沉默是金,0.654,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.00.654.int.mp3,0,int\r\n张国荣,沉默是金,27.546,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.14.055.c1.mp3,0,c1\r\n张国荣,沉默是金,74.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.27.546.v1.mp3,0,v1\r\n张国荣,沉默是金,97.269,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.37.269.v2.mp3,0,v2\r\n张国荣,沉默是金,120.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo02.00.256.b.mp3,0,b\r\n张国荣,风继续吹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.00.000.int.mp3,0,int\r\n张国荣,风继续吹,27.857,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.27.857.v1.mp3,0,v1\r\n张国荣,风继续吹,98.558,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui01.38.558.c1.mp3,0,c1\r\n张国荣,风继续吹,171.783,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui02.51.783.v2.mp3,0,v2\r\n张国荣,风继续吹,242.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui04.02.231.c2.mp3,0,c2\r\n张学友,只想一生跟你走,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.00.000.int.mp3,0,int\r\n张学友,只想一生跟你走,37.163,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.37.163.v1.mp3,0,v1\r\n张学友,只想一生跟你走,109.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou01.49.166.c1.mp3,0,c1\r\n张学友,只想一生跟你走,155.215,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou02.35.215.v2.mp3,0,v2\r\n张学友,只想一生跟你走,212.55,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou03.32.550.c2.mp3,0,c2\r\n张学友,夕阳醉了,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,int\r\n张学友,夕阳醉了,37.929,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,v1\r\n张学友,夕阳醉了,97.674,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,c1\r\n张学友,夕阳醉了,168.636,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,v2\r\n张学友,夕阳醉了,228.368,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,c2\r\n张学友,每天爱你多一些,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.00.000.int.mp3,0,int\r\n张学友,每天爱你多一些,18.033,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.18.033.v1.mp3,0,v1\r\n张学友,每天爱你多一些,77.419,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo01.17.419.c1.mp3,0,c1\r\n张学友,每天爱你多一些,133.052,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo02.13.052.v2.mp3,0,v2\r\n张学友,每天爱你多一些,192.599,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo03.12.599.c2.mp3,0,c2\r\n张学友,秀发乱了,5.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.05.561.int.mp3,0,int\r\n张学友,秀发乱了,22.777,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.22.777.v1.mp3,0,v1\r\n张学友,秀发乱了,49.261,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.49.261.c1.mp3,0,c1\r\n张学友,秀发乱了,111.909,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa01.51.909.b.mp3,0,b\r\n张学友,秀发乱了,126.842,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa02.06.842.v2.mp3,0,v2\r\n张学友,饿狼传说,0.615,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.00.615.int.mp3,0,int\r\n张学友,饿狼传说,35.603,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.35.603.v1.mp3,0,v1\r\n张学友,饿狼传说,66.648,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.06.648.v2.mp3,0,v2\r\n张学友,饿狼传说,97.622,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.37.622.c1.mp3,0,c1\r\n张学友,饿狼传说,114.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.54.053.b.mp3,0,b\r\n张靓颖,这就是爱情,1.559,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.01.559.int.mp3,0,int\r\n张靓颖,这就是爱情,16.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.16.297.v1.mp3,0,v1\r\n张靓颖,这就是爱情,66.839,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi01.06.839.c1.mp3,0,c1\r\n张靓颖,这就是爱情,123.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.03.593.v2.mp3,0,v2\r\n张靓颖,这就是爱情,174.227,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.54.227.c2.mp3,0,c2\r\n戚薇/袁成杰,外滩十八号,1.768,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.01.768.int.mp3,0,int\r\n戚薇/袁成杰,外滩十八号,21.734,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.21.734.v1.mp3,0,v1\r\n戚薇/袁成杰,外滩十八号,53.634,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.53.634.c1.mp3,0,c1\r\n戚薇/袁成杰,外滩十八号,86.972,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.26.972.v2.mp3,0,v2\r\n戚薇/袁成杰,外滩十八号,118.467,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.58.467.c2.mp3,0,c2\r\n方力申,好心好报,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.00.000.int.mp3,0,int\r\n方力申,好心好报,16.849,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.16.849.v1.mp3,0,v1\r\n方力申,好心好报,47.362,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.47.362.c1.mp3,0,c1\r\n方力申,好心好报,85.634,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.25.634.v2.mp3,0,v2\r\n方力申,好心好报,116.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.56.240.c2.mp3,0,c2\r\n时代少年团,要你管,2.293,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.02.293.int.mp3,0,int\r\n时代少年团,要你管,11.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.11.620.v1.mp3,0,v1\r\n时代少年团,要你管,58.745,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.58.745.c1.mp3,0,c1\r\n时代少年团,要你管,75.524,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan01.15.524.v2.mp3,0,v2\r\n时代少年团,要你管,154.626,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan02.34.626.b2.mp3,0,b2\r\n李克勤,一生不变,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.00.000.int.mp3,0,int\r\n李克勤,一生不变,30.968,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.30.968.v1.mp3,0,v1\r\n李克勤,一生不变,88.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian01.28.734.c1.mp3,0,c1\r\n李克勤,一生不变,124.72,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.04.721.v2.mp3,0,v2\r\n李克勤,一生不变,175.383,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.55.383.c2.mp3,0,c2\r\n李宇春,无价之姐,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.01.080.int.mp3,0,int\r\n李宇春,无价之姐,31.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.31.203.v1.mp3,0,v1\r\n李宇春,无价之姐,61.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.01.656.b.mp3,0,b\r\n李宇春,无价之姐,76.4,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.16.400.c1.mp3,0,c1\r\n李宇春,无价之姐,106.66,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.46.660.b2.mp3,0,b2\r\n李泉,时间飞了,0.59,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.00.590.v1.mp3,0,v1\r\n李泉,时间飞了,28.162,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.28.162.c1.mp3,0,c1\r\n李泉,时间飞了,56.999,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.56.999.b.mp3,0,b\r\n李泉,时间飞了,86.384,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.26.384.v2.mp3,0,v2\r\n李泉,时间飞了,113.998,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.53.998.c2.mp3,0,c2\r\n李荣浩,年少有为,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.00.000.int.mp3,0,int\r\n李荣浩,年少有为,29.703,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.29.703.v1.mp3,0,v1\r\n李荣浩,年少有为,87.343,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao01.27.343.c1.mp3,0,c1\r\n李荣浩,年少有为,146.25,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao02.26.250.v2.mp3,0,v2\r\n李荣浩,年少有为,203.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao03.23.732.c2.mp3,0,c2\r\n杨千嬅,姊妹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.00.000.int.mp3,0,int\r\n杨千嬅,姊妹,14.157,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.14.157.v1.mp3,0,v1\r\n杨千嬅,姊妹,69.754,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei01.09.754.c1.mp3,0,c1\r\n杨千嬅,姊妹,120.031,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.00.031.v2.mp3,0,v2\r\n杨千嬅,姊妹,175.714,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.55.714.c2.mp3,0,c2\r\n杨千嬅,小城大事,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.00.000.int.mp3,0,int\r\n杨千嬅,小城大事,17.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.17.734.v1.mp3,0,v1\r\n杨千嬅,小城大事,104.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.04.212.c1.mp3,0,c1\r\n杨千嬅,小城大事,112.828,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.52.828.v2.mp3,0,v2\r\n杨千嬅,小城大事,145.551,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng02.25.551.c2.mp3,0,c2\r\n杨千嬅,少女的祈祷,0.753,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.00.753.int.mp3,0,int\r\n杨千嬅,少女的祈祷,7.988,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.07.988.v1.mp3,0,v1\r\n杨千嬅,少女的祈祷,40.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.40.213.c1.mp3,0,c1\r\n杨千嬅,少女的祈祷,87.25,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.27.250.b.mp3,0,b\r\n杨千嬅,少女的祈祷,105.911,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.45.911.v2.mp3,0,v2\r\n杨坤,无所谓,1.307,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.01.307.int.mp3,0,int\r\n杨坤,无所谓,16.381,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.16.381.v1.mp3,0,v1\r\n杨坤,无所谓,80.294,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei01.20.894.c1.mp3,0,c1\r\n杨坤,无所谓,128.195,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.08.195.v2.mp3,0,v2\r\n杨坤,无所谓,160.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.40.370.c2.mp3,0,c2\r\n杨坤,那一天,2.268,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.02.268.int.mp3,0,int\r\n杨坤,那一天,31.798,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.31.798.v1.mp3,0,v1\r\n杨坤,那一天,90.218,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian01.30.218.c1.mp3,0,c1\r\n杨坤,那一天,120.587,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.00.587.b.mp3,0,b\r\n杨坤,那一天,149.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.29.970.v2.mp3,0,v2\r\n林子祥,在水中央,1.092,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.01.092.int.mp3,0,int\r\n林子祥,在水中央,31.294,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.31.294.v1.mp3,0,v1\r\n林子祥,在水中央,79.344,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.69.344.c1.mp3,0,c1\r\n林子祥,在水中央,103.341,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.43.341.v2.mp3,0,v2\r\n林子祥,在水中央,128.012,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang02.08.012.b.mp3,0,b\r\n林子祥,长路漫漫伴你闯,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.00.000.int.mp3,0,int\r\n林子祥,长路漫漫伴你闯,18.794,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.18.794.v1.mp3,0,v1\r\n林子祥,长路漫漫伴你闯,56.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.56.055.c1.mp3,0,c1\r\n林子祥,长路漫漫伴你闯,89.056,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu01.29.056.b.mp3,0,b\r\n林子祥,长路漫漫伴你闯,130.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu02.10.561.v2.mp3,0,v2\r\n梅艳芳,Stand By Me,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.00.000.int.mp3,0,int\r\n梅艳芳,Stand By Me,11.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.11.256.v1.mp3,0,v1\r\n梅艳芳,Stand By Me,43.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.43.212.c1.mp3,0,c1\r\n梅艳芳,Stand By Me,60.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By01.00.539.v2.mp3,0,v2\r\n梅艳芳,Stand By Me,125.317,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By02.05.317.v3.mp3,0,v3\r\n梅艳芳,似水流年,1.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.01.150.int.mp3,0,int\r\n梅艳芳,似水流年,27.379,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.27.379.v1.mp3,0,v1\r\n梅艳芳,似水流年,92.979,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian01.32.979.c1.mp3,0,c1\r\n梅艳芳,似水流年,134.296,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.14.296.b.mp3,0,b\r\n梅艳芳,似水流年,158.423,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.38.423.c2.mp3,0,c2\r\n梅艳芳,淑女,0.141,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.00.141.int.mp3,0,int\r\n梅艳芳,淑女,27.353,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.27.353.v1.mp3,0,v1\r\n梅艳芳,淑女,87.427,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv01.27.427.c1.mp3,0,c1\r\n梅艳芳,淑女,125.948,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.05.948.c2.mp3,0,c2\r\n梅艳芳,淑女,142.327,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.22.327.v2.mp3,0,v2\r\n梅艳芳,蔓珠沙华,1.188,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.01.188.int.mp3,0,int\r\n梅艳芳,蔓珠沙华,19.375,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.19.375.v1.mp3,0,v1\r\n梅艳芳,蔓珠沙华,85.221,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.25.221.c1.mp3,0,c1\r\n梅艳芳,蔓珠沙华,89.373,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.29.373.v2.mp3,0,v2\r\n梅艳芳,蔓珠沙华,241.238,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu04.01.238.c2.mp3,0,c2\r\n毛不易,平凡的一天,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.00.000.int.mp3,0,int\r\n毛不易,平凡的一天,15.483,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.15.483.v1.mp3,0,v1\r\n毛不易,平凡的一天,75.475,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian01.15.474.c1.mp3,0,c1\r\n毛不易,平凡的一天,122.638,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian02.02.638.v2.mp3,0,v2\r\n毛不易,平凡的一天,182.202,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian03.02.202.c2.mp3,0,c2\r\n毛不易,消愁,0.465,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.00.465.int.mp3,0,int\r\n毛不易,消愁,17.912,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.17.912.v1.mp3,0,v1\r\n毛不易,消愁,52.806,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.52.806.c1.mp3,0,c1\r\n毛不易,消愁,89.794,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.29.794.b.mp3,0,b\r\n毛不易,消愁,107.358,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.47.358.c2.mp3,0,c2\r\n水木年华,Forever Young,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.00.000.int.mp3,0,int\r\n水木年华,Forever Young,36.612,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.36.612.v1.mp3,0,v1\r\n水木年华,Forever Young,72.826,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.12.826.c1.mp3,0,c1\r\n水木年华,Forever Young,109.27,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.49.270.b.mp3,0,b\r\n水木年华,Forever Young,127.177,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young02.07.177.v2.mp3,0,v2\r\n汪峰,存在,1.153,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.01.153.v1.mp3,0,v1\r\n汪峰,存在,34.728,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.34.728.c1.mp3,0,c1\r\n汪峰,存在,72.685,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.12.685.b.mp3,0,b\r\n汪峰,存在,106.479,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.46.479.v2.mp3,0,v2\r\n汪峰,存在,139.997,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai02.19.997.c2.mp3,0,c2\r\n汪明荃,京华春梦,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.00.000.int.mp3,0,int\r\n汪明荃,京华春梦,17.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.17.631.v1.mp3,0,v1\r\n汪明荃,京华春梦,68.064,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.08.064.c1.mp3,0,c1\r\n汪明荃,京华春梦,93.314,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.33.314.v2.mp3,0,v2\r\n汪明荃,京华春梦,131.273,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua02.11.273.c2.mp3,0,c2\r\n汪苏泷,一笑倾城,0.94,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.00.940.int.mp3,0,int\r\n汪苏泷,一笑倾城,49.819,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.49.819.v1.mp3,0,v1\r\n汪苏泷,一笑倾城,81.251,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.21.251.c1.mp3,0,c1\r\n汪苏泷,一笑倾城,93.849,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.53.849.c2.mp3,0,c2\r\n汪苏泷,一笑倾城,131.427,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao02.11.427.v2.mp3,0,v2\r\n海伦,桥边姑娘,2.138,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.02.138.int.mp3,0,int\r\n海伦,桥边姑娘,16.984,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.16.984.v1.mp3,0,v1\r\n海伦,桥边姑娘,56.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.53.593.c1.mp3,0,c1\r\n海伦,桥边姑娘,85.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.25.306.b.mp3,0,b\r\n海伦,桥边姑娘,97.598,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.37.598.v2.mp3,0,v2\r\n王啸坤,带我去寻找,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.00.000.int.mp3,0,int\r\n王啸坤,带我去寻找,22.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.22.694.v1.mp3,0,v1\r\n王啸坤,带我去寻找,65.72,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.05.720.c1.mp3,0,c1\r\n王啸坤,带我去寻找,110.948,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.50.048.v2.mp3,0,v2\r\n王啸坤,带我去寻找,129.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao02.09.899.b.mp3,0,b\r\n王筝/水木年华,没有人比我更爱你,0.741,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.00.741.int.mp3,0,int\r\n王筝/水木年华,没有人比我更爱你,12.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.12.732.v1.mp3,0,v1\r\n王筝/水木年华,没有人比我更爱你,62.319,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren01.02.319.c1.mp3,0,c1\r\n王筝/水木年华,没有人比我更爱你,104.353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.04.353.v2.mp3,0,v2\r\n王筝/水木年华,没有人比我更爱你,163.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.43.899.c2.mp3,0,c2\r\n王菲,容易受伤的女人,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.00.000.int.mp3,0,int\r\n王菲,容易受伤的女人,17.644,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.17.644.v1.mp3,0,v1\r\n王菲,容易受伤的女人,61.181,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.01.181.c1.mp3,0,c1\r\n王菲,容易受伤的女人,76.667,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.16.667.v2.mp3,0,v2\r\n王菲,容易受伤的女人,148.342,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi02.28.342.c2.mp3,0,c2\r\n王菲,给自己的情书,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.00.000.int.mp3,0,int\r\n王菲,给自己的情书,12.538,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.12.538.v1.mp3,0,v1\r\n王菲,给自己的情书,46.768,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.46.768.c1.mp3,0,c1\r\n王菲,给自己的情书,81.085,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.21.085.v2.mp3,0,v2\r\n王菲,给自己的情书,115.336,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.55.336.c2.mp3,0,c2\r\n甄妮,明日话今天,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.00.000.int.mp3,0,int\r\n甄妮,明日话今天,13.126,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.13.126.v1.mp3,0,v1\r\n甄妮,明日话今天,39.421,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.39.421.c1.mp3,0,c1\r\n甄妮,明日话今天,67.248,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.07.248.b.mp3,0,b\r\n甄妮,明日话今天,93.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.33.631.v2.mp3,0,v2\r\n罗中旭,为爱存在,1.917,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.01.917.int.mp3,0,int\r\n罗中旭,为爱存在,13.961,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.13.961.v1.mp3,0,v1\r\n罗中旭,为爱存在,60.551,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.00.551.c1.mp3,0,c1\r\n罗中旭,为爱存在,97.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.37.765.v2.mp3,0,v2\r\n罗中旭,为爱存在,159.567,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai02.39.567.c2.mp3,0,c2\r\n罗中旭,爱在你身边,2.134,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.02.134.int.mp3,0,int\r\n罗中旭,爱在你身边,48.727,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.48.727.v1.mp3,0,v1\r\n罗中旭,爱在你身边,108.271,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian01.48.271.c1.mp3,0,c1\r\n罗中旭,爱在你身边,131.7,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.11.700.b.mp3,0,b\r\n罗中旭,爱在你身边,177.056,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.57.056.c3.mp3,0,c3\r\n罗中旭,让你心动,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.00.000.int.mp3,0,int\r\n罗中旭,让你心动,9.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.09.434.v1.mp3,0,v1\r\n罗中旭,让你心动,69.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.09.158.c1.mp3,0,c1\r\n罗中旭,让你心动,110.24,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.50.240.v2.mp3,0,v2\r\n罗中旭,让你心动,147.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong02.47.628.c2.mp3,0,c2\r\n罗文,好歌献给你,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.00.000.int.mp3,0,int\r\n罗文,好歌献给你,20.282,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.20.284.v1.mp3,0,v1\r\n罗文,好歌献给你,65.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.65.539.c1.mp3,0,c1\r\n罗文,好歌献给你,119.821,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge01.59.821.v2.mp3,0,v2\r\n罗文,好歌献给你,142.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge02.22.213.c2.mp3,0,c2\r\n罗文,小李飞刀,0.894,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.00.894.int.mp3,0,int\r\n罗文,小李飞刀,17.293,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.17.293.v1.mp3,0,v1\r\n罗文,小李飞刀,66.265,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.06.265.c1.mp3,0,c1\r\n罗文,小李飞刀,90.043,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.30.043.v2.mp3,0,v2\r\n罗文,小李飞刀,114.193,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.54.193.b.mp3,0,b\r\n罗文/甄妮,时间始终你好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.00.000.int.mp3,0,int\r\n罗文/甄妮,时间始终你好,14.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.14.231.v1.mp3,0,v1\r\n罗文/甄妮,时间始终你好,41.895,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.41.896.c1.mp3,0,c1\r\n罗文/甄妮,时间始终你好,57.573,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.57.573.v2.mp3,0,v2\r\n罗文/甄妮,时间始终你好,86.063,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian01.25.063.b.mp3,0,b\r\n羽泉,最美,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.00.000.int.mp3,0,int\r\n羽泉,最美,30.971,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.30.971.v1.mp3,0,v1\r\n羽泉,最美,71.261,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei01.11.261.c1.mp3,0,c1\r\n羽泉,最美,83.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei02.23.173.v2.mp3,0,v2\r\n羽泉,最美,93.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei03.03.173.c2.mp3,0,c2\r\n肖战,余年,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.00.000.int.mp3,0,int\r\n肖战,余年,21.716,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.21.716.v1.mp3,0,v1\r\n肖战,余年,60.537,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.00.537.c1.mp3,0,c1\r\n肖战,余年,118.834,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.58.834.v2.mp3,0,v2\r\n肖战,余年,157.224,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian02.37.224.c2.mp3,0,c2\r\n范晓萱,哭了,0.366,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.00.366.int.mp3,0,int\r\n范晓萱,哭了,24.564,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.24.564.v1.mp3,0,v1\r\n范晓萱,哭了,49.531,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.49.531.c1.mp3,0,c1\r\n范晓萱,哭了,86.835,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.26.385.v2.mp3,0,v2\r\n范晓萱,哭了,111.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.51.765.c2.mp3,0,c2\r\n草蜢,失恋,0.829,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.00.829.int.mp3,0,int\r\n草蜢,失恋,16.639,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.16.639.v1.mp3,0,v1\r\n草蜢,失恋,45.632,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.45.632.c1.mp3,0,c1\r\n草蜢,失恋,60.418,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.00.418.v2.mp3,0,v2\r\n草蜢,失恋,74.956,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.14.956.b.mp3,0,b\r\n蔡徐坤,情人,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.00.000.int.mp3,0,int\r\n蔡徐坤,情人,11.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.11.370.v1.mp3,0,v1\r\n蔡徐坤,情人,43.568,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.43.568.c1.mp3,0,c1\r\n蔡徐坤,情人,73.533,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.13.533.v2.mp3,0,v2\r\n蔡徐坤,情人,104.69,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.44.690.c2.mp3,0,c2\r\n薛之谦,认真的雪,1.61,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.01.610.int.mp3,0,int\r\n薛之谦,认真的雪,23.982,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.23.982.v1.mp3,0,v1\r\n薛之谦,认真的雪,61.015,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue01.01.015.c1.mp3,0,c1\r\n薛之谦,认真的雪,124.572,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.04.572.v2.mp3,0,v2\r\n薛之谦,认真的雪,143.385,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.23.385.c2.mp3,0,c2\r\n薛凯琪,奇洛李维斯回信,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.00.000.int.mp3,0,int\r\n薛凯琪,奇洛李维斯回信,28.511,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.28.511.v1.mp3,0,v1\r\n薛凯琪,奇洛李维斯回信,76.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.16.770.c1.mp3,0,c1\r\n薛凯琪,奇洛李维斯回信,118.029,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.58.029.v2.mp3,0,v2\r\n薛凯琪,奇洛李维斯回信,166.07,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si02.46.070.c2.mp3,0,c2\r\n许志安,女人之苦,1.472,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.01.472.int.mp3,0,int\r\n许志安,女人之苦,34.921,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.34.921.v1.mp3,0,v1\r\n许志安,女人之苦,72.563,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.12.563.v2.mp3,3,v2\r\n许志安,女人之苦,82.526,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.22.526.c1.mp3,0,c1\r\n许志安,女人之苦,157.947,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku02.37.947.c2.mp3,0,c2\r\n许志安,男人最痛,1.349,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.01.349.int.mp3,0,int\r\n许志安,男人最痛,34.598,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.34.598.v1.mp3,0,v1\r\n许志安,男人最痛,92.89,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui01.32.890.c1.mp3,0,c1\r\n许志安,男人最痛,150.755,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui02.30.755.v2.mp3,0,v2\r\n许志安,男人最痛,182.081,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui03.02.081.c2.mp3,0,c2\r\n谢东,笑脸,0.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.00.970.int.mp3,0,int\r\n谢东,笑脸,18.112,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.18.112.v1.mp3,0,v1\r\n谢东,笑脸,53.328,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.53.328.c1.mp3,0,c1\r\n谢东,笑脸,99.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian01.39.945.v2.mp3,0,v2\r\n谢东,笑脸,135.181,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian02.15.181.c2.mp3,0,c2\r\n谭咏麟,爱在深秋,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.00.000.int.mp3,0,int\r\n谭咏麟,爱在深秋,19.839,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.19.839.v1.mp3,0,v1\r\n谭咏麟,爱在深秋,73.253,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.13.253.c1.mp3,0,c1\r\n谭咏麟,爱在深秋,99.036,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.39.036.v2.mp3,0,v2\r\n谭咏麟,爱在深秋,166.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu02.46.266.c2.mp3,0,c2\r\n谭咏麟,爱情陷阱,1.148,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.01.148.int.mp3,0,int\r\n谭咏麟,爱情陷阱,20.623,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.20.623.v1.mp3,0,v1\r\n谭咏麟,爱情陷阱,72.468,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.12.468.c1.mp3,0,c1\r\n谭咏麟,爱情陷阱,92.441,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.32.441.b.mp3,0,b\r\n谭咏麟,爱情陷阱,111.859,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.51.859.v2.mp3,0,v2\r\n赵磊,成都,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.00.000.int.mp3,0,int\r\n赵磊,成都,18.028,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.18.208.v1.mp3,0,v1\r\n赵磊,成都,51.586,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.51.585.v2.mp3,0,v2\r\n赵磊,成都,83.3353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.23.335.c1.mp3,0,c1\r\n赵磊,成都,116.573,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.56.573.b.mp3,0,b\r\n郑中基,无赖,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.00.000.int.mp3,0,int\r\n郑中基,无赖,15.211,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.15.211.v1.mp3,0,v1\r\n郑中基,无赖,66.38,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai01.06.380.c1.mp3,0,c1\r\n郑中基,无赖,123.42,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.03.420.v2.mp3,0,v2\r\n郑中基,无赖,157.142,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.37.142.c2.mp3,0,c2\r\n郑秀文,终身美丽,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.00.000.int.mp3,0,int\r\n郑秀文,终身美丽,13.426,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.13.426.v1.mp3,0,v1\r\n郑秀文,终身美丽,68.817,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.08.817.c1.mp3,0,c1\r\n郑秀文,终身美丽,112.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.52.819.v2.mp3,0,v2\r\n郑秀文,终身美丽,138.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen02.18.770.c2.mp3,0,c2\r\n郑融,红绿灯,3.305,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.03.305.int.mp3,0,int\r\n郑融,红绿灯,20.984,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.20.984.v1.mp3,0,v1\r\n郑融,红绿灯,54.459,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.54.459.c1.mp3,0,c1\r\n郑融,红绿灯,89.5498,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.29.548.b.mp3,0,b\r\n郑融,红绿灯,105.075,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.45.075.v2.mp3,0,v2\r\n郑钧,回到拉萨,2.233,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.02.233.int.mp3,0,int\r\n郑钧,回到拉萨,28.066,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.28.066.v1.mp3,0,v1\r\n郑钧,回到拉萨,101.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa01.41.852.c1.mp3,0,c1\r\n郑钧,回到拉萨,171.001,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa02.51.001.b.mp3,0,b\r\n郑钧,回到拉萨,205.712,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa03.25.712.v2.mp3,0,v2\r\n郭富城,Para Para Sakura,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.00.000.int.mp3,0,int\r\n郭富城,Para Para Sakura,28.92,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.28.920.v1.mp3,0,v1\r\n郭富城,Para Para Sakura,54.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.54.398.c1.mp3,0,c1\r\n郭富城,Para Para Sakura,79.73,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.19.730.v2.mp3,0,v2\r\n郭富城,Para Para Sakura,105.171,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.45.171.c2.mp3,0,c2\r\n陈奕迅,K歌之王,2.307,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.02.307.int.mp3,0,int\r\n陈奕迅,K歌之王,13.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.13.266.v1.mp3,0,v1\r\n陈奕迅,K歌之王,63.987,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.03.987.c1.mp3,0,c1\r\n陈奕迅,K歌之王,115.357,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.55.357.v2.mp3,0,v2\r\n陈奕迅,K歌之王,139.916,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge02.19.916.c2.mp3,0,c2\r\n陈奕迅,Shall We Talk,5.765,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.05.765.int.mp3,0,int\r\n陈奕迅,Shall We Talk,10.125,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.10.125.v1.mp3,0,v1\r\n陈奕迅,Shall We Talk,49.035,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.49.035.c1.mp3,0,c1\r\n陈奕迅,Shall We Talk,88.98,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk01.28.980.v2.mp3,0,v2\r\n陈奕迅,Shall We Talk,134.893,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk02.14.893.c2.mp3,0,c2\r\n陈奕迅,夕阳无限好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,int\r\n陈奕迅,夕阳无限好,24.413,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,v1\r\n陈奕迅,夕阳无限好,73.359,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,c1\r\n陈奕迅,夕阳无限好,144.303,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,v2\r\n陈奕迅,夕阳无限好,169.766,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,c2\r\n陈奕迅,天下无双,1.191,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.01.191.int.mp3,0,int\r\n陈奕迅,天下无双,24.115,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.24.115.v1.mp3,0,v1\r\n陈奕迅,天下无双,69.836,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.09.836.b.mp3,0,b\r\n陈奕迅,天下无双,79.725,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.19.725.v2.mp3,0,v2\r\n陈奕迅,天下无双,100.448,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.40.448.c1.mp3,0,c1\r\n陈奕迅,富士山下,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.00.000.int.mp3,0,int\r\n陈奕迅,富士山下,22.083,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.22.083.v1.mp3,0,v1\r\n陈奕迅,富士山下,58.65,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.58.650.c1.mp3,0,c1\r\n陈奕迅,富士山下,102.915,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi01.42.916.v2.mp3,0,v2\r\n陈奕迅,富士山下,139.56,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi02.19.560.c2.mp3,0,c2\r\n陈奕迅,陀飞轮,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.00.000.int.mp3,0,int\r\n陈奕迅,陀飞轮,15.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.15.398.v1.mp3,0,v1\r\n陈奕迅,陀飞轮,71.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.11.240.c1.mp3,0,c1\r\n陈奕迅,陀飞轮,113.128,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.53.128.v2.mp3,0,v2\r\n陈奕迅,陀飞轮,142.661,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun02.22.661.c2.mp3,0,c2\r\n陈明,为了,10.652,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.10.652.int.mp3,0,int\r\n陈明,为了,31.213,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.31.213.v1.mp3,0,v1\r\n陈明,为了,61.145,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.01.145.b.mp3,0,b\r\n陈明,为了,104.931,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.44.931.c1.mp3,0,c1\r\n陈明,为了,149.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le02.29.945.v2.mp3,0,v2\r\n陈楚生,一个人唱情歌,1.12,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.01.120.int.mp3,0,int\r\n陈楚生,一个人唱情歌,16.356,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.16.356.v1.mp3,0,v1\r\n陈楚生,一个人唱情歌,48.322,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.48.322.c1.mp3,0,c1\r\n陈楚生,一个人唱情歌,94.255,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren01.34.255.v2.mp3,0,v2\r\n陈楚生,一个人唱情歌,126.314,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren02.06.314.c2.mp3,0,c2\r\n陈琳,不想骗自己,0.758,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.00.758.int.mp3,0,int\r\n陈琳,不想骗自己,33.298,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.33.298.v1.mp3,0,v1\r\n陈琳,不想骗自己,72.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.12.297.c1.mp3,0,c1\r\n陈琳,不想骗自己,94.647,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.34.647.v2.mp3,0,v2\r\n陈琳,不想骗自己,133.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji02.13.646.c2.mp3,0,c2\r\n陈琳,爱就爱了,1.126,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.01.126.int.mp3,0,int\r\n陈琳,爱就爱了,32.557,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.32.557.v1.mp3,0,v1\r\n陈琳,爱就爱了,89.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.29.285.c1.mp3,0,c1\r\n陈琳,爱就爱了,119.368,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.59.368.b.mp3,0,b\r\n陈琳,爱就爱了,150.738,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai02.30.738.v2.mp3,0,v2\r\n陈粒,小半,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.00.000.v1.mp3,0,v1\r\n陈粒,小半,51.323,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.51.323.c1.mp3,0,c1\r\n陈粒,小半,91.659,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban01.31.659.v2.mp3,0,v2\r\n陈粒,小半,143.018,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban02.23.018.c2.mp3,0,c2\r\n陈粒,小半,187.847,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban03.07.847.b.mp3,0,b\r\n霍尊,卷珠帘,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.00.000.int.mp3,0,int\r\n霍尊,卷珠帘,26.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.26.852.v1.mp3,0,v1\r\n霍尊,卷珠帘,99.667,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian01.39.667.c1.mp3,0,c1\r\n霍尊,卷珠帘,133.642,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.13.642.b.mp3,0,b\r\n霍尊,卷珠帘,171.266,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.51.266.c2.mp3,0,c2\r\n韩庚,My Logo,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.00.000.int.mp3,0,int\r\n韩庚,My Logo,15.674,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.15.674.v1.mp3,0,v1\r\n韩庚,My Logo,45.821,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.45.821.c1.mp3,0,c1\r\n韩庚,My Logo,69.891,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.09.891.v2.mp3,0,v2\r\n韩庚,My Logo,99.89,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.39.890.c2.mp3,0,c2\r\n韩红,天亮了,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.00.000.int.mp3,0,int\r\n韩红,天亮了,13.259,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.13.259.v1.mp3,0,v1\r\n韩红,天亮了,68.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.08.694.c1.mp3,0,c1\r\n韩红,天亮了,100.959,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.40.959.b.mp3,0,b\r\n韩红,天亮了,110.688,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.50.688.v2.mp3,0,v2\r\n马頔,南山南,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.00.000.c1.mp3,0,c1\r\n马頔,南山南,29.929,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.29.929.v1.mp3,0,v1\r\n马頔,南山南,133.151,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan02.13.151.v2.mp3,0,v2\r\n马頔,南山南,192.455,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.12.455.c2.mp3,0,c2\r\n马頔,南山南,229.26,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.49.260.b2.mp3,0,b2\r\n高林生,牵挂你的人是我,1.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.01.306.int.mp3,0,int\r\n高林生,牵挂你的人是我,18.431,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.18.431.v1.mp3,0,v1\r\n高林生,牵挂你的人是我,54.429,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.54.429.c1.mp3,0,c1\r\n高林生,牵挂你的人是我,92.618,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua01.32.618.b.mp3,0,b\r\n高林生,牵挂你的人是我,183.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua03.03.628.c2.mp3,0,c2\r\n黄征,野菊花,1.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.01.646.int.mp3,0,int\r\n黄征,野菊花,24.217,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.24.217.v1.mp3,0,v1\r\n黄征,野菊花,83.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.23.829.c1.mp3,0,c1\r\n黄征,野菊花,114.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.54.285.v2.mp3,0,v2\r\n黄征,野菊花,203.789,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua03.23.789.c2.mp3,0,c2\r\n黎明,对不起 我爱你,1.103,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.01.103.int.mp3,0,int\r\n黎明,对不起 我爱你,28.529,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.28.529.v1.mp3,0,v1\r\n黎明,对不起 我爱你,121.174,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.01.174.b.mp3,0,b\r\n黎明,对不起 我爱你,139.74,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.19.740.v2.mp3,0,v2\r\n黎明,对不起 我爱你,157.295,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.37.295.c2.mp3,0,c2\r\n" } }, { @@ -14,7 +14,7 @@ "fields": { "name": "粤语", "process_csv": false, - "csv": "AGA江海迦,小问题,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.00.000.int.mp3,0,0,int\r\nAGA江海迦,小问题,14.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.14.166.v1.mp3,0,0,v1\r\nAGA江海迦,小问题,58.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.58.150.c1.mp3,0,0,c1\r\nAGA江海迦,小问题,87.795,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.27.795.v2.mp3,0,0,v2\r\nAGA江海迦,小问题,117.068,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.57.068.c2.mp3,0,0,c2\r\nTWINS,下一站天后,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.00.000.int.mp3,0,0,int\r\nTWINS,下一站天后,12.787,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.12.787.v1.mp3,0,0,v1\r\nTWINS,下一站天后,52.904,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.52.904.c1.mp3,0,0,c1\r\nTWINS,下一站天后,88.668,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou01.28.668.v2.mp3,0,0,v2\r\nTWINS,下一站天后,128.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou02.08.819.c2.mp3,0,0,c2\r\nTWINS,风筝与风,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.00.000.int.mp3,0,0,int\r\nTWINS,风筝与风,21.505,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.21.505.v1.mp3,0,0,v1\r\nTWINS,风筝与风,51.404,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.51.404.c1.mp3,0,0,c1\r\nTWINS,风筝与风,93.627,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu01.33.627.v2.mp3,0,0,v2\r\nTWINS,风筝与风,123.392,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu02.03.392.c2.mp3,0,0,c2\r\n侧田,男人KTV,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.00.000.int.mp3,0,0,int\r\n侧田,男人KTV,31.263,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.31.263.v1.mp3,0,0,v1\r\n侧田,男人KTV,61.19,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.01.190.v2.mp3,0,0,v2\r\n侧田,男人KTV,90.017,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.30.017.c1.mp3,0,0,c1\r\n侧田,男人KTV,193.219,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv03.13.219.c2.mp3,0,0,c2\r\n刘德华,独自去偷欢,4.023,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.04.023.int.mp3,0,0,int\r\n刘德华,独自去偷欢,27.681,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.27.681.v1.mp3,0,0,v1\r\n刘德华,独自去偷欢,60.672,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.00.672.c1.mp3,0,0,c1\r\n刘德华,独自去偷欢,84.048,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.24.048.v2.mp3,0,0,v2\r\n刘德华,独自去偷欢,116.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.56.999.c2.mp3,0,0,c2\r\n卫兰,心乱如麻,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.00.000.int.mp3,0,0,int\r\n卫兰,心乱如麻,17.415,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.17.415.v1.mp3,0,0,v1\r\n卫兰,心乱如麻,66.578,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.06.578.c1.mp3,0,0,c1\r\n卫兰,心乱如麻,107.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.47.053.v2.mp3,0,0,v2\r\n卫兰,心乱如麻,156.13,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan02.36.130.c2.mp3,0,0,c2\r\n容祖儿,搜神记,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.00.000.int.mp3,0,0,int\r\n容祖儿,搜神记,21.082,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.21.082.v1.mp3,0,0,v1\r\n容祖儿,搜神记,75.074,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen01.15.074.c1.mp3,0,0,c1\r\n容祖儿,搜神记,145.721,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.25.721.v2.mp3,0,0,v2\r\n容祖儿,搜神记,162.705,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.42.705.c2.mp3,0,0,c2\r\n张国荣,当年情,0.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.00.999.int.mp3,0,0,int\r\n张国荣,当年情,24.978,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.24.978.v1.mp3,0,0,v1\r\n张国荣,当年情,73.227,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing01.13.227.c1.mp3,0,0,c1\r\n张国荣,当年情,132.8,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.12.800.b.mp3,0,0,b\r\n张国荣,当年情,169.518,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.49.518.v2.mp3,0,0,v2\r\n张国荣,沉默是金,0.654,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.00.654.int.mp3,0,0,int\r\n张国荣,沉默是金,27.546,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.27.546.v1.mp3,0,0,v1\r\n张国荣,沉默是金,74.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.14.055.c1.mp3,0,0,c1\r\n张国荣,沉默是金,97.269,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.37.269.v2.mp3,0,0,v2\r\n张国荣,沉默是金,120.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo02.00.256.b.mp3,0,0,b\r\n张国荣,风继续吹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.00.000.int.mp3,0,0,int\r\n张国荣,风继续吹,27.857,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.27.857.v1.mp3,0,0,v1\r\n张国荣,风继续吹,98.558,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui01.38.558.c1.mp3,0,0,c1\r\n张国荣,风继续吹,171.783,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui02.51.783.v2.mp3,0,0,v2\r\n张国荣,风继续吹,242.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui04.02.231.c2.mp3,0,0,c2\r\n张学友,只想一生跟你走,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.00.000.int.mp3,0,0,int\r\n张学友,只想一生跟你走,37.163,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.37.163.v1.mp3,0,0,v1\r\n张学友,只想一生跟你走,109.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou01.49.166.c1.mp3,0,0,c1\r\n张学友,只想一生跟你走,155.215,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou02.35.215.v2.mp3,0,0,v2\r\n张学友,只想一生跟你走,212.55,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou03.32.550.c2.mp3,0,0,c2\r\n张学友,夕阳醉了,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,0,int\r\n张学友,夕阳醉了,37.929,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,0,v1\r\n张学友,夕阳醉了,97.674,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,0,c1\r\n张学友,夕阳醉了,168.636,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,0,v2\r\n张学友,夕阳醉了,228.368,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,0,c2\r\n张学友,每天爱你多一些,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.00.000.int.mp3,0,0,int\r\n张学友,每天爱你多一些,18.033,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.18.033.v1.mp3,0,0,v1\r\n张学友,每天爱你多一些,77.419,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo01.17.419.c1.mp3,0,0,c1\r\n张学友,每天爱你多一些,133.052,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo02.13.052.v2.mp3,0,0,v2\r\n张学友,每天爱你多一些,192.599,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo03.12.599.c2.mp3,0,0,c2\r\n张学友,秀发乱了,5.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.05.561.int.mp3,0,0,int\r\n张学友,秀发乱了,22.777,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.22.777.v1.mp3,0,0,v1\r\n张学友,秀发乱了,49.261,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.49.261.c1.mp3,0,0,c1\r\n张学友,秀发乱了,111.909,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa01.51.909.b.mp3,0,0,b\r\n张学友,秀发乱了,126.842,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa02.06.842.v2.mp3,0,0,v2\r\n张学友,饿狼传说,0.615,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.00.615.int.mp3,0,0,int\r\n张学友,饿狼传说,35.603,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.35.603.v1.mp3,0,0,v1\r\n张学友,饿狼传说,66.648,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.06.648.v2.mp3,0,0,v2\r\n张学友,饿狼传说,97.622,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.37.622.c1.mp3,0,0,c1\r\n张学友,饿狼传说,114.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.54.053.b.mp3,0,0,b\r\n方力申,好心好报,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.00.000.int.mp3,0,0,int\r\n方力申,好心好报,16.849,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.16.849.v1.mp3,0,0,v1\r\n方力申,好心好报,47.362,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.47.362.c1.mp3,0,0,c1\r\n方力申,好心好报,85.634,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.25.634.v2.mp3,0,0,v2\r\n方力申,好心好报,116.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.56.240.c2.mp3,0,0,c2\r\n李克勤,一生不变,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.00.000.int.mp3,0,0,int\r\n李克勤,一生不变,30.968,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.30.968.v1.mp3,0,0,v1\r\n李克勤,一生不变,88.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian01.28.734.c1.mp3,0,0,c1\r\n李克勤,一生不变,124.72,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.04.721.v2.mp3,0,0,v2\r\n李克勤,一生不变,175.383,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.55.383.c2.mp3,0,0,c2\r\n杨千嬅,姊妹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.00.000.int.mp3,0,0,int\r\n杨千嬅,姊妹,14.157,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.14.157.v1.mp3,0,0,v1\r\n杨千嬅,姊妹,69.754,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei01.09.754.c1.mp3,0,0,c1\r\n杨千嬅,姊妹,120.031,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.00.031.v2.mp3,0,0,v2\r\n杨千嬅,姊妹,175.714,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.55.714.c2.mp3,0,0,c2\r\n杨千嬅,小城大事,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.00.000.int.mp3,0,0,int\r\n杨千嬅,小城大事,17.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.17.734.v1.mp3,0,0,v1\r\n杨千嬅,小城大事,104.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.04.212.c1.mp3,0,0,c1\r\n杨千嬅,小城大事,112.828,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.52.828.v2.mp3,0,0,v2\r\n杨千嬅,小城大事,145.551,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng02.25.551.c2.mp3,0,0,c2\r\n杨千嬅,少女的祈祷,0.753,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.00.753.int.mp3,0,0,int\r\n杨千嬅,少女的祈祷,7.988,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.07.988.v1.mp3,0,0,v1\r\n杨千嬅,少女的祈祷,40.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.40.213.c1.mp3,0,0,c1\r\n杨千嬅,少女的祈祷,87.25,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.27.250.b.mp3,0,0,b\r\n杨千嬅,少女的祈祷,105.911,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.45.911.v2.mp3,0,0,v2\r\n林子祥,在水中央,1.092,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.01.092.int.mp3,0,0,int\r\n林子祥,在水中央,31.294,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.31.294.v1.mp3,0,0,v1\r\n林子祥,在水中央,79.344,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.69.344.c1.mp3,0,0,c1\r\n林子祥,在水中央,103.341,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.43.341.v2.mp3,0,0,v2\r\n林子祥,在水中央,128.012,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang02.08.012.b.mp3,0,0,b\r\n林子祥,长路漫漫伴你闯,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.00.000.int.mp3,0,0,int\r\n林子祥,长路漫漫伴你闯,18.794,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.18.794.v1.mp3,0,0,v1\r\n林子祥,长路漫漫伴你闯,56.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.56.055.c1.mp3,0,0,c1\r\n林子祥,长路漫漫伴你闯,89.056,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu01.29.056.b.mp3,0,0,b\r\n林子祥,长路漫漫伴你闯,130.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu02.10.561.v2.mp3,0,0,v2\r\n梅艳芳,Stand By Me,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.00.000.int.mp3,0,0,int\r\n梅艳芳,Stand By Me,11.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.11.256.v1.mp3,0,0,v1\r\n梅艳芳,Stand By Me,43.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.43.212.c1.mp3,0,0,c1\r\n梅艳芳,Stand By Me,60.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By01.00.539.v2.mp3,0,0,v2\r\n梅艳芳,Stand By Me,125.317,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By02.05.317.v3.mp3,0,0,v3\r\n梅艳芳,似水流年,1.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.01.150.int.mp3,0,0,int\r\n梅艳芳,似水流年,27.379,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.27.379.v1.mp3,0,0,v1\r\n梅艳芳,似水流年,92.979,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian01.32.979.c1.mp3,0,0,c1\r\n梅艳芳,似水流年,134.296,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.14.296.b.mp3,0,0,b\r\n梅艳芳,似水流年,158.423,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.38.423.c2.mp3,0,0,c2\r\n梅艳芳,淑女,0.141,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.00.141.int.mp3,0,0,int\r\n梅艳芳,淑女,27.353,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.27.353.v1.mp3,0,0,v1\r\n梅艳芳,淑女,87.427,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv01.27.427.c1.mp3,0,0,c1\r\n梅艳芳,淑女,125.948,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.05.948.c2.mp3,0,0,c2\r\n梅艳芳,淑女,142.327,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.22.327.v2.mp3,0,0,v2\r\n梅艳芳,蔓珠沙华,1.188,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.01.188.int.mp3,0,0,int\r\n梅艳芳,蔓珠沙华,19.375,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.19.375.v1.mp3,0,0,v1\r\n梅艳芳,蔓珠沙华,85.221,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.25.221.c1.mp3,0,0,c1\r\n梅艳芳,蔓珠沙华,89.373,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.29.373.v2.mp3,0,0,v2\r\n梅艳芳,蔓珠沙华,241.238,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu04.01.238.c2.mp3,0,0,c2\r\n汪明荃,京华春梦,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.00.000.int.mp3,0,0,int\r\n汪明荃,京华春梦,17.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.17.631.v1.mp3,0,0,v1\r\n汪明荃,京华春梦,68.064,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.08.064.c1.mp3,0,0,c1\r\n汪明荃,京华春梦,93.314,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.33.314.v2.mp3,0,0,v2\r\n汪明荃,京华春梦,131.273,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua02.11.273.c2.mp3,0,0,c2\r\n王菲,容易受伤的女人,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.00.000.int.mp3,0,0,int\r\n王菲,容易受伤的女人,17.644,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.17.644.v1.mp3,0,0,v1\r\n王菲,容易受伤的女人,61.181,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.01.181.c1.mp3,0,0,c1\r\n王菲,容易受伤的女人,76.667,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.16.667.v2.mp3,0,0,v2\r\n王菲,容易受伤的女人,148.342,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi02.28.342.c2.mp3,0,0,c2\r\n王菲,给自己的情书,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.00.000.int.mp3,0,0,int\r\n王菲,给自己的情书,12.538,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.12.538.v1.mp3,0,0,v1\r\n王菲,给自己的情书,46.768,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.46.768.c1.mp3,0,0,c1\r\n王菲,给自己的情书,81.085,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.21.085.v2.mp3,0,0,v2\r\n王菲,给自己的情书,115.336,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.55.336.c2.mp3,0,0,c2\r\n甄妮,明日话今天,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.00.000.int.mp3,0,0,int\r\n甄妮,明日话今天,13.126,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.13.126.v1.mp3,0,0,v1\r\n甄妮,明日话今天,39.421,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.39.421.c1.mp3,0,0,c1\r\n甄妮,明日话今天,67.248,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.07.248.b.mp3,0,0,b\r\n甄妮,明日话今天,93.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.33.631.v2.mp3,0,0,v2\r\n罗文,好歌献给你,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.00.000.int.mp3,0,0,int\r\n罗文,好歌献给你,20.282,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.20.284.v1.mp3,0,0,v1\r\n罗文,好歌献给你,65.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.65.539.c1.mp3,0,0,c1\r\n罗文,好歌献给你,119.821,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge01.59.821.v2.mp3,0,0,v2\r\n罗文,好歌献给你,142.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge02.22.213.c2.mp3,0,0,c2\r\n罗文,小李飞刀,0.894,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.00.894.int.mp3,0,0,int\r\n罗文,小李飞刀,17.293,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.17.293.v1.mp3,0,0,v1\r\n罗文,小李飞刀,66.265,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.06.265.c1.mp3,0,0,c1\r\n罗文,小李飞刀,90.043,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.30.043.v2.mp3,0,0,v2\r\n罗文,小李飞刀,114.193,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.54.193.b.mp3,0,0,b\r\n罗文/甄妮,时间始终你好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.00.000.int.mp3,0,0,int\r\n罗文/甄妮,时间始终你好,14.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.14.231.v1.mp3,0,0,v1\r\n罗文/甄妮,时间始终你好,41.895,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.41.896.c1.mp3,0,0,c1\r\n罗文/甄妮,时间始终你好,57.573,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.57.573.v2.mp3,0,0,v2\r\n罗文/甄妮,时间始终你好,86.063,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian01.25.063.b.mp3,0,0,b\r\n草蜢,失恋,0.829,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.00.829.int.mp3,0,0,int\r\n草蜢,失恋,16.639,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.16.639.v1.mp3,0,0,v1\r\n草蜢,失恋,45.632,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.45.632.c1.mp3,0,0,c1\r\n草蜢,失恋,60.418,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.00.418.v2.mp3,0,0,v2\r\n草蜢,失恋,74.956,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.14.956.b.mp3,0,0,b\r\n薛凯琪,奇洛李维斯回信,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.00.000.int.mp3,0,0,int\r\n薛凯琪,奇洛李维斯回信,28.511,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.28.511.v1.mp3,0,0,v1\r\n薛凯琪,奇洛李维斯回信,76.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.16.770.c1.mp3,0,0,c1\r\n薛凯琪,奇洛李维斯回信,118.029,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.58.029.v2.mp3,0,0,v2\r\n薛凯琪,奇洛李维斯回信,166.07,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si02.46.070.c2.mp3,0,0,c2\r\n许志安,女人之苦,1.472,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.01.472.int.mp3,0,0,int\r\n许志安,女人之苦,34.921,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.34.921.v1.mp3,0,0,v1\r\n许志安,女人之苦,72.563,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.12.563.v2.mp3,0,0,v2\r\n许志安,女人之苦,82.526,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.22.526.c1.mp3,0,0,c1\r\n许志安,女人之苦,157.947,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku02.37.947.c2.mp3,0,0,c2\r\n许志安,男人最痛,1.349,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.01.349.int.mp3,0,0,int\r\n许志安,男人最痛,34.598,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.34.598.v1.mp3,0,0,v1\r\n许志安,男人最痛,92.89,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui01.32.890.c1.mp3,0,0,c1\r\n许志安,男人最痛,150.755,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui02.30.755.v2.mp3,0,0,v2\r\n许志安,男人最痛,182.081,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui03.02.081.c2.mp3,0,0,c2\r\n谭咏麟,爱在深秋,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.00.000.int.mp3,0,0,int\r\n谭咏麟,爱在深秋,19.839,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.19.839.v1.mp3,0,0,v1\r\n谭咏麟,爱在深秋,73.253,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.13.253.c1.mp3,0,0,c1\r\n谭咏麟,爱在深秋,99.036,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.39.036.v2.mp3,0,0,v2\r\n谭咏麟,爱在深秋,166.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu02.46.266.c2.mp3,0,0,c2\r\n谭咏麟,爱情陷阱,1.148,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.01.148.int.mp3,0,0,int\r\n谭咏麟,爱情陷阱,20.623,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.20.623.v1.mp3,0,0,v1\r\n谭咏麟,爱情陷阱,72.468,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.12.468.c1.mp3,0,0,c1\r\n谭咏麟,爱情陷阱,92.441,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.32.441.b.mp3,0,0,b\r\n谭咏麟,爱情陷阱,111.859,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.51.859.v2.mp3,0,0,v2\r\n郑中基,无赖,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.00.000.int.mp3,0,0,int\r\n郑中基,无赖,15.211,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.15.211.v1.mp3,0,0,v1\r\n郑中基,无赖,66.38,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai01.06.380.c1.mp3,0,0,c1\r\n郑中基,无赖,123.42,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.03.420.v2.mp3,0,0,v2\r\n郑中基,无赖,157.142,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.37.142.c2.mp3,0,0,c2\r\n郑秀文,终身美丽,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.00.000.int.mp3,0,0,int\r\n郑秀文,终身美丽,13.426,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.13.426.v1.mp3,0,0,v1\r\n郑秀文,终身美丽,68.817,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.08.817.c1.mp3,0,0,c1\r\n郑秀文,终身美丽,112.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.52.819.v2.mp3,0,0,v2\r\n郑秀文,终身美丽,138.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen02.18.770.c2.mp3,0,0,c2\r\n郑融,红绿灯,3.305,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.03.305.int.mp3,0,0,int\r\n郑融,红绿灯,20.984,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.20.984.v1.mp3,0,0,v1\r\n郑融,红绿灯,54.459,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.54.459.c1.mp3,0,0,c1\r\n郑融,红绿灯,89.5498,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.29.548.b.mp3,0,0,b\r\n郑融,红绿灯,105.075,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.45.075.v2.mp3,0,0,v2\r\n郭富城,Para Para Sakura,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.00.000.int.mp3,0,0,int\r\n郭富城,Para Para Sakura,28.92,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.28.920.v1.mp3,0,0,v1\r\n郭富城,Para Para Sakura,54.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.54.398.c1.mp3,0,0,c1\r\n郭富城,Para Para Sakura,79.73,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.19.730.v2.mp3,0,0,v2\r\n郭富城,Para Para Sakura,105.171,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.45.171.c2.mp3,0,0,c2\r\n陈奕迅,K歌之王,2.307,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.02.307.int.mp3,0,0,int\r\n陈奕迅,K歌之王,13.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.13.266.v1.mp3,0,0,v1\r\n陈奕迅,K歌之王,63.987,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.03.987.c1.mp3,0,0,c1\r\n陈奕迅,K歌之王,115.357,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.55.357.v2.mp3,0,0,v2\r\n陈奕迅,K歌之王,139.916,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge02.19.916.c2.mp3,0,0,c2\r\n陈奕迅,Shall We Talk,5.765,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.05.765.int.mp3,0,0,int\r\n陈奕迅,Shall We Talk,10.125,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.10.125.v1.mp3,0,0,v1\r\n陈奕迅,Shall We Talk,49.035,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.49.035.c1.mp3,0,0,c1\r\n陈奕迅,Shall We Talk,88.98,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk01.28.980.v2.mp3,0,0,v2\r\n陈奕迅,Shall We Talk,134.893,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk02.14.893.c2.mp3,0,0,c2\r\n陈奕迅,夕阳无限好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,0,int\r\n陈奕迅,夕阳无限好,24.413,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,0,v1\r\n陈奕迅,夕阳无限好,73.359,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,0,c1\r\n陈奕迅,夕阳无限好,144.303,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,0,v2\r\n陈奕迅,夕阳无限好,169.766,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,0,c2\r\n陈奕迅,天下无双,1.191,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.01.191.int.mp3,0,0,int\r\n陈奕迅,天下无双,24.115,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.24.115.v1.mp3,0,0,v1\r\n陈奕迅,天下无双,69.836,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.09.836.b.mp3,0,0,b\r\n陈奕迅,天下无双,79.725,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.19.725.v2.mp3,0,0,v2\r\n陈奕迅,天下无双,100.448,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.40.448.c1.mp3,0,0,c1\r\n陈奕迅,富士山下,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.00.000.int.mp3,0,0,int\r\n陈奕迅,富士山下,22.083,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.22.083.v1.mp3,0,0,v1\r\n陈奕迅,富士山下,58.65,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.58.650.c1.mp3,0,0,c1\r\n陈奕迅,富士山下,102.915,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi01.42.916.v2.mp3,0,0,v2\r\n陈奕迅,富士山下,139.56,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi02.19.560.c2.mp3,0,0,c2\r\n陈奕迅,陀飞轮,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.00.000.int.mp3,0,0,int\r\n陈奕迅,陀飞轮,15.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.15.398.v1.mp3,0,0,v1\r\n陈奕迅,陀飞轮,71.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.11.240.c1.mp3,0,0,c1\r\n陈奕迅,陀飞轮,113.128,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.53.128.v2.mp3,0,0,v2\r\n陈奕迅,陀飞轮,142.661,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun02.22.661.c2.mp3,0,0,c2\r\n黎明,对不起 我爱你,1.103,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.01.103.int.mp3,0,0,int\r\n黎明,对不起 我爱你,28.529,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.28.529.v1.mp3,0,0,v1\r\n黎明,对不起 我爱你,121.174,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.01.174.b.mp3,0,0,b\r\n黎明,对不起 我爱你,139.74,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.19.740.v2.mp3,0,0,v2\r\n黎明,对不起 我爱你,157.295,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.37.295.c2.mp3,0,0,c2\r\n" + "csv": "AGA江海迦,小问题,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.00.000.int.mp3,0,int\r\nAGA江海迦,小问题,14.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.14.166.v1.mp3,0,v1\r\nAGA江海迦,小问题,58.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti00.58.150.c1.mp3,0,c1\r\nAGA江海迦,小问题,87.795,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.27.795.v2.mp3,0,v2\r\nAGA江海迦,小问题,117.068,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Wen%20Ti01.57.068.c2.mp3,0,c2\r\nTWINS,下一站天后,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.00.000.int.mp3,0,int\r\nTWINS,下一站天后,12.787,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.12.787.v1.mp3,0,v1\r\nTWINS,下一站天后,52.904,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou00.52.904.c1.mp3,0,c1\r\nTWINS,下一站天后,88.668,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou01.28.668.v2.mp3,0,v2\r\nTWINS,下一站天后,128.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Hou02.08.819.c2.mp3,0,c2\r\nTWINS,风筝与风,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.00.000.int.mp3,0,int\r\nTWINS,风筝与风,21.505,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.21.505.v1.mp3,0,v1\r\nTWINS,风筝与风,51.404,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu00.51.404.c1.mp3,0,c1\r\nTWINS,风筝与风,93.627,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu01.33.627.v2.mp3,0,v2\r\nTWINS,风筝与风,123.392,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Feng%20Zheng%20Yu02.03.392.c2.mp3,0,c2\r\n侧田,男人KTV,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.00.000.int.mp3,0,int\r\n侧田,男人KTV,31.263,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv00.31.263.v1.mp3,0,v1\r\n侧田,男人KTV,61.19,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.01.190.v2.mp3,0,v2\r\n侧田,男人KTV,90.017,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv01.30.017.c1.mp3,0,c1\r\n侧田,男人KTV,193.219,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Renktv03.13.219.c2.mp3,0,c2\r\n刘德华,独自去偷欢,4.023,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.04.023.int.mp3,0,int\r\n刘德华,独自去偷欢,27.681,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan00.27.681.v1.mp3,0,v1\r\n刘德华,独自去偷欢,60.672,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.00.672.c1.mp3,0,c1\r\n刘德华,独自去偷欢,84.048,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.24.048.v2.mp3,0,v2\r\n刘德华,独自去偷欢,116.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tou%20Huan01.56.999.c2.mp3,0,c2\r\n卫兰,心乱如麻,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.00.000.int.mp3,0,int\r\n卫兰,心乱如麻,17.415,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan00.17.415.v1.mp3,0,v1\r\n卫兰,心乱如麻,66.578,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.06.578.c1.mp3,0,c1\r\n卫兰,心乱如麻,107.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan01.47.053.v2.mp3,0,v2\r\n卫兰,心乱如麻,156.13,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Luan02.36.130.c2.mp3,0,c2\r\n容祖儿,搜神记,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.00.000.int.mp3,0,int\r\n容祖儿,搜神记,21.082,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen00.21.082.v1.mp3,0,v1\r\n容祖儿,搜神记,75.074,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen01.15.074.c1.mp3,0,c1\r\n容祖儿,搜神记,145.721,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.25.721.v2.mp3,0,v2\r\n容祖儿,搜神记,162.705,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sou%20Shen02.42.705.c2.mp3,0,c2\r\n张国荣,当年情,0.999,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.00.999.int.mp3,0,int\r\n张国荣,当年情,24.978,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing00.24.978.v1.mp3,0,v1\r\n张国荣,当年情,73.227,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing01.13.227.c1.mp3,0,c1\r\n张国荣,当年情,132.8,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.12.800.b.mp3,0,b\r\n张国荣,当年情,169.518,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dang%20Nian%20Qing02.49.518.v2.mp3,0,v2\r\n张国荣,沉默是金,0.654,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.00.654.int.mp3,0,int\r\n张国荣,沉默是金,27.546,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo00.27.546.v1.mp3,0,v1\r\n张国荣,沉默是金,74.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.14.055.c1.mp3,0,c1\r\n张国荣,沉默是金,97.269,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo01.37.269.v2.mp3,0,v2\r\n张国荣,沉默是金,120.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chen%20Mo02.00.256.b.mp3,0,b\r\n张国荣,风继续吹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.00.000.int.mp3,0,int\r\n张国荣,风继续吹,27.857,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui00.27.857.v1.mp3,0,v1\r\n张国荣,风继续吹,98.558,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui01.38.558.c1.mp3,0,c1\r\n张国荣,风继续吹,171.783,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui02.51.783.v2.mp3,0,v2\r\n张国荣,风继续吹,242.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ji%20Xu%20Chui04.02.231.c2.mp3,0,c2\r\n张学友,只想一生跟你走,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.00.000.int.mp3,0,int\r\n张学友,只想一生跟你走,37.163,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou00.37.163.v1.mp3,0,v1\r\n张学友,只想一生跟你走,109.166,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou01.49.166.c1.mp3,0,c1\r\n张学友,只想一生跟你走,155.215,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou02.35.215.v2.mp3,0,v2\r\n张学友,只想一生跟你走,212.55,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Gen%20Ni%20Zou03.32.550.c2.mp3,0,c2\r\n张学友,夕阳醉了,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,int\r\n张学友,夕阳醉了,37.929,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,v1\r\n张学友,夕阳醉了,97.674,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,c1\r\n张学友,夕阳醉了,168.636,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,v2\r\n张学友,夕阳醉了,228.368,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,c2\r\n张学友,每天爱你多一些,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.00.000.int.mp3,0,int\r\n张学友,每天爱你多一些,18.033,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo00.18.033.v1.mp3,0,v1\r\n张学友,每天爱你多一些,77.419,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo01.17.419.c1.mp3,0,c1\r\n张学友,每天爱你多一些,133.052,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo02.13.052.v2.mp3,0,v2\r\n张学友,每天爱你多一些,192.599,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Ni%20Duo03.12.599.c2.mp3,0,c2\r\n张学友,秀发乱了,5.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.05.561.int.mp3,0,int\r\n张学友,秀发乱了,22.777,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.22.777.v1.mp3,0,v1\r\n张学友,秀发乱了,49.261,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa00.49.261.c1.mp3,0,c1\r\n张学友,秀发乱了,111.909,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa01.51.909.b.mp3,0,b\r\n张学友,秀发乱了,126.842,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiu%20Fa02.06.842.v2.mp3,0,v2\r\n张学友,饿狼传说,0.615,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.00.615.int.mp3,0,int\r\n张学友,饿狼传说,35.603,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang00.35.603.v1.mp3,0,v1\r\n张学友,饿狼传说,66.648,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.06.648.v2.mp3,0,v2\r\n张学友,饿狼传说,97.622,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.37.622.c1.mp3,0,c1\r\n张学友,饿狼传说,114.053,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/E%20Lang01.54.053.b.mp3,0,b\r\n方力申,好心好报,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.00.000.int.mp3,0,int\r\n方力申,好心好报,16.849,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.16.849.v1.mp3,0,v1\r\n方力申,好心好报,47.362,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao00.47.362.c1.mp3,0,c1\r\n方力申,好心好报,85.634,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.25.634.v2.mp3,0,v2\r\n方力申,好心好报,116.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Bao01.56.240.c2.mp3,0,c2\r\n李克勤,一生不变,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.00.000.int.mp3,0,int\r\n李克勤,一生不变,30.968,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian00.30.968.v1.mp3,0,v1\r\n李克勤,一生不变,88.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian01.28.734.c1.mp3,0,c1\r\n李克勤,一生不变,124.72,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.04.721.v2.mp3,0,v2\r\n李克勤,一生不变,175.383,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Bian02.55.383.c2.mp3,0,c2\r\n杨千嬅,姊妹,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.00.000.int.mp3,0,int\r\n杨千嬅,姊妹,14.157,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei00.14.157.v1.mp3,0,v1\r\n杨千嬅,姊妹,69.754,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei01.09.754.c1.mp3,0,c1\r\n杨千嬅,姊妹,120.031,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.00.031.v2.mp3,0,v2\r\n杨千嬅,姊妹,175.714,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zi%20Mei02.55.714.c2.mp3,0,c2\r\n杨千嬅,小城大事,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.00.000.int.mp3,0,int\r\n杨千嬅,小城大事,17.734,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng00.17.734.v1.mp3,0,v1\r\n杨千嬅,小城大事,104.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.04.212.c1.mp3,0,c1\r\n杨千嬅,小城大事,112.828,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng01.52.828.v2.mp3,0,v2\r\n杨千嬅,小城大事,145.551,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Cheng02.25.551.c2.mp3,0,c2\r\n杨千嬅,少女的祈祷,0.753,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.00.753.int.mp3,0,int\r\n杨千嬅,少女的祈祷,7.988,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.07.988.v1.mp3,0,v1\r\n杨千嬅,少女的祈祷,40.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao00.40.213.c1.mp3,0,c1\r\n杨千嬅,少女的祈祷,87.25,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.27.250.b.mp3,0,b\r\n杨千嬅,少女的祈祷,105.911,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qi%20Dao01.45.911.v2.mp3,0,v2\r\n林子祥,在水中央,1.092,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.01.092.int.mp3,0,int\r\n林子祥,在水中央,31.294,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang00.31.294.v1.mp3,0,v1\r\n林子祥,在水中央,79.344,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.69.344.c1.mp3,0,c1\r\n林子祥,在水中央,103.341,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang01.43.341.v2.mp3,0,v2\r\n林子祥,在水中央,128.012,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shui%20Zhong%20Yang02.08.012.b.mp3,0,b\r\n林子祥,长路漫漫伴你闯,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.00.000.int.mp3,0,int\r\n林子祥,长路漫漫伴你闯,18.794,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.18.794.v1.mp3,0,v1\r\n林子祥,长路漫漫伴你闯,56.055,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu00.56.055.c1.mp3,0,c1\r\n林子祥,长路漫漫伴你闯,89.056,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu01.29.056.b.mp3,0,b\r\n林子祥,长路漫漫伴你闯,130.561,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chang%20Lu02.10.561.v2.mp3,0,v2\r\n梅艳芳,Stand By Me,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.00.000.int.mp3,0,int\r\n梅艳芳,Stand By Me,11.256,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.11.256.v1.mp3,0,v1\r\n梅艳芳,Stand By Me,43.212,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By00.43.212.c1.mp3,0,c1\r\n梅艳芳,Stand By Me,60.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By01.00.539.v2.mp3,0,v2\r\n梅艳芳,Stand By Me,125.317,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Stand%20By02.05.317.v3.mp3,0,v3\r\n梅艳芳,似水流年,1.15,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.01.150.int.mp3,0,int\r\n梅艳芳,似水流年,27.379,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian00.27.379.v1.mp3,0,v1\r\n梅艳芳,似水流年,92.979,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian01.32.979.c1.mp3,0,c1\r\n梅艳芳,似水流年,134.296,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.14.296.b.mp3,0,b\r\n梅艳芳,似水流年,158.423,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Liu%20Nian02.38.423.c2.mp3,0,c2\r\n梅艳芳,淑女,0.141,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.00.141.int.mp3,0,int\r\n梅艳芳,淑女,27.353,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv00.27.353.v1.mp3,0,v1\r\n梅艳芳,淑女,87.427,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv01.27.427.c1.mp3,0,c1\r\n梅艳芳,淑女,125.948,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.05.948.c2.mp3,0,c2\r\n梅艳芳,淑女,142.327,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shu%20Nv02.22.327.v2.mp3,0,v2\r\n梅艳芳,蔓珠沙华,1.188,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.01.188.int.mp3,0,int\r\n梅艳芳,蔓珠沙华,19.375,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu00.19.375.v1.mp3,0,v1\r\n梅艳芳,蔓珠沙华,85.221,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.25.221.c1.mp3,0,c1\r\n梅艳芳,蔓珠沙华,89.373,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu01.29.373.v2.mp3,0,v2\r\n梅艳芳,蔓珠沙华,241.238,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Man%20Zhu04.01.238.c2.mp3,0,c2\r\n汪明荃,京华春梦,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.00.000.int.mp3,0,int\r\n汪明荃,京华春梦,17.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua00.17.631.v1.mp3,0,v1\r\n汪明荃,京华春梦,68.064,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.08.064.c1.mp3,0,c1\r\n汪明荃,京华春梦,93.314,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua01.33.314.v2.mp3,0,v2\r\n汪明荃,京华春梦,131.273,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Jing%20Hua02.11.273.c2.mp3,0,c2\r\n王菲,容易受伤的女人,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.00.000.int.mp3,0,int\r\n王菲,容易受伤的女人,17.644,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi00.17.644.v1.mp3,0,v1\r\n王菲,容易受伤的女人,61.181,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.01.181.c1.mp3,0,c1\r\n王菲,容易受伤的女人,76.667,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi01.16.667.v2.mp3,0,v2\r\n王菲,容易受伤的女人,148.342,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Rong%20Yi02.28.342.c2.mp3,0,c2\r\n王菲,给自己的情书,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.00.000.int.mp3,0,int\r\n王菲,给自己的情书,12.538,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.12.538.v1.mp3,0,v1\r\n王菲,给自己的情书,46.768,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu00.46.768.c1.mp3,0,c1\r\n王菲,给自己的情书,81.085,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.21.085.v2.mp3,0,v2\r\n王菲,给自己的情书,115.336,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Shu01.55.336.c2.mp3,0,c2\r\n甄妮,明日话今天,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.00.000.int.mp3,0,int\r\n甄妮,明日话今天,13.126,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.13.126.v1.mp3,0,v1\r\n甄妮,明日话今天,39.421,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian00.39.421.c1.mp3,0,c1\r\n甄妮,明日话今天,67.248,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.07.248.b.mp3,0,b\r\n甄妮,明日话今天,93.631,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hua%20Jin%20Tian01.33.631.v2.mp3,0,v2\r\n罗文,好歌献给你,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.00.000.int.mp3,0,int\r\n罗文,好歌献给你,20.282,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.20.284.v1.mp3,0,v1\r\n罗文,好歌献给你,65.539,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge00.65.539.c1.mp3,0,c1\r\n罗文,好歌献给你,119.821,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge01.59.821.v2.mp3,0,v2\r\n罗文,好歌献给你,142.213,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hao%20Ge02.22.213.c2.mp3,0,c2\r\n罗文,小李飞刀,0.894,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.00.894.int.mp3,0,int\r\n罗文,小李飞刀,17.293,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao00.17.293.v1.mp3,0,v1\r\n罗文,小李飞刀,66.265,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.06.265.c1.mp3,0,c1\r\n罗文,小李飞刀,90.043,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.30.043.v2.mp3,0,v2\r\n罗文,小李飞刀,114.193,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Dao01.54.193.b.mp3,0,b\r\n罗文/甄妮,时间始终你好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.00.000.int.mp3,0,int\r\n罗文/甄妮,时间始终你好,14.231,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.14.231.v1.mp3,0,v1\r\n罗文/甄妮,时间始终你好,41.895,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.41.896.c1.mp3,0,c1\r\n罗文/甄妮,时间始终你好,57.573,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian00.57.573.v2.mp3,0,v2\r\n罗文/甄妮,时间始终你好,86.063,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian01.25.063.b.mp3,0,b\r\n草蜢,失恋,0.829,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.00.829.int.mp3,0,int\r\n草蜢,失恋,16.639,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.16.639.v1.mp3,0,v1\r\n草蜢,失恋,45.632,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian00.45.632.c1.mp3,0,c1\r\n草蜢,失恋,60.418,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.00.418.v2.mp3,0,v2\r\n草蜢,失恋,74.956,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Lian01.14.956.b.mp3,0,b\r\n薛凯琪,奇洛李维斯回信,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.00.000.int.mp3,0,int\r\n薛凯琪,奇洛李维斯回信,28.511,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si00.28.511.v1.mp3,0,v1\r\n薛凯琪,奇洛李维斯回信,76.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.16.770.c1.mp3,0,c1\r\n薛凯琪,奇洛李维斯回信,118.029,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si01.58.029.v2.mp3,0,v2\r\n薛凯琪,奇洛李维斯回信,166.07,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Li%20Wei%20Si02.46.070.c2.mp3,0,c2\r\n许志安,女人之苦,1.472,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.01.472.int.mp3,0,int\r\n许志安,女人之苦,34.921,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku00.34.921.v1.mp3,0,v1\r\n许志安,女人之苦,72.563,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.12.563.v2.mp3,0,v2\r\n许志安,女人之苦,82.526,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku01.22.526.c1.mp3,0,c1\r\n许志安,女人之苦,157.947,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nv%20Ren%20Ku02.37.947.c2.mp3,0,c2\r\n许志安,男人最痛,1.349,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.01.349.int.mp3,0,int\r\n许志安,男人最痛,34.598,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui00.34.598.v1.mp3,0,v1\r\n许志安,男人最痛,92.89,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui01.32.890.c1.mp3,0,c1\r\n许志安,男人最痛,150.755,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui02.30.755.v2.mp3,0,v2\r\n许志安,男人最痛,182.081,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Ren%20Zui03.02.081.c2.mp3,0,c2\r\n谭咏麟,爱在深秋,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.00.000.int.mp3,0,int\r\n谭咏麟,爱在深秋,19.839,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu00.19.839.v1.mp3,0,v1\r\n谭咏麟,爱在深秋,73.253,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.13.253.c1.mp3,0,c1\r\n谭咏麟,爱在深秋,99.036,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu01.39.036.v2.mp3,0,v2\r\n谭咏麟,爱在深秋,166.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Qiu02.46.266.c2.mp3,0,c2\r\n谭咏麟,爱情陷阱,1.148,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.01.148.int.mp3,0,int\r\n谭咏麟,爱情陷阱,20.623,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing00.20.623.v1.mp3,0,v1\r\n谭咏麟,爱情陷阱,72.468,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.12.468.c1.mp3,0,c1\r\n谭咏麟,爱情陷阱,92.441,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.32.441.b.mp3,0,b\r\n谭咏麟,爱情陷阱,111.859,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xian%20Jing01.51.859.v2.mp3,0,v2\r\n郑中基,无赖,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.00.000.int.mp3,0,int\r\n郑中基,无赖,15.211,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai00.15.211.v1.mp3,0,v1\r\n郑中基,无赖,66.38,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai01.06.380.c1.mp3,0,c1\r\n郑中基,无赖,123.42,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.03.420.v2.mp3,0,v2\r\n郑中基,无赖,157.142,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Lai02.37.142.c2.mp3,0,c2\r\n郑秀文,终身美丽,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.00.000.int.mp3,0,int\r\n郑秀文,终身美丽,13.426,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen00.13.426.v1.mp3,0,v1\r\n郑秀文,终身美丽,68.817,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.08.817.c1.mp3,0,c1\r\n郑秀文,终身美丽,112.819,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen01.52.819.v2.mp3,0,v2\r\n郑秀文,终身美丽,138.77,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhong%20Shen02.18.770.c2.mp3,0,c2\r\n郑融,红绿灯,3.305,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.03.305.int.mp3,0,int\r\n郑融,红绿灯,20.984,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.20.984.v1.mp3,0,v1\r\n郑融,红绿灯,54.459,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng00.54.459.c1.mp3,0,c1\r\n郑融,红绿灯,89.5498,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.29.548.b.mp3,0,b\r\n郑融,红绿灯,105.075,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Hong%20Lv%20Deng01.45.075.v2.mp3,0,v2\r\n郭富城,Para Para Sakura,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.00.000.int.mp3,0,int\r\n郭富城,Para Para Sakura,28.92,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.28.920.v1.mp3,0,v1\r\n郭富城,Para Para Sakura,54.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura00.54.398.c1.mp3,0,c1\r\n郭富城,Para Para Sakura,79.73,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.19.730.v2.mp3,0,v2\r\n郭富城,Para Para Sakura,105.171,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Sakura01.45.171.c2.mp3,0,c2\r\n陈奕迅,K歌之王,2.307,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.02.307.int.mp3,0,int\r\n陈奕迅,K歌之王,13.266,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge00.13.266.v1.mp3,0,v1\r\n陈奕迅,K歌之王,63.987,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.03.987.c1.mp3,0,c1\r\n陈奕迅,K歌之王,115.357,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge01.55.357.v2.mp3,0,v2\r\n陈奕迅,K歌之王,139.916,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/K%20Ge02.19.916.c2.mp3,0,c2\r\n陈奕迅,Shall We Talk,5.765,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.05.765.int.mp3,0,int\r\n陈奕迅,Shall We Talk,10.125,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.10.125.v1.mp3,0,v1\r\n陈奕迅,Shall We Talk,49.035,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk00.49.035.c1.mp3,0,c1\r\n陈奕迅,Shall We Talk,88.98,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk01.28.980.v2.mp3,0,v2\r\n陈奕迅,Shall We Talk,134.893,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shall%20We%20Talk02.14.893.c2.mp3,0,c2\r\n陈奕迅,夕阳无限好,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.00.000.int.mp3,0,int\r\n陈奕迅,夕阳无限好,24.413,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui00.37.929.v1.mp3,0,v1\r\n陈奕迅,夕阳无限好,73.359,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui01.37.674.c1.mp3,0,c1\r\n陈奕迅,夕阳无限好,144.303,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui02.48.636.v2.mp3,0,v2\r\n陈奕迅,夕阳无限好,169.766,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xi%20Yang%20Zui03.48.368.c2.mp3,0,c2\r\n陈奕迅,天下无双,1.191,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.01.191.int.mp3,0,int\r\n陈奕迅,天下无双,24.115,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu00.24.115.v1.mp3,0,v1\r\n陈奕迅,天下无双,69.836,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.09.836.b.mp3,0,b\r\n陈奕迅,天下无双,79.725,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.19.725.v2.mp3,0,v2\r\n陈奕迅,天下无双,100.448,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Xia%20Wu01.40.448.c1.mp3,0,c1\r\n陈奕迅,富士山下,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.00.000.int.mp3,0,int\r\n陈奕迅,富士山下,22.083,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.22.083.v1.mp3,0,v1\r\n陈奕迅,富士山下,58.65,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi00.58.650.c1.mp3,0,c1\r\n陈奕迅,富士山下,102.915,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi01.42.916.v2.mp3,0,v2\r\n陈奕迅,富士山下,139.56,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fu%20Shi02.19.560.c2.mp3,0,c2\r\n陈奕迅,陀飞轮,0.0,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.00.000.int.mp3,0,int\r\n陈奕迅,陀飞轮,15.398,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun00.15.398.v1.mp3,0,v1\r\n陈奕迅,陀飞轮,71.24,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.11.240.c1.mp3,0,c1\r\n陈奕迅,陀飞轮,113.128,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun01.53.128.v2.mp3,0,v2\r\n陈奕迅,陀飞轮,142.661,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tuo%20Fei%20Lun02.22.661.c2.mp3,0,c2\r\n黎明,对不起 我爱你,1.103,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.01.103.int.mp3,0,int\r\n黎明,对不起 我爱你,28.529,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi00.28.529.v1.mp3,0,v1\r\n黎明,对不起 我爱你,121.174,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.01.174.b.mp3,0,b\r\n黎明,对不起 我爱你,139.74,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.19.740.v2.mp3,0,v2\r\n黎明,对不起 我爱你,157.295,45.0,https://c-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dui%20Bu%20Qi02.37.295.c2.mp3,0,c2\r\n" } }, { @@ -23,7 +23,7 @@ "fields": { "name": "Anisochrony", "process_csv": false, - "csv": "default,0,0.0,3.050113378684807,ANIS/0.wav,0,0,0\r\ndefault,1,0.0,3.050113378684807,ANIS/1.wav,0,0,0\r\ndefault,10,0.0,3.050113378684807,ANIS/10.wav,0,0,0\r\ndefault,1001,0.0,3.050113378684807,ANIS/1001.wav,0,0,0\r\ndefault,101250,0.0,3.050113378684807,ANIS/101250.wav,0,0,0\r\ndefault,10136,0.0,3.050113378684807,ANIS/10136.wav,0,0,0\r\ndefault,102631,0.0,3.050113378684807,ANIS/102631.wav,0,0,0\r\ndefault,1055,0.0,3.050113378684807,ANIS/1055.wav,0,0,0\r\ndefault,106,0.0,3.050113378684807,ANIS/106.wav,0,0,0\r\ndefault,10679,0.0,3.050113378684807,ANIS/10679.wav,0,0,0\r\ndefault,1069,0.0,3.050113378684807,ANIS/1069.wav,0,0,0\r\ndefault,108122,0.0,3.050113378684807,ANIS/108122.wav,0,0,0\r\ndefault,11,0.0,3.050113378684807,ANIS/11.wav,0,0,0\r\ndefault,111,0.0,3.050113378684807,ANIS/111.wav,0,0,0\r\ndefault,11250,0.0,3.050113378684807,ANIS/11250.wav,0,0,0\r\ndefault,1126,0.0,3.050113378684807,ANIS/1126.wav,0,0,0\r\ndefault,113906,0.0,3.050113378684807,ANIS/113906.wav,0,0,0\r\ndefault,11403,0.0,3.050113378684807,ANIS/11403.wav,0,0,0\r\ndefault,115460,0.0,3.050113378684807,ANIS/115460.wav,0,0,0\r\ndefault,1187,0.0,3.050113378684807,ANIS/1187.wav,0,0,0\r\ndefault,119,0.0,3.050113378684807,ANIS/119.wav,0,0,0\r\ndefault,12,0.0,3.050113378684807,ANIS/12.wav,0,0,0\r\ndefault,12014,0.0,3.050113378684807,ANIS/12014.wav,0,0,0\r\ndefault,121637,0.0,3.050113378684807,ANIS/121637.wav,0,0,0\r\ndefault,125,0.0,3.050113378684807,ANIS/125.wav,0,0,0\r\ndefault,12656,0.0,3.050113378684807,ANIS/12656.wav,0,0,0\r\ndefault,1267,0.0,3.050113378684807,ANIS/1267.wav,0,0,0\r\ndefault,128145,0.0,3.050113378684807,ANIS/128145.wav,0,0,0\r\ndefault,12829,0.0,3.050113378684807,ANIS/12829.wav,0,0,0\r\ndefault,129893,0.0,3.050113378684807,ANIS/129893.wav,0,0,0\r\ndefault,13,0.0,3.050113378684807,ANIS/13.wav,0,0,0\r\ndefault,132,0.0,3.050113378684807,ANIS/132.wav,0,0,0\r\ndefault,1335,0.0,3.050113378684807,ANIS/1335.wav,0,0,0\r\ndefault,135000,0.0,3.0501360544217686,ANIS/135000.wav,0,0,0\r\ndefault,13515,0.0,3.050113378684807,ANIS/13515.wav,0,0,0\r\ndefault,136842,0.0,3.050113378684807,ANIS/136842.wav,0,0,0\r\ndefault,14,0.0,3.050113378684807,ANIS/14.wav,0,0,0\r\ndefault,1406,0.0,3.050113378684807,ANIS/1406.wav,0,0,0\r\ndefault,141,0.0,3.050113378684807,ANIS/141.wav,0,0,0\r\ndefault,14238,0.0,3.050113378684807,ANIS/14238.wav,0,0,0\r\ndefault,1425,0.0,3.050113378684807,ANIS/1425.wav,0,0,0\r\ndefault,144163,0.0,3.050113378684807,ANIS/144163.wav,0,0,0\r\ndefault,14433,0.0,3.050113378684807,ANIS/14433.wav,0,0,0\r\ndefault,148,0.0,3.050113378684807,ANIS/148.wav,0,0,0\r\ndefault,1502,0.0,3.050113378684807,ANIS/1502.wav,0,0,0\r\ndefault,151875,0.0,3.050113378684807,ANIS/151875.wav,0,0,0\r\ndefault,15205,0.0,3.050113378684807,ANIS/15205.wav,0,0,0\r\ndefault,153947,0.0,3.050113378684807,ANIS/153947.wav,0,0,0\r\ndefault,158,0.0,3.050113378684807,ANIS/158.wav,0,0,0\r\ndefault,1582,0.0,3.050113378684807,ANIS/1582.wav,0,0,0\r\ndefault,16,0.0,3.050113378684807,ANIS/16.wav,0,0,0\r\ndefault,16018,0.0,3.050113378684807,ANIS/16018.wav,0,0,0\r\ndefault,1604,0.0,3.050113378684807,ANIS/1604.wav,0,0,0\r\ndefault,162183,0.0,3.050113378684807,ANIS/162183.wav,0,0,0\r\ndefault,167,0.0,3.050113378684807,ANIS/167.wav,0,0,0\r\ndefault,16875,0.0,3.050113378684807,ANIS/16875.wav,0,0,0\r\ndefault,1689,0.0,3.050113378684807,ANIS/1689.wav,0,0,0\r\ndefault,170859,0.0,3.050113378684807,ANIS/170859.wav,0,0,0\r\ndefault,17105,0.0,3.050113378684807,ANIS/17105.wav,0,0,0\r\ndefault,173190,0.0,3.050113378684807,ANIS/173190.wav,0,0,0\r\ndefault,176,0.0,3.050113378684807,ANIS/176.wav,0,0,0\r\ndefault,178,0.0,3.050113378684807,ANIS/178.wav,0,0,0\r\ndefault,1780,0.0,3.050113378684807,ANIS/1780.wav,0,0,0\r\ndefault,18,0.0,3.050113378684807,ANIS/18.wav,0,0,0\r\ndefault,180000,0.0,3.050113378684807,ANIS/180000.wav,0,0,0\r\ndefault,18020,0.0,3.050113378684807,ANIS/18020.wav,0,0,0\r\ndefault,182456,0.0,3.050113378684807,ANIS/182456.wav,0,0,0\r\ndefault,188,0.0,3.050113378684807,ANIS/188.wav,0,0,0\r\ndefault,18984,0.0,3.050113378684807,ANIS/18984.wav,0,0,0\r\ndefault,19,0.0,3.050113378684807,ANIS/19.wav,0,0,0\r\ndefault,1901,0.0,3.050113378684807,ANIS/1901.wav,0,0,0\r\ndefault,192217,0.0,3.050113378684807,ANIS/192217.wav,0,0,0\r\ndefault,19243,0.0,3.050113378684807,ANIS/19243.wav,0,0,0\r\ndefault,194839,0.0,3.050113378684807,ANIS/194839.wav,0,0,0\r\ndefault,198,0.0,3.050113378684807,ANIS/198.wav,0,0,0\r\ndefault,2,0.0,3.050113378684807,ANIS/2.wav,0,0,0\r\ndefault,20,0.0,3.050113378684807,ANIS/20.wav,0,0,0\r\ndefault,2002,0.0,3.050113378684807,ANIS/2002.wav,0,0,0\r\ndefault,202500,0.0,3.050113378684807,ANIS/202500.wav,0,0,0\r\ndefault,20273,0.0,3.050113378684807,ANIS/20273.wav,0,0,0\r\ndefault,205263,0.0,3.050113378684807,ANIS/205263.wav,0,0,0\r\ndefault,21,0.0,3.050113378684807,ANIS/21.wav,0,0,0\r\ndefault,2109,0.0,3.050113378684807,ANIS/2109.wav,0,0,0\r\ndefault,211,0.0,3.050113378684807,ANIS/211.wav,0,0,0\r\ndefault,21357,0.0,3.050113378684807,ANIS/21357.wav,0,0,0\r\ndefault,2138,0.0,3.050113378684807,ANIS/2138.wav,0,0,0\r\ndefault,216244,0.0,3.050113378684807,ANIS/216244.wav,0,0,0\r\ndefault,21649,0.0,3.050113378684807,ANIS/21649.wav,0,0,0\r\ndefault,22,0.0,3.050113378684807,ANIS/22.wav,0,0,0\r\ndefault,222,0.0,3.050113378684807,ANIS/222.wav,0,0,0\r\ndefault,22500,0.0,3.050113378684807,ANIS/22500.wav,0,0,0\r\ndefault,2253,0.0,3.050113378684807,ANIS/2253.wav,0,0,0\r\ndefault,227813,0.0,3.050113378684807,ANIS/227813.wav,0,0,0\r\ndefault,22807,0.0,3.050113378684807,ANIS/22807.wav,0,0,0\r\ndefault,23,0.0,3.050113378684807,ANIS/23.wav,0,0,0\r\ndefault,230921,0.0,3.050113378684807,ANIS/230921.wav,0,0,0\r\ndefault,2373,0.0,3.050113378684807,ANIS/2373.wav,0,0,0\r\ndefault,238,0.0,3.050113378684807,ANIS/238.wav,0,0,0\r\ndefault,24027,0.0,3.050113378684807,ANIS/24027.wav,0,0,0\r\ndefault,2405,0.0,3.050113378684807,ANIS/2405.wav,0,0,0\r\ndefault,243274,0.0,3.050113378684807,ANIS/243274.wav,0,0,0\r\ndefault,25,0.0,3.050113378684807,ANIS/25.wav,0,0,0\r\ndefault,250,0.0,3.050113378684807,ANIS/250.wav,0,0,0\r\ndefault,25313,0.0,3.050113378684807,ANIS/25313.wav,0,0,0\r\ndefault,2534,0.0,3.050113378684807,ANIS/2534.wav,0,0,0\r\ndefault,256289,0.0,3.050113378684807,ANIS/256289.wav,0,0,0\r\ndefault,25658,0.0,3.050113378684807,ANIS/25658.wav,0,0,0\r\ndefault,259786,0.0,3.050113378684807,ANIS/259786.wav,0,0,0\r\ndefault,26,0.0,3.050113378684807,ANIS/26.wav,0,0,0\r\ndefault,264,0.0,3.050113378684807,ANIS/264.wav,0,0,0\r\ndefault,267,0.0,3.050113378684807,ANIS/267.wav,0,0,0\r\ndefault,2670,0.0,3.050113378684807,ANIS/2670.wav,0,0,0\r\ndefault,270000,0.0,3.050113378684807,ANIS/270000.wav,0,0,0\r\ndefault,27030,0.0,3.050113378684807,ANIS/27030.wav,0,0,0\r\ndefault,273684,0.0,3.050113378684807,ANIS/273684.wav,0,0,0\r\ndefault,28,0.0,3.050113378684807,ANIS/28.wav,0,0,0\r\ndefault,2813,0.0,3.050113378684807,ANIS/2813.wav,0,0,0\r\ndefault,282,0.0,3.050113378684807,ANIS/282.wav,0,0,0\r\ndefault,28477,0.0,3.050113378684807,ANIS/28477.wav,0,0,0\r\ndefault,2851,0.0,3.050113378684807,ANIS/2851.wav,0,0,0\r\ndefault,288325,0.0,3.050113378684807,ANIS/288325.wav,0,0,0\r\ndefault,28865,0.0,3.050113378684807,ANIS/28865.wav,0,0,0\r\ndefault,297,0.0,3.050113378684807,ANIS/297.wav,0,0,0\r\ndefault,3,0.0,3.050113378684807,ANIS/3.wav,0,0,0\r\ndefault,30,0.0,3.050113378684807,ANIS/30.wav,0,0,0\r\ndefault,3003,0.0,3.050113378684807,ANIS/3003.wav,0,0,0\r\ndefault,303750,0.0,3.050113378684807,ANIS/303750.wav,0,0,0\r\ndefault,30409,0.0,3.050113378684807,ANIS/30409.wav,0,0,0\r\ndefault,307894,0.0,3.050113378684807,ANIS/307894.wav,0,0,0\r\ndefault,31,0.0,3.050113378684807,ANIS/31.wav,0,0,0\r\ndefault,3164,0.0,3.050113378684807,ANIS/3164.wav,0,0,0\r\ndefault,317,0.0,3.050113378684807,ANIS/317.wav,0,0,0\r\ndefault,32036,0.0,3.050113378684807,ANIS/32036.wav,0,0,0\r\ndefault,3207,0.0,3.050113378684807,ANIS/3207.wav,0,0,0\r\ndefault,324366,0.0,3.050113378684807,ANIS/324366.wav,0,0,0\r\ndefault,33,0.0,3.050113378684807,ANIS/33.wav,0,0,0\r\ndefault,334,0.0,3.050113378684807,ANIS/334.wav,0,0,0\r\ndefault,33750,0.0,3.050113378684807,ANIS/33750.wav,0,0,0\r\ndefault,3379,0.0,3.050113378684807,ANIS/3379.wav,0,0,0\r\ndefault,341719,0.0,3.050113378684807,ANIS/341719.wav,0,0,0\r\ndefault,34210,0.0,3.050113378684807,ANIS/34210.wav,0,0,0\r\ndefault,346381,0.0,3.050113378684807,ANIS/346381.wav,0,0,0\r\ndefault,35,0.0,3.050113378684807,ANIS/35.wav,0,0,0\r\ndefault,352,0.0,3.050113378684807,ANIS/352.wav,0,0,0\r\ndefault,356,0.0,3.050113378684807,ANIS/356.wav,0,0,0\r\ndefault,3560,0.0,3.050113378684807,ANIS/3560.wav,0,0,0\r\ndefault,36041,0.0,3.050113378684807,ANIS/36041.wav,0,0,0\r\ndefault,364912,0.0,3.050113378684807,ANIS/364912.wav,0,0,0\r\ndefault,37,0.0,3.050113378684807,ANIS/37.wav,0,0,0\r\ndefault,375,0.0,3.050113378684807,ANIS/375.wav,0,0,0\r\ndefault,37969,0.0,3.050113378684807,ANIS/37969.wav,0,0,0\r\ndefault,3801,0.0,3.050113378684807,ANIS/3801.wav,0,0,0\r\ndefault,384434,0.0,3.050113378684807,ANIS/384434.wav,0,0,0\r\ndefault,38487,0.0,3.050113378684807,ANIS/38487.wav,0,0,0\r\ndefault,389679,0.0,3.050113378684807,ANIS/389679.wav,0,0,0\r\ndefault,396,0.0,3.050113378684807,ANIS/396.wav,0,0,0\r\ndefault,4,0.0,3.050113378684807,ANIS/4.wav,0,0,0\r\ndefault,40,0.0,3.050113378684807,ANIS/40.wav,0,0,0\r\ndefault,4005,0.0,3.050113378684807,ANIS/4005.wav,0,0,0\r\ndefault,405000,0.0,3.0501360544217686,ANIS/405000.wav,0,0,0\r\ndefault,40546,0.0,3.050113378684807,ANIS/40546.wav,0,0,0\r\ndefault,410526,0.0,3.050113378684807,ANIS/410526.wav,0,0,0\r\ndefault,42,0.0,3.050113378684807,ANIS/42.wav,0,0,0\r\ndefault,4219,0.0,3.050113378684807,ANIS/4219.wav,0,0,0\r\ndefault,422,0.0,3.050113378684807,ANIS/422.wav,0,0,0\r\ndefault,42715,0.0,3.050113378684807,ANIS/42715.wav,0,0,0\r\ndefault,4276,0.0,3.050113378684807,ANIS/4276.wav,0,0,0\r\ndefault,432488,0.0,3.050113378684807,ANIS/432488.wav,0,0,0\r\ndefault,43298,0.0,3.050113378684807,ANIS/43298.wav,0,0,0\r\ndefault,44,0.0,3.050113378684807,ANIS/44.wav,0,0,0\r\ndefault,445,0.0,3.050113378684807,ANIS/445.wav,0,0,0\r\ndefault,45000,0.0,3.0501360544217686,ANIS/45000.wav,0,0,0\r\ndefault,4505,0.0,3.050113378684807,ANIS/4505.wav,0,0,0\r\ndefault,45614,0.0,3.050113378684807,ANIS/45614.wav,0,0,0\r\ndefault,47,0.0,3.050113378684807,ANIS/47.wav,0,0,0\r\ndefault,4746,0.0,3.050113378684807,ANIS/4746.wav,0,0,0\r\ndefault,475,0.0,3.050113378684807,ANIS/475.wav,0,0,0\r\ndefault,48054,0.0,3.050113378684807,ANIS/48054.wav,0,0,0\r\ndefault,4811,0.0,3.050113378684807,ANIS/4811.wav,0,0,0\r\ndefault,49,0.0,3.050113378684807,ANIS/49.wav,0,0,0\r\ndefault,5,0.0,3.050113378684807,ANIS/5.wav,0,0,0\r\ndefault,501,0.0,3.050113378684807,ANIS/501.wav,0,0,0\r\ndefault,50625,0.0,3.050113378684807,ANIS/50625.wav,0,0,0\r\ndefault,5068,0.0,3.050113378684807,ANIS/5068.wav,0,0,0\r\ndefault,51316,0.0,3.050113378684807,ANIS/51316.wav,0,0,0\r\ndefault,527,0.0,3.050113378684807,ANIS/527.wav,0,0,0\r\ndefault,53,0.0,3.050113378684807,ANIS/53.wav,0,0,0\r\ndefault,5339,0.0,3.050113378684807,ANIS/5339.wav,0,0,0\r\ndefault,535,0.0,3.050113378684807,ANIS/535.wav,0,0,0\r\ndefault,54061,0.0,3.050113378684807,ANIS/54061.wav,0,0,0\r\ndefault,56,0.0,3.050113378684807,ANIS/56.wav,0,0,0\r\ndefault,5625,0.0,3.050113378684807,ANIS/5625.wav,0,0,0\r\ndefault,563,0.0,3.050113378684807,ANIS/563.wav,0,0,0\r\ndefault,56953,0.0,3.050113378684807,ANIS/56953.wav,0,0,0\r\ndefault,5702,0.0,3.050113378684807,ANIS/5702.wav,0,0,0\r\ndefault,57730,0.0,3.050113378684807,ANIS/57730.wav,0,0,0\r\ndefault,59,0.0,3.050113378684807,ANIS/59.wav,0,0,0\r\ndefault,593,0.0,3.050113378684807,ANIS/593.wav,0,0,0\r\ndefault,6,0.0,3.050113378684807,ANIS/6.wav,0,0,0\r\ndefault,6007,0.0,3.050113378684807,ANIS/6007.wav,0,0,0\r\ndefault,60819,0.0,3.050113378684807,ANIS/60819.wav,0,0,0\r\ndefault,63,0.0,3.050113378684807,ANIS/63.wav,0,0,0\r\ndefault,6328,0.0,3.050113378684807,ANIS/6328.wav,0,0,0\r\ndefault,634,0.0,3.050113378684807,ANIS/634.wav,0,0,0\r\ndefault,64072,0.0,3.050113378684807,ANIS/64072.wav,0,0,0\r\ndefault,6414,0.0,3.050113378684807,ANIS/6414.wav,0,0,0\r\ndefault,64946,0.0,3.050113378684807,ANIS/64946.wav,0,0,0\r\ndefault,66,0.0,3.050113378684807,ANIS/66.wav,0,0,0\r\ndefault,667,0.0,3.050113378684807,ANIS/667.wav,0,0,0\r\ndefault,67500,0.0,3.050113378684807,ANIS/67500.wav,0,0,0\r\ndefault,6758,0.0,3.050113378684807,ANIS/6758.wav,0,0,0\r\ndefault,68421,0.0,3.050113378684807,ANIS/68421.wav,0,0,0\r\ndefault,7,0.0,3.050113378684807,ANIS/7.wav,0,0,0\r\ndefault,70,0.0,3.050113378684807,ANIS/70.wav,0,0,0\r\ndefault,703,0.0,3.050113378684807,ANIS/703.wav,0,0,0\r\ndefault,7119,0.0,3.050113378684807,ANIS/7119.wav,0,0,0\r\ndefault,713,0.0,3.050113378684807,ANIS/713.wav,0,0,0\r\ndefault,72081,0.0,3.050113378684807,ANIS/72081.wav,0,0,0\r\ndefault,7216,0.0,3.050113378684807,ANIS/7216.wav,0,0,0\r\ndefault,74,0.0,3.050113378684807,ANIS/74.wav,0,0,0\r\ndefault,751,0.0,3.050113378684807,ANIS/751.wav,0,0,0\r\ndefault,75938,0.0,3.050113378684807,ANIS/75938.wav,0,0,0\r\ndefault,7602,0.0,3.050113378684807,ANIS/7602.wav,0,0,0\r\ndefault,76974,0.0,3.050113378684807,ANIS/76974.wav,0,0,0\r\ndefault,79,0.0,3.050113378684807,ANIS/79.wav,0,0,0\r\ndefault,791,0.0,3.050113378684807,ANIS/791.wav,0,0,0\r\ndefault,8,0.0,3.050113378684807,ANIS/8.wav,0,0,0\r\ndefault,8009,0.0,3.050113378684807,ANIS/8009.wav,0,0,0\r\ndefault,802,0.0,3.050113378684807,ANIS/802.wav,0,0,0\r\ndefault,81091,0.0,3.050113378684807,ANIS/81091.wav,0,0,0\r\ndefault,83,0.0,3.050113378684807,ANIS/83.wav,0,0,0\r\ndefault,8438,0.0,3.050113378684807,ANIS/8438.wav,0,0,0\r\ndefault,845,0.0,3.050113378684807,ANIS/845.wav,0,0,0\r\ndefault,85430,0.0,3.050113378684807,ANIS/85430.wav,0,0,0\r\ndefault,8553,0.0,3.050113378684807,ANIS/8553.wav,0,0,0\r\ndefault,86595,0.0,3.050113378684807,ANIS/86595.wav,0,0,0\r\ndefault,88,0.0,3.050113378684807,ANIS/88.wav,0,0,0\r\ndefault,89,0.0,3.050113378684807,ANIS/89.wav,0,0,0\r\ndefault,890,0.0,3.050113378684807,ANIS/890.wav,0,0,0\r\ndefault,9,0.0,3.050113378684807,ANIS/9.wav,0,0,0\r\ndefault,90000,0.0,3.050113378684807,ANIS/90000.wav,0,0,0\r\ndefault,9010,0.0,3.050113378684807,ANIS/9010.wav,0,0,0\r\ndefault,91228,0.0,3.050113378684807,ANIS/91228.wav,0,0,0\r\ndefault,94,0.0,3.050113378684807,ANIS/94.wav,0,0,0\r\ndefault,9492,0.0,3.050113378684807,ANIS/9492.wav,0,0,0\r\ndefault,950,0.0,3.050113378684807,ANIS/950.wav,0,0,0\r\ndefault,96108,0.0,3.050113378684807,ANIS/96108.wav,0,0,0\r\ndefault,9622,0.0,3.050113378684807,ANIS/9622.wav,0,0,0\r\ndefault,99,0.0,3.050113378684807,ANIS/99.wav,0,0,0" + "csv": "default,0,0.0,3.050113378684807,ANIS/0.wav,0,0\r\ndefault,1,0.0,3.050113378684807,ANIS/1.wav,0,0\r\ndefault,10,0.0,3.050113378684807,ANIS/10.wav,0,0\r\ndefault,1001,0.0,3.050113378684807,ANIS/1001.wav,0,0\r\ndefault,101250,0.0,3.050113378684807,ANIS/101250.wav,0,0\r\ndefault,10136,0.0,3.050113378684807,ANIS/10136.wav,0,0\r\ndefault,102631,0.0,3.050113378684807,ANIS/102631.wav,0,0\r\ndefault,1055,0.0,3.050113378684807,ANIS/1055.wav,0,0\r\ndefault,106,0.0,3.050113378684807,ANIS/106.wav,0,0\r\ndefault,10679,0.0,3.050113378684807,ANIS/10679.wav,0,0\r\ndefault,1069,0.0,3.050113378684807,ANIS/1069.wav,0,0\r\ndefault,108122,0.0,3.050113378684807,ANIS/108122.wav,0,0\r\ndefault,11,0.0,3.050113378684807,ANIS/11.wav,0,0\r\ndefault,111,0.0,3.050113378684807,ANIS/111.wav,0,0\r\ndefault,11250,0.0,3.050113378684807,ANIS/11250.wav,0,0\r\ndefault,1126,0.0,3.050113378684807,ANIS/1126.wav,0,0\r\ndefault,113906,0.0,3.050113378684807,ANIS/113906.wav,0,0\r\ndefault,11403,0.0,3.050113378684807,ANIS/11403.wav,0,0\r\ndefault,115460,0.0,3.050113378684807,ANIS/115460.wav,0,0\r\ndefault,1187,0.0,3.050113378684807,ANIS/1187.wav,0,0\r\ndefault,119,0.0,3.050113378684807,ANIS/119.wav,0,0\r\ndefault,12,0.0,3.050113378684807,ANIS/12.wav,0,0\r\ndefault,12014,0.0,3.050113378684807,ANIS/12014.wav,0,0\r\ndefault,121637,0.0,3.050113378684807,ANIS/121637.wav,0,0\r\ndefault,125,0.0,3.050113378684807,ANIS/125.wav,0,0\r\ndefault,12656,0.0,3.050113378684807,ANIS/12656.wav,0,0\r\ndefault,1267,0.0,3.050113378684807,ANIS/1267.wav,0,0\r\ndefault,128145,0.0,3.050113378684807,ANIS/128145.wav,0,0\r\ndefault,12829,0.0,3.050113378684807,ANIS/12829.wav,0,0\r\ndefault,129893,0.0,3.050113378684807,ANIS/129893.wav,0,0\r\ndefault,13,0.0,3.050113378684807,ANIS/13.wav,0,0\r\ndefault,132,0.0,3.050113378684807,ANIS/132.wav,0,0\r\ndefault,1335,0.0,3.050113378684807,ANIS/1335.wav,0,0\r\ndefault,135000,0.0,3.0501360544217686,ANIS/135000.wav,0,0\r\ndefault,13515,0.0,3.050113378684807,ANIS/13515.wav,0,0\r\ndefault,136842,0.0,3.050113378684807,ANIS/136842.wav,0,0\r\ndefault,14,0.0,3.050113378684807,ANIS/14.wav,0,0\r\ndefault,1406,0.0,3.050113378684807,ANIS/1406.wav,0,0\r\ndefault,141,0.0,3.050113378684807,ANIS/141.wav,0,0\r\ndefault,14238,0.0,3.050113378684807,ANIS/14238.wav,0,0\r\ndefault,1425,0.0,3.050113378684807,ANIS/1425.wav,0,0\r\ndefault,144163,0.0,3.050113378684807,ANIS/144163.wav,0,0\r\ndefault,14433,0.0,3.050113378684807,ANIS/14433.wav,0,0\r\ndefault,148,0.0,3.050113378684807,ANIS/148.wav,0,0\r\ndefault,1502,0.0,3.050113378684807,ANIS/1502.wav,0,0\r\ndefault,151875,0.0,3.050113378684807,ANIS/151875.wav,0,0\r\ndefault,15205,0.0,3.050113378684807,ANIS/15205.wav,0,0\r\ndefault,153947,0.0,3.050113378684807,ANIS/153947.wav,0,0\r\ndefault,158,0.0,3.050113378684807,ANIS/158.wav,0,0\r\ndefault,1582,0.0,3.050113378684807,ANIS/1582.wav,0,0\r\ndefault,16,0.0,3.050113378684807,ANIS/16.wav,0,0\r\ndefault,16018,0.0,3.050113378684807,ANIS/16018.wav,0,0\r\ndefault,1604,0.0,3.050113378684807,ANIS/1604.wav,0,0\r\ndefault,162183,0.0,3.050113378684807,ANIS/162183.wav,0,0\r\ndefault,167,0.0,3.050113378684807,ANIS/167.wav,0,0\r\ndefault,16875,0.0,3.050113378684807,ANIS/16875.wav,0,0\r\ndefault,1689,0.0,3.050113378684807,ANIS/1689.wav,0,0\r\ndefault,170859,0.0,3.050113378684807,ANIS/170859.wav,0,0\r\ndefault,17105,0.0,3.050113378684807,ANIS/17105.wav,0,0\r\ndefault,173190,0.0,3.050113378684807,ANIS/173190.wav,0,0\r\ndefault,176,0.0,3.050113378684807,ANIS/176.wav,0,0\r\ndefault,178,0.0,3.050113378684807,ANIS/178.wav,0,0\r\ndefault,1780,0.0,3.050113378684807,ANIS/1780.wav,0,0\r\ndefault,18,0.0,3.050113378684807,ANIS/18.wav,0,0\r\ndefault,180000,0.0,3.050113378684807,ANIS/180000.wav,0,0\r\ndefault,18020,0.0,3.050113378684807,ANIS/18020.wav,0,0\r\ndefault,182456,0.0,3.050113378684807,ANIS/182456.wav,0,0\r\ndefault,188,0.0,3.050113378684807,ANIS/188.wav,0,0\r\ndefault,18984,0.0,3.050113378684807,ANIS/18984.wav,0,0\r\ndefault,19,0.0,3.050113378684807,ANIS/19.wav,0,0\r\ndefault,1901,0.0,3.050113378684807,ANIS/1901.wav,0,0\r\ndefault,192217,0.0,3.050113378684807,ANIS/192217.wav,0,0\r\ndefault,19243,0.0,3.050113378684807,ANIS/19243.wav,0,0\r\ndefault,194839,0.0,3.050113378684807,ANIS/194839.wav,0,0\r\ndefault,198,0.0,3.050113378684807,ANIS/198.wav,0,0\r\ndefault,2,0.0,3.050113378684807,ANIS/2.wav,0,0\r\ndefault,20,0.0,3.050113378684807,ANIS/20.wav,0,0\r\ndefault,2002,0.0,3.050113378684807,ANIS/2002.wav,0,0\r\ndefault,202500,0.0,3.050113378684807,ANIS/202500.wav,0,0\r\ndefault,20273,0.0,3.050113378684807,ANIS/20273.wav,0,0\r\ndefault,205263,0.0,3.050113378684807,ANIS/205263.wav,0,0\r\ndefault,21,0.0,3.050113378684807,ANIS/21.wav,0,0\r\ndefault,2109,0.0,3.050113378684807,ANIS/2109.wav,0,0\r\ndefault,211,0.0,3.050113378684807,ANIS/211.wav,0,0\r\ndefault,21357,0.0,3.050113378684807,ANIS/21357.wav,0,0\r\ndefault,2138,0.0,3.050113378684807,ANIS/2138.wav,0,0\r\ndefault,216244,0.0,3.050113378684807,ANIS/216244.wav,0,0\r\ndefault,21649,0.0,3.050113378684807,ANIS/21649.wav,0,0\r\ndefault,22,0.0,3.050113378684807,ANIS/22.wav,0,0\r\ndefault,222,0.0,3.050113378684807,ANIS/222.wav,0,0\r\ndefault,22500,0.0,3.050113378684807,ANIS/22500.wav,0,0\r\ndefault,2253,0.0,3.050113378684807,ANIS/2253.wav,0,0\r\ndefault,227813,0.0,3.050113378684807,ANIS/227813.wav,0,0\r\ndefault,22807,0.0,3.050113378684807,ANIS/22807.wav,0,0\r\ndefault,23,0.0,3.050113378684807,ANIS/23.wav,0,0\r\ndefault,230921,0.0,3.050113378684807,ANIS/230921.wav,0,0\r\ndefault,2373,0.0,3.050113378684807,ANIS/2373.wav,0,0\r\ndefault,238,0.0,3.050113378684807,ANIS/238.wav,0,0\r\ndefault,24027,0.0,3.050113378684807,ANIS/24027.wav,0,0\r\ndefault,2405,0.0,3.050113378684807,ANIS/2405.wav,0,0\r\ndefault,243274,0.0,3.050113378684807,ANIS/243274.wav,0,0\r\ndefault,25,0.0,3.050113378684807,ANIS/25.wav,0,0\r\ndefault,250,0.0,3.050113378684807,ANIS/250.wav,0,0\r\ndefault,25313,0.0,3.050113378684807,ANIS/25313.wav,0,0\r\ndefault,2534,0.0,3.050113378684807,ANIS/2534.wav,0,0\r\ndefault,256289,0.0,3.050113378684807,ANIS/256289.wav,0,0\r\ndefault,25658,0.0,3.050113378684807,ANIS/25658.wav,0,0\r\ndefault,259786,0.0,3.050113378684807,ANIS/259786.wav,0,0\r\ndefault,26,0.0,3.050113378684807,ANIS/26.wav,0,0\r\ndefault,264,0.0,3.050113378684807,ANIS/264.wav,0,0\r\ndefault,267,0.0,3.050113378684807,ANIS/267.wav,0,0\r\ndefault,2670,0.0,3.050113378684807,ANIS/2670.wav,0,0\r\ndefault,270000,0.0,3.050113378684807,ANIS/270000.wav,0,0\r\ndefault,27030,0.0,3.050113378684807,ANIS/27030.wav,0,0\r\ndefault,273684,0.0,3.050113378684807,ANIS/273684.wav,0,0\r\ndefault,28,0.0,3.050113378684807,ANIS/28.wav,0,0\r\ndefault,2813,0.0,3.050113378684807,ANIS/2813.wav,0,0\r\ndefault,282,0.0,3.050113378684807,ANIS/282.wav,0,0\r\ndefault,28477,0.0,3.050113378684807,ANIS/28477.wav,0,0\r\ndefault,2851,0.0,3.050113378684807,ANIS/2851.wav,0,0\r\ndefault,288325,0.0,3.050113378684807,ANIS/288325.wav,0,0\r\ndefault,28865,0.0,3.050113378684807,ANIS/28865.wav,0,0\r\ndefault,297,0.0,3.050113378684807,ANIS/297.wav,0,0\r\ndefault,3,0.0,3.050113378684807,ANIS/3.wav,0,0\r\ndefault,30,0.0,3.050113378684807,ANIS/30.wav,0,0\r\ndefault,3003,0.0,3.050113378684807,ANIS/3003.wav,0,0\r\ndefault,303750,0.0,3.050113378684807,ANIS/303750.wav,0,0\r\ndefault,30409,0.0,3.050113378684807,ANIS/30409.wav,0,0\r\ndefault,307894,0.0,3.050113378684807,ANIS/307894.wav,0,0\r\ndefault,31,0.0,3.050113378684807,ANIS/31.wav,0,0\r\ndefault,3164,0.0,3.050113378684807,ANIS/3164.wav,0,0\r\ndefault,317,0.0,3.050113378684807,ANIS/317.wav,0,0\r\ndefault,32036,0.0,3.050113378684807,ANIS/32036.wav,0,0\r\ndefault,3207,0.0,3.050113378684807,ANIS/3207.wav,0,0\r\ndefault,324366,0.0,3.050113378684807,ANIS/324366.wav,0,0\r\ndefault,33,0.0,3.050113378684807,ANIS/33.wav,0,0\r\ndefault,334,0.0,3.050113378684807,ANIS/334.wav,0,0\r\ndefault,33750,0.0,3.050113378684807,ANIS/33750.wav,0,0\r\ndefault,3379,0.0,3.050113378684807,ANIS/3379.wav,0,0\r\ndefault,341719,0.0,3.050113378684807,ANIS/341719.wav,0,0\r\ndefault,34210,0.0,3.050113378684807,ANIS/34210.wav,0,0\r\ndefault,346381,0.0,3.050113378684807,ANIS/346381.wav,0,0\r\ndefault,35,0.0,3.050113378684807,ANIS/35.wav,0,0\r\ndefault,352,0.0,3.050113378684807,ANIS/352.wav,0,0\r\ndefault,356,0.0,3.050113378684807,ANIS/356.wav,0,0\r\ndefault,3560,0.0,3.050113378684807,ANIS/3560.wav,0,0\r\ndefault,36041,0.0,3.050113378684807,ANIS/36041.wav,0,0\r\ndefault,364912,0.0,3.050113378684807,ANIS/364912.wav,0,0\r\ndefault,37,0.0,3.050113378684807,ANIS/37.wav,0,0\r\ndefault,375,0.0,3.050113378684807,ANIS/375.wav,0,0\r\ndefault,37969,0.0,3.050113378684807,ANIS/37969.wav,0,0\r\ndefault,3801,0.0,3.050113378684807,ANIS/3801.wav,0,0\r\ndefault,384434,0.0,3.050113378684807,ANIS/384434.wav,0,0\r\ndefault,38487,0.0,3.050113378684807,ANIS/38487.wav,0,0\r\ndefault,389679,0.0,3.050113378684807,ANIS/389679.wav,0,0\r\ndefault,396,0.0,3.050113378684807,ANIS/396.wav,0,0\r\ndefault,4,0.0,3.050113378684807,ANIS/4.wav,0,0\r\ndefault,40,0.0,3.050113378684807,ANIS/40.wav,0,0\r\ndefault,4005,0.0,3.050113378684807,ANIS/4005.wav,0,0\r\ndefault,405000,0.0,3.0501360544217686,ANIS/405000.wav,0,0\r\ndefault,40546,0.0,3.050113378684807,ANIS/40546.wav,0,0\r\ndefault,410526,0.0,3.050113378684807,ANIS/410526.wav,0,0\r\ndefault,42,0.0,3.050113378684807,ANIS/42.wav,0,0\r\ndefault,4219,0.0,3.050113378684807,ANIS/4219.wav,0,0\r\ndefault,422,0.0,3.050113378684807,ANIS/422.wav,0,0\r\ndefault,42715,0.0,3.050113378684807,ANIS/42715.wav,0,0\r\ndefault,4276,0.0,3.050113378684807,ANIS/4276.wav,0,0\r\ndefault,432488,0.0,3.050113378684807,ANIS/432488.wav,0,0\r\ndefault,43298,0.0,3.050113378684807,ANIS/43298.wav,0,0\r\ndefault,44,0.0,3.050113378684807,ANIS/44.wav,0,0\r\ndefault,445,0.0,3.050113378684807,ANIS/445.wav,0,0\r\ndefault,45000,0.0,3.0501360544217686,ANIS/45000.wav,0,0\r\ndefault,4505,0.0,3.050113378684807,ANIS/4505.wav,0,0\r\ndefault,45614,0.0,3.050113378684807,ANIS/45614.wav,0,0\r\ndefault,47,0.0,3.050113378684807,ANIS/47.wav,0,0\r\ndefault,4746,0.0,3.050113378684807,ANIS/4746.wav,0,0\r\ndefault,475,0.0,3.050113378684807,ANIS/475.wav,0,0\r\ndefault,48054,0.0,3.050113378684807,ANIS/48054.wav,0,0\r\ndefault,4811,0.0,3.050113378684807,ANIS/4811.wav,0,0\r\ndefault,49,0.0,3.050113378684807,ANIS/49.wav,0,0\r\ndefault,5,0.0,3.050113378684807,ANIS/5.wav,0,0\r\ndefault,501,0.0,3.050113378684807,ANIS/501.wav,0,0\r\ndefault,50625,0.0,3.050113378684807,ANIS/50625.wav,0,0\r\ndefault,5068,0.0,3.050113378684807,ANIS/5068.wav,0,0\r\ndefault,51316,0.0,3.050113378684807,ANIS/51316.wav,0,0\r\ndefault,527,0.0,3.050113378684807,ANIS/527.wav,0,0\r\ndefault,53,0.0,3.050113378684807,ANIS/53.wav,0,0\r\ndefault,5339,0.0,3.050113378684807,ANIS/5339.wav,0,0\r\ndefault,535,0.0,3.050113378684807,ANIS/535.wav,0,0\r\ndefault,54061,0.0,3.050113378684807,ANIS/54061.wav,0,0\r\ndefault,56,0.0,3.050113378684807,ANIS/56.wav,0,0\r\ndefault,5625,0.0,3.050113378684807,ANIS/5625.wav,0,0\r\ndefault,563,0.0,3.050113378684807,ANIS/563.wav,0,0\r\ndefault,56953,0.0,3.050113378684807,ANIS/56953.wav,0,0\r\ndefault,5702,0.0,3.050113378684807,ANIS/5702.wav,0,0\r\ndefault,57730,0.0,3.050113378684807,ANIS/57730.wav,0,0\r\ndefault,59,0.0,3.050113378684807,ANIS/59.wav,0,0\r\ndefault,593,0.0,3.050113378684807,ANIS/593.wav,0,0\r\ndefault,6,0.0,3.050113378684807,ANIS/6.wav,0,0\r\ndefault,6007,0.0,3.050113378684807,ANIS/6007.wav,0,0\r\ndefault,60819,0.0,3.050113378684807,ANIS/60819.wav,0,0\r\ndefault,63,0.0,3.050113378684807,ANIS/63.wav,0,0\r\ndefault,6328,0.0,3.050113378684807,ANIS/6328.wav,0,0\r\ndefault,634,0.0,3.050113378684807,ANIS/634.wav,0,0\r\ndefault,64072,0.0,3.050113378684807,ANIS/64072.wav,0,0\r\ndefault,6414,0.0,3.050113378684807,ANIS/6414.wav,0,0\r\ndefault,64946,0.0,3.050113378684807,ANIS/64946.wav,0,0\r\ndefault,66,0.0,3.050113378684807,ANIS/66.wav,0,0\r\ndefault,667,0.0,3.050113378684807,ANIS/667.wav,0,0\r\ndefault,67500,0.0,3.050113378684807,ANIS/67500.wav,0,0\r\ndefault,6758,0.0,3.050113378684807,ANIS/6758.wav,0,0\r\ndefault,68421,0.0,3.050113378684807,ANIS/68421.wav,0,0\r\ndefault,7,0.0,3.050113378684807,ANIS/7.wav,0,0\r\ndefault,70,0.0,3.050113378684807,ANIS/70.wav,0,0\r\ndefault,703,0.0,3.050113378684807,ANIS/703.wav,0,0\r\ndefault,7119,0.0,3.050113378684807,ANIS/7119.wav,0,0\r\ndefault,713,0.0,3.050113378684807,ANIS/713.wav,0,0\r\ndefault,72081,0.0,3.050113378684807,ANIS/72081.wav,0,0\r\ndefault,7216,0.0,3.050113378684807,ANIS/7216.wav,0,0\r\ndefault,74,0.0,3.050113378684807,ANIS/74.wav,0,0\r\ndefault,751,0.0,3.050113378684807,ANIS/751.wav,0,0\r\ndefault,75938,0.0,3.050113378684807,ANIS/75938.wav,0,0\r\ndefault,7602,0.0,3.050113378684807,ANIS/7602.wav,0,0\r\ndefault,76974,0.0,3.050113378684807,ANIS/76974.wav,0,0\r\ndefault,79,0.0,3.050113378684807,ANIS/79.wav,0,0\r\ndefault,791,0.0,3.050113378684807,ANIS/791.wav,0,0\r\ndefault,8,0.0,3.050113378684807,ANIS/8.wav,0,0\r\ndefault,8009,0.0,3.050113378684807,ANIS/8009.wav,0,0\r\ndefault,802,0.0,3.050113378684807,ANIS/802.wav,0,0\r\ndefault,81091,0.0,3.050113378684807,ANIS/81091.wav,0,0\r\ndefault,83,0.0,3.050113378684807,ANIS/83.wav,0,0\r\ndefault,8438,0.0,3.050113378684807,ANIS/8438.wav,0,0\r\ndefault,845,0.0,3.050113378684807,ANIS/845.wav,0,0\r\ndefault,85430,0.0,3.050113378684807,ANIS/85430.wav,0,0\r\ndefault,8553,0.0,3.050113378684807,ANIS/8553.wav,0,0\r\ndefault,86595,0.0,3.050113378684807,ANIS/86595.wav,0,0\r\ndefault,88,0.0,3.050113378684807,ANIS/88.wav,0,0\r\ndefault,89,0.0,3.050113378684807,ANIS/89.wav,0,0\r\ndefault,890,0.0,3.050113378684807,ANIS/890.wav,0,0\r\ndefault,9,0.0,3.050113378684807,ANIS/9.wav,0,0\r\ndefault,90000,0.0,3.050113378684807,ANIS/90000.wav,0,0\r\ndefault,9010,0.0,3.050113378684807,ANIS/9010.wav,0,0\r\ndefault,91228,0.0,3.050113378684807,ANIS/91228.wav,0,0\r\ndefault,94,0.0,3.050113378684807,ANIS/94.wav,0,0\r\ndefault,9492,0.0,3.050113378684807,ANIS/9492.wav,0,0\r\ndefault,950,0.0,3.050113378684807,ANIS/950.wav,0,0\r\ndefault,96108,0.0,3.050113378684807,ANIS/96108.wav,0,0\r\ndefault,9622,0.0,3.050113378684807,ANIS/9622.wav,0,0\r\ndefault,99,0.0,3.050113378684807,ANIS/99.wav,0,0,0" } }, { @@ -32,7 +32,7 @@ "fields": { "name": "DurationDiscriminationTone", "process_csv": false, - "csv": "default,0,0.0,3.700045351473923,DDT/0.wav,0,0,0\r\ndefault,100000,0.0,3.8000453514739228,DDT/100000.wav,0,0,0\r\ndefault,10011,0.0,3.710045351473923,DDT/10011.wav,0,0,0\r\ndefault,1012500,0.0,4.712539682539682,DDT/1012500.wav,0,0,0\r\ndefault,101364,0.0,3.80140589569161,DDT/101364.wav,0,0,0\r\ndefault,1026314,0.0,4.726349206349206,DDT/1026314.wav,0,0,0\r\ndefault,104,0.0,3.7001360544217685,DDT/104.wav,0,0,0\r\ndefault,10547,0.0,3.7105895691609976,DDT/10547.wav,0,0,0\r\ndefault,1056,0.0,3.7010884353741496,DDT/1056.wav,0,0,0\r\ndefault,106787,0.0,3.806825396825397,DDT/106787.wav,0,0,0\r\ndefault,10691,0.0,3.7107256235827664,DDT/10691.wav,0,0,0\r\ndefault,1081219,0.0,4.781247165532879,DDT/1081219.wav,0,0,0\r\ndefault,110,0.0,3.7001360544217685,DDT/110.wav,0,0,0\r\ndefault,1112,0.0,3.701156462585034,DDT/1112.wav,0,0,0\r\ndefault,112500,0.0,3.8125396825396827,DDT/112500.wav,0,0,0\r\ndefault,11263,0.0,3.7112925170068025,DDT/11263.wav,0,0,0\r\ndefault,1139063,0.0,4.839092970521542,DDT/1139063.wav,0,0,0\r\ndefault,114035,0.0,3.8140589569161,DDT/114035.wav,0,0,0\r\ndefault,1154603,0.0,4.8546258503401365,DDT/1154603.wav,0,0,0\r\ndefault,117,0.0,3.70015873015873,DDT/117.wav,0,0,0\r\ndefault,1172,0.0,3.701201814058957,DDT/1172.wav,0,0,0\r\ndefault,11865,0.0,3.711904761904762,DDT/11865.wav,0,0,0\r\ndefault,1188,0.0,3.7012244897959183,DDT/1188.wav,0,0,0\r\ndefault,120135,0.0,3.82015873015873,DDT/120135.wav,0,0,0\r\ndefault,1216372,0.0,4.91641723356009,DDT/1216372.wav,0,0,0\r\ndefault,124,0.0,3.70015873015873,DDT/124.wav,0,0,0\r\ndefault,12500,0.0,3.7125396825396826,DDT/12500.wav,0,0,0\r\ndefault,1251,0.0,3.7012925170068027,DDT/1251.wav,0,0,0\r\ndefault,126563,0.0,3.8265986394557823,DDT/126563.wav,0,0,0\r\ndefault,12671,0.0,3.712698412698413,DDT/12671.wav,0,0,0\r\ndefault,1281445,0.0,4.981473922902494,DDT/1281445.wav,0,0,0\r\ndefault,128289,0.0,3.8283219954648526,DDT/128289.wav,0,0,0\r\ndefault,1298928,0.0,4.9989569160997736,DDT/1298928.wav,0,0,0\r\ndefault,1318,0.0,3.701360544217687,DDT/1318.wav,0,0,0\r\ndefault,132,0.0,3.70015873015873,DDT/132.wav,0,0,0\r\ndefault,13348,0.0,3.7133786848072563,DDT/13348.wav,0,0,0\r\ndefault,1350000,0.0,5.050045351473923,DDT/1350000.wav,0,0,0\r\ndefault,135152,0.0,3.835192743764172,DDT/135152.wav,0,0,0\r\ndefault,1368418,0.0,5.068458049886622,DDT/1368418.wav,0,0,0\r\ndefault,139,0.0,3.7001814058956914,DDT/139.wav,0,0,0\r\ndefault,14063,0.0,3.7141043083900227,DDT/14063.wav,0,0,0\r\ndefault,1408,0.0,3.701451247165533,DDT/1408.wav,0,0,0\r\ndefault,142383,0.0,3.842426303854875,DDT/142383.wav,0,0,0\r\ndefault,14254,0.0,3.7142857142857144,DDT/14254.wav,0,0,0\r\ndefault,1441626,0.0,5.141655328798186,DDT/1441626.wav,0,0,0\r\ndefault,144325,0.0,3.8443537414965987,DDT/144325.wav,0,0,0\r\ndefault,146,0.0,3.7001814058956914,DDT/146.wav,0,0,0\r\ndefault,1483,0.0,3.7015192743764174,DDT/1483.wav,0,0,0\r\ndefault,150000,0.0,3.850045351473923,DDT/150000.wav,0,0,0\r\ndefault,15017,0.0,3.7150566893424037,DDT/15017.wav,0,0,0\r\ndefault,1518750,0.0,5.218775510204082,DDT/1518750.wav,0,0,0\r\ndefault,152046,0.0,3.8520861678004534,DDT/152046.wav,0,0,0\r\ndefault,1539471,0.0,5.239501133786848,DDT/1539471.wav,0,0,0\r\ndefault,156,0.0,3.7001814058956914,DDT/156.wav,0,0,0\r\ndefault,1563,0.0,3.7015873015873018,DDT/1563.wav,0,0,0\r\ndefault,15820,0.0,3.7158503401360545,DDT/15820.wav,0,0,0\r\ndefault,1584,0.0,3.7016099773242632,DDT/1584.wav,0,0,0\r\ndefault,160181,0.0,3.860204081632653,DDT/160181.wav,0,0,0\r\ndefault,16036,0.0,3.7160770975056687,DDT/16036.wav,0,0,0\r\ndefault,1621829,0.0,5.321859410430839,DDT/1621829.wav,0,0,0\r\ndefault,165,0.0,3.700204081632653,DDT/165.wav,0,0,0\r\ndefault,1669,0.0,3.7017006802721086,DDT/1669.wav,0,0,0\r\ndefault,168750,0.0,3.8687755102040815,DDT/168750.wav,0,0,0\r\ndefault,16894,0.0,3.716938775510204,DDT/16894.wav,0,0,0\r\ndefault,1708594,0.0,5.408616780045351,DDT/1708594.wav,0,0,0\r\ndefault,171052,0.0,3.8710884353741495,DDT/171052.wav,0,0,0\r\ndefault,1731905,0.0,5.431927437641724,DDT/1731905.wav,0,0,0\r\ndefault,1758,0.0,3.7017913832199545,DDT/1758.wav,0,0,0\r\ndefault,176,0.0,3.700204081632653,DDT/176.wav,0,0,0\r\ndefault,17798,0.0,3.7178231292517006,DDT/17798.wav,0,0,0\r\ndefault,1782,0.0,3.701814058956916,DDT/1782.wav,0,0,0\r\ndefault,180203,0.0,3.8802267573696145,DDT/180203.wav,0,0,0\r\ndefault,1824558,0.0,5.5246031746031745,DDT/1824558.wav,0,0,0\r\ndefault,185,0.0,3.7002267573696144,DDT/185.wav,0,0,0\r\ndefault,18750,0.0,3.7187755102040816,DDT/18750.wav,0,0,0\r\ndefault,1877,0.0,3.701904761904762,DDT/1877.wav,0,0,0\r\ndefault,189844,0.0,3.889886621315193,DDT/189844.wav,0,0,0\r\ndefault,19006,0.0,3.719047619047619,DDT/19006.wav,0,0,0\r\ndefault,1922168,0.0,5.622199546485261,DDT/1922168.wav,0,0,0\r\ndefault,192434,0.0,3.8924716553287984,DDT/192434.wav,0,0,0\r\ndefault,195,0.0,3.7002267573696144,DDT/195.wav,0,0,0\r\ndefault,1978,0.0,3.702018140589569,DDT/1978.wav,0,0,0\r\ndefault,198,0.0,3.7002267573696144,DDT/198.wav,0,0,0\r\ndefault,200000,0.0,3.900045351473923,DDT/200000.wav,0,0,0\r\ndefault,20023,0.0,3.720045351473923,DDT/20023.wav,0,0,0\r\ndefault,202729,0.0,3.902766439909297,DDT/202729.wav,0,0,0\r\ndefault,209,0.0,3.700249433106576,DDT/209.wav,0,0,0\r\ndefault,21094,0.0,3.7211337868480725,DDT/21094.wav,0,0,0\r\ndefault,2112,0.0,3.702154195011338,DDT/2112.wav,0,0,0\r\ndefault,213574,0.0,3.9136054421768707,DDT/213574.wav,0,0,0\r\ndefault,21382,0.0,3.72140589569161,DDT/21382.wav,0,0,0\r\ndefault,220,0.0,3.700249433106576,DDT/220.wav,0,0,0\r\ndefault,2225,0.0,3.7022675736961452,DDT/2225.wav,0,0,0\r\ndefault,225000,0.0,3.9250340136054422,DDT/225000.wav,0,0,0\r\ndefault,22525,0.0,3.722562358276644,DDT/22525.wav,0,0,0\r\ndefault,228070,0.0,3.928095238095238,DDT/228070.wav,0,0,0\r\ndefault,2344,0.0,3.7023809523809526,DDT/2344.wav,0,0,0\r\ndefault,235,0.0,3.7002721088435373,DDT/235.wav,0,0,0\r\ndefault,23730,0.0,3.723764172335601,DDT/23730.wav,0,0,0\r\ndefault,2376,0.0,3.702403628117914,DDT/2376.wav,0,0,0\r\ndefault,240271,0.0,3.940294784580499,DDT/240271.wav,0,0,0\r\ndefault,247,0.0,3.7002721088435373,DDT/247.wav,0,0,0\r\ndefault,25000,0.0,3.725034013605442,DDT/25000.wav,0,0,0\r\ndefault,2503,0.0,3.7025396825396824,DDT/2503.wav,0,0,0\r\ndefault,253125,0.0,3.953151927437642,DDT/253125.wav,0,0,0\r\ndefault,25341,0.0,3.725374149659864,DDT/25341.wav,0,0,0\r\ndefault,256578,0.0,3.9566213151927436,DDT/256578.wav,0,0,0\r\ndefault,2637,0.0,3.702675736961451,DDT/2637.wav,0,0,0\r\ndefault,264,0.0,3.7002947845804988,DDT/264.wav,0,0,0\r\ndefault,26697,0.0,3.726734693877551,DDT/26697.wav,0,0,0\r\ndefault,270305,0.0,3.9703401360544217,DDT/270305.wav,0,0,0\r\ndefault,278,0.0,3.7003174603174602,DDT/278.wav,0,0,0\r\ndefault,28125,0.0,3.7281632653061223,DDT/28125.wav,0,0,0\r\ndefault,2816,0.0,3.702857142857143,DDT/2816.wav,0,0,0\r\ndefault,284766,0.0,3.9848072562358277,DDT/284766.wav,0,0,0\r\ndefault,28509,0.0,3.728548752834467,DDT/28509.wav,0,0,0\r\ndefault,288651,0.0,3.9886848072562358,DDT/288651.wav,0,0,0\r\ndefault,293,0.0,3.7003174603174602,DDT/293.wav,0,0,0\r\ndefault,2966,0.0,3.7029931972789116,DDT/2966.wav,0,0,0\r\ndefault,300000,0.0,4.000045351473923,DDT/300000.wav,0,0,0\r\ndefault,30034,0.0,3.7300680272108844,DDT/30034.wav,0,0,0\r\ndefault,304093,0.0,4.004126984126984,DDT/304093.wav,0,0,0\r\ndefault,3125,0.0,3.703151927437642,DDT/3125.wav,0,0,0\r\ndefault,313,0.0,3.7003401360544217,DDT/313.wav,0,0,0\r\ndefault,31641,0.0,3.7316780045351474,DDT/31641.wav,0,0,0\r\ndefault,3168,0.0,3.703197278911565,DDT/3168.wav,0,0,0\r\ndefault,320361,0.0,4.020385487528345,DDT/320361.wav,0,0,0\r\ndefault,32072,0.0,3.732108843537415,DDT/32072.wav,0,0,0\r\ndefault,330,0.0,3.700362811791383,DDT/330.wav,0,0,0\r\ndefault,3337,0.0,3.703378684807256,DDT/3337.wav,0,0,0\r\ndefault,337500,0.0,4.037528344671202,DDT/337500.wav,0,0,0\r\ndefault,33788,0.0,3.733832199546485,DDT/33788.wav,0,0,0\r\ndefault,342105,0.0,4.042131519274377,DDT/342105.wav,0,0,0\r\ndefault,3516,0.0,3.703560090702948,DDT/3516.wav,0,0,0\r\ndefault,352,0.0,3.7003854875283446,DDT/352.wav,0,0,0\r\ndefault,35596,0.0,3.73562358276644,DDT/35596.wav,0,0,0\r\ndefault,3564,0.0,3.7036054421768707,DDT/3564.wav,0,0,0\r\ndefault,360406,0.0,4.060430839002268,DDT/360406.wav,0,0,0\r\ndefault,371,0.0,3.700408163265306,DDT/371.wav,0,0,0\r\ndefault,37500,0.0,3.737528344671202,DDT/37500.wav,0,0,0\r\ndefault,3754,0.0,3.7037868480725624,DDT/3754.wav,0,0,0\r\ndefault,379688,0.0,4.0797278911564625,DDT/379688.wav,0,0,0\r\ndefault,38012,0.0,3.738049886621315,DDT/38012.wav,0,0,0\r\ndefault,384868,0.0,4.084897959183674,DDT/384868.wav,0,0,0\r\ndefault,391,0.0,3.7004308390022675,DDT/391.wav,0,0,0\r\ndefault,3955,0.0,3.7039909297052156,DDT/3955.wav,0,0,0\r\ndefault,396,0.0,3.7004308390022675,DDT/396.wav,0,0,0\r\ndefault,400000,0.0,4.100045351473923,DDT/400000.wav,0,0,0\r\ndefault,40045,0.0,3.740068027210884,DDT/40045.wav,0,0,0\r\ndefault,405457,0.0,4.105487528344671,DDT/405457.wav,0,0,0\r\ndefault,417,0.0,3.700453514739229,DDT/417.wav,0,0,0\r\ndefault,42188,0.0,3.7422222222222223,DDT/42188.wav,0,0,0\r\ndefault,4224,0.0,3.7042630385487527,DDT/4224.wav,0,0,0\r\ndefault,427148,0.0,4.12718820861678,DDT/427148.wav,0,0,0\r\ndefault,42763,0.0,3.7427891156462585,DDT/42763.wav,0,0,0\r\ndefault,432976,0.0,4.133015873015873,DDT/432976.wav,0,0,0\r\ndefault,439,0.0,3.7004761904761905,DDT/439.wav,0,0,0\r\ndefault,4449,0.0,3.7044897959183674,DDT/4449.wav,0,0,0\r\ndefault,450000,0.0,4.150045351473923,DDT/450000.wav,0,0,0\r\ndefault,45051,0.0,3.745079365079365,DDT/45051.wav,0,0,0\r\ndefault,456139,0.0,4.156167800453515,DDT/456139.wav,0,0,0\r\ndefault,4688,0.0,3.704716553287982,DDT/4688.wav,0,0,0\r\ndefault,469,0.0,3.700498866213152,DDT/469.wav,0,0,0\r\ndefault,47461,0.0,3.7475056689342403,DDT/47461.wav,0,0,0\r\ndefault,4751,0.0,3.7047845804988664,DDT/4751.wav,0,0,0\r\ndefault,480542,0.0,4.180566893424036,DDT/480542.wav,0,0,0\r\ndefault,48108,0.0,3.748140589569161,DDT/48108.wav,0,0,0\r\ndefault,494,0.0,3.7005215419501134,DDT/494.wav,0,0,0\r\ndefault,50000,0.0,3.750045351473923,DDT/50000.wav,0,0,0\r\ndefault,5006,0.0,3.705034013605442,DDT/5006.wav,0,0,0\r\ndefault,506250,0.0,4.206281179138322,DDT/506250.wav,0,0,0\r\ndefault,50682,0.0,3.7507256235827664,DDT/50682.wav,0,0,0\r\ndefault,513157,0.0,4.213197278911565,DDT/513157.wav,0,0,0\r\ndefault,52,0.0,3.7000907029478456,DDT/52.wav,0,0,0\r\ndefault,5273,0.0,3.7053061224489796,DDT/5273.wav,0,0,0\r\ndefault,528,0.0,3.7005668934240363,DDT/528.wav,0,0,0\r\ndefault,53394,0.0,3.7534240362811793,DDT/53394.wav,0,0,0\r\ndefault,5345,0.0,3.705374149659864,DDT/5345.wav,0,0,0\r\ndefault,540610,0.0,4.24063492063492,DDT/540610.wav,0,0,0\r\ndefault,55,0.0,3.7000907029478456,DDT/55.wav,0,0,0\r\ndefault,556,0.0,3.700589569160998,DDT/556.wav,0,0,0\r\ndefault,56250,0.0,3.756281179138322,DDT/56250.wav,0,0,0\r\ndefault,5631,0.0,3.705668934240363,DDT/5631.wav,0,0,0\r\ndefault,569531,0.0,4.269569160997732,DDT/569531.wav,0,0,0\r\ndefault,57017,0.0,3.7570521541950113,DDT/57017.wav,0,0,0\r\ndefault,577302,0.0,4.277324263038548,DDT/577302.wav,0,0,0\r\ndefault,586,0.0,3.7006122448979593,DDT/586.wav,0,0,0\r\ndefault,59,0.0,3.7000907029478456,DDT/59.wav,0,0,0\r\ndefault,5933,0.0,3.7059637188208616,DDT/5933.wav,0,0,0\r\ndefault,594,0.0,3.7006349206349207,DDT/594.wav,0,0,0\r\ndefault,600000,0.0,4.300045351473923,DDT/600000.wav,0,0,0\r\ndefault,60068,0.0,3.7600907029478456,DDT/60068.wav,0,0,0\r\ndefault,608186,0.0,4.308231292517007,DDT/608186.wav,0,0,0\r\ndefault,62,0.0,3.7000907029478456,DDT/62.wav,0,0,0\r\ndefault,6250,0.0,3.706281179138322,DDT/6250.wav,0,0,0\r\ndefault,626,0.0,3.700657596371882,DDT/626.wav,0,0,0\r\ndefault,63281,0.0,3.7633106575963717,DDT/63281.wav,0,0,0\r\ndefault,6335,0.0,3.706371882086168,DDT/6335.wav,0,0,0\r\ndefault,640723,0.0,4.340748299319728,DDT/640723.wav,0,0,0\r\ndefault,64145,0.0,3.764172335600907,DDT/64145.wav,0,0,0\r\ndefault,659,0.0,3.700702947845805,DDT/659.wav,0,0,0\r\ndefault,66,0.0,3.7000907029478456,DDT/66.wav,0,0,0\r\ndefault,6674,0.0,3.7067120181405895,DDT/6674.wav,0,0,0\r\ndefault,675000,0.0,4.375034013605442,DDT/675000.wav,0,0,0\r\ndefault,67576,0.0,3.7676190476190476,DDT/67576.wav,0,0,0\r\ndefault,684209,0.0,4.384240362811791,DDT/684209.wav,0,0,0\r\ndefault,70,0.0,3.700113378684807,DDT/70.wav,0,0,0\r\ndefault,7031,0.0,3.707074829931973,DDT/7031.wav,0,0,0\r\ndefault,704,0.0,3.700748299319728,DDT/704.wav,0,0,0\r\ndefault,71191,0.0,3.771224489795918,DDT/71191.wav,0,0,0\r\ndefault,7127,0.0,3.7071655328798188,DDT/7127.wav,0,0,0\r\ndefault,720813,0.0,4.420839002267574,DDT/720813.wav,0,0,0\r\ndefault,73,0.0,3.700113378684807,DDT/73.wav,0,0,0\r\ndefault,742,0.0,3.7007709750566895,DDT/742.wav,0,0,0\r\ndefault,75000,0.0,3.7750340136054423,DDT/75000.wav,0,0,0\r\ndefault,7508,0.0,3.707551020408163,DDT/7508.wav,0,0,0\r\ndefault,759375,0.0,4.459410430839002,DDT/759375.wav,0,0,0\r\ndefault,76023,0.0,3.7760544217687073,DDT/76023.wav,0,0,0\r\ndefault,769735,0.0,4.469773242630385,DDT/769735.wav,0,0,0\r\ndefault,78,0.0,3.700113378684807,DDT/78.wav,0,0,0\r\ndefault,781,0.0,3.7008163265306124,DDT/781.wav,0,0,0\r\ndefault,7910,0.0,3.707936507936508,DDT/7910.wav,0,0,0\r\ndefault,792,0.0,3.7008163265306124,DDT/792.wav,0,0,0\r\ndefault,80090,0.0,3.780113378684807,DDT/80090.wav,0,0,0\r\ndefault,810915,0.0,4.510952380952381,DDT/810915.wav,0,0,0\r\ndefault,82,0.0,3.700113378684807,DDT/82.wav,0,0,0\r\ndefault,834,0.0,3.7008616780045354,DDT/834.wav,0,0,0\r\ndefault,84375,0.0,3.7843990929705216,DDT/84375.wav,0,0,0\r\ndefault,8447,0.0,3.7084807256235828,DDT/8447.wav,0,0,0\r\ndefault,854297,0.0,4.554331065759637,DDT/854297.wav,0,0,0\r\ndefault,85526,0.0,3.7855555555555553,DDT/85526.wav,0,0,0\r\ndefault,865952,0.0,4.565986394557823,DDT/865952.wav,0,0,0\r\ndefault,879,0.0,3.700907029478458,DDT/879.wav,0,0,0\r\ndefault,88,0.0,3.700113378684807,DDT/88.wav,0,0,0\r\ndefault,8899,0.0,3.7089342403628116,DDT/8899.wav,0,0,0\r\ndefault,900000,0.0,4.600045351473923,DDT/900000.wav,0,0,0\r\ndefault,90102,0.0,3.790136054421769,DDT/90102.wav,0,0,0\r\ndefault,912279,0.0,4.612312925170068,DDT/912279.wav,0,0,0\r\ndefault,93,0.0,3.7001360544217685,DDT/93.wav,0,0,0\r\ndefault,9375,0.0,3.7094104308390023,DDT/9375.wav,0,0,0\r\ndefault,939,0.0,3.7009750566893422,DDT/939.wav,0,0,0\r\ndefault,94922,0.0,3.794965986394558,DDT/94922.wav,0,0,0\r\ndefault,9503,0.0,3.709546485260771,DDT/9503.wav,0,0,0\r\ndefault,961084,0.0,4.661111111111111,DDT/961084.wav,0,0,0\r\ndefault,96217,0.0,3.7962585034013605,DDT/96217.wav,0,0,0\r\ndefault,98,0.0,3.7001360544217685,DDT/98.wav,0,0,0\r\ndefault,989,0.0,3.701020408163265,DDT/989.wav,0,0,0" + "csv": "default,0,0.0,3.700045351473923,DDT/0.wav,0,0\r\ndefault,100000,0.0,3.8000453514739228,DDT/100000.wav,0,0\r\ndefault,10011,0.0,3.710045351473923,DDT/10011.wav,0,0\r\ndefault,1012500,0.0,4.712539682539682,DDT/1012500.wav,0,0\r\ndefault,101364,0.0,3.80140589569161,DDT/101364.wav,0,0\r\ndefault,1026314,0.0,4.726349206349206,DDT/1026314.wav,0,0\r\ndefault,104,0.0,3.7001360544217685,DDT/104.wav,0,0\r\ndefault,10547,0.0,3.7105895691609976,DDT/10547.wav,0,0\r\ndefault,1056,0.0,3.7010884353741496,DDT/1056.wav,0,0\r\ndefault,106787,0.0,3.806825396825397,DDT/106787.wav,0,0\r\ndefault,10691,0.0,3.7107256235827664,DDT/10691.wav,0,0\r\ndefault,1081219,0.0,4.781247165532879,DDT/1081219.wav,0,0\r\ndefault,110,0.0,3.7001360544217685,DDT/110.wav,0,0\r\ndefault,1112,0.0,3.701156462585034,DDT/1112.wav,0,0\r\ndefault,112500,0.0,3.8125396825396827,DDT/112500.wav,0,0\r\ndefault,11263,0.0,3.7112925170068025,DDT/11263.wav,0,0\r\ndefault,1139063,0.0,4.839092970521542,DDT/1139063.wav,0,0\r\ndefault,114035,0.0,3.8140589569161,DDT/114035.wav,0,0\r\ndefault,1154603,0.0,4.8546258503401365,DDT/1154603.wav,0,0\r\ndefault,117,0.0,3.70015873015873,DDT/117.wav,0,0\r\ndefault,1172,0.0,3.701201814058957,DDT/1172.wav,0,0\r\ndefault,11865,0.0,3.711904761904762,DDT/11865.wav,0,0\r\ndefault,1188,0.0,3.7012244897959183,DDT/1188.wav,0,0\r\ndefault,120135,0.0,3.82015873015873,DDT/120135.wav,0,0\r\ndefault,1216372,0.0,4.91641723356009,DDT/1216372.wav,0,0\r\ndefault,124,0.0,3.70015873015873,DDT/124.wav,0,0\r\ndefault,12500,0.0,3.7125396825396826,DDT/12500.wav,0,0\r\ndefault,1251,0.0,3.7012925170068027,DDT/1251.wav,0,0\r\ndefault,126563,0.0,3.8265986394557823,DDT/126563.wav,0,0\r\ndefault,12671,0.0,3.712698412698413,DDT/12671.wav,0,0\r\ndefault,1281445,0.0,4.981473922902494,DDT/1281445.wav,0,0\r\ndefault,128289,0.0,3.8283219954648526,DDT/128289.wav,0,0\r\ndefault,1298928,0.0,4.9989569160997736,DDT/1298928.wav,0,0\r\ndefault,1318,0.0,3.701360544217687,DDT/1318.wav,0,0\r\ndefault,132,0.0,3.70015873015873,DDT/132.wav,0,0\r\ndefault,13348,0.0,3.7133786848072563,DDT/13348.wav,0,0\r\ndefault,1350000,0.0,5.050045351473923,DDT/1350000.wav,0,0\r\ndefault,135152,0.0,3.835192743764172,DDT/135152.wav,0,0\r\ndefault,1368418,0.0,5.068458049886622,DDT/1368418.wav,0,0\r\ndefault,139,0.0,3.7001814058956914,DDT/139.wav,0,0\r\ndefault,14063,0.0,3.7141043083900227,DDT/14063.wav,0,0\r\ndefault,1408,0.0,3.701451247165533,DDT/1408.wav,0,0\r\ndefault,142383,0.0,3.842426303854875,DDT/142383.wav,0,0\r\ndefault,14254,0.0,3.7142857142857144,DDT/14254.wav,0,0\r\ndefault,1441626,0.0,5.141655328798186,DDT/1441626.wav,0,0\r\ndefault,144325,0.0,3.8443537414965987,DDT/144325.wav,0,0\r\ndefault,146,0.0,3.7001814058956914,DDT/146.wav,0,0\r\ndefault,1483,0.0,3.7015192743764174,DDT/1483.wav,0,0\r\ndefault,150000,0.0,3.850045351473923,DDT/150000.wav,0,0\r\ndefault,15017,0.0,3.7150566893424037,DDT/15017.wav,0,0\r\ndefault,1518750,0.0,5.218775510204082,DDT/1518750.wav,0,0\r\ndefault,152046,0.0,3.8520861678004534,DDT/152046.wav,0,0\r\ndefault,1539471,0.0,5.239501133786848,DDT/1539471.wav,0,0\r\ndefault,156,0.0,3.7001814058956914,DDT/156.wav,0,0\r\ndefault,1563,0.0,3.7015873015873018,DDT/1563.wav,0,0\r\ndefault,15820,0.0,3.7158503401360545,DDT/15820.wav,0,0\r\ndefault,1584,0.0,3.7016099773242632,DDT/1584.wav,0,0\r\ndefault,160181,0.0,3.860204081632653,DDT/160181.wav,0,0\r\ndefault,16036,0.0,3.7160770975056687,DDT/16036.wav,0,0\r\ndefault,1621829,0.0,5.321859410430839,DDT/1621829.wav,0,0\r\ndefault,165,0.0,3.700204081632653,DDT/165.wav,0,0\r\ndefault,1669,0.0,3.7017006802721086,DDT/1669.wav,0,0\r\ndefault,168750,0.0,3.8687755102040815,DDT/168750.wav,0,0\r\ndefault,16894,0.0,3.716938775510204,DDT/16894.wav,0,0\r\ndefault,1708594,0.0,5.408616780045351,DDT/1708594.wav,0,0\r\ndefault,171052,0.0,3.8710884353741495,DDT/171052.wav,0,0\r\ndefault,1731905,0.0,5.431927437641724,DDT/1731905.wav,0,0\r\ndefault,1758,0.0,3.7017913832199545,DDT/1758.wav,0,0\r\ndefault,176,0.0,3.700204081632653,DDT/176.wav,0,0\r\ndefault,17798,0.0,3.7178231292517006,DDT/17798.wav,0,0\r\ndefault,1782,0.0,3.701814058956916,DDT/1782.wav,0,0\r\ndefault,180203,0.0,3.8802267573696145,DDT/180203.wav,0,0\r\ndefault,1824558,0.0,5.5246031746031745,DDT/1824558.wav,0,0\r\ndefault,185,0.0,3.7002267573696144,DDT/185.wav,0,0\r\ndefault,18750,0.0,3.7187755102040816,DDT/18750.wav,0,0\r\ndefault,1877,0.0,3.701904761904762,DDT/1877.wav,0,0\r\ndefault,189844,0.0,3.889886621315193,DDT/189844.wav,0,0\r\ndefault,19006,0.0,3.719047619047619,DDT/19006.wav,0,0\r\ndefault,1922168,0.0,5.622199546485261,DDT/1922168.wav,0,0\r\ndefault,192434,0.0,3.8924716553287984,DDT/192434.wav,0,0\r\ndefault,195,0.0,3.7002267573696144,DDT/195.wav,0,0\r\ndefault,1978,0.0,3.702018140589569,DDT/1978.wav,0,0\r\ndefault,198,0.0,3.7002267573696144,DDT/198.wav,0,0\r\ndefault,200000,0.0,3.900045351473923,DDT/200000.wav,0,0\r\ndefault,20023,0.0,3.720045351473923,DDT/20023.wav,0,0\r\ndefault,202729,0.0,3.902766439909297,DDT/202729.wav,0,0\r\ndefault,209,0.0,3.700249433106576,DDT/209.wav,0,0\r\ndefault,21094,0.0,3.7211337868480725,DDT/21094.wav,0,0\r\ndefault,2112,0.0,3.702154195011338,DDT/2112.wav,0,0\r\ndefault,213574,0.0,3.9136054421768707,DDT/213574.wav,0,0\r\ndefault,21382,0.0,3.72140589569161,DDT/21382.wav,0,0\r\ndefault,220,0.0,3.700249433106576,DDT/220.wav,0,0\r\ndefault,2225,0.0,3.7022675736961452,DDT/2225.wav,0,0\r\ndefault,225000,0.0,3.9250340136054422,DDT/225000.wav,0,0\r\ndefault,22525,0.0,3.722562358276644,DDT/22525.wav,0,0\r\ndefault,228070,0.0,3.928095238095238,DDT/228070.wav,0,0\r\ndefault,2344,0.0,3.7023809523809526,DDT/2344.wav,0,0\r\ndefault,235,0.0,3.7002721088435373,DDT/235.wav,0,0\r\ndefault,23730,0.0,3.723764172335601,DDT/23730.wav,0,0\r\ndefault,2376,0.0,3.702403628117914,DDT/2376.wav,0,0\r\ndefault,240271,0.0,3.940294784580499,DDT/240271.wav,0,0\r\ndefault,247,0.0,3.7002721088435373,DDT/247.wav,0,0\r\ndefault,25000,0.0,3.725034013605442,DDT/25000.wav,0,0\r\ndefault,2503,0.0,3.7025396825396824,DDT/2503.wav,0,0\r\ndefault,253125,0.0,3.953151927437642,DDT/253125.wav,0,0\r\ndefault,25341,0.0,3.725374149659864,DDT/25341.wav,0,0\r\ndefault,256578,0.0,3.9566213151927436,DDT/256578.wav,0,0\r\ndefault,2637,0.0,3.702675736961451,DDT/2637.wav,0,0\r\ndefault,264,0.0,3.7002947845804988,DDT/264.wav,0,0\r\ndefault,26697,0.0,3.726734693877551,DDT/26697.wav,0,0\r\ndefault,270305,0.0,3.9703401360544217,DDT/270305.wav,0,0\r\ndefault,278,0.0,3.7003174603174602,DDT/278.wav,0,0\r\ndefault,28125,0.0,3.7281632653061223,DDT/28125.wav,0,0\r\ndefault,2816,0.0,3.702857142857143,DDT/2816.wav,0,0\r\ndefault,284766,0.0,3.9848072562358277,DDT/284766.wav,0,0\r\ndefault,28509,0.0,3.728548752834467,DDT/28509.wav,0,0\r\ndefault,288651,0.0,3.9886848072562358,DDT/288651.wav,0,0\r\ndefault,293,0.0,3.7003174603174602,DDT/293.wav,0,0\r\ndefault,2966,0.0,3.7029931972789116,DDT/2966.wav,0,0\r\ndefault,300000,0.0,4.000045351473923,DDT/300000.wav,0,0\r\ndefault,30034,0.0,3.7300680272108844,DDT/30034.wav,0,0\r\ndefault,304093,0.0,4.004126984126984,DDT/304093.wav,0,0\r\ndefault,3125,0.0,3.703151927437642,DDT/3125.wav,0,0\r\ndefault,313,0.0,3.7003401360544217,DDT/313.wav,0,0\r\ndefault,31641,0.0,3.7316780045351474,DDT/31641.wav,0,0\r\ndefault,3168,0.0,3.703197278911565,DDT/3168.wav,0,0\r\ndefault,320361,0.0,4.020385487528345,DDT/320361.wav,0,0\r\ndefault,32072,0.0,3.732108843537415,DDT/32072.wav,0,0\r\ndefault,330,0.0,3.700362811791383,DDT/330.wav,0,0\r\ndefault,3337,0.0,3.703378684807256,DDT/3337.wav,0,0\r\ndefault,337500,0.0,4.037528344671202,DDT/337500.wav,0,0\r\ndefault,33788,0.0,3.733832199546485,DDT/33788.wav,0,0\r\ndefault,342105,0.0,4.042131519274377,DDT/342105.wav,0,0\r\ndefault,3516,0.0,3.703560090702948,DDT/3516.wav,0,0\r\ndefault,352,0.0,3.7003854875283446,DDT/352.wav,0,0\r\ndefault,35596,0.0,3.73562358276644,DDT/35596.wav,0,0\r\ndefault,3564,0.0,3.7036054421768707,DDT/3564.wav,0,0\r\ndefault,360406,0.0,4.060430839002268,DDT/360406.wav,0,0\r\ndefault,371,0.0,3.700408163265306,DDT/371.wav,0,0\r\ndefault,37500,0.0,3.737528344671202,DDT/37500.wav,0,0\r\ndefault,3754,0.0,3.7037868480725624,DDT/3754.wav,0,0\r\ndefault,379688,0.0,4.0797278911564625,DDT/379688.wav,0,0\r\ndefault,38012,0.0,3.738049886621315,DDT/38012.wav,0,0\r\ndefault,384868,0.0,4.084897959183674,DDT/384868.wav,0,0\r\ndefault,391,0.0,3.7004308390022675,DDT/391.wav,0,0\r\ndefault,3955,0.0,3.7039909297052156,DDT/3955.wav,0,0\r\ndefault,396,0.0,3.7004308390022675,DDT/396.wav,0,0\r\ndefault,400000,0.0,4.100045351473923,DDT/400000.wav,0,0\r\ndefault,40045,0.0,3.740068027210884,DDT/40045.wav,0,0\r\ndefault,405457,0.0,4.105487528344671,DDT/405457.wav,0,0\r\ndefault,417,0.0,3.700453514739229,DDT/417.wav,0,0\r\ndefault,42188,0.0,3.7422222222222223,DDT/42188.wav,0,0\r\ndefault,4224,0.0,3.7042630385487527,DDT/4224.wav,0,0\r\ndefault,427148,0.0,4.12718820861678,DDT/427148.wav,0,0\r\ndefault,42763,0.0,3.7427891156462585,DDT/42763.wav,0,0\r\ndefault,432976,0.0,4.133015873015873,DDT/432976.wav,0,0\r\ndefault,439,0.0,3.7004761904761905,DDT/439.wav,0,0\r\ndefault,4449,0.0,3.7044897959183674,DDT/4449.wav,0,0\r\ndefault,450000,0.0,4.150045351473923,DDT/450000.wav,0,0\r\ndefault,45051,0.0,3.745079365079365,DDT/45051.wav,0,0\r\ndefault,456139,0.0,4.156167800453515,DDT/456139.wav,0,0\r\ndefault,4688,0.0,3.704716553287982,DDT/4688.wav,0,0\r\ndefault,469,0.0,3.700498866213152,DDT/469.wav,0,0\r\ndefault,47461,0.0,3.7475056689342403,DDT/47461.wav,0,0\r\ndefault,4751,0.0,3.7047845804988664,DDT/4751.wav,0,0\r\ndefault,480542,0.0,4.180566893424036,DDT/480542.wav,0,0\r\ndefault,48108,0.0,3.748140589569161,DDT/48108.wav,0,0\r\ndefault,494,0.0,3.7005215419501134,DDT/494.wav,0,0\r\ndefault,50000,0.0,3.750045351473923,DDT/50000.wav,0,0\r\ndefault,5006,0.0,3.705034013605442,DDT/5006.wav,0,0\r\ndefault,506250,0.0,4.206281179138322,DDT/506250.wav,0,0\r\ndefault,50682,0.0,3.7507256235827664,DDT/50682.wav,0,0\r\ndefault,513157,0.0,4.213197278911565,DDT/513157.wav,0,0\r\ndefault,52,0.0,3.7000907029478456,DDT/52.wav,0,0\r\ndefault,5273,0.0,3.7053061224489796,DDT/5273.wav,0,0\r\ndefault,528,0.0,3.7005668934240363,DDT/528.wav,0,0\r\ndefault,53394,0.0,3.7534240362811793,DDT/53394.wav,0,0\r\ndefault,5345,0.0,3.705374149659864,DDT/5345.wav,0,0\r\ndefault,540610,0.0,4.24063492063492,DDT/540610.wav,0,0\r\ndefault,55,0.0,3.7000907029478456,DDT/55.wav,0,0\r\ndefault,556,0.0,3.700589569160998,DDT/556.wav,0,0\r\ndefault,56250,0.0,3.756281179138322,DDT/56250.wav,0,0\r\ndefault,5631,0.0,3.705668934240363,DDT/5631.wav,0,0\r\ndefault,569531,0.0,4.269569160997732,DDT/569531.wav,0,0\r\ndefault,57017,0.0,3.7570521541950113,DDT/57017.wav,0,0\r\ndefault,577302,0.0,4.277324263038548,DDT/577302.wav,0,0\r\ndefault,586,0.0,3.7006122448979593,DDT/586.wav,0,0\r\ndefault,59,0.0,3.7000907029478456,DDT/59.wav,0,0\r\ndefault,5933,0.0,3.7059637188208616,DDT/5933.wav,0,0\r\ndefault,594,0.0,3.7006349206349207,DDT/594.wav,0,0\r\ndefault,600000,0.0,4.300045351473923,DDT/600000.wav,0,0\r\ndefault,60068,0.0,3.7600907029478456,DDT/60068.wav,0,0\r\ndefault,608186,0.0,4.308231292517007,DDT/608186.wav,0,0\r\ndefault,62,0.0,3.7000907029478456,DDT/62.wav,0,0\r\ndefault,6250,0.0,3.706281179138322,DDT/6250.wav,0,0\r\ndefault,626,0.0,3.700657596371882,DDT/626.wav,0,0\r\ndefault,63281,0.0,3.7633106575963717,DDT/63281.wav,0,0\r\ndefault,6335,0.0,3.706371882086168,DDT/6335.wav,0,0\r\ndefault,640723,0.0,4.340748299319728,DDT/640723.wav,0,0\r\ndefault,64145,0.0,3.764172335600907,DDT/64145.wav,0,0\r\ndefault,659,0.0,3.700702947845805,DDT/659.wav,0,0\r\ndefault,66,0.0,3.7000907029478456,DDT/66.wav,0,0\r\ndefault,6674,0.0,3.7067120181405895,DDT/6674.wav,0,0\r\ndefault,675000,0.0,4.375034013605442,DDT/675000.wav,0,0\r\ndefault,67576,0.0,3.7676190476190476,DDT/67576.wav,0,0\r\ndefault,684209,0.0,4.384240362811791,DDT/684209.wav,0,0\r\ndefault,70,0.0,3.700113378684807,DDT/70.wav,0,0\r\ndefault,7031,0.0,3.707074829931973,DDT/7031.wav,0,0\r\ndefault,704,0.0,3.700748299319728,DDT/704.wav,0,0\r\ndefault,71191,0.0,3.771224489795918,DDT/71191.wav,0,0\r\ndefault,7127,0.0,3.7071655328798188,DDT/7127.wav,0,0\r\ndefault,720813,0.0,4.420839002267574,DDT/720813.wav,0,0\r\ndefault,73,0.0,3.700113378684807,DDT/73.wav,0,0\r\ndefault,742,0.0,3.7007709750566895,DDT/742.wav,0,0\r\ndefault,75000,0.0,3.7750340136054423,DDT/75000.wav,0,0\r\ndefault,7508,0.0,3.707551020408163,DDT/7508.wav,0,0\r\ndefault,759375,0.0,4.459410430839002,DDT/759375.wav,0,0\r\ndefault,76023,0.0,3.7760544217687073,DDT/76023.wav,0,0\r\ndefault,769735,0.0,4.469773242630385,DDT/769735.wav,0,0\r\ndefault,78,0.0,3.700113378684807,DDT/78.wav,0,0\r\ndefault,781,0.0,3.7008163265306124,DDT/781.wav,0,0\r\ndefault,7910,0.0,3.707936507936508,DDT/7910.wav,0,0\r\ndefault,792,0.0,3.7008163265306124,DDT/792.wav,0,0\r\ndefault,80090,0.0,3.780113378684807,DDT/80090.wav,0,0\r\ndefault,810915,0.0,4.510952380952381,DDT/810915.wav,0,0\r\ndefault,82,0.0,3.700113378684807,DDT/82.wav,0,0\r\ndefault,834,0.0,3.7008616780045354,DDT/834.wav,0,0\r\ndefault,84375,0.0,3.7843990929705216,DDT/84375.wav,0,0\r\ndefault,8447,0.0,3.7084807256235828,DDT/8447.wav,0,0\r\ndefault,854297,0.0,4.554331065759637,DDT/854297.wav,0,0\r\ndefault,85526,0.0,3.7855555555555553,DDT/85526.wav,0,0\r\ndefault,865952,0.0,4.565986394557823,DDT/865952.wav,0,0\r\ndefault,879,0.0,3.700907029478458,DDT/879.wav,0,0\r\ndefault,88,0.0,3.700113378684807,DDT/88.wav,0,0\r\ndefault,8899,0.0,3.7089342403628116,DDT/8899.wav,0,0\r\ndefault,900000,0.0,4.600045351473923,DDT/900000.wav,0,0\r\ndefault,90102,0.0,3.790136054421769,DDT/90102.wav,0,0\r\ndefault,912279,0.0,4.612312925170068,DDT/912279.wav,0,0\r\ndefault,93,0.0,3.7001360544217685,DDT/93.wav,0,0\r\ndefault,9375,0.0,3.7094104308390023,DDT/9375.wav,0,0\r\ndefault,939,0.0,3.7009750566893422,DDT/939.wav,0,0\r\ndefault,94922,0.0,3.794965986394558,DDT/94922.wav,0,0\r\ndefault,9503,0.0,3.709546485260771,DDT/9503.wav,0,0\r\ndefault,961084,0.0,4.661111111111111,DDT/961084.wav,0,0\r\ndefault,96217,0.0,3.7962585034013605,DDT/96217.wav,0,0\r\ndefault,98,0.0,3.7001360544217685,DDT/98.wav,0,0\r\ndefault,989,0.0,3.701020408163265,DDT/989.wav,0,0,0" } }, { @@ -41,7 +41,7 @@ "fields": { "name": "DurationDiscrimination", "process_csv": false, - "csv": "default,19006,0.0,4.019070294784581,DDI/19006.wav,0,0,0\r\ndefault,3337,0.0,4.003401360544218,DDI/3337.wav,0,0,0\r\ndefault,300000,0.0,4.300068027210885,DDI/300000.wav,0,0,0\r\ndefault,200000,0.0,4.200068027210884,DDI/200000.wav,0,0,0\r\ndefault,189844,0.0,4.1899092970521545,DDI/189844.wav,0,0,0\r\ndefault,854297,0.0,4.854353741496599,DDI/854297.wav,0,0,0\r\ndefault,7031,0.0,4.007097505668934,DDI/7031.wav,0,0,0\r\ndefault,659,0.0,4.000725623582767,DDI/659.wav,0,0,0\r\ndefault,1483,0.0,4.001541950113379,DDI/1483.wav,0,0,0\r\ndefault,117,0.0,4.000181405895692,DDI/117.wav,0,0,0\r\ndefault,42188,0.0,4.042244897959184,DDI/42188.wav,0,0,0\r\ndefault,379688,0.0,4.379750566893424,DDI/379688.wav,0,0,0\r\ndefault,2376,0.0,4.002448979591836,DDI/2376.wav,0,0,0\r\ndefault,171052,0.0,4.171111111111111,DDI/171052.wav,0,0,0\r\ndefault,704,0.0,4.00077097505669,DDI/704.wav,0,0,0\r\ndefault,71191,0.0,4.071269841269841,DDI/71191.wav,0,0,0\r\ndefault,10547,0.0,4.010612244897959,DDI/10547.wav,0,0,0\r\ndefault,101364,0.0,4.101428571428571,DDI/101364.wav,0,0,0\r\ndefault,384868,0.0,4.384943310657596,DDI/384868.wav,0,0,0\r\ndefault,1251,0.0,4.001315192743764,DDI/1251.wav,0,0,0\r\ndefault,900000,0.0,4.900068027210884,DDI/900000.wav,0,0,0\r\ndefault,5631,0.0,4.005691609977324,DDI/5631.wav,0,0,0\r\ndefault,6674,0.0,4.006734693877551,DDI/6674.wav,0,0,0\r\ndefault,1669,0.0,4.001746031746031,DDI/1669.wav,0,0,0\r\ndefault,11263,0.0,4.011337868480726,DDI/11263.wav,0,0,0\r\ndefault,37500,0.0,4.037573696145125,DDI/37500.wav,0,0,0\r\ndefault,50000,0.0,4.050068027210885,DDI/50000.wav,0,0,0\r\ndefault,1318,0.0,4.001383219954649,DDI/1318.wav,0,0,0\r\ndefault,1731905,0.0,5.7319727891156464,DDI/1731905.wav,0,0,0\r\ndefault,17798,0.0,4.017868480725624,DDI/17798.wav,0,0,0\r\ndefault,1056,0.0,4.001133786848072,DDI/1056.wav,0,0,0\r\ndefault,22525,0.0,4.022585034013606,DDI/22525.wav,0,0,0\r\ndefault,405457,0.0,4.405532879818594,DDI/405457.wav,0,0,0\r\ndefault,139,0.0,4.000204081632653,DDI/139.wav,0,0,0\r\ndefault,313,0.0,4.000385487528344,DDI/313.wav,0,0,0\r\ndefault,513157,0.0,4.513219954648526,DDI/513157.wav,0,0,0\r\ndefault,1877,0.0,4.001950113378685,DDI/1877.wav,0,0,0\r\ndefault,33788,0.0,4.033854875283446,DDI/33788.wav,0,0,0\r\ndefault,5345,0.0,4.005419501133787,DDI/5345.wav,0,0,0\r\ndefault,104,0.0,4.000181405895692,DDI/104.wav,0,0,0\r\ndefault,110,0.0,4.000181405895692,DDI/110.wav,0,0,0\r\ndefault,879,0.0,4.000952380952381,DDI/879.wav,0,0,0\r\ndefault,114035,0.0,4.114104308390023,DDI/114035.wav,0,0,0\r\ndefault,528,0.0,4.000589569160998,DDI/528.wav,0,0,0\r\ndefault,15820,0.0,4.015895691609978,DDI/15820.wav,0,0,0\r\ndefault,1922168,0.0,5.9222448979591835,DDI/1922168.wav,0,0,0\r\ndefault,42763,0.0,4.042834467120182,DDI/42763.wav,0,0,0\r\ndefault,264,0.0,4.0003401360544215,DDI/264.wav,0,0,0\r\ndefault,4688,0.0,4.004761904761905,DDI/4688.wav,0,0,0\r\ndefault,4449,0.0,4.004512471655329,DDI/4449.wav,0,0,0\r\ndefault,15017,0.0,4.015079365079365,DDI/15017.wav,0,0,0\r\ndefault,106787,0.0,4.106848072562358,DDI/106787.wav,0,0,0\r\ndefault,1539471,0.0,5.539546485260771,DDI/1539471.wav,0,0,0\r\ndefault,769735,0.0,4.769795918367347,DDI/769735.wav,0,0,0\r\ndefault,14254,0.0,4.014331065759637,DDI/14254.wav,0,0,0\r\ndefault,3125,0.0,4.003197278911564,DDI/3125.wav,0,0,0\r\ndefault,28509,0.0,4.0285714285714285,DDI/28509.wav,0,0,0\r\ndefault,1782,0.0,4.001859410430839,DDI/1782.wav,0,0,0\r\ndefault,120135,0.0,4.120204081632653,DDI/120135.wav,0,0,0\r\ndefault,608186,0.0,4.608253968253968,DDI/608186.wav,0,0,0\r\ndefault,28125,0.0,4.028185941043084,DDI/28125.wav,0,0,0\r\ndefault,684209,0.0,4.684285714285714,DDI/684209.wav,0,0,0\r\ndefault,1621829,0.0,5.621904761904762,DDI/1621829.wav,0,0,0\r\ndefault,10691,0.0,4.010748299319728,DDI/10691.wav,0,0,0\r\ndefault,1518750,0.0,5.518820861678004,DDI/1518750.wav,0,0,0\r\ndefault,284766,0.0,4.284829931972789,DDI/284766.wav,0,0,0\r\ndefault,439,0.0,4.000498866213152,DDI/439.wav,0,0,0\r\ndefault,202729,0.0,4.202789115646259,DDI/202729.wav,0,0,0\r\ndefault,150000,0.0,4.150068027210884,DDI/150000.wav,0,0,0\r\ndefault,834,0.0,4.000907029478458,DDI/834.wav,0,0,0\r\ndefault,1298928,0.0,5.299002267573696,DDI/1298928.wav,0,0,0\r\ndefault,7127,0.0,4.00718820861678,DDI/7127.wav,0,0,0\r\ndefault,1081219,0.0,5.081292517006803,DDI/1081219.wav,0,0,0\r\ndefault,62,0.0,4.000136054421769,DDI/62.wav,0,0,0\r\ndefault,1408,0.0,4.001473922902495,DDI/1408.wav,0,0,0\r\ndefault,7910,0.0,4.007981859410431,DDI/7910.wav,0,0,0\r\ndefault,20023,0.0,4.020090702947845,DDI/20023.wav,0,0,0\r\ndefault,1441626,0.0,5.441700680272109,DDI/1441626.wav,0,0,0\r\ndefault,7508,0.0,4.0075736961451245,DDI/7508.wav,0,0,0\r\ndefault,176,0.0,4.000249433106576,DDI/176.wav,0,0,0\r\ndefault,88,0.0,4.00015873015873,DDI/88.wav,0,0,0\r\ndefault,1350000,0.0,5.3500680272108845,DDI/1350000.wav,0,0,0\r\ndefault,16036,0.0,4.0160997732426305,DDI/16036.wav,0,0,0\r\ndefault,720813,0.0,4.720884353741496,DDI/720813.wav,0,0,0\r\ndefault,3168,0.0,4.003242630385487,DDI/3168.wav,0,0,0\r\ndefault,400000,0.0,4.400068027210884,DDI/400000.wav,0,0,0\r\ndefault,228070,0.0,4.228140589569161,DDI/228070.wav,0,0,0\r\ndefault,865952,0.0,4.866009070294784,DDI/865952.wav,0,0,0\r\ndefault,192434,0.0,4.19249433106576,DDI/192434.wav,0,0,0\r\ndefault,73,0.0,4.000136054421769,DDI/73.wav,0,0,0\r\ndefault,26697,0.0,4.026757369614512,DDI/26697.wav,0,0,0\r\ndefault,98,0.0,4.00015873015873,DDI/98.wav,0,0,0\r\ndefault,13348,0.0,4.0134240362811795,DDI/13348.wav,0,0,0\r\ndefault,1026314,0.0,5.026371882086168,DDI/1026314.wav,0,0,0\r\ndefault,371,0.0,4.000430839002267,DDI/371.wav,0,0,0\r\ndefault,417,0.0,4.00047619047619,DDI/417.wav,0,0,0\r\ndefault,577302,0.0,4.577369614512472,DDI/577302.wav,0,0,0\r\ndefault,198,0.0,4.000272108843538,DDI/198.wav,0,0,0\r\ndefault,66,0.0,4.000136054421769,DDI/66.wav,0,0,0\r\ndefault,18750,0.0,4.018820861678004,DDI/18750.wav,0,0,0\r\ndefault,256578,0.0,4.256643990929705,DDI/256578.wav,0,0,0\r\ndefault,45051,0.0,4.045124716553288,DDI/45051.wav,0,0,0\r\ndefault,2503,0.0,4.002562358276644,DDI/2503.wav,0,0,0\r\ndefault,25000,0.0,4.025079365079365,DDI/25000.wav,0,0,0\r\ndefault,320361,0.0,4.320430839002268,DDI/320361.wav,0,0,0\r\ndefault,53394,0.0,4.0534693877551025,DDI/53394.wav,0,0,0\r\ndefault,70,0.0,4.000136054421769,DDI/70.wav,0,0,0\r\ndefault,165,0.0,4.000226757369615,DDI/165.wav,0,0,0\r\ndefault,80090,0.0,4.08015873015873,DDI/80090.wav,0,0,0\r\ndefault,3754,0.0,4.003832199546485,DDI/3754.wav,0,0,0\r\ndefault,30034,0.0,4.030090702947846,DDI/30034.wav,0,0,0\r\ndefault,2112,0.0,4.0021768707483,DDI/2112.wav,0,0,0\r\ndefault,1012500,0.0,5.012562358276644,DDI/1012500.wav,0,0,0\r\ndefault,59,0.0,4.000136054421769,DDI/59.wav,0,0,0\r\ndefault,1584,0.0,4.0016553287981855,DDI/1584.wav,0,0,0\r\ndefault,63281,0.0,4.0633560090702945,DDI/63281.wav,0,0,0\r\ndefault,586,0.0,4.000657596371882,DDI/586.wav,0,0,0\r\ndefault,40045,0.0,4.040113378684807,DDI/40045.wav,0,0,0\r\ndefault,1172,0.0,4.00124716553288,DDI/1172.wav,0,0,0\r\ndefault,506250,0.0,4.506326530612245,DDI/506250.wav,0,0,0\r\ndefault,75000,0.0,4.075056689342404,DDI/75000.wav,0,0,0\r\ndefault,4751,0.0,4.004829931972789,DDI/4751.wav,0,0,0\r\ndefault,1281445,0.0,5.281519274376417,DDI/1281445.wav,0,0,0\r\ndefault,626,0.0,4.000702947845805,DDI/626.wav,0,0,0\r\ndefault,82,0.0,4.00015873015873,DDI/82.wav,0,0,0\r\ndefault,55,0.0,4.000113378684807,DDI/55.wav,0,0,0\r\ndefault,12500,0.0,4.012562358276644,DDI/12500.wav,0,0,0\r\ndefault,47461,0.0,4.047528344671202,DDI/47461.wav,0,0,0\r\ndefault,1563,0.0,4.0016326530612245,DDI/1563.wav,0,0,0\r\ndefault,961084,0.0,4.961156462585034,DDI/961084.wav,0,0,0\r\ndefault,225000,0.0,4.225079365079365,DDI/225000.wav,0,0,0\r\ndefault,220,0.0,4.000294784580499,DDI/220.wav,0,0,0\r\ndefault,1978,0.0,4.002040816326531,DDI/1978.wav,0,0,0\r\ndefault,21094,0.0,4.021156462585034,DDI/21094.wav,0,0,0\r\ndefault,195,0.0,4.000272108843538,DDI/195.wav,0,0,0\r\ndefault,3564,0.0,4.003628117913832,DDI/3564.wav,0,0,0\r\ndefault,156,0.0,4.000226757369615,DDI/156.wav,0,0,0\r\ndefault,3955,0.0,4.004013605442177,DDI/3955.wav,0,0,0\r\ndefault,450000,0.0,4.450068027210884,DDI/450000.wav,0,0,0\r\ndefault,31641,0.0,4.031700680272109,DDI/31641.wav,0,0,0\r\ndefault,342105,0.0,4.3421768707482995,DDI/342105.wav,0,0,0\r\ndefault,180203,0.0,4.180272108843537,DDI/180203.wav,0,0,0\r\ndefault,396,0.0,4.000453514739229,DDI/396.wav,0,0,0\r\ndefault,142383,0.0,4.142448979591837,DDI/142383.wav,0,0,0\r\ndefault,989,0.0,4.001065759637188,DDI/989.wav,0,0,0\r\ndefault,792,0.0,4.000861678004535,DDI/792.wav,0,0,0\r\ndefault,235,0.0,4.000294784580499,DDI/235.wav,0,0,0\r\ndefault,209,0.0,4.000272108843538,DDI/209.wav,0,0,0\r\ndefault,144325,0.0,4.144399092970522,DDI/144325.wav,0,0,0\r\ndefault,594,0.0,4.000657596371882,DDI/594.wav,0,0,0\r\ndefault,96217,0.0,4.096281179138322,DDI/96217.wav,0,0,0\r\ndefault,12671,0.0,4.012743764172336,DDI/12671.wav,0,0,0\r\ndefault,126563,0.0,4.126621315192744,DDI/126563.wav,0,0,0\r\ndefault,213574,0.0,4.213650793650793,DDI/213574.wav,0,0,0\r\ndefault,912279,0.0,4.912358276643991,DDI/912279.wav,0,0,0\r\ndefault,52,0.0,4.000113378684807,DDI/52.wav,0,0,0\r\ndefault,0,0.0,4.000068027210884,DDI/0.wav,0,0,0\r\ndefault,456139,0.0,4.456213151927438,DDI/456139.wav,0,0,0\r\ndefault,168750,0.0,4.168820861678005,DDI/168750.wav,0,0,0\r\ndefault,146,0.0,4.000204081632653,DDI/146.wav,0,0,0\r\ndefault,25341,0.0,4.025419501133787,DDI/25341.wav,0,0,0\r\ndefault,23730,0.0,4.023809523809524,DDI/23730.wav,0,0,0\r\ndefault,480542,0.0,4.4806122448979595,DDI/480542.wav,0,0,0\r\ndefault,185,0.0,4.000249433106576,DDI/185.wav,0,0,0\r\ndefault,50682,0.0,4.050748299319728,DDI/50682.wav,0,0,0\r\ndefault,1368418,0.0,5.3684807256235825,DDI/1368418.wav,0,0,0\r\ndefault,569531,0.0,4.569591836734694,DDI/569531.wav,0,0,0\r\ndefault,556,0.0,4.000634920634921,DDI/556.wav,0,0,0\r\ndefault,67576,0.0,4.067641723356009,DDI/67576.wav,0,0,0\r\ndefault,5273,0.0,4.005351473922903,DDI/5273.wav,0,0,0\r\ndefault,1154603,0.0,5.154671201814059,DDI/1154603.wav,0,0,0\r\ndefault,85526,0.0,4.0856009070294785,DDI/85526.wav,0,0,0\r\ndefault,100000,0.0,4.1000680272108845,DDI/100000.wav,0,0,0\r\ndefault,781,0.0,4.000839002267574,DDI/781.wav,0,0,0\r\ndefault,742,0.0,4.000816326530612,DDI/742.wav,0,0,0\r\ndefault,540610,0.0,4.540680272108844,DDI/540610.wav,0,0,0\r\ndefault,640723,0.0,4.6407936507936505,DDI/640723.wav,0,0,0\r\ndefault,240271,0.0,4.240340136054422,DDI/240271.wav,0,0,0\r\ndefault,391,0.0,4.000453514739229,DDI/391.wav,0,0,0\r\ndefault,360406,0.0,4.360476190476191,DDI/360406.wav,0,0,0\r\ndefault,9503,0.0,4.009569160997732,DDI/9503.wav,0,0,0\r\ndefault,352,0.0,4.000430839002267,DDI/352.wav,0,0,0\r\ndefault,1188,0.0,4.00124716553288,DDI/1188.wav,0,0,0\r\ndefault,810915,0.0,4.810975056689342,DDI/810915.wav,0,0,0\r\ndefault,93,0.0,4.00015873015873,DDI/93.wav,0,0,0\r\ndefault,675000,0.0,4.675056689342403,DDI/675000.wav,0,0,0\r\ndefault,4224,0.0,4.0042857142857144,DDI/4224.wav,0,0,0\r\ndefault,78,0.0,4.000136054421769,DDI/78.wav,0,0,0\r\ndefault,5933,0.0,4.006009070294785,DDI/5933.wav,0,0,0\r\ndefault,84375,0.0,4.084444444444444,DDI/84375.wav,0,0,0\r\ndefault,1824558,0.0,5.824625850340136,DDI/1824558.wav,0,0,0\r\ndefault,90102,0.0,4.0901587301587305,DDI/90102.wav,0,0,0\r\ndefault,1758,0.0,4.001836734693877,DDI/1758.wav,0,0,0\r\ndefault,35596,0.0,4.035668934240363,DDI/35596.wav,0,0,0\r\ndefault,427148,0.0,4.427210884353742,DDI/427148.wav,0,0,0\r\ndefault,16894,0.0,4.016961451247165,DDI/16894.wav,0,0,0\r\ndefault,152046,0.0,4.152108843537415,DDI/152046.wav,0,0,0\r\ndefault,21382,0.0,4.021451247165533,DDI/21382.wav,0,0,0\r\ndefault,288651,0.0,4.288707482993197,DDI/288651.wav,0,0,0\r\ndefault,160181,0.0,4.160249433106576,DDI/160181.wav,0,0,0\r\ndefault,57017,0.0,4.057074829931973,DDI/57017.wav,0,0,0\r\ndefault,759375,0.0,4.759433106575964,DDI/759375.wav,0,0,0\r\ndefault,304093,0.0,4.304172335600907,DDI/304093.wav,0,0,0\r\ndefault,600000,0.0,4.6000680272108845,DDI/600000.wav,0,0,0\r\ndefault,60068,0.0,4.060136054421768,DDI/60068.wav,0,0,0\r\ndefault,2816,0.0,4.002879818594105,DDI/2816.wav,0,0,0\r\ndefault,1112,0.0,4.001179138321995,DDI/1112.wav,0,0,0\r\ndefault,64145,0.0,4.06421768707483,DDI/64145.wav,0,0,0\r\ndefault,94922,0.0,4.094988662131519,DDI/94922.wav,0,0,0\r\ndefault,112500,0.0,4.112562358276644,DDI/112500.wav,0,0,0\r\ndefault,8447,0.0,4.008526077097506,DDI/8447.wav,0,0,0\r\ndefault,48108,0.0,4.048185941043084,DDI/48108.wav,0,0,0\r\ndefault,6250,0.0,4.006326530612245,DDI/6250.wav,0,0,0\r\ndefault,432976,0.0,4.433038548752834,DDI/432976.wav,0,0,0\r\ndefault,9375,0.0,4.009433106575964,DDI/9375.wav,0,0,0\r\ndefault,10011,0.0,4.010068027210885,DDI/10011.wav,0,0,0\r\ndefault,939,0.0,4.0009977324263035,DDI/939.wav,0,0,0\r\ndefault,3516,0.0,4.0035827664399095,DDI/3516.wav,0,0,0\r\ndefault,270305,0.0,4.270362811791383,DDI/270305.wav,0,0,0\r\ndefault,124,0.0,4.000181405895692,DDI/124.wav,0,0,0\r\ndefault,8899,0.0,4.008956916099773,DDI/8899.wav,0,0,0\r\ndefault,2344,0.0,4.002403628117913,DDI/2344.wav,0,0,0\r\ndefault,469,0.0,4.000544217687075,DDI/469.wav,0,0,0\r\ndefault,6335,0.0,4.006394557823129,DDI/6335.wav,0,0,0\r\ndefault,11865,0.0,4.011927437641724,DDI/11865.wav,0,0,0\r\ndefault,2966,0.0,4.003038548752834,DDI/2966.wav,0,0,0\r\ndefault,5006,0.0,4.005079365079365,DDI/5006.wav,0,0,0\r\ndefault,247,0.0,4.0003174603174605,DDI/247.wav,0,0,0\r\ndefault,2225,0.0,4.0022902494331065,DDI/2225.wav,0,0,0\r\ndefault,128289,0.0,4.128367346938775,DDI/128289.wav,0,0,0\r\ndefault,1216372,0.0,5.216439909297052,DDI/1216372.wav,0,0,0\r\ndefault,32072,0.0,4.032131519274376,DDI/32072.wav,0,0,0\r\ndefault,2637,0.0,4.002698412698413,DDI/2637.wav,0,0,0\r\ndefault,1139063,0.0,5.139138321995465,DDI/1139063.wav,0,0,0\r\ndefault,494,0.0,4.000566893424036,DDI/494.wav,0,0,0\r\ndefault,1708594,0.0,5.708662131519274,DDI/1708594.wav,0,0,0\r\ndefault,330,0.0,4.000408163265306,DDI/330.wav,0,0,0\r\ndefault,337500,0.0,4.337573696145125,DDI/337500.wav,0,0,0\r\ndefault,135152,0.0,4.135215419501134,DDI/135152.wav,0,0,0\r\ndefault,76023,0.0,4.07609977324263,DDI/76023.wav,0,0,0\r\ndefault,132,0.0,4.000204081632653,DDI/132.wav,0,0,0\r\ndefault,14063,0.0,4.014126984126984,DDI/14063.wav,0,0,0\r\ndefault,56250,0.0,4.056326530612245,DDI/56250.wav,0,0,0\r\ndefault,278,0.0,4.0003401360544215,DDI/278.wav,0,0,0\r\ndefault,253125,0.0,4.253197278911564,DDI/253125.wav,0,0,0\r\ndefault,38012,0.0,4.038072562358277,DDI/38012.wav,0,0,0\r\ndefault,293,0.0,4.000362811791383,DDI/293.wav,0,0,0" + "csv": "default,19006,0.0,4.019070294784581,DDI/19006.wav,0,0\r\ndefault,3337,0.0,4.003401360544218,DDI/3337.wav,0,0\r\ndefault,300000,0.0,4.300068027210885,DDI/300000.wav,0,0\r\ndefault,200000,0.0,4.200068027210884,DDI/200000.wav,0,0\r\ndefault,189844,0.0,4.1899092970521545,DDI/189844.wav,0,0\r\ndefault,854297,0.0,4.854353741496599,DDI/854297.wav,0,0\r\ndefault,7031,0.0,4.007097505668934,DDI/7031.wav,0,0\r\ndefault,659,0.0,4.000725623582767,DDI/659.wav,0,0\r\ndefault,1483,0.0,4.001541950113379,DDI/1483.wav,0,0\r\ndefault,117,0.0,4.000181405895692,DDI/117.wav,0,0\r\ndefault,42188,0.0,4.042244897959184,DDI/42188.wav,0,0\r\ndefault,379688,0.0,4.379750566893424,DDI/379688.wav,0,0\r\ndefault,2376,0.0,4.002448979591836,DDI/2376.wav,0,0\r\ndefault,171052,0.0,4.171111111111111,DDI/171052.wav,0,0\r\ndefault,704,0.0,4.00077097505669,DDI/704.wav,0,0\r\ndefault,71191,0.0,4.071269841269841,DDI/71191.wav,0,0\r\ndefault,10547,0.0,4.010612244897959,DDI/10547.wav,0,0\r\ndefault,101364,0.0,4.101428571428571,DDI/101364.wav,0,0\r\ndefault,384868,0.0,4.384943310657596,DDI/384868.wav,0,0\r\ndefault,1251,0.0,4.001315192743764,DDI/1251.wav,0,0\r\ndefault,900000,0.0,4.900068027210884,DDI/900000.wav,0,0\r\ndefault,5631,0.0,4.005691609977324,DDI/5631.wav,0,0\r\ndefault,6674,0.0,4.006734693877551,DDI/6674.wav,0,0\r\ndefault,1669,0.0,4.001746031746031,DDI/1669.wav,0,0\r\ndefault,11263,0.0,4.011337868480726,DDI/11263.wav,0,0\r\ndefault,37500,0.0,4.037573696145125,DDI/37500.wav,0,0\r\ndefault,50000,0.0,4.050068027210885,DDI/50000.wav,0,0\r\ndefault,1318,0.0,4.001383219954649,DDI/1318.wav,0,0\r\ndefault,1731905,0.0,5.7319727891156464,DDI/1731905.wav,0,0\r\ndefault,17798,0.0,4.017868480725624,DDI/17798.wav,0,0\r\ndefault,1056,0.0,4.001133786848072,DDI/1056.wav,0,0\r\ndefault,22525,0.0,4.022585034013606,DDI/22525.wav,0,0\r\ndefault,405457,0.0,4.405532879818594,DDI/405457.wav,0,0\r\ndefault,139,0.0,4.000204081632653,DDI/139.wav,0,0\r\ndefault,313,0.0,4.000385487528344,DDI/313.wav,0,0\r\ndefault,513157,0.0,4.513219954648526,DDI/513157.wav,0,0\r\ndefault,1877,0.0,4.001950113378685,DDI/1877.wav,0,0\r\ndefault,33788,0.0,4.033854875283446,DDI/33788.wav,0,0\r\ndefault,5345,0.0,4.005419501133787,DDI/5345.wav,0,0\r\ndefault,104,0.0,4.000181405895692,DDI/104.wav,0,0\r\ndefault,110,0.0,4.000181405895692,DDI/110.wav,0,0\r\ndefault,879,0.0,4.000952380952381,DDI/879.wav,0,0\r\ndefault,114035,0.0,4.114104308390023,DDI/114035.wav,0,0\r\ndefault,528,0.0,4.000589569160998,DDI/528.wav,0,0\r\ndefault,15820,0.0,4.015895691609978,DDI/15820.wav,0,0\r\ndefault,1922168,0.0,5.9222448979591835,DDI/1922168.wav,0,0\r\ndefault,42763,0.0,4.042834467120182,DDI/42763.wav,0,0\r\ndefault,264,0.0,4.0003401360544215,DDI/264.wav,0,0\r\ndefault,4688,0.0,4.004761904761905,DDI/4688.wav,0,0\r\ndefault,4449,0.0,4.004512471655329,DDI/4449.wav,0,0\r\ndefault,15017,0.0,4.015079365079365,DDI/15017.wav,0,0\r\ndefault,106787,0.0,4.106848072562358,DDI/106787.wav,0,0\r\ndefault,1539471,0.0,5.539546485260771,DDI/1539471.wav,0,0\r\ndefault,769735,0.0,4.769795918367347,DDI/769735.wav,0,0\r\ndefault,14254,0.0,4.014331065759637,DDI/14254.wav,0,0\r\ndefault,3125,0.0,4.003197278911564,DDI/3125.wav,0,0\r\ndefault,28509,0.0,4.0285714285714285,DDI/28509.wav,0,0\r\ndefault,1782,0.0,4.001859410430839,DDI/1782.wav,0,0\r\ndefault,120135,0.0,4.120204081632653,DDI/120135.wav,0,0\r\ndefault,608186,0.0,4.608253968253968,DDI/608186.wav,0,0\r\ndefault,28125,0.0,4.028185941043084,DDI/28125.wav,0,0\r\ndefault,684209,0.0,4.684285714285714,DDI/684209.wav,0,0\r\ndefault,1621829,0.0,5.621904761904762,DDI/1621829.wav,0,0\r\ndefault,10691,0.0,4.010748299319728,DDI/10691.wav,0,0\r\ndefault,1518750,0.0,5.518820861678004,DDI/1518750.wav,0,0\r\ndefault,284766,0.0,4.284829931972789,DDI/284766.wav,0,0\r\ndefault,439,0.0,4.000498866213152,DDI/439.wav,0,0\r\ndefault,202729,0.0,4.202789115646259,DDI/202729.wav,0,0\r\ndefault,150000,0.0,4.150068027210884,DDI/150000.wav,0,0\r\ndefault,834,0.0,4.000907029478458,DDI/834.wav,0,0\r\ndefault,1298928,0.0,5.299002267573696,DDI/1298928.wav,0,0\r\ndefault,7127,0.0,4.00718820861678,DDI/7127.wav,0,0\r\ndefault,1081219,0.0,5.081292517006803,DDI/1081219.wav,0,0\r\ndefault,62,0.0,4.000136054421769,DDI/62.wav,0,0\r\ndefault,1408,0.0,4.001473922902495,DDI/1408.wav,0,0\r\ndefault,7910,0.0,4.007981859410431,DDI/7910.wav,0,0\r\ndefault,20023,0.0,4.020090702947845,DDI/20023.wav,0,0\r\ndefault,1441626,0.0,5.441700680272109,DDI/1441626.wav,0,0\r\ndefault,7508,0.0,4.0075736961451245,DDI/7508.wav,0,0\r\ndefault,176,0.0,4.000249433106576,DDI/176.wav,0,0\r\ndefault,88,0.0,4.00015873015873,DDI/88.wav,0,0\r\ndefault,1350000,0.0,5.3500680272108845,DDI/1350000.wav,0,0\r\ndefault,16036,0.0,4.0160997732426305,DDI/16036.wav,0,0\r\ndefault,720813,0.0,4.720884353741496,DDI/720813.wav,0,0\r\ndefault,3168,0.0,4.003242630385487,DDI/3168.wav,0,0\r\ndefault,400000,0.0,4.400068027210884,DDI/400000.wav,0,0\r\ndefault,228070,0.0,4.228140589569161,DDI/228070.wav,0,0\r\ndefault,865952,0.0,4.866009070294784,DDI/865952.wav,0,0\r\ndefault,192434,0.0,4.19249433106576,DDI/192434.wav,0,0\r\ndefault,73,0.0,4.000136054421769,DDI/73.wav,0,0\r\ndefault,26697,0.0,4.026757369614512,DDI/26697.wav,0,0\r\ndefault,98,0.0,4.00015873015873,DDI/98.wav,0,0\r\ndefault,13348,0.0,4.0134240362811795,DDI/13348.wav,0,0\r\ndefault,1026314,0.0,5.026371882086168,DDI/1026314.wav,0,0\r\ndefault,371,0.0,4.000430839002267,DDI/371.wav,0,0\r\ndefault,417,0.0,4.00047619047619,DDI/417.wav,0,0\r\ndefault,577302,0.0,4.577369614512472,DDI/577302.wav,0,0\r\ndefault,198,0.0,4.000272108843538,DDI/198.wav,0,0\r\ndefault,66,0.0,4.000136054421769,DDI/66.wav,0,0\r\ndefault,18750,0.0,4.018820861678004,DDI/18750.wav,0,0\r\ndefault,256578,0.0,4.256643990929705,DDI/256578.wav,0,0\r\ndefault,45051,0.0,4.045124716553288,DDI/45051.wav,0,0\r\ndefault,2503,0.0,4.002562358276644,DDI/2503.wav,0,0\r\ndefault,25000,0.0,4.025079365079365,DDI/25000.wav,0,0\r\ndefault,320361,0.0,4.320430839002268,DDI/320361.wav,0,0\r\ndefault,53394,0.0,4.0534693877551025,DDI/53394.wav,0,0\r\ndefault,70,0.0,4.000136054421769,DDI/70.wav,0,0\r\ndefault,165,0.0,4.000226757369615,DDI/165.wav,0,0\r\ndefault,80090,0.0,4.08015873015873,DDI/80090.wav,0,0\r\ndefault,3754,0.0,4.003832199546485,DDI/3754.wav,0,0\r\ndefault,30034,0.0,4.030090702947846,DDI/30034.wav,0,0\r\ndefault,2112,0.0,4.0021768707483,DDI/2112.wav,0,0\r\ndefault,1012500,0.0,5.012562358276644,DDI/1012500.wav,0,0\r\ndefault,59,0.0,4.000136054421769,DDI/59.wav,0,0\r\ndefault,1584,0.0,4.0016553287981855,DDI/1584.wav,0,0\r\ndefault,63281,0.0,4.0633560090702945,DDI/63281.wav,0,0\r\ndefault,586,0.0,4.000657596371882,DDI/586.wav,0,0\r\ndefault,40045,0.0,4.040113378684807,DDI/40045.wav,0,0\r\ndefault,1172,0.0,4.00124716553288,DDI/1172.wav,0,0\r\ndefault,506250,0.0,4.506326530612245,DDI/506250.wav,0,0\r\ndefault,75000,0.0,4.075056689342404,DDI/75000.wav,0,0\r\ndefault,4751,0.0,4.004829931972789,DDI/4751.wav,0,0\r\ndefault,1281445,0.0,5.281519274376417,DDI/1281445.wav,0,0\r\ndefault,626,0.0,4.000702947845805,DDI/626.wav,0,0\r\ndefault,82,0.0,4.00015873015873,DDI/82.wav,0,0\r\ndefault,55,0.0,4.000113378684807,DDI/55.wav,0,0\r\ndefault,12500,0.0,4.012562358276644,DDI/12500.wav,0,0\r\ndefault,47461,0.0,4.047528344671202,DDI/47461.wav,0,0\r\ndefault,1563,0.0,4.0016326530612245,DDI/1563.wav,0,0\r\ndefault,961084,0.0,4.961156462585034,DDI/961084.wav,0,0\r\ndefault,225000,0.0,4.225079365079365,DDI/225000.wav,0,0\r\ndefault,220,0.0,4.000294784580499,DDI/220.wav,0,0\r\ndefault,1978,0.0,4.002040816326531,DDI/1978.wav,0,0\r\ndefault,21094,0.0,4.021156462585034,DDI/21094.wav,0,0\r\ndefault,195,0.0,4.000272108843538,DDI/195.wav,0,0\r\ndefault,3564,0.0,4.003628117913832,DDI/3564.wav,0,0\r\ndefault,156,0.0,4.000226757369615,DDI/156.wav,0,0\r\ndefault,3955,0.0,4.004013605442177,DDI/3955.wav,0,0\r\ndefault,450000,0.0,4.450068027210884,DDI/450000.wav,0,0\r\ndefault,31641,0.0,4.031700680272109,DDI/31641.wav,0,0\r\ndefault,342105,0.0,4.3421768707482995,DDI/342105.wav,0,0\r\ndefault,180203,0.0,4.180272108843537,DDI/180203.wav,0,0\r\ndefault,396,0.0,4.000453514739229,DDI/396.wav,0,0\r\ndefault,142383,0.0,4.142448979591837,DDI/142383.wav,0,0\r\ndefault,989,0.0,4.001065759637188,DDI/989.wav,0,0\r\ndefault,792,0.0,4.000861678004535,DDI/792.wav,0,0\r\ndefault,235,0.0,4.000294784580499,DDI/235.wav,0,0\r\ndefault,209,0.0,4.000272108843538,DDI/209.wav,0,0\r\ndefault,144325,0.0,4.144399092970522,DDI/144325.wav,0,0\r\ndefault,594,0.0,4.000657596371882,DDI/594.wav,0,0\r\ndefault,96217,0.0,4.096281179138322,DDI/96217.wav,0,0\r\ndefault,12671,0.0,4.012743764172336,DDI/12671.wav,0,0\r\ndefault,126563,0.0,4.126621315192744,DDI/126563.wav,0,0\r\ndefault,213574,0.0,4.213650793650793,DDI/213574.wav,0,0\r\ndefault,912279,0.0,4.912358276643991,DDI/912279.wav,0,0\r\ndefault,52,0.0,4.000113378684807,DDI/52.wav,0,0\r\ndefault,0,0.0,4.000068027210884,DDI/0.wav,0,0\r\ndefault,456139,0.0,4.456213151927438,DDI/456139.wav,0,0\r\ndefault,168750,0.0,4.168820861678005,DDI/168750.wav,0,0\r\ndefault,146,0.0,4.000204081632653,DDI/146.wav,0,0\r\ndefault,25341,0.0,4.025419501133787,DDI/25341.wav,0,0\r\ndefault,23730,0.0,4.023809523809524,DDI/23730.wav,0,0\r\ndefault,480542,0.0,4.4806122448979595,DDI/480542.wav,0,0\r\ndefault,185,0.0,4.000249433106576,DDI/185.wav,0,0\r\ndefault,50682,0.0,4.050748299319728,DDI/50682.wav,0,0\r\ndefault,1368418,0.0,5.3684807256235825,DDI/1368418.wav,0,0\r\ndefault,569531,0.0,4.569591836734694,DDI/569531.wav,0,0\r\ndefault,556,0.0,4.000634920634921,DDI/556.wav,0,0\r\ndefault,67576,0.0,4.067641723356009,DDI/67576.wav,0,0\r\ndefault,5273,0.0,4.005351473922903,DDI/5273.wav,0,0\r\ndefault,1154603,0.0,5.154671201814059,DDI/1154603.wav,0,0\r\ndefault,85526,0.0,4.0856009070294785,DDI/85526.wav,0,0\r\ndefault,100000,0.0,4.1000680272108845,DDI/100000.wav,0,0\r\ndefault,781,0.0,4.000839002267574,DDI/781.wav,0,0\r\ndefault,742,0.0,4.000816326530612,DDI/742.wav,0,0\r\ndefault,540610,0.0,4.540680272108844,DDI/540610.wav,0,0\r\ndefault,640723,0.0,4.6407936507936505,DDI/640723.wav,0,0\r\ndefault,240271,0.0,4.240340136054422,DDI/240271.wav,0,0\r\ndefault,391,0.0,4.000453514739229,DDI/391.wav,0,0\r\ndefault,360406,0.0,4.360476190476191,DDI/360406.wav,0,0\r\ndefault,9503,0.0,4.009569160997732,DDI/9503.wav,0,0\r\ndefault,352,0.0,4.000430839002267,DDI/352.wav,0,0\r\ndefault,1188,0.0,4.00124716553288,DDI/1188.wav,0,0\r\ndefault,810915,0.0,4.810975056689342,DDI/810915.wav,0,0\r\ndefault,93,0.0,4.00015873015873,DDI/93.wav,0,0\r\ndefault,675000,0.0,4.675056689342403,DDI/675000.wav,0,0\r\ndefault,4224,0.0,4.0042857142857144,DDI/4224.wav,0,0\r\ndefault,78,0.0,4.000136054421769,DDI/78.wav,0,0\r\ndefault,5933,0.0,4.006009070294785,DDI/5933.wav,0,0\r\ndefault,84375,0.0,4.084444444444444,DDI/84375.wav,0,0\r\ndefault,1824558,0.0,5.824625850340136,DDI/1824558.wav,0,0\r\ndefault,90102,0.0,4.0901587301587305,DDI/90102.wav,0,0\r\ndefault,1758,0.0,4.001836734693877,DDI/1758.wav,0,0\r\ndefault,35596,0.0,4.035668934240363,DDI/35596.wav,0,0\r\ndefault,427148,0.0,4.427210884353742,DDI/427148.wav,0,0\r\ndefault,16894,0.0,4.016961451247165,DDI/16894.wav,0,0\r\ndefault,152046,0.0,4.152108843537415,DDI/152046.wav,0,0\r\ndefault,21382,0.0,4.021451247165533,DDI/21382.wav,0,0\r\ndefault,288651,0.0,4.288707482993197,DDI/288651.wav,0,0\r\ndefault,160181,0.0,4.160249433106576,DDI/160181.wav,0,0\r\ndefault,57017,0.0,4.057074829931973,DDI/57017.wav,0,0\r\ndefault,759375,0.0,4.759433106575964,DDI/759375.wav,0,0\r\ndefault,304093,0.0,4.304172335600907,DDI/304093.wav,0,0\r\ndefault,600000,0.0,4.6000680272108845,DDI/600000.wav,0,0\r\ndefault,60068,0.0,4.060136054421768,DDI/60068.wav,0,0\r\ndefault,2816,0.0,4.002879818594105,DDI/2816.wav,0,0\r\ndefault,1112,0.0,4.001179138321995,DDI/1112.wav,0,0\r\ndefault,64145,0.0,4.06421768707483,DDI/64145.wav,0,0\r\ndefault,94922,0.0,4.094988662131519,DDI/94922.wav,0,0\r\ndefault,112500,0.0,4.112562358276644,DDI/112500.wav,0,0\r\ndefault,8447,0.0,4.008526077097506,DDI/8447.wav,0,0\r\ndefault,48108,0.0,4.048185941043084,DDI/48108.wav,0,0\r\ndefault,6250,0.0,4.006326530612245,DDI/6250.wav,0,0\r\ndefault,432976,0.0,4.433038548752834,DDI/432976.wav,0,0\r\ndefault,9375,0.0,4.009433106575964,DDI/9375.wav,0,0\r\ndefault,10011,0.0,4.010068027210885,DDI/10011.wav,0,0\r\ndefault,939,0.0,4.0009977324263035,DDI/939.wav,0,0\r\ndefault,3516,0.0,4.0035827664399095,DDI/3516.wav,0,0\r\ndefault,270305,0.0,4.270362811791383,DDI/270305.wav,0,0\r\ndefault,124,0.0,4.000181405895692,DDI/124.wav,0,0\r\ndefault,8899,0.0,4.008956916099773,DDI/8899.wav,0,0\r\ndefault,2344,0.0,4.002403628117913,DDI/2344.wav,0,0\r\ndefault,469,0.0,4.000544217687075,DDI/469.wav,0,0\r\ndefault,6335,0.0,4.006394557823129,DDI/6335.wav,0,0\r\ndefault,11865,0.0,4.011927437641724,DDI/11865.wav,0,0\r\ndefault,2966,0.0,4.003038548752834,DDI/2966.wav,0,0\r\ndefault,5006,0.0,4.005079365079365,DDI/5006.wav,0,0\r\ndefault,247,0.0,4.0003174603174605,DDI/247.wav,0,0\r\ndefault,2225,0.0,4.0022902494331065,DDI/2225.wav,0,0\r\ndefault,128289,0.0,4.128367346938775,DDI/128289.wav,0,0\r\ndefault,1216372,0.0,5.216439909297052,DDI/1216372.wav,0,0\r\ndefault,32072,0.0,4.032131519274376,DDI/32072.wav,0,0\r\ndefault,2637,0.0,4.002698412698413,DDI/2637.wav,0,0\r\ndefault,1139063,0.0,5.139138321995465,DDI/1139063.wav,0,0\r\ndefault,494,0.0,4.000566893424036,DDI/494.wav,0,0\r\ndefault,1708594,0.0,5.708662131519274,DDI/1708594.wav,0,0\r\ndefault,330,0.0,4.000408163265306,DDI/330.wav,0,0\r\ndefault,337500,0.0,4.337573696145125,DDI/337500.wav,0,0\r\ndefault,135152,0.0,4.135215419501134,DDI/135152.wav,0,0\r\ndefault,76023,0.0,4.07609977324263,DDI/76023.wav,0,0\r\ndefault,132,0.0,4.000204081632653,DDI/132.wav,0,0\r\ndefault,14063,0.0,4.014126984126984,DDI/14063.wav,0,0\r\ndefault,56250,0.0,4.056326530612245,DDI/56250.wav,0,0\r\ndefault,278,0.0,4.0003401360544215,DDI/278.wav,0,0\r\ndefault,253125,0.0,4.253197278911564,DDI/253125.wav,0,0\r\ndefault,38012,0.0,4.038072562358277,DDI/38012.wav,0,0\r\ndefault,293,0.0,4.000362811791383,DDI/293.wav,0,0,0" } }, { @@ -50,7 +50,7 @@ "fields": { "name": "RhythmDiscrimination", "process_csv": false, - "csv": "default,3.5 3.5 1 4.5 1_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_150,0.0,8.050476190476191,RDT/4 1 1 2 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_150,0.0,8.050476190476191,RDT/1 1 2 4 2 2_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_200,0.0,10.00047619047619,RDT/1 1 2 3 1 4_Metric_Standard_200.wav,0,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_200,0.0,10.00047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 1 3 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,2 2 4 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/2 2 4 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_190,0.0,9.610544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_170.wav,0,170,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_170.wav,0,170,1\r\ndefault,4 3 1 2 2_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 3 1 2 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,2 2 4 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/2 2 4 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4 3 1 2 2_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 3 1 2 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_190,0.0,9.61047619047619,RDT/4 1 1 2 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_160,0.0,8.44047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/3 1 2 2 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 4 2 2_Metric_Standard_190,0.0,9.61047619047619,RDT/1 1 2 4 2 2_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 3 1 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/3 1 2 2 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 4 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/3 1 4 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 2 1 1 1 1 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,4 3 1 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 3 1 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,4 3 1 2 2_Metric_Standard_180,0.0,9.220408163265306,RDT/4 3 1 2 2_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_150,0.0,8.050544217687074,RDT/2 2 1 1 1 1 4_Metric_Standard_150.wav,0,150,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 3 1 4_Metric_Standard_160,0.0,8.44047619047619,RDT/1 1 2 3 1 4_Metric_Standard_160.wav,0,160,1\r\ndefault,2 2 4 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/2 2 4 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,3 1 4 2 2_Metric_Standard_180,0.0,9.220408163265306,RDT/3 1 4 2 2_Metric_Standard_180.wav,0,180,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 2 2 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 3 1 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/4 3 1 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,4 3 1 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/4 3 1 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,3 1 4 2 2_Metric_Standard_190,0.0,9.610408163265307,RDT/3 1 4 2 2_Metric_Standard_190.wav,0,190,1\r\ndefault,2 2 4 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/2 2 4 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 3 1 4_Metric_Standard_170,0.0,8.83047619047619,RDT/1 1 2 3 1 4_Metric_Standard_170.wav,0,170,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,4 3 1 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 3 1 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 3 1 2 2_Metric_Standard_190,0.0,9.610408163265307,RDT/4 3 1 2 2_Metric_Standard_190.wav,0,190,1\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/3 1 4 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,2 2 4 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/2 2 4 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/3 1 2 2 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 1 1 4 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 4 2 2_Metric_Standard_180,0.0,9.220476190476191,RDT/1 1 2 4 2 2_Metric_Standard_180.wav,0,180,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 1 3 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_170,0.0,8.83047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_180,0.0,9.220476190476191,RDT/4 1 1 2 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4 3 1 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/4 3 1 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 2 2 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 2 2 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 4 2 2_Metric_Standard_150,0.0,8.050408163265306,RDT/3 1 4 2 2_Metric_Standard_150.wav,0,150,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/3 1 2 2 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,4 3 1 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 3 1 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,4 3 1 2 2_Metric_Standard_150,0.0,8.050408163265306,RDT/4 3 1 2 2_Metric_Standard_150.wav,0,150,1\r\ndefault,4 3 1 2 2_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 3 1 2 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 1 3 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_180,0.0,9.220544217687074,RDT/2 2 1 1 1 1 4_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,2 2 4 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/2 2 4 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,3 1 4 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/3 1 4 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 2 1 1 1 1 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 1 3 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/3 1 2 2 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 3 1 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_170.wav,0,170,1\r\ndefault,4 1 3 3 1_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 1 3 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 4 1 1 1 1_Metric_Standard_180.wav,0,180,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_200,0.0,10.000544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_200.wav,0,200,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 3 1 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 2 1 1 4_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_180,0.0,9.220476190476191,RDT/3 1 1 3 2 2_Metric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_150,0.0,8.050476190476191,RDT/4 2 2 1 1 2_Metric_Standard_150.wav,0,150,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3 1 4 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/3 1 4 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 3 1 2 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,4 1 3 3 1_Metric_Standard_200,0.0,10.000408163265305,RDT/4 1 3 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,4 2 2 1 1 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/4 2 2 1 1 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 1 1 2 2 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 2 1 1 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 4 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 3 1 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/1 1 2 4 2 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 1 3 3 1_Metric_Standard_160,0.0,8.440408163265307,RDT/4 1 3 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 2 2 4_Metric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_190,0.0,9.61047619047619,RDT/4 2 2 1 1 2_Metric_Standard_190.wav,0,190,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3 1 1 3 2 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,2 2 2 1 1 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 2 1 1 4_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_160,0.0,8.440544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_160.wav,0,160,1\r\ndefault,3 1 4 2 2_Metric_Deviant_170,0.0,8.830408163265306,RDT/3 1 4 2 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/3 1 4 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,4 1 3 3 1_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 1 3 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 1 3 4_Metric_Standard_170.wav,0,170,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 1 1 2 2 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/4 2 2 1 1 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 2 1 3 3 1_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 3 1 2 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 1 3 4_Metric_Standard_160.wav,0,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3 1 4 2 2_Metric_Deviant_160,0.0,8.440408163265307,RDT/3 1 4 2 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_170,0.0,8.830544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_170.wav,0,170,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_150,0.0,8.050476190476191,RDT/3 1 1 3 2 2_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 2 2 4_Metric_Standard_160.wav,0,160,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_180,0.0,9.220476190476191,RDT/4 2 2 1 1 2_Metric_Standard_180.wav,0,180,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,4 1 3 3 1_Metric_Standard_170,0.0,8.830408163265306,RDT/4 1 3 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 4 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 4 1 1 1 1_Metric_Standard_150.wav,0,150,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 2 2 4_Metric_Standard_200.wav,0,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,3 1 4 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/3 1 4 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 4 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 1 3 4_Metric_Standard_200.wav,0,200,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 2 1 1 4_Metric_Standard_180.wav,0,180,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_190,0.0,9.61047619047619,RDT/3 1 1 3 2 2_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/1 1 2 4 2 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 2 1 3 3 1_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 3 1 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_190.wav,0,190,1\r\ndefault,3 1 4 2 2_Metric_Deviant_200,0.0,10.000408163265305,RDT/3 1 4 2 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 2 1 1 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_160.wav,0,160,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4 1 3 3 1_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 1 3 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/2 1 1 3 1 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_170.wav,0,170,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 3 1 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 1 3 4_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 1 1 4 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,3 1 1 3 2 2_Metric_Standard_200,0.0,10.00047619047619,RDT/3 1 1 3 2 2_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3 1 4 2 2_Metric_Deviant_190,0.0,9.610408163265307,RDT/3 1 4 2 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_180,0.0,9.220544217687074,RDT/4 2 2 1 1 1 1_Metric_Standard_180.wav,0,180,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_170,0.0,8.83047619047619,RDT/4 2 2 1 1 2_Metric_Standard_170.wav,0,170,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 2 2 4_Metric_Standard_190.wav,0,190,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/3 1 1 3 2 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,4 1 3 3 1_Metric_Standard_180,0.0,9.220408163265306,RDT/4 1 3 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/4 2 2 1 1 1 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/2 1 1 2 2 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 4 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 2 2 1 1 2_Metric_Standard_150.wav,0,150,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 1 3 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 1 3 4_Metric_Standard_150.wav,0,150,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3 1 4 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/3 1 4 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,3 1 4 2 2_Metric_Deviant_150,0.0,8.050408163265306,RDT/3 1 4 2 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 2 2 1 1 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_160,0.0,8.44047619047619,RDT/3 1 1 3 2 2_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/1 1 2 3 1 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 1 1 3 1 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 2 2 1 1 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 2 1 1 4_Metric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 2 2 4_Metric_Standard_150.wav,0,150,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 3 1 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 4 1 1 1 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 1 3 3 1_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 1 3 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_190.wav,0,190,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 4 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_160.wav,0,160,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_170.wav,0,170,1\r\ndefault,4 1 3 3 1_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 1 3 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 2 2 1 1 2_Metric_Standard_180.wav,0,180,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/2 1 1 2 2 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 3 1 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/4 2 2 1 1 1 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4 1 3 3 1_Metric_Standard_150,0.0,8.050408163265306,RDT/4 1 3 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,4 2 2 1 1 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_200.wav,0,200,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_170,0.0,8.83047619047619,RDT/3 1 1 3 2 2_Metric_Standard_170.wav,0,170,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 2 1 1 4_Metric_Standard_160.wav,0,160,1\r\ndefault,3 1 1 3 2 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/3 1 1 3 2 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_150,0.0,8.050544217687074,RDT/4 2 2 1 1 1 1_Metric_Standard_150.wav,0,150,1\r\ndefault,3 1 4 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/3 1 4 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_200,0.0,10.00047619047619,RDT/4 2 2 1 1 2_Metric_Standard_200.wav,0,200,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 3 1 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 1 1 4 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/2 1 1 3 1 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4 1 3 3 1_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 1 3 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 4 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/3 1 4 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 4 1 1 1 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,4 1 3 3 1_Metric_Standard_190,0.0,9.610408163265307,RDT/4 1 3 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_170.wav,0,170,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 1 1 3 1 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/1 1 2 3 1 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_160,0.0,8.44047619047619,RDT/4 2 2 1 1 2_Metric_Standard_160.wav,0,160,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 2 2 4_Metric_Standard_180.wav,0,180,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 3 1 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_190,0.0,9.610544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_190.wav,0,190,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 2 2 1 1 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 2 2_Metric_Deviant_180,0.0,9.220408163265306,RDT/3 1 4 2 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 1 3 4_Metric_Standard_180.wav,0,180,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 2 1 1 4_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_160.wav,0,160,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 1 3 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,4 3 1 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/4 3 1 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 3 1 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_180,0.0,9.220476190476191,RDT/1 1 2 3 1 4_Metric_Standard_180.wav,0,180,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,2 2 4 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/2 2 4 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,3 1 4 2 2_Metric_Standard_160,0.0,8.440408163265307,RDT/3 1 4 2 2_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,4 3 1 2 2_Metric_Standard_160,0.0,8.440408163265307,RDT/4 3 1 2 2_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 3 1 2 2_Metric_Standard_150.wav,0,150,1\r\ndefault,4 3 1 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 3 1 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 2 1 1 4_Metric_Standard_150.wav,0,150,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 2 1 1 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 4 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/3 1 4 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/4 1 1 1 1 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 1 3 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 4 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 1 1 4 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/3 1 2 2 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_170,0.0,8.83047619047619,RDT/1 1 2 4 2 2_Metric_Standard_170.wav,0,170,1\r\ndefault,2 2 4 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/2 2 4 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_170,0.0,8.83047619047619,RDT/4 1 1 2 3 1_Metric_Standard_170.wav,0,170,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_180,0.0,9.220476190476191,RDT/4 1 1 2 3 1_Metric_Deviant_180.wav,0,180,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 1 1 1 3 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_190.wav,0,190,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_190.wav,0,190,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_170,0.0,8.830544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_170.wav,0,170,1\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_190.wav,0,190,1\r\ndefault,4 3 1 2 2_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 3 1 2 2_Metric_Deviant_180.wav,0,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 2 1 1 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,2 2 1 3 3 1_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 1 3 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,2 2 4 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/2 2 4 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,3 1 4 2 2_Metric_Standard_200,0.0,10.000408163265305,RDT/3 1 4 2 2_Metric_Standard_200.wav,0,200,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/3 1 2 2 1 3_Metric_Standard_150.wav,0,150,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4 3 1 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/4 3 1 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 2 1 1 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,3 1 4 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/3 1 4 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/4 1 1 1 1 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 3 1 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 3 1 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,4 3 1 2 2_Metric_Standard_200,0.0,10.000408163265305,RDT/4 3 1 2 2_Metric_Standard_200.wav,0,200,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 1 3 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_190.wav,0,190,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4 1 1 2 3 1_Metric_Deviant_150,0.0,8.050476190476191,RDT/4 1 1 2 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_150.wav,0,150,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 4 1 3_Metric_Deviant_150.wav,0,150,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 1 1 4 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 2 4 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/2 2 4 1 3_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,2 2 2 1 1 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 2 1 1 4_Metric_Deviant_150.wav,0,150,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_150.wav,0,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_200,0.0,10.00047619047619,RDT/4 1 1 2 3 1_Metric_Standard_200.wav,0,200,1\r\ndefault,2 2 4 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/2 2 4 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/4 1 1 1 1 3 1_Metric_Deviant_150.wav,0,150,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 1 3 3 1_Metric_Standard_180.wav,0,180,1\r\ndefault,4 3 1 2 2_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 3 1 2 2_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 3 1 2 2_Metric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 2 1 1 4_Metric_Standard_180.wav,0,180,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_160,0.0,8.440544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_150,0.0,8.050476190476191,RDT/1 1 2 3 1 4_Metric_Standard_150.wav,0,150,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_160.wav,0,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 3 1 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_200,0.0,10.00047619047619,RDT/1 1 2 4 2 2_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_170.wav,0,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_200,0.0,10.000544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_200.wav,0,200,1\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 1 3 4_Metric_Deviant_180.wav,0,180,0\r\ndefault,4 1 1 2 3 1_Metric_Deviant_190,0.0,9.61047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_180.wav,0,180,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 2 1 1 1 3_Metric_Deviant_180.wav,0,180,0\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/4 1 1 1 1 3 1_Metric_Standard_150.wav,0,150,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_160,0.0,8.44047619047619,RDT/4 1 1 2 3 1_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_160,0.0,8.44047619047619,RDT/1 1 2 4 2 2_Metric_Standard_160.wav,0,160,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_190.wav,0,190,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_200.wav,0,200,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/3 1 2 2 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,2 1 1 4 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_190.wav,0,190,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_190.wav,0,190,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_190.wav,0,190,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_190.wav,0,190,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/3 1 4 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180.wav,0,180,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_160.wav,0,160,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_170.wav,0,170,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 2 1 1 1 3_Metric_Standard_180.wav,0,180,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_200.wav,0,200,0\r\ndefault,4 3 1 2 2_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 3 1 2 2_Metric_Deviant_150.wav,0,150,0\r\ndefault,4 3 1 2 2_Metric_Standard_170,0.0,8.830408163265306,RDT/4 3 1 2 2_Metric_Standard_170.wav,0,170,1\r\ndefault,4 3 1 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 3 1 1 3_Metric_Deviant_170.wav,0,170,0\r\ndefault,3 1 4 2 2_Metric_Standard_170,0.0,8.830408163265306,RDT/3 1 4 2 2_Metric_Standard_170.wav,0,170,1\r\ndefault,2 2 4 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/2 2 4 1 3_Metric_Standard_160.wav,0,160,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_190,0.0,9.61047619047619,RDT/1 1 2 3 1 4_Metric_Standard_190.wav,0,190,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,4 3 1 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/4 3 1 1 3_Metric_Standard_170.wav,0,170,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_160.wav,0,160,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_200.wav,0,200,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_200.wav,0,200,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_150.wav,0,150,1" + "csv": "default,3.5 3.5 1 4.5 1_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_200.wav,200,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_150,0.0,8.050476190476191,RDT/4 1 1 2 3 1_Metric_Standard_150.wav,150,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_160.wav,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_150,0.0,8.050476190476191,RDT/1 1 2 4 2 2_Metric_Standard_150.wav,150,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_200,0.0,10.00047619047619,RDT/1 1 2 3 1 4_Metric_Standard_200.wav,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_200,0.0,10.00047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 1 3 3 1_Metric_Standard_170.wav,170,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,2 2 4 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/2 2 4 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_190,0.0,9.610544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_190.wav,190,1\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_170.wav,170,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_170.wav,170,1\r\ndefault,4 3 1 2 2_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 3 1 2 2_Metric_Deviant_160.wav,160,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_190.wav,190,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,2 2 4 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/2 2 4 1 3_Metric_Standard_150.wav,150,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_170.wav,170,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4 3 1 2 2_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 3 1 2 2_Metric_Deviant_200.wav,200,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_190,0.0,9.61047619047619,RDT/4 1 1 2 3 1_Metric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_160,0.0,8.44047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/3 1 2 2 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1 1 2 4 2 2_Metric_Standard_190,0.0,9.61047619047619,RDT/1 1 2 4 2 2_Metric_Standard_190.wav,190,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_160.wav,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_190.wav,190,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 3 1 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/3 1 2 2 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 4 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/3 1 4 1 3_Metric_Standard_180.wav,180,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_200.wav,200,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 2 1 1 1 1 4_Metric_Deviant_180.wav,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_160.wav,160,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,4 3 1 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 3 1 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_180.wav,180,0\r\ndefault,4 3 1 2 2_Metric_Standard_180,0.0,9.220408163265306,RDT/4 3 1 2 2_Metric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_150,0.0,8.050544217687074,RDT/2 2 1 1 1 1 4_Metric_Standard_150.wav,150,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 2 3 1 4_Metric_Standard_160,0.0,8.44047619047619,RDT/1 1 2 3 1 4_Metric_Standard_160.wav,160,1\r\ndefault,2 2 4 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/2 2 4 1 3_Metric_Standard_190.wav,190,1\r\ndefault,3 1 4 2 2_Metric_Standard_180,0.0,9.220408163265306,RDT/3 1 4 2 2_Metric_Standard_180.wav,180,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 2 2 4_Metric_Deviant_150.wav,150,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 3 1 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/4 3 1 1 3_Metric_Standard_180.wav,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_150.wav,150,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_180.wav,180,0\r\ndefault,4 3 1 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/4 3 1 1 3_Metric_Standard_190.wav,190,1\r\ndefault,3 1 4 2 2_Metric_Standard_190,0.0,9.610408163265307,RDT/3 1 4 2 2_Metric_Standard_190.wav,190,1\r\ndefault,2 2 4 1 3_Metric_Standard_180,0.0,9.220408163265306,RDT/2 2 4 1 3_Metric_Standard_180.wav,180,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 2 3 1 4_Metric_Standard_170,0.0,8.83047619047619,RDT/1 1 2 3 1 4_Metric_Standard_170.wav,170,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,4 3 1 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 3 1 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 3 1 2 2_Metric_Standard_190,0.0,9.610408163265307,RDT/4 3 1 2 2_Metric_Standard_190.wav,190,1\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 1 3_Metric_Standard_190,0.0,9.610408163265307,RDT/3 1 4 1 3_Metric_Standard_190.wav,190,1\r\ndefault,2 2 4 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/2 2 4 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_190.wav,190,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/3 1 2 2 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 1 1 4 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 2 4 2 2_Metric_Standard_180,0.0,9.220476190476191,RDT/1 1 2 4 2 2_Metric_Standard_180.wav,180,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_170.wav,170,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_200.wav,200,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_180.wav,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 1 3 3 1_Metric_Standard_200.wav,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_170,0.0,8.83047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_180,0.0,9.220476190476191,RDT/4 1 1 2 3 1_Metric_Standard_180.wav,180,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_200.wav,200,1\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_200.wav,200,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_190.wav,190,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4 3 1 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/4 3 1 1 3_Metric_Standard_150.wav,150,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_160.wav,160,1\r\ndefault,2 1 1 2 2 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 2 2 4_Metric_Deviant_180.wav,180,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 4 2 2_Metric_Standard_150,0.0,8.050408163265306,RDT/3 1 4 2 2_Metric_Standard_150.wav,150,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/3 1 2 2 1 3_Metric_Standard_200.wav,200,1\r\ndefault,4 3 1 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 3 1 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,4 3 1 2 2_Metric_Standard_150,0.0,8.050408163265306,RDT/4 3 1 2 2_Metric_Standard_150.wav,150,1\r\ndefault,4 3 1 2 2_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 3 1 2 2_Metric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_160.wav,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 1 3 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_200.wav,200,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_180,0.0,9.220544217687074,RDT/2 2 1 1 1 1 4_Metric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_160.wav,160,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,2 2 4 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/2 2 4 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,3 1 4 1 3_Metric_Standard_150,0.0,8.050408163265306,RDT/3 1 4 1 3_Metric_Standard_150.wav,150,1\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 2 1 1 1 1 4_Metric_Deviant_150.wav,150,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 1 3 3 1_Metric_Standard_160.wav,160,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/3 1 2 2 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 3 1 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_170.wav,170,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_200.wav,200,1\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_170.wav,170,1\r\ndefault,4 1 3 3 1_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 1 3 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 4 1 1 1 1_Metric_Standard_180.wav,180,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_170.wav,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_200,0.0,10.000544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_200.wav,200,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 3 1 1 3_Metric_Standard_190.wav,190,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 2 1 1 4_Metric_Standard_190.wav,190,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_180,0.0,9.220476190476191,RDT/3 1 1 3 2 2_Metric_Standard_180.wav,180,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_200,0.0,9.580544217687075,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_150,0.0,8.050476190476191,RDT/4 2 2 1 1 2_Metric_Standard_150.wav,150,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_200.wav,200,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,3 1 4 1 3_Metric_Deviant_190,0.0,9.610408163265307,RDT/3 1 4 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 3 1 2 2_Metric_Deviant_150.wav,150,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_170.wav,170,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_200.wav,200,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,4 1 3 3 1_Metric_Standard_200,0.0,10.000408163265305,RDT/4 1 3 3 1_Metric_Standard_200.wav,200,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,4 2 2 1 1 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/4 2 2 1 1 2_Metric_Deviant_150.wav,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 1 1 2 2 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_170,0.0,8.830544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 2 1 1 4_Metric_Deviant_180.wav,180,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_160.wav,160,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 4 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_170.wav,170,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 3 1 1 3_Metric_Standard_150.wav,150,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/1 1 2 4 2 2_Metric_Deviant_180.wav,180,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_190,0.0,9.496326530612246,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 1 3 3 1_Metric_Standard_160,0.0,8.440408163265307,RDT/4 1 3 3 1_Metric_Standard_160.wav,160,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 2 2 4_Metric_Standard_170.wav,170,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_150,0.0,7.960408163265306,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_190,0.0,9.61047619047619,RDT/4 2 2 1 1 2_Metric_Standard_190.wav,190,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3 1 1 3 2 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_160.wav,160,0\r\ndefault,2 2 2 1 1 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 2 1 1 4_Metric_Standard_150.wav,150,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_170.wav,170,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_170,0.0,8.830544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_170.wav,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_160,0.0,8.440544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_160.wav,160,1\r\ndefault,3 1 4 2 2_Metric_Deviant_170,0.0,8.830408163265306,RDT/3 1 4 2 2_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 1 3_Metric_Deviant_150,0.0,8.050408163265306,RDT/3 1 4 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,4 1 3 3 1_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 1 3 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_160,0.0,8.104489795918367,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_190.wav,190,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 1 1 1 3 4_Metric_Standard_170.wav,170,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_180,0.0,9.436530612244898,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_190.wav,190,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 1 1 2 2 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/4 2 2 1 1 2_Metric_Deviant_180.wav,180,0\r\ndefault,2 2 1 3 3 1_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 3 1 2 2_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 1 3 4_Metric_Standard_160.wav,160,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_170,0.0,8.473401360544218,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_190,0.0,9.83843537414966,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_200.wav,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_150,0.0,7.9603401360544215,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3 1 4 2 2_Metric_Deviant_160,0.0,8.440408163265307,RDT/3 1 4 2 2_Metric_Deviant_160.wav,160,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_170,0.0,8.830544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_170.wav,170,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_200.wav,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_150,0.0,8.050476190476191,RDT/3 1 1 3 2 2_Metric_Standard_150.wav,150,1\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_200,0.0,10.000544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_200.wav,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 2 2 4_Metric_Standard_160.wav,160,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_180,0.0,9.220476190476191,RDT/4 2 2 1 1 2_Metric_Standard_180.wav,180,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_180,0.0,10.030408163265307,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_180.wav,180,0\r\ndefault,4 1 3 3 1_Metric_Standard_170,0.0,8.830408163265306,RDT/4 1 3 3 1_Metric_Standard_170.wav,170,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_200,0.0,10.000544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_200.wav,200,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_190,0.0,10.465306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_190.wav,190,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_160.wav,160,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_170,0.0,8.830544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_170.wav,170,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/2 1 1 4 1 3_Metric_Standard_160.wav,160,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 4 1 1 1 1_Metric_Standard_150.wav,150,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_160,0.0,8.440544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_180,0.0,8.518435374149659,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 2 2 4_Metric_Standard_200.wav,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_160,0.0,8.440544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_200.wav,200,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_190,0.0,9.49625850340136,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,3 1 4 1 3_Metric_Deviant_180,0.0,9.220408163265306,RDT/3 1 4 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_180,0.0,9.112380952380953,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_150,0.0,8.23047619047619,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_150,0.0,7.465442176870749,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 4 1 3_Metric_Standard_200.wav,200,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_180,0.0,9.112448979591838,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 1 1 1 3 4_Metric_Standard_200.wav,200,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 2 1 1 4_Metric_Standard_180.wav,180,1\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_190,0.0,9.61047619047619,RDT/3 1 1 3 2 2_Metric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_150,0.0,8.725306122448979,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_150.wav,150,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/1 1 2 4 2 2_Metric_Deviant_150.wav,150,0\r\ndefault,2 2 1 3 3 1_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_190,0.0,8.869319727891156,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_200,0.0,10.000544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_200.wav,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_160.wav,160,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 3 1 1 3_Metric_Standard_180.wav,180,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_190.wav,190,1\r\ndefault,3 1 4 2 2_Metric_Deviant_200,0.0,10.000408163265305,RDT/3 1 4 2 2_Metric_Deviant_200.wav,200,0\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 2 1 1 4_Metric_Deviant_150.wav,150,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_160.wav,160,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,4 1 3 3 1_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 1 3 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/2 1 1 3 1 1 3_Metric_Standard_150.wav,150,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 1 3 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_170.wav,170,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_170.wav,170,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 2 3 1 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 1 3 4_Metric_Standard_190.wav,190,1\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 1 1 4 3 1_Metric_Standard_150.wav,150,1\r\ndefault,3 1 1 3 2 2_Metric_Standard_200,0.0,10.00047619047619,RDT/3 1 1 3 2 2_Metric_Standard_200.wav,200,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_200,0.0,10.000544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_200.wav,200,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,3 1 4 2 2_Metric_Deviant_190,0.0,9.610408163265307,RDT/3 1 4 2 2_Metric_Deviant_190.wav,190,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_150,0.0,7.465510204081633,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_150.wav,150,1\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_190,0.0,10.18047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 2 2 1 1 2_Metric_Deviant_190.wav,190,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_180,0.0,9.220544217687074,RDT/4 2 2 1 1 1 1_Metric_Standard_180.wav,180,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_170,0.0,8.83047619047619,RDT/4 2 2 1 1 2_Metric_Standard_170.wav,170,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 2 2 4_Metric_Standard_190.wav,190,1\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/2 1 1 3 1 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/1 1 2 3 1 4_Metric_Deviant_190.wav,190,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_180,0.0,9.220476190476191,RDT/3 1 1 3 2 2_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_170,0.0,8.16734693877551,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_160.wav,160,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,4 1 3 3 1_Metric_Standard_180,0.0,9.220408163265306,RDT/4 1 3 3 1_Metric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/4 2 2 1 1 1 1_Metric_Deviant_150.wav,150,0\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 4 1 1 1 1_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_200,0.0,9.220544217687074,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_160,0.0,8.920544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/2 1 1 2 2 3 1_Metric_Standard_180.wav,180,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/2 1 1 4 1 3_Metric_Standard_190.wav,190,1\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 2 2 1 1 2_Metric_Standard_150.wav,150,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 4 2 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_180,0.0,8.842517006802721,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_180,0.0,9.112448979591838,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/2 1 1 3 1 1 3_Metric_Standard_190.wav,190,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 1 3 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 1 3 4_Metric_Standard_150.wav,150,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 2 3 1 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 1 1 4 3 1_Metric_Standard_190.wav,190,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_200,0.0,10.600544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_160,0.0,7.816462585034014,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3 1 4 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/3 1 4 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_200.wav,200,0\r\ndefault,3 1 4 2 2_Metric_Deviant_150,0.0,8.050408163265306,RDT/3 1 4 2 2_Metric_Deviant_150.wav,150,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_190,0.0,8.869387755102041,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 2 2 1 1 2_Metric_Deviant_150.wav,150,0\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_150,0.0,8.50047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_170,0.0,8.473401360544218,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_160,0.0,8.44047619047619,RDT/3 1 1 3 2 2_Metric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/1 1 2 3 1 4_Metric_Deviant_150.wav,150,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/2 1 1 3 1 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,2 2 2 1 1 4_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 2 1 1 4_Metric_Standard_170.wav,170,1\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,2 1 1 2 2 4_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 2 2 4_Metric_Standard_150.wav,150,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_170,0.0,8.83047619047619,RDT/2 2 3 1 1 3_Metric_Standard_170.wav,170,1\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 4 1 1 1 1_Metric_Deviant_150.wav,150,0\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/4 2 2 1 1 1 1_Metric_Deviant_190.wav,190,0\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 1 3 3 1_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 1 3 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 2 2 1 1 2_Metric_Standard_190.wav,190,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/2 1 1 4 1 3_Metric_Standard_150.wav,150,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_160,0.0,8.440544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_160.wav,160,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_150,0.0,8.50047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3 1 4 1 1 1 1_Metric_Standard_170,0.0,8.830544217687075,RDT/3 1 4 1 1 1 1_Metric_Standard_170.wav,170,1\r\ndefault,4 1 3 3 1_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 1 3 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,3 1 2 2 1 1 2_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 2 2 1 1 2_Metric_Standard_180.wav,180,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/2 1 1 2 2 3 1_Metric_Standard_150.wav,150,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,2 2 3 1 1 3_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 3 1 1 3_Metric_Standard_160.wav,160,1\r\ndefault,4 2 2 1 1 1 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/4 2 2 1 1 1 1_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,4 1 3 3 1_Metric_Standard_150,0.0,8.050408163265306,RDT/4 1 3 3 1_Metric_Standard_150.wav,150,1\r\ndefault,4 2 2 1 1 2_Metric_Deviant_200,0.0,10.00047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_200.wav,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_200,0.0,10.000544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_200.wav,200,0\r\ndefault,3 1 1 3 2 2_Metric_Standard_170,0.0,8.83047619047619,RDT/3 1 1 3 2 2_Metric_Standard_170.wav,170,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_160,0.0,8.44047619047619,RDT/2 2 2 1 1 4_Metric_Standard_160.wav,160,1\r\ndefault,3 1 1 3 2 2_Metric_Deviant_150,0.0,8.050476190476191,RDT/3 1 1 3 2 2_Metric_Deviant_150.wav,150,0\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_150,0.0,8.050544217687074,RDT/4 2 2 1 1 1 1_Metric_Standard_150.wav,150,1\r\ndefault,3 1 4 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/3 1 4 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_180,0.0,8.518503401360544,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/1 1 3.5 1.4 1.4 1 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,4 2 2 1 1 2_Metric_Standard_200,0.0,10.00047619047619,RDT/4 2 2 1 1 2_Metric_Standard_200.wav,200,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_170,0.0,8.16734693877551,RDT/3.5 1.4 1.4 1 1 1 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 2 3 1 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 1 1 4 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 1 1 4 3 1_Metric_Standard_180.wav,180,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_190,0.0,9.211428571428572,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_190,0.0,9.496326530612246,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_190.wav,190,1\r\ndefault,2 1 1 3 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/2 1 1 3 1 1 3_Metric_Standard_180.wav,180,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_200,0.0,9.220544217687074,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_160,0.0,7.816394557823129,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4 1 3 3 1_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 1 3 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Standard_170,0.0,9.34047619047619,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,2 1 1 2 2 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/2 1 1 2 2 3 1_Metric_Standard_190.wav,190,1\r\ndefault,2 1 1 4 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 4 1 3_Metric_Standard_180.wav,180,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Standard_190,0.0,10.18047619047619,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 2 2 1 1 4_Metric_Deviant_170,0.0,8.830544217687075,RDT/1 1 2 2 1 1 4_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/3 1 4 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,3 1 4 1 1 1 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 4 1 1 1 1_Metric_Deviant_180.wav,180,0\r\ndefault,4 1 3 3 1_Metric_Standard_190,0.0,9.610408163265307,RDT/4 1 3 3 1_Metric_Standard_190.wav,190,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_200,0.0,9.220476190476191,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_160,0.0,7.816462585034014,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/1 1 3.5 4.5 3.5_Nonmetric_Standard_170.wav,170,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Standard_180,0.0,9.760544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 2 4 2 2_Metric_Deviant_170,0.0,8.83047619047619,RDT/1 1 2 4 2 2_Metric_Deviant_170.wav,170,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_160,0.0,8.104489795918367,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,2 1 1 3 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/2 1 1 3 1 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1 1 2 3 1 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/1 1 2 3 1 4_Metric_Deviant_180.wav,180,0\r\ndefault,3 1 1 3 2 2_Metric_Deviant_190,0.0,9.61047619047619,RDT/3 1 1 3 2 2_Metric_Deviant_190.wav,190,0\r\ndefault,4 2 2 1 1 2_Metric_Standard_160,0.0,8.44047619047619,RDT/4 2 2 1 1 2_Metric_Standard_160.wav,160,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,2 1 1 2 2 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 2 2 4_Metric_Standard_180.wav,180,1\r\ndefault,2 2 3 1 1 3_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 3 1 1 3_Metric_Standard_200.wav,200,1\r\ndefault,4 2 2 1 1 1 1_Metric_Standard_190,0.0,9.610544217687075,RDT/4 2 2 1 1 1 1_Metric_Standard_190.wav,190,1\r\ndefault,1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_180,0.0,9.760544217687075,RDT/1 4.5 1 1 3.5 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,3 1 2 2 1 1 2_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 2 2 1 1 2_Metric_Deviant_180.wav,180,0\r\ndefault,1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/1 3.5 1 4.5 1 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_170,0.0,8.167278911564626,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,3 1 4 2 2_Metric_Deviant_180,0.0,9.220408163265306,RDT/3 1 4 2 2_Metric_Deviant_180.wav,180,0\r\ndefault,2 1 1 1 3 4_Metric_Standard_180,0.0,9.220476190476191,RDT/2 1 1 1 3 4_Metric_Standard_180.wav,180,1\r\ndefault,2 2 2 1 1 4_Metric_Standard_200,0.0,10.00047619047619,RDT/2 2 2 1 1 4_Metric_Standard_200.wav,200,1\r\ndefault,1 1 2 3 1 2 2_Metric_Deviant_160,0.0,8.440544217687075,RDT/1 1 2 3 1 2 2_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_200,0.0,9.580544217687075,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1 3.5 1.4 3.5 1.4 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,2 1 1 2 2 3 1_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 1 1 2 2 3 1_Metric_Deviant_160.wav,160,0\r\ndefault,4 2 2 1 1 2_Metric_Deviant_160,0.0,8.44047619047619,RDT/4 2 2 1 1 2_Metric_Deviant_160.wav,160,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_150,0.0,7.735510204081633,RDT/4.5 1 1 1 1.4 1.4 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_150,0.0,7.960408163265306,RDT/1.4 3.5 1 1 1.4 3.5_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 2 1 3 3 1_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 1 3 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,4 3 1 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/4 3 1 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 3 1 1 3_Metric_Standard_150.wav,150,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_150,0.0,8.725306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_200,0.0,9.220476190476191,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_180,0.0,9.220476190476191,RDT/1 1 2 3 1 4_Metric_Standard_180.wav,180,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,2 2 4 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/2 2 4 1 3_Metric_Standard_170.wav,170,1\r\ndefault,3 1 4 2 2_Metric_Standard_160,0.0,8.440408163265307,RDT/3 1 4 2 2_Metric_Standard_160.wav,160,1\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/3 1 2 1 1 1 3_Metric_Standard_190.wav,190,1\r\ndefault,4 3 1 2 2_Metric_Standard_160,0.0,8.440408163265307,RDT/4 3 1 2 2_Metric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 3 1 2 2_Metric_Standard_150.wav,150,1\r\ndefault,4 3 1 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/4 3 1 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_150,0.0,7.9603401360544215,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_150,0.0,8.050544217687074,RDT/1 1 2 2 1 1 4_Metric_Standard_150.wav,150,1\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_180,0.0,9.436462585034013,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 2 2 1 1 4_Metric_Deviant_180.wav,180,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_160,0.0,8.440544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 4 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/3 1 4 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190,0.0,8.869387755102041,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_200,0.0,10.600544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/4 1 1 1 1 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_150,0.0,8.050476190476191,RDT/2 2 1 3 3 1_Metric_Standard_150.wav,150,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_200.wav,200,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 4 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_180,0.0,9.220544217687074,RDT/1 1 1 1 4 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_190,0.0,9.61047619047619,RDT/3 1 2 2 1 3_Metric_Standard_190.wav,190,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_170,0.0,8.728299319727892,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_200,0.0,10.900408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_180,0.0,9.436462585034013,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_180.wav,180,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_170,0.0,8.83047619047619,RDT/1 1 2 4 2 2_Metric_Standard_170.wav,170,1\r\ndefault,2 2 4 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/2 2 4 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,4 1 1 2 3 1_Metric_Standard_170,0.0,8.83047619047619,RDT/4 1 1 2 3 1_Metric_Standard_170.wav,170,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_200,0.0,9.880408163265306,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_200.wav,200,1\r\ndefault,4 1 1 2 3 1_Metric_Deviant_180,0.0,9.220476190476191,RDT/4 1 1 2 3 1_Metric_Deviant_180.wav,180,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_190,0.0,9.83843537414966,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_190,0.0,9.610544217687075,RDT/3 1 2 1 1 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,2 1 1 1 3 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 1 3 4_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 3 1 1 3_Metric_Standard_190.wav,190,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_160,0.0,9.160408163265306,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_190,0.0,10.465306122448979,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_180.wav,180,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_170,0.0,9.034353741496599,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_170.wav,170,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_190,0.0,9.49625850340136,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_190.wav,190,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 2 1 1 4_Metric_Standard_190.wav,190,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_170,0.0,8.830544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_170.wav,170,1\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_190,0.0,9.610544217687075,RDT/1 1 2 3 1 2 2_Metric_Standard_190.wav,190,1\r\ndefault,4 3 1 2 2_Metric_Deviant_180,0.0,9.220408163265306,RDT/4 3 1 2 2_Metric_Deviant_180.wav,180,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_150,0.0,8.050544217687074,RDT/3 1 2 1 1 1 3_Metric_Standard_150.wav,150,1\r\ndefault,2 2 1 3 3 1_Metric_Standard_190,0.0,9.61047619047619,RDT/2 2 1 3 3 1_Metric_Standard_190.wav,190,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_170,0.0,9.034421768707483,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_160,0.0,8.3443537414966,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150,0.0,7.465510204081633,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,2 2 4 1 3_Metric_Deviant_160,0.0,8.440408163265307,RDT/2 2 4 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,3 1 4 2 2_Metric_Standard_200,0.0,10.000408163265305,RDT/3 1 4 2 2_Metric_Standard_200.wav,200,1\r\ndefault,3 1 2 2 1 3_Metric_Standard_150,0.0,8.050476190476191,RDT/3 1 2 2 1 3_Metric_Standard_150.wav,150,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_190,0.0,8.869319727891156,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_170,0.0,9.034353741496599,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4 3 1 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/4 3 1 1 3_Metric_Standard_200.wav,200,1\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_160,0.0,7.816394557823129,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_160.wav,160,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_150,0.0,8.050544217687074,RDT/3 1 2 1 1 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_160,0.0,8.3443537414966,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_150,0.0,8.23047619047619,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_160,0.0,8.920544217687075,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,3 1 4 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/3 1 4 1 3_Metric_Standard_200.wav,200,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_180,0.0,9.220544217687074,RDT/4 1 1 1 1 3 1_Metric_Standard_180.wav,180,1\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_200,0.0,10.000544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_200.wav,200,0\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_200,0.0,9.880408163265306,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 3 1 1 3_Metric_Deviant_200,0.0,10.000408163265305,RDT/4 3 1 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,4 3 1 2 2_Metric_Standard_200,0.0,10.000408163265305,RDT/4 3 1 2 2_Metric_Standard_200.wav,200,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_150,0.0,7.465442176870749,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 1 3 4_Metric_Deviant_150.wav,150,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_200.wav,200,0\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_160,0.0,9.160408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_160,0.0,8.632517006802722,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_190,0.0,9.610544217687075,RDT/4 1 1 1 1 3 1_Metric_Standard_190.wav,190,1\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4 1 1 2 3 1_Metric_Deviant_150,0.0,8.050476190476191,RDT/4 1 1 2 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_170,0.0,9.34047619047619,RDT/3.5 1 1 4.5 1 1 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/1 1.4 1.4 1 4.5 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_150.wav,150,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_160.wav,160,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_160,0.0,8.632448979591837,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_150,0.0,8.230408163265306,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_150.wav,150,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200,0.0,9.880476190476191,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,2 1 1 4 1 3_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 1 1 4 1 3_Metric_Deviant_150.wav,150,0\r\ndefault,3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_170,0.0,9.034421768707483,RDT/3.5 1 1 3.5 1 1.4 1_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_170,0.0,8.167278911564626,RDT/4.5 1 1.4 1.4 1 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/1 1 1 1 4 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,2 2 4 1 3_Metric_Standard_200,0.0,10.000408163265305,RDT/2 2 4 1 3_Metric_Standard_200.wav,200,1\r\ndefault,1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1.4 1.4 1 1.4 4.5 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,2 2 2 1 1 4_Metric_Deviant_150,0.0,8.050476190476191,RDT/2 2 2 1 1 4_Metric_Deviant_150.wav,150,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_160,0.0,8.632517006802722,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_150,0.0,8.230408163265306,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_150.wav,150,0\r\ndefault,1 3.5 1.4 4.5 1.4_Nonmetric_Standard_170,0.0,8.728231292517007,RDT/1 3.5 1.4 4.5 1.4_Nonmetric_Standard_170.wav,170,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_200,0.0,10.00047619047619,RDT/4 1 1 2 3 1_Metric_Standard_200.wav,200,1\r\ndefault,2 2 4 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/2 2 4 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_150,0.0,8.050544217687074,RDT/4 1 1 1 1 3 1_Metric_Deviant_150.wav,150,0\r\ndefault,2 2 1 3 3 1_Metric_Standard_180,0.0,9.220476190476191,RDT/2 2 1 3 3 1_Metric_Standard_180.wav,180,1\r\ndefault,4 3 1 2 2_Metric_Deviant_190,0.0,9.610408163265307,RDT/4 3 1 2 2_Metric_Deviant_190.wav,190,0\r\ndefault,1 1 2 3 1 2 2_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 3 1 2 2_Metric_Standard_180.wav,180,1\r\ndefault,4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_180,0.0,9.112380952380953,RDT/4.5 1 1.4 3.5 1.4_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 2 2 1 1 4_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 2 1 1 4_Metric_Standard_180.wav,180,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_160,0.0,8.440544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_150,0.0,8.050476190476191,RDT/1 1 2 3 1 4_Metric_Standard_150.wav,150,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_160,0.0,8.44047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_160.wav,160,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_190,0.0,9.211428571428572,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 2 3 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/1 1 2 3 1 1 3_Metric_Standard_180.wav,180,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_200,0.0,10.00047619047619,RDT/1 1 2 4 2 2_Metric_Standard_200.wav,200,1\r\ndefault,1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_180,0.0,8.842517006802721,RDT/1.4 1 4.5 1 1.4 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Standard_170,0.0,9.59530612244898,RDT/4.5 1 1 3.5 3.5_Nonmetric_Standard_170.wav,170,1\r\ndefault,4.5 1 1 3.5 3.5_Nonmetric_Deviant_180,0.0,10.030408163265307,RDT/4.5 1 1 3.5 3.5_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_200,0.0,9.880476190476191,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 2 1 1 1 1 4_Metric_Standard_200,0.0,10.000544217687075,RDT/2 2 1 1 1 1 4_Metric_Standard_200.wav,200,1\r\ndefault,1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_180,0.0,8.518435374149659,RDT/1.4 1 4.5 1.4 1.4 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,2 1 1 1 3 4_Metric_Deviant_180,0.0,9.220476190476191,RDT/2 1 1 1 3 4_Metric_Deviant_180.wav,180,0\r\ndefault,4 1 1 2 3 1_Metric_Deviant_190,0.0,9.61047619047619,RDT/4 1 1 2 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_180,0.0,9.436530612244898,RDT/1.4 3.5 3.5 1 1 1 1_Nonmetric_Standard_180.wav,180,1\r\ndefault,3 1 2 1 1 1 3_Metric_Deviant_180,0.0,9.220544217687074,RDT/3 1 2 1 1 1 3_Metric_Deviant_180.wav,180,0\r\ndefault,4 1 1 1 1 3 1_Metric_Standard_150,0.0,8.050544217687074,RDT/4 1 1 1 1 3 1_Metric_Standard_150.wav,150,1\r\ndefault,4 1 1 2 3 1_Metric_Standard_160,0.0,8.44047619047619,RDT/4 1 1 2 3 1_Metric_Standard_160.wav,160,1\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_200,0.0,10.240544217687075,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Standard_160.wav,160,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Standard_190.wav,190,1\r\ndefault,1 1 2 4 2 2_Metric_Standard_160,0.0,8.44047619047619,RDT/1 1 2 4 2 2_Metric_Standard_160.wav,160,1\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Standard_190,0.0,9.838367346938776,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Standard_190.wav,190,1\r\ndefault,3 1 2 2 1 3_Metric_Deviant_170,0.0,8.83047619047619,RDT/3 1 2 2 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,1 1 1 1 4 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/1 1 1 1 4 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,2 1 1 2 2 4_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 1 1 2 2 4_Metric_Deviant_200.wav,200,0\r\ndefault,4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_200,0.0,10.24047619047619,RDT/4.5 1.4 1 3.5 1 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,3 1 2 2 1 3_Metric_Standard_180,0.0,9.220476190476191,RDT/3 1 2 2 1 3_Metric_Standard_180.wav,180,1\r\ndefault,2 1 1 4 1 3_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 1 1 4 1 3_Metric_Deviant_190.wav,190,0\r\ndefault,1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_170,0.0,8.728299319727892,RDT/1 1.4 1 1.4 3.5 3.5_Nonmetric_Deviant_170.wav,170,0\r\ndefault,4 1 1 1 1 3 1_Metric_Deviant_190,0.0,9.610544217687075,RDT/4 1 1 1 1 3 1_Metric_Deviant_190.wav,190,0\r\ndefault,1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_190,0.0,9.838367346938776,RDT/1.4 1 4.5 3.5 1 1_Nonmetric_Deviant_190.wav,190,0\r\ndefault,2 2 2 1 1 4_Metric_Deviant_190,0.0,9.61047619047619,RDT/2 2 2 1 1 4_Metric_Deviant_190.wav,190,0\r\ndefault,2 2 1 1 1 1 4_Metric_Deviant_170,0.0,8.830544217687075,RDT/2 2 1 1 1 1 4_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/3 1 4 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180,0.0,8.518503401360544,RDT/1.4 1 1.4 3.5 1.4 1 1_Nonmetric_Deviant_180.wav,180,0\r\ndefault,1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_200,0.0,10.240544217687075,RDT/1 1 3.5 1.4 1 3.5 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_160,0.0,8.344421768707482,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Standard_160.wav,160,1\r\ndefault,1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_170,0.0,8.728231292517007,RDT/1.4 3.5 1.4 4.5 1_Nonmetric_Deviant_170.wav,170,0\r\ndefault,1 1 3.5 4.5 3.5_Nonmetric_Deviant_170,0.0,9.59530612244898,RDT/1 1 3.5 4.5 3.5_Nonmetric_Deviant_170.wav,170,0\r\ndefault,3 1 2 1 1 1 3_Metric_Standard_180,0.0,9.220544217687074,RDT/3 1 2 1 1 1 3_Metric_Standard_180.wav,180,1\r\ndefault,3.5 3.5 1 4.5 1_Nonmetric_Deviant_200,0.0,10.900408163265306,RDT/3.5 3.5 1 4.5 1_Nonmetric_Deviant_200.wav,200,0\r\ndefault,4 3 1 2 2_Metric_Deviant_150,0.0,8.050408163265306,RDT/4 3 1 2 2_Metric_Deviant_150.wav,150,0\r\ndefault,4 3 1 2 2_Metric_Standard_170,0.0,8.830408163265306,RDT/4 3 1 2 2_Metric_Standard_170.wav,170,1\r\ndefault,4 3 1 1 3_Metric_Deviant_170,0.0,8.830408163265306,RDT/4 3 1 1 3_Metric_Deviant_170.wav,170,0\r\ndefault,3 1 4 2 2_Metric_Standard_170,0.0,8.830408163265306,RDT/3 1 4 2 2_Metric_Standard_170.wav,170,1\r\ndefault,2 2 4 1 3_Metric_Standard_160,0.0,8.440408163265307,RDT/2 2 4 1 3_Metric_Standard_160.wav,160,1\r\ndefault,1 1 2 3 1 4_Metric_Standard_190,0.0,9.61047619047619,RDT/1 1 2 3 1 4_Metric_Standard_190.wav,190,1\r\ndefault,3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160,0.0,8.344421768707482,RDT/3.5 1.4 3.5 1.4 1 1_Nonmetric_Deviant_160.wav,160,0\r\ndefault,4 3 1 1 3_Metric_Standard_170,0.0,8.830408163265306,RDT/4 3 1 1 3_Metric_Standard_170.wav,170,1\r\ndefault,1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_160,0.0,8.632448979591837,RDT/1 1.4 4.5 1 1 3.5_Nonmetric_Deviant_160.wav,160,0\r\ndefault,3.5 1.4 1 4.5 1 1_Nonmetric_Standard_200,0.0,10.24047619047619,RDT/3.5 1.4 1 4.5 1 1_Nonmetric_Standard_200.wav,200,1\r\ndefault,2 2 3 1 1 3_Metric_Deviant_200,0.0,10.00047619047619,RDT/2 2 3 1 1 3_Metric_Deviant_200.wav,200,0\r\ndefault,1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_150,0.0,7.735510204081633,RDT/1 1 1 1.4 4.5 1 1.4_Nonmetric_Standard_150.wav,0,150,1" } }, { @@ -59,7 +59,7 @@ "fields": { "name": "BAT", "process_csv": false, - "csv": "default,1_tempo,0.0,15.856326530612245,BAT/1_tempo.wav,0,0,0\r\ndefault,2_on,0.0,11.546122448979592,BAT/2_on.wav,0,0,0\r\ndefault,2_phase,0.0,11.572244897959184,BAT/2_phase.wav,0,0,0\r\ndefault,2_tempo,0.0,11.572244897959184,BAT/2_tempo.wav,0,0,0\r\ndefault,3_on,0.0,13.453061224489796,BAT/3_on.wav,0,0,0\r\ndefault,3_phase,0.0,13.21795918367347,BAT/3_phase.wav,0,0,0\r\ndefault,3_tempo,0.0,13.322448979591837,BAT/3_tempo.wav,0,0,0\r\ndefault,4_tempo,0.0,10.553469387755102,BAT/4_tempo.wav,0,0,0\r\ndefault,5_tempo,0.0,12.434285714285714,BAT/5_tempo.wav,0,0,0\r\ndefault,6_on,0.0,14.08,BAT/6_on.wav,0,0,0\r\ndefault,6_phase,0.0,14.053877551020408,BAT/6_phase.wav,0,0,0\r\ndefault,6_tempo,0.0,14.08,BAT/6_tempo.wav,0,0,0\r\ndefault,7_on,0.0,15.124897959183674,BAT/7_on.wav,0,0,0\r\ndefault,7_tempo,0.0,15.124897959183674,BAT/7_tempo.wav,0,0,0\r\ndefault,8_phase,0.0,12.564897959183673,BAT/8_phase.wav,0,0,0\r\ndefault,8_tempo,0.0,12.564897959183673,BAT/8_tempo.wav,0,0,0\r\ndefault,9_phase,0.0,12.773877551020409,BAT/9_phase.wav,0,0,0\r\ndefault,ex1_on,0.0,12.538775510204081,BAT/ex1_on.wav,0,1,0\r\ndefault,ex2_tempo,0.0,13.871020408163265,BAT/ex2_tempo.wav,0,1,0\r\ndefault,ex3_phase,0.0,12.51265306122449,BAT/ex3_phase.wav,0,1,0" + "csv": "default,1_tempo,0.0,15.856326530612245,BAT/1_tempo.wav,0,0\r\ndefault,2_on,0.0,11.546122448979592,BAT/2_on.wav,0,0\r\ndefault,2_phase,0.0,11.572244897959184,BAT/2_phase.wav,0,0\r\ndefault,2_tempo,0.0,11.572244897959184,BAT/2_tempo.wav,0,0\r\ndefault,3_on,0.0,13.453061224489796,BAT/3_on.wav,0,0\r\ndefault,3_phase,0.0,13.21795918367347,BAT/3_phase.wav,0,0\r\ndefault,3_tempo,0.0,13.322448979591837,BAT/3_tempo.wav,0,0\r\ndefault,4_tempo,0.0,10.553469387755102,BAT/4_tempo.wav,0,0\r\ndefault,5_tempo,0.0,12.434285714285714,BAT/5_tempo.wav,0,0\r\ndefault,6_on,0.0,14.08,BAT/6_on.wav,0,0\r\ndefault,6_phase,0.0,14.053877551020408,BAT/6_phase.wav,0,0\r\ndefault,6_tempo,0.0,14.08,BAT/6_tempo.wav,0,0\r\ndefault,7_on,0.0,15.124897959183674,BAT/7_on.wav,0,0\r\ndefault,7_tempo,0.0,15.124897959183674,BAT/7_tempo.wav,0,0\r\ndefault,8_phase,0.0,12.564897959183673,BAT/8_phase.wav,0,0\r\ndefault,8_tempo,0.0,12.564897959183673,BAT/8_tempo.wav,0,0\r\ndefault,9_phase,0.0,12.773877551020409,BAT/9_phase.wav,0,0\r\ndefault,ex1_on,0.0,12.538775510204081,BAT/ex1_on.wav,1,0\r\ndefault,ex2_tempo,0.0,13.871020408163265,BAT/ex2_tempo.wav,1,0\r\ndefault,ex3_phase,0.0,12.51265306122449,BAT/ex3_phase.wav,0,1,0" } }, { @@ -68,7 +68,7 @@ "fields": { "name": "HBAT-BFIT", "process_csv": false, - "csv": "default,BFIT_500_F_20_01,0.0,7.314285714285714,BFIT/BFIT_500_F_20_01.wav,0,0,1\r\ndefault,BFIT_500_F_20_02,0.0,9.404081632653062,BFIT/BFIT_500_F_20_02.wav,0,0,2\r\ndefault,BFIT_500_F_20_03,0.0,10.475102040816326,BFIT/BFIT_500_F_20_03.wav,0,0,3\r\ndefault,BFIT_500_F_20_04,0.0,10.997551020408164,BFIT/BFIT_500_F_20_04.wav,0,0,4\r\ndefault,BFIT_500_F_20_05,0.0,11.258775510204082,BFIT/BFIT_500_F_20_05.wav,0,0,5\r\ndefault,BFIT_500_F_20_06,0.0,11.38938775510204,BFIT/BFIT_500_F_20_06.wav,0,0,6\r\ndefault,BFIT_500_F_20_07,0.0,11.441632653061225,BFIT/BFIT_500_F_20_07.wav,0,0,7\r\ndefault,BFIT_500_F_20_08,0.0,11.493877551020407,BFIT/BFIT_500_F_20_08.wav,0,0,8\r\ndefault,BFIT_500_F_20_09,0.0,11.52,BFIT/BFIT_500_F_20_09.wav,0,0,9\r\ndefault,BFIT_500_F_20_10,0.0,11.52,BFIT/BFIT_500_F_20_10.wav,0,0,10\r\ndefault,BFIT_500_F_20_11,0.0,11.52,BFIT/BFIT_500_F_20_11.wav,0,0,11\r\ndefault,BFIT_500_F_20_12,0.0,11.52,BFIT/BFIT_500_F_20_12.wav,0,0,12\r\ndefault,BFIT_500_F_20_13,0.0,11.52,BFIT/BFIT_500_F_20_13.wav,0,0,13\r\ndefault,BFIT_500_F_20_14,0.0,11.52,BFIT/BFIT_500_F_20_14.wav,0,0,14\r\ndefault,BFIT_500_F_20_15,0.0,11.52,BFIT/BFIT_500_F_20_15.wav,0,0,15\r\ndefault,BFIT_500_F_20_16,0.0,11.52,BFIT/BFIT_500_F_20_16.wav,0,0,16\r\ndefault,BFIT_500_S_20_01,0.0,15.725714285714286,BFIT/BFIT_500_S_20_01.wav,0,1,1\r\ndefault,BFIT_500_S_20_02,0.0,13.609795918367347,BFIT/BFIT_500_S_20_02.wav,0,1,2\r\ndefault,BFIT_500_S_20_03,0.0,12.591020408163265,BFIT/BFIT_500_S_20_03.wav,0,1,3\r\ndefault,BFIT_500_S_20_04,0.0,12.042448979591837,BFIT/BFIT_500_S_20_04.wav,0,1,4\r\ndefault,BFIT_500_S_20_05,0.0,11.781224489795918,BFIT/BFIT_500_S_20_05.wav,0,1,5\r\ndefault,BFIT_500_S_20_06,0.0,11.650612244897959,BFIT/BFIT_500_S_20_06.wav,0,1,6\r\ndefault,BFIT_500_S_20_07,0.0,11.572244897959184,BFIT/BFIT_500_S_20_07.wav,0,1,7\r\ndefault,BFIT_500_S_20_08,0.0,11.546122448979592,BFIT/BFIT_500_S_20_08.wav,0,1,8\r\ndefault,BFIT_500_S_20_09,0.0,11.546122448979592,BFIT/BFIT_500_S_20_09.wav,0,1,9\r\ndefault,BFIT_500_S_20_10,0.0,11.52,BFIT/BFIT_500_S_20_10.wav,0,1,10\r\ndefault,BFIT_500_S_20_11,0.0,11.52,BFIT/BFIT_500_S_20_11.wav,0,1,11\r\ndefault,BFIT_500_S_20_12,0.0,11.52,BFIT/BFIT_500_S_20_12.wav,0,1,12\r\ndefault,BFIT_500_S_20_13,0.0,11.52,BFIT/BFIT_500_S_20_13.wav,0,1,13\r\ndefault,BFIT_500_S_20_14,0.0,11.52,BFIT/BFIT_500_S_20_14.wav,0,1,14\r\ndefault,BFIT_500_S_20_15,0.0,11.52,BFIT/BFIT_500_S_20_15.wav,0,1,15\r\ndefault,BFIT_500_S_20_16,0.0,11.52,BFIT/BFIT_500_S_20_16.wav,0,1,16" + "csv": "default,BFIT_500_F_20_01,0.0,7.314285714285714,BFIT/BFIT_500_F_20_01.wav,0,1\r\ndefault,BFIT_500_F_20_02,0.0,9.404081632653062,BFIT/BFIT_500_F_20_02.wav,0,2\r\ndefault,BFIT_500_F_20_03,0.0,10.475102040816326,BFIT/BFIT_500_F_20_03.wav,0,3\r\ndefault,BFIT_500_F_20_04,0.0,10.997551020408164,BFIT/BFIT_500_F_20_04.wav,0,4\r\ndefault,BFIT_500_F_20_05,0.0,11.258775510204082,BFIT/BFIT_500_F_20_05.wav,0,5\r\ndefault,BFIT_500_F_20_06,0.0,11.38938775510204,BFIT/BFIT_500_F_20_06.wav,0,6\r\ndefault,BFIT_500_F_20_07,0.0,11.441632653061225,BFIT/BFIT_500_F_20_07.wav,0,7\r\ndefault,BFIT_500_F_20_08,0.0,11.493877551020407,BFIT/BFIT_500_F_20_08.wav,0,8\r\ndefault,BFIT_500_F_20_09,0.0,11.52,BFIT/BFIT_500_F_20_09.wav,0,9\r\ndefault,BFIT_500_F_20_10,0.0,11.52,BFIT/BFIT_500_F_20_10.wav,0,10\r\ndefault,BFIT_500_F_20_11,0.0,11.52,BFIT/BFIT_500_F_20_11.wav,0,11\r\ndefault,BFIT_500_F_20_12,0.0,11.52,BFIT/BFIT_500_F_20_12.wav,0,12\r\ndefault,BFIT_500_F_20_13,0.0,11.52,BFIT/BFIT_500_F_20_13.wav,0,13\r\ndefault,BFIT_500_F_20_14,0.0,11.52,BFIT/BFIT_500_F_20_14.wav,0,14\r\ndefault,BFIT_500_F_20_15,0.0,11.52,BFIT/BFIT_500_F_20_15.wav,0,15\r\ndefault,BFIT_500_F_20_16,0.0,11.52,BFIT/BFIT_500_F_20_16.wav,0,16\r\ndefault,BFIT_500_S_20_01,0.0,15.725714285714286,BFIT/BFIT_500_S_20_01.wav,1,1\r\ndefault,BFIT_500_S_20_02,0.0,13.609795918367347,BFIT/BFIT_500_S_20_02.wav,1,2\r\ndefault,BFIT_500_S_20_03,0.0,12.591020408163265,BFIT/BFIT_500_S_20_03.wav,1,3\r\ndefault,BFIT_500_S_20_04,0.0,12.042448979591837,BFIT/BFIT_500_S_20_04.wav,1,4\r\ndefault,BFIT_500_S_20_05,0.0,11.781224489795918,BFIT/BFIT_500_S_20_05.wav,1,5\r\ndefault,BFIT_500_S_20_06,0.0,11.650612244897959,BFIT/BFIT_500_S_20_06.wav,1,6\r\ndefault,BFIT_500_S_20_07,0.0,11.572244897959184,BFIT/BFIT_500_S_20_07.wav,1,7\r\ndefault,BFIT_500_S_20_08,0.0,11.546122448979592,BFIT/BFIT_500_S_20_08.wav,1,8\r\ndefault,BFIT_500_S_20_09,0.0,11.546122448979592,BFIT/BFIT_500_S_20_09.wav,1,9\r\ndefault,BFIT_500_S_20_10,0.0,11.52,BFIT/BFIT_500_S_20_10.wav,1,10\r\ndefault,BFIT_500_S_20_11,0.0,11.52,BFIT/BFIT_500_S_20_11.wav,1,11\r\ndefault,BFIT_500_S_20_12,0.0,11.52,BFIT/BFIT_500_S_20_12.wav,1,12\r\ndefault,BFIT_500_S_20_13,0.0,11.52,BFIT/BFIT_500_S_20_13.wav,1,13\r\ndefault,BFIT_500_S_20_14,0.0,11.52,BFIT/BFIT_500_S_20_14.wav,1,14\r\ndefault,BFIT_500_S_20_15,0.0,11.52,BFIT/BFIT_500_S_20_15.wav,1,15\r\ndefault,BFIT_500_S_20_16,0.0,11.52,BFIT/BFIT_500_S_20_16.wav,0,1,16" } }, { @@ -77,7 +77,7 @@ "fields": { "name": "HBAT-BIT", "process_csv": false, - "csv": "default,BIT_500_F_20_01,0.0,7.418775510204082,BIT/BIT_500_F_20_01.wav,0,0,1\r\ndefault,BIT_500_F_20_02,0.0,9.404081632653062,BIT/BIT_500_F_20_02.wav,0,0,2\r\ndefault,BIT_500_F_20_03,0.0,10.475102040816326,BIT/BIT_500_F_20_03.wav,0,0,3\r\ndefault,BIT_500_F_20_04,0.0,10.997551020408164,BIT/BIT_500_F_20_04.wav,0,0,4\r\ndefault,BIT_500_F_20_05,0.0,11.258775510204082,BIT/BIT_500_F_20_05.wav,0,0,5\r\ndefault,BIT_500_F_20_06,0.0,11.38938775510204,BIT/BIT_500_F_20_06.wav,0,0,6\r\ndefault,BIT_500_F_20_07,0.0,11.441632653061225,BIT/BIT_500_F_20_07.wav,0,0,7\r\ndefault,BIT_500_F_20_08,0.0,11.493877551020407,BIT/BIT_500_F_20_08.wav,0,0,8\r\ndefault,BIT_500_F_20_09,0.0,11.52,BIT/BIT_500_F_20_09.wav,0,0,9\r\ndefault,BIT_500_F_20_10,0.0,11.52,BIT/BIT_500_F_20_10.wav,0,0,10\r\ndefault,BIT_500_F_20_11,0.0,11.52,BIT/BIT_500_F_20_11.wav,0,0,11\r\ndefault,BIT_500_F_20_12,0.0,11.52,BIT/BIT_500_F_20_12.wav,0,0,12\r\ndefault,BIT_500_F_20_13,0.0,11.52,BIT/BIT_500_F_20_13.wav,0,0,13\r\ndefault,BIT_500_F_20_14,0.0,11.52,BIT/BIT_500_F_20_14.wav,0,0,14\r\ndefault,BIT_500_F_20_15,0.0,11.52,BIT/BIT_500_F_20_15.wav,0,0,15\r\ndefault,BIT_500_F_20_16,0.0,11.52,BIT/BIT_500_F_20_16.wav,0,0,16\r\ndefault,BIT_500_S_20_01,0.0,15.725714285714286,BIT/BIT_500_S_20_01.wav,0,1,1\r\ndefault,BIT_500_S_20_02,0.0,13.609795918367347,BIT/BIT_500_S_20_02.wav,0,1,2\r\ndefault,BIT_500_S_20_03,0.0,12.591020408163265,BIT/BIT_500_S_20_03.wav,0,1,3\r\ndefault,BIT_500_S_20_04,0.0,12.042448979591837,BIT/BIT_500_S_20_04.wav,0,1,4\r\ndefault,BIT_500_S_20_05,0.0,11.781224489795918,BIT/BIT_500_S_20_05.wav,0,1,5\r\ndefault,BIT_500_S_20_06,0.0,11.650612244897959,BIT/BIT_500_S_20_06.wav,0,1,6\r\ndefault,BIT_500_S_20_07,0.0,11.572244897959184,BIT/BIT_500_S_20_07.wav,0,1,7\r\ndefault,BIT_500_S_20_08,0.0,11.546122448979592,BIT/BIT_500_S_20_08.wav,0,1,8\r\ndefault,BIT_500_S_20_09,0.0,11.546122448979592,BIT/BIT_500_S_20_09.wav,0,1,9\r\ndefault,BIT_500_S_20_10,0.0,11.52,BIT/BIT_500_S_20_10.wav,0,1,10\r\ndefault,BIT_500_S_20_11,0.0,11.52,BIT/BIT_500_S_20_11.wav,0,1,11\r\ndefault,BIT_500_S_20_12,0.0,11.52,BIT/BIT_500_S_20_12.wav,0,1,12\r\ndefault,BIT_500_S_20_13,0.0,11.52,BIT/BIT_500_S_20_13.wav,0,1,13\r\ndefault,BIT_500_S_20_14,0.0,11.52,BIT/BIT_500_S_20_14.wav,0,1,14\r\ndefault,BIT_500_S_20_15,0.0,11.52,BIT/BIT_500_S_20_15.wav,0,1,15\r\ndefault,BIT_500_S_20_16,0.0,11.52,BIT/BIT_500_S_20_16.wav,0,1,16" + "csv": "default,BIT_500_F_20_01,0.0,7.418775510204082,BIT/BIT_500_F_20_01.wav,0,1\r\ndefault,BIT_500_F_20_02,0.0,9.404081632653062,BIT/BIT_500_F_20_02.wav,0,2\r\ndefault,BIT_500_F_20_03,0.0,10.475102040816326,BIT/BIT_500_F_20_03.wav,0,3\r\ndefault,BIT_500_F_20_04,0.0,10.997551020408164,BIT/BIT_500_F_20_04.wav,0,4\r\ndefault,BIT_500_F_20_05,0.0,11.258775510204082,BIT/BIT_500_F_20_05.wav,0,5\r\ndefault,BIT_500_F_20_06,0.0,11.38938775510204,BIT/BIT_500_F_20_06.wav,0,6\r\ndefault,BIT_500_F_20_07,0.0,11.441632653061225,BIT/BIT_500_F_20_07.wav,0,7\r\ndefault,BIT_500_F_20_08,0.0,11.493877551020407,BIT/BIT_500_F_20_08.wav,0,8\r\ndefault,BIT_500_F_20_09,0.0,11.52,BIT/BIT_500_F_20_09.wav,0,9\r\ndefault,BIT_500_F_20_10,0.0,11.52,BIT/BIT_500_F_20_10.wav,0,10\r\ndefault,BIT_500_F_20_11,0.0,11.52,BIT/BIT_500_F_20_11.wav,0,11\r\ndefault,BIT_500_F_20_12,0.0,11.52,BIT/BIT_500_F_20_12.wav,0,12\r\ndefault,BIT_500_F_20_13,0.0,11.52,BIT/BIT_500_F_20_13.wav,0,13\r\ndefault,BIT_500_F_20_14,0.0,11.52,BIT/BIT_500_F_20_14.wav,0,14\r\ndefault,BIT_500_F_20_15,0.0,11.52,BIT/BIT_500_F_20_15.wav,0,15\r\ndefault,BIT_500_F_20_16,0.0,11.52,BIT/BIT_500_F_20_16.wav,0,16\r\ndefault,BIT_500_S_20_01,0.0,15.725714285714286,BIT/BIT_500_S_20_01.wav,1,1\r\ndefault,BIT_500_S_20_02,0.0,13.609795918367347,BIT/BIT_500_S_20_02.wav,1,2\r\ndefault,BIT_500_S_20_03,0.0,12.591020408163265,BIT/BIT_500_S_20_03.wav,1,3\r\ndefault,BIT_500_S_20_04,0.0,12.042448979591837,BIT/BIT_500_S_20_04.wav,1,4\r\ndefault,BIT_500_S_20_05,0.0,11.781224489795918,BIT/BIT_500_S_20_05.wav,1,5\r\ndefault,BIT_500_S_20_06,0.0,11.650612244897959,BIT/BIT_500_S_20_06.wav,1,6\r\ndefault,BIT_500_S_20_07,0.0,11.572244897959184,BIT/BIT_500_S_20_07.wav,1,7\r\ndefault,BIT_500_S_20_08,0.0,11.546122448979592,BIT/BIT_500_S_20_08.wav,1,8\r\ndefault,BIT_500_S_20_09,0.0,11.546122448979592,BIT/BIT_500_S_20_09.wav,1,9\r\ndefault,BIT_500_S_20_10,0.0,11.52,BIT/BIT_500_S_20_10.wav,1,10\r\ndefault,BIT_500_S_20_11,0.0,11.52,BIT/BIT_500_S_20_11.wav,1,11\r\ndefault,BIT_500_S_20_12,0.0,11.52,BIT/BIT_500_S_20_12.wav,1,12\r\ndefault,BIT_500_S_20_13,0.0,11.52,BIT/BIT_500_S_20_13.wav,1,13\r\ndefault,BIT_500_S_20_14,0.0,11.52,BIT/BIT_500_S_20_14.wav,1,14\r\ndefault,BIT_500_S_20_15,0.0,11.52,BIT/BIT_500_S_20_15.wav,1,15\r\ndefault,BIT_500_S_20_16,0.0,11.52,BIT/BIT_500_S_20_16.wav,0,1,16" } }, { @@ -86,7 +86,7 @@ "fields": { "name": "HBAT-BST", "process_csv": false, - "csv": "default,BST_500_D_20_01,0.0,11.493877551020407,BST/BST_500_D_20_01.wav,0,1,1\r\ndefault,BST_500_D_20_02,0.0,11.52,BST/BST_500_D_20_02.wav,0,1,2\r\ndefault,BST_500_D_20_03,0.0,11.52,BST/BST_500_D_20_03.wav,0,1,3\r\ndefault,BST_500_D_20_04,0.0,11.52,BST/BST_500_D_20_04.wav,0,1,4\r\ndefault,BST_500_D_20_05,0.0,11.52,BST/BST_500_D_20_05.wav,0,1,5\r\ndefault,BST_500_D_20_06,0.0,11.52,BST/BST_500_D_20_06.wav,0,1,6\r\ndefault,BST_500_D_20_07,0.0,11.52,BST/BST_500_D_20_07.wav,0,1,7\r\ndefault,BST_500_D_20_08,0.0,11.52,BST/BST_500_D_20_08.wav,0,1,8\r\ndefault,BST_500_D_20_09,0.0,11.52,BST/BST_500_D_20_09.wav,0,1,9\r\ndefault,BST_500_D_20_10,0.0,11.52,BST/BST_500_D_20_10.wav,0,1,10\r\ndefault,BST_500_D_20_11,0.0,11.52,BST/BST_500_D_20_11.wav,0,1,11\r\ndefault,BST_500_D_20_12,0.0,11.52,BST/BST_500_D_20_12.wav,0,1,12\r\ndefault,BST_500_D_20_13,0.0,11.52,BST/BST_500_D_20_13.wav,0,1,13\r\ndefault,BST_500_D_20_14,0.0,11.52,BST/BST_500_D_20_14.wav,0,1,14\r\ndefault,BST_500_D_20_15,0.0,11.52,BST/BST_500_D_20_15.wav,0,1,15\r\ndefault,BST_500_D_20_16,0.0,11.52,BST/BST_500_D_20_16.wav,0,1,16\r\ndefault,BST_500_T_20_01,0.0,11.52,BST/BST_500_T_20_01.wav,0,0,1\r\ndefault,BST_500_T_20_02,0.0,11.52,BST/BST_500_T_20_02.wav,0,0,2\r\ndefault,BST_500_T_20_03,0.0,11.52,BST/BST_500_T_20_03.wav,0,0,3\r\ndefault,BST_500_T_20_04,0.0,11.52,BST/BST_500_T_20_04.wav,0,0,4\r\ndefault,BST_500_T_20_05,0.0,11.52,BST/BST_500_T_20_05.wav,0,0,5\r\ndefault,BST_500_T_20_06,0.0,11.52,BST/BST_500_T_20_06.wav,0,0,6\r\ndefault,BST_500_T_20_07,0.0,11.52,BST/BST_500_T_20_07.wav,0,0,7\r\ndefault,BST_500_T_20_08,0.0,11.52,BST/BST_500_T_20_08.wav,0,0,8\r\ndefault,BST_500_T_20_09,0.0,11.52,BST/BST_500_T_20_09.wav,0,0,9\r\ndefault,BST_500_T_20_10,0.0,11.52,BST/BST_500_T_20_10.wav,0,0,10\r\ndefault,BST_500_T_20_11,0.0,11.52,BST/BST_500_T_20_11.wav,0,0,11\r\ndefault,BST_500_T_20_12,0.0,11.52,BST/BST_500_T_20_12.wav,0,0,12\r\ndefault,BST_500_T_20_13,0.0,11.52,BST/BST_500_T_20_13.wav,0,0,13\r\ndefault,BST_500_T_20_14,0.0,11.52,BST/BST_500_T_20_14.wav,0,0,14\r\ndefault,BST_500_T_20_15,0.0,11.52,BST/BST_500_T_20_15.wav,0,0,15\r\ndefault,BST_500_T_20_16,0.0,11.52,BST/BST_500_T_20_16.wav,0,0,16" + "csv": "default,BST_500_D_20_01,0.0,11.493877551020407,BST/BST_500_D_20_01.wav,1,1\r\ndefault,BST_500_D_20_02,0.0,11.52,BST/BST_500_D_20_02.wav,1,2\r\ndefault,BST_500_D_20_03,0.0,11.52,BST/BST_500_D_20_03.wav,1,3\r\ndefault,BST_500_D_20_04,0.0,11.52,BST/BST_500_D_20_04.wav,1,4\r\ndefault,BST_500_D_20_05,0.0,11.52,BST/BST_500_D_20_05.wav,1,5\r\ndefault,BST_500_D_20_06,0.0,11.52,BST/BST_500_D_20_06.wav,1,6\r\ndefault,BST_500_D_20_07,0.0,11.52,BST/BST_500_D_20_07.wav,1,7\r\ndefault,BST_500_D_20_08,0.0,11.52,BST/BST_500_D_20_08.wav,1,8\r\ndefault,BST_500_D_20_09,0.0,11.52,BST/BST_500_D_20_09.wav,1,9\r\ndefault,BST_500_D_20_10,0.0,11.52,BST/BST_500_D_20_10.wav,1,10\r\ndefault,BST_500_D_20_11,0.0,11.52,BST/BST_500_D_20_11.wav,1,11\r\ndefault,BST_500_D_20_12,0.0,11.52,BST/BST_500_D_20_12.wav,1,12\r\ndefault,BST_500_D_20_13,0.0,11.52,BST/BST_500_D_20_13.wav,1,13\r\ndefault,BST_500_D_20_14,0.0,11.52,BST/BST_500_D_20_14.wav,1,14\r\ndefault,BST_500_D_20_15,0.0,11.52,BST/BST_500_D_20_15.wav,1,15\r\ndefault,BST_500_D_20_16,0.0,11.52,BST/BST_500_D_20_16.wav,1,16\r\ndefault,BST_500_T_20_01,0.0,11.52,BST/BST_500_T_20_01.wav,0,1\r\ndefault,BST_500_T_20_02,0.0,11.52,BST/BST_500_T_20_02.wav,0,2\r\ndefault,BST_500_T_20_03,0.0,11.52,BST/BST_500_T_20_03.wav,0,3\r\ndefault,BST_500_T_20_04,0.0,11.52,BST/BST_500_T_20_04.wav,0,4\r\ndefault,BST_500_T_20_05,0.0,11.52,BST/BST_500_T_20_05.wav,0,5\r\ndefault,BST_500_T_20_06,0.0,11.52,BST/BST_500_T_20_06.wav,0,6\r\ndefault,BST_500_T_20_07,0.0,11.52,BST/BST_500_T_20_07.wav,0,7\r\ndefault,BST_500_T_20_08,0.0,11.52,BST/BST_500_T_20_08.wav,0,8\r\ndefault,BST_500_T_20_09,0.0,11.52,BST/BST_500_T_20_09.wav,0,9\r\ndefault,BST_500_T_20_10,0.0,11.52,BST/BST_500_T_20_10.wav,0,10\r\ndefault,BST_500_T_20_11,0.0,11.52,BST/BST_500_T_20_11.wav,0,11\r\ndefault,BST_500_T_20_12,0.0,11.52,BST/BST_500_T_20_12.wav,0,12\r\ndefault,BST_500_T_20_13,0.0,11.52,BST/BST_500_T_20_13.wav,0,13\r\ndefault,BST_500_T_20_14,0.0,11.52,BST/BST_500_T_20_14.wav,0,14\r\ndefault,BST_500_T_20_15,0.0,11.52,BST/BST_500_T_20_15.wav,0,15\r\ndefault,BST_500_T_20_16,0.0,11.52,BST/BST_500_T_20_16.wav,0,0,16" } }, { @@ -104,7 +104,7 @@ "fields": { "name": "Categorization", "process_csv": false, - "csv": "P1 Training A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,C0T1A,0.0,1.25,CAT/C0T1A.wav,0,1A,CROSSED\r\nP1 Training B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,C0T1B,0.0,1.25,CAT/C0T1B.wav,0,1B,CROSSED\r\nP2 Training A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,C0T2A,0.0,1.25,CAT/C0T2A.wav,0,2A,CROSSED\r\nP2 Training B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,C0T2B,0.0,1.25,CAT/C0T2B.wav,0,2B,CROSSED\r\nP1 Vocoded A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,C1VnP1A,0.0,1.25,CAT/C1VnP1A.wav,0,1A,CROSSED\r\nP1 Vocoded B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,C1VnP1B,0.0,1.25,CAT/C1VnP1B.wav,0,1B,CROSSED\r\nP2 Vocoded A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,C1VnP2A,0.0,1.25,CAT/C1VnP2A.wav,0,2A,CROSSED\r\nP2 Vocoded B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,C1VnP2B,0.0,1.25,CAT/C1VnP2B.wav,0,2B,CROSSED\r\nP1 No-Formant A-430Hz-360Hz-290Hz-220Hz-150Hz.wav,C2PnF1A,0.0,1.25,CAT/C2PnF1A.wav,0,1A,CROSSED\r\nP1 No-Formant B-150Hz-220Hz-290Hz-360Hz-430Hz.wav,C2PnF1B,0.0,1.25,CAT/C2PnF1B.wav,0,1B,CROSSED\r\nP2 No-Formant A-405Hz-330Hz-255Hz-180Hz-105Hz.wav,C2PnF2A,0.0,1.25,CAT/C2PnF2A.wav,0,2A,CROSSED\r\nP2 No-Formant B-105Hz-180Hz-255Hz-330Hz-405Hz.wav,C2PnF2B,0.0,1.25,CAT/C2PnF2B.wav,0,2B,CROSSED\r\nP1 F0=290Hz A-290Hz(2.6k-3.1k-3.6k-4.1k-4.6k).wav,C3FcP1A,0.0,1.25,CAT/C3FcP1A.wav,0,1A,CROSSED\r\nP1 F0=290Hz B-290Hz(4.6k-4.1k-3.6k-3.1k-2.6k).wav,C3FcP1B,0.0,1.25,CAT/C3FcP1B.wav,0,1B,CROSSED\r\nP2 F0=255Hz A-255Hz(2.1k-2.7k-3.3k-3.9k-4.5k).wav,C3FcP2A,0.0,1.25,CAT/C3FcP2A.wav,0,2A,CROSSED\r\nP2 F0=255Hz B-255Hz(4.5k-3.9k-3.3k-2.7k-2.1k).wav,C3FcP2B,0.0,1.25,CAT/C3FcP2B.wav,0,2B,CROSSED\r\nP1 Formant3.6k A-430Hz(3.6k)-360Hz(3.6k)-290Hz(3.6k)-220Hz(3.6k)-150Hz(3.6k).wav,C4PcF1A,0.0,1.25,CAT/C4PcF1A.wav,0,1A,CROSSED\r\nP1 Formant3.6k B-150Hz(3.6k)-220Hz(3.6k)-290Hz(3.6k)-360Hz(3.6k)-430Hz(3.6k).wav,C4PcF1B,0.0,1.25,CAT/C4PcF1B.wav,0,1B,CROSSED\r\nP2 Formant3.3k A-405Hz(3.3k)-330Hz(3.3k)-255Hz(3.3k)-180Hz(3.3k)-105Hz(3.3k).wav,C4PcF2A,0.0,1.25,CAT/C4PcF2A.wav,0,2A,CROSSED\r\nP2 Formant3.3k B-105Hz(3.3k)-180Hz(3.3k)-255Hz(3.3k)-330Hz(3.3k)-405Hz(3.3k).wav,C4PcF2B,0.0,1.25,CAT/C4PcF2B.wav,0,2B,CROSSED\r\nP1 Formants = Pitches A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,C5P=F1A,0.0,1.25,CAT/C5P=F1A.wav,0,1A,CROSSED\r\nP1 Formants = Pitches B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,C5P=F1B,0.0,1.25,CAT/C5P=F1B.wav,0,1B,CROSSED\r\nP2 Formants = Pitches A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,C5P=F2A,0.0,1.25,CAT/C5P=F2A.wav,0,2A,CROSSED\r\nP2 Formants = Pitches B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,C5P=F2B,0.0,1.25,CAT/C5P=F2B.wav,0,2B,CROSSED\r\nP1 Training A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,S0T1A,0.0,1.25,CAT/S0T1A.wav,0,1A,SAME\r\nP1 Training B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,S0T1B,0.0,1.25,CAT/S0T1B.wav,0,1B,SAME\r\nP2 Training A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,S0T2A,0.0,1.25,CAT/S0T2A.wav,0,2A,SAME\r\nP2 Training B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,S0T2B,0.0,1.25,CAT/S0T2B.wav,0,2B,SAME\r\nP1 Vocoded A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,S1VnP1A,0.0,1.25,CAT/S1VnP1A.wav,0,1A,SAME\r\nP1 Vocoded B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,S1VnP1B,0.0,1.25,CAT/S1VnP1B.wav,0,1B,SAME\r\nP2 Vocoded A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,S1VnP2A,0.0,1.25,CAT/S1VnP2A.wav,0,2A,SAME\r\nP2 Vocoded B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,S1VnP2B,0.0,1.25,CAT/S1VnP2B.wav,0,2B,SAME\r\nP1 No-Formant A-150Hz-220Hz-290Hz-360Hz-430Hz.wav,S2PnF1A,0.0,1.25,CAT/S2PnF1A.wav,0,1A,SAME\r\nP1 No-Formant B-430Hz-360Hz-290Hz-220Hz-150Hz.wav,S2PnF1B,0.0,1.25,CAT/S2PnF1B.wav,0,1B,SAME\r\nP2 No-Formant A-105Hz-180Hz-255Hz-330Hz-405Hz.wav,S2PnF2A,0.0,1.25,CAT/S2PnF2A.wav,0,2A,SAME\r\nP2 No-Formant B-405Hz-330Hz-255Hz-180Hz-105Hz.wav,S2PnF2B,0.0,1.25,CAT/S2PnF2B.wav,0,2B,SAME\r\nP1 F0=290Hz A-290Hz(2.6k-3.1k-3.6k-4.1k-4.6k).wav,S3FcP1A,0.0,1.25,CAT/S3FcP1A.wav,0,1A,SAME\r\nP1 F0=290Hz B-290Hz(4.6k-4.1k-3.6k-3.1k-2.6k).wav,S3FcP1B,0.0,1.25,CAT/S3FcP1B.wav,0,1B,SAME\r\nP2 F0=255Hz A-255Hz(2.1k-2.7k-3.3k-3.9k-4.5k).wav,S3FcP2A,0.0,1.25,CAT/S3FcP2A.wav,0,2A,SAME\r\nP2 F0=255Hz B-255Hz(4.5k-3.9k-3.3k-2.7k-2.1k).wav,S3FcP2B,0.0,1.25,CAT/S3FcP2B.wav,0,2B,SAME\r\nP1 Formant3.6k A-150Hz(3.6k)-220Hz(3.6k)-290Hz(3.6k)-360Hz(3.6k)-430Hz(3.6k).wav,S4PcF1A,0.0,1.25,CAT/S4PcF1A.wav,0,1A,SAME\r\nP1 Formant3.6k B-430Hz(3.6k)-360Hz(3.6k)-290Hz(3.6k)-220Hz(3.6k)-150Hz(3.6k).wav,S4PcF1B,0.0,1.25,CAT/S4PcF1B.wav,0,1B,SAME\r\nP2 Formant3.3k A-105Hz(3.3k)-180Hz(3.3k)-255Hz(3.3k)-330Hz(3.3k)-405Hz(3.3k).wav,S4PcF2A,0.0,1.25,CAT/S4PcF2A.wav,0,2A,SAME\r\nP2 Formant3.3k B-405Hz(3.3k)-330Hz(3.3k)-255Hz(3.3k)-180Hz(3.3k)-105Hz(3.3k).wav,S4PcF2B,0.0,1.25,CAT/S4PcF2B.wav,0,2B,SAME\r\nP1 Formants x Pitches A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,S5PxF1A,0.0,1.25,CAT/S5PxF1A.wav,0,1A,SAME\r\nP1 Formants x Pitches B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,S5PxF1B,0.0,1.25,CAT/S5PxF1B.wav,0,1B,SAME\r\nP2 Formants x Pitches A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,S5PxF2A,0.0,1.25,CAT/S5PxF2A.wav,0,2A,SAME\r\nP2 Formants x Pitches B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,S5PxF2B,0.0,1.25,CAT/S5PxF2B.wav,0,2B,SAME" + "csv": "P1 Training A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,C0T1A,0.0,1.25,CAT/C0T1A.wav,1A,CROSSED\r\nP1 Training B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,C0T1B,0.0,1.25,CAT/C0T1B.wav,1B,CROSSED\r\nP2 Training A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,C0T2A,0.0,1.25,CAT/C0T2A.wav,2A,CROSSED\r\nP2 Training B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,C0T2B,0.0,1.25,CAT/C0T2B.wav,2B,CROSSED\r\nP1 Vocoded A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,C1VnP1A,0.0,1.25,CAT/C1VnP1A.wav,1A,CROSSED\r\nP1 Vocoded B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,C1VnP1B,0.0,1.25,CAT/C1VnP1B.wav,1B,CROSSED\r\nP2 Vocoded A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,C1VnP2A,0.0,1.25,CAT/C1VnP2A.wav,2A,CROSSED\r\nP2 Vocoded B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,C1VnP2B,0.0,1.25,CAT/C1VnP2B.wav,2B,CROSSED\r\nP1 No-Formant A-430Hz-360Hz-290Hz-220Hz-150Hz.wav,C2PnF1A,0.0,1.25,CAT/C2PnF1A.wav,1A,CROSSED\r\nP1 No-Formant B-150Hz-220Hz-290Hz-360Hz-430Hz.wav,C2PnF1B,0.0,1.25,CAT/C2PnF1B.wav,1B,CROSSED\r\nP2 No-Formant A-405Hz-330Hz-255Hz-180Hz-105Hz.wav,C2PnF2A,0.0,1.25,CAT/C2PnF2A.wav,2A,CROSSED\r\nP2 No-Formant B-105Hz-180Hz-255Hz-330Hz-405Hz.wav,C2PnF2B,0.0,1.25,CAT/C2PnF2B.wav,2B,CROSSED\r\nP1 F0=290Hz A-290Hz(2.6k-3.1k-3.6k-4.1k-4.6k).wav,C3FcP1A,0.0,1.25,CAT/C3FcP1A.wav,1A,CROSSED\r\nP1 F0=290Hz B-290Hz(4.6k-4.1k-3.6k-3.1k-2.6k).wav,C3FcP1B,0.0,1.25,CAT/C3FcP1B.wav,1B,CROSSED\r\nP2 F0=255Hz A-255Hz(2.1k-2.7k-3.3k-3.9k-4.5k).wav,C3FcP2A,0.0,1.25,CAT/C3FcP2A.wav,2A,CROSSED\r\nP2 F0=255Hz B-255Hz(4.5k-3.9k-3.3k-2.7k-2.1k).wav,C3FcP2B,0.0,1.25,CAT/C3FcP2B.wav,2B,CROSSED\r\nP1 Formant3.6k A-430Hz(3.6k)-360Hz(3.6k)-290Hz(3.6k)-220Hz(3.6k)-150Hz(3.6k).wav,C4PcF1A,0.0,1.25,CAT/C4PcF1A.wav,1A,CROSSED\r\nP1 Formant3.6k B-150Hz(3.6k)-220Hz(3.6k)-290Hz(3.6k)-360Hz(3.6k)-430Hz(3.6k).wav,C4PcF1B,0.0,1.25,CAT/C4PcF1B.wav,1B,CROSSED\r\nP2 Formant3.3k A-405Hz(3.3k)-330Hz(3.3k)-255Hz(3.3k)-180Hz(3.3k)-105Hz(3.3k).wav,C4PcF2A,0.0,1.25,CAT/C4PcF2A.wav,2A,CROSSED\r\nP2 Formant3.3k B-105Hz(3.3k)-180Hz(3.3k)-255Hz(3.3k)-330Hz(3.3k)-405Hz(3.3k).wav,C4PcF2B,0.0,1.25,CAT/C4PcF2B.wav,2B,CROSSED\r\nP1 Formants = Pitches A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,C5P=F1A,0.0,1.25,CAT/C5P=F1A.wav,1A,CROSSED\r\nP1 Formants = Pitches B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,C5P=F1B,0.0,1.25,CAT/C5P=F1B.wav,1B,CROSSED\r\nP2 Formants = Pitches A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,C5P=F2A,0.0,1.25,CAT/C5P=F2A.wav,2A,CROSSED\r\nP2 Formants = Pitches B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,C5P=F2B,0.0,1.25,CAT/C5P=F2B.wav,2B,CROSSED\r\nP1 Training A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,S0T1A,0.0,1.25,CAT/S0T1A.wav,1A,SAME\r\nP1 Training B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,S0T1B,0.0,1.25,CAT/S0T1B.wav,1B,SAME\r\nP2 Training A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,S0T2A,0.0,1.25,CAT/S0T2A.wav,2A,SAME\r\nP2 Training B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,S0T2B,0.0,1.25,CAT/S0T2B.wav,2B,SAME\r\nP1 Vocoded A-150Hz(2.6k)-220Hz(3.1k)-290Hz(3.6k)-360Hz(4.1k)-430Hz(4.6k).wav,S1VnP1A,0.0,1.25,CAT/S1VnP1A.wav,1A,SAME\r\nP1 Vocoded B-430Hz(4.6k)-360Hz(4.1k)-290Hz(3.6k)-220Hz(3.1k)-150Hz(2.6k).wav,S1VnP1B,0.0,1.25,CAT/S1VnP1B.wav,1B,SAME\r\nP2 Vocoded A-105Hz(2.1k)-180Hz(2.7k)-255Hz(3.3k)-330Hz(3.9k)-405Hz(4.5k).wav,S1VnP2A,0.0,1.25,CAT/S1VnP2A.wav,2A,SAME\r\nP2 Vocoded B-405Hz(4.5k)-330Hz(3.9k)-255Hz(3.3k)-180Hz(2.7k)-105Hz(2.1k).wav,S1VnP2B,0.0,1.25,CAT/S1VnP2B.wav,2B,SAME\r\nP1 No-Formant A-150Hz-220Hz-290Hz-360Hz-430Hz.wav,S2PnF1A,0.0,1.25,CAT/S2PnF1A.wav,1A,SAME\r\nP1 No-Formant B-430Hz-360Hz-290Hz-220Hz-150Hz.wav,S2PnF1B,0.0,1.25,CAT/S2PnF1B.wav,1B,SAME\r\nP2 No-Formant A-105Hz-180Hz-255Hz-330Hz-405Hz.wav,S2PnF2A,0.0,1.25,CAT/S2PnF2A.wav,2A,SAME\r\nP2 No-Formant B-405Hz-330Hz-255Hz-180Hz-105Hz.wav,S2PnF2B,0.0,1.25,CAT/S2PnF2B.wav,2B,SAME\r\nP1 F0=290Hz A-290Hz(2.6k-3.1k-3.6k-4.1k-4.6k).wav,S3FcP1A,0.0,1.25,CAT/S3FcP1A.wav,1A,SAME\r\nP1 F0=290Hz B-290Hz(4.6k-4.1k-3.6k-3.1k-2.6k).wav,S3FcP1B,0.0,1.25,CAT/S3FcP1B.wav,1B,SAME\r\nP2 F0=255Hz A-255Hz(2.1k-2.7k-3.3k-3.9k-4.5k).wav,S3FcP2A,0.0,1.25,CAT/S3FcP2A.wav,2A,SAME\r\nP2 F0=255Hz B-255Hz(4.5k-3.9k-3.3k-2.7k-2.1k).wav,S3FcP2B,0.0,1.25,CAT/S3FcP2B.wav,2B,SAME\r\nP1 Formant3.6k A-150Hz(3.6k)-220Hz(3.6k)-290Hz(3.6k)-360Hz(3.6k)-430Hz(3.6k).wav,S4PcF1A,0.0,1.25,CAT/S4PcF1A.wav,1A,SAME\r\nP1 Formant3.6k B-430Hz(3.6k)-360Hz(3.6k)-290Hz(3.6k)-220Hz(3.6k)-150Hz(3.6k).wav,S4PcF1B,0.0,1.25,CAT/S4PcF1B.wav,1B,SAME\r\nP2 Formant3.3k A-105Hz(3.3k)-180Hz(3.3k)-255Hz(3.3k)-330Hz(3.3k)-405Hz(3.3k).wav,S4PcF2A,0.0,1.25,CAT/S4PcF2A.wav,2A,SAME\r\nP2 Formant3.3k B-405Hz(3.3k)-330Hz(3.3k)-255Hz(3.3k)-180Hz(3.3k)-105Hz(3.3k).wav,S4PcF2B,0.0,1.25,CAT/S4PcF2B.wav,2B,SAME\r\nP1 Formants x Pitches A-430Hz(2.6k)-360Hz(3.1k)-290Hz(3.6k)-220Hz(4.1k)-150Hz(4.6k).wav,S5PxF1A,0.0,1.25,CAT/S5PxF1A.wav,1A,SAME\r\nP1 Formants x Pitches B-150Hz(4.6k)-220Hz(4.1k)-290Hz(3.6k)-360Hz(3.1k)-430Hz(2.6k).wav,S5PxF1B,0.0,1.25,CAT/S5PxF1B.wav,1B,SAME\r\nP2 Formants x Pitches A-405Hz(2.1k)-330Hz(2.7k)-255Hz(3.3k)-180Hz(3.9k)-105Hz(4.5k).wav,S5PxF2A,0.0,1.25,CAT/S5PxF2A.wav,2A,SAME\r\nP2 Formants x Pitches B-105Hz(4.5k)-180Hz(3.9k)-255Hz(3.3k)-330Hz(2.7k)-405Hz(2.1k).wav,S5PxF2B,0.0,1.25,CAT/S5PxF2B.wav,0,2B,SAME" } }, { @@ -113,7 +113,7 @@ "fields": { "name": "普通话", "process_csv": false, - "csv": "TFBOYS,宠爱,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.00.000.int.mp3,0,0,int\r\nTFBOYS,宠爱,16.645,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.16.645.v1.mp3,0,0,v1\r\nTFBOYS,宠爱,48.643,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.48.643.c1.mp3,0,0,c1\r\nTFBOYS,宠爱,81.055,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.21.055.b.mp3,0,0,b\r\nTFBOYS,宠爱,95.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.35.000.v2.mp3,0,0,v2\r\n严艺丹,三寸天堂,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.00.000.int.mp3,0,0,int\r\n严艺丹,三寸天堂,33.257,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.33.257.v1.mp3,0,0,v1\r\n严艺丹,三寸天堂,84.416,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun01.24.416.c1.mp3,0,0,c1\r\n严艺丹,三寸天堂,141.101,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun02.21.101.v2.mp3,0,0,v2\r\n严艺丹,三寸天堂,192.58,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun03.12.580.b.mp3,0,0,b\r\n凤凰传奇,最炫民族风,3.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.03.229.int.mp3,0,0,int\r\n凤凰传奇,最炫民族风,23.132,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.23.132.v1.mp3,0,0,v1\r\n凤凰传奇,最炫民族风,57.174,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.57.174.c1.mp3,0,0,c1\r\n凤凰传奇,最炫民族风,98.756,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.38.756.b.mp3,0,0,b\r\n凤凰传奇,最炫民族风,113.851,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.53.851.v2.mp3,0,0,v2\r\n凤凰传奇,自由飞翔,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.01.080.int.mp3,0,0,int\r\n凤凰传奇,自由飞翔,33.219,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.33.219.v1.mp3,0,0,v1\r\n凤凰传奇,自由飞翔,53.898,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.53.898.b.mp3,0,0,b\r\n凤凰传奇,自由飞翔,74.536,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.14.536.v2.mp3,0,0,v2\r\n凤凰传奇,自由飞翔,95.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.35.173.c1.mp3,0,0,c1\r\n刘柏辛,Manta,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.00.000.int.mp3,0,0,int\r\n刘柏辛,Manta,20.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.20.229.v1.mp3,0,0,v1\r\n刘柏辛,Manta,60.245,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.00.245.c1.mp3,0,0,c1\r\n刘柏辛,Manta,90.22,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.30.220.v2.mp3,0,0,v2\r\n刘柏辛,Manta,110.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.50.203.c2.mp3,0,0,c2\r\n刘海波,别来无恙,3.157,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.03.157.int.mp3,0,0,int\r\n刘海波,别来无恙,30.128,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.30.128.v1.mp3,0,0,v1\r\n刘海波,别来无恙,83.034,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.23.034.c1.mp3,0,0,c1\r\n刘海波,别来无恙,109.599,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.49.599.b.mp3,0,0,b\r\n刘海波,别来无恙,142.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai02.22.434.v2.mp3,0,0,v2\r\n周杰伦,菊花台,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.00.000.int.mp3,0,0,int\r\n周杰伦,菊花台,36.122,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.36.122.v1.mp3,0,0,v1\r\n周杰伦,菊花台,94.547,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua01.34.547.c1.mp3,0,0,c1\r\n周杰伦,菊花台,137.341,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.17.341.b.mp3,0,0,b\r\n周杰伦,菊花台,151.205,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.31.205.v2.mp3,0,0,v2\r\n周杰伦/费玉清,千里之外,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.00.000.int.mp3,0,0,int\r\n周杰伦/费玉清,千里之外,24.523,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.24.523.v1.mp3,0,0,v1\r\n周杰伦/费玉清,千里之外,56.985,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.56.985.b.mp3,0,0,b\r\n周杰伦/费玉清,千里之外,73.051,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li01.13.051.c1.mp3,0,0,c1\r\n周杰伦/费玉清,千里之外,122.118,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li02.02.118.v2.mp3,0,0,v2\r\n大张伟,倍儿爽,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.00.000.int.mp3,0,0,int\r\n大张伟,倍儿爽,24.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.24.158.c1.mp3,0,0,c1\r\n大张伟,倍儿爽,40.52,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.40.520.v1.mp3,0,0,v1\r\n大张伟,倍儿爽,86.588,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.26.588.b.mp3,0,0,b\r\n大张伟,倍儿爽,101.441,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.41.441.v2.mp3,0,0,v2\r\n孙悦,哭泣的百合花,2.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.02.656.int.mp3,0,0,int\r\n孙悦,哭泣的百合花,30.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.30.829.v1.mp3,0,0,v1\r\n孙悦,哭泣的百合花,53.489,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.53.489.c1.mp3,0,0,c1\r\n孙悦,哭泣的百合花,126.887,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.06.887.v2.mp3,0,0,v2\r\n孙悦,哭泣的百合花,150.874,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.30.874.c2.mp3,0,0,c2\r\n孙楠,不见不散,2.274,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.02.274.int.mp3,0,0,int\r\n孙楠,不见不散,20.327,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.20.327.v1.mp3,0,0,v1\r\n孙楠,不见不散,50.743,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.50.743.c1.mp3,0,0,c1\r\n孙楠,不见不散,103.722,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San01.43.722.v2.mp3,0,0,v2\r\n孙楠,不见不散,134.404,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San02.14.404.c2.mp3,0,0,c2\r\n宋冬野,董小姐,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.00.000.int.mp3,0,0,int\r\n宋冬野,董小姐,34.747,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.34.747.v1.mp3,0,0,v1\r\n宋冬野,董小姐,84.733,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie01.24.733.c1.mp3,0,0,c1\r\n宋冬野,董小姐,152.651,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie02.32.651.v2.mp3,0,0,v2\r\n宋冬野,董小姐,185.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie03.05.620.c2.mp3,0,0,c2\r\n张靓颖,这就是爱情,1.559,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.01.559.int.mp3,0,0,int\r\n张靓颖,这就是爱情,16.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.16.297.v1.mp3,0,0,v1\r\n张靓颖,这就是爱情,66.839,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi01.06.839.c1.mp3,0,0,c1\r\n张靓颖,这就是爱情,123.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.03.593.v2.mp3,0,0,v2\r\n张靓颖,这就是爱情,174.227,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.54.227.c2.mp3,0,0,c2\r\n戚薇/袁成杰,外滩十八号,1.768,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.01.768.int.mp3,0,0,int\r\n戚薇/袁成杰,外滩十八号,21.734,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.21.734.v1.mp3,0,0,v1\r\n戚薇/袁成杰,外滩十八号,53.634,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.53.634.c1.mp3,0,0,c1\r\n戚薇/袁成杰,外滩十八号,86.972,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.26.972.v2.mp3,0,0,v2\r\n戚薇/袁成杰,外滩十八号,118.467,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.58.467.c2.mp3,0,0,c2\r\n时代少年团,要你管,2.293,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.02.293.int.mp3,0,0,int\r\n时代少年团,要你管,11.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.11.620.v1.mp3,0,0,v1\r\n时代少年团,要你管,58.745,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.58.745.c1.mp3,0,0,c1\r\n时代少年团,要你管,75.524,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan01.15.524.v2.mp3,0,0,v2\r\n时代少年团,要你管,154.626,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan02.34.626.b2.mp3,0,0,b2\r\n李宇春,无价之姐,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.01.080.int.mp3,0,0,int\r\n李宇春,无价之姐,31.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.31.203.v1.mp3,0,0,v1\r\n李宇春,无价之姐,61.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.01.656.b.mp3,0,0,b\r\n李宇春,无价之姐,76.4,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.16.400.c1.mp3,0,0,c1\r\n李宇春,无价之姐,106.66,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.46.660.b2.mp3,0,0,b2\r\n李泉,时间飞了,0.59,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.00.590.v1.mp3,0,0,v1\r\n李泉,时间飞了,28.162,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.28.162.c1.mp3,0,0,c1\r\n李泉,时间飞了,56.999,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.56.999.b.mp3,0,0,b\r\n李泉,时间飞了,86.384,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.26.384.v2.mp3,0,0,v2\r\n李泉,时间飞了,113.998,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.53.998.c2.mp3,0,0,c2\r\n李荣浩,年少有为,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.00.000.int.mp3,0,0,int\r\n李荣浩,年少有为,29.703,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.29.703.v1.mp3,0,0,v1\r\n李荣浩,年少有为,87.343,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao01.27.343.c1.mp3,0,0,c1\r\n李荣浩,年少有为,146.25,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao02.26.250.v2.mp3,0,0,v2\r\n李荣浩,年少有为,203.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao03.23.732.c2.mp3,0,0,c2\r\n杨坤,无所谓,1.307,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.01.307.int.mp3,0,0,int\r\n杨坤,无所谓,16.381,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.16.381.v1.mp3,0,0,v1\r\n杨坤,无所谓,80.294,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei01.20.894.c1.mp3,0,0,c1\r\n杨坤,无所谓,128.195,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.08.195.v2.mp3,0,0,v2\r\n杨坤,无所谓,160.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.40.370.c2.mp3,0,0,c2\r\n杨坤,那一天,2.268,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.02.268.int.mp3,0,0,int\r\n杨坤,那一天,31.798,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.31.798.v1.mp3,0,0,v1\r\n杨坤,那一天,90.218,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian01.30.218.c1.mp3,0,0,c1\r\n杨坤,那一天,120.587,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.00.587.b.mp3,0,0,b\r\n杨坤,那一天,149.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.29.970.v2.mp3,0,0,v2\r\n毛不易,平凡的一天,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.00.000.int.mp3,0,0,int\r\n毛不易,平凡的一天,15.483,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.15.483.v1.mp3,0,0,v1\r\n毛不易,平凡的一天,75.475,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian01.15.474.c1.mp3,0,0,c1\r\n毛不易,平凡的一天,122.638,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian02.02.638.v2.mp3,0,0,v2\r\n毛不易,平凡的一天,182.202,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian03.02.202.c2.mp3,0,0,c2\r\n毛不易,消愁,0.465,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.00.465.int.mp3,0,0,int\r\n毛不易,消愁,17.912,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.17.912.v1.mp3,0,0,v1\r\n毛不易,消愁,52.806,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.52.806.c1.mp3,0,0,c1\r\n毛不易,消愁,89.794,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.29.794.b.mp3,0,0,b\r\n毛不易,消愁,107.358,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.47.358.c2.mp3,0,0,c2\r\n水木年华,Forever Young,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.00.000.int.mp3,0,0,int\r\n水木年华,Forever Young,36.612,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.36.612.v1.mp3,0,0,v1\r\n水木年华,Forever Young,72.826,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.12.826.c1.mp3,0,0,c1\r\n水木年华,Forever Young,109.27,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.49.270.b.mp3,0,0,b\r\n水木年华,Forever Young,127.177,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young02.07.177.v2.mp3,0,0,v2\r\n汪峰,存在,1.153,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.01.153.v1.mp3,0,0,v1\r\n汪峰,存在,34.728,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.34.728.c1.mp3,0,0,c1\r\n汪峰,存在,72.685,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.12.685.b.mp3,0,0,b\r\n汪峰,存在,106.479,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.46.479.v2.mp3,0,0,v2\r\n汪峰,存在,139.997,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai02.19.997.c2.mp3,0,0,c2\r\n汪苏泷,一笑倾城,0.94,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.00.940.int.mp3,0,0,int\r\n汪苏泷,一笑倾城,49.819,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.49.819.v1.mp3,0,0,v1\r\n汪苏泷,一笑倾城,81.251,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.21.251.c1.mp3,0,0,c1\r\n汪苏泷,一笑倾城,93.849,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.53.849.c2.mp3,0,0,c2\r\n汪苏泷,一笑倾城,131.427,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao02.11.427.v2.mp3,0,0,v2\r\n海伦,桥边姑娘,2.138,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.02.138.int.mp3,0,0,int\r\n海伦,桥边姑娘,16.984,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.16.984.v1.mp3,0,0,v1\r\n海伦,桥边姑娘,56.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.53.593.c1.mp3,0,0,c1\r\n海伦,桥边姑娘,85.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.25.306.b.mp3,0,0,b\r\n海伦,桥边姑娘,97.598,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.37.598.v2.mp3,0,0,v2\r\n王啸坤,带我去寻找,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.00.000.int.mp3,0,0,int\r\n王啸坤,带我去寻找,22.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.22.694.v1.mp3,0,0,v1\r\n王啸坤,带我去寻找,65.72,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.05.720.c1.mp3,0,0,c1\r\n王啸坤,带我去寻找,110.948,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.50.048.v2.mp3,0,0,v2\r\n王啸坤,带我去寻找,129.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao02.09.899.b.mp3,0,0,b\r\n王筝/水木年华,没有人比我更爱你,0.741,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.00.741.int.mp3,0,0,int\r\n王筝/水木年华,没有人比我更爱你,12.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.12.732.v1.mp3,0,0,v1\r\n王筝/水木年华,没有人比我更爱你,62.319,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren01.02.319.c1.mp3,0,0,c1\r\n王筝/水木年华,没有人比我更爱你,104.353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.04.353.v2.mp3,0,0,v2\r\n王筝/水木年华,没有人比我更爱你,163.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.43.899.c2.mp3,0,0,c2\r\n罗中旭,为爱存在,1.917,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.01.917.int.mp3,0,0,int\r\n罗中旭,为爱存在,13.961,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.13.961.v1.mp3,0,0,v1\r\n罗中旭,为爱存在,60.551,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.00.551.c1.mp3,0,0,c1\r\n罗中旭,为爱存在,97.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.37.765.v2.mp3,0,0,v2\r\n罗中旭,为爱存在,159.567,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai02.39.567.c2.mp3,0,0,c2\r\n罗中旭,爱在你身边,2.134,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.02.134.int.mp3,0,0,int\r\n罗中旭,爱在你身边,48.727,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.48.727.v1.mp3,0,0,v1\r\n罗中旭,爱在你身边,108.271,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian01.48.271.c1.mp3,0,0,c1\r\n罗中旭,爱在你身边,131.7,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.11.700.b.mp3,0,0,b\r\n罗中旭,爱在你身边,177.056,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.57.056.c3.mp3,0,0,c3\r\n罗中旭,让你心动,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.00.000.int.mp3,0,0,int\r\n罗中旭,让你心动,9.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.09.434.v1.mp3,0,0,v1\r\n罗中旭,让你心动,69.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.09.158.c1.mp3,0,0,c1\r\n罗中旭,让你心动,110.24,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.50.240.v2.mp3,0,0,v2\r\n罗中旭,让你心动,147.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong02.47.628.c2.mp3,0,0,c2\r\n羽泉,最美,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.00.000.int.mp3,0,0,int\r\n羽泉,最美,30.971,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.30.971.v1.mp3,0,0,v1\r\n羽泉,最美,71.261,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei01.11.261.c1.mp3,0,0,c1\r\n羽泉,最美,83.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei02.23.173.v2.mp3,0,0,v2\r\n羽泉,最美,93.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei03.03.173.c2.mp3,0,0,c2\r\n肖战,余年,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.00.000.int.mp3,0,0,int\r\n肖战,余年,21.716,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.21.716.v1.mp3,0,0,v1\r\n肖战,余年,60.537,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.00.537.c1.mp3,0,0,c1\r\n肖战,余年,118.834,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.58.834.v2.mp3,0,0,v2\r\n肖战,余年,157.224,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian02.37.224.c2.mp3,0,0,c2\r\n范晓萱,哭了,0.366,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.00.366.int.mp3,0,0,int\r\n范晓萱,哭了,24.564,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.24.564.v1.mp3,0,0,v1\r\n范晓萱,哭了,49.531,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.49.531.c1.mp3,0,0,c1\r\n范晓萱,哭了,86.835,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.26.385.v2.mp3,0,0,v2\r\n范晓萱,哭了,111.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.51.765.c2.mp3,0,0,c2\r\n蔡徐坤,情人,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.00.000.int.mp3,0,0,int\r\n蔡徐坤,情人,11.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.11.370.v1.mp3,0,0,v1\r\n蔡徐坤,情人,43.568,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.43.568.c1.mp3,0,0,c1\r\n蔡徐坤,情人,73.533,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.13.533.v2.mp3,0,0,v2\r\n蔡徐坤,情人,104.69,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.44.690.c2.mp3,0,0,c2\r\n薛之谦,认真的雪,1.61,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.01.610.int.mp3,0,0,int\r\n薛之谦,认真的雪,23.982,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.23.982.v1.mp3,0,0,v1\r\n薛之谦,认真的雪,61.015,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue01.01.015.c1.mp3,0,0,c1\r\n薛之谦,认真的雪,124.572,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.04.572.v2.mp3,0,0,v2\r\n薛之谦,认真的雪,143.385,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.23.385.c2.mp3,0,0,c2\r\n谢东,笑脸,0.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.00.970.int.mp3,0,0,int\r\n谢东,笑脸,18.112,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.18.112.v1.mp3,0,0,v1\r\n谢东,笑脸,53.328,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.53.328.c1.mp3,0,0,c1\r\n谢东,笑脸,99.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian01.39.945.v2.mp3,0,0,v2\r\n谢东,笑脸,135.181,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian02.15.181.c2.mp3,0,0,c2\r\n赵磊,成都,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.00.000.int.mp3,0,0,int\r\n赵磊,成都,18.028,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.18.208.v1.mp3,0,0,v1\r\n赵磊,成都,51.586,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.51.585.v2.mp3,0,0,v2\r\n赵磊,成都,83.3353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.23.335.c1.mp3,0,0,c1\r\n赵磊,成都,116.573,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.56.573.b.mp3,0,0,b\r\n郑钧,回到拉萨,2.233,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.02.233.int.mp3,0,0,int\r\n郑钧,回到拉萨,28.066,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.28.066.v1.mp3,0,0,v1\r\n郑钧,回到拉萨,101.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa01.41.852.c1.mp3,0,0,c1\r\n郑钧,回到拉萨,171.001,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa02.51.001.b.mp3,0,0,b\r\n郑钧,回到拉萨,205.712,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa03.25.712.v2.mp3,0,0,v2\r\n陈明,为了,10.652,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.10.652.int.mp3,0,0,int\r\n陈明,为了,31.213,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.31.213.v1.mp3,0,0,v1\r\n陈明,为了,61.145,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.01.145.b.mp3,0,0,b\r\n陈明,为了,104.931,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.44.931.c1.mp3,0,0,c1\r\n陈明,为了,149.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le02.29.945.v2.mp3,0,0,v2\r\n陈楚生,一个人唱情歌,1.12,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.01.120.int.mp3,0,0,int\r\n陈楚生,一个人唱情歌,16.356,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.16.356.v1.mp3,0,0,v1\r\n陈楚生,一个人唱情歌,48.322,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.48.322.c1.mp3,0,0,c1\r\n陈楚生,一个人唱情歌,94.255,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren01.34.255.v2.mp3,0,0,v2\r\n陈楚生,一个人唱情歌,126.314,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren02.06.314.c2.mp3,0,0,c2\r\n陈琳,不想骗自己,0.758,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.00.758.int.mp3,0,0,int\r\n陈琳,不想骗自己,33.298,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.33.298.v1.mp3,0,0,v1\r\n陈琳,不想骗自己,72.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.12.297.c1.mp3,0,0,c1\r\n陈琳,不想骗自己,94.647,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.34.647.v2.mp3,0,0,v2\r\n陈琳,不想骗自己,133.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji02.13.646.c2.mp3,0,0,c2\r\n陈琳,爱就爱了,1.126,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.01.126.int.mp3,0,0,int\r\n陈琳,爱就爱了,32.557,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.32.557.v1.mp3,0,0,v1\r\n陈琳,爱就爱了,89.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.29.285.c1.mp3,0,0,c1\r\n陈琳,爱就爱了,119.368,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.59.368.b.mp3,0,0,b\r\n陈琳,爱就爱了,150.738,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai02.30.738.v2.mp3,0,0,v2\r\n陈粒,小半,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.00.000.v1.mp3,0,0,v1\r\n陈粒,小半,51.323,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.51.323.c1.mp3,0,0,c1\r\n陈粒,小半,91.659,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban01.31.659.v2.mp3,0,0,v2\r\n陈粒,小半,143.018,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban02.23.018.c2.mp3,0,0,c2\r\n陈粒,小半,187.847,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban03.07.847.b.mp3,0,0,b\r\n霍尊,卷珠帘,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.00.000.int.mp3,0,0,int\r\n霍尊,卷珠帘,26.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.26.852.v1.mp3,0,0,v1\r\n霍尊,卷珠帘,99.667,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian01.39.667.c1.mp3,0,0,c1\r\n霍尊,卷珠帘,133.642,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.13.642.b.mp3,0,0,b\r\n霍尊,卷珠帘,171.266,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.51.266.c2.mp3,0,0,c2\r\n韩庚,My Logo,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.00.000.int.mp3,0,0,int\r\n韩庚,My Logo,15.674,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.15.674.v1.mp3,0,0,v1\r\n韩庚,My Logo,45.821,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.45.821.c1.mp3,0,0,c1\r\n韩庚,My Logo,69.891,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.09.891.v2.mp3,0,0,v2\r\n韩庚,My Logo,99.89,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.39.890.c2.mp3,0,0,c2\r\n韩红,天亮了,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.00.000.int.mp3,0,0,int\r\n韩红,天亮了,13.259,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.13.259.v1.mp3,0,0,v1\r\n韩红,天亮了,68.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.08.694.c1.mp3,0,0,c1\r\n韩红,天亮了,100.959,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.40.959.b.mp3,0,0,b\r\n韩红,天亮了,110.688,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.50.688.v2.mp3,0,0,v2\r\n马頔,南山南,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.00.000.c1.mp3,0,0,c1\r\n马頔,南山南,29.929,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.29.929.v1.mp3,0,0,v1\r\n马頔,南山南,133.151,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan02.13.151.v2.mp3,0,0,v2\r\n马頔,南山南,192.455,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.12.455.c2.mp3,0,0,c2\r\n马頔,南山南,229.26,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.49.260.b2.mp3,0,0,b2\r\n高林生,牵挂你的人是我,1.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.01.306.int.mp3,0,0,int\r\n高林生,牵挂你的人是我,18.431,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.18.431.v1.mp3,0,0,v1\r\n高林生,牵挂你的人是我,54.429,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.54.429.c1.mp3,0,0,c1\r\n高林生,牵挂你的人是我,92.618,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua01.32.618.b.mp3,0,0,b\r\n高林生,牵挂你的人是我,183.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua03.03.628.c2.mp3,0,0,c2\r\n黄征,野菊花,1.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.01.646.int.mp3,0,0,int\r\n黄征,野菊花,24.217,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.24.217.v1.mp3,0,0,v1\r\n黄征,野菊花,83.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.23.829.c1.mp3,0,0,c1\r\n黄征,野菊花,114.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.54.285.v2.mp3,0,0,v2\r\n黄征,野菊花,203.789,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua03.23.789.c2.mp3,0,0,c2\r\n" + "csv": "TFBOYS,宠爱,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.00.000.int.mp3,0,int\r\nTFBOYS,宠爱,16.645,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.16.645.v1.mp3,0,v1\r\nTFBOYS,宠爱,48.643,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai00.48.643.c1.mp3,0,c1\r\nTFBOYS,宠爱,81.055,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.21.055.b.mp3,0,b\r\nTFBOYS,宠爱,95.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Chong%20Ai01.35.000.v2.mp3,0,v2\r\n严艺丹,三寸天堂,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.00.000.int.mp3,0,int\r\n严艺丹,三寸天堂,33.257,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun00.33.257.v1.mp3,0,v1\r\n严艺丹,三寸天堂,84.416,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun01.24.416.c1.mp3,0,c1\r\n严艺丹,三寸天堂,141.101,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun02.21.101.v2.mp3,0,v2\r\n严艺丹,三寸天堂,192.58,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/San%20Cun03.12.580.b.mp3,0,b\r\n凤凰传奇,最炫民族风,3.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.03.229.int.mp3,0,int\r\n凤凰传奇,最炫民族风,23.132,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.23.132.v1.mp3,0,v1\r\n凤凰传奇,最炫民族风,57.174,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan00.57.174.c1.mp3,0,c1\r\n凤凰传奇,最炫民族风,98.756,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.38.756.b.mp3,0,b\r\n凤凰传奇,最炫民族风,113.851,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Xuan01.53.851.v2.mp3,0,v2\r\n凤凰传奇,自由飞翔,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.01.080.int.mp3,0,int\r\n凤凰传奇,自由飞翔,33.219,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.33.219.v1.mp3,0,v1\r\n凤凰传奇,自由飞翔,53.898,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang00.53.898.b.mp3,0,b\r\n凤凰传奇,自由飞翔,74.536,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.14.536.v2.mp3,0,v2\r\n凤凰传奇,自由飞翔,95.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Fei%20Xiang01.35.173.c1.mp3,0,c1\r\n刘柏辛,Manta,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.00.000.int.mp3,0,int\r\n刘柏辛,Manta,20.229,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta00.20.229.v1.mp3,0,v1\r\n刘柏辛,Manta,60.245,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.00.245.c1.mp3,0,c1\r\n刘柏辛,Manta,90.22,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.30.220.v2.mp3,0,v2\r\n刘柏辛,Manta,110.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Manta01.50.203.c2.mp3,0,c2\r\n刘海波,别来无恙,3.157,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.03.157.int.mp3,0,int\r\n刘海波,别来无恙,30.128,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai00.30.128.v1.mp3,0,v1\r\n刘海波,别来无恙,83.034,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.23.034.c1.mp3,0,c1\r\n刘海波,别来无恙,109.599,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai01.49.599.b.mp3,0,b\r\n刘海波,别来无恙,142.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bie%20Lai02.22.434.v2.mp3,0,v2\r\n周杰伦,菊花台,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.00.000.int.mp3,0,int\r\n周杰伦,菊花台,36.122,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua00.36.122.v1.mp3,0,v1\r\n周杰伦,菊花台,94.547,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua01.34.547.c1.mp3,0,c1\r\n周杰伦,菊花台,137.341,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.17.341.b.mp3,0,b\r\n周杰伦,菊花台,151.205,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ju%20Hua02.31.205.v2.mp3,0,v2\r\n周杰伦/费玉清,千里之外,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.00.000.int.mp3,0,int\r\n周杰伦/费玉清,千里之外,24.523,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.24.523.v1.mp3,0,v1\r\n周杰伦/费玉清,千里之外,56.985,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li00.56.985.b.mp3,0,b\r\n周杰伦/费玉清,千里之外,73.051,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li01.13.051.c1.mp3,0,c1\r\n周杰伦/费玉清,千里之外,122.118,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Li02.02.118.v2.mp3,0,v2\r\n大张伟,倍儿爽,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.00.000.int.mp3,0,int\r\n大张伟,倍儿爽,24.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.24.158.c1.mp3,0,c1\r\n大张伟,倍儿爽,40.52,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang00.40.520.v1.mp3,0,v1\r\n大张伟,倍儿爽,86.588,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.26.588.b.mp3,0,b\r\n大张伟,倍儿爽,101.441,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bei%20Er%20Shuang01.41.441.v2.mp3,0,v2\r\n孙悦,哭泣的百合花,2.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.02.656.int.mp3,0,int\r\n孙悦,哭泣的百合花,30.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.30.829.v1.mp3,0,v1\r\n孙悦,哭泣的百合花,53.489,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua00.53.489.c1.mp3,0,c1\r\n孙悦,哭泣的百合花,126.887,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.06.887.v2.mp3,0,v2\r\n孙悦,哭泣的百合花,150.874,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bai%20He%20Hua02.30.874.c2.mp3,0,c2\r\n孙楠,不见不散,2.274,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.02.274.int.mp3,0,int\r\n孙楠,不见不散,20.327,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.20.327.v1.mp3,0,v1\r\n孙楠,不见不散,50.743,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San00.50.743.c1.mp3,0,c1\r\n孙楠,不见不散,103.722,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San01.43.722.v2.mp3,0,v2\r\n孙楠,不见不散,134.404,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Bu%20Jian%20Bu%20San02.14.404.c2.mp3,0,c2\r\n宋冬野,董小姐,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.00.000.int.mp3,0,int\r\n宋冬野,董小姐,34.747,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie00.34.747.v1.mp3,0,v1\r\n宋冬野,董小姐,84.733,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie01.24.733.c1.mp3,0,c1\r\n宋冬野,董小姐,152.651,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie02.32.651.v2.mp3,0,v2\r\n宋冬野,董小姐,185.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Dong%20Xiao%20Jie03.05.620.c2.mp3,0,c2\r\n张靓颖,这就是爱情,1.559,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.01.559.int.mp3,0,int\r\n张靓颖,这就是爱情,16.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi00.16.297.v1.mp3,0,v1\r\n张靓颖,这就是爱情,66.839,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi01.06.839.c1.mp3,0,c1\r\n张靓颖,这就是爱情,123.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.03.593.v2.mp3,0,v2\r\n张靓颖,这就是爱情,174.227,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhe%20Jiu%20Shi02.54.227.c2.mp3,0,c2\r\n戚薇/袁成杰,外滩十八号,1.768,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.01.768.int.mp3,0,int\r\n戚薇/袁成杰,外滩十八号,21.734,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.21.734.v1.mp3,0,v1\r\n戚薇/袁成杰,外滩十八号,53.634,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan00.53.634.c1.mp3,0,c1\r\n戚薇/袁成杰,外滩十八号,86.972,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.26.972.v2.mp3,0,v2\r\n戚薇/袁成杰,外滩十八号,118.467,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wai%20Tan01.58.467.c2.mp3,0,c2\r\n时代少年团,要你管,2.293,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.02.293.int.mp3,0,int\r\n时代少年团,要你管,11.62,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.11.620.v1.mp3,0,v1\r\n时代少年团,要你管,58.745,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan00.58.745.c1.mp3,0,c1\r\n时代少年团,要你管,75.524,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan01.15.524.v2.mp3,0,v2\r\n时代少年团,要你管,154.626,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yao%20Ni%20Guan02.34.626.b2.mp3,0,b2\r\n李宇春,无价之姐,1.08,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.01.080.int.mp3,0,int\r\n李宇春,无价之姐,31.203,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia00.31.203.v1.mp3,0,v1\r\n李宇春,无价之姐,61.656,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.01.656.b.mp3,0,b\r\n李宇春,无价之姐,76.4,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.16.400.c1.mp3,0,c1\r\n李宇春,无价之姐,106.66,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Jia01.46.660.b2.mp3,0,b2\r\n李泉,时间飞了,0.59,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.00.590.v1.mp3,0,v1\r\n李泉,时间飞了,28.162,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.28.162.c1.mp3,0,c1\r\n李泉,时间飞了,56.999,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei00.56.999.b.mp3,0,b\r\n李泉,时间飞了,86.384,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.26.384.v2.mp3,0,v2\r\n李泉,时间飞了,113.998,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shi%20Jian%20Fei01.53.998.c2.mp3,0,c2\r\n李荣浩,年少有为,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.00.000.int.mp3,0,int\r\n李荣浩,年少有为,29.703,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao00.29.703.v1.mp3,0,v1\r\n李荣浩,年少有为,87.343,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao01.27.343.c1.mp3,0,c1\r\n李荣浩,年少有为,146.25,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao02.26.250.v2.mp3,0,v2\r\n李荣浩,年少有为,203.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nian%20Shao03.23.732.c2.mp3,0,c2\r\n杨坤,无所谓,1.307,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.01.307.int.mp3,0,int\r\n杨坤,无所谓,16.381,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei00.16.381.v1.mp3,0,v1\r\n杨坤,无所谓,80.294,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei01.20.894.c1.mp3,0,c1\r\n杨坤,无所谓,128.195,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.08.195.v2.mp3,0,v2\r\n杨坤,无所谓,160.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wu%20Suo%20Wei02.40.370.c2.mp3,0,c2\r\n杨坤,那一天,2.268,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.02.268.int.mp3,0,int\r\n杨坤,那一天,31.798,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian00.31.798.v1.mp3,0,v1\r\n杨坤,那一天,90.218,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian01.30.218.c1.mp3,0,c1\r\n杨坤,那一天,120.587,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.00.587.b.mp3,0,b\r\n杨坤,那一天,149.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Na%20Yi%20Tian02.29.970.v2.mp3,0,v2\r\n毛不易,平凡的一天,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.00.000.int.mp3,0,int\r\n毛不易,平凡的一天,15.483,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian00.15.483.v1.mp3,0,v1\r\n毛不易,平凡的一天,75.475,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian01.15.474.c1.mp3,0,c1\r\n毛不易,平凡的一天,122.638,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian02.02.638.v2.mp3,0,v2\r\n毛不易,平凡的一天,182.202,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ping%20Fan%20Tian03.02.202.c2.mp3,0,c2\r\n毛不易,消愁,0.465,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.00.465.int.mp3,0,int\r\n毛不易,消愁,17.912,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.17.912.v1.mp3,0,v1\r\n毛不易,消愁,52.806,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou00.52.806.c1.mp3,0,c1\r\n毛不易,消愁,89.794,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.29.794.b.mp3,0,b\r\n毛不易,消愁,107.358,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Chou01.47.358.c2.mp3,0,c2\r\n水木年华,Forever Young,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.00.000.int.mp3,0,int\r\n水木年华,Forever Young,36.612,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young00.36.612.v1.mp3,0,v1\r\n水木年华,Forever Young,72.826,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.12.826.c1.mp3,0,c1\r\n水木年华,Forever Young,109.27,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young01.49.270.b.mp3,0,b\r\n水木年华,Forever Young,127.177,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Forever%20Young02.07.177.v2.mp3,0,v2\r\n汪峰,存在,1.153,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.01.153.v1.mp3,0,v1\r\n汪峰,存在,34.728,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai00.34.728.c1.mp3,0,c1\r\n汪峰,存在,72.685,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.12.685.b.mp3,0,b\r\n汪峰,存在,106.479,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai01.46.479.v2.mp3,0,v2\r\n汪峰,存在,139.997,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cun%20Zai02.19.997.c2.mp3,0,c2\r\n汪苏泷,一笑倾城,0.94,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.00.940.int.mp3,0,int\r\n汪苏泷,一笑倾城,49.819,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao00.49.819.v1.mp3,0,v1\r\n汪苏泷,一笑倾城,81.251,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.21.251.c1.mp3,0,c1\r\n汪苏泷,一笑倾城,93.849,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao01.53.849.c2.mp3,0,c2\r\n汪苏泷,一笑倾城,131.427,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Xiao02.11.427.v2.mp3,0,v2\r\n海伦,桥边姑娘,2.138,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.02.138.int.mp3,0,int\r\n海伦,桥边姑娘,16.984,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.16.984.v1.mp3,0,v1\r\n海伦,桥边姑娘,56.593,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian00.53.593.c1.mp3,0,c1\r\n海伦,桥边姑娘,85.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.25.306.b.mp3,0,b\r\n海伦,桥边姑娘,97.598,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qiao%20Bian01.37.598.v2.mp3,0,v2\r\n王啸坤,带我去寻找,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.00.000.int.mp3,0,int\r\n王啸坤,带我去寻找,22.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao00.22.694.v1.mp3,0,v1\r\n王啸坤,带我去寻找,65.72,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.05.720.c1.mp3,0,c1\r\n王啸坤,带我去寻找,110.948,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao01.50.048.v2.mp3,0,v2\r\n王啸坤,带我去寻找,129.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xun%20Zhao02.09.899.b.mp3,0,b\r\n王筝/水木年华,没有人比我更爱你,0.741,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.00.741.int.mp3,0,int\r\n王筝/水木年华,没有人比我更爱你,12.732,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren00.12.732.v1.mp3,0,v1\r\n王筝/水木年华,没有人比我更爱你,62.319,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren01.02.319.c1.mp3,0,c1\r\n王筝/水木年华,没有人比我更爱你,104.353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.04.353.v2.mp3,0,v2\r\n王筝/水木年华,没有人比我更爱你,163.899,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Mei%20You%20Ren02.43.899.c2.mp3,0,c2\r\n罗中旭,为爱存在,1.917,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.01.917.int.mp3,0,int\r\n罗中旭,为爱存在,13.961,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai00.13.961.v1.mp3,0,v1\r\n罗中旭,为爱存在,60.551,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.00.551.c1.mp3,0,c1\r\n罗中旭,为爱存在,97.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai01.37.765.v2.mp3,0,v2\r\n罗中旭,为爱存在,159.567,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Ai02.39.567.c2.mp3,0,c2\r\n罗中旭,爱在你身边,2.134,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.02.134.int.mp3,0,int\r\n罗中旭,爱在你身边,48.727,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian00.48.727.v1.mp3,0,v1\r\n罗中旭,爱在你身边,108.271,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian01.48.271.c1.mp3,0,c1\r\n罗中旭,爱在你身边,131.7,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.11.700.b.mp3,0,b\r\n罗中旭,爱在你身边,177.056,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Shen%20Bian02.57.056.c3.mp3,0,c3\r\n罗中旭,让你心动,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.00.000.int.mp3,0,int\r\n罗中旭,让你心动,9.434,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong00.09.434.v1.mp3,0,v1\r\n罗中旭,让你心动,69.158,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.09.158.c1.mp3,0,c1\r\n罗中旭,让你心动,110.24,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong01.50.240.v2.mp3,0,v2\r\n罗中旭,让你心动,147.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xin%20Dong02.47.628.c2.mp3,0,c2\r\n羽泉,最美,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.00.000.int.mp3,0,int\r\n羽泉,最美,30.971,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei00.30.971.v1.mp3,0,v1\r\n羽泉,最美,71.261,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei01.11.261.c1.mp3,0,c1\r\n羽泉,最美,83.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei02.23.173.v2.mp3,0,v2\r\n羽泉,最美,93.173,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zui%20Mei03.03.173.c2.mp3,0,c2\r\n肖战,余年,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.00.000.int.mp3,0,int\r\n肖战,余年,21.716,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian00.21.716.v1.mp3,0,v1\r\n肖战,余年,60.537,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.00.537.c1.mp3,0,c1\r\n肖战,余年,118.834,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian01.58.834.v2.mp3,0,v2\r\n肖战,余年,157.224,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yu%20Nian02.37.224.c2.mp3,0,c2\r\n范晓萱,哭了,0.366,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.00.366.int.mp3,0,int\r\n范晓萱,哭了,24.564,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.24.564.v1.mp3,0,v1\r\n范晓萱,哭了,49.531,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le00.49.531.c1.mp3,0,c1\r\n范晓萱,哭了,86.835,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.26.385.v2.mp3,0,v2\r\n范晓萱,哭了,111.765,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ku%20Le01.51.765.c2.mp3,0,c2\r\n蔡徐坤,情人,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.00.000.int.mp3,0,int\r\n蔡徐坤,情人,11.37,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.11.370.v1.mp3,0,v1\r\n蔡徐坤,情人,43.568,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren00.43.568.c1.mp3,0,c1\r\n蔡徐坤,情人,73.533,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.13.533.v2.mp3,0,v2\r\n蔡徐坤,情人,104.69,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qing%20Ren01.44.690.c2.mp3,0,c2\r\n薛之谦,认真的雪,1.61,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.01.610.int.mp3,0,int\r\n薛之谦,认真的雪,23.982,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue00.23.982.v1.mp3,0,v1\r\n薛之谦,认真的雪,61.015,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue01.01.015.c1.mp3,0,c1\r\n薛之谦,认真的雪,124.572,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.04.572.v2.mp3,0,v2\r\n薛之谦,认真的雪,143.385,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ren%20Zhen%20Xue02.23.385.c2.mp3,0,c2\r\n谢东,笑脸,0.97,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.00.970.int.mp3,0,int\r\n谢东,笑脸,18.112,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.18.112.v1.mp3,0,v1\r\n谢东,笑脸,53.328,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian00.53.328.c1.mp3,0,c1\r\n谢东,笑脸,99.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian01.39.945.v2.mp3,0,v2\r\n谢东,笑脸,135.181,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Lian02.15.181.c2.mp3,0,c2\r\n赵磊,成都,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.00.000.int.mp3,0,int\r\n赵磊,成都,18.028,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.18.208.v1.mp3,0,v1\r\n赵磊,成都,51.586,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du00.51.585.v2.mp3,0,v2\r\n赵磊,成都,83.3353,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.23.335.c1.mp3,0,c1\r\n赵磊,成都,116.573,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Cheng%20Du01.56.573.b.mp3,0,b\r\n郑钧,回到拉萨,2.233,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.02.233.int.mp3,0,int\r\n郑钧,回到拉萨,28.066,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa00.28.066.v1.mp3,0,v1\r\n郑钧,回到拉萨,101.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa01.41.852.c1.mp3,0,c1\r\n郑钧,回到拉萨,171.001,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa02.51.001.b.mp3,0,b\r\n郑钧,回到拉萨,205.712,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/La%20Sa03.25.712.v2.mp3,0,v2\r\n陈明,为了,10.652,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.10.652.int.mp3,0,int\r\n陈明,为了,31.213,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le00.31.213.v1.mp3,0,v1\r\n陈明,为了,61.145,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.01.145.b.mp3,0,b\r\n陈明,为了,104.931,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le01.44.931.c1.mp3,0,c1\r\n陈明,为了,149.945,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Wei%20Le02.29.945.v2.mp3,0,v2\r\n陈楚生,一个人唱情歌,1.12,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.01.120.int.mp3,0,int\r\n陈楚生,一个人唱情歌,16.356,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.16.356.v1.mp3,0,v1\r\n陈楚生,一个人唱情歌,48.322,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren00.48.322.c1.mp3,0,c1\r\n陈楚生,一个人唱情歌,94.255,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren01.34.255.v2.mp3,0,v2\r\n陈楚生,一个人唱情歌,126.314,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Yi%20Ge%20Ren02.06.314.c2.mp3,0,c2\r\n陈琳,不想骗自己,0.758,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.00.758.int.mp3,0,int\r\n陈琳,不想骗自己,33.298,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji00.33.298.v1.mp3,0,v1\r\n陈琳,不想骗自己,72.297,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.12.297.c1.mp3,0,c1\r\n陈琳,不想骗自己,94.647,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji01.34.647.v2.mp3,0,v2\r\n陈琳,不想骗自己,133.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Pian%20Zi%20Ji02.13.646.c2.mp3,0,c2\r\n陈琳,爱就爱了,1.126,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.01.126.int.mp3,0,int\r\n陈琳,爱就爱了,32.557,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai00.32.557.v1.mp3,0,v1\r\n陈琳,爱就爱了,89.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.29.285.c1.mp3,0,c1\r\n陈琳,爱就爱了,119.368,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai01.59.368.b.mp3,0,b\r\n陈琳,爱就爱了,150.738,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ai%20Jiu%20Ai02.30.738.v2.mp3,0,v2\r\n陈粒,小半,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.00.000.v1.mp3,0,v1\r\n陈粒,小半,51.323,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban00.51.323.c1.mp3,0,c1\r\n陈粒,小半,91.659,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban01.31.659.v2.mp3,0,v2\r\n陈粒,小半,143.018,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban02.23.018.c2.mp3,0,c2\r\n陈粒,小半,187.847,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Xiao%20Ban03.07.847.b.mp3,0,b\r\n霍尊,卷珠帘,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.00.000.int.mp3,0,int\r\n霍尊,卷珠帘,26.852,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian00.26.852.v1.mp3,0,v1\r\n霍尊,卷珠帘,99.667,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian01.39.667.c1.mp3,0,c1\r\n霍尊,卷珠帘,133.642,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.13.642.b.mp3,0,b\r\n霍尊,卷珠帘,171.266,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Zhu%20Lian02.51.266.c2.mp3,0,c2\r\n韩庚,My Logo,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.00.000.int.mp3,0,int\r\n韩庚,My Logo,15.674,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.15.674.v1.mp3,0,v1\r\n韩庚,My Logo,45.821,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo00.45.821.c1.mp3,0,c1\r\n韩庚,My Logo,69.891,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.09.891.v2.mp3,0,v2\r\n韩庚,My Logo,99.89,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Logo01.39.890.c2.mp3,0,c2\r\n韩红,天亮了,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.00.000.int.mp3,0,int\r\n韩红,天亮了,13.259,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le00.13.259.v1.mp3,0,v1\r\n韩红,天亮了,68.694,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.08.694.c1.mp3,0,c1\r\n韩红,天亮了,100.959,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.40.959.b.mp3,0,b\r\n韩红,天亮了,110.688,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Tian%20Liang%20Le01.50.688.v2.mp3,0,v2\r\n马頔,南山南,0.0,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.00.000.c1.mp3,0,c1\r\n马頔,南山南,29.929,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan00.29.929.v1.mp3,0,v1\r\n马頔,南山南,133.151,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan02.13.151.v2.mp3,0,v2\r\n马頔,南山南,192.455,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.12.455.c2.mp3,0,c2\r\n马頔,南山南,229.26,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Nan%20Shan%20Nan03.49.260.b2.mp3,0,b2\r\n高林生,牵挂你的人是我,1.306,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.01.306.int.mp3,0,int\r\n高林生,牵挂你的人是我,18.431,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.18.431.v1.mp3,0,v1\r\n高林生,牵挂你的人是我,54.429,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua00.54.429.c1.mp3,0,c1\r\n高林生,牵挂你的人是我,92.618,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua01.32.618.b.mp3,0,b\r\n高林生,牵挂你的人是我,183.628,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Qian%20Gua03.03.628.c2.mp3,0,c2\r\n黄征,野菊花,1.646,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.01.646.int.mp3,0,int\r\n黄征,野菊花,24.217,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua00.24.217.v1.mp3,0,v1\r\n黄征,野菊花,83.829,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.23.829.c1.mp3,0,c1\r\n黄征,野菊花,114.285,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua01.54.285.v2.mp3,0,v2\r\n黄征,野菊花,203.789,45.0,https://m-pop2022-1316713990.cos.ap-guangzhou.myqcloud.com/Ye%20Ju%20Hua03.23.789.c2.mp3,0,c2\r\n" } }, { @@ -122,7 +122,7 @@ "fields": { "name": "TuneTwins", "process_csv": false, - "csv": "default,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/1stDegradation/AgentsofSHIELD_52_E1.mp3,0,1stDegradation,0\r\ndefault,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/2ndDegradation/AgentsofSHIELD_52_E1.mp3,0,2ndDegradation,0\r\ndefault,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/Original/AgentsofSHIELD_52_E1.mp3,0,Original,0\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/Original/AgentsofSHIELD_5_E1.mp3,0,Original,1\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/2ndDegradation/AgentsofSHIELD_5_E1.mp3,0,2ndDegradation,1\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/1stDegradation/AgentsofSHIELD_5_E1.mp3,0,1stDegradation,1\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Arrow_2_E1.mp3,0,2ndDegradation,2\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Arrow_2_E1.mp3,0,1stDegradation,2\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/Original/Arrow_2_E1.mp3,0,Original,2\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/1stDegradation/BoJack_1_E1.mp3,0,1stDegradation,4\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/BoJack_1_E1.mp3,0,2ndDegradation,4\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/Original/BoJack_1_E1.mp3,0,Original,4\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/BoJackHorseman_0_E1.mp3,0,2ndDegradation,3\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/1stDegradation/BoJackHorseman_0_E1.mp3,0,1stDegradation,3\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/Original/BoJackHorseman_0_E1.mp3,0,Original,3\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/BreakingBad_3_E1.mp3,0,2ndDegradation,5\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/Original/BreakingBad_3_E1.mp3,0,Original,5\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/1stDegradation/BreakingBad_3_E1.mp3,0,1stDegradation,5\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Crown_1_E1.mp3,0,1stDegradation,6\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Crown_1_E1.mp3,0,2ndDegradation,6\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/Original/Crown_1_E1.mp3,0,Original,6\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/Original/Dallas_1_E1.mp3,0,Original,7\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Dallas_1_E1.mp3,0,1stDegradation,7\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dallas_1_E1.mp3,0,2ndDegradation,7\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/Original/Dallas_2_E1.mp3,0,Original,8\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dallas_2_E1.mp3,0,2ndDegradation,8\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Dallas_2_E1.mp3,0,1stDegradation,8\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_0_E1.mp3,0,1stDegradation,9\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_0_E1.mp3,0,2ndDegradation,9\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/Original/Daredevil_0_E1.mp3,0,Original,9\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/Original/Daredevil_1_E1.mp3,0,Original,10\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_1_E1.mp3,0,1stDegradation,10\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_1_E1.mp3,0,2ndDegradation,10\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_2_E1.mp3,0,2ndDegradation,11\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/Original/Daredevil_2_E1.mp3,0,Original,11\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_2_E1.mp3,0,1stDegradation,11\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/Original/Deadwood_1_E1.mp3,0,Original,12\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Deadwood_1_E1.mp3,0,2ndDegradation,12\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Deadwood_1_E1.mp3,0,1stDegradation,12\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/Original/Deadwood_3_E1.mp3,0,Original,13\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Deadwood_3_E1.mp3,0,1stDegradation,13\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Deadwood_3_E1.mp3,0,2ndDegradation,13\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/Original/Dexter_1_E1.mp3,0,Original,14\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Dexter_1_E1.mp3,0,1stDegradation,14\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dexter_1_E1.mp3,0,2ndDegradation,14\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/Original/Dexter_3_E1.mp3,0,Original,15\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Dexter_3_E1.mp3,0,1stDegradation,15\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dexter_3_E1.mp3,0,2ndDegradation,15\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/1stDegradation/DoctorWho_1_E1.mp3,0,1stDegradation,16\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/DoctorWho_1_E1.mp3,0,2ndDegradation,16\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/Original/DoctorWho_1_E1.mp3,0,Original,16\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/DoctorWho_2_E1.mp3,0,2ndDegradation,17\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/Original/DoctorWho_2_E1.mp3,0,Original,17\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/1stDegradation/DoctorWho_2_E1.mp3,0,1stDegradation,17\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/DowntownAbbey_2_E1.mp3,0,2ndDegradation,18\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/Original/DowntownAbbey_2_E1.mp3,0,Original,18\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/1stDegradation/DowntownAbbey_2_E1.mp3,0,1stDegradation,18\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/1stDegradation/ER_0_E1.mp3,0,1stDegradation,19\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/2ndDegradation/ER_0_E1.mp3,0,2ndDegradation,19\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/Original/ER_0_E1.mp3,0,Original,19\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_1_E1.mp3,0,2ndDegradation,20\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/Original/ER_1_E1.mp3,0,Original,20\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_1_E1.mp3,0,1stDegradation,20\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/Original/ER_2_E1.mp3,0,Original,21\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_2_E1.mp3,0,1stDegradation,21\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_2_E1.mp3,0,2ndDegradation,21\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Fargo_1_E1.mp3,0,1stDegradation,22\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Fargo_1_E1.mp3,0,2ndDegradation,22\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/Original/Fargo_1_E1.mp3,0,Original,22\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Fargo_2_E1.mp3,0,2ndDegradation,23\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/Original/Fargo_2_E1.mp3,0,Original,23\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Fargo_2_E1.mp3,0,1stDegradation,23\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/1stDegradation/FridayNightLights_1_E1.mp3,0,1stDegradation,24\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/FridayNightLights_1_E1.mp3,0,2ndDegradation,24\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/Original/FridayNightLights_1_E1.mp3,0,Original,24\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/1stDegradation/FridayNightLights_2_E1.mp3,0,1stDegradation,25\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/FridayNightLights_2_E1.mp3,0,2ndDegradation,25\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/Original/FridayNightLights_2_E1.mp3,0,Original,25\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_1_E1.mp3,0,Original,26\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_1_E1.mp3,0,2ndDegradation,26\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_1_E1.mp3,0,1stDegradation,26\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_2_E1.mp3,0,Original,27\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_2_E1.mp3,0,2ndDegradation,27\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_2_E1.mp3,0,1stDegradation,27\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/Original/HaltAndCatchFire_12_E1.mp3,0,Original,28\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/1stDegradation/HaltAndCatchFire_12_E1.mp3,0,1stDegradation,28\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/HaltAndCatchFire_12_E1.mp3,0,2ndDegradation,28\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/HaltAndCatchFire_1_E1.mp3,0,2ndDegradation,29\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/Original/HaltAndCatchFire_1_E1.mp3,0,Original,29\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/1stDegradation/HaltAndCatchFire_1_E1.mp3,0,1stDegradation,29\r\ndefault,heFlash_2_E1,0.0,10.0,MatchingPairs/Original/heFlash_2_E1.mp3,0,Original,71\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/Original/HouseofCards_12_E1.mp3,0,Original,30\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/HouseofCards_12_E1.mp3,0,2ndDegradation,30\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/1stDegradation/HouseofCards_12_E1.mp3,0,1stDegradation,30\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/1stDegradation/HouseofCards_1_E1.mp3,0,1stDegradation,31\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/HouseofCards_1_E1.mp3,0,2ndDegradation,31\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/Original/HouseofCards_1_E1.mp3,0,Original,31\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/IronFist_2_E1.mp3,0,2ndDegradation,32\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/Original/IronFist_2_E1.mp3,0,Original,32\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/1stDegradation/IronFist_2_E1.mp3,0,1stDegradation,32\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/Original/IronFist_3_E1.mp3,0,Original,33\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/1stDegradation/IronFist_3_E1.mp3,0,1stDegradation,33\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/IronFist_3_E1.mp3,0,2ndDegradation,33\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,0,2ndDegradation,34\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,0,1stDegradation,34\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/Original/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,0,Original,34\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_0_E1.mp3,0,Original,35\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_0_E1.mp3,0,2ndDegradation,35\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_0_E1.mp3,0,1stDegradation,35\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_1_E1.mp3,0,2ndDegradation,36\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_1_E1.mp3,0,Original,36\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_1_E1.mp3,0,1stDegradation,36\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_2_E1.mp3,0,2ndDegradation,37\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_2_E1.mp3,0,1stDegradation,37\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_2_E1.mp3,0,Original,37\r\ndefault,LukeCage_0_E1,0.0,10.0,MatchingPairs/Original/LukeCage_0_E1.mp3,0,Original,38\r\ndefault,Luke_Cage_E1,0.0,10.0,MatchingPairs/2ndDegradation/Luke_Cage_E1.mp3,0,2ndDegradation,38\r\ndefault,Luke_Cage_E1,0.0,10.0,MatchingPairs/1stDegradation/Luke_Cage_E1.mp3,0,1stDegradation,38\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/Original/MadMen_1_E1.mp3,0,Original,41\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/1stDegradation/MadMen_1_E1.mp3,0,1stDegradation,41\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/MadMen_1_E1.mp3,0,2ndDegradation,41\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/1stDegradation/MASH_12_E1.mp3,0,1stDegradation,39\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/MASH_12_E1.mp3,0,2ndDegradation,39\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/Original/MASH_12_E1.mp3,0,Original,39\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/Original/MASH_1_E1.mp3,0,Original,40\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/1stDegradation/MASH_1_E1.mp3,0,1stDegradation,40\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/MASH_1_E1.mp3,0,2ndDegradation,40\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/Original/Mindhunter_0_E1.mp3,0,Original,42\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Mindhunter_0_E1.mp3,0,1stDegradation,42\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Mindhunter_0_E1.mp3,0,2ndDegradation,42\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/1stDegradation/NYPDBlue_0_E1.mp3,0,1stDegradation,43\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/NYPDBlue_0_E1.mp3,0,2ndDegradation,43\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/Original/NYPDBlue_0_E1.mp3,0,Original,43\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/NYPDBlue_1_E1.mp3,0,2ndDegradation,44\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/Original/NYPDBlue_1_E1.mp3,0,Original,44\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/1stDegradation/NYPDBlue_1_E1.mp3,0,1stDegradation,44\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_12_E1.mp3,0,2ndDegradation,45\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_12_E1.mp3,0,1stDegradation,45\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_12_E1.mp3,0,Original,45\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_1_E1.mp3,0,1stDegradation,46\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_1_E1.mp3,0,Original,46\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_1_E1.mp3,0,2ndDegradation,46\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/Original/Riverdale_2_E1.mp3,0,Original,47\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Riverdale_2_E1.mp3,0,2ndDegradation,47\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Riverdale_2_E1.mp3,0,1stDegradation,47\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/Original/Roseanne_0_E1.mp3,0,Original,48\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_0_E1.mp3,0,2ndDegradation,48\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_0_E1.mp3,0,1stDegradation,48\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_1_E1.mp3,0,1stDegradation,49\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/Original/Roseanne_1_E1.mp3,0,Original,49\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_1_E1.mp3,0,2ndDegradation,49\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_2_E1.mp3,0,2ndDegradation,50\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/Original/Roseanne_2_E1.mp3,0,Original,50\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_2_E1.mp3,0,1stDegradation,50\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_0_E1.mp3,0,2ndDegradation,51\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_0_E1.mp3,0,1stDegradation,51\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_0_E1.mp3,0,Original,51\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_1_E1.mp3,0,2ndDegradation,52\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_1_E1.mp3,0,Original,52\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_1_E1.mp3,0,1stDegradation,52\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_2_E1.mp3,0,Original,53\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_2_E1.mp3,0,1stDegradation,53\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_2_E1.mp3,0,2ndDegradation,53\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/Original/SenseEight_1_E1.mp3,0,Original,54\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_1_E1.mp3,0,2ndDegradation,54\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_1_E1.mp3,0,1stDegradation,54\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_2_E1.mp3,0,2ndDegradation,55\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_2_E1.mp3,0,1stDegradation,55\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/Original/SenseEight_2_E1.mp3,0,Original,55\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/Original/SenseEight_3_E1.mp3,0,Original,56\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_3_E1.mp3,0,1stDegradation,56\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_3_E1.mp3,0,2ndDegradation,56\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Sherlock_1_E1.mp3,0,1stDegradation,57\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/Original/Sherlock_1_E1.mp3,0,Original,57\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Sherlock_1_E1.mp3,0,2ndDegradation,57\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Sherlock_2_E1.mp3,0,2ndDegradation,58\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/Original/Sherlock_2_E1.mp3,0,Original,58\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Sherlock_2_E1.mp3,0,1stDegradation,58\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_0_E1.mp3,0,Original,59\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_0_E1.mp3,0,1stDegradation,59\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_0_E1.mp3,0,2ndDegradation,59\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_12_E1.mp3,0,Original,60\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_12_E1.mp3,0,2ndDegradation,60\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_12_E1.mp3,0,1stDegradation,60\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_13_E1.mp3,0,Original,61\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_13_E1.mp3,0,1stDegradation,61\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_13_E1.mp3,0,2ndDegradation,61\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_1_E1.mp3,0,2ndDegradation,62\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_1_E1.mp3,0,1stDegradation,62\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_1_E1.mp3,0,Original,62\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/Original/Succession_1_E1.mp3,0,Original,63\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_1_E1.mp3,0,2ndDegradation,63\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_1_E1.mp3,0,1stDegradation,63\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_2_E1.mp3,0,1stDegradation,64\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_2_E1.mp3,0,2ndDegradation,64\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/Original/Succession_2_E1.mp3,0,Original,64\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_3_E1.mp3,0,1stDegradation,65\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_3_E1.mp3,0,2ndDegradation,65\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/Original/Succession_3_E1.mp3,0,Original,65\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_0_E1.mp3,0,2ndDegradation,66\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_0_E1.mp3,0,1stDegradation,66\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/Original/Supergirl_0_E1.mp3,0,Original,66\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_1_E1.mp3,0,1stDegradation,67\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/Original/Supergirl_1_E1.mp3,0,Original,67\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_1_E1.mp3,0,2ndDegradation,67\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_2_E1.mp3,0,2ndDegradation,68\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/Original/Supergirl_2_E1.mp3,0,Original,68\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_2_E1.mp3,0,1stDegradation,68\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TeenWolf_1_E1.mp3,0,2ndDegradation,69\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TeenWolf_1_E1.mp3,0,1stDegradation,69\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/Original/TeenWolf_1_E1.mp3,0,Original,69\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/Original/TheCrown_3_E1.mp3,0,Original,70\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/1stDegradation/TheCrown_3_E1.mp3,0,1stDegradation,70\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheCrown_3_E1.mp3,0,2ndDegradation,70\r\ndefault,TheFlash_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_2_E1.mp3,0,2ndDegradation,71\r\ndefault,TheFlash_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_2_E1.mp3,0,1stDegradation,71\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/Original/TheFlash_4_E1.mp3,0,Original,72\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_4_E1.mp3,0,2ndDegradation,72\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_4_E1.mp3,0,1stDegradation,72\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/Original/TheFlash_6_E1.mp3,0,Original,73\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_6_E1.mp3,0,1stDegradation,73\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_6_E1.mp3,0,2ndDegradation,73\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/Original/TheHauntingofHillHouse_0_E1.mp3,0,Original,74\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TheHauntingofHillHouse_0_E1.mp3,0,1stDegradation,74\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheHauntingofHillHouse_0_E1.mp3,0,2ndDegradation,74\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TheMentalist_0_E1.mp3,0,1stDegradation,75\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheMentalist_0_E1.mp3,0,2ndDegradation,75\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/Original/TheMentalist_0_E1.mp3,0,Original,75\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/Original/TheMentalist_2_E1.mp3,0,Original,76\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheMentalist_2_E1.mp3,0,1stDegradation,76\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheMentalist_2_E1.mp3,0,2ndDegradation,76\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/Original/ThePunisher_1_E1.mp3,0,Original,77\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThePunisher_1_E1.mp3,0,2ndDegradation,77\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ThePunisher_1_E1.mp3,0,1stDegradation,77\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/Original/ThePunisher_3_E1.mp3,0,Original,78\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/1stDegradation/ThePunisher_3_E1.mp3,0,1stDegradation,78\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThePunisher_3_E1.mp3,0,2ndDegradation,78\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/Original/TheVampireDiaries_4_E1.mp3,0,Original,79\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TheVampireDiaries_4_E1.mp3,0,1stDegradation,79\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheVampireDiaries_4_E1.mp3,0,2ndDegradation,79\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/Original/TheWalkingDead_12_E1.mp3,0,Original,80\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWalkingDead_12_E1.mp3,0,1stDegradation,80\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWalkingDead_12_E1.mp3,0,2ndDegradation,80\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWalkingDead_1_E1.mp3,0,2ndDegradation,81\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWalkingDead_1_E1.mp3,0,1stDegradation,81\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/Original/TheWalkingDead_1_E1.mp3,0,Original,81\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/Original/TheWestWing_1_E1.mp3,0,Original,82\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWestWing_1_E1.mp3,0,1stDegradation,82\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWestWing_1_E1.mp3,0,2ndDegradation,82\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWestWing_2_E1.mp3,0,1stDegradation,83\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/Original/TheWestWing_2_E1.mp3,0,Original,83\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWestWing_2_E1.mp3,0,2ndDegradation,83\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_0_E1.mp3,0,2ndDegradation,84\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_0_E1.mp3,0,1stDegradation,84\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_0_E1.mp3,0,Original,84\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_1_E1.mp3,0,1stDegradation,85\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_1_E1.mp3,0,Original,85\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_1_E1.mp3,0,2ndDegradation,85\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_2_E1.mp3,0,1stDegradation,86\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_2_E1.mp3,0,Original,86\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_2_E1.mp3,0,2ndDegradation,86\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/Original/Transparent_1_E1.mp3,0,Original,87\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Transparent_1_E1.mp3,0,1stDegradation,87\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Transparent_1_E1.mp3,0,2ndDegradation,87\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_0_E1.mp3,0,Original,88\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_0_E1.mp3,0,1stDegradation,88\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_0_E1.mp3,0,2ndDegradation,88\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_4_E1.mp3,0,Original,89\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_4_E1.mp3,0,1stDegradation,89\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_4_E1.mp3,0,2ndDegradation,89\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/WalkingDead_0_E1.mp3,0,2ndDegradation,90\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/Original/WalkingDead_0_E1.mp3,0,Original,90\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/1stDegradation/WalkingDead_0_E1.mp3,0,1stDegradation,90\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Westworld_2_E1.mp3,0,1stDegradation,91\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Westworld_2_E1.mp3,0,2ndDegradation,91\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/Original/Westworld_2_E1.mp3,0,Original,91\r\n" + "csv": "default,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/1stDegradation/AgentsofSHIELD_52_E1.mp3,1stDegradation,0\r\ndefault,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/2ndDegradation/AgentsofSHIELD_52_E1.mp3,2ndDegradation,0\r\ndefault,AgentsofSHIELD_52_E1,0.0,10.0,MatchingPairs/Original/AgentsofSHIELD_52_E1.mp3,Original,0\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/Original/AgentsofSHIELD_5_E1.mp3,Original,1\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/2ndDegradation/AgentsofSHIELD_5_E1.mp3,2ndDegradation,1\r\ndefault,AgentsofSHIELD_5_E1,0.0,10.0,MatchingPairs/1stDegradation/AgentsofSHIELD_5_E1.mp3,1stDegradation,1\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Arrow_2_E1.mp3,2ndDegradation,2\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Arrow_2_E1.mp3,1stDegradation,2\r\ndefault,Arrow_2_E1,0.0,10.0,MatchingPairs/Original/Arrow_2_E1.mp3,Original,2\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/1stDegradation/BoJack_1_E1.mp3,1stDegradation,4\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/BoJack_1_E1.mp3,2ndDegradation,4\r\ndefault,BoJack_1_E1,0.0,10.0,MatchingPairs/Original/BoJack_1_E1.mp3,Original,4\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/BoJackHorseman_0_E1.mp3,2ndDegradation,3\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/1stDegradation/BoJackHorseman_0_E1.mp3,1stDegradation,3\r\ndefault,BoJackHorseman_0_E1,0.0,10.0,MatchingPairs/Original/BoJackHorseman_0_E1.mp3,Original,3\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/BreakingBad_3_E1.mp3,2ndDegradation,5\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/Original/BreakingBad_3_E1.mp3,Original,5\r\ndefault,BreakingBad_3_E1,0.0,10.0,MatchingPairs/1stDegradation/BreakingBad_3_E1.mp3,1stDegradation,5\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Crown_1_E1.mp3,1stDegradation,6\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Crown_1_E1.mp3,2ndDegradation,6\r\ndefault,Crown_1_E1,0.0,10.0,MatchingPairs/Original/Crown_1_E1.mp3,Original,6\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/Original/Dallas_1_E1.mp3,Original,7\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Dallas_1_E1.mp3,1stDegradation,7\r\ndefault,Dallas_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dallas_1_E1.mp3,2ndDegradation,7\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/Original/Dallas_2_E1.mp3,Original,8\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dallas_2_E1.mp3,2ndDegradation,8\r\ndefault,Dallas_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Dallas_2_E1.mp3,1stDegradation,8\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_0_E1.mp3,1stDegradation,9\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_0_E1.mp3,2ndDegradation,9\r\ndefault,Daredevil_0_E1,0.0,10.0,MatchingPairs/Original/Daredevil_0_E1.mp3,Original,9\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/Original/Daredevil_1_E1.mp3,Original,10\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_1_E1.mp3,1stDegradation,10\r\ndefault,Daredevil_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_1_E1.mp3,2ndDegradation,10\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Daredevil_2_E1.mp3,2ndDegradation,11\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/Original/Daredevil_2_E1.mp3,Original,11\r\ndefault,Daredevil_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Daredevil_2_E1.mp3,1stDegradation,11\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/Original/Deadwood_1_E1.mp3,Original,12\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Deadwood_1_E1.mp3,2ndDegradation,12\r\ndefault,Deadwood_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Deadwood_1_E1.mp3,1stDegradation,12\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/Original/Deadwood_3_E1.mp3,Original,13\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Deadwood_3_E1.mp3,1stDegradation,13\r\ndefault,Deadwood_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Deadwood_3_E1.mp3,2ndDegradation,13\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/Original/Dexter_1_E1.mp3,Original,14\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Dexter_1_E1.mp3,1stDegradation,14\r\ndefault,Dexter_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dexter_1_E1.mp3,2ndDegradation,14\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/Original/Dexter_3_E1.mp3,Original,15\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Dexter_3_E1.mp3,1stDegradation,15\r\ndefault,Dexter_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Dexter_3_E1.mp3,2ndDegradation,15\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/1stDegradation/DoctorWho_1_E1.mp3,1stDegradation,16\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/DoctorWho_1_E1.mp3,2ndDegradation,16\r\ndefault,DoctorWho_1_E1,0.0,10.0,MatchingPairs/Original/DoctorWho_1_E1.mp3,Original,16\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/DoctorWho_2_E1.mp3,2ndDegradation,17\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/Original/DoctorWho_2_E1.mp3,Original,17\r\ndefault,DoctorWho_2_E1,0.0,10.0,MatchingPairs/1stDegradation/DoctorWho_2_E1.mp3,1stDegradation,17\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/DowntownAbbey_2_E1.mp3,2ndDegradation,18\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/Original/DowntownAbbey_2_E1.mp3,Original,18\r\ndefault,DowntownAbbey_2_E1,0.0,10.0,MatchingPairs/1stDegradation/DowntownAbbey_2_E1.mp3,1stDegradation,18\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/1stDegradation/ER_0_E1.mp3,1stDegradation,19\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/2ndDegradation/ER_0_E1.mp3,2ndDegradation,19\r\ndefault,ER_0_E1,0.0,11.0,MatchingPairs/Original/ER_0_E1.mp3,Original,19\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_1_E1.mp3,2ndDegradation,20\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/Original/ER_1_E1.mp3,Original,20\r\ndefault,ER_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_1_E1.mp3,1stDegradation,20\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/Original/ER_2_E1.mp3,Original,21\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ER_2_E1.mp3,1stDegradation,21\r\ndefault,ER_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ER_2_E1.mp3,2ndDegradation,21\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Fargo_1_E1.mp3,1stDegradation,22\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Fargo_1_E1.mp3,2ndDegradation,22\r\ndefault,Fargo_1_E1,0.0,10.0,MatchingPairs/Original/Fargo_1_E1.mp3,Original,22\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Fargo_2_E1.mp3,2ndDegradation,23\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/Original/Fargo_2_E1.mp3,Original,23\r\ndefault,Fargo_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Fargo_2_E1.mp3,1stDegradation,23\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/1stDegradation/FridayNightLights_1_E1.mp3,1stDegradation,24\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/FridayNightLights_1_E1.mp3,2ndDegradation,24\r\ndefault,FridayNightLights_1_E1,0.0,10.0,MatchingPairs/Original/FridayNightLights_1_E1.mp3,Original,24\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/1stDegradation/FridayNightLights_2_E1.mp3,1stDegradation,25\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/FridayNightLights_2_E1.mp3,2ndDegradation,25\r\ndefault,FridayNightLights_2_E1,0.0,10.0,MatchingPairs/Original/FridayNightLights_2_E1.mp3,Original,25\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_1_E1.mp3,Original,26\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_1_E1.mp3,2ndDegradation,26\r\ndefault,GameOfThrones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_1_E1.mp3,1stDegradation,26\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/Original/GameOfThrones_2_E1.mp3,Original,27\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/GameOfThrones_2_E1.mp3,2ndDegradation,27\r\ndefault,GameOfThrones_2_E1,0.0,10.0,MatchingPairs/1stDegradation/GameOfThrones_2_E1.mp3,1stDegradation,27\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/Original/HaltAndCatchFire_12_E1.mp3,Original,28\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/1stDegradation/HaltAndCatchFire_12_E1.mp3,1stDegradation,28\r\ndefault,HaltAndCatchFire_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/HaltAndCatchFire_12_E1.mp3,2ndDegradation,28\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/HaltAndCatchFire_1_E1.mp3,2ndDegradation,29\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/Original/HaltAndCatchFire_1_E1.mp3,Original,29\r\ndefault,HaltAndCatchFire_1_E1,0.0,10.0,MatchingPairs/1stDegradation/HaltAndCatchFire_1_E1.mp3,1stDegradation,29\r\ndefault,heFlash_2_E1,0.0,10.0,MatchingPairs/Original/heFlash_2_E1.mp3,Original,71\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/Original/HouseofCards_12_E1.mp3,Original,30\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/HouseofCards_12_E1.mp3,2ndDegradation,30\r\ndefault,HouseofCards_12_E1,0.0,10.0,MatchingPairs/1stDegradation/HouseofCards_12_E1.mp3,1stDegradation,30\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/1stDegradation/HouseofCards_1_E1.mp3,1stDegradation,31\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/HouseofCards_1_E1.mp3,2ndDegradation,31\r\ndefault,HouseofCards_1_E1,0.0,10.0,MatchingPairs/Original/HouseofCards_1_E1.mp3,Original,31\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/IronFist_2_E1.mp3,2ndDegradation,32\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/Original/IronFist_2_E1.mp3,Original,32\r\ndefault,IronFist_2_E1,0.0,10.0,MatchingPairs/1stDegradation/IronFist_2_E1.mp3,1stDegradation,32\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/Original/IronFist_3_E1.mp3,Original,33\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/1stDegradation/IronFist_3_E1.mp3,1stDegradation,33\r\ndefault,IronFist_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/IronFist_3_E1.mp3,2ndDegradation,33\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,2ndDegradation,34\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,1stDegradation,34\r\ndefault,ItsAlwaysSunnyInPhiladephia_1_E1,0.0,10.0,MatchingPairs/Original/ItsAlwaysSunnyInPhiladephia_1_E1.mp3,Original,34\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_0_E1.mp3,Original,35\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_0_E1.mp3,2ndDegradation,35\r\ndefault,JessicaJones_0_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_0_E1.mp3,1stDegradation,35\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_1_E1.mp3,2ndDegradation,36\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_1_E1.mp3,Original,36\r\ndefault,JessicaJones_1_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_1_E1.mp3,1stDegradation,36\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/JessicaJones_2_E1.mp3,2ndDegradation,37\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/1stDegradation/JessicaJones_2_E1.mp3,1stDegradation,37\r\ndefault,JessicaJones_2_E1,0.0,10.0,MatchingPairs/Original/JessicaJones_2_E1.mp3,Original,37\r\ndefault,LukeCage_0_E1,0.0,10.0,MatchingPairs/Original/LukeCage_0_E1.mp3,Original,38\r\ndefault,Luke_Cage_E1,0.0,10.0,MatchingPairs/2ndDegradation/Luke_Cage_E1.mp3,2ndDegradation,38\r\ndefault,Luke_Cage_E1,0.0,10.0,MatchingPairs/1stDegradation/Luke_Cage_E1.mp3,1stDegradation,38\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/Original/MadMen_1_E1.mp3,Original,41\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/1stDegradation/MadMen_1_E1.mp3,1stDegradation,41\r\ndefault,MadMen_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/MadMen_1_E1.mp3,2ndDegradation,41\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/1stDegradation/MASH_12_E1.mp3,1stDegradation,39\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/MASH_12_E1.mp3,2ndDegradation,39\r\ndefault,MASH_12_E1,0.0,10.0,MatchingPairs/Original/MASH_12_E1.mp3,Original,39\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/Original/MASH_1_E1.mp3,Original,40\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/1stDegradation/MASH_1_E1.mp3,1stDegradation,40\r\ndefault,MASH_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/MASH_1_E1.mp3,2ndDegradation,40\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/Original/Mindhunter_0_E1.mp3,Original,42\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Mindhunter_0_E1.mp3,1stDegradation,42\r\ndefault,Mindhunter_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Mindhunter_0_E1.mp3,2ndDegradation,42\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/1stDegradation/NYPDBlue_0_E1.mp3,1stDegradation,43\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/NYPDBlue_0_E1.mp3,2ndDegradation,43\r\ndefault,NYPDBlue_0_E1,0.0,10.0,MatchingPairs/Original/NYPDBlue_0_E1.mp3,Original,43\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/NYPDBlue_1_E1.mp3,2ndDegradation,44\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/Original/NYPDBlue_1_E1.mp3,Original,44\r\ndefault,NYPDBlue_1_E1,0.0,10.0,MatchingPairs/1stDegradation/NYPDBlue_1_E1.mp3,1stDegradation,44\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_12_E1.mp3,2ndDegradation,45\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_12_E1.mp3,1stDegradation,45\r\ndefault,RickandMorty_12_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_12_E1.mp3,Original,45\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/1stDegradation/RickandMorty_1_E1.mp3,1stDegradation,46\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/Original/RickandMorty_1_E1.mp3,Original,46\r\ndefault,RickandMorty_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/RickandMorty_1_E1.mp3,2ndDegradation,46\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/Original/Riverdale_2_E1.mp3,Original,47\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Riverdale_2_E1.mp3,2ndDegradation,47\r\ndefault,Riverdale_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Riverdale_2_E1.mp3,1stDegradation,47\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/Original/Roseanne_0_E1.mp3,Original,48\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_0_E1.mp3,2ndDegradation,48\r\ndefault,Roseanne_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_0_E1.mp3,1stDegradation,48\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_1_E1.mp3,1stDegradation,49\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/Original/Roseanne_1_E1.mp3,Original,49\r\ndefault,Roseanne_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_1_E1.mp3,2ndDegradation,49\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Roseanne_2_E1.mp3,2ndDegradation,50\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/Original/Roseanne_2_E1.mp3,Original,50\r\ndefault,Roseanne_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Roseanne_2_E1.mp3,1stDegradation,50\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_0_E1.mp3,2ndDegradation,51\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_0_E1.mp3,1stDegradation,51\r\ndefault,Seinfeld_0_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_0_E1.mp3,Original,51\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_1_E1.mp3,2ndDegradation,52\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_1_E1.mp3,Original,52\r\ndefault,Seinfeld_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_1_E1.mp3,1stDegradation,52\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/Original/Seinfeld_2_E1.mp3,Original,53\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Seinfeld_2_E1.mp3,1stDegradation,53\r\ndefault,Seinfeld_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Seinfeld_2_E1.mp3,2ndDegradation,53\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/Original/SenseEight_1_E1.mp3,Original,54\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_1_E1.mp3,2ndDegradation,54\r\ndefault,SenseEight_1_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_1_E1.mp3,1stDegradation,54\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_2_E1.mp3,2ndDegradation,55\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_2_E1.mp3,1stDegradation,55\r\ndefault,SenseEight_2_E1,0.0,10.0,MatchingPairs/Original/SenseEight_2_E1.mp3,Original,55\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/Original/SenseEight_3_E1.mp3,Original,56\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/1stDegradation/SenseEight_3_E1.mp3,1stDegradation,56\r\ndefault,SenseEight_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/SenseEight_3_E1.mp3,2ndDegradation,56\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Sherlock_1_E1.mp3,1stDegradation,57\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/Original/Sherlock_1_E1.mp3,Original,57\r\ndefault,Sherlock_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Sherlock_1_E1.mp3,2ndDegradation,57\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Sherlock_2_E1.mp3,2ndDegradation,58\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/Original/Sherlock_2_E1.mp3,Original,58\r\ndefault,Sherlock_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Sherlock_2_E1.mp3,1stDegradation,58\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_0_E1.mp3,Original,59\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_0_E1.mp3,1stDegradation,59\r\ndefault,SixFeetUnder_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_0_E1.mp3,2ndDegradation,59\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_12_E1.mp3,Original,60\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_12_E1.mp3,2ndDegradation,60\r\ndefault,SixFeetUnder_12_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_12_E1.mp3,1stDegradation,60\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_13_E1.mp3,Original,61\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_13_E1.mp3,1stDegradation,61\r\ndefault,SixFeetUnder_13_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_13_E1.mp3,2ndDegradation,61\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/SixFeetUnder_1_E1.mp3,2ndDegradation,62\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/1stDegradation/SixFeetUnder_1_E1.mp3,1stDegradation,62\r\ndefault,SixFeetUnder_1_E1,0.0,10.0,MatchingPairs/Original/SixFeetUnder_1_E1.mp3,Original,62\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/Original/Succession_1_E1.mp3,Original,63\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_1_E1.mp3,2ndDegradation,63\r\ndefault,Succession_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_1_E1.mp3,1stDegradation,63\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_2_E1.mp3,1stDegradation,64\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_2_E1.mp3,2ndDegradation,64\r\ndefault,Succession_2_E1,0.0,10.0,MatchingPairs/Original/Succession_2_E1.mp3,Original,64\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/1stDegradation/Succession_3_E1.mp3,1stDegradation,65\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/Succession_3_E1.mp3,2ndDegradation,65\r\ndefault,Succession_3_E1,0.0,10.0,MatchingPairs/Original/Succession_3_E1.mp3,Original,65\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_0_E1.mp3,2ndDegradation,66\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_0_E1.mp3,1stDegradation,66\r\ndefault,Supergirl_0_E1,0.0,10.0,MatchingPairs/Original/Supergirl_0_E1.mp3,Original,66\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_1_E1.mp3,1stDegradation,67\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/Original/Supergirl_1_E1.mp3,Original,67\r\ndefault,Supergirl_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_1_E1.mp3,2ndDegradation,67\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Supergirl_2_E1.mp3,2ndDegradation,68\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/Original/Supergirl_2_E1.mp3,Original,68\r\ndefault,Supergirl_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Supergirl_2_E1.mp3,1stDegradation,68\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TeenWolf_1_E1.mp3,2ndDegradation,69\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TeenWolf_1_E1.mp3,1stDegradation,69\r\ndefault,TeenWolf_1_E1,0.0,10.0,MatchingPairs/Original/TeenWolf_1_E1.mp3,Original,69\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/Original/TheCrown_3_E1.mp3,Original,70\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/1stDegradation/TheCrown_3_E1.mp3,1stDegradation,70\r\ndefault,TheCrown_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheCrown_3_E1.mp3,2ndDegradation,70\r\ndefault,TheFlash_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_2_E1.mp3,2ndDegradation,71\r\ndefault,TheFlash_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_2_E1.mp3,1stDegradation,71\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/Original/TheFlash_4_E1.mp3,Original,72\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_4_E1.mp3,2ndDegradation,72\r\ndefault,TheFlash_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_4_E1.mp3,1stDegradation,72\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/Original/TheFlash_6_E1.mp3,Original,73\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/1stDegradation/TheFlash_6_E1.mp3,1stDegradation,73\r\ndefault,TheFlash_6_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheFlash_6_E1.mp3,2ndDegradation,73\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/Original/TheHauntingofHillHouse_0_E1.mp3,Original,74\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TheHauntingofHillHouse_0_E1.mp3,1stDegradation,74\r\ndefault,TheHauntingofHillHouse_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheHauntingofHillHouse_0_E1.mp3,2ndDegradation,74\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TheMentalist_0_E1.mp3,1stDegradation,75\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheMentalist_0_E1.mp3,2ndDegradation,75\r\ndefault,TheMentalist_0_E1,0.0,10.0,MatchingPairs/Original/TheMentalist_0_E1.mp3,Original,75\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/Original/TheMentalist_2_E1.mp3,Original,76\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheMentalist_2_E1.mp3,1stDegradation,76\r\ndefault,TheMentalist_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheMentalist_2_E1.mp3,2ndDegradation,76\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/Original/ThePunisher_1_E1.mp3,Original,77\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThePunisher_1_E1.mp3,2ndDegradation,77\r\ndefault,ThePunisher_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ThePunisher_1_E1.mp3,1stDegradation,77\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/Original/ThePunisher_3_E1.mp3,Original,78\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/1stDegradation/ThePunisher_3_E1.mp3,1stDegradation,78\r\ndefault,ThePunisher_3_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThePunisher_3_E1.mp3,2ndDegradation,78\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/Original/TheVampireDiaries_4_E1.mp3,Original,79\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TheVampireDiaries_4_E1.mp3,1stDegradation,79\r\ndefault,TheVampireDiaries_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheVampireDiaries_4_E1.mp3,2ndDegradation,79\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/Original/TheWalkingDead_12_E1.mp3,Original,80\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWalkingDead_12_E1.mp3,1stDegradation,80\r\ndefault,TheWalkingDead_12_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWalkingDead_12_E1.mp3,2ndDegradation,80\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWalkingDead_1_E1.mp3,2ndDegradation,81\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWalkingDead_1_E1.mp3,1stDegradation,81\r\ndefault,TheWalkingDead_1_E1,0.0,10.0,MatchingPairs/Original/TheWalkingDead_1_E1.mp3,Original,81\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/Original/TheWestWing_1_E1.mp3,Original,82\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWestWing_1_E1.mp3,1stDegradation,82\r\ndefault,TheWestWing_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWestWing_1_E1.mp3,2ndDegradation,82\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/1stDegradation/TheWestWing_2_E1.mp3,1stDegradation,83\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/Original/TheWestWing_2_E1.mp3,Original,83\r\ndefault,TheWestWing_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/TheWestWing_2_E1.mp3,2ndDegradation,83\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_0_E1.mp3,2ndDegradation,84\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_0_E1.mp3,1stDegradation,84\r\ndefault,ThirtySomething_0_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_0_E1.mp3,Original,84\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_1_E1.mp3,1stDegradation,85\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_1_E1.mp3,Original,85\r\ndefault,ThirtySomething_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_1_E1.mp3,2ndDegradation,85\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/1stDegradation/ThirtySomething_2_E1.mp3,1stDegradation,86\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/Original/ThirtySomething_2_E1.mp3,Original,86\r\ndefault,ThirtySomething_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/ThirtySomething_2_E1.mp3,2ndDegradation,86\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/Original/Transparent_1_E1.mp3,Original,87\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/1stDegradation/Transparent_1_E1.mp3,1stDegradation,87\r\ndefault,Transparent_1_E1,0.0,10.0,MatchingPairs/2ndDegradation/Transparent_1_E1.mp3,2ndDegradation,87\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_0_E1.mp3,Original,88\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_0_E1.mp3,1stDegradation,88\r\ndefault,TwinPeaks_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_0_E1.mp3,2ndDegradation,88\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/Original/TwinPeaks_4_E1.mp3,Original,89\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/1stDegradation/TwinPeaks_4_E1.mp3,1stDegradation,89\r\ndefault,TwinPeaks_4_E1,0.0,10.0,MatchingPairs/2ndDegradation/TwinPeaks_4_E1.mp3,2ndDegradation,89\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/2ndDegradation/WalkingDead_0_E1.mp3,2ndDegradation,90\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/Original/WalkingDead_0_E1.mp3,Original,90\r\ndefault,WalkingDead_0_E1,0.0,10.0,MatchingPairs/1stDegradation/WalkingDead_0_E1.mp3,1stDegradation,90\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/1stDegradation/Westworld_2_E1.mp3,1stDegradation,91\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/2ndDegradation/Westworld_2_E1.mp3,2ndDegradation,91\r\ndefault,Westworld_2_E1,0.0,10.0,MatchingPairs/Original/Westworld_2_E1.mp3,Original,91\r\n" } }, { @@ -131,7 +131,7 @@ "fields": { "name": "AudioSetup", "process_csv": false, - "csv": "audiocheck,audiocheck,27.0,15.0,https://audiocheck-1316713990.cos.ap-guangzhou.myqcloud.com/audiocheck.mp3,0,0,v1\r\n" + "csv": "audiocheck,audiocheck,27.0,15.0,https://audiocheck-1316713990.cos.ap-guangzhou.myqcloud.com/audiocheck.mp3,0,v1\r\n" } }, { @@ -140,7 +140,7 @@ "fields": { "name": "Eurovision 2021", "process_csv": false, - "csv": "Albania 2018 - Eugent Bushpepa,Mall,7.046,45.0,Set 2/V1/2018-11-00-07-046-v1.mp3,0,1,201811007\r\nAlbania 2018 - Eugent Bushpepa,Mall,7.046,45.0,Set 2/Karaoke/2018-11-00-07-046-k.mp3,0,3,201811007\r\nAlbania 2018 - Eugent Bushpepa,Mall,49.053,45.0,Free Excerpts/2018-11-00-49-053-c1.mp3,0,0,201811049\r\nAlbania 2018 - Eugent Bushpepa,Mall,81.788,45.0,Set 2/V2/2018-11-01-21-788-v2.mp3,0,2,201811082\r\nAlbania 2018 - Eugent Bushpepa,Mall,113.647,45.0,Free Excerpts/2018-11-01-53-647-b.mp3,0,0,201811114\r\nAlbania 2018 - Eugent Bushpepa,Mall,132.505,45.0,Free Excerpts/2018-11-02-12-505-c2.mp3,0,0,201811133\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,0.0,45.0,Free Excerpts/2019-17-00-00-000-i.mp3,0,0,201917000\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,4.021,45.0,Free Excerpts/2019-17-00-04-021-v1.mp3,0,0,201917004\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,36.829,45.0,Free Excerpts/2019-17-00-36-829-pc.mp3,0,0,201917037\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,52.703,45.0,Free Excerpts/2019-17-00-52-703-c1.mp3,0,0,201917053\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,85.722,45.0,Free Excerpts/2019-17-01-25-722-b1.mp3,0,0,201917086\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,114.295,45.0,Free Excerpts/2019-17-01-54-295-b2.mp3,0,0,201917114\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,146.891,45.0,Free Excerpts/2019-17-02-26-891-c2.mp3,0,0,201917147\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,1.427,45.0,Free Excerpts/2016-07-00-01-427-v1.mp3,0,0,201607001\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,16.1,45.0,Free Excerpts/2016-07-00-16-100-v1.mp3,0,0,201607016\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,50.034,45.0,Free Excerpts/2016-07-00-50-034-c.mp3,0,0,201607050\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,86.209,45.0,Free Excerpts/2016-07-01-26-209-v2.mp3,0,0,201607086\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,118.002,45.0,Free Excerpts/2016-07-01-58-002-pc.mp3,0,0,201607118\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,132.574,45.0,Free Excerpts/2016-07-02-12-574-c2.mp3,0,0,201607133\r\nArmenia 2017 - Artsvik,Fly With Me,0.0,45.0,Free Excerpts/2017-18-00-00-000-i.mp3,0,0,201718000\r\nArmenia 2017 - Artsvik,Fly With Me,33.569,45.0,Set 2/Karaoke/2017-18-00-33-569-k.mp3,0,3,201718034\r\nArmenia 2017 - Artsvik,Fly With Me,33.569,45.0,Set 2/V1/2017-18-00-33-569-v1.mp3,0,1,201718034\r\nArmenia 2017 - Artsvik,Fly With Me,76.385,45.0,Set 2/V2/2017-18-01-16-385-v2.mp3,0,2,201718076\r\nArmenia 2017 - Artsvik,Fly With Me,97.099,45.0,Free Excerpts/2017-18-01-37-099-c1.mp3,0,0,201718097\r\nArmenia 2017 - Artsvik,Fly With Me,129.515,45.0,Free Excerpts/2017-18-02-09-515-o.mp3,0,0,201718130\r\nAustralia 2016 - Dami Im,Sound of Silence,3.149,45.0,Free Excerpts/2016-02-00-03-149-v1.mp3,0,0,201602003\r\nAustralia 2016 - Dami Im,Sound of Silence,30.549,45.0,Free Excerpts/2016-02-00-30-549-pc.mp3,0,0,201602031\r\nAustralia 2016 - Dami Im,Sound of Silence,37.843,45.0,Free Excerpts/2016-02-00-37-843-c1.mp3,0,0,201602038\r\nAustralia 2016 - Dami Im,Sound of Silence,66.557,45.0,Free Excerpts/2016-02-01-06-557-v2.mp3,0,0,201602067\r\nAustralia 2016 - Dami Im,Sound of Silence,130.28,45.0,Free Excerpts/2016-02-02-10-280-b.mp3,0,0,201602130\r\nAustralia 2016 - Dami Im,Sound of Silence,150.541,45.0,Free Excerpts/2016-02-02-30-541-c2.mp3,0,0,201602151\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,0.0,45.0,Set 2/Karaoke/2017-09-00-00-000-k.mp3,0,3,201709000\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,0.0,45.0,Set 2/V1/2017-09-00-00-000-v1.mp3,0,1,201709000\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,23.368,45.0,Free Excerpts/2017-09-00-23-368-c1.mp3,0,0,201709023\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,52.023,45.0,Set 2/V2/2017-09-00-52-023-v2.mp3,0,2,201709052\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,74.848,45.0,Free Excerpts/2017-09-01-14-848-c2.mp3,0,0,201709075\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,101.346,45.0,Free Excerpts/2017-09-01-41-346-b.mp3,0,0,201709101\r\nAustralia 2018 - Jessica Mauboy,We Got Love,0.0,45.0,Free Excerpts/2018-20-00-00-000-v1.mp3,0,0,201820000\r\nAustralia 2018 - Jessica Mauboy,We Got Love,33.716,45.0,Free Excerpts/2018-20-00-33-716-c1.mp3,0,0,201820034\r\nAustralia 2018 - Jessica Mauboy,We Got Love,66.966,45.0,Free Excerpts/2018-20-01-06-966-v2.mp3,0,0,201820067\r\nAustralia 2018 - Jessica Mauboy,We Got Love,101.212,45.0,Free Excerpts/2018-20-01-41-212-c2.mp3,0,0,201820101\r\nAustralia 2018 - Jessica Mauboy,We Got Love,133.562,45.0,Free Excerpts/2018-20-02-13-562-b.mp3,0,0,201820134\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,0.0,45.0,Free Excerpts/2019-09-00-00-000-v1.mp3,0,0,201909000\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,21.741,45.0,Free Excerpts/2019-09-00-21-741-pc.mp3,0,0,201909022\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,31.448,45.0,Free Excerpts/2019-09-00-31-448-c1.mp3,0,0,201909031\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,63.806,45.0,Free Excerpts/2019-09-01-03-806-v2.mp3,0,0,201909064\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,109.309,45.0,Free Excerpts/2019-09-01-49-309-b.mp3,0,0,201909109\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,140.151,45.0,Free Excerpts/2019-09-02-20-151-c2.mp3,0,0,201909140\r\nAustria 2016 - Zoë,Loin d'ici,3.827,45.0,Free Excerpts/2016-13-00-03-827-v1.mp3,0,0,201613004\r\nAustria 2016 - Zoë,Loin d'ici,27.098,45.0,Free Excerpts/2016-13-00-27-098-pc.mp3,0,0,201613027\r\nAustria 2016 - Zoë,Loin d'ici,39.199,45.0,Free Excerpts/2016-13-00-39-199-c1.mp3,0,0,201613039\r\nAustria 2016 - Zoë,Loin d'ici,55.023,45.0,Free Excerpts/2016-13-00-55-023-v2.mp3,0,0,201613055\r\nAustria 2016 - Zoë,Loin d'ici,120.39,45.0,Free Excerpts/2016-13-02-00-390-b.mp3,0,0,201613120\r\nAustria 2016 - Zoë,Loin d'ici,133.525,45.0,Free Excerpts/2016-13-02-13-525-c2.mp3,0,0,201613134\r\nAustria 2017 - Nathan Trent,Running On Air,0.0,45.0,Set 2/V1/2017-16-00-00-000-v1.mp3,0,1,201716000\r\nAustria 2017 - Nathan Trent,Running On Air,0.0,45.0,Set 2/Karaoke/2017-16-00-00-000-k.mp3,0,3,201716000\r\nAustria 2017 - Nathan Trent,Running On Air,20.602,45.0,Free Excerpts/2017-16-00-20-602-c1.mp3,0,0,201716021\r\nAustria 2017 - Nathan Trent,Running On Air,58.522,45.0,Set 2/V2/2017-16-00-58-522-v2.mp3,0,2,201716059\r\nAustria 2017 - Nathan Trent,Running On Air,79.068,45.0,Free Excerpts/2017-16-01-19-068-c2.mp3,0,0,201716079\r\nAustria 2017 - Nathan Trent,Running On Air,120.017,45.0,Free Excerpts/2017-16-02-00-017-o.mp3,0,0,201716120\r\nAustria 2018 - Cesár Sampson,Nobody But You,0.0,45.0,Free Excerpts/2018-03-00-00-000-v1.mp3,0,0,201803000\r\nAustria 2018 - Cesár Sampson,Nobody But You,34.092,45.0,Free Excerpts/2018-03-00-34-092-c1.mp3,0,0,201803034\r\nAustria 2018 - Cesár Sampson,Nobody But You,62.974,45.0,Free Excerpts/2018-03-01-02-974-v2.mp3,0,0,201803063\r\nAustria 2018 - Cesár Sampson,Nobody But You,96.036,45.0,Free Excerpts/2018-03-01-36-036-c2.mp3,0,0,201803096\r\nAustria 2018 - Cesár Sampson,Nobody But You,119.441,45.0,Free Excerpts/2018-03-01-59-441-o.mp3,0,0,201803119\r\nAzerbaijan 2016 - Samra,Miracle,4.7379999999999995,45.0,Free Excerpts/2016-17-00-04-738-v1.mp3,0,0,201617005\r\nAzerbaijan 2016 - Samra,Miracle,46.345,45.0,Free Excerpts/2016-17-00-46-345-c1.mp3,0,0,201617046\r\nAzerbaijan 2016 - Samra,Miracle,72.505,45.0,Free Excerpts/2016-17-01-12-505-v2.mp3,0,0,201617073\r\nAzerbaijan 2016 - Samra,Miracle,133.063,45.0,Free Excerpts/2016-17-02-13-063-b.mp3,0,0,201617133\r\nAzerbaijan 2016 - Samra,Miracle,153.249,45.0,Free Excerpts/2016-17-02-33-249-c2.mp3,0,0,201617153\r\nAzerbaijan 2017 - Dihaj,Skeletons,10.656,45.0,Set 2/Karaoke/2017-14-00-10-656-k.mp3,0,3,201714011\r\nAzerbaijan 2017 - Dihaj,Skeletons,10.656,45.0,Set 2/V1/2017-14-00-10-656-v1.mp3,0,1,201714011\r\nAzerbaijan 2017 - Dihaj,Skeletons,51.847,45.0,Free Excerpts/2017-14-00-51-847-c1.mp3,0,0,201714052\r\nAzerbaijan 2017 - Dihaj,Skeletons,79.996,45.0,Set 2/V2/2017-14-01-19-996-v2.mp3,0,2,201714080\r\nAzerbaijan 2017 - Dihaj,Skeletons,110.763,45.0,Free Excerpts/2017-14-01-50-763-c2.mp3,0,0,201714111\r\nAzerbaijan 2017 - Dihaj,Skeletons,134.072,45.0,Free Excerpts/2017-14-02-14-072-o.mp3,0,0,201714134\r\nAzerbaijan 2019 - Chingiz,Truth,8.422,45.0,Free Excerpts/2019-08-00-08-422-v1.mp3,0,0,201908008\r\nAzerbaijan 2019 - Chingiz,Truth,27.897,45.0,Free Excerpts/2019-08-00-27-897-pc.mp3,0,0,201908028\r\nAzerbaijan 2019 - Chingiz,Truth,47.162,45.0,Free Excerpts/2019-08-00-47-162-c1.mp3,0,0,201908047\r\nAzerbaijan 2019 - Chingiz,Truth,75.69,45.0,Free Excerpts/2019-08-01-15-690-v2.mp3,0,0,201908076\r\nAzerbaijan 2019 - Chingiz,Truth,133.169,45.0,Free Excerpts/2019-08-02-13-169-b.mp3,0,0,201908133\r\nAzerbaijan 2019 - Chingiz,Truth,142.433,45.0,Free Excerpts/2019-08-02-22-433-c2.mp3,0,0,201908142\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,23.808,45.0,Set 2/V1/2017-17-00-23-808-v1.mp3,0,1,201717024\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,23.808,45.0,Set 2/Karaoke/2017-17-00-23-808-k.mp3,0,3,201717024\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,48.513,45.0,Free Excerpts/2017-17-00-48-513-c1.mp3,0,0,201717049\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,85.574,45.0,Set 2/V2/2017-17-01-25-574-v2.mp3,0,2,201717086\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,110.731,45.0,Free Excerpts/2017-17-01-50-731-c2.mp3,0,0,201717111\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,135.0,45.0,Free Excerpts/2017-17-02-15-000-o.mp3,0,0,201717135\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,0.0,45.0,Free Excerpts/2016-10-00-00-000-i.mp3,0,0,201610000\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,8.382,45.0,Free Excerpts/2016-10-00-08-382-v1.mp3,0,0,201610008\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,17.257,45.0,Free Excerpts/2016-10-00-17-257-pc.mp3,0,0,201610017\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,41.121,45.0,Free Excerpts/2016-10-00-41-121-c1.mp3,0,0,201610041\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,104.955,45.0,Free Excerpts/2016-10-01-44-955-v2.mp3,0,0,201610105\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,119.911,45.0,Free Excerpts/2016-10-01-59-911-b.mp3,0,0,201610120\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,134.111,45.0,Free Excerpts/2016-10-02-14-111-b.mp3,0,0,201610134\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,150.086,45.0,Free Excerpts/2016-10-02-30-086-c2.mp3,0,0,201610150\r\nBelgium 2017 - Blanche,City Lights,26.47,45.0,Set 2/Karaoke/2017-04-00-26-470-k.mp3,0,3,201704026\r\nBelgium 2017 - Blanche,City Lights,26.47,45.0,Set 2/V1/2017-04-00-26-470-v1.mp3,0,1,201704026\r\nBelgium 2017 - Blanche,City Lights,42.0,45.0,Free Excerpts/2017-04-00-42-000-c1.mp3,0,0,201704042\r\nBelgium 2017 - Blanche,City Lights,64.19,45.0,Set 2/V2/2017-04-01-04-190-v2.mp3,0,2,201704064\r\nBelgium 2017 - Blanche,City Lights,104.312,45.0,Free Excerpts/2017-04-01-44-312-b.mp3,0,0,201704104\r\nBelgium 2017 - Blanche,City Lights,129.637,45.0,Free Excerpts/2017-04-02-09-637-c2.mp3,0,0,201704130\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,8.41,45.0,Free Excerpts/2016-04-00-08-410-v1.mp3,0,0,201604008\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,25.231,45.0,Free Excerpts/2016-04-00-25-231-pc.mp3,0,0,201604025\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,43.693,45.0,Free Excerpts/2016-04-00-43-693-c1.mp3,0,0,201604044\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,67.078,45.0,Free Excerpts/2016-04-01-07-078-v2.mp3,0,0,201604067\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,119.591,45.0,Free Excerpts/2016-04-01-59-591-b.mp3,0,0,201604120\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,128.206,45.0,Free Excerpts/2016-04-02-08-206-b.mp3,0,0,201604128\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,137.95,45.0,Free Excerpts/2016-04-02-17-950-c2.mp3,0,0,201604138\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,7.306,45.0,Set 2/Karaoke/2017-02-00-07-306-k.mp3,0,3,201702007\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,7.306,45.0,Set 2/V1/2017-02-00-07-306-v1.mp3,0,1,201702007\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,36.854,45.0,Free Excerpts/2017-02-00-36-854-c1.mp3,0,0,201702037\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,83.449,45.0,Set 2/V2/2017-02-01-23-449-v2.mp3,0,2,201702083\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,113.322,45.0,Free Excerpts/2017-02-01-53-322-c2.mp3,0,0,201702113\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,135.523,45.0,Free Excerpts/2017-02-02-15-523-o.mp3,0,0,201702136\r\nBulgaria 2018 - Equinox,Bones,13.405,45.0,Set 2/V1/2018-14-00-13-405-v1.mp3,0,1,201814013\r\nBulgaria 2018 - Equinox,Bones,13.405,45.0,Set 2/Karaoke/2018-14-00-13-405-k.mp3,0,3,201814013\r\nBulgaria 2018 - Equinox,Bones,34.58,45.0,Free Excerpts/2018-14-00-34-580-b.mp3,0,0,201814035\r\nBulgaria 2018 - Equinox,Bones,53.462,45.0,Free Excerpts/2018-14-00-53-462-c1.mp3,0,0,201814053\r\nBulgaria 2018 - Equinox,Bones,78.986,45.0,Set 2/V2/2018-14-01-18-986-v2.mp3,0,2,201814079\r\nBulgaria 2018 - Equinox,Bones,109.653,45.0,Free Excerpts/2018-14-01-49-653-c2.mp3,0,0,201814110\r\nCroatia 2017 - Jacques Houdek,My Friend,0.0,45.0,Free Excerpts/2017-13-00-00-000-i.mp3,0,0,201713000\r\nCroatia 2017 - Jacques Houdek,My Friend,19.598,45.0,Free Excerpts/2017-13-00-19-598-v1.mp3,0,0,201713020\r\nCroatia 2017 - Jacques Houdek,My Friend,56.616,45.0,Free Excerpts/2017-13-00-56-616-c1.mp3,0,0,201713057\r\nCroatia 2017 - Jacques Houdek,My Friend,85.753,45.0,Free Excerpts/2017-13-01-25-753-b.mp3,0,0,201713086\r\nCroatia 2017 - Jacques Houdek,My Friend,126.213,45.0,Free Excerpts/2017-13-02-06-213-c2.mp3,0,0,201713126\r\nCyprus 2018 - Eleni Foureira,Fuego,9.767,45.0,Set 2/Karaoke/2018-02-00-09-767-k.mp3,0,3,201802010\r\nCyprus 2018 - Eleni Foureira,Fuego,9.767,45.0,Set 2/V1/2018-02-00-09-767-v1.mp3,0,1,201802010\r\nCyprus 2018 - Eleni Foureira,Fuego,46.894,45.0,Free Excerpts/2018-02-00-46-894-c1.mp3,0,0,201802047\r\nCyprus 2018 - Eleni Foureira,Fuego,76.397,45.0,Set 2/V2/2018-02-01-16-397-v2.mp3,0,2,201802076\r\nCyprus 2018 - Eleni Foureira,Fuego,103.718,45.0,Free Excerpts/2018-02-01-43-718-c2.mp3,0,0,201802104\r\nCyprus 2018 - Eleni Foureira,Fuego,133.106,45.0,Free Excerpts/2018-02-02-13-106-o.mp3,0,0,201802133\r\nCyprus 2019 - Tamta,Replay,0.0,45.0,Free Excerpts/2019-13-00-00-000-i.mp3,0,0,201913000\r\nCyprus 2019 - Tamta,Replay,9.67,45.0,Set 2/V1/2019-13-00-09-670-v1.mp3,0,1,201913010\r\nCyprus 2019 - Tamta,Replay,9.67,45.0,Set 2/Karaoke/2019-13-00-09-670-k.mp3,0,3,201913010\r\nCyprus 2019 - Tamta,Replay,27.926,45.0,Free Excerpts/2019-13-00-27-926-pc.mp3,0,0,201913028\r\nCyprus 2019 - Tamta,Replay,46.082,45.0,Free Excerpts/2019-13-00-46-082-c1.mp3,0,0,201913046\r\nCyprus 2019 - Tamta,Replay,66.212,45.0,Set 2/V2/2019-13-01-06-212-v2.mp3,0,2,201913066\r\nCyprus 2019 - Tamta,Replay,122.557,45.0,Free Excerpts/2019-13-02-02-557-b.mp3,0,0,201913123\r\nCyprus 2019 - Tamta,Replay,141.01,45.0,Free Excerpts/2019-13-02-21-010-c2.mp3,0,0,201913141\r\nCzechia 2018 - Mikolas Josef,Lie To Me,13.993,45.0,Set 2/V1/2018-06-00-13-993-v1.mp3,0,1,201806014\r\nCzechia 2018 - Mikolas Josef,Lie To Me,13.993,45.0,Set 2/Karaoke/2018-06-00-13-993-k.mp3,0,3,201806014\r\nCzechia 2018 - Mikolas Josef,Lie To Me,39.862,45.0,Free Excerpts/2018-06-00-39-862-c1.mp3,0,0,201806040\r\nCzechia 2018 - Mikolas Josef,Lie To Me,67.81,45.0,Set 2/V2/2018-06-01-07-810-v2.mp3,0,2,201806068\r\nCzechia 2018 - Mikolas Josef,Lie To Me,94.073,45.0,Free Excerpts/2018-06-01-34-073-c2.mp3,0,0,201806094\r\nCzechia 2018 - Mikolas Josef,Lie To Me,113.878,45.0,Free Excerpts/2018-06-01-53-878-b.mp3,0,0,201806114\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,0.0,45.0,Set 2/Karaoke/2019-11-00-00-000-k.mp3,0,3,201911000\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,0.0,45.0,Set 2/V1/2019-11-00-00-000-v1.mp3,0,1,201911000\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,29.476,45.0,Free Excerpts/2019-11-00-29-476-pc.mp3,0,0,201911029\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,41.92,45.0,Free Excerpts/2019-11-00-41-920-c1.mp3,0,0,201911042\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,78.128,45.0,Set 2/V2/2019-11-01-18-128-v2.mp3,0,2,201911078\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,147.178,45.0,Free Excerpts/2019-11-02-27-178-b.mp3,0,0,201911147\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,154.522,45.0,Free Excerpts/2019-11-02-34-522-c2.mp3,0,0,201911155\r\nDenmark 2017 - Anja,Where I Am,4.552,45.0,Set 2/V1/2017-20-00-04-552-v1.mp3,0,1,201720005\r\nDenmark 2017 - Anja,Where I Am,4.552,45.0,Set 2/Karaoke/2017-20-00-04-552-k.mp3,0,3,201720005\r\nDenmark 2017 - Anja,Where I Am,46.306,45.0,Free Excerpts/2017-20-00-46-306-c1.mp3,0,0,201720046\r\nDenmark 2017 - Anja,Where I Am,68.057,45.0,Set 2/V2/2017-20-01-08-057-v2.mp3,0,2,201720068\r\nDenmark 2017 - Anja,Where I Am,109.71,45.0,Free Excerpts/2017-20-01-49-710-b.mp3,0,0,201720110\r\nDenmark 2017 - Anja,Where I Am,131.106,45.0,Free Excerpts/2017-20-02-11-106-c2.mp3,0,0,201720131\r\nDenmark 2018 - Rasmussen,Higher Ground,6.223,45.0,Set 2/V1/2018-09-00-06-223-v1.mp3,0,1,201809006\r\nDenmark 2018 - Rasmussen,Higher Ground,6.223,45.0,Set 2/Karaoke/2018-09-00-06-223-k.mp3,0,3,201809006\r\nDenmark 2018 - Rasmussen,Higher Ground,34.077,45.0,Free Excerpts/2018-09-00-34-077-c1.mp3,0,0,201809034\r\nDenmark 2018 - Rasmussen,Higher Ground,61.368,45.0,Set 2/V2/2018-09-01-01-368-v2.mp3,0,2,201809061\r\nDenmark 2018 - Rasmussen,Higher Ground,77.659,45.0,Free Excerpts/2018-09-01-17-659-c2.mp3,0,0,201809078\r\nDenmark 2018 - Rasmussen,Higher Ground,124.022,45.0,Free Excerpts/2018-09-02-04-022-b.mp3,0,0,201809124\r\nDenmark 2019 - Leonora,Love Is Forever,3.189,45.0,Set 2/Karaoke/2019-12-00-03-189-k.mp3,0,3,201912003\r\nDenmark 2019 - Leonora,Love Is Forever,3.189,45.0,Set 2/V1/2019-12-00-03-189-v1.mp3,0,1,201912003\r\nDenmark 2019 - Leonora,Love Is Forever,30.754,45.0,Free Excerpts/2019-12-00-30-754-c1.mp3,0,0,201912031\r\nDenmark 2019 - Leonora,Love Is Forever,61.508,45.0,Set 2/V2/2019-12-01-01-508-v2.mp3,0,2,201912062\r\nDenmark 2019 - Leonora,Love Is Forever,121.268,45.0,Free Excerpts/2019-12-02-01-268-b.mp3,0,0,201912121\r\nDenmark 2019 - Leonora,Love Is Forever,148.937,45.0,Free Excerpts/2019-12-02-28-937-c2.mp3,0,0,201912149\r\nEstonia 2018 - Elina Nechayeva,La Forza,3.467,45.0,Set 2/Karaoke/2018-08-00-03-467-k.mp3,0,3,201808003\r\nEstonia 2018 - Elina Nechayeva,La Forza,3.467,45.0,Set 2/V1/2018-08-00-03-467-v1.mp3,0,1,201808003\r\nEstonia 2018 - Elina Nechayeva,La Forza,41.074,45.0,Free Excerpts/2018-08-00-41-074-c1.mp3,0,0,201808041\r\nEstonia 2018 - Elina Nechayeva,La Forza,84.015,45.0,Set 2/V2/2018-08-01-24-015-v2.mp3,0,2,201808084\r\nEstonia 2018 - Elina Nechayeva,La Forza,125.556,45.0,Free Excerpts/2018-08-02-05-556-c2.mp3,0,0,201808126\r\nEstonia 2019 - Victor Crone,Storm,0.0,45.0,Free Excerpts/2019-20-00-00-000-v1.mp3,0,0,201920000\r\nEstonia 2019 - Victor Crone,Storm,30.806,45.0,Free Excerpts/2019-20-00-30-806-c1.mp3,0,0,201920031\r\nEstonia 2019 - Victor Crone,Storm,45.946,45.0,Free Excerpts/2019-20-00-45-946-v2.mp3,0,0,201920046\r\nEstonia 2019 - Victor Crone,Storm,105.875,45.0,Free Excerpts/2019-20-01-45-875-b1.mp3,0,0,201920106\r\nEstonia 2019 - Victor Crone,Storm,135.945,45.0,Free Excerpts/2019-20-02-15-945-b2.mp3,0,0,201920136\r\nEstonia 2019 - Victor Crone,Storm,150.875,45.0,Free Excerpts/2019-20-02-30-875-c2.mp3,0,0,201920151\r\nEstonia 2019 - Victor Crone,Storm,166.12,45.0,Free Excerpts/2019-20-02-46-120-o.mp3,0,0,201920166\r\nFrance 2016 - Amir,J'ai Cherché,2.374,45.0,Free Excerpts/2016-06-00-02-374-v1.mp3,0,0,201606002\r\nFrance 2016 - Amir,J'ai Cherché,33.85,45.0,Free Excerpts/2016-06-00-33-850-c1.mp3,0,0,201606034\r\nFrance 2016 - Amir,J'ai Cherché,64.708,45.0,Free Excerpts/2016-06-01-04-708-v2.mp3,0,0,201606065\r\nFrance 2016 - Amir,J'ai Cherché,80.291,45.0,Free Excerpts/2016-06-01-20-291-c2.mp3,0,0,201606080\r\nFrance 2016 - Amir,J'ai Cherché,111.974,45.0,Free Excerpts/2016-06-01-51-974-b.mp3,0,0,201606112\r\nFrance 2016 - Amir,J'ai Cherché,127.97,45.0,Free Excerpts/2016-06-02-07-970-c3.mp3,0,0,201606128\r\nFrance 2016 - Amir,J'ai Cherché,156.454,45.0,Free Excerpts/2016-06-02-36-454-c4.mp3,0,0,201606156\r\nFrance 2017 - Alma,Requiem,4.06,45.0,Set 2/V1/2017-12-00-04-060-v1.mp3,0,1,201712004\r\nFrance 2017 - Alma,Requiem,4.06,45.0,Set 2/Karaoke/2017-12-00-04-060-k.mp3,0,3,201712004\r\nFrance 2017 - Alma,Requiem,22.165,45.0,Free Excerpts/2017-12-00-22-165-c1.mp3,0,0,201712022\r\nFrance 2017 - Alma,Requiem,59.521,45.0,Set 2/V2/2017-12-00-59-521-v2.mp3,0,2,201712060\r\nFrance 2017 - Alma,Requiem,77.796,45.0,Free Excerpts/2017-12-01-17-796-c2.mp3,0,0,201712078\r\nFrance 2017 - Alma,Requiem,113.677,45.0,Free Excerpts/2017-12-01-53-677-b.mp3,0,0,201712114\r\nFrance 2018 - Madame Monsieur,Mercy,19.063,45.0,Set 2/Karaoke/2018-13-00-19-063-k.mp3,0,3,201813019\r\nFrance 2018 - Madame Monsieur,Mercy,19.063,45.0,Set 2/V1/2018-13-00-19-063-v1.mp3,0,1,201813019\r\nFrance 2018 - Madame Monsieur,Mercy,39.726,45.0,Free Excerpts/2018-13-00-39-726-c1.mp3,0,0,201813040\r\nFrance 2018 - Madame Monsieur,Mercy,78.366,45.0,Set 2/V2/2018-13-01-18-366-v2.mp3,0,2,201813078\r\nFrance 2018 - Madame Monsieur,Mercy,98.622,45.0,Free Excerpts/2018-13-01-38-622-c2.mp3,0,0,201813099\r\nFrance 2018 - Madame Monsieur,Mercy,138.81,45.0,Free Excerpts/2018-13-02-18-810-o.mp3,0,0,201813139\r\nFrance 2019 - Bilal Hassani,Roi,2.198,45.0,Set 2/V1/2019-16-00-02-198-v1.mp3,0,1,201916002\r\nFrance 2019 - Bilal Hassani,Roi,2.198,45.0,Set 2/Karaoke/2019-16-00-02-198-k.mp3,0,3,201916002\r\nFrance 2019 - Bilal Hassani,Roi,30.573,45.0,Free Excerpts/2019-16-00-30-573-pc.mp3,0,0,201916031\r\nFrance 2019 - Bilal Hassani,Roi,44.161,45.0,Free Excerpts/2019-16-00-44-161-c1.mp3,0,0,201916044\r\nFrance 2019 - Bilal Hassani,Roi,88.422,45.0,Set 2/V2/2019-16-01-28-422-v2.mp3,0,2,201916088\r\nFrance 2019 - Bilal Hassani,Roi,131.583,45.0,Free Excerpts/2019-16-02-11-583-c2.mp3,0,0,201916132\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,0.0,45.0,Free Excerpts/2016-20-00-00-000-i.mp3,0,0,201620000\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,7.25,45.0,Free Excerpts/2016-20-00-07-250-c1.mp3,0,0,201620007\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,15.205,45.0,Free Excerpts/2016-20-00-15-205-v1.mp3,0,0,201620015\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,52.764,45.0,Free Excerpts/2016-20-00-52-764-v2.mp3,0,0,201620053\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,97.875,45.0,Free Excerpts/2016-20-01-37-875-b.mp3,0,0,201620098\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,105.225,45.0,Free Excerpts/2016-20-01-45-225-c2.mp3,0,0,201620105\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,4.7379999999999995,45.0,Set 2/Karaoke/2018-04-00-04-738-k.mp3,0,3,201804005\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,4.7379999999999995,45.0,Set 2/V1/2018-04-00-04-738-v1.mp3,0,1,201804005\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,40.404,45.0,Free Excerpts/2018-04-00-40-404-c1.mp3,0,0,201804040\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,71.381,45.0,Set 2/V2/2018-04-01-11-381-v2.mp3,0,2,201804071\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,107.745,45.0,Free Excerpts/2018-04-01-47-745-c2.mp3,0,0,201804108\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,130.441,45.0,Free Excerpts/2018-04-02-10-441-o.mp3,0,0,201804130\r\nGreece 2017 - Demy,This is Love,4.094,45.0,Free Excerpts/2017-19-00-04-094-v1.mp3,0,0,201719004\r\nGreece 2017 - Demy,This is Love,26.245,45.0,Free Excerpts/2017-19-00-26-245-b.mp3,0,0,201719026\r\nGreece 2017 - Demy,This is Love,55.369,45.0,Free Excerpts/2017-19-00-55-369-c1.mp3,0,0,201719055\r\nGreece 2017 - Demy,This is Love,86.586,45.0,Free Excerpts/2017-19-01-26-586-v2.mp3,0,0,201719087\r\nGreece 2017 - Demy,This is Love,130.67,45.0,Free Excerpts/2017-19-02-10-670-c2.mp3,0,0,201719131\r\nHungary 2016 - Freddie,Pioneer,2.774,45.0,Free Excerpts/2016-19-00-02-774-v1.mp3,0,0,201619003\r\nHungary 2016 - Freddie,Pioneer,30.106,45.0,Free Excerpts/2016-19-00-30-106-pc.mp3,0,0,201619030\r\nHungary 2016 - Freddie,Pioneer,43.155,45.0,Free Excerpts/2016-19-00-43-155-c1.mp3,0,0,201619043\r\nHungary 2016 - Freddie,Pioneer,69.768,45.0,Free Excerpts/2016-19-01-09-768-v2.mp3,0,0,201619070\r\nHungary 2016 - Freddie,Pioneer,123.198,45.0,Free Excerpts/2016-19-02-03-198-b.mp3,0,0,201619123\r\nHungary 2016 - Freddie,Pioneer,136.145,45.0,Free Excerpts/2016-19-02-16-145-c2.mp3,0,0,201619136\r\nHungary 2017 - Joci Pápai,Origo,0.0,45.0,Free Excerpts/2017-08-00-00-000-v1.mp3,0,0,201708000\r\nHungary 2017 - Joci Pápai,Origo,21.141,45.0,Free Excerpts/2017-08-00-21-141-c1.mp3,0,0,201708021\r\nHungary 2017 - Joci Pápai,Origo,58.512,45.0,Free Excerpts/2017-08-00-58-512- v2.mp3,0,0,201708059\r\nHungary 2017 - Joci Pápai,Origo,98.967,45.0,Free Excerpts/2017-08-01-38-967-b.mp3,0,0,201708099\r\nHungary 2017 - Joci Pápai,Origo,138.531,45.0,Free Excerpts/2017-08-02-18-531-c2.mp3,0,0,201708139\r\nIceland 2019 - Hatari,Hatrið mun sigra,15.005,45.0,Set 2/V1/2019-10-00-15-005-v1.mp3,0,1,201910015\r\nIceland 2019 - Hatari,Hatrið mun sigra,15.005,45.0,Set 2/Karaoke/2019-10-00-15-005-k.mp3,0,3,201910015\r\nIceland 2019 - Hatari,Hatrið mun sigra,47.144,45.0,Free Excerpts/2019-10-00-47-144-c1.mp3,0,0,201910047\r\nIceland 2019 - Hatari,Hatrið mun sigra,66.305,45.0,Set 2/V2/2019-10-01-06-305-v2.mp3,0,2,201910066\r\nIceland 2019 - Hatari,Hatrið mun sigra,117.2,45.0,Free Excerpts/2019-10-01-57-200-b.mp3,0,0,201910117\r\nIceland 2019 - Hatari,Hatrið mun sigra,136.666,45.0,Free Excerpts/2019-10-02-16-666-c2.mp3,0,0,201910137\r\nIreland 2018 - Ryan O'Shaughnessy,Together,4.199,45.0,Set 2/V1/2018-16-00-04-199-v1.mp3,0,1,201816004\r\nIreland 2018 - Ryan O'Shaughnessy,Together,4.199,45.0,Set 2/Karaoke/2018-16-00-04-199-k.mp3,0,3,201816004\r\nIreland 2018 - Ryan O'Shaughnessy,Together,32.708,45.0,Free Excerpts/2018-16-00-32-708-c1.mp3,0,0,201816033\r\nIreland 2018 - Ryan O'Shaughnessy,Together,54.145,45.0,Set 2/V2/2018-16-00-54-145-v2.mp3,0,2,201816054\r\nIreland 2018 - Ryan O'Shaughnessy,Together,83.317,45.0,Free Excerpts/2018-16-01-23-317-c2.mp3,0,0,201816083\r\nIreland 2018 - Ryan O'Shaughnessy,Together,109.617,45.0,Free Excerpts/2018-16-01-49-617-b.mp3,0,0,201816110\r\nIsrael 2016 - Hovi Star,Made of Stars,3.002,45.0,Free Excerpts/2016-14-00-03-002-v1.mp3,0,0,201614003\r\nIsrael 2016 - Hovi Star,Made of Stars,29.707,45.0,Free Excerpts/2016-14-00-29-707-pc.mp3,0,0,201614030\r\nIsrael 2016 - Hovi Star,Made of Stars,40.368,45.0,Free Excerpts/2016-14-00-40-368-c1.mp3,0,0,201614040\r\nIsrael 2016 - Hovi Star,Made of Stars,67.979,45.0,Free Excerpts/2016-14-01-07-979-v2.mp3,0,0,201614068\r\nIsrael 2016 - Hovi Star,Made of Stars,118.309,45.0,Free Excerpts/2016-14-01-58-309-b.mp3,0,0,201614118\r\nIsrael 2016 - Hovi Star,Made of Stars,137.975,45.0,Free Excerpts/2016-14-02-17-975-c2.mp3,0,0,201614138\r\nIsrael 2018 - Netta Barzilai,Toy,14.905,45.0,Free Excerpts/2018-01-00-14-905-v1.mp3,0,0,201801015\r\nIsrael 2018 - Netta Barzilai,Toy,44.556,45.0,Free Excerpts/2018-01-00-44-556-c1.mp3,0,0,201801045\r\nIsrael 2018 - Netta Barzilai,Toy,81.579,45.0,Free Excerpts/2018-01-01-21-579-b.mp3,0,0,201801082\r\nIsrael 2018 - Netta Barzilai,Toy,103.376,45.0,Free Excerpts/2018-01-01-43-376-c2.mp3,0,0,201801103\r\nIsrael 2018 - Netta Barzilai,Toy,132.546,45.0,Free Excerpts/2018-01-02-12-546-o.mp3,0,0,201801133\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,0.0,45.0,Free Excerpts/2016-16-00-00-000-v1.mp3,0,0,201616000\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,24.095,45.0,Free Excerpts/2016-16-00-24-095-pc.mp3,0,0,201616024\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,47.222,45.0,Free Excerpts/2016-16-00-47-222-c1.mp3,0,0,201616047\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,78.739,45.0,Free Excerpts/2016-16-01-18-739-v2.mp3,0,0,201616079\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,139.3,45.0,Free Excerpts/2016-16-02-19-300-b.mp3,0,0,201616139\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,151.024,45.0,Free Excerpts/2016-16-02-31-024-c2.mp3,0,0,201616151\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,164.793,45.0,Free Excerpts/2016-16-02-44-793-o.mp3,0,0,201616165\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,2.078,45.0,Free Excerpts/2017-06-00-02-078-v1.mp3,0,0,201706002\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,17.612,45.0,Free Excerpts/2017-06-00-17-612-c1.mp3,0,0,201706018\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,63.913,45.0,Free Excerpts/2017-06-01-03-913-c2.mp3,0,0,201706064\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,111.34,45.0,Free Excerpts/2017-06-01-51-340-b.mp3,0,0,201706111\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,137.362,45.0,Free Excerpts/2017-06-02-17-362-o.mp3,0,0,201706137\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,3.058,45.0,Free Excerpts/2018-05-00-03-058-v1.mp3,0,0,201805003\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,45.413,45.0,Free Excerpts/2018-05-00-45-413-c1.mp3,0,0,201805045\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,69.388,45.0,Free Excerpts/2018-05-01-09-388-v2.mp3,0,0,201805069\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,91.088,45.0,Free Excerpts/2018-05-01-31-088-c2.mp3,0,0,201805091\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,112.418,45.0,Free Excerpts/2018-05-01-52-418-b.mp3,0,0,201805112\r\nItaly 2019 - Mahmood,Soldi,2.657,45.0,Set 2/V1/2019-02-00-02-657-v1.mp3,0,1,201902003\r\nItaly 2019 - Mahmood,Soldi,2.657,45.0,Set 2/Karaoke/2019-02-00-02-657-k.mp3,0,3,201902003\r\nItaly 2019 - Mahmood,Soldi,21.79,45.0,Free Excerpts/2019-02-00-21-790-pc.mp3,0,0,201902022\r\nItaly 2019 - Mahmood,Soldi,44.218,45.0,Free Excerpts/2019-02-00-44-218-c1.mp3,0,0,201902044\r\nItaly 2019 - Mahmood,Soldi,65.37,45.0,Set 2/V2/2019-02-01-05-370-v2.mp3,0,2,201902065\r\nItaly 2019 - Mahmood,Soldi,144.347,45.0,Free Excerpts/2019-02-02-24-347-b.mp3,0,0,201902144\r\nItaly 2019 - Mahmood,Soldi,163.267,45.0,Free Excerpts/2019-02-02-43-267-c2.mp3,0,0,201902163\r\nLatvia 2016 - Justs,Heartbeat,0.0,45.0,Free Excerpts/2016-15-00-00-000-i.mp3,0,0,201615000\r\nLatvia 2016 - Justs,Heartbeat,3.654,45.0,Free Excerpts/2016-15-00-03-654-v1.mp3,0,0,201615004\r\nLatvia 2016 - Justs,Heartbeat,35.526,45.0,Free Excerpts/2016-15-00-35-526-c1.mp3,0,0,201615036\r\nLatvia 2016 - Justs,Heartbeat,53.797,45.0,Free Excerpts/2016-15-00-53-797-v2.mp3,0,0,201615054\r\nLatvia 2016 - Justs,Heartbeat,120.485,45.0,Free Excerpts/2016-15-02-00-485-b.mp3,0,0,201615120\r\nLatvia 2016 - Justs,Heartbeat,136.624,45.0,Free Excerpts/2016-15-02-16-624-c2.mp3,0,0,201615137\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,0.0,45.0,Free Excerpts/2016-09-00-00-000-i.mp3,0,0,201609000\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,7.645,45.0,Free Excerpts/2016-09-00-07-645-v1.mp3,0,0,201609008\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,39.482,45.0,Free Excerpts/2016-09-00-39-482-c1.mp3,0,0,201609039\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,68.178,45.0,Free Excerpts/2016-09-01-08-178-v2.mp3,0,0,201609068\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,127.035,45.0,Free Excerpts/2016-09-02-07-035-b.mp3,0,0,201609127\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,142.953,45.0,Free Excerpts/2016-09-02-22-953-c2.mp3,0,0,201609143\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,2.743,45.0,Set 2/Karaoke/2018-12-00-02-743-k.mp3,0,3,201812003\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,2.743,45.0,Set 2/V1/2018-12-00-02-743-v1.mp3,0,1,201812003\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,45.025,45.0,Free Excerpts/2018-12-00-45-025-c1.mp3,0,0,201812045\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,87.537,45.0,Set 2/V2/2018-12-01-27-537-v2.mp3,0,2,201812088\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,115.42,45.0,Free Excerpts/2018-12-01-55-420-c2.mp3,0,0,201812115\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,135.547,45.0,Free Excerpts/2018-12-02-15-547-o.mp3,0,0,201812136\r\nMalta 2016 - Ira Losco,Walk on Water,0.0,45.0,Free Excerpts/2016-12-00-00-000-i.mp3,0,0,201612000\r\nMalta 2016 - Ira Losco,Walk on Water,11.345,45.0,Free Excerpts/2016-12-00-11-345-v1.mp3,0,0,201612011\r\nMalta 2016 - Ira Losco,Walk on Water,34.455,45.0,Free Excerpts/2016-12-00-34-455-pc.mp3,0,0,201612034\r\nMalta 2016 - Ira Losco,Walk on Water,50.107,45.0,Free Excerpts/2016-12-00-50-107-pc2.mp3,0,0,201612050\r\nMalta 2016 - Ira Losco,Walk on Water,63.238,45.0,Free Excerpts/2016-12-01-03-238-c1.mp3,0,0,201612063\r\nMalta 2016 - Ira Losco,Walk on Water,85.192,45.0,Free Excerpts/2016-12-01-25-192-v2.mp3,0,0,201612085\r\nMalta 2016 - Ira Losco,Walk on Water,136.245,45.0,Free Excerpts/2016-12-02-16-245-b.mp3,0,0,201612136\r\nMalta 2016 - Ira Losco,Walk on Water,158.62,45.0,Free Excerpts/2016-12-02-38-620-c2.mp3,0,0,201612159\r\nMalta 2019 - Michela Pace,Chameleon,0.0,45.0,Free Excerpts/2019-14-00-00-000-i.mp3,0,0,201914000\r\nMalta 2019 - Michela Pace,Chameleon,9.736,45.0,Free Excerpts/2019-14-00-09-736-v1.mp3,0,0,201914010\r\nMalta 2019 - Michela Pace,Chameleon,18.755,45.0,Free Excerpts/2019-14-00-18-755-pc1.mp3,0,0,201914019\r\nMalta 2019 - Michela Pace,Chameleon,28.491,45.0,Free Excerpts/2019-14-00-28-491-pc2.mp3,0,0,201914028\r\nMalta 2019 - Michela Pace,Chameleon,47.963,45.0,Free Excerpts/2019-14-00-47-963-c1.mp3,0,0,201914048\r\nMalta 2019 - Michela Pace,Chameleon,68.46,45.0,Free Excerpts/2019-14-01-08-460-v2.mp3,0,0,201914068\r\nMalta 2019 - Michela Pace,Chameleon,106.79,45.0,Free Excerpts/2019-14-01-46-790-c2.mp3,0,0,201914107\r\nMalta 2019 - Michela Pace,Chameleon,116.628,45.0,Free Excerpts/2019-14-01-56-628-b.mp3,0,0,201914117\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,4.039,45.0,Set 2/Karaoke/2017-03-00-04-039-k.mp3,0,3,201703004\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,4.039,45.0,Set 2/V1/2017-03-00-04-039-v1.mp3,0,1,201703004\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,20.977,45.0,Free Excerpts/2017-03-00-20-977-c1.mp3,0,0,201703021\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,57.263,45.0,Set 2/V2/2017-03-00-57-263-v2.mp3,0,2,201703057\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,73.599,45.0,Free Excerpts/2017-03-01-13-599-c2.mp3,0,0,201703074\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,91.453,45.0,Free Excerpts/2017-03-01-31-453-b.mp3,0,0,201703091\r\nMoldova 2018 - DoReDos,My Lucky Day,0.0,45.0,Free Excerpts/2018-10-00-00-000-i.mp3,0,0,201810000\r\nMoldova 2018 - DoReDos,My Lucky Day,17.039,45.0,Set 2/Karaoke/2018-10-00-17-039-k.mp3,0,3,201810017\r\nMoldova 2018 - DoReDos,My Lucky Day,17.039,45.0,Set 2/V1/2018-10-00-17-039-v1.mp3,0,1,201810017\r\nMoldova 2018 - DoReDos,My Lucky Day,49.809,45.0,Free Excerpts/2018-10-00-49-809-c1.mp3,0,0,201810050\r\nMoldova 2018 - DoReDos,My Lucky Day,100.082,45.0,Set 2/V2/2018-10-01-40-082-v2.mp3,0,2,201810100\r\nMoldova 2018 - DoReDos,My Lucky Day,132.352,45.0,Free Excerpts/2018-10-02-12-352-c2.mp3,0,0,201810132\r\nNetherlands 2016 - Douwe Bob,Slow Down,0.0,45.0,Free Excerpts/2016-11-00-00-000-i.mp3,0,0,201611000\r\nNetherlands 2016 - Douwe Bob,Slow Down,3.501,45.0,Free Excerpts/2016-11-00-03-501-v1.mp3,0,0,201611004\r\nNetherlands 2016 - Douwe Bob,Slow Down,34.251,45.0,Free Excerpts/2016-11-00-34-251-pc.mp3,0,0,201611034\r\nNetherlands 2016 - Douwe Bob,Slow Down,49.012,45.0,Free Excerpts/2016-11-00-49-012-c1.mp3,0,0,201611049\r\nNetherlands 2016 - Douwe Bob,Slow Down,65.948,45.0,Free Excerpts/2016-11-01-05-948-v2.mp3,0,0,201611066\r\nNetherlands 2016 - Douwe Bob,Slow Down,112.594,45.0,Free Excerpts/2016-11-01-52-594-b.mp3,0,0,201611113\r\nNetherlands 2016 - Douwe Bob,Slow Down,124.422,45.0,Free Excerpts/2016-11-02-04-422-c2.mp3,0,0,201611124\r\nNetherlands 2017 - OG3NE,Lights And Shadows,5.002,45.0,Set 2/Karaoke/2017-11-00-05-002-k.mp3,0,3,201711005\r\nNetherlands 2017 - OG3NE,Lights And Shadows,5.002,45.0,Set 2/V1/2017-11-00-05-002-v1.mp3,0,1,201711005\r\nNetherlands 2017 - OG3NE,Lights And Shadows,37.891,45.0,Free Excerpts/2017-11-00-37-891-c1.mp3,0,0,201711038\r\nNetherlands 2017 - OG3NE,Lights And Shadows,65.032,45.0,Set 2/V2/2017-11-01-05-032-v2.mp3,0,2,201711065\r\nNetherlands 2017 - OG3NE,Lights And Shadows,98.241,45.0,Free Excerpts/2017-11-01-38-241-c2.mp3,0,0,201711098\r\nNetherlands 2017 - OG3NE,Lights And Shadows,125.169,45.0,Free Excerpts/2017-11-02-05-169-b.mp3,0,0,201711125\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,9.97,45.0,Free Excerpts/2018-18-00-09-970-v1.mp3,0,0,201818010\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,39.438,45.0,Free Excerpts/2018-18-00-39-438-c1.mp3,0,0,201818039\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,66.468,45.0,Free Excerpts/2018-18-01-06-468-v2.mp3,0,0,201818066\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,96.3,45.0,Free Excerpts/2018-18-01-36-300-c2.mp3,0,0,201818096\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,129.534,45.0,Free Excerpts/2018-18-02-09-534-o.mp3,0,0,201818130\r\nNetherlands 2019 - Duncan Laurence,Arcade,0.0,45.0,Free Excerpts/2019-01-00-00-000-i.mp3,0,0,201901000\r\nNetherlands 2019 - Duncan Laurence,Arcade,12.852,45.0,Set 2/Karaoke/2019-01-00-12-852-k.mp3,0,3,201901013\r\nNetherlands 2019 - Duncan Laurence,Arcade,12.852,45.0,Set 2/V1/2019-01-00-12-852-v1.mp3,0,1,201901013\r\nNetherlands 2019 - Duncan Laurence,Arcade,53.289,45.0,Free Excerpts/2019-01-00-53-289-pc.mp3,0,0,201901053\r\nNetherlands 2019 - Duncan Laurence,Arcade,66.664,45.0,Free Excerpts/2019-01-01-06-664-c1.mp3,0,0,201901067\r\nNetherlands 2019 - Duncan Laurence,Arcade,81.292,45.0,Set 2/V2/2019-01-01-21-292-v2.mp3,0,2,201901081\r\nNetherlands 2019 - Duncan Laurence,Arcade,128.626,45.0,Free Excerpts/2019-01-02-08-626-b.mp3,0,0,201901129\r\nNetherlands 2019 - Duncan Laurence,Arcade,141.269,45.0,Free Excerpts/2019-01-02-21-269-c2.mp3,0,0,201901141\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,5.204,45.0,Free Excerpts/2019-07-00-05-204-v1.mp3,0,0,201907005\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,46.633,45.0,Free Excerpts/2019-07-00-46-633-c1.mp3,0,0,201907047\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,87.962,45.0,Free Excerpts/2019-07-01-27-962-b.mp3,0,0,201907088\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,106.675,45.0,Free Excerpts/2019-07-01-46-675-v2.mp3,0,0,201907107\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,126.489,45.0,Free Excerpts/2019-07-02-06-489-c.mp3,0,0,201907126\r\nNorway 2017 - Jowst,Grab the Moment,8.868,45.0,Free Excerpts/2017-10-00-08-868-v1.mp3,0,0,201710009\r\nNorway 2017 - Jowst,Grab the Moment,37.69,45.0,Free Excerpts/2017-10-00-37-690-c1.mp3,0,0,201710038\r\nNorway 2017 - Jowst,Grab the Moment,66.734,45.0,Free Excerpts/2017-10-01-06-734-v2.mp3,0,0,201710067\r\nNorway 2017 - Jowst,Grab the Moment,94.338,45.0,Free Excerpts/2017-10-01-34-338-c2.mp3,0,0,201710094\r\nNorway 2017 - Jowst,Grab the Moment,130.689,45.0,Free Excerpts/2017-10-02-10-689-b.mp3,0,0,201710131\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,15.229,45.0,Free Excerpts/2018-15-00-15-229-v1.mp3,0,0,201815015\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,38.388,45.0,Free Excerpts/2018-15-00-38-388-v2.mp3,0,0,201815038\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,74.561,45.0,Free Excerpts/2018-15-01-14-561-b.mp3,0,0,201815075\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,94.405,45.0,Free Excerpts/2018-15-01-34-405-c1.mp3,0,0,201815094\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,131.079,45.0,Free Excerpts/2018-15-02-11-079-c2.mp3,0,0,201815131\r\nNorway 2019 - KEiiNO,Spirit in the Sky,0.0,45.0,Free Excerpts/2019-06-00-00-000-v1.mp3,0,0,201906000\r\nNorway 2019 - KEiiNO,Spirit in the Sky,19.703,45.0,Free Excerpts/2019-06-00-19-703-pc1.mp3,0,0,201906020\r\nNorway 2019 - KEiiNO,Spirit in the Sky,41.514,45.0,Free Excerpts/2019-06-00-41-514-pc2.mp3,0,0,201906042\r\nNorway 2019 - KEiiNO,Spirit in the Sky,49.311,45.0,Free Excerpts/2019-06-00-49-311-c1.mp3,0,0,201906049\r\nNorway 2019 - KEiiNO,Spirit in the Sky,67.223,45.0,Free Excerpts/2019-06-01-07-223-v2.mp3,0,0,201906067\r\nNorway 2019 - KEiiNO,Spirit in the Sky,114.848,45.0,Free Excerpts/2019-06-01-54-848-b.mp3,0,0,201906115\r\nNorway 2019 - KEiiNO,Spirit in the Sky,147.616,45.0,Free Excerpts/2019-06-02-27-616-c2.mp3,0,0,201906148\r\nPoland 2016 - Michał Szpak,Color of Your Life,0.62,45.0,Free Excerpts/2016-08-00-00-620-v1.mp3,0,0,201608001\r\nPoland 2016 - Michał Szpak,Color of Your Life,12.305,45.0,Free Excerpts/2016-08-00-12-305-pc.mp3,0,0,201608012\r\nPoland 2016 - Michał Szpak,Color of Your Life,23.679,45.0,Free Excerpts/2016-08-00-23-679-c1.mp3,0,0,201608024\r\nPoland 2016 - Michał Szpak,Color of Your Life,49.426,45.0,Free Excerpts/2016-08-00-49-426-v2.mp3,0,0,201608049\r\nPoland 2016 - Michał Szpak,Color of Your Life,119.842,45.0,Free Excerpts/2016-08-01-59-842-b.mp3,0,0,201608120\r\nPoland 2016 - Michał Szpak,Color of Your Life,141.763,45.0,Free Excerpts/2016-08-02-21-763-c2.mp3,0,0,201608142\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,0.0,45.0,Free Excerpts/2017-01-00-00-000-i.mp3,0,0,201701000\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,19.385,45.0,Free Excerpts/2017-01-00-19-385-v1.mp3,0,0,201701019\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,51.382,45.0,Free Excerpts/2017-01-00-51-382-c1.mp3,0,0,201701051\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,82.211,45.0,Free Excerpts/2017-01-01-22-211-c2.mp3,0,0,201701082\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,132.893,45.0,Free Excerpts/2017-01-02-12-893-o.mp3,0,0,201701133\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,23.437,45.0,Free Excerpts/2017-07-00-23-437-v1.mp3,0,0,201707023\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,46.427,45.0,Free Excerpts/2017-07-00-46-427-c1.mp3,0,0,201707046\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,68.037,45.0,Free Excerpts/2017-07-01-08-037-v2.mp3,0,0,201707068\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,90.175,45.0,Free Excerpts/2017-07-01-30-175-c2.mp3,0,0,201707090\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,112.537,45.0,Free Excerpts/2017-07-01-52-537-o.mp3,0,0,201707113\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,0.0,45.0,Free Excerpts/2016-03-00-00-000-i.mp3,0,0,201603000\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,11.752,45.0,Free Excerpts/2016-03-00-11-752-v1.mp3,0,0,201603012\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,34.615,45.0,Free Excerpts/2016-03-00-34-615-v1.mp3,0,0,201603035\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,50.427,45.0,Free Excerpts/2016-03-00-50-427-pc.mp3,0,0,201603050\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,65.598,45.0,Free Excerpts/2016-03-01-05-598-c1.mp3,0,0,201603066\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,84.508,45.0,Free Excerpts/2016-03-01-24-508-v2.mp3,0,0,201603085\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,144.765,45.0,Free Excerpts/2016-03-02-24-765-b.mp3,0,0,201603145\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,164.637,45.0,Free Excerpts/2016-03-02-44-637-c2.mp3,0,0,201603165\r\nRussia 2019 - Sergey Lazarev,Scream,0.0,45.0,Set 2/V1/2019-03-00-00-000-v1.mp3,0,1,201903000\r\nRussia 2019 - Sergey Lazarev,Scream,0.0,45.0,Set 2/Karaoke/2019-03-00-00-000-k.mp3,0,3,201903000\r\nRussia 2019 - Sergey Lazarev,Scream,16.459,45.0,Free Excerpts/2019-03-00-16-459-pc.mp3,0,0,201903016\r\nRussia 2019 - Sergey Lazarev,Scream,47.242,45.0,Free Excerpts/2019-03-00-47-242-c1.mp3,0,0,201903047\r\nRussia 2019 - Sergey Lazarev,Scream,79.956,45.0,Set 2/V2/2019-03-01-19-956-v2.mp3,0,2,201903080\r\nRussia 2019 - Sergey Lazarev,Scream,133.904,45.0,Free Excerpts/2019-03-02-13-904-b.mp3,0,0,201903134\r\nRussia 2019 - Sergey Lazarev,Scream,156.662,45.0,Free Excerpts/2019-03-02-36-662-c2.mp3,0,0,201903157\r\nSan Marino 2019 - Serhat,Say Na Na Na,0.0,45.0,Free Excerpts/2019-19-00-00-000-i.mp3,0,0,201919000\r\nSan Marino 2019 - Serhat,Say Na Na Na,17.584,45.0,Free Excerpts/2019-19-00-17-584-v1.mp3,0,0,201919018\r\nSan Marino 2019 - Serhat,Say Na Na Na,33.941,45.0,Free Excerpts/2019-19-00-33-941-pc.mp3,0,0,201919034\r\nSan Marino 2019 - Serhat,Say Na Na Na,51.423,45.0,Free Excerpts/2019-19-00-51-423-c1.mp3,0,0,201919051\r\nSan Marino 2019 - Serhat,Say Na Na Na,131.779,45.0,Free Excerpts/2019-19-02-11-779-b.mp3,0,0,201919132\r\nSan Marino 2019 - Serhat,Say Na Na Na,148.954,45.0,Free Excerpts/2019-19-02-28-954-c2.mp3,0,0,201919149\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),5.993,45.0,Free Excerpts/2016-18-00-05-993-v1.mp3,0,0,201618006\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),27.862,45.0,Free Excerpts/2016-18-00-27-862-pc.mp3,0,0,201618028\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),38.06,45.0,Free Excerpts/2016-18-00-38-060-c1.mp3,0,0,201618038\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),73.387,45.0,Free Excerpts/2016-18-01-13-387-v2.mp3,0,0,201618073\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),135.314,45.0,Free Excerpts/2016-18-02-15-314-b.mp3,0,0,201618135\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),153.819,45.0,Free Excerpts/2016-18-02-33-819-c2.mp3,0,0,201618154\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,0.0,45.0,Free Excerpts/2018-19-00-00-000-v1.mp3,0,0,201819000\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,55.207,45.0,Free Excerpts/2018-19-00-55-207-c1.mp3,0,0,201819055\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,85.312,45.0,Free Excerpts/2018-19-01-25-312-v2.mp3,0,0,201819085\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,116.442,45.0,Free Excerpts/2018-19-01-56-442-c2.mp3,0,0,201819116\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,140.006,45.0,Free Excerpts/2018-19-02-20-006-o.mp3,0,0,201819140\r\nSerbia 2019 - Nevena Božović,Kruna,0.0,45.0,Free Excerpts/2019-18-00-00-000-i.mp3,0,0,201918000\r\nSerbia 2019 - Nevena Božović,Kruna,8.588,45.0,Set 2/V1/2019-18-00-08-588-v1.mp3,0,1,201918009\r\nSerbia 2019 - Nevena Božović,Kruna,8.588,45.0,Set 2/Karaoke/2019-18-00-08-588-k.mp3,0,3,201918009\r\nSerbia 2019 - Nevena Božović,Kruna,42.517,45.0,Free Excerpts/2019-18-00-42-517-pc.mp3,0,0,201918043\r\nSerbia 2019 - Nevena Božović,Kruna,53.544,45.0,Free Excerpts/2019-18-00-53-544-c1.mp3,0,0,201918054\r\nSerbia 2019 - Nevena Božović,Kruna,106.544,45.0,Set 2/V2/2019-18-01-46-544-v2.mp3,0,2,201918107\r\nSerbia 2019 - Nevena Božović,Kruna,131.581,45.0,Free Excerpts/2019-18-02-11-581-c2.mp3,0,0,201918132\r\nSerbia 2019 - Nevena Božović,Kruna,161.799,45.0,Free Excerpts/2019-18-02-41-799-o.mp3,0,0,201918162\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,0.0,45.0,Free Excerpts/2019-15-00-00-000-i.mp3,0,0,201915000\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,17.291,45.0,Set 2/V1/2019-15-00-17-291-v1.mp3,0,1,201915017\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,17.291,45.0,Set 2/Karaoke/2019-15-00-17-291-k.mp3,0,3,201915017\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,52.793,45.0,Free Excerpts/2019-15-00-52-793-c1.mp3,0,0,201915053\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,70.698,45.0,Set 2/V2/2019-15-01-10-698-v2.mp3,0,2,201915071\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,123.901,45.0,Free Excerpts/2019-15-02-03-901-b.mp3,0,0,201915124\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,141.396,45.0,Free Excerpts/2019-15-02-21-396-c2.mp3,0,0,201915141\r\nSweden 2016 - Frans,If I Were Sorry,8.639,45.0,Free Excerpts/2016-05-00-08-639-v1.mp3,0,0,201605009\r\nSweden 2016 - Frans,If I Were Sorry,28.023,45.0,Free Excerpts/2016-05-00-28-023-pc.mp3,0,0,201605028\r\nSweden 2016 - Frans,If I Were Sorry,48.356,45.0,Free Excerpts/2016-05-00-48-356-c1.mp3,0,0,201605048\r\nSweden 2016 - Frans,If I Were Sorry,71.323,45.0,Free Excerpts/2016-05-01-11-323-v2.mp3,0,0,201605071\r\nSweden 2016 - Frans,If I Were Sorry,121.365,45.0,Free Excerpts/2016-05-02-01-365-b.mp3,0,0,201605121\r\nSweden 2016 - Frans,If I Were Sorry,159.818,45.0,Free Excerpts/2016-05-02-39-818-c2.mp3,0,0,201605160\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,7.095,45.0,Set 2/V1/2017-05-00-07-095-v1.mp3,0,1,201705007\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,7.098,45.0,Set 2/Karaoke/2017-05-00-07-098-k.mp3,0,3,201705007\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,43.617,45.0,Free Excerpts/2017-05-00-43-617-c1.mp3,0,0,201705044\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,80.322,45.0,Set 2/V2/2017-05-01-20-322-v2.mp3,0,2,201705080\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,99.004,45.0,Free Excerpts/2017-05-01-39-004-c2.mp3,0,0,201705099\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,133.472,45.0,Free Excerpts/2017-05-02-13-472-o.mp3,0,0,201705133\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,2.289,45.0,Free Excerpts/2018-07-00-02-289-v1.mp3,0,0,201807002\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,18.315,45.0,Free Excerpts/2018-07-00-18-315-c1.mp3,0,0,201807018\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,54.903,45.0,Free Excerpts/2018-07-00-54-903-v2.mp3,0,0,201807055\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,88.999,45.0,Free Excerpts/2018-07-01-28-999-c2.mp3,0,0,201807089\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,125.657,45.0,Free Excerpts/2018-07-02-05-657-b.mp3,0,0,201807126\r\nSweden 2019 - John Lundvik,Too Late for Love,0.0,45.0,Set 2/V1/2019-05-00-00-000-v1.mp3,0,1,201905000\r\nSweden 2019 - John Lundvik,Too Late for Love,0.0,45.0,Set 2/Karaoke/2019-05-00-00-000-k.mp3,0,3,201905000\r\nSweden 2019 - John Lundvik,Too Late for Love,17.834,45.0,Free Excerpts/2019-05-00-17-834-pc1.mp3,0,0,201905018\r\nSweden 2019 - John Lundvik,Too Late for Love,34.453,45.0,Free Excerpts/2019-05-00-34-453-pc2.mp3,0,0,201905034\r\nSweden 2019 - John Lundvik,Too Late for Love,52.895,45.0,Free Excerpts/2019-05-00-52-895-c1.mp3,0,0,201905053\r\nSweden 2019 - John Lundvik,Too Late for Love,66.676,45.0,Set 2/V2/2019-05-01-06-676-v2.mp3,0,2,201905067\r\nSweden 2019 - John Lundvik,Too Late for Love,129.906,45.0,Free Excerpts/2019-05-02-09-906-b.mp3,0,0,201905130\r\nSweden 2019 - John Lundvik,Too Late for Love,160.306,45.0,Free Excerpts/2019-05-02-40-306-c2.mp3,0,0,201905160\r\nSwitzerland 2019 - Luca Hänni,She Got Me,0.0,45.0,Free Excerpts/2019-04-00-00-000-i.mp3,0,0,201904000\r\nSwitzerland 2019 - Luca Hänni,She Got Me,9.799,45.0,Free Excerpts/2019-04-00-09-799-v1.mp3,0,0,201904010\r\nSwitzerland 2019 - Luca Hänni,She Got Me,28.985,45.0,Free Excerpts/2019-04-00-28-985-pc.mp3,0,0,201904029\r\nSwitzerland 2019 - Luca Hänni,She Got Me,38.887,45.0,Free Excerpts/2019-04-00-38-887-c1.mp3,0,0,201904039\r\nSwitzerland 2019 - Luca Hänni,She Got Me,57.97,45.0,Free Excerpts/2019-04-00-57-970-b1.mp3,0,0,201904058\r\nSwitzerland 2019 - Luca Hänni,She Got Me,69.419,45.0,Free Excerpts/2019-04-01-09-419-v2.mp3,0,0,201904069\r\nSwitzerland 2019 - Luca Hänni,She Got Me,127.079,45.0,Free Excerpts/2019-04-02-07-079-b2.mp3,0,0,201904127\r\nSwitzerland 2019 - Luca Hänni,She Got Me,154.62,45.0,Free Excerpts/2019-04-02-34-620-c2.mp3,0,0,201904155\r\nUkraine 2016 - Jamala,1944,0.0,45.0,Free Excerpts/2016-01-00-00-000-i.mp3,0,0,201601000\r\nUkraine 2016 - Jamala,1944,7.925,45.0,Free Excerpts/2016-01-00-07-925-v1.mp3,0,0,201601008\r\nUkraine 2016 - Jamala,1944,39.5,45.0,Free Excerpts/2016-01-00-39-500-c1.mp3,0,0,201601040\r\nUkraine 2016 - Jamala,1944,72.043,45.0,Free Excerpts/2016-01-01-12-043-v2.mp3,0,0,201601072\r\nUkraine 2016 - Jamala,1944,132.559,45.0,Free Excerpts/2016-01-02-12-559-b.mp3,0,0,201601133\r\nUkraine 2016 - Jamala,1944,151.166,45.0,Free Excerpts/2016-01-02-31-166-c2.mp3,0,0,201601151\r\nUkraine 2018 - Mélovin,Under the Ladder,2.956,45.0,Free Excerpts/2018-17-00-02-956-v1.mp3,0,0,201817003\r\nUkraine 2018 - Mélovin,Under the Ladder,30.924,45.0,Free Excerpts/2018-17-00-30-924-c1.mp3,0,0,201817031\r\nUkraine 2018 - Mélovin,Under the Ladder,58.209,45.0,Free Excerpts/2018-17-00-58-209-v2.mp3,0,0,201817058\r\nUkraine 2018 - Mélovin,Under the Ladder,85.722,45.0,Free Excerpts/2018-17-01-25-722-c2.mp3,0,0,201817086\r\nUkraine 2018 - Mélovin,Under the Ladder,128.014,45.0,Free Excerpts/2018-17-02-8-014-c3.mp3,0,0,201817128\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,0.0,45.0,Set 2/V1/2017-15-00-00-000-v1.mp3,0,1,201715000\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,0.0,45.0,Set 2/Karaoke/2017-15-00-00-000-k.mp3,0,3,201715000\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,37.979,45.0,Free Excerpts/2017-15-00-37-979-c1.mp3,0,0,201715038\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,70.925,45.0,Set 2/V2/2017-15-01-10-925-v2.mp3,0,2,201715071\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,94.575,45.0,Free Excerpts/2017-15-01-34-575-c2.mp3,0,0,201715095\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,124.004,45.0,Free Excerpts/2017-15-02-04-004-b.mp3,0,0,201715124\r\n" + "csv": "Albania 2018 - Eugent Bushpepa,Mall,7.046,45.0,Set 2/V1/2018-11-00-07-046-v1.mp3,1,201811007\r\nAlbania 2018 - Eugent Bushpepa,Mall,7.046,45.0,Set 2/Karaoke/2018-11-00-07-046-k.mp3,3,201811007\r\nAlbania 2018 - Eugent Bushpepa,Mall,49.053,45.0,Free Excerpts/2018-11-00-49-053-c1.mp3,0,201811049\r\nAlbania 2018 - Eugent Bushpepa,Mall,81.788,45.0,Set 2/V2/2018-11-01-21-788-v2.mp3,2,201811082\r\nAlbania 2018 - Eugent Bushpepa,Mall,113.647,45.0,Free Excerpts/2018-11-01-53-647-b.mp3,0,201811114\r\nAlbania 2018 - Eugent Bushpepa,Mall,132.505,45.0,Free Excerpts/2018-11-02-12-505-c2.mp3,0,201811133\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,0.0,45.0,Free Excerpts/2019-17-00-00-000-i.mp3,0,201917000\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,4.021,45.0,Free Excerpts/2019-17-00-04-021-v1.mp3,0,201917004\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,36.829,45.0,Free Excerpts/2019-17-00-36-829-pc.mp3,0,201917037\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,52.703,45.0,Free Excerpts/2019-17-00-52-703-c1.mp3,0,201917053\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,85.722,45.0,Free Excerpts/2019-17-01-25-722-b1.mp3,0,201917086\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,114.295,45.0,Free Excerpts/2019-17-01-54-295-b2.mp3,0,201917114\r\nAlbania 2019 - Jonida Maliqi,Ktheju Tokës,146.891,45.0,Free Excerpts/2019-17-02-26-891-c2.mp3,0,201917147\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,1.427,45.0,Free Excerpts/2016-07-00-01-427-v1.mp3,0,201607001\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,16.1,45.0,Free Excerpts/2016-07-00-16-100-v1.mp3,0,201607016\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,50.034,45.0,Free Excerpts/2016-07-00-50-034-c.mp3,0,201607050\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,86.209,45.0,Free Excerpts/2016-07-01-26-209-v2.mp3,0,201607086\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,118.002,45.0,Free Excerpts/2016-07-01-58-002-pc.mp3,0,201607118\r\nArmenia 2016 - Iveta Mukuchyan,LoveWave,132.574,45.0,Free Excerpts/2016-07-02-12-574-c2.mp3,0,201607133\r\nArmenia 2017 - Artsvik,Fly With Me,0.0,45.0,Free Excerpts/2017-18-00-00-000-i.mp3,0,201718000\r\nArmenia 2017 - Artsvik,Fly With Me,33.569,45.0,Set 2/Karaoke/2017-18-00-33-569-k.mp3,3,201718034\r\nArmenia 2017 - Artsvik,Fly With Me,33.569,45.0,Set 2/V1/2017-18-00-33-569-v1.mp3,1,201718034\r\nArmenia 2017 - Artsvik,Fly With Me,76.385,45.0,Set 2/V2/2017-18-01-16-385-v2.mp3,2,201718076\r\nArmenia 2017 - Artsvik,Fly With Me,97.099,45.0,Free Excerpts/2017-18-01-37-099-c1.mp3,0,201718097\r\nArmenia 2017 - Artsvik,Fly With Me,129.515,45.0,Free Excerpts/2017-18-02-09-515-o.mp3,0,201718130\r\nAustralia 2016 - Dami Im,Sound of Silence,3.149,45.0,Free Excerpts/2016-02-00-03-149-v1.mp3,0,201602003\r\nAustralia 2016 - Dami Im,Sound of Silence,30.549,45.0,Free Excerpts/2016-02-00-30-549-pc.mp3,0,201602031\r\nAustralia 2016 - Dami Im,Sound of Silence,37.843,45.0,Free Excerpts/2016-02-00-37-843-c1.mp3,0,201602038\r\nAustralia 2016 - Dami Im,Sound of Silence,66.557,45.0,Free Excerpts/2016-02-01-06-557-v2.mp3,0,201602067\r\nAustralia 2016 - Dami Im,Sound of Silence,130.28,45.0,Free Excerpts/2016-02-02-10-280-b.mp3,0,201602130\r\nAustralia 2016 - Dami Im,Sound of Silence,150.541,45.0,Free Excerpts/2016-02-02-30-541-c2.mp3,0,201602151\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,0.0,45.0,Set 2/Karaoke/2017-09-00-00-000-k.mp3,3,201709000\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,0.0,45.0,Set 2/V1/2017-09-00-00-000-v1.mp3,1,201709000\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,23.368,45.0,Free Excerpts/2017-09-00-23-368-c1.mp3,0,201709023\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,52.023,45.0,Set 2/V2/2017-09-00-52-023-v2.mp3,2,201709052\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,74.848,45.0,Free Excerpts/2017-09-01-14-848-c2.mp3,0,201709075\r\nAustralia 2017 - Isaiah Firebrace,Don't Come Easy,101.346,45.0,Free Excerpts/2017-09-01-41-346-b.mp3,0,201709101\r\nAustralia 2018 - Jessica Mauboy,We Got Love,0.0,45.0,Free Excerpts/2018-20-00-00-000-v1.mp3,0,201820000\r\nAustralia 2018 - Jessica Mauboy,We Got Love,33.716,45.0,Free Excerpts/2018-20-00-33-716-c1.mp3,0,201820034\r\nAustralia 2018 - Jessica Mauboy,We Got Love,66.966,45.0,Free Excerpts/2018-20-01-06-966-v2.mp3,0,201820067\r\nAustralia 2018 - Jessica Mauboy,We Got Love,101.212,45.0,Free Excerpts/2018-20-01-41-212-c2.mp3,0,201820101\r\nAustralia 2018 - Jessica Mauboy,We Got Love,133.562,45.0,Free Excerpts/2018-20-02-13-562-b.mp3,0,201820134\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,0.0,45.0,Free Excerpts/2019-09-00-00-000-v1.mp3,0,201909000\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,21.741,45.0,Free Excerpts/2019-09-00-21-741-pc.mp3,0,201909022\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,31.448,45.0,Free Excerpts/2019-09-00-31-448-c1.mp3,0,201909031\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,63.806,45.0,Free Excerpts/2019-09-01-03-806-v2.mp3,0,201909064\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,109.309,45.0,Free Excerpts/2019-09-01-49-309-b.mp3,0,201909109\r\nAustralia 2019 - Kate Miller-Heidke,Zero Gravity,140.151,45.0,Free Excerpts/2019-09-02-20-151-c2.mp3,0,201909140\r\nAustria 2016 - Zoë,Loin d'ici,3.827,45.0,Free Excerpts/2016-13-00-03-827-v1.mp3,0,201613004\r\nAustria 2016 - Zoë,Loin d'ici,27.098,45.0,Free Excerpts/2016-13-00-27-098-pc.mp3,0,201613027\r\nAustria 2016 - Zoë,Loin d'ici,39.199,45.0,Free Excerpts/2016-13-00-39-199-c1.mp3,0,201613039\r\nAustria 2016 - Zoë,Loin d'ici,55.023,45.0,Free Excerpts/2016-13-00-55-023-v2.mp3,0,201613055\r\nAustria 2016 - Zoë,Loin d'ici,120.39,45.0,Free Excerpts/2016-13-02-00-390-b.mp3,0,201613120\r\nAustria 2016 - Zoë,Loin d'ici,133.525,45.0,Free Excerpts/2016-13-02-13-525-c2.mp3,0,201613134\r\nAustria 2017 - Nathan Trent,Running On Air,0.0,45.0,Set 2/V1/2017-16-00-00-000-v1.mp3,1,201716000\r\nAustria 2017 - Nathan Trent,Running On Air,0.0,45.0,Set 2/Karaoke/2017-16-00-00-000-k.mp3,3,201716000\r\nAustria 2017 - Nathan Trent,Running On Air,20.602,45.0,Free Excerpts/2017-16-00-20-602-c1.mp3,0,201716021\r\nAustria 2017 - Nathan Trent,Running On Air,58.522,45.0,Set 2/V2/2017-16-00-58-522-v2.mp3,2,201716059\r\nAustria 2017 - Nathan Trent,Running On Air,79.068,45.0,Free Excerpts/2017-16-01-19-068-c2.mp3,0,201716079\r\nAustria 2017 - Nathan Trent,Running On Air,120.017,45.0,Free Excerpts/2017-16-02-00-017-o.mp3,0,201716120\r\nAustria 2018 - Cesár Sampson,Nobody But You,0.0,45.0,Free Excerpts/2018-03-00-00-000-v1.mp3,0,201803000\r\nAustria 2018 - Cesár Sampson,Nobody But You,34.092,45.0,Free Excerpts/2018-03-00-34-092-c1.mp3,0,201803034\r\nAustria 2018 - Cesár Sampson,Nobody But You,62.974,45.0,Free Excerpts/2018-03-01-02-974-v2.mp3,0,201803063\r\nAustria 2018 - Cesár Sampson,Nobody But You,96.036,45.0,Free Excerpts/2018-03-01-36-036-c2.mp3,0,201803096\r\nAustria 2018 - Cesár Sampson,Nobody But You,119.441,45.0,Free Excerpts/2018-03-01-59-441-o.mp3,0,201803119\r\nAzerbaijan 2016 - Samra,Miracle,4.7379999999999995,45.0,Free Excerpts/2016-17-00-04-738-v1.mp3,0,201617005\r\nAzerbaijan 2016 - Samra,Miracle,46.345,45.0,Free Excerpts/2016-17-00-46-345-c1.mp3,0,201617046\r\nAzerbaijan 2016 - Samra,Miracle,72.505,45.0,Free Excerpts/2016-17-01-12-505-v2.mp3,0,201617073\r\nAzerbaijan 2016 - Samra,Miracle,133.063,45.0,Free Excerpts/2016-17-02-13-063-b.mp3,0,201617133\r\nAzerbaijan 2016 - Samra,Miracle,153.249,45.0,Free Excerpts/2016-17-02-33-249-c2.mp3,0,201617153\r\nAzerbaijan 2017 - Dihaj,Skeletons,10.656,45.0,Set 2/Karaoke/2017-14-00-10-656-k.mp3,3,201714011\r\nAzerbaijan 2017 - Dihaj,Skeletons,10.656,45.0,Set 2/V1/2017-14-00-10-656-v1.mp3,1,201714011\r\nAzerbaijan 2017 - Dihaj,Skeletons,51.847,45.0,Free Excerpts/2017-14-00-51-847-c1.mp3,0,201714052\r\nAzerbaijan 2017 - Dihaj,Skeletons,79.996,45.0,Set 2/V2/2017-14-01-19-996-v2.mp3,2,201714080\r\nAzerbaijan 2017 - Dihaj,Skeletons,110.763,45.0,Free Excerpts/2017-14-01-50-763-c2.mp3,0,201714111\r\nAzerbaijan 2017 - Dihaj,Skeletons,134.072,45.0,Free Excerpts/2017-14-02-14-072-o.mp3,0,201714134\r\nAzerbaijan 2019 - Chingiz,Truth,8.422,45.0,Free Excerpts/2019-08-00-08-422-v1.mp3,0,201908008\r\nAzerbaijan 2019 - Chingiz,Truth,27.897,45.0,Free Excerpts/2019-08-00-27-897-pc.mp3,0,201908028\r\nAzerbaijan 2019 - Chingiz,Truth,47.162,45.0,Free Excerpts/2019-08-00-47-162-c1.mp3,0,201908047\r\nAzerbaijan 2019 - Chingiz,Truth,75.69,45.0,Free Excerpts/2019-08-01-15-690-v2.mp3,0,201908076\r\nAzerbaijan 2019 - Chingiz,Truth,133.169,45.0,Free Excerpts/2019-08-02-13-169-b.mp3,0,201908133\r\nAzerbaijan 2019 - Chingiz,Truth,142.433,45.0,Free Excerpts/2019-08-02-22-433-c2.mp3,0,201908142\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,23.808,45.0,Set 2/V1/2017-17-00-23-808-v1.mp3,1,201717024\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,23.808,45.0,Set 2/Karaoke/2017-17-00-23-808-k.mp3,3,201717024\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,48.513,45.0,Free Excerpts/2017-17-00-48-513-c1.mp3,0,201717049\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,85.574,45.0,Set 2/V2/2017-17-01-25-574-v2.mp3,2,201717086\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,110.731,45.0,Free Excerpts/2017-17-01-50-731-c2.mp3,0,201717111\r\nBelarus 2017 - Naviband,Historyja Majho Zyccia,135.0,45.0,Free Excerpts/2017-17-02-15-000-o.mp3,0,201717135\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,0.0,45.0,Free Excerpts/2016-10-00-00-000-i.mp3,0,201610000\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,8.382,45.0,Free Excerpts/2016-10-00-08-382-v1.mp3,0,201610008\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,17.257,45.0,Free Excerpts/2016-10-00-17-257-pc.mp3,0,201610017\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,41.121,45.0,Free Excerpts/2016-10-00-41-121-c1.mp3,0,201610041\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,104.955,45.0,Free Excerpts/2016-10-01-44-955-v2.mp3,0,201610105\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,119.911,45.0,Free Excerpts/2016-10-01-59-911-b.mp3,0,201610120\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,134.111,45.0,Free Excerpts/2016-10-02-14-111-b.mp3,0,201610134\r\nBelgium 2016 - Laura Tesoro,What's the Pressure,150.086,45.0,Free Excerpts/2016-10-02-30-086-c2.mp3,0,201610150\r\nBelgium 2017 - Blanche,City Lights,26.47,45.0,Set 2/Karaoke/2017-04-00-26-470-k.mp3,3,201704026\r\nBelgium 2017 - Blanche,City Lights,26.47,45.0,Set 2/V1/2017-04-00-26-470-v1.mp3,1,201704026\r\nBelgium 2017 - Blanche,City Lights,42.0,45.0,Free Excerpts/2017-04-00-42-000-c1.mp3,0,201704042\r\nBelgium 2017 - Blanche,City Lights,64.19,45.0,Set 2/V2/2017-04-01-04-190-v2.mp3,2,201704064\r\nBelgium 2017 - Blanche,City Lights,104.312,45.0,Free Excerpts/2017-04-01-44-312-b.mp3,0,201704104\r\nBelgium 2017 - Blanche,City Lights,129.637,45.0,Free Excerpts/2017-04-02-09-637-c2.mp3,0,201704130\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,8.41,45.0,Free Excerpts/2016-04-00-08-410-v1.mp3,0,201604008\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,25.231,45.0,Free Excerpts/2016-04-00-25-231-pc.mp3,0,201604025\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,43.693,45.0,Free Excerpts/2016-04-00-43-693-c1.mp3,0,201604044\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,67.078,45.0,Free Excerpts/2016-04-01-07-078-v2.mp3,0,201604067\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,119.591,45.0,Free Excerpts/2016-04-01-59-591-b.mp3,0,201604120\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,128.206,45.0,Free Excerpts/2016-04-02-08-206-b.mp3,0,201604128\r\nBulgaria 2016 - Poli Genova,If Love Was a Crime,137.95,45.0,Free Excerpts/2016-04-02-17-950-c2.mp3,0,201604138\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,7.306,45.0,Set 2/Karaoke/2017-02-00-07-306-k.mp3,3,201702007\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,7.306,45.0,Set 2/V1/2017-02-00-07-306-v1.mp3,1,201702007\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,36.854,45.0,Free Excerpts/2017-02-00-36-854-c1.mp3,0,201702037\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,83.449,45.0,Set 2/V2/2017-02-01-23-449-v2.mp3,2,201702083\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,113.322,45.0,Free Excerpts/2017-02-01-53-322-c2.mp3,0,201702113\r\nBulgaria 2017 - Kristian Kostov,Beautiful Mess,135.523,45.0,Free Excerpts/2017-02-02-15-523-o.mp3,0,201702136\r\nBulgaria 2018 - Equinox,Bones,13.405,45.0,Set 2/V1/2018-14-00-13-405-v1.mp3,1,201814013\r\nBulgaria 2018 - Equinox,Bones,13.405,45.0,Set 2/Karaoke/2018-14-00-13-405-k.mp3,3,201814013\r\nBulgaria 2018 - Equinox,Bones,34.58,45.0,Free Excerpts/2018-14-00-34-580-b.mp3,0,201814035\r\nBulgaria 2018 - Equinox,Bones,53.462,45.0,Free Excerpts/2018-14-00-53-462-c1.mp3,0,201814053\r\nBulgaria 2018 - Equinox,Bones,78.986,45.0,Set 2/V2/2018-14-01-18-986-v2.mp3,2,201814079\r\nBulgaria 2018 - Equinox,Bones,109.653,45.0,Free Excerpts/2018-14-01-49-653-c2.mp3,0,201814110\r\nCroatia 2017 - Jacques Houdek,My Friend,0.0,45.0,Free Excerpts/2017-13-00-00-000-i.mp3,0,201713000\r\nCroatia 2017 - Jacques Houdek,My Friend,19.598,45.0,Free Excerpts/2017-13-00-19-598-v1.mp3,0,201713020\r\nCroatia 2017 - Jacques Houdek,My Friend,56.616,45.0,Free Excerpts/2017-13-00-56-616-c1.mp3,0,201713057\r\nCroatia 2017 - Jacques Houdek,My Friend,85.753,45.0,Free Excerpts/2017-13-01-25-753-b.mp3,0,201713086\r\nCroatia 2017 - Jacques Houdek,My Friend,126.213,45.0,Free Excerpts/2017-13-02-06-213-c2.mp3,0,201713126\r\nCyprus 2018 - Eleni Foureira,Fuego,9.767,45.0,Set 2/Karaoke/2018-02-00-09-767-k.mp3,3,201802010\r\nCyprus 2018 - Eleni Foureira,Fuego,9.767,45.0,Set 2/V1/2018-02-00-09-767-v1.mp3,1,201802010\r\nCyprus 2018 - Eleni Foureira,Fuego,46.894,45.0,Free Excerpts/2018-02-00-46-894-c1.mp3,0,201802047\r\nCyprus 2018 - Eleni Foureira,Fuego,76.397,45.0,Set 2/V2/2018-02-01-16-397-v2.mp3,2,201802076\r\nCyprus 2018 - Eleni Foureira,Fuego,103.718,45.0,Free Excerpts/2018-02-01-43-718-c2.mp3,0,201802104\r\nCyprus 2018 - Eleni Foureira,Fuego,133.106,45.0,Free Excerpts/2018-02-02-13-106-o.mp3,0,201802133\r\nCyprus 2019 - Tamta,Replay,0.0,45.0,Free Excerpts/2019-13-00-00-000-i.mp3,0,201913000\r\nCyprus 2019 - Tamta,Replay,9.67,45.0,Set 2/V1/2019-13-00-09-670-v1.mp3,1,201913010\r\nCyprus 2019 - Tamta,Replay,9.67,45.0,Set 2/Karaoke/2019-13-00-09-670-k.mp3,3,201913010\r\nCyprus 2019 - Tamta,Replay,27.926,45.0,Free Excerpts/2019-13-00-27-926-pc.mp3,0,201913028\r\nCyprus 2019 - Tamta,Replay,46.082,45.0,Free Excerpts/2019-13-00-46-082-c1.mp3,0,201913046\r\nCyprus 2019 - Tamta,Replay,66.212,45.0,Set 2/V2/2019-13-01-06-212-v2.mp3,2,201913066\r\nCyprus 2019 - Tamta,Replay,122.557,45.0,Free Excerpts/2019-13-02-02-557-b.mp3,0,201913123\r\nCyprus 2019 - Tamta,Replay,141.01,45.0,Free Excerpts/2019-13-02-21-010-c2.mp3,0,201913141\r\nCzechia 2018 - Mikolas Josef,Lie To Me,13.993,45.0,Set 2/V1/2018-06-00-13-993-v1.mp3,1,201806014\r\nCzechia 2018 - Mikolas Josef,Lie To Me,13.993,45.0,Set 2/Karaoke/2018-06-00-13-993-k.mp3,3,201806014\r\nCzechia 2018 - Mikolas Josef,Lie To Me,39.862,45.0,Free Excerpts/2018-06-00-39-862-c1.mp3,0,201806040\r\nCzechia 2018 - Mikolas Josef,Lie To Me,67.81,45.0,Set 2/V2/2018-06-01-07-810-v2.mp3,2,201806068\r\nCzechia 2018 - Mikolas Josef,Lie To Me,94.073,45.0,Free Excerpts/2018-06-01-34-073-c2.mp3,0,201806094\r\nCzechia 2018 - Mikolas Josef,Lie To Me,113.878,45.0,Free Excerpts/2018-06-01-53-878-b.mp3,0,201806114\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,0.0,45.0,Set 2/Karaoke/2019-11-00-00-000-k.mp3,3,201911000\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,0.0,45.0,Set 2/V1/2019-11-00-00-000-v1.mp3,1,201911000\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,29.476,45.0,Free Excerpts/2019-11-00-29-476-pc.mp3,0,201911029\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,41.92,45.0,Free Excerpts/2019-11-00-41-920-c1.mp3,0,201911042\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,78.128,45.0,Set 2/V2/2019-11-01-18-128-v2.mp3,2,201911078\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,147.178,45.0,Free Excerpts/2019-11-02-27-178-b.mp3,0,201911147\r\nCzechia 2019 - Lake Malawi,Friend of a Friend,154.522,45.0,Free Excerpts/2019-11-02-34-522-c2.mp3,0,201911155\r\nDenmark 2017 - Anja,Where I Am,4.552,45.0,Set 2/V1/2017-20-00-04-552-v1.mp3,1,201720005\r\nDenmark 2017 - Anja,Where I Am,4.552,45.0,Set 2/Karaoke/2017-20-00-04-552-k.mp3,3,201720005\r\nDenmark 2017 - Anja,Where I Am,46.306,45.0,Free Excerpts/2017-20-00-46-306-c1.mp3,0,201720046\r\nDenmark 2017 - Anja,Where I Am,68.057,45.0,Set 2/V2/2017-20-01-08-057-v2.mp3,2,201720068\r\nDenmark 2017 - Anja,Where I Am,109.71,45.0,Free Excerpts/2017-20-01-49-710-b.mp3,0,201720110\r\nDenmark 2017 - Anja,Where I Am,131.106,45.0,Free Excerpts/2017-20-02-11-106-c2.mp3,0,201720131\r\nDenmark 2018 - Rasmussen,Higher Ground,6.223,45.0,Set 2/V1/2018-09-00-06-223-v1.mp3,1,201809006\r\nDenmark 2018 - Rasmussen,Higher Ground,6.223,45.0,Set 2/Karaoke/2018-09-00-06-223-k.mp3,3,201809006\r\nDenmark 2018 - Rasmussen,Higher Ground,34.077,45.0,Free Excerpts/2018-09-00-34-077-c1.mp3,0,201809034\r\nDenmark 2018 - Rasmussen,Higher Ground,61.368,45.0,Set 2/V2/2018-09-01-01-368-v2.mp3,2,201809061\r\nDenmark 2018 - Rasmussen,Higher Ground,77.659,45.0,Free Excerpts/2018-09-01-17-659-c2.mp3,0,201809078\r\nDenmark 2018 - Rasmussen,Higher Ground,124.022,45.0,Free Excerpts/2018-09-02-04-022-b.mp3,0,201809124\r\nDenmark 2019 - Leonora,Love Is Forever,3.189,45.0,Set 2/Karaoke/2019-12-00-03-189-k.mp3,3,201912003\r\nDenmark 2019 - Leonora,Love Is Forever,3.189,45.0,Set 2/V1/2019-12-00-03-189-v1.mp3,1,201912003\r\nDenmark 2019 - Leonora,Love Is Forever,30.754,45.0,Free Excerpts/2019-12-00-30-754-c1.mp3,0,201912031\r\nDenmark 2019 - Leonora,Love Is Forever,61.508,45.0,Set 2/V2/2019-12-01-01-508-v2.mp3,2,201912062\r\nDenmark 2019 - Leonora,Love Is Forever,121.268,45.0,Free Excerpts/2019-12-02-01-268-b.mp3,0,201912121\r\nDenmark 2019 - Leonora,Love Is Forever,148.937,45.0,Free Excerpts/2019-12-02-28-937-c2.mp3,0,201912149\r\nEstonia 2018 - Elina Nechayeva,La Forza,3.467,45.0,Set 2/Karaoke/2018-08-00-03-467-k.mp3,3,201808003\r\nEstonia 2018 - Elina Nechayeva,La Forza,3.467,45.0,Set 2/V1/2018-08-00-03-467-v1.mp3,1,201808003\r\nEstonia 2018 - Elina Nechayeva,La Forza,41.074,45.0,Free Excerpts/2018-08-00-41-074-c1.mp3,0,201808041\r\nEstonia 2018 - Elina Nechayeva,La Forza,84.015,45.0,Set 2/V2/2018-08-01-24-015-v2.mp3,2,201808084\r\nEstonia 2018 - Elina Nechayeva,La Forza,125.556,45.0,Free Excerpts/2018-08-02-05-556-c2.mp3,0,201808126\r\nEstonia 2019 - Victor Crone,Storm,0.0,45.0,Free Excerpts/2019-20-00-00-000-v1.mp3,0,201920000\r\nEstonia 2019 - Victor Crone,Storm,30.806,45.0,Free Excerpts/2019-20-00-30-806-c1.mp3,0,201920031\r\nEstonia 2019 - Victor Crone,Storm,45.946,45.0,Free Excerpts/2019-20-00-45-946-v2.mp3,0,201920046\r\nEstonia 2019 - Victor Crone,Storm,105.875,45.0,Free Excerpts/2019-20-01-45-875-b1.mp3,0,201920106\r\nEstonia 2019 - Victor Crone,Storm,135.945,45.0,Free Excerpts/2019-20-02-15-945-b2.mp3,0,201920136\r\nEstonia 2019 - Victor Crone,Storm,150.875,45.0,Free Excerpts/2019-20-02-30-875-c2.mp3,0,201920151\r\nEstonia 2019 - Victor Crone,Storm,166.12,45.0,Free Excerpts/2019-20-02-46-120-o.mp3,0,201920166\r\nFrance 2016 - Amir,J'ai Cherché,2.374,45.0,Free Excerpts/2016-06-00-02-374-v1.mp3,0,201606002\r\nFrance 2016 - Amir,J'ai Cherché,33.85,45.0,Free Excerpts/2016-06-00-33-850-c1.mp3,0,201606034\r\nFrance 2016 - Amir,J'ai Cherché,64.708,45.0,Free Excerpts/2016-06-01-04-708-v2.mp3,0,201606065\r\nFrance 2016 - Amir,J'ai Cherché,80.291,45.0,Free Excerpts/2016-06-01-20-291-c2.mp3,0,201606080\r\nFrance 2016 - Amir,J'ai Cherché,111.974,45.0,Free Excerpts/2016-06-01-51-974-b.mp3,0,201606112\r\nFrance 2016 - Amir,J'ai Cherché,127.97,45.0,Free Excerpts/2016-06-02-07-970-c3.mp3,0,201606128\r\nFrance 2016 - Amir,J'ai Cherché,156.454,45.0,Free Excerpts/2016-06-02-36-454-c4.mp3,0,201606156\r\nFrance 2017 - Alma,Requiem,4.06,45.0,Set 2/V1/2017-12-00-04-060-v1.mp3,1,201712004\r\nFrance 2017 - Alma,Requiem,4.06,45.0,Set 2/Karaoke/2017-12-00-04-060-k.mp3,3,201712004\r\nFrance 2017 - Alma,Requiem,22.165,45.0,Free Excerpts/2017-12-00-22-165-c1.mp3,0,201712022\r\nFrance 2017 - Alma,Requiem,59.521,45.0,Set 2/V2/2017-12-00-59-521-v2.mp3,2,201712060\r\nFrance 2017 - Alma,Requiem,77.796,45.0,Free Excerpts/2017-12-01-17-796-c2.mp3,0,201712078\r\nFrance 2017 - Alma,Requiem,113.677,45.0,Free Excerpts/2017-12-01-53-677-b.mp3,0,201712114\r\nFrance 2018 - Madame Monsieur,Mercy,19.063,45.0,Set 2/Karaoke/2018-13-00-19-063-k.mp3,3,201813019\r\nFrance 2018 - Madame Monsieur,Mercy,19.063,45.0,Set 2/V1/2018-13-00-19-063-v1.mp3,1,201813019\r\nFrance 2018 - Madame Monsieur,Mercy,39.726,45.0,Free Excerpts/2018-13-00-39-726-c1.mp3,0,201813040\r\nFrance 2018 - Madame Monsieur,Mercy,78.366,45.0,Set 2/V2/2018-13-01-18-366-v2.mp3,2,201813078\r\nFrance 2018 - Madame Monsieur,Mercy,98.622,45.0,Free Excerpts/2018-13-01-38-622-c2.mp3,0,201813099\r\nFrance 2018 - Madame Monsieur,Mercy,138.81,45.0,Free Excerpts/2018-13-02-18-810-o.mp3,0,201813139\r\nFrance 2019 - Bilal Hassani,Roi,2.198,45.0,Set 2/V1/2019-16-00-02-198-v1.mp3,1,201916002\r\nFrance 2019 - Bilal Hassani,Roi,2.198,45.0,Set 2/Karaoke/2019-16-00-02-198-k.mp3,3,201916002\r\nFrance 2019 - Bilal Hassani,Roi,30.573,45.0,Free Excerpts/2019-16-00-30-573-pc.mp3,0,201916031\r\nFrance 2019 - Bilal Hassani,Roi,44.161,45.0,Free Excerpts/2019-16-00-44-161-c1.mp3,0,201916044\r\nFrance 2019 - Bilal Hassani,Roi,88.422,45.0,Set 2/V2/2019-16-01-28-422-v2.mp3,2,201916088\r\nFrance 2019 - Bilal Hassani,Roi,131.583,45.0,Free Excerpts/2019-16-02-11-583-c2.mp3,0,201916132\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,0.0,45.0,Free Excerpts/2016-20-00-00-000-i.mp3,0,201620000\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,7.25,45.0,Free Excerpts/2016-20-00-07-250-c1.mp3,0,201620007\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,15.205,45.0,Free Excerpts/2016-20-00-15-205-v1.mp3,0,201620015\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,52.764,45.0,Free Excerpts/2016-20-00-52-764-v2.mp3,0,201620053\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,97.875,45.0,Free Excerpts/2016-20-01-37-875-b.mp3,0,201620098\r\nGeorgia 2016 - Nika Kocharov & Young Georgian Lolitaz,Midnight Gold,105.225,45.0,Free Excerpts/2016-20-01-45-225-c2.mp3,0,201620105\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,4.7379999999999995,45.0,Set 2/Karaoke/2018-04-00-04-738-k.mp3,3,201804005\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,4.7379999999999995,45.0,Set 2/V1/2018-04-00-04-738-v1.mp3,1,201804005\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,40.404,45.0,Free Excerpts/2018-04-00-40-404-c1.mp3,0,201804040\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,71.381,45.0,Set 2/V2/2018-04-01-11-381-v2.mp3,2,201804071\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,107.745,45.0,Free Excerpts/2018-04-01-47-745-c2.mp3,0,201804108\r\nGermany 2018 - Michael Schulte,You Let Me Walk Alone,130.441,45.0,Free Excerpts/2018-04-02-10-441-o.mp3,0,201804130\r\nGreece 2017 - Demy,This is Love,4.094,45.0,Free Excerpts/2017-19-00-04-094-v1.mp3,0,201719004\r\nGreece 2017 - Demy,This is Love,26.245,45.0,Free Excerpts/2017-19-00-26-245-b.mp3,0,201719026\r\nGreece 2017 - Demy,This is Love,55.369,45.0,Free Excerpts/2017-19-00-55-369-c1.mp3,0,201719055\r\nGreece 2017 - Demy,This is Love,86.586,45.0,Free Excerpts/2017-19-01-26-586-v2.mp3,0,201719087\r\nGreece 2017 - Demy,This is Love,130.67,45.0,Free Excerpts/2017-19-02-10-670-c2.mp3,0,201719131\r\nHungary 2016 - Freddie,Pioneer,2.774,45.0,Free Excerpts/2016-19-00-02-774-v1.mp3,0,201619003\r\nHungary 2016 - Freddie,Pioneer,30.106,45.0,Free Excerpts/2016-19-00-30-106-pc.mp3,0,201619030\r\nHungary 2016 - Freddie,Pioneer,43.155,45.0,Free Excerpts/2016-19-00-43-155-c1.mp3,0,201619043\r\nHungary 2016 - Freddie,Pioneer,69.768,45.0,Free Excerpts/2016-19-01-09-768-v2.mp3,0,201619070\r\nHungary 2016 - Freddie,Pioneer,123.198,45.0,Free Excerpts/2016-19-02-03-198-b.mp3,0,201619123\r\nHungary 2016 - Freddie,Pioneer,136.145,45.0,Free Excerpts/2016-19-02-16-145-c2.mp3,0,201619136\r\nHungary 2017 - Joci Pápai,Origo,0.0,45.0,Free Excerpts/2017-08-00-00-000-v1.mp3,0,201708000\r\nHungary 2017 - Joci Pápai,Origo,21.141,45.0,Free Excerpts/2017-08-00-21-141-c1.mp3,0,201708021\r\nHungary 2017 - Joci Pápai,Origo,58.512,45.0,Free Excerpts/2017-08-00-58-512- v2.mp3,0,201708059\r\nHungary 2017 - Joci Pápai,Origo,98.967,45.0,Free Excerpts/2017-08-01-38-967-b.mp3,0,201708099\r\nHungary 2017 - Joci Pápai,Origo,138.531,45.0,Free Excerpts/2017-08-02-18-531-c2.mp3,0,201708139\r\nIceland 2019 - Hatari,Hatrið mun sigra,15.005,45.0,Set 2/V1/2019-10-00-15-005-v1.mp3,1,201910015\r\nIceland 2019 - Hatari,Hatrið mun sigra,15.005,45.0,Set 2/Karaoke/2019-10-00-15-005-k.mp3,3,201910015\r\nIceland 2019 - Hatari,Hatrið mun sigra,47.144,45.0,Free Excerpts/2019-10-00-47-144-c1.mp3,0,201910047\r\nIceland 2019 - Hatari,Hatrið mun sigra,66.305,45.0,Set 2/V2/2019-10-01-06-305-v2.mp3,2,201910066\r\nIceland 2019 - Hatari,Hatrið mun sigra,117.2,45.0,Free Excerpts/2019-10-01-57-200-b.mp3,0,201910117\r\nIceland 2019 - Hatari,Hatrið mun sigra,136.666,45.0,Free Excerpts/2019-10-02-16-666-c2.mp3,0,201910137\r\nIreland 2018 - Ryan O'Shaughnessy,Together,4.199,45.0,Set 2/V1/2018-16-00-04-199-v1.mp3,1,201816004\r\nIreland 2018 - Ryan O'Shaughnessy,Together,4.199,45.0,Set 2/Karaoke/2018-16-00-04-199-k.mp3,3,201816004\r\nIreland 2018 - Ryan O'Shaughnessy,Together,32.708,45.0,Free Excerpts/2018-16-00-32-708-c1.mp3,0,201816033\r\nIreland 2018 - Ryan O'Shaughnessy,Together,54.145,45.0,Set 2/V2/2018-16-00-54-145-v2.mp3,2,201816054\r\nIreland 2018 - Ryan O'Shaughnessy,Together,83.317,45.0,Free Excerpts/2018-16-01-23-317-c2.mp3,0,201816083\r\nIreland 2018 - Ryan O'Shaughnessy,Together,109.617,45.0,Free Excerpts/2018-16-01-49-617-b.mp3,0,201816110\r\nIsrael 2016 - Hovi Star,Made of Stars,3.002,45.0,Free Excerpts/2016-14-00-03-002-v1.mp3,0,201614003\r\nIsrael 2016 - Hovi Star,Made of Stars,29.707,45.0,Free Excerpts/2016-14-00-29-707-pc.mp3,0,201614030\r\nIsrael 2016 - Hovi Star,Made of Stars,40.368,45.0,Free Excerpts/2016-14-00-40-368-c1.mp3,0,201614040\r\nIsrael 2016 - Hovi Star,Made of Stars,67.979,45.0,Free Excerpts/2016-14-01-07-979-v2.mp3,0,201614068\r\nIsrael 2016 - Hovi Star,Made of Stars,118.309,45.0,Free Excerpts/2016-14-01-58-309-b.mp3,0,201614118\r\nIsrael 2016 - Hovi Star,Made of Stars,137.975,45.0,Free Excerpts/2016-14-02-17-975-c2.mp3,0,201614138\r\nIsrael 2018 - Netta Barzilai,Toy,14.905,45.0,Free Excerpts/2018-01-00-14-905-v1.mp3,0,201801015\r\nIsrael 2018 - Netta Barzilai,Toy,44.556,45.0,Free Excerpts/2018-01-00-44-556-c1.mp3,0,201801045\r\nIsrael 2018 - Netta Barzilai,Toy,81.579,45.0,Free Excerpts/2018-01-01-21-579-b.mp3,0,201801082\r\nIsrael 2018 - Netta Barzilai,Toy,103.376,45.0,Free Excerpts/2018-01-01-43-376-c2.mp3,0,201801103\r\nIsrael 2018 - Netta Barzilai,Toy,132.546,45.0,Free Excerpts/2018-01-02-12-546-o.mp3,0,201801133\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,0.0,45.0,Free Excerpts/2016-16-00-00-000-v1.mp3,0,201616000\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,24.095,45.0,Free Excerpts/2016-16-00-24-095-pc.mp3,0,201616024\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,47.222,45.0,Free Excerpts/2016-16-00-47-222-c1.mp3,0,201616047\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,78.739,45.0,Free Excerpts/2016-16-01-18-739-v2.mp3,0,201616079\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,139.3,45.0,Free Excerpts/2016-16-02-19-300-b.mp3,0,201616139\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,151.024,45.0,Free Excerpts/2016-16-02-31-024-c2.mp3,0,201616151\r\nItaly 2016 - Francesca Michielin,No Degree of Separation,164.793,45.0,Free Excerpts/2016-16-02-44-793-o.mp3,0,201616165\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,2.078,45.0,Free Excerpts/2017-06-00-02-078-v1.mp3,0,201706002\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,17.612,45.0,Free Excerpts/2017-06-00-17-612-c1.mp3,0,201706018\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,63.913,45.0,Free Excerpts/2017-06-01-03-913-c2.mp3,0,201706064\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,111.34,45.0,Free Excerpts/2017-06-01-51-340-b.mp3,0,201706111\r\nItaly 2017 - Francesco Gabbani,Occidentali's Karma,137.362,45.0,Free Excerpts/2017-06-02-17-362-o.mp3,0,201706137\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,3.058,45.0,Free Excerpts/2018-05-00-03-058-v1.mp3,0,201805003\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,45.413,45.0,Free Excerpts/2018-05-00-45-413-c1.mp3,0,201805045\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,69.388,45.0,Free Excerpts/2018-05-01-09-388-v2.mp3,0,201805069\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,91.088,45.0,Free Excerpts/2018-05-01-31-088-c2.mp3,0,201805091\r\nItaly 2018 - Ermal Meta & Fabrizio Moro,Non Mi Avete Fatto Niente,112.418,45.0,Free Excerpts/2018-05-01-52-418-b.mp3,0,201805112\r\nItaly 2019 - Mahmood,Soldi,2.657,45.0,Set 2/V1/2019-02-00-02-657-v1.mp3,1,201902003\r\nItaly 2019 - Mahmood,Soldi,2.657,45.0,Set 2/Karaoke/2019-02-00-02-657-k.mp3,3,201902003\r\nItaly 2019 - Mahmood,Soldi,21.79,45.0,Free Excerpts/2019-02-00-21-790-pc.mp3,0,201902022\r\nItaly 2019 - Mahmood,Soldi,44.218,45.0,Free Excerpts/2019-02-00-44-218-c1.mp3,0,201902044\r\nItaly 2019 - Mahmood,Soldi,65.37,45.0,Set 2/V2/2019-02-01-05-370-v2.mp3,2,201902065\r\nItaly 2019 - Mahmood,Soldi,144.347,45.0,Free Excerpts/2019-02-02-24-347-b.mp3,0,201902144\r\nItaly 2019 - Mahmood,Soldi,163.267,45.0,Free Excerpts/2019-02-02-43-267-c2.mp3,0,201902163\r\nLatvia 2016 - Justs,Heartbeat,0.0,45.0,Free Excerpts/2016-15-00-00-000-i.mp3,0,201615000\r\nLatvia 2016 - Justs,Heartbeat,3.654,45.0,Free Excerpts/2016-15-00-03-654-v1.mp3,0,201615004\r\nLatvia 2016 - Justs,Heartbeat,35.526,45.0,Free Excerpts/2016-15-00-35-526-c1.mp3,0,201615036\r\nLatvia 2016 - Justs,Heartbeat,53.797,45.0,Free Excerpts/2016-15-00-53-797-v2.mp3,0,201615054\r\nLatvia 2016 - Justs,Heartbeat,120.485,45.0,Free Excerpts/2016-15-02-00-485-b.mp3,0,201615120\r\nLatvia 2016 - Justs,Heartbeat,136.624,45.0,Free Excerpts/2016-15-02-16-624-c2.mp3,0,201615137\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,0.0,45.0,Free Excerpts/2016-09-00-00-000-i.mp3,0,201609000\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,7.645,45.0,Free Excerpts/2016-09-00-07-645-v1.mp3,0,201609008\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,39.482,45.0,Free Excerpts/2016-09-00-39-482-c1.mp3,0,201609039\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,68.178,45.0,Free Excerpts/2016-09-01-08-178-v2.mp3,0,201609068\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,127.035,45.0,Free Excerpts/2016-09-02-07-035-b.mp3,0,201609127\r\nLithuania 2016 - Donny Montell,I've Been Waiting for This Night,142.953,45.0,Free Excerpts/2016-09-02-22-953-c2.mp3,0,201609143\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,2.743,45.0,Set 2/Karaoke/2018-12-00-02-743-k.mp3,3,201812003\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,2.743,45.0,Set 2/V1/2018-12-00-02-743-v1.mp3,1,201812003\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,45.025,45.0,Free Excerpts/2018-12-00-45-025-c1.mp3,0,201812045\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,87.537,45.0,Set 2/V2/2018-12-01-27-537-v2.mp3,2,201812088\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,115.42,45.0,Free Excerpts/2018-12-01-55-420-c2.mp3,0,201812115\r\nLithuania 2018 - Ieva Zasimauskaitė,When We're Old,135.547,45.0,Free Excerpts/2018-12-02-15-547-o.mp3,0,201812136\r\nMalta 2016 - Ira Losco,Walk on Water,0.0,45.0,Free Excerpts/2016-12-00-00-000-i.mp3,0,201612000\r\nMalta 2016 - Ira Losco,Walk on Water,11.345,45.0,Free Excerpts/2016-12-00-11-345-v1.mp3,0,201612011\r\nMalta 2016 - Ira Losco,Walk on Water,34.455,45.0,Free Excerpts/2016-12-00-34-455-pc.mp3,0,201612034\r\nMalta 2016 - Ira Losco,Walk on Water,50.107,45.0,Free Excerpts/2016-12-00-50-107-pc2.mp3,0,201612050\r\nMalta 2016 - Ira Losco,Walk on Water,63.238,45.0,Free Excerpts/2016-12-01-03-238-c1.mp3,0,201612063\r\nMalta 2016 - Ira Losco,Walk on Water,85.192,45.0,Free Excerpts/2016-12-01-25-192-v2.mp3,0,201612085\r\nMalta 2016 - Ira Losco,Walk on Water,136.245,45.0,Free Excerpts/2016-12-02-16-245-b.mp3,0,201612136\r\nMalta 2016 - Ira Losco,Walk on Water,158.62,45.0,Free Excerpts/2016-12-02-38-620-c2.mp3,0,201612159\r\nMalta 2019 - Michela Pace,Chameleon,0.0,45.0,Free Excerpts/2019-14-00-00-000-i.mp3,0,201914000\r\nMalta 2019 - Michela Pace,Chameleon,9.736,45.0,Free Excerpts/2019-14-00-09-736-v1.mp3,0,201914010\r\nMalta 2019 - Michela Pace,Chameleon,18.755,45.0,Free Excerpts/2019-14-00-18-755-pc1.mp3,0,201914019\r\nMalta 2019 - Michela Pace,Chameleon,28.491,45.0,Free Excerpts/2019-14-00-28-491-pc2.mp3,0,201914028\r\nMalta 2019 - Michela Pace,Chameleon,47.963,45.0,Free Excerpts/2019-14-00-47-963-c1.mp3,0,201914048\r\nMalta 2019 - Michela Pace,Chameleon,68.46,45.0,Free Excerpts/2019-14-01-08-460-v2.mp3,0,201914068\r\nMalta 2019 - Michela Pace,Chameleon,106.79,45.0,Free Excerpts/2019-14-01-46-790-c2.mp3,0,201914107\r\nMalta 2019 - Michela Pace,Chameleon,116.628,45.0,Free Excerpts/2019-14-01-56-628-b.mp3,0,201914117\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,4.039,45.0,Set 2/Karaoke/2017-03-00-04-039-k.mp3,3,201703004\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,4.039,45.0,Set 2/V1/2017-03-00-04-039-v1.mp3,1,201703004\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,20.977,45.0,Free Excerpts/2017-03-00-20-977-c1.mp3,0,201703021\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,57.263,45.0,Set 2/V2/2017-03-00-57-263-v2.mp3,2,201703057\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,73.599,45.0,Free Excerpts/2017-03-01-13-599-c2.mp3,0,201703074\r\nMoldova 2017 - Sunstroke Project,Hey Mamma,91.453,45.0,Free Excerpts/2017-03-01-31-453-b.mp3,0,201703091\r\nMoldova 2018 - DoReDos,My Lucky Day,0.0,45.0,Free Excerpts/2018-10-00-00-000-i.mp3,0,201810000\r\nMoldova 2018 - DoReDos,My Lucky Day,17.039,45.0,Set 2/Karaoke/2018-10-00-17-039-k.mp3,3,201810017\r\nMoldova 2018 - DoReDos,My Lucky Day,17.039,45.0,Set 2/V1/2018-10-00-17-039-v1.mp3,1,201810017\r\nMoldova 2018 - DoReDos,My Lucky Day,49.809,45.0,Free Excerpts/2018-10-00-49-809-c1.mp3,0,201810050\r\nMoldova 2018 - DoReDos,My Lucky Day,100.082,45.0,Set 2/V2/2018-10-01-40-082-v2.mp3,2,201810100\r\nMoldova 2018 - DoReDos,My Lucky Day,132.352,45.0,Free Excerpts/2018-10-02-12-352-c2.mp3,0,201810132\r\nNetherlands 2016 - Douwe Bob,Slow Down,0.0,45.0,Free Excerpts/2016-11-00-00-000-i.mp3,0,201611000\r\nNetherlands 2016 - Douwe Bob,Slow Down,3.501,45.0,Free Excerpts/2016-11-00-03-501-v1.mp3,0,201611004\r\nNetherlands 2016 - Douwe Bob,Slow Down,34.251,45.0,Free Excerpts/2016-11-00-34-251-pc.mp3,0,201611034\r\nNetherlands 2016 - Douwe Bob,Slow Down,49.012,45.0,Free Excerpts/2016-11-00-49-012-c1.mp3,0,201611049\r\nNetherlands 2016 - Douwe Bob,Slow Down,65.948,45.0,Free Excerpts/2016-11-01-05-948-v2.mp3,0,201611066\r\nNetherlands 2016 - Douwe Bob,Slow Down,112.594,45.0,Free Excerpts/2016-11-01-52-594-b.mp3,0,201611113\r\nNetherlands 2016 - Douwe Bob,Slow Down,124.422,45.0,Free Excerpts/2016-11-02-04-422-c2.mp3,0,201611124\r\nNetherlands 2017 - OG3NE,Lights And Shadows,5.002,45.0,Set 2/Karaoke/2017-11-00-05-002-k.mp3,3,201711005\r\nNetherlands 2017 - OG3NE,Lights And Shadows,5.002,45.0,Set 2/V1/2017-11-00-05-002-v1.mp3,1,201711005\r\nNetherlands 2017 - OG3NE,Lights And Shadows,37.891,45.0,Free Excerpts/2017-11-00-37-891-c1.mp3,0,201711038\r\nNetherlands 2017 - OG3NE,Lights And Shadows,65.032,45.0,Set 2/V2/2017-11-01-05-032-v2.mp3,2,201711065\r\nNetherlands 2017 - OG3NE,Lights And Shadows,98.241,45.0,Free Excerpts/2017-11-01-38-241-c2.mp3,0,201711098\r\nNetherlands 2017 - OG3NE,Lights And Shadows,125.169,45.0,Free Excerpts/2017-11-02-05-169-b.mp3,0,201711125\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,9.97,45.0,Free Excerpts/2018-18-00-09-970-v1.mp3,0,201818010\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,39.438,45.0,Free Excerpts/2018-18-00-39-438-c1.mp3,0,201818039\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,66.468,45.0,Free Excerpts/2018-18-01-06-468-v2.mp3,0,201818066\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,96.3,45.0,Free Excerpts/2018-18-01-36-300-c2.mp3,0,201818096\r\nNetherlands 2018 - Waylon,Outlaw In 'Em,129.534,45.0,Free Excerpts/2018-18-02-09-534-o.mp3,0,201818130\r\nNetherlands 2019 - Duncan Laurence,Arcade,0.0,45.0,Free Excerpts/2019-01-00-00-000-i.mp3,0,201901000\r\nNetherlands 2019 - Duncan Laurence,Arcade,12.852,45.0,Set 2/Karaoke/2019-01-00-12-852-k.mp3,3,201901013\r\nNetherlands 2019 - Duncan Laurence,Arcade,12.852,45.0,Set 2/V1/2019-01-00-12-852-v1.mp3,1,201901013\r\nNetherlands 2019 - Duncan Laurence,Arcade,53.289,45.0,Free Excerpts/2019-01-00-53-289-pc.mp3,0,201901053\r\nNetherlands 2019 - Duncan Laurence,Arcade,66.664,45.0,Free Excerpts/2019-01-01-06-664-c1.mp3,0,201901067\r\nNetherlands 2019 - Duncan Laurence,Arcade,81.292,45.0,Set 2/V2/2019-01-01-21-292-v2.mp3,2,201901081\r\nNetherlands 2019 - Duncan Laurence,Arcade,128.626,45.0,Free Excerpts/2019-01-02-08-626-b.mp3,0,201901129\r\nNetherlands 2019 - Duncan Laurence,Arcade,141.269,45.0,Free Excerpts/2019-01-02-21-269-c2.mp3,0,201901141\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,5.204,45.0,Free Excerpts/2019-07-00-05-204-v1.mp3,0,201907005\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,46.633,45.0,Free Excerpts/2019-07-00-46-633-c1.mp3,0,201907047\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,87.962,45.0,Free Excerpts/2019-07-01-27-962-b.mp3,0,201907088\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,106.675,45.0,Free Excerpts/2019-07-01-46-675-v2.mp3,0,201907107\r\nNorth Macedonia 2019 - Tamara Todevska,Proud,126.489,45.0,Free Excerpts/2019-07-02-06-489-c.mp3,0,201907126\r\nNorway 2017 - Jowst,Grab the Moment,8.868,45.0,Free Excerpts/2017-10-00-08-868-v1.mp3,0,201710009\r\nNorway 2017 - Jowst,Grab the Moment,37.69,45.0,Free Excerpts/2017-10-00-37-690-c1.mp3,0,201710038\r\nNorway 2017 - Jowst,Grab the Moment,66.734,45.0,Free Excerpts/2017-10-01-06-734-v2.mp3,0,201710067\r\nNorway 2017 - Jowst,Grab the Moment,94.338,45.0,Free Excerpts/2017-10-01-34-338-c2.mp3,0,201710094\r\nNorway 2017 - Jowst,Grab the Moment,130.689,45.0,Free Excerpts/2017-10-02-10-689-b.mp3,0,201710131\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,15.229,45.0,Free Excerpts/2018-15-00-15-229-v1.mp3,0,201815015\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,38.388,45.0,Free Excerpts/2018-15-00-38-388-v2.mp3,0,201815038\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,74.561,45.0,Free Excerpts/2018-15-01-14-561-b.mp3,0,201815075\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,94.405,45.0,Free Excerpts/2018-15-01-34-405-c1.mp3,0,201815094\r\nNorway 2018 - Alexander Rybak,That's How You Write a Song,131.079,45.0,Free Excerpts/2018-15-02-11-079-c2.mp3,0,201815131\r\nNorway 2019 - KEiiNO,Spirit in the Sky,0.0,45.0,Free Excerpts/2019-06-00-00-000-v1.mp3,0,201906000\r\nNorway 2019 - KEiiNO,Spirit in the Sky,19.703,45.0,Free Excerpts/2019-06-00-19-703-pc1.mp3,0,201906020\r\nNorway 2019 - KEiiNO,Spirit in the Sky,41.514,45.0,Free Excerpts/2019-06-00-41-514-pc2.mp3,0,201906042\r\nNorway 2019 - KEiiNO,Spirit in the Sky,49.311,45.0,Free Excerpts/2019-06-00-49-311-c1.mp3,0,201906049\r\nNorway 2019 - KEiiNO,Spirit in the Sky,67.223,45.0,Free Excerpts/2019-06-01-07-223-v2.mp3,0,201906067\r\nNorway 2019 - KEiiNO,Spirit in the Sky,114.848,45.0,Free Excerpts/2019-06-01-54-848-b.mp3,0,201906115\r\nNorway 2019 - KEiiNO,Spirit in the Sky,147.616,45.0,Free Excerpts/2019-06-02-27-616-c2.mp3,0,201906148\r\nPoland 2016 - Michał Szpak,Color of Your Life,0.62,45.0,Free Excerpts/2016-08-00-00-620-v1.mp3,0,201608001\r\nPoland 2016 - Michał Szpak,Color of Your Life,12.305,45.0,Free Excerpts/2016-08-00-12-305-pc.mp3,0,201608012\r\nPoland 2016 - Michał Szpak,Color of Your Life,23.679,45.0,Free Excerpts/2016-08-00-23-679-c1.mp3,0,201608024\r\nPoland 2016 - Michał Szpak,Color of Your Life,49.426,45.0,Free Excerpts/2016-08-00-49-426-v2.mp3,0,201608049\r\nPoland 2016 - Michał Szpak,Color of Your Life,119.842,45.0,Free Excerpts/2016-08-01-59-842-b.mp3,0,201608120\r\nPoland 2016 - Michał Szpak,Color of Your Life,141.763,45.0,Free Excerpts/2016-08-02-21-763-c2.mp3,0,201608142\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,0.0,45.0,Free Excerpts/2017-01-00-00-000-i.mp3,0,201701000\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,19.385,45.0,Free Excerpts/2017-01-00-19-385-v1.mp3,0,201701019\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,51.382,45.0,Free Excerpts/2017-01-00-51-382-c1.mp3,0,201701051\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,82.211,45.0,Free Excerpts/2017-01-01-22-211-c2.mp3,0,201701082\r\nPortugal 2017 - Salvador Sobral,Amar Pelos Dois,132.893,45.0,Free Excerpts/2017-01-02-12-893-o.mp3,0,201701133\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,23.437,45.0,Free Excerpts/2017-07-00-23-437-v1.mp3,0,201707023\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,46.427,45.0,Free Excerpts/2017-07-00-46-427-c1.mp3,0,201707046\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,68.037,45.0,Free Excerpts/2017-07-01-08-037-v2.mp3,0,201707068\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,90.175,45.0,Free Excerpts/2017-07-01-30-175-c2.mp3,0,201707090\r\nRomania 2017 - Ilinca feat. Alex Florea,Yodel It!,112.537,45.0,Free Excerpts/2017-07-01-52-537-o.mp3,0,201707113\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,0.0,45.0,Free Excerpts/2016-03-00-00-000-i.mp3,0,201603000\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,11.752,45.0,Free Excerpts/2016-03-00-11-752-v1.mp3,0,201603012\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,34.615,45.0,Free Excerpts/2016-03-00-34-615-v1.mp3,0,201603035\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,50.427,45.0,Free Excerpts/2016-03-00-50-427-pc.mp3,0,201603050\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,65.598,45.0,Free Excerpts/2016-03-01-05-598-c1.mp3,0,201603066\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,84.508,45.0,Free Excerpts/2016-03-01-24-508-v2.mp3,0,201603085\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,144.765,45.0,Free Excerpts/2016-03-02-24-765-b.mp3,0,201603145\r\nRussia 2016 - Sergey Lazarev,You Are the Only One,164.637,45.0,Free Excerpts/2016-03-02-44-637-c2.mp3,0,201603165\r\nRussia 2019 - Sergey Lazarev,Scream,0.0,45.0,Set 2/V1/2019-03-00-00-000-v1.mp3,1,201903000\r\nRussia 2019 - Sergey Lazarev,Scream,0.0,45.0,Set 2/Karaoke/2019-03-00-00-000-k.mp3,3,201903000\r\nRussia 2019 - Sergey Lazarev,Scream,16.459,45.0,Free Excerpts/2019-03-00-16-459-pc.mp3,0,201903016\r\nRussia 2019 - Sergey Lazarev,Scream,47.242,45.0,Free Excerpts/2019-03-00-47-242-c1.mp3,0,201903047\r\nRussia 2019 - Sergey Lazarev,Scream,79.956,45.0,Set 2/V2/2019-03-01-19-956-v2.mp3,2,201903080\r\nRussia 2019 - Sergey Lazarev,Scream,133.904,45.0,Free Excerpts/2019-03-02-13-904-b.mp3,0,201903134\r\nRussia 2019 - Sergey Lazarev,Scream,156.662,45.0,Free Excerpts/2019-03-02-36-662-c2.mp3,0,201903157\r\nSan Marino 2019 - Serhat,Say Na Na Na,0.0,45.0,Free Excerpts/2019-19-00-00-000-i.mp3,0,201919000\r\nSan Marino 2019 - Serhat,Say Na Na Na,17.584,45.0,Free Excerpts/2019-19-00-17-584-v1.mp3,0,201919018\r\nSan Marino 2019 - Serhat,Say Na Na Na,33.941,45.0,Free Excerpts/2019-19-00-33-941-pc.mp3,0,201919034\r\nSan Marino 2019 - Serhat,Say Na Na Na,51.423,45.0,Free Excerpts/2019-19-00-51-423-c1.mp3,0,201919051\r\nSan Marino 2019 - Serhat,Say Na Na Na,131.779,45.0,Free Excerpts/2019-19-02-11-779-b.mp3,0,201919132\r\nSan Marino 2019 - Serhat,Say Na Na Na,148.954,45.0,Free Excerpts/2019-19-02-28-954-c2.mp3,0,201919149\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),5.993,45.0,Free Excerpts/2016-18-00-05-993-v1.mp3,0,201618006\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),27.862,45.0,Free Excerpts/2016-18-00-27-862-pc.mp3,0,201618028\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),38.06,45.0,Free Excerpts/2016-18-00-38-060-c1.mp3,0,201618038\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),73.387,45.0,Free Excerpts/2016-18-01-13-387-v2.mp3,0,201618073\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),135.314,45.0,Free Excerpts/2016-18-02-15-314-b.mp3,0,201618135\r\nSerbia 2016 - Sanja Vučić ZAA,Goodbye (Shelter),153.819,45.0,Free Excerpts/2016-18-02-33-819-c2.mp3,0,201618154\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,0.0,45.0,Free Excerpts/2018-19-00-00-000-v1.mp3,0,201819000\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,55.207,45.0,Free Excerpts/2018-19-00-55-207-c1.mp3,0,201819055\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,85.312,45.0,Free Excerpts/2018-19-01-25-312-v2.mp3,0,201819085\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,116.442,45.0,Free Excerpts/2018-19-01-56-442-c2.mp3,0,201819116\r\nSerbia 2018 - Sanja Ilić & Balkanika,Nova Deca,140.006,45.0,Free Excerpts/2018-19-02-20-006-o.mp3,0,201819140\r\nSerbia 2019 - Nevena Božović,Kruna,0.0,45.0,Free Excerpts/2019-18-00-00-000-i.mp3,0,201918000\r\nSerbia 2019 - Nevena Božović,Kruna,8.588,45.0,Set 2/V1/2019-18-00-08-588-v1.mp3,1,201918009\r\nSerbia 2019 - Nevena Božović,Kruna,8.588,45.0,Set 2/Karaoke/2019-18-00-08-588-k.mp3,3,201918009\r\nSerbia 2019 - Nevena Božović,Kruna,42.517,45.0,Free Excerpts/2019-18-00-42-517-pc.mp3,0,201918043\r\nSerbia 2019 - Nevena Božović,Kruna,53.544,45.0,Free Excerpts/2019-18-00-53-544-c1.mp3,0,201918054\r\nSerbia 2019 - Nevena Božović,Kruna,106.544,45.0,Set 2/V2/2019-18-01-46-544-v2.mp3,2,201918107\r\nSerbia 2019 - Nevena Božović,Kruna,131.581,45.0,Free Excerpts/2019-18-02-11-581-c2.mp3,0,201918132\r\nSerbia 2019 - Nevena Božović,Kruna,161.799,45.0,Free Excerpts/2019-18-02-41-799-o.mp3,0,201918162\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,0.0,45.0,Free Excerpts/2019-15-00-00-000-i.mp3,0,201915000\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,17.291,45.0,Set 2/V1/2019-15-00-17-291-v1.mp3,1,201915017\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,17.291,45.0,Set 2/Karaoke/2019-15-00-17-291-k.mp3,3,201915017\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,52.793,45.0,Free Excerpts/2019-15-00-52-793-c1.mp3,0,201915053\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,70.698,45.0,Set 2/V2/2019-15-01-10-698-v2.mp3,2,201915071\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,123.901,45.0,Free Excerpts/2019-15-02-03-901-b.mp3,0,201915124\r\nSlovenia 2019 - Zala Kralj & Gašper Šantl,Sebi,141.396,45.0,Free Excerpts/2019-15-02-21-396-c2.mp3,0,201915141\r\nSweden 2016 - Frans,If I Were Sorry,8.639,45.0,Free Excerpts/2016-05-00-08-639-v1.mp3,0,201605009\r\nSweden 2016 - Frans,If I Were Sorry,28.023,45.0,Free Excerpts/2016-05-00-28-023-pc.mp3,0,201605028\r\nSweden 2016 - Frans,If I Were Sorry,48.356,45.0,Free Excerpts/2016-05-00-48-356-c1.mp3,0,201605048\r\nSweden 2016 - Frans,If I Were Sorry,71.323,45.0,Free Excerpts/2016-05-01-11-323-v2.mp3,0,201605071\r\nSweden 2016 - Frans,If I Were Sorry,121.365,45.0,Free Excerpts/2016-05-02-01-365-b.mp3,0,201605121\r\nSweden 2016 - Frans,If I Were Sorry,159.818,45.0,Free Excerpts/2016-05-02-39-818-c2.mp3,0,201605160\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,7.095,45.0,Set 2/V1/2017-05-00-07-095-v1.mp3,1,201705007\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,7.098,45.0,Set 2/Karaoke/2017-05-00-07-098-k.mp3,3,201705007\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,43.617,45.0,Free Excerpts/2017-05-00-43-617-c1.mp3,0,201705044\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,80.322,45.0,Set 2/V2/2017-05-01-20-322-v2.mp3,2,201705080\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,99.004,45.0,Free Excerpts/2017-05-01-39-004-c2.mp3,0,201705099\r\nSweden 2017 - Robin Bengtsson,I Can't Go On,133.472,45.0,Free Excerpts/2017-05-02-13-472-o.mp3,0,201705133\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,2.289,45.0,Free Excerpts/2018-07-00-02-289-v1.mp3,0,201807002\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,18.315,45.0,Free Excerpts/2018-07-00-18-315-c1.mp3,0,201807018\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,54.903,45.0,Free Excerpts/2018-07-00-54-903-v2.mp3,0,201807055\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,88.999,45.0,Free Excerpts/2018-07-01-28-999-c2.mp3,0,201807089\r\nSweden 2018 - Benjamin Ingrosso,Dance You Off,125.657,45.0,Free Excerpts/2018-07-02-05-657-b.mp3,0,201807126\r\nSweden 2019 - John Lundvik,Too Late for Love,0.0,45.0,Set 2/V1/2019-05-00-00-000-v1.mp3,1,201905000\r\nSweden 2019 - John Lundvik,Too Late for Love,0.0,45.0,Set 2/Karaoke/2019-05-00-00-000-k.mp3,3,201905000\r\nSweden 2019 - John Lundvik,Too Late for Love,17.834,45.0,Free Excerpts/2019-05-00-17-834-pc1.mp3,0,201905018\r\nSweden 2019 - John Lundvik,Too Late for Love,34.453,45.0,Free Excerpts/2019-05-00-34-453-pc2.mp3,0,201905034\r\nSweden 2019 - John Lundvik,Too Late for Love,52.895,45.0,Free Excerpts/2019-05-00-52-895-c1.mp3,0,201905053\r\nSweden 2019 - John Lundvik,Too Late for Love,66.676,45.0,Set 2/V2/2019-05-01-06-676-v2.mp3,2,201905067\r\nSweden 2019 - John Lundvik,Too Late for Love,129.906,45.0,Free Excerpts/2019-05-02-09-906-b.mp3,0,201905130\r\nSweden 2019 - John Lundvik,Too Late for Love,160.306,45.0,Free Excerpts/2019-05-02-40-306-c2.mp3,0,201905160\r\nSwitzerland 2019 - Luca Hänni,She Got Me,0.0,45.0,Free Excerpts/2019-04-00-00-000-i.mp3,0,201904000\r\nSwitzerland 2019 - Luca Hänni,She Got Me,9.799,45.0,Free Excerpts/2019-04-00-09-799-v1.mp3,0,201904010\r\nSwitzerland 2019 - Luca Hänni,She Got Me,28.985,45.0,Free Excerpts/2019-04-00-28-985-pc.mp3,0,201904029\r\nSwitzerland 2019 - Luca Hänni,She Got Me,38.887,45.0,Free Excerpts/2019-04-00-38-887-c1.mp3,0,201904039\r\nSwitzerland 2019 - Luca Hänni,She Got Me,57.97,45.0,Free Excerpts/2019-04-00-57-970-b1.mp3,0,201904058\r\nSwitzerland 2019 - Luca Hänni,She Got Me,69.419,45.0,Free Excerpts/2019-04-01-09-419-v2.mp3,0,201904069\r\nSwitzerland 2019 - Luca Hänni,She Got Me,127.079,45.0,Free Excerpts/2019-04-02-07-079-b2.mp3,0,201904127\r\nSwitzerland 2019 - Luca Hänni,She Got Me,154.62,45.0,Free Excerpts/2019-04-02-34-620-c2.mp3,0,201904155\r\nUkraine 2016 - Jamala,1944,0.0,45.0,Free Excerpts/2016-01-00-00-000-i.mp3,0,201601000\r\nUkraine 2016 - Jamala,1944,7.925,45.0,Free Excerpts/2016-01-00-07-925-v1.mp3,0,201601008\r\nUkraine 2016 - Jamala,1944,39.5,45.0,Free Excerpts/2016-01-00-39-500-c1.mp3,0,201601040\r\nUkraine 2016 - Jamala,1944,72.043,45.0,Free Excerpts/2016-01-01-12-043-v2.mp3,0,201601072\r\nUkraine 2016 - Jamala,1944,132.559,45.0,Free Excerpts/2016-01-02-12-559-b.mp3,0,201601133\r\nUkraine 2016 - Jamala,1944,151.166,45.0,Free Excerpts/2016-01-02-31-166-c2.mp3,0,201601151\r\nUkraine 2018 - Mélovin,Under the Ladder,2.956,45.0,Free Excerpts/2018-17-00-02-956-v1.mp3,0,201817003\r\nUkraine 2018 - Mélovin,Under the Ladder,30.924,45.0,Free Excerpts/2018-17-00-30-924-c1.mp3,0,201817031\r\nUkraine 2018 - Mélovin,Under the Ladder,58.209,45.0,Free Excerpts/2018-17-00-58-209-v2.mp3,0,201817058\r\nUkraine 2018 - Mélovin,Under the Ladder,85.722,45.0,Free Excerpts/2018-17-01-25-722-c2.mp3,0,201817086\r\nUkraine 2018 - Mélovin,Under the Ladder,128.014,45.0,Free Excerpts/2018-17-02-8-014-c3.mp3,0,201817128\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,0.0,45.0,Set 2/V1/2017-15-00-00-000-v1.mp3,1,201715000\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,0.0,45.0,Set 2/Karaoke/2017-15-00-00-000-k.mp3,3,201715000\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,37.979,45.0,Free Excerpts/2017-15-00-37-979-c1.mp3,0,201715038\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,70.925,45.0,Set 2/V2/2017-15-01-10-925-v2.mp3,2,201715071\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,94.575,45.0,Free Excerpts/2017-15-01-34-575-c2.mp3,0,201715095\r\nUnited Kingdom 2017 - Lucie Jones,Never Give Up on You,124.004,45.0,Free Excerpts/2017-15-02-04-004-b.mp3,0,201715124\r\n" } }, { @@ -149,7 +149,7 @@ "fields": { "name": "Kuiper 2020", "process_csv": false, - "csv": "98°,2017 - What Christmas Means to Me,7.978,45.0,Kerstmuziek/What Christmas Means to Me00.07.978.v1.n.mp3,0,2,100003813\r\n98°,2017 - What Christmas Means to Me,29.184,45.0,Kerstmuziek/What Christmas Means to Me00.29.184.c1.n.mp3,0,2,100003804\r\n98°,2017 - What Christmas Means to Me,46.716,45.0,Kerstmuziek/What Christmas Means to Me00.46.716.v2.n.mp3,0,2,100003814\r\n98°,2017 - What Christmas Means to Me,77.055,45.0,Kerstmuziek/What Christmas Means to Me01.17.055.b.n.mp3,0,2,100003801\r\n98°,2017 - What Christmas Means to Me,118.102,45.0,Kerstmuziek/What Christmas Means to Me01.58.102.c2.n.mp3,0,2,100003805\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,0.0,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.00.000.i.s.mp3,0,0,100001207\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,6.626,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.06.626.c1.s.mp3,0,0,100001204\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,34.613,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.34.613.v1.s.mp3,0,0,100001213\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,93.551,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year01.33.551.v2.s.mp3,0,0,100001214\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,116.133,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year01.56.133.c2.s.mp3,0,0,100001205\r\nAriana Grande,2013 - Santa Tell Me,10.03,45.0,Kerstmuziek/Santa Tell Me00.10.030.c1.s.mp3,0,0,100003104\r\nAriana Grande,2013 - Santa Tell Me,30.907,45.0,Kerstmuziek/Santa Tell Me00.30.907.v1.s.mp3,0,0,100003113\r\nAriana Grande,2013 - Santa Tell Me,81.058,45.0,Kerstmuziek/Santa Tell Me01.21.058.v2.s.mp3,0,0,100003114\r\nAriana Grande,2013 - Santa Tell Me,131.792,45.0,Kerstmuziek/Santa Tell Me02.11.792.b.s.mp3,0,0,100003101\r\nAriana Grande,2013 - Santa Tell Me,160.716,45.0,Kerstmuziek/Santa Tell Me02.40.716.c2.s.mp3,0,0,100003105\r\nBand Aid,1984 - Do They Know It’s Christmas,1.017,45.0,Kerstmuziek/Do They Know It_s Christmas00.01.017.i.s.mp3,0,0,100000707\r\nBand Aid,1984 - Do They Know It’s Christmas,8.393,45.0,Kerstmuziek/Do They Know It_s Christmas00.08.393.v1.s.mp3,0,0,100000713\r\nBand Aid,1984 - Do They Know It’s Christmas,41.329,45.0,Kerstmuziek/Do They Know It_s Christmas00.41.329.v2.s.mp3,0,0,100000714\r\nBand Aid,1984 - Do They Know It’s Christmas,117.755,45.0,Kerstmuziek/Do They Know It_s Christmas01.57.755.c1.s.mp3,0,0,100000704\r\nBand Aid,1984 - Do They Know It’s Christmas,134.887,45.0,Kerstmuziek/Do They Know It_s Christmas02.14.887.b.s.mp3,0,0,100000701\r\nBing Crosby,1942 - White Christmas,0.0,45.0,Kerstmuziek/White Christmas00.00.000.i.s.mp3,0,0,100003907\r\nBing Crosby,1942 - White Christmas,10.178,45.0,Kerstmuziek/White Christmas00.10.178.c1.s.mp3,0,0,100003904\r\nBing Crosby,1942 - White Christmas,29.904,45.0,Kerstmuziek/White Christmas00.29.904.v.s.mp3,0,0,100003912\r\nBing Crosby,1942 - White Christmas,93.805,45.0,Kerstmuziek/White Christmas01.33.805.c2.s.mp3,0,0,100003905\r\nBing Crosby,1942 - White Christmas,133.467,45.0,Kerstmuziek/White Christmas02.13.467.c3.s.mp3,0,0,100003906\r\nBobby Helms,1970 - Jingle Bell Rock,0.0,45.0,Kerstmuziek/Jingle Bell Rock00.00.000.i.o.mp3,0,1,100001407\r\nBobby Helms,1970 - Jingle Bell Rock,7.934,45.0,Kerstmuziek/Jingle Bell Rock00.07.934.c1.o.mp3,0,1,100001404\r\nBobby Helms,1970 - Jingle Bell Rock,39.22,45.0,Kerstmuziek/Jingle Bell Rock00.39.220.v1.o.mp3,0,1,100001413\r\nBobby Helms,1970 - Jingle Bell Rock,55.761,45.0,Kerstmuziek/Jingle Bell Rock00.55.761.v2.o.mp3,0,1,100001414\r\nBobby Helms,1970 - Jingle Bell Rock,71.629,45.0,Kerstmuziek/Jingle Bell Rock01.11.629.c2.o.mp3,0,1,100001405\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,0.0,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.00.000.i.s.mp3,0,0,100002007\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,29.102,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.29.102.v1.s.mp3,0,0,100002013\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,37.443,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.37.443.c1.s.mp3,0,0,100002004\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,110.553,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord01.50.553.b1.s.mp3,0,0,100002002\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,225.897,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord03.45.897.b2.s.mp3,0,0,100002003\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,0.0,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.00.000.i.o.mp3,0,1,100002607\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,7.36,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.07.360.c1.o.mp3,0,1,100002604\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,34.201,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.34.201.v1.o.mp3,0,1,100002613\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,60.248,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.00.248.b.o.mp3,0,1,100002601\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,102.242,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.42.242.c2.o.mp3,0,1,100002605\r\nBritney Spears,2000 - My Only Wish (This Year),13.445,45.0,Kerstmuziek/My Only Wish This Year00.13.445.v1.s.mp3,0,0,100002413\r\nBritney Spears,2000 - My Only Wish (This Year),38.727,45.0,Kerstmuziek/My Only Wish This Year00.38.727.b.s.mp3,0,0,100002401\r\nBritney Spears,2000 - My Only Wish (This Year),52.464,45.0,Kerstmuziek/My Only Wish This Year00.52.464.c1.s.mp3,0,0,100002404\r\nBritney Spears,2000 - My Only Wish (This Year),91.775,45.0,Kerstmuziek/My Only Wish This Year01.31.775.v2.s.mp3,0,0,100002414\r\nBritney Spears,2000 - My Only Wish (This Year),187.642,45.0,Kerstmuziek/My Only Wish This Year03.07.642.c2.s.mp3,0,0,100002405\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,46.946,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town00.46.946.c1.n.mp3,0,2,100002904\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,72.178,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.12.178.v1.n.mp3,0,2,100002913\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,95.574,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.35.574.v2.n.mp3,0,2,100002914\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,114.842,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.54.842.c2.n.mp3,0,2,100002905\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,190.384,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town03.10.384.b.n.mp3,0,2,100002901\r\nBurl Ives,1965 - A Holly Jolly Christmas,0.426,45.0,Kerstmuziek/A Holly Jolly Christmas00.00.426.i.o.mp3,0,1,100000107\r\nBurl Ives,1965 - A Holly Jolly Christmas,6.435,45.0,Kerstmuziek/A Holly Jolly Christmas00.06.435.c1.o.mp3,0,1,100000104\r\nBurl Ives,1965 - A Holly Jolly Christmas,27.017,45.0,Kerstmuziek/A Holly Jolly Christmas00.27.017.v1.o.mp3,0,1,100000113\r\nBurl Ives,1965 - A Holly Jolly Christmas,47.741,45.0,Kerstmuziek/A Holly Jolly Christmas00.47.741.b.o.mp3,0,1,100000101\r\nBurl Ives,1965 - A Holly Jolly Christmas,61.651,45.0,Kerstmuziek/A Holly Jolly Christmas01.01.651.c2.o.mp3,0,1,100000105\r\nChris Rea,1988 - Driving Home for Christmas,0.0,45.0,Kerstmuziek/Driving Home For Christmas00.00.000.i.s.mp3,0,0,100000807\r\nChris Rea,1988 - Driving Home for Christmas,22.076,45.0,Kerstmuziek/Driving Home For Christmas00.22.076.c1.s.mp3,0,0,100000804\r\nChris Rea,1988 - Driving Home for Christmas,70.478,45.0,Kerstmuziek/Driving Home For Christmas01.10.478.v.s.mp3,0,0,100000812\r\nChris Rea,1988 - Driving Home for Christmas,138.762,45.0,Kerstmuziek/Driving Home For Christmas02.18.762.b.s.mp3,0,0,100000801\r\nChris Rea,1988 - Driving Home for Christmas,197.448,45.0,Kerstmuziek/Driving Home For Christmas03.17.448.c2.s.mp3,0,0,100000805\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,14.449,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.14.449.c1.o.mp3,0,1,100001004\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,41.68,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.41.680.c2.o.mp3,0,1,100001005\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,70.856,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.10.856.v1.o.mp3,0,1,100001013\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,175.474,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas02.55.474.v2.o.mp3,0,1,100001014\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,207.012,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas03.27.012.c3.o.mp3,0,1,100001006\r\nChuck Berry,1959 - Run Rudolph Run,0.0,45.0,Kerstmuziek/Run Rudolph Run00.00.000.i.s.mp3,0,0,100002707\r\nChuck Berry,1959 - Run Rudolph Run,19.305,45.0,Kerstmuziek/Run Rudolph Run00.19.305.c1.s.mp3,0,0,100002704\r\nChuck Berry,1959 - Run Rudolph Run,37.58,45.0,Kerstmuziek/Run Rudolph Run00.37.580.v1.s.mp3,0,0,100002713\r\nChuck Berry,1959 - Run Rudolph Run,73.941,45.0,Kerstmuziek/Run Rudolph Run01.13.941.b.s.mp3,0,0,100002701\r\nChuck Berry,1959 - Run Rudolph Run,113.301,45.0,Kerstmuziek/Run Rudolph Run01.53.301.v2.s.mp3,0,0,100002714\r\nColdplay,2010 - Christmas Lights,0.0,45.0,Kerstmuziek/Christmas Lights00.00.000.i.s.mp3,0,0,100000607\r\nColdplay,2010 - Christmas Lights,21.618,45.0,Kerstmuziek/Christmas Lights00.21.618.v1.s.mp3,0,0,100000613\r\nColdplay,2010 - Christmas Lights,50.719,45.0,Kerstmuziek/Christmas Lights00.50.719.b.s.mp3,0,0,100000601\r\nColdplay,2010 - Christmas Lights,71.921,45.0,Kerstmuziek/Christmas Lights01.11.921.c1.s.mp3,0,0,100000604\r\nColdplay,2010 - Christmas Lights,132.479,45.0,Kerstmuziek/Christmas Lights02.12.479.c2.s.mp3,0,0,100000605\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),0.0,45.0,Kerstmuziek/Christmas Baby Please Come Home00.00.000.i.o.mp3,0,1,100000507\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),15.654,45.0,Kerstmuziek/Christmas Baby Please Come Home00.15.654.c1.o.mp3,0,1,100000504\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),46.379,45.0,Kerstmuziek/Christmas Baby Please Come Home00.46.379.v.o.mp3,0,1,100000512\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),76.035,45.0,Kerstmuziek/Christmas Baby Please Come Home01.16.035.b.o.mp3,0,1,100000501\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),106.468,45.0,Kerstmuziek/Christmas Baby Please Come Home01.46.468.c2.o.mp3,0,1,100000505\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,0.0,45.0,Kerstmuziek/Jingle Bell Rock00.00.000.i.n.mp3,0,2,100001407\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,7.365,45.0,Kerstmuziek/Jingle Bell Rock00.07.365.c1.n.mp3,0,2,100001404\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,37.042,45.0,Kerstmuziek/Jingle Bell Rock00.37.042.v1.n.mp3,0,2,100001413\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,52.278,45.0,Kerstmuziek/Jingle Bell Rock00.52.278.v2.n.mp3,0,2,100001414\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,67.224,45.0,Kerstmuziek/Jingle Bell Rock01.07.224.c2.n.mp3,0,2,100001405\r\nDean Martin,1959 - Let It Snow!,0.045,45.0,Kerstmuziek/Let It Snow00.00.045.i.n.mp3,0,2,100001607\r\nDean Martin,1959 - Let It Snow!,7.298,45.0,Kerstmuziek/Let It Snow00.07.298.c1.n.mp3,0,2,100001604\r\nDean Martin,1959 - Let It Snow!,35.886,45.0,Kerstmuziek/Let It Snow00.35.886.v.n.mp3,0,2,100001612\r\nDean Martin,1959 - Let It Snow!,64.14,45.0,Kerstmuziek/Let It Snow01.04.140.b.n.mp3,0,2,100001601\r\nDean Martin,1959 - Let It Snow!,91.925,45.0,Kerstmuziek/Let It Snow01.31.925.c2.n.mp3,0,2,100001605\r\nDonny Hathaway,1970 - This Christmas,14.531,45.0,Kerstmuziek/This Christmas00.14.531.v1.s.mp3,0,0,100003613\r\nDonny Hathaway,1970 - This Christmas,35.667,45.0,Kerstmuziek/This Christmas00.35.667.c1.s.mp3,0,0,100003604\r\nDonny Hathaway,1970 - This Christmas,65.39,45.0,Kerstmuziek/This Christmas01.05.390.v2.s.mp3,0,0,100003614\r\nDonny Hathaway,1970 - This Christmas,115.852,45.0,Kerstmuziek/This Christmas01.55.852.b.s.mp3,0,0,100003601\r\nDonny Hathaway,1970 - This Christmas,161.956,45.0,Kerstmuziek/This Christmas02.41.956.o.s.mp3,0,0,100003608\r\nEartha Kitt,1953 - Santa Baby,0.0,45.0,Kerstmuziek/Santa Baby00.00.000.i.o.mp3,0,1,100002807\r\nEartha Kitt,1953 - Santa Baby,12.745,45.0,Kerstmuziek/Santa Baby00.12.745.c1.o.mp3,0,1,100002804\r\nEartha Kitt,1953 - Santa Baby,57.117,45.0,Kerstmuziek/Santa Baby00.57.117.v1.o.mp3,0,1,100002813\r\nEartha Kitt,1953 - Santa Baby,103.612,45.0,Kerstmuziek/Santa Baby01.43.612.v2.o.mp3,0,1,100002814\r\nEartha Kitt,1953 - Santa Baby,149.164,45.0,Kerstmuziek/Santa Baby02.29.164.b.o.mp3,0,1,100002801\r\nElla Fitzgerald,1960 - Sleigh Ride,0.0,45.0,Kerstmuziek/Sleigh Ride00.00.000.i.o.mp3,0,1,100003207\r\nElla Fitzgerald,1960 - Sleigh Ride,25.01,45.0,Kerstmuziek/Sleigh Ride00.25.010.c1.o.mp3,0,1,100003204\r\nElla Fitzgerald,1960 - Sleigh Ride,54.597,45.0,Kerstmuziek/Sleigh Ride00.54.597.b1.o.mp3,0,1,100003202\r\nElla Fitzgerald,1960 - Sleigh Ride,92.591,45.0,Kerstmuziek/Sleigh Ride01.32.591.b2.o.mp3,0,1,100003203\r\nElla Fitzgerald,1960 - Sleigh Ride,143.356,45.0,Kerstmuziek/Sleigh Ride02.23.356.c2.o.mp3,0,1,100003205\r\nElton John,1974 - Step into Christmas,0.0,45.0,Kerstmuziek/Step into Christmas00.00.000.i.s.mp3,0,0,100003307\r\nElton John,1974 - Step into Christmas,14.799,45.0,Kerstmuziek/Step into Christmas00.14.799.v1.s.mp3,0,0,100003313\r\nElton John,1974 - Step into Christmas,50.408,45.0,Kerstmuziek/Step into Christmas00.50.408.c1.s.mp3,0,0,100003304\r\nElton John,1974 - Step into Christmas,123.631,45.0,Kerstmuziek/Step into Christmas02.03.631.b.s.mp3,0,0,100003301\r\nElton John,1974 - Step into Christmas,184.213,45.0,Kerstmuziek/Step into Christmas03.04.213.c2.s.mp3,0,0,100003305\r\nElvis Presley,1957 - Blue Christmas,0.0,45.0,Kerstmuziek/Blue Christmas00.00.000.c1.s.mp3,0,0,100000404\r\nElvis Presley,1957 - Blue Christmas,21.806,45.0,Kerstmuziek/Blue Christmas00.21.806.v1.s.mp3,0,0,100000413\r\nElvis Presley,1957 - Blue Christmas,41.602,45.0,Kerstmuziek/Blue Christmas00.41.602.v2.s.mp3,0,0,100000414\r\nElvis Presley,1957 - Blue Christmas,82.088,45.0,Kerstmuziek/Blue Christmas01.22.088.b.s.mp3,0,0,100000401\r\nElvis Presley,1957 - Blue Christmas,102.852,45.0,Kerstmuziek/Blue Christmas01.42.852.c2.s.mp3,0,0,100000405\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,0.0,45.0,Kerstmuziek/Let It Snow00.00.000.i.o.mp3,0,1,100001607\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,6.579,45.0,Kerstmuziek/Let It Snow00.06.579.c1.o.mp3,0,1,100001604\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,33.075,45.0,Kerstmuziek/Let It Snow00.33.075.v.o.mp3,0,1,100001612\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,87.4,45.0,Kerstmuziek/Let It Snow01.27.400.b.o.mp3,0,1,100001601\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,134.168,45.0,Kerstmuziek/Let It Snow02.14.168.c2.o.mp3,0,1,100001605\r\nHannah Kerr,2018 - Winter Wonderland,0.0,45.0,Kerstmuziek/Winter Wonderland00.00.000.i.n.mp3,0,2,100004007\r\nHannah Kerr,2018 - Winter Wonderland,8.736,45.0,Kerstmuziek/Winter Wonderland00.08.736.v1.n.mp3,0,2,100004013\r\nHannah Kerr,2018 - Winter Wonderland,17.293,45.0,Kerstmuziek/Winter Wonderland00.17.293.c1.n.mp3,0,2,100004004\r\nHannah Kerr,2018 - Winter Wonderland,71.062,45.0,Kerstmuziek/Winter Wonderland01.11.062.b.n.mp3,0,2,100004001\r\nHannah Kerr,2018 - Winter Wonderland,122.76,45.0,Kerstmuziek/Winter Wonderland02.02.760.c2.n.mp3,0,2,100004005\r\nJames TW,2018 - Last Christmas,45.0,45.0,Kerstmuziek/Last Christmas00.45.000.c1.n.mp3,0,2,100001504\r\nJames TW,2018 - Last Christmas,48.273,45.0,Kerstmuziek/Last Christmas00.48.273.v1.n.mp3,0,2,100001513\r\nJames TW,2018 - Last Christmas,128.354,45.0,Kerstmuziek/Last Christmas02.08.354.v2.n.mp3,0,2,100001514\r\nJames TW,2018 - Last Christmas,160.037,45.0,Kerstmuziek/Last Christmas02.40.037.c2.n.mp3,0,2,100001505\r\nJonas Brothers,2019 - Like It’s Christmas,6.658,45.0,Kerstmuziek/Like It_s Christmas00.06.658.v1.s.mp3,0,0,100001713\r\nJonas Brothers,2019 - Like It’s Christmas,19.514,45.0,Kerstmuziek/Like It_s Christmas00.19.514.b.s.mp3,0,0,100001701\r\nJonas Brothers,2019 - Like It’s Christmas,34.665,45.0,Kerstmuziek/Like It_s Christmas00.34.665.c1.s.mp3,0,0,100001704\r\nJonas Brothers,2019 - Like It’s Christmas,62.214,45.0,Kerstmuziek/Like It_s Christmas01.02.214.v2.s.mp3,0,0,100001714\r\nJonas Brothers,2019 - Like It’s Christmas,130.167,45.0,Kerstmuziek/Like It_s Christmas02.10.167.c2.s.mp3,0,0,100001705\r\nJosé Feliciano,1970 - Feliz Navidad,0.0,45.0,Kerstmuziek/Feliz Navidad00.00.000.i.s.mp3,0,0,100000907\r\nJosé Feliciano,1970 - Feliz Navidad,12.382,45.0,Kerstmuziek/Feliz Navidad00.12.382.c1.s.mp3,0,0,100000904\r\nJosé Feliciano,1970 - Feliz Navidad,37.562,45.0,Kerstmuziek/Feliz Navidad00.37.562.v1.s.mp3,0,0,100000913\r\nJosé Feliciano,1970 - Feliz Navidad,141.093,45.0,Kerstmuziek/Feliz Navidad02.21.093.v2.s.mp3,0,0,100000914\r\nJosé Feliciano,1970 - Feliz Navidad,167.314,45.0,Kerstmuziek/Feliz Navidad02.47.314.c2.s.mp3,0,0,100000905\r\nJustin Bieber,2011 - Mistletoe,3.345,45.0,Kerstmuziek/Mistletoe00.03.345.pc1.s.mp3,0,0,100002310\r\nJustin Bieber,2011 - Mistletoe,15.681000000000001,45.0,Kerstmuziek/Mistletoe00.15.681.c1.s.mp3,0,0,100002304\r\nJustin Bieber,2011 - Mistletoe,39.412,45.0,Kerstmuziek/Mistletoe00.39.412.v1.s.mp3,0,0,100002313\r\nJustin Bieber,2011 - Mistletoe,86.979,45.0,Kerstmuziek/Mistletoe01.26.979.b.s.mp3,0,0,100002301\r\nJustin Bieber,2011 - Mistletoe,109.978,45.0,Kerstmuziek/Mistletoe01.49.978.pc2.s.mp3,0,0,100002311\r\nKelly Clarkson,2013 - Underneath the Tree,0.0,45.0,Kerstmuziek/Underneath the Tree00.00.000.c1.s.mp3,0,0,100003704\r\nKelly Clarkson,2013 - Underneath the Tree,29.526,45.0,Kerstmuziek/Underneath the Tree00.29.526.v1.s.mp3,0,0,100003713\r\nKelly Clarkson,2013 - Underneath the Tree,86.609,45.0,Kerstmuziek/Underneath the Tree01.26.609.v2.s.mp3,0,0,100003714\r\nKelly Clarkson,2013 - Underneath the Tree,143.691,45.0,Kerstmuziek/Underneath the Tree02.23.691.b.s.mp3,0,0,100003701\r\nKelly Clarkson,2013 - Underneath the Tree,167.706,45.0,Kerstmuziek/Underneath the Tree02.47.706.c2.s.mp3,0,0,100003705\r\nKylie Minogue,2000 - Santa Baby,0.0,45.0,Kerstmuziek/Santa Baby00.00.000.i.n.mp3,0,2,100002807\r\nKylie Minogue,2000 - Santa Baby,12.617,45.0,Kerstmuziek/Santa Baby00.12.617.c1.n.mp3,0,2,100002804\r\nKylie Minogue,2000 - Santa Baby,56.256,45.0,Kerstmuziek/Santa Baby00.56.256.v1.n.mp3,0,2,100002813\r\nKylie Minogue,2000 - Santa Baby,100.937,45.0,Kerstmuziek/Santa Baby01.40.937.v2.n.mp3,0,2,100002814\r\nKylie Minogue,2000 - Santa Baby,144.345,45.0,Kerstmuziek/Santa Baby02.24.345.b.n.mp3,0,2,100002801\r\nLeona Lewis,2013 - One More Sleep,8.352,45.0,Kerstmuziek/One More Sleep00.08.352.v1.s.mp3,0,0,100002513\r\nLeona Lewis,2013 - One More Sleep,34.229,45.0,Kerstmuziek/One More Sleep00.34.229.c1.s.mp3,0,0,100002504\r\nLeona Lewis,2013 - One More Sleep,84.615,45.0,Kerstmuziek/One More Sleep01.24.615.v2.s.mp3,0,0,100002514\r\nLeona Lewis,2013 - One More Sleep,161.289,45.0,Kerstmuziek/One More Sleep02.41.289.b.s.mp3,0,0,100002501\r\nLeona Lewis,2013 - One More Sleep,179.772,45.0,Kerstmuziek/One More Sleep02.59.772.c2.s.mp3,0,0,100002505\r\nLiam Payne,2019 - All I Want (for Christmas),6.832,45.0,Kerstmuziek/All I Want For Christmas00.06.832.v1.s.mp3,0,0,100000213\r\nLiam Payne,2019 - All I Want (for Christmas),34.265,45.0,Kerstmuziek/All I Want For Christmas00.34.265.pc.s.mp3,0,0,100000209\r\nLiam Payne,2019 - All I Want (for Christmas),47.516,45.0,Kerstmuziek/All I Want For Christmas00.47.516.c1.s.mp3,0,0,100000204\r\nLiam Payne,2019 - All I Want (for Christmas),82.506,45.0,Kerstmuziek/All I Want For Christmas01.22.506.v2.s.mp3,0,0,100000214\r\nLiam Payne,2019 - All I Want (for Christmas),150.933,45.0,Kerstmuziek/All I Want For Christmas02.30.933.b.s.mp3,0,0,100000201\r\nMariah Carey,1994 - All I Want for Christmas is You,57.151,45.0,Kerstmuziek/All I Want For Christmas Is You00.57.151.v1.s.mp3,0,0,100000313\r\nMariah Carey,1994 - All I Want for Christmas is You,91.938,45.0,Kerstmuziek/All I Want For Christmas Is You01.31.938.c1.s.mp3,0,0,100000304\r\nMariah Carey,1994 - All I Want for Christmas is You,101.601,45.0,Kerstmuziek/All I Want For Christmas Is You01.41.601.v2.s.mp3,0,0,100000314\r\nMariah Carey,1994 - All I Want for Christmas is You,146.052,45.0,Kerstmuziek/All I Want For Christmas Is You02.26.052.b.s.mp3,0,0,100000301\r\nMariah Carey,1994 - All I Want for Christmas is You,193.815,45.0,Kerstmuziek/All I Want For Christmas Is You03.13.815.c2.s.mp3,0,0,100000305\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),0.0,45.0,Kerstmuziek/Christmas Baby Please Come Home00.00.000.i.n.mp3,0,2,100000507\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),15.106,45.0,Kerstmuziek/Christmas Baby Please Come Home00.15.106.c1.n.mp3,0,2,100000504\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),45.851,45.0,Kerstmuziek/Christmas Baby Please Come Home00.45.851.v.n.mp3,0,2,100000512\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),75.619,45.0,Kerstmuziek/Christmas Baby Please Come Home01.15.619.b.n.mp3,0,2,100000501\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),107.075,45.0,Kerstmuziek/Christmas Baby Please Come Home01.47.075.c2.n.mp3,0,2,100000505\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,29.434,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.29.434.i.n.mp3,0,2,100002607\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,35.961,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.35.961.c1.n.mp3,0,2,100002604\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,62.451,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.02.451.v1.n.mp3,0,2,100002613\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,87.918,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.27.918.b.n.mp3,0,2,100002601\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,184.667,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree03.04.667.c2.n.mp3,0,2,100002605\r\nMichael Bublé,2011 - A Holly Jolly Christmas,0.0,45.0,Kerstmuziek/A Holly Jolly Christmas00.00.000.i.n.mp3,0,2,100000107\r\nMichael Bublé,2011 - A Holly Jolly Christmas,5.9030000000000005,45.0,Kerstmuziek/A Holly Jolly Christmas00.05.903.c1.n.mp3,0,2,100000104\r\nMichael Bublé,2011 - A Holly Jolly Christmas,32.154,45.0,Kerstmuziek/A Holly Jolly Christmas00.32.154.v1.n.mp3,0,2,100000113\r\nMichael Bublé,2011 - A Holly Jolly Christmas,56.044,45.0,Kerstmuziek/A Holly Jolly Christmas00.56.044.b.n.mp3,0,2,100000101\r\nMichael Bublé,2011 - A Holly Jolly Christmas,94.864,45.0,Kerstmuziek/A Holly Jolly Christmas01.34.864.c2.n.mp3,0,2,100000105\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,1.066,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.01.066.i.n.mp3,0,2,100001107\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,35.167,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.35.167.c1.n.mp3,0,2,100001104\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,76.373,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas01.16.373.v1.n.mp3,0,2,100001113\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,132.498,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.12.498.b.n.mp3,0,2,100001101\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,152.509,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.32.509.c2.n.mp3,0,2,100001105\r\nMud,1975 - Lonely This Christmas,0.0,45.0,Kerstmuziek/Lonely This Christmas00.00.000.i.s.mp3,0,0,100001907\r\nMud,1975 - Lonely This Christmas,15.349,45.0,Kerstmuziek/Lonely This Christmas00.15.349.v1.s.mp3,0,0,100001913\r\nMud,1975 - Lonely This Christmas,43.733,45.0,Kerstmuziek/Lonely This Christmas00.43.733.c1.s.mp3,0,0,100001904\r\nMud,1975 - Lonely This Christmas,103.091,45.0,Kerstmuziek/Lonely This Christmas01.43.091.v2.s.mp3,0,0,100001914\r\nMud,1975 - Lonely This Christmas,127.787,45.0,Kerstmuziek/Lonely This Christmas02.07.787.b.s.mp3,0,0,100001901\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),0.0,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You00.00.000.i.s.mp3,0,0,100003507\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),58.142,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You00.58.142.v.s.mp3,0,0,100003512\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),94.733,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You01.34.733.c1.s.mp3,0,0,100003504\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),121.565,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You02.01.565.b.s.mp3,0,0,100003501\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),149.82,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You02.29.820.c2.s.mp3,0,0,100003505\r\nPaul McCartney,1979 - Wonderful Christmastime,0.0,45.0,Kerstmuziek/Wonderful Christmastime00.00.000.i.s.mp3,0,0,100004107\r\nPaul McCartney,1979 - Wonderful Christmastime,10.315,45.0,Kerstmuziek/Wonderful Christmastime00.10.315.v1.s.mp3,0,0,100004113\r\nPaul McCartney,1979 - Wonderful Christmastime,21.072,45.0,Kerstmuziek/Wonderful Christmastime00.21.072.c1.s.mp3,0,0,100004104\r\nPaul McCartney,1979 - Wonderful Christmastime,61.891,45.0,Kerstmuziek/Wonderful Christmastime01.01.891.b1.s.mp3,0,0,100004102\r\nPaul McCartney,1979 - Wonderful Christmastime,178.453,45.0,Kerstmuziek/Wonderful Christmastime02.58.453.b2.s.mp3,0,0,100004103\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,0.802,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.00.802.i.o.mp3,0,1,100001107\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,13.008,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.13.008.c1.o.mp3,0,1,100001104\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,47.4,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.47.400.v1.o.mp3,0,1,100001113\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,98.898,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas01.38.898.b.o.mp3,0,1,100001101\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,132.399,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.12.399.c2.o.mp3,0,1,100001105\r\nQueen,1984 - Thank God It’s Christmas,0.0,45.0,Kerstmuziek/Thank God It_s Christmas00.00.000.v1.s.mp3,0,0,100003413\r\nQueen,1984 - Thank God It’s Christmas,49.964,45.0,Kerstmuziek/Thank God It_s Christmas00.49.964.v2.s.mp3,0,0,100003414\r\nQueen,1984 - Thank God It’s Christmas,112.383,45.0,Kerstmuziek/Thank God It_s Christmas01.52.383.c1.s.mp3,0,0,100003404\r\nQueen,1984 - Thank God It’s Christmas,136.549,45.0,Kerstmuziek/Thank God It_s Christmas02.16.549.v3.s.mp3,0,0,100003415\r\nQueen,1984 - Thank God It’s Christmas,198.819,45.0,Kerstmuziek/Thank God It_s Christmas03.18.819.c2.s.mp3,0,0,100003405\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,0.0,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.00.000.c1.n.mp3,0,2,100001004\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,30.09,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.30.090.c2.n.mp3,0,2,100001005\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,59.301,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.59.301.v1.n.mp3,0,2,100001013\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,87.437,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.27.437.v2.n.mp3,0,2,100001014\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,115.671,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.55.671.c3.n.mp3,0,2,100001006\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,0.0,45.0,Kerstmuziek/Merry Christmas Everyone00.00.000.i.s.mp3,0,0,100002107\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,8.052,45.0,Kerstmuziek/Merry Christmas Everyone00.08.052.c1.s.mp3,0,0,100002104\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,46.55,45.0,Kerstmuziek/Merry Christmas Everyone00.46.550.v1.s.mp3,0,0,100002113\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,76.619,45.0,Kerstmuziek/Merry Christmas Everyone01.16.619.b.s.mp3,0,0,100002101\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,142.67,45.0,Kerstmuziek/Merry Christmas Everyone02.22.670.c2.s.mp3,0,0,100002105\r\nSia,2017 - Santa’s Coming For Us,0.0,45.0,Kerstmuziek/Santa_s Coming For Us00.00.000.i.s.mp3,0,0,100003007\r\nSia,2017 - Santa’s Coming For Us,20.772,45.0,Kerstmuziek/Santa_s Coming For Us00.20.772.v1.s.mp3,0,0,100003013\r\nSia,2017 - Santa’s Coming For Us,60.428,45.0,Kerstmuziek/Santa_s Coming For Us01.00.428.c1.s.mp3,0,0,100003004\r\nSia,2017 - Santa’s Coming For Us,82.852,45.0,Kerstmuziek/Santa_s Coming For Us01.22.852.v2.s.mp3,0,0,100003014\r\nSia,2017 - Santa’s Coming For Us,142.926,45.0,Kerstmuziek/Santa_s Coming For Us02.22.926.c2.s.mp3,0,0,100003005\r\nSlade,1973 - Merry Xmas Everybody,7.031,45.0,Kerstmuziek/Merry Xmas Everybody00.07.031.v1.s.mp3,0,0,100002213\r\nSlade,1973 - Merry Xmas Everybody,35.923,45.0,Kerstmuziek/Merry Xmas Everybody00.35.923.c1.s.mp3,0,0,100002204\r\nSlade,1973 - Merry Xmas Everybody,55.611,45.0,Kerstmuziek/Merry Xmas Everybody00.55.611.v2.s.mp3,0,0,100002214\r\nSlade,1973 - Merry Xmas Everybody,104.063,45.0,Kerstmuziek/Merry Xmas Everybody01.44.063.b.s.mp3,0,0,100002201\r\nSlade,1973 - Merry Xmas Everybody,180.768,45.0,Kerstmuziek/Merry Xmas Everybody03.00.768.c2.s.mp3,0,0,100002205\r\nStevie Wonder,1967 - What Christmas Means to Me,10.177,45.0,Kerstmuziek/What Christmas Means to Me00.10.177.v1.o.mp3,0,1,100003813\r\nStevie Wonder,1967 - What Christmas Means to Me,29.151,45.0,Kerstmuziek/What Christmas Means to Me00.29.151.c1.o.mp3,0,1,100003804\r\nStevie Wonder,1967 - What Christmas Means to Me,42.432,45.0,Kerstmuziek/What Christmas Means to Me00.42.432.v2.o.mp3,0,1,100003814\r\nStevie Wonder,1967 - What Christmas Means to Me,75.637,45.0,Kerstmuziek/What Christmas Means to Me01.15.637.b.o.mp3,0,1,100003801\r\nStevie Wonder,1967 - What Christmas Means to Me,114.878,45.0,Kerstmuziek/What Christmas Means to Me01.54.878.c2.o.mp3,0,1,100003805\r\nThe Beach Boys,1963 - Little Saint Nick,0.0,45.0,Kerstmuziek/Little Saint Nick00.00.000.i.s.mp3,0,0,100001807\r\nThe Beach Boys,1963 - Little Saint Nick,14.786,45.0,Kerstmuziek/Little Saint Nick00.14.786.v1.s.mp3,0,0,100001813\r\nThe Beach Boys,1963 - Little Saint Nick,29.795,45.0,Kerstmuziek/Little Saint Nick00.29.795.c1.s.mp3,0,0,100001804\r\nThe Beach Boys,1963 - Little Saint Nick,37.039,45.0,Kerstmuziek/Little Saint Nick00.37.039.v2.s.mp3,0,0,100001814\r\nThe Beach Boys,1963 - Little Saint Nick,59.516,45.0,Kerstmuziek/Little Saint Nick00.59.516.b.s.mp3,0,0,100001801\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,12.668,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.12.668.c1.o.mp3,0,1,100002904\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,32.177,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.32.177.v1.o.mp3,0,1,100002913\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,51.263,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.51.263.v2.o.mp3,0,1,100002914\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,64.438,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town01.04.438.c2.o.mp3,0,1,100002905\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,82.511,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town01.22.511.b.o.mp3,0,1,100002901\r\nThe Ronettes,1963 - Sleigh Ride,0.0,45.0,Kerstmuziek/Sleigh Ride00.00.000.i.n.mp3,0,2,100003207\r\nThe Ronettes,1963 - Sleigh Ride,11.212,45.0,Kerstmuziek/Sleigh Ride00.11.212.c1.n.mp3,0,2,100003204\r\nThe Ronettes,1963 - Sleigh Ride,86.366,45.0,Kerstmuziek/Sleigh Ride01.26.366.b1.n.mp3,0,2,100003202\r\nThe Ronettes,1963 - Sleigh Ride,111.922,45.0,Kerstmuziek/Sleigh Ride01.51.922.b2.n.mp3,0,2,100003203\r\nThe Ronettes,1963 - Sleigh Ride,154.65,45.0,Kerstmuziek/Sleigh Ride02.34.650.c2.n.mp3,0,2,100003205\r\nTony Bennett,1968 - Winter Wonderland,0.0,45.0,Kerstmuziek/Winter Wonderland00.00.000.i.o.mp3,0,1,100004007\r\nTony Bennett,1968 - Winter Wonderland,5.331,45.0,Kerstmuziek/Winter Wonderland00.05.331.v1.o.mp3,0,1,100004013\r\nTony Bennett,1968 - Winter Wonderland,13.83,45.0,Kerstmuziek/Winter Wonderland00.13.830.c1.o.mp3,0,1,100004004\r\nTony Bennett,1968 - Winter Wonderland,71.39,45.0,Kerstmuziek/Winter Wonderland01.11.390.b.o.mp3,0,1,100004001\r\nTony Bennett,1968 - Winter Wonderland,110.871,45.0,Kerstmuziek/Winter Wonderland01.50.871.c2.o.mp3,0,1,100004005\r\nWham!,1986 - Last Christmas,0.0,45.0,Kerstmuziek/Last Christmas00.00.000.i.o.mp3,0,1,100001507\r\nWham!,1986 - Last Christmas,17.877,45.0,Kerstmuziek/Last Christmas00.17.877.c1.o.mp3,0,1,100001504\r\nWham!,1986 - Last Christmas,71.808,45.0,Kerstmuziek/Last Christmas01.11.808.v1.o.mp3,0,1,100001513\r\nWham!,1986 - Last Christmas,160.141,45.0,Kerstmuziek/Last Christmas02.40.141.v2.o.mp3,0,1,100001514\r\nWham!,1986 - Last Christmas,196.195,45.0,Kerstmuziek/Last Christmas03.16.195.c2.o.mp3,0,1,100001505\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,0.0,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.00.000.i.s.mp3,0,0,100001307\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,8.332,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.08.332.v1.s.mp3,0,0,100001313\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,34.93,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.34.930.c1.s.mp3,0,0,100001304\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,64.733,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday01.04.733.v2.s.mp3,0,0,100001314\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,202.531,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday03.22.531.c2.s.mp3,0,0,100001305\r\n" + "csv": "98°,2017 - What Christmas Means to Me,7.978,45.0,Kerstmuziek/What Christmas Means to Me00.07.978.v1.n.mp3,2,100003813\r\n98°,2017 - What Christmas Means to Me,29.184,45.0,Kerstmuziek/What Christmas Means to Me00.29.184.c1.n.mp3,2,100003804\r\n98°,2017 - What Christmas Means to Me,46.716,45.0,Kerstmuziek/What Christmas Means to Me00.46.716.v2.n.mp3,2,100003814\r\n98°,2017 - What Christmas Means to Me,77.055,45.0,Kerstmuziek/What Christmas Means to Me01.17.055.b.n.mp3,2,100003801\r\n98°,2017 - What Christmas Means to Me,118.102,45.0,Kerstmuziek/What Christmas Means to Me01.58.102.c2.n.mp3,2,100003805\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,0.0,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.00.000.i.s.mp3,0,100001207\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,6.626,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.06.626.c1.s.mp3,0,100001204\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,34.613,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year00.34.613.v1.s.mp3,0,100001213\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,93.551,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year01.33.551.v2.s.mp3,0,100001214\r\nAndy Williams,1963 - It’s the Most Wonderful Time of the Year,116.133,45.0,Kerstmuziek/It_s the Most Wonderful Time of the Year01.56.133.c2.s.mp3,0,100001205\r\nAriana Grande,2013 - Santa Tell Me,10.03,45.0,Kerstmuziek/Santa Tell Me00.10.030.c1.s.mp3,0,100003104\r\nAriana Grande,2013 - Santa Tell Me,30.907,45.0,Kerstmuziek/Santa Tell Me00.30.907.v1.s.mp3,0,100003113\r\nAriana Grande,2013 - Santa Tell Me,81.058,45.0,Kerstmuziek/Santa Tell Me01.21.058.v2.s.mp3,0,100003114\r\nAriana Grande,2013 - Santa Tell Me,131.792,45.0,Kerstmuziek/Santa Tell Me02.11.792.b.s.mp3,0,100003101\r\nAriana Grande,2013 - Santa Tell Me,160.716,45.0,Kerstmuziek/Santa Tell Me02.40.716.c2.s.mp3,0,100003105\r\nBand Aid,1984 - Do They Know It’s Christmas,1.017,45.0,Kerstmuziek/Do They Know It_s Christmas00.01.017.i.s.mp3,0,100000707\r\nBand Aid,1984 - Do They Know It’s Christmas,8.393,45.0,Kerstmuziek/Do They Know It_s Christmas00.08.393.v1.s.mp3,0,100000713\r\nBand Aid,1984 - Do They Know It’s Christmas,41.329,45.0,Kerstmuziek/Do They Know It_s Christmas00.41.329.v2.s.mp3,0,100000714\r\nBand Aid,1984 - Do They Know It’s Christmas,117.755,45.0,Kerstmuziek/Do They Know It_s Christmas01.57.755.c1.s.mp3,0,100000704\r\nBand Aid,1984 - Do They Know It’s Christmas,134.887,45.0,Kerstmuziek/Do They Know It_s Christmas02.14.887.b.s.mp3,0,100000701\r\nBing Crosby,1942 - White Christmas,0.0,45.0,Kerstmuziek/White Christmas00.00.000.i.s.mp3,0,100003907\r\nBing Crosby,1942 - White Christmas,10.178,45.0,Kerstmuziek/White Christmas00.10.178.c1.s.mp3,0,100003904\r\nBing Crosby,1942 - White Christmas,29.904,45.0,Kerstmuziek/White Christmas00.29.904.v.s.mp3,0,100003912\r\nBing Crosby,1942 - White Christmas,93.805,45.0,Kerstmuziek/White Christmas01.33.805.c2.s.mp3,0,100003905\r\nBing Crosby,1942 - White Christmas,133.467,45.0,Kerstmuziek/White Christmas02.13.467.c3.s.mp3,0,100003906\r\nBobby Helms,1970 - Jingle Bell Rock,0.0,45.0,Kerstmuziek/Jingle Bell Rock00.00.000.i.o.mp3,1,100001407\r\nBobby Helms,1970 - Jingle Bell Rock,7.934,45.0,Kerstmuziek/Jingle Bell Rock00.07.934.c1.o.mp3,1,100001404\r\nBobby Helms,1970 - Jingle Bell Rock,39.22,45.0,Kerstmuziek/Jingle Bell Rock00.39.220.v1.o.mp3,1,100001413\r\nBobby Helms,1970 - Jingle Bell Rock,55.761,45.0,Kerstmuziek/Jingle Bell Rock00.55.761.v2.o.mp3,1,100001414\r\nBobby Helms,1970 - Jingle Bell Rock,71.629,45.0,Kerstmuziek/Jingle Bell Rock01.11.629.c2.o.mp3,1,100001405\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,0.0,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.00.000.i.s.mp3,0,100002007\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,29.102,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.29.102.v1.s.mp3,0,100002013\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,37.443,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord00.37.443.c1.s.mp3,0,100002004\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,110.553,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord01.50.553.b1.s.mp3,0,100002002\r\nBoney M.,1978 - Mary’s Boy Child/Oh My Lord,225.897,45.0,Kerstmuziek/Mary_s Boy Child _ Oh My Lord03.45.897.b2.s.mp3,0,100002003\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,0.0,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.00.000.i.o.mp3,1,100002607\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,7.36,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.07.360.c1.o.mp3,1,100002604\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,34.201,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.34.201.v1.o.mp3,1,100002613\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,60.248,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.00.248.b.o.mp3,1,100002601\r\nBrenda Lee,1958 - Rockin’ Around the Christmas Tree,102.242,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.42.242.c2.o.mp3,1,100002605\r\nBritney Spears,2000 - My Only Wish (This Year),13.445,45.0,Kerstmuziek/My Only Wish This Year00.13.445.v1.s.mp3,0,100002413\r\nBritney Spears,2000 - My Only Wish (This Year),38.727,45.0,Kerstmuziek/My Only Wish This Year00.38.727.b.s.mp3,0,100002401\r\nBritney Spears,2000 - My Only Wish (This Year),52.464,45.0,Kerstmuziek/My Only Wish This Year00.52.464.c1.s.mp3,0,100002404\r\nBritney Spears,2000 - My Only Wish (This Year),91.775,45.0,Kerstmuziek/My Only Wish This Year01.31.775.v2.s.mp3,0,100002414\r\nBritney Spears,2000 - My Only Wish (This Year),187.642,45.0,Kerstmuziek/My Only Wish This Year03.07.642.c2.s.mp3,0,100002405\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,46.946,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town00.46.946.c1.n.mp3,2,100002904\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,72.178,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.12.178.v1.n.mp3,2,100002913\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,95.574,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.35.574.v2.n.mp3,2,100002914\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,114.842,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town01.54.842.c2.n.mp3,2,100002905\r\nBruce Springsteen,1975 - Santa Claus is Comin’ to Town,190.384,45.0,Kerstmuziek/Santa Claus Is Comin_ to Town03.10.384.b.n.mp3,2,100002901\r\nBurl Ives,1965 - A Holly Jolly Christmas,0.426,45.0,Kerstmuziek/A Holly Jolly Christmas00.00.426.i.o.mp3,1,100000107\r\nBurl Ives,1965 - A Holly Jolly Christmas,6.435,45.0,Kerstmuziek/A Holly Jolly Christmas00.06.435.c1.o.mp3,1,100000104\r\nBurl Ives,1965 - A Holly Jolly Christmas,27.017,45.0,Kerstmuziek/A Holly Jolly Christmas00.27.017.v1.o.mp3,1,100000113\r\nBurl Ives,1965 - A Holly Jolly Christmas,47.741,45.0,Kerstmuziek/A Holly Jolly Christmas00.47.741.b.o.mp3,1,100000101\r\nBurl Ives,1965 - A Holly Jolly Christmas,61.651,45.0,Kerstmuziek/A Holly Jolly Christmas01.01.651.c2.o.mp3,1,100000105\r\nChris Rea,1988 - Driving Home for Christmas,0.0,45.0,Kerstmuziek/Driving Home For Christmas00.00.000.i.s.mp3,0,100000807\r\nChris Rea,1988 - Driving Home for Christmas,22.076,45.0,Kerstmuziek/Driving Home For Christmas00.22.076.c1.s.mp3,0,100000804\r\nChris Rea,1988 - Driving Home for Christmas,70.478,45.0,Kerstmuziek/Driving Home For Christmas01.10.478.v.s.mp3,0,100000812\r\nChris Rea,1988 - Driving Home for Christmas,138.762,45.0,Kerstmuziek/Driving Home For Christmas02.18.762.b.s.mp3,0,100000801\r\nChris Rea,1988 - Driving Home for Christmas,197.448,45.0,Kerstmuziek/Driving Home For Christmas03.17.448.c2.s.mp3,0,100000805\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,14.449,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.14.449.c1.o.mp3,1,100001004\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,41.68,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.41.680.c2.o.mp3,1,100001005\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,70.856,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.10.856.v1.o.mp3,1,100001013\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,175.474,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas02.55.474.v2.o.mp3,1,100001014\r\nChristina Aguilera,2000 - Have Yourself a Merry Little Christmas,207.012,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas03.27.012.c3.o.mp3,1,100001006\r\nChuck Berry,1959 - Run Rudolph Run,0.0,45.0,Kerstmuziek/Run Rudolph Run00.00.000.i.s.mp3,0,100002707\r\nChuck Berry,1959 - Run Rudolph Run,19.305,45.0,Kerstmuziek/Run Rudolph Run00.19.305.c1.s.mp3,0,100002704\r\nChuck Berry,1959 - Run Rudolph Run,37.58,45.0,Kerstmuziek/Run Rudolph Run00.37.580.v1.s.mp3,0,100002713\r\nChuck Berry,1959 - Run Rudolph Run,73.941,45.0,Kerstmuziek/Run Rudolph Run01.13.941.b.s.mp3,0,100002701\r\nChuck Berry,1959 - Run Rudolph Run,113.301,45.0,Kerstmuziek/Run Rudolph Run01.53.301.v2.s.mp3,0,100002714\r\nColdplay,2010 - Christmas Lights,0.0,45.0,Kerstmuziek/Christmas Lights00.00.000.i.s.mp3,0,100000607\r\nColdplay,2010 - Christmas Lights,21.618,45.0,Kerstmuziek/Christmas Lights00.21.618.v1.s.mp3,0,100000613\r\nColdplay,2010 - Christmas Lights,50.719,45.0,Kerstmuziek/Christmas Lights00.50.719.b.s.mp3,0,100000601\r\nColdplay,2010 - Christmas Lights,71.921,45.0,Kerstmuziek/Christmas Lights01.11.921.c1.s.mp3,0,100000604\r\nColdplay,2010 - Christmas Lights,132.479,45.0,Kerstmuziek/Christmas Lights02.12.479.c2.s.mp3,0,100000605\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),0.0,45.0,Kerstmuziek/Christmas Baby Please Come Home00.00.000.i.o.mp3,1,100000507\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),15.654,45.0,Kerstmuziek/Christmas Baby Please Come Home00.15.654.c1.o.mp3,1,100000504\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),46.379,45.0,Kerstmuziek/Christmas Baby Please Come Home00.46.379.v.o.mp3,1,100000512\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),76.035,45.0,Kerstmuziek/Christmas Baby Please Come Home01.16.035.b.o.mp3,1,100000501\r\nDarlene Love,1963 - Christmas (Baby Please Come Home),106.468,45.0,Kerstmuziek/Christmas Baby Please Come Home01.46.468.c2.o.mp3,1,100000505\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,0.0,45.0,Kerstmuziek/Jingle Bell Rock00.00.000.i.n.mp3,2,100001407\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,7.365,45.0,Kerstmuziek/Jingle Bell Rock00.07.365.c1.n.mp3,2,100001404\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,37.042,45.0,Kerstmuziek/Jingle Bell Rock00.37.042.v1.n.mp3,2,100001413\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,52.278,45.0,Kerstmuziek/Jingle Bell Rock00.52.278.v2.n.mp3,2,100001414\r\nDaryl Hall and John Oates,1983 - Jingle Bell Rock,67.224,45.0,Kerstmuziek/Jingle Bell Rock01.07.224.c2.n.mp3,2,100001405\r\nDean Martin,1959 - Let It Snow!,0.045,45.0,Kerstmuziek/Let It Snow00.00.045.i.n.mp3,2,100001607\r\nDean Martin,1959 - Let It Snow!,7.298,45.0,Kerstmuziek/Let It Snow00.07.298.c1.n.mp3,2,100001604\r\nDean Martin,1959 - Let It Snow!,35.886,45.0,Kerstmuziek/Let It Snow00.35.886.v.n.mp3,2,100001612\r\nDean Martin,1959 - Let It Snow!,64.14,45.0,Kerstmuziek/Let It Snow01.04.140.b.n.mp3,2,100001601\r\nDean Martin,1959 - Let It Snow!,91.925,45.0,Kerstmuziek/Let It Snow01.31.925.c2.n.mp3,2,100001605\r\nDonny Hathaway,1970 - This Christmas,14.531,45.0,Kerstmuziek/This Christmas00.14.531.v1.s.mp3,0,100003613\r\nDonny Hathaway,1970 - This Christmas,35.667,45.0,Kerstmuziek/This Christmas00.35.667.c1.s.mp3,0,100003604\r\nDonny Hathaway,1970 - This Christmas,65.39,45.0,Kerstmuziek/This Christmas01.05.390.v2.s.mp3,0,100003614\r\nDonny Hathaway,1970 - This Christmas,115.852,45.0,Kerstmuziek/This Christmas01.55.852.b.s.mp3,0,100003601\r\nDonny Hathaway,1970 - This Christmas,161.956,45.0,Kerstmuziek/This Christmas02.41.956.o.s.mp3,0,100003608\r\nEartha Kitt,1953 - Santa Baby,0.0,45.0,Kerstmuziek/Santa Baby00.00.000.i.o.mp3,1,100002807\r\nEartha Kitt,1953 - Santa Baby,12.745,45.0,Kerstmuziek/Santa Baby00.12.745.c1.o.mp3,1,100002804\r\nEartha Kitt,1953 - Santa Baby,57.117,45.0,Kerstmuziek/Santa Baby00.57.117.v1.o.mp3,1,100002813\r\nEartha Kitt,1953 - Santa Baby,103.612,45.0,Kerstmuziek/Santa Baby01.43.612.v2.o.mp3,1,100002814\r\nEartha Kitt,1953 - Santa Baby,149.164,45.0,Kerstmuziek/Santa Baby02.29.164.b.o.mp3,1,100002801\r\nElla Fitzgerald,1960 - Sleigh Ride,0.0,45.0,Kerstmuziek/Sleigh Ride00.00.000.i.o.mp3,1,100003207\r\nElla Fitzgerald,1960 - Sleigh Ride,25.01,45.0,Kerstmuziek/Sleigh Ride00.25.010.c1.o.mp3,1,100003204\r\nElla Fitzgerald,1960 - Sleigh Ride,54.597,45.0,Kerstmuziek/Sleigh Ride00.54.597.b1.o.mp3,1,100003202\r\nElla Fitzgerald,1960 - Sleigh Ride,92.591,45.0,Kerstmuziek/Sleigh Ride01.32.591.b2.o.mp3,1,100003203\r\nElla Fitzgerald,1960 - Sleigh Ride,143.356,45.0,Kerstmuziek/Sleigh Ride02.23.356.c2.o.mp3,1,100003205\r\nElton John,1974 - Step into Christmas,0.0,45.0,Kerstmuziek/Step into Christmas00.00.000.i.s.mp3,0,100003307\r\nElton John,1974 - Step into Christmas,14.799,45.0,Kerstmuziek/Step into Christmas00.14.799.v1.s.mp3,0,100003313\r\nElton John,1974 - Step into Christmas,50.408,45.0,Kerstmuziek/Step into Christmas00.50.408.c1.s.mp3,0,100003304\r\nElton John,1974 - Step into Christmas,123.631,45.0,Kerstmuziek/Step into Christmas02.03.631.b.s.mp3,0,100003301\r\nElton John,1974 - Step into Christmas,184.213,45.0,Kerstmuziek/Step into Christmas03.04.213.c2.s.mp3,0,100003305\r\nElvis Presley,1957 - Blue Christmas,0.0,45.0,Kerstmuziek/Blue Christmas00.00.000.c1.s.mp3,0,100000404\r\nElvis Presley,1957 - Blue Christmas,21.806,45.0,Kerstmuziek/Blue Christmas00.21.806.v1.s.mp3,0,100000413\r\nElvis Presley,1957 - Blue Christmas,41.602,45.0,Kerstmuziek/Blue Christmas00.41.602.v2.s.mp3,0,100000414\r\nElvis Presley,1957 - Blue Christmas,82.088,45.0,Kerstmuziek/Blue Christmas01.22.088.b.s.mp3,0,100000401\r\nElvis Presley,1957 - Blue Christmas,102.852,45.0,Kerstmuziek/Blue Christmas01.42.852.c2.s.mp3,0,100000405\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,0.0,45.0,Kerstmuziek/Let It Snow00.00.000.i.o.mp3,1,100001607\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,6.579,45.0,Kerstmuziek/Let It Snow00.06.579.c1.o.mp3,1,100001604\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,33.075,45.0,Kerstmuziek/Let It Snow00.33.075.v.o.mp3,1,100001612\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,87.4,45.0,Kerstmuziek/Let It Snow01.27.400.b.o.mp3,1,100001601\r\nFrank Sinatra (with the B. Swanson Quartet),1950 - Let It Snow!,134.168,45.0,Kerstmuziek/Let It Snow02.14.168.c2.o.mp3,1,100001605\r\nHannah Kerr,2018 - Winter Wonderland,0.0,45.0,Kerstmuziek/Winter Wonderland00.00.000.i.n.mp3,2,100004007\r\nHannah Kerr,2018 - Winter Wonderland,8.736,45.0,Kerstmuziek/Winter Wonderland00.08.736.v1.n.mp3,2,100004013\r\nHannah Kerr,2018 - Winter Wonderland,17.293,45.0,Kerstmuziek/Winter Wonderland00.17.293.c1.n.mp3,2,100004004\r\nHannah Kerr,2018 - Winter Wonderland,71.062,45.0,Kerstmuziek/Winter Wonderland01.11.062.b.n.mp3,2,100004001\r\nHannah Kerr,2018 - Winter Wonderland,122.76,45.0,Kerstmuziek/Winter Wonderland02.02.760.c2.n.mp3,2,100004005\r\nJames TW,2018 - Last Christmas,45.0,45.0,Kerstmuziek/Last Christmas00.45.000.c1.n.mp3,2,100001504\r\nJames TW,2018 - Last Christmas,48.273,45.0,Kerstmuziek/Last Christmas00.48.273.v1.n.mp3,2,100001513\r\nJames TW,2018 - Last Christmas,128.354,45.0,Kerstmuziek/Last Christmas02.08.354.v2.n.mp3,2,100001514\r\nJames TW,2018 - Last Christmas,160.037,45.0,Kerstmuziek/Last Christmas02.40.037.c2.n.mp3,2,100001505\r\nJonas Brothers,2019 - Like It’s Christmas,6.658,45.0,Kerstmuziek/Like It_s Christmas00.06.658.v1.s.mp3,0,100001713\r\nJonas Brothers,2019 - Like It’s Christmas,19.514,45.0,Kerstmuziek/Like It_s Christmas00.19.514.b.s.mp3,0,100001701\r\nJonas Brothers,2019 - Like It’s Christmas,34.665,45.0,Kerstmuziek/Like It_s Christmas00.34.665.c1.s.mp3,0,100001704\r\nJonas Brothers,2019 - Like It’s Christmas,62.214,45.0,Kerstmuziek/Like It_s Christmas01.02.214.v2.s.mp3,0,100001714\r\nJonas Brothers,2019 - Like It’s Christmas,130.167,45.0,Kerstmuziek/Like It_s Christmas02.10.167.c2.s.mp3,0,100001705\r\nJosé Feliciano,1970 - Feliz Navidad,0.0,45.0,Kerstmuziek/Feliz Navidad00.00.000.i.s.mp3,0,100000907\r\nJosé Feliciano,1970 - Feliz Navidad,12.382,45.0,Kerstmuziek/Feliz Navidad00.12.382.c1.s.mp3,0,100000904\r\nJosé Feliciano,1970 - Feliz Navidad,37.562,45.0,Kerstmuziek/Feliz Navidad00.37.562.v1.s.mp3,0,100000913\r\nJosé Feliciano,1970 - Feliz Navidad,141.093,45.0,Kerstmuziek/Feliz Navidad02.21.093.v2.s.mp3,0,100000914\r\nJosé Feliciano,1970 - Feliz Navidad,167.314,45.0,Kerstmuziek/Feliz Navidad02.47.314.c2.s.mp3,0,100000905\r\nJustin Bieber,2011 - Mistletoe,3.345,45.0,Kerstmuziek/Mistletoe00.03.345.pc1.s.mp3,0,100002310\r\nJustin Bieber,2011 - Mistletoe,15.681000000000001,45.0,Kerstmuziek/Mistletoe00.15.681.c1.s.mp3,0,100002304\r\nJustin Bieber,2011 - Mistletoe,39.412,45.0,Kerstmuziek/Mistletoe00.39.412.v1.s.mp3,0,100002313\r\nJustin Bieber,2011 - Mistletoe,86.979,45.0,Kerstmuziek/Mistletoe01.26.979.b.s.mp3,0,100002301\r\nJustin Bieber,2011 - Mistletoe,109.978,45.0,Kerstmuziek/Mistletoe01.49.978.pc2.s.mp3,0,100002311\r\nKelly Clarkson,2013 - Underneath the Tree,0.0,45.0,Kerstmuziek/Underneath the Tree00.00.000.c1.s.mp3,0,100003704\r\nKelly Clarkson,2013 - Underneath the Tree,29.526,45.0,Kerstmuziek/Underneath the Tree00.29.526.v1.s.mp3,0,100003713\r\nKelly Clarkson,2013 - Underneath the Tree,86.609,45.0,Kerstmuziek/Underneath the Tree01.26.609.v2.s.mp3,0,100003714\r\nKelly Clarkson,2013 - Underneath the Tree,143.691,45.0,Kerstmuziek/Underneath the Tree02.23.691.b.s.mp3,0,100003701\r\nKelly Clarkson,2013 - Underneath the Tree,167.706,45.0,Kerstmuziek/Underneath the Tree02.47.706.c2.s.mp3,0,100003705\r\nKylie Minogue,2000 - Santa Baby,0.0,45.0,Kerstmuziek/Santa Baby00.00.000.i.n.mp3,2,100002807\r\nKylie Minogue,2000 - Santa Baby,12.617,45.0,Kerstmuziek/Santa Baby00.12.617.c1.n.mp3,2,100002804\r\nKylie Minogue,2000 - Santa Baby,56.256,45.0,Kerstmuziek/Santa Baby00.56.256.v1.n.mp3,2,100002813\r\nKylie Minogue,2000 - Santa Baby,100.937,45.0,Kerstmuziek/Santa Baby01.40.937.v2.n.mp3,2,100002814\r\nKylie Minogue,2000 - Santa Baby,144.345,45.0,Kerstmuziek/Santa Baby02.24.345.b.n.mp3,2,100002801\r\nLeona Lewis,2013 - One More Sleep,8.352,45.0,Kerstmuziek/One More Sleep00.08.352.v1.s.mp3,0,100002513\r\nLeona Lewis,2013 - One More Sleep,34.229,45.0,Kerstmuziek/One More Sleep00.34.229.c1.s.mp3,0,100002504\r\nLeona Lewis,2013 - One More Sleep,84.615,45.0,Kerstmuziek/One More Sleep01.24.615.v2.s.mp3,0,100002514\r\nLeona Lewis,2013 - One More Sleep,161.289,45.0,Kerstmuziek/One More Sleep02.41.289.b.s.mp3,0,100002501\r\nLeona Lewis,2013 - One More Sleep,179.772,45.0,Kerstmuziek/One More Sleep02.59.772.c2.s.mp3,0,100002505\r\nLiam Payne,2019 - All I Want (for Christmas),6.832,45.0,Kerstmuziek/All I Want For Christmas00.06.832.v1.s.mp3,0,100000213\r\nLiam Payne,2019 - All I Want (for Christmas),34.265,45.0,Kerstmuziek/All I Want For Christmas00.34.265.pc.s.mp3,0,100000209\r\nLiam Payne,2019 - All I Want (for Christmas),47.516,45.0,Kerstmuziek/All I Want For Christmas00.47.516.c1.s.mp3,0,100000204\r\nLiam Payne,2019 - All I Want (for Christmas),82.506,45.0,Kerstmuziek/All I Want For Christmas01.22.506.v2.s.mp3,0,100000214\r\nLiam Payne,2019 - All I Want (for Christmas),150.933,45.0,Kerstmuziek/All I Want For Christmas02.30.933.b.s.mp3,0,100000201\r\nMariah Carey,1994 - All I Want for Christmas is You,57.151,45.0,Kerstmuziek/All I Want For Christmas Is You00.57.151.v1.s.mp3,0,100000313\r\nMariah Carey,1994 - All I Want for Christmas is You,91.938,45.0,Kerstmuziek/All I Want For Christmas Is You01.31.938.c1.s.mp3,0,100000304\r\nMariah Carey,1994 - All I Want for Christmas is You,101.601,45.0,Kerstmuziek/All I Want For Christmas Is You01.41.601.v2.s.mp3,0,100000314\r\nMariah Carey,1994 - All I Want for Christmas is You,146.052,45.0,Kerstmuziek/All I Want For Christmas Is You02.26.052.b.s.mp3,0,100000301\r\nMariah Carey,1994 - All I Want for Christmas is You,193.815,45.0,Kerstmuziek/All I Want For Christmas Is You03.13.815.c2.s.mp3,0,100000305\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),0.0,45.0,Kerstmuziek/Christmas Baby Please Come Home00.00.000.i.n.mp3,2,100000507\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),15.106,45.0,Kerstmuziek/Christmas Baby Please Come Home00.15.106.c1.n.mp3,2,100000504\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),45.851,45.0,Kerstmuziek/Christmas Baby Please Come Home00.45.851.v.n.mp3,2,100000512\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),75.619,45.0,Kerstmuziek/Christmas Baby Please Come Home01.15.619.b.n.mp3,2,100000501\r\nMariah Carey,1994 - Christmas (Baby Please Come Home),107.075,45.0,Kerstmuziek/Christmas Baby Please Come Home01.47.075.c2.n.mp3,2,100000505\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,29.434,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.29.434.i.n.mp3,2,100002607\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,35.961,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree00.35.961.c1.n.mp3,2,100002604\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,62.451,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.02.451.v1.n.mp3,2,100002613\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,87.918,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree01.27.918.b.n.mp3,2,100002601\r\nMel and Kim,1987 - Rockin’ Around the Christmas Tree,184.667,45.0,Kerstmuziek/Rockin_ Around the Christmas Tree03.04.667.c2.n.mp3,2,100002605\r\nMichael Bublé,2011 - A Holly Jolly Christmas,0.0,45.0,Kerstmuziek/A Holly Jolly Christmas00.00.000.i.n.mp3,2,100000107\r\nMichael Bublé,2011 - A Holly Jolly Christmas,5.9030000000000005,45.0,Kerstmuziek/A Holly Jolly Christmas00.05.903.c1.n.mp3,2,100000104\r\nMichael Bublé,2011 - A Holly Jolly Christmas,32.154,45.0,Kerstmuziek/A Holly Jolly Christmas00.32.154.v1.n.mp3,2,100000113\r\nMichael Bublé,2011 - A Holly Jolly Christmas,56.044,45.0,Kerstmuziek/A Holly Jolly Christmas00.56.044.b.n.mp3,2,100000101\r\nMichael Bublé,2011 - A Holly Jolly Christmas,94.864,45.0,Kerstmuziek/A Holly Jolly Christmas01.34.864.c2.n.mp3,2,100000105\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,1.066,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.01.066.i.n.mp3,2,100001107\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,35.167,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.35.167.c1.n.mp3,2,100001104\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,76.373,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas01.16.373.v1.n.mp3,2,100001113\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,132.498,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.12.498.b.n.mp3,2,100001101\r\nMichael Bublé,2015 - It’s Beginning to Look a Lot Like Christmas,152.509,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.32.509.c2.n.mp3,2,100001105\r\nMud,1975 - Lonely This Christmas,0.0,45.0,Kerstmuziek/Lonely This Christmas00.00.000.i.s.mp3,0,100001907\r\nMud,1975 - Lonely This Christmas,15.349,45.0,Kerstmuziek/Lonely This Christmas00.15.349.v1.s.mp3,0,100001913\r\nMud,1975 - Lonely This Christmas,43.733,45.0,Kerstmuziek/Lonely This Christmas00.43.733.c1.s.mp3,0,100001904\r\nMud,1975 - Lonely This Christmas,103.091,45.0,Kerstmuziek/Lonely This Christmas01.43.091.v2.s.mp3,0,100001914\r\nMud,1975 - Lonely This Christmas,127.787,45.0,Kerstmuziek/Lonely This Christmas02.07.787.b.s.mp3,0,100001901\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),0.0,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You00.00.000.i.s.mp3,0,100003507\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),58.142,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You00.58.142.v.s.mp3,0,100003512\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),94.733,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You01.34.733.c1.s.mp3,0,100003504\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),121.565,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You02.01.565.b.s.mp3,0,100003501\r\nNat King Cole,1946 - The Christmas Song (Merry Christmas to You),149.82,45.0,Kerstmuziek/The Christmas Song Merry Christmas to You02.29.820.c2.s.mp3,0,100003505\r\nPaul McCartney,1979 - Wonderful Christmastime,0.0,45.0,Kerstmuziek/Wonderful Christmastime00.00.000.i.s.mp3,0,100004107\r\nPaul McCartney,1979 - Wonderful Christmastime,10.315,45.0,Kerstmuziek/Wonderful Christmastime00.10.315.v1.s.mp3,0,100004113\r\nPaul McCartney,1979 - Wonderful Christmastime,21.072,45.0,Kerstmuziek/Wonderful Christmastime00.21.072.c1.s.mp3,0,100004104\r\nPaul McCartney,1979 - Wonderful Christmastime,61.891,45.0,Kerstmuziek/Wonderful Christmastime01.01.891.b1.s.mp3,0,100004102\r\nPaul McCartney,1979 - Wonderful Christmastime,178.453,45.0,Kerstmuziek/Wonderful Christmastime02.58.453.b2.s.mp3,0,100004103\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,0.802,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.00.802.i.o.mp3,1,100001107\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,13.008,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.13.008.c1.o.mp3,1,100001104\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,47.4,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas00.47.400.v1.o.mp3,1,100001113\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,98.898,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas01.38.898.b.o.mp3,1,100001101\r\nPerry Como (with Mitchell Ayres and His Orchestra),2004 - It’s Beginning to Look a Lot Like Christmas,132.399,45.0,Kerstmuziek/It_s Beginning To Look a Lot Like Christmas02.12.399.c2.o.mp3,1,100001105\r\nQueen,1984 - Thank God It’s Christmas,0.0,45.0,Kerstmuziek/Thank God It_s Christmas00.00.000.v1.s.mp3,0,100003413\r\nQueen,1984 - Thank God It’s Christmas,49.964,45.0,Kerstmuziek/Thank God It_s Christmas00.49.964.v2.s.mp3,0,100003414\r\nQueen,1984 - Thank God It’s Christmas,112.383,45.0,Kerstmuziek/Thank God It_s Christmas01.52.383.c1.s.mp3,0,100003404\r\nQueen,1984 - Thank God It’s Christmas,136.549,45.0,Kerstmuziek/Thank God It_s Christmas02.16.549.v3.s.mp3,0,100003415\r\nQueen,1984 - Thank God It’s Christmas,198.819,45.0,Kerstmuziek/Thank God It_s Christmas03.18.819.c2.s.mp3,0,100003405\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,0.0,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.00.000.c1.n.mp3,2,100001004\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,30.09,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.30.090.c2.n.mp3,2,100001005\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,59.301,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas00.59.301.v1.n.mp3,2,100001013\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,87.437,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.27.437.v2.n.mp3,2,100001014\r\nSam Smith,2014 - Have Yourself a Merry Little Christmas,115.671,45.0,Kerstmuziek/Have Yourself a Merry Little Christmas01.55.671.c3.n.mp3,2,100001006\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,0.0,45.0,Kerstmuziek/Merry Christmas Everyone00.00.000.i.s.mp3,0,100002107\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,8.052,45.0,Kerstmuziek/Merry Christmas Everyone00.08.052.c1.s.mp3,0,100002104\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,46.55,45.0,Kerstmuziek/Merry Christmas Everyone00.46.550.v1.s.mp3,0,100002113\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,76.619,45.0,Kerstmuziek/Merry Christmas Everyone01.16.619.b.s.mp3,0,100002101\r\nShakin’ Stevens,1991 - Merry Christmas Everyone,142.67,45.0,Kerstmuziek/Merry Christmas Everyone02.22.670.c2.s.mp3,0,100002105\r\nSia,2017 - Santa’s Coming For Us,0.0,45.0,Kerstmuziek/Santa_s Coming For Us00.00.000.i.s.mp3,0,100003007\r\nSia,2017 - Santa’s Coming For Us,20.772,45.0,Kerstmuziek/Santa_s Coming For Us00.20.772.v1.s.mp3,0,100003013\r\nSia,2017 - Santa’s Coming For Us,60.428,45.0,Kerstmuziek/Santa_s Coming For Us01.00.428.c1.s.mp3,0,100003004\r\nSia,2017 - Santa’s Coming For Us,82.852,45.0,Kerstmuziek/Santa_s Coming For Us01.22.852.v2.s.mp3,0,100003014\r\nSia,2017 - Santa’s Coming For Us,142.926,45.0,Kerstmuziek/Santa_s Coming For Us02.22.926.c2.s.mp3,0,100003005\r\nSlade,1973 - Merry Xmas Everybody,7.031,45.0,Kerstmuziek/Merry Xmas Everybody00.07.031.v1.s.mp3,0,100002213\r\nSlade,1973 - Merry Xmas Everybody,35.923,45.0,Kerstmuziek/Merry Xmas Everybody00.35.923.c1.s.mp3,0,100002204\r\nSlade,1973 - Merry Xmas Everybody,55.611,45.0,Kerstmuziek/Merry Xmas Everybody00.55.611.v2.s.mp3,0,100002214\r\nSlade,1973 - Merry Xmas Everybody,104.063,45.0,Kerstmuziek/Merry Xmas Everybody01.44.063.b.s.mp3,0,100002201\r\nSlade,1973 - Merry Xmas Everybody,180.768,45.0,Kerstmuziek/Merry Xmas Everybody03.00.768.c2.s.mp3,0,100002205\r\nStevie Wonder,1967 - What Christmas Means to Me,10.177,45.0,Kerstmuziek/What Christmas Means to Me00.10.177.v1.o.mp3,1,100003813\r\nStevie Wonder,1967 - What Christmas Means to Me,29.151,45.0,Kerstmuziek/What Christmas Means to Me00.29.151.c1.o.mp3,1,100003804\r\nStevie Wonder,1967 - What Christmas Means to Me,42.432,45.0,Kerstmuziek/What Christmas Means to Me00.42.432.v2.o.mp3,1,100003814\r\nStevie Wonder,1967 - What Christmas Means to Me,75.637,45.0,Kerstmuziek/What Christmas Means to Me01.15.637.b.o.mp3,1,100003801\r\nStevie Wonder,1967 - What Christmas Means to Me,114.878,45.0,Kerstmuziek/What Christmas Means to Me01.54.878.c2.o.mp3,1,100003805\r\nThe Beach Boys,1963 - Little Saint Nick,0.0,45.0,Kerstmuziek/Little Saint Nick00.00.000.i.s.mp3,0,100001807\r\nThe Beach Boys,1963 - Little Saint Nick,14.786,45.0,Kerstmuziek/Little Saint Nick00.14.786.v1.s.mp3,0,100001813\r\nThe Beach Boys,1963 - Little Saint Nick,29.795,45.0,Kerstmuziek/Little Saint Nick00.29.795.c1.s.mp3,0,100001804\r\nThe Beach Boys,1963 - Little Saint Nick,37.039,45.0,Kerstmuziek/Little Saint Nick00.37.039.v2.s.mp3,0,100001814\r\nThe Beach Boys,1963 - Little Saint Nick,59.516,45.0,Kerstmuziek/Little Saint Nick00.59.516.b.s.mp3,0,100001801\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,12.668,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.12.668.c1.o.mp3,1,100002904\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,32.177,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.32.177.v1.o.mp3,1,100002913\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,51.263,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town00.51.263.v2.o.mp3,1,100002914\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,64.438,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town01.04.438.c2.o.mp3,1,100002905\r\nThe Jackson 5,1970 - Santa Claus is Comin’ to Town,82.511,45.0,Kerstmuziek/Santa Claus Is Comin_ To Town01.22.511.b.o.mp3,1,100002901\r\nThe Ronettes,1963 - Sleigh Ride,0.0,45.0,Kerstmuziek/Sleigh Ride00.00.000.i.n.mp3,2,100003207\r\nThe Ronettes,1963 - Sleigh Ride,11.212,45.0,Kerstmuziek/Sleigh Ride00.11.212.c1.n.mp3,2,100003204\r\nThe Ronettes,1963 - Sleigh Ride,86.366,45.0,Kerstmuziek/Sleigh Ride01.26.366.b1.n.mp3,2,100003202\r\nThe Ronettes,1963 - Sleigh Ride,111.922,45.0,Kerstmuziek/Sleigh Ride01.51.922.b2.n.mp3,2,100003203\r\nThe Ronettes,1963 - Sleigh Ride,154.65,45.0,Kerstmuziek/Sleigh Ride02.34.650.c2.n.mp3,2,100003205\r\nTony Bennett,1968 - Winter Wonderland,0.0,45.0,Kerstmuziek/Winter Wonderland00.00.000.i.o.mp3,1,100004007\r\nTony Bennett,1968 - Winter Wonderland,5.331,45.0,Kerstmuziek/Winter Wonderland00.05.331.v1.o.mp3,1,100004013\r\nTony Bennett,1968 - Winter Wonderland,13.83,45.0,Kerstmuziek/Winter Wonderland00.13.830.c1.o.mp3,1,100004004\r\nTony Bennett,1968 - Winter Wonderland,71.39,45.0,Kerstmuziek/Winter Wonderland01.11.390.b.o.mp3,1,100004001\r\nTony Bennett,1968 - Winter Wonderland,110.871,45.0,Kerstmuziek/Winter Wonderland01.50.871.c2.o.mp3,1,100004005\r\nWham!,1986 - Last Christmas,0.0,45.0,Kerstmuziek/Last Christmas00.00.000.i.o.mp3,1,100001507\r\nWham!,1986 - Last Christmas,17.877,45.0,Kerstmuziek/Last Christmas00.17.877.c1.o.mp3,1,100001504\r\nWham!,1986 - Last Christmas,71.808,45.0,Kerstmuziek/Last Christmas01.11.808.v1.o.mp3,1,100001513\r\nWham!,1986 - Last Christmas,160.141,45.0,Kerstmuziek/Last Christmas02.40.141.v2.o.mp3,1,100001514\r\nWham!,1986 - Last Christmas,196.195,45.0,Kerstmuziek/Last Christmas03.16.195.c2.o.mp3,1,100001505\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,0.0,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.00.000.i.s.mp3,0,100001307\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,8.332,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.08.332.v1.s.mp3,0,100001313\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,34.93,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday00.34.930.c1.s.mp3,0,100001304\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,64.733,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday01.04.733.v2.s.mp3,0,100001314\r\nWizzard,1973 - I Wish It Could Be Christmas Every Day,202.531,45.0,Kerstmuziek/I Wish It Could Be Christmas Everyday03.22.531.c2.s.mp3,0,100001305\r\n" } }, { @@ -158,7 +158,7 @@ "fields": { "name": "ThatsMySong", "process_csv": false, - "csv": "Alicia Keys,No One,0.0,45.0,ThatsMySong/2007 - Alicia Keys - No One - Bridge.mp3,0,Bridge,2000s\r\nAlicia Keys,No One,10.721,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 1.mp3,0,Chorus,2000s\r\nAlicia Keys,No One,33.277,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 2.mp3,0,Chorus,2000s\r\nAlicia Keys,No One,53.603,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 3.mp3,0,Chorus,2000s\r\nAlicia Keys,No One,86.444,45.0,ThatsMySong/2007 - Alicia Keys - No One - Intro.mp3,0,Intro,2000s\r\nAlicia Keys,No One,107.351,45.0,ThatsMySong/2007 - Alicia Keys - No One - Outro.mp3,0,Outro,2000s\r\nAlicia Keys,No One,128.647,45.0,ThatsMySong/2007 - Alicia Keys - No One - Prechorus - 1.mp3,0,Prechorus,2000s\r\nAlicia Keys,No One,159.742,45.0,ThatsMySong/2007 - Alicia Keys - No One - Prechorus - 2.mp3,0,Prechorus,2000s\r\nAlicia Keys,No One,183.075,45.0,ThatsMySong/2007 - Alicia Keys - No One - Verse - 1.mp3,0,Verse,2000s\r\nAlicia Keys,No One,203.982,45.0,ThatsMySong/2007 - Alicia Keys - No One - Verse - 2.mp3,0,Verse,2000s\r\nAndy Gibb,I Just Want to Be Your Everything,0.0,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Chorus - 1.mp3,0,Chorus,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,13.653,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Chorus - 2.mp3,0,Chorus,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,34.043,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Intro.mp3,0,Intro,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,53.521,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Solo.mp3,0,Solo,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,91.569,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 1.mp3,0,Verse,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,115.121,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 2.mp3,0,Verse,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,136.375,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 3.mp3,0,Verse,1970s\r\nAndy Gibb,Shadow Dancing,0.0,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 1.mp3,0,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,22.937,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 2.mp3,0,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,40.874,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 3.mp3,0,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,60.795,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Intro.mp3,0,Intro,1970s\r\nAndy Gibb,Shadow Dancing,78.656,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Outro.mp3,0,Outro,1970s\r\nAndy Gibb,Shadow Dancing,101.246,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 1.mp3,0,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,119.121,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 2.mp3,0,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,139.228,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 3.mp3,0,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,157.201,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Solo.mp3,0,Solo,1970s\r\nAndy Gibb,Shadow Dancing,179.222,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Verse - 1.mp3,0,Verse,1970s\r\nAndy Gibb,Shadow Dancing,197.915,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Verse - 2.mp3,0,Verse,1970s\r\nAshanti,Foolish,0.0,45.0,ThatsMySong/2002 - Ashanti - Foolish - Bridge.mp3,0,Bridge,2000s\r\nAshanti,Foolish,9.894,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 1.mp3,0,Chorus,2000s\r\nAshanti,Foolish,32.373,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 2.mp3,0,Chorus,2000s\r\nAshanti,Foolish,53.16,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 3.mp3,0,Chorus,2000s\r\nAshanti,Foolish,74.966,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 4.mp3,0,Chorus,2000s\r\nAshanti,Foolish,95.774,45.0,ThatsMySong/2002 - Ashanti - Foolish - Intro.mp3,0,Intro,2000s\r\nAshanti,Foolish,118.666,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 1.mp3,0,Verse,2000s\r\nAshanti,Foolish,138.454,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 2.mp3,0,Verse,2000s\r\nAshanti,Foolish,160.564,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 3.mp3,0,Verse,2000s\r\nBarbra Streisand,The Way We Were,0.0,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Bridge.mp3,0,Bridge,1970s\r\nBarbra Streisand,The Way We Were,33.517,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Intro.mp3,0,Intro,1970s\r\nBarbra Streisand,The Way We Were,61.419,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 1.mp3,0,Verse,1970s\r\nBarbra Streisand,The Way We Were,89.332,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 2.mp3,0,Verse,1970s\r\nBarbra Streisand,The Way We Were,119.82,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 3.mp3,0,Verse,1970s\r\nBarbra Streisand,The Way We Were,146.561,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 4.mp3,0,Verse,1970s\r\nBlondie,Call Me,0.0,45.0,ThatsMySong/1980 - Blondie - Call Me - Bridge.mp3,0,Bridge,1980s\r\nBlondie,Call Me,15.467,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 1.mp3,0,Chorus,1980s\r\nBlondie,Call Me,35.249,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 2.mp3,0,Chorus,1980s\r\nBlondie,Call Me,55.928,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 3.mp3,0,Chorus,1980s\r\nBlondie,Call Me,77.328,45.0,ThatsMySong/1980 - Blondie - Call Me - Intro.mp3,0,Intro,1980s\r\nBlondie,Call Me,98.023,45.0,ThatsMySong/1980 - Blondie - Call Me - Solo.mp3,0,Solo,1980s\r\nBlondie,Call Me,130.911,45.0,ThatsMySong/1980 - Blondie - Call Me - Verse - 1.mp3,0,Verse,1980s\r\nBlondie,Call Me,163.287,45.0,ThatsMySong/1980 - Blondie - Call Me - Verse - 2.mp3,0,Verse,1980s\r\nBobby Lewis,Tossin’ and Turnin’,0.0,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 1.mp3,0,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,10.263,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 2.mp3,0,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,20.459,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 3.mp3,0,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,30.365,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Other - 1.mp3,0,Other,1960s\r\nBobby Lewis,Tossin’ and Turnin’,40.594,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Other - 2.mp3,0,Other,1960s\r\nBobby Lewis,Tossin’ and Turnin’,57.203,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Solo.mp3,0,Solo,1960s\r\nBobby Lewis,Tossin’ and Turnin’,66.985,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 1.mp3,0,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,77.215,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 2.mp3,0,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,92.312,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 3.mp3,0,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,107.551,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 4.mp3,0,Verse,1960s\r\nBoyz II Men,End of the Road,0.0,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Bridge.mp3,0,Bridge,1990s\r\nBoyz II Men,End of the Road,21.351,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 1.mp3,0,Chorus,1990s\r\nBoyz II Men,End of the Road,57.915,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 2.mp3,0,Chorus,1990s\r\nBoyz II Men,End of the Road,77.131,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 3.mp3,0,Chorus,1990s\r\nBoyz II Men,End of the Road,117.164,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Intro.mp3,0,Intro,1990s\r\nBoyz II Men,End of the Road,154.728,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 1.mp3,0,Prechorus,1990s\r\nBoyz II Men,End of the Road,173.21,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 2.mp3,0,Prechorus,1990s\r\nBoyz II Men,End of the Road,214.044,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 3.mp3,0,Prechorus,1990s\r\nBoyz II Men,End of the Road,260.75,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Verse - 1.mp3,0,Verse,1990s\r\nBoyz II Men,End of the Road,269.023,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Verse - 2.mp3,0,Verse,1990s\r\nBrandy and Monica,The Boy Is Mine,0.0,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Bridge.mp3,0,Bridge,1990s\r\nBrandy and Monica,The Boy Is Mine,45.401,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 1.mp3,0,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,66.134,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 2.mp3,0,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,108.107,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 3.mp3,0,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,128.083,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 4.mp3,0,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,169.662,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 5.mp3,0,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,189.918,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Intro.mp3,0,Intro,1990s\r\nBrandy and Monica,The Boy Is Mine,210.484,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Verse - 1.mp3,0,Verse,1990s\r\nBrandy and Monica,The Boy Is Mine,231.217,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Verse - 2.mp3,0,Verse,1990s\r\nBrenda Lee,I'm Sorry,0.0,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Intro.mp3,0,Intro,1960s\r\nBrenda Lee,I'm Sorry,14.747,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 1.mp3,0,Verse,1960s\r\nBrenda Lee,I'm Sorry,42.478,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 2.mp3,0,Verse,1960s\r\nBrenda Lee,I'm Sorry,70.501,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 3.mp3,0,Verse,1960s\r\nBrenda Lee,I'm Sorry,98.754,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 4.mp3,0,Verse,1960s\r\nBryan Adams,(Everything I Do) I Do It for You,0.0,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Bridge.mp3,0,Bridge,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,14.622,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 1.mp3,0,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,43.482,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 2.mp3,0,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,73.203,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 3.mp3,0,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,101.968,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Intro.mp3,0,Intro,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,130.542,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Solo.mp3,0,Solo,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,162.557,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Verse - 1.mp3,0,Verse,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,191.991,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Verse - 2.mp3,0,Verse,1990s\r\nCarly Simon,You're So Vain,0.0,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Bridge.mp3,0,Bridge,1970s\r\nCarly Simon,You're So Vain,18.072,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 1.mp3,0,Chorus,1970s\r\nCarly Simon,You're So Vain,52.088,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 2.mp3,0,Chorus,1970s\r\nCarly Simon,You're So Vain,69.537,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 3.mp3,0,Chorus,1970s\r\nCarly Simon,You're So Vain,103.3,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 4.mp3,0,Chorus,1970s\r\nCarly Simon,You're So Vain,121.418,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Intro.mp3,0,Intro,1970s\r\nCarly Simon,You're So Vain,147.073,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Solo.mp3,0,Solo,1970s\r\nCarly Simon,You're So Vain,154.317,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 1.mp3,0,Verse,1970s\r\nCarly Simon,You're So Vain,171.481,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 2.mp3,0,Verse,1970s\r\nCarly Simon,You're So Vain,205.237,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 3.mp3,0,Verse,1970s\r\nChic,Le Freak,0.0,45.0,ThatsMySong/1978 - Chic - Le Freak - Bridge.mp3,0,Bridge,1970s\r\nChic,Le Freak,35.132,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 1.mp3,0,Chorus,1970s\r\nChic,Le Freak,66.714,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 2.mp3,0,Chorus,1970s\r\nChic,Le Freak,100.133,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 3.mp3,0,Chorus,1970s\r\nChic,Le Freak,131.619,45.0,ThatsMySong/1978 - Chic - Le Freak - Outro.mp3,0,Outro,1970s\r\nChic,Le Freak,164.707,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 1.mp3,0,Verse,1970s\r\nChic,Le Freak,229.68,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 2.mp3,0,Verse,1970s\r\nChic,Le Freak,261.127,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 3.mp3,0,Verse,1970s\r\nChubby Checker,The Twist,0.0,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Bridge - 1.mp3,0,Bridge,1960s\r\nChubby Checker,The Twist,5.861,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Bridge - 2.mp3,0,Bridge,1960s\r\nChubby Checker,The Twist,22.519,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Intro.mp3,0,Intro,1960s\r\nChubby Checker,The Twist,42.033,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Solo.mp3,0,Solo,1960s\r\nChubby Checker,The Twist,60.1,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 1.mp3,0,Verse,1960s\r\nChubby Checker,The Twist,82.404,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 2.mp3,0,Verse,1960s\r\nChubby Checker,The Twist,96.64,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 3.mp3,0,Verse,1960s\r\nCoolio,Gangsta's Paradise,0.0,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 1.mp3,0,Chorus,1990s\r\nCoolio,Gangsta's Paradise,12.051,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 2.mp3,0,Chorus,1990s\r\nCoolio,Gangsta's Paradise,48.529,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 3.mp3,0,Chorus,1990s\r\nCoolio,Gangsta's Paradise,72.263,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Intro.mp3,0,Intro,1990s\r\nCoolio,Gangsta's Paradise,107.794,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Outro.mp3,0,Outro,1990s\r\nCoolio,Gangsta's Paradise,120.561,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Prechorus.mp3,0,Prechorus,1990s\r\nCoolio,Gangsta's Paradise,144.571,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 1.mp3,0,Verse,1990s\r\nCoolio,Gangsta's Paradise,168.559,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 2.mp3,0,Verse,1990s\r\nCoolio,Gangsta's Paradise,191.854,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 3.mp3,0,Verse,1990s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,0.0,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Bridge.mp3,0,Bridge,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,11.252,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Chorus - 1.mp3,0,Chorus,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,38.612,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Chorus - 2.mp3,0,Chorus,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,72.141,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Intro.mp3,0,Intro,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,98.98,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Solo.mp3,0,Solo,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,127.611,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Verse - 1.mp3,0,Verse,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,148.053,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Verse - 2.mp3,0,Verse,1970s\r\nDebby Boone,You Light Up My Life,0.0,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Chorus - 1.mp3,0,Chorus,1970s\r\nDebby Boone,You Light Up My Life,4.567,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Chorus - 2.mp3,0,Chorus,1970s\r\nDebby Boone,You Light Up My Life,41.72,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Intro.mp3,0,Intro,1970s\r\nDebby Boone,You Light Up My Life,74.569,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Verse - 1.mp3,0,Verse,1970s\r\nDebby Boone,You Light Up My Life,112.149,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Verse - 2.mp3,0,Verse,1970s\r\nDiana Ross,Upside Down,0.0,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 1.mp3,0,Chorus,1980s\r\nDiana Ross,Upside Down,9.809,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 2.mp3,0,Chorus,1980s\r\nDiana Ross,Upside Down,19.149,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 3.mp3,0,Chorus,1980s\r\nDiana Ross,Upside Down,37.804,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 4.mp3,0,Chorus,1980s\r\nDiana Ross,Upside Down,54.608,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Intro.mp3,0,Intro,1980s\r\nDiana Ross,Upside Down,73.238,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Outro.mp3,0,Outro,1980s\r\nDiana Ross,Upside Down,89.919,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Postchorus.mp3,0,Postchorus,1980s\r\nDiana Ross,Upside Down,108.562,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Prechorus.mp3,0,Prechorus,1980s\r\nDiana Ross,Upside Down,125.255,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 1.mp3,0,Verse,1980s\r\nDiana Ross,Upside Down,160.788,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 2.mp3,0,Verse,1980s\r\nDiana Ross,Upside Down,200.467,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 3.mp3,0,Verse,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,0.0,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 1.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,54.235,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 2.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,93.147,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 3.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,126.108,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 4.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,160.041,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Verse - 1.mp3\",0,Verse,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,193.956,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Verse - 2.mp3\",0,Verse,1980s\r\nDonna Summer,Hot Stuff,0.0,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Bridge.mp3,0,Bridge,1970s\r\nDonna Summer,Hot Stuff,32.222,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 1.mp3,0,Chorus,1970s\r\nDonna Summer,Hot Stuff,47.193,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 2.mp3,0,Chorus,1970s\r\nDonna Summer,Hot Stuff,79.953,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 3.mp3,0,Chorus,1970s\r\nDonna Summer,Hot Stuff,96.049,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 4.mp3,0,Chorus,1970s\r\nDonna Summer,Hot Stuff,110.973,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Intro.mp3,0,Intro,1970s\r\nDonna Summer,Hot Stuff,144.888,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 1.mp3,0,Solo,1970s\r\nDonna Summer,Hot Stuff,175.796,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 2.mp3,0,Solo,1970s\r\nDonna Summer,Hot Stuff,190.673,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 3.mp3,0,Solo,1970s\r\nDonna Summer,Hot Stuff,223.464,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 1.mp3,0,Verse,1970s\r\nDonna Summer,Hot Stuff,239.417,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 2.mp3,0,Verse,1970s\r\nDonna Summer,Hot Stuff,254.484,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 3.mp3,0,Verse,1970s\r\nElvis Presley,Are You Lonesome Tonight,0.0,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Intro.mp3,0,Intro,1960s\r\nElvis Presley,Are You Lonesome Tonight,9.803,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Other.mp3,0,Other,1960s\r\nElvis Presley,Are You Lonesome Tonight,47.341,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Verse - 1.mp3,0,Verse,1960s\r\nElvis Presley,Are You Lonesome Tonight,85.729,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Verse - 2.mp3,0,Verse,1960s\r\nElvis Presley,It’s Now Or Never,0.0,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Chorus - 1.mp3,0,Chorus,1960s\r\nElvis Presley,It’s Now Or Never,11.327,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Chorus - 2.mp3,0,Chorus,1960s\r\nElvis Presley,It’s Now Or Never,42.593,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Intro.mp3,0,Intro,1960s\r\nElvis Presley,It’s Now Or Never,72.758,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Verse - 1.mp3,0,Verse,1960s\r\nElvis Presley,It’s Now Or Never,103.55,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Verse - 2.mp3,0,Verse,1960s\r\nFergie,Big Girls Don't Cry,0.0,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Bridge.mp3,0,Bridge,2000s\r\nFergie,Big Girls Don't Cry,8.961,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 1.mp3,0,Chorus,2000s\r\nFergie,Big Girls Don't Cry,45.012,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 2.mp3,0,Chorus,2000s\r\nFergie,Big Girls Don't Cry,87.463,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 3.mp3,0,Chorus,2000s\r\nFergie,Big Girls Don't Cry,121.414,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Intro.mp3,0,Intro,2000s\r\nFergie,Big Girls Don't Cry,155.852,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Verse - 1.mp3,0,Verse,2000s\r\nFergie,Big Girls Don't Cry,210.491,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Verse - 2.mp3,0,Verse,2000s\r\nGloria Gaynor,I Will Survive,0.0,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Chorus - 1.mp3,0,Chorus,1970s\r\nGloria Gaynor,I Will Survive,22.355,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Chorus - 2.mp3,0,Chorus,1970s\r\nGloria Gaynor,I Will Survive,38.893,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Intro.mp3,0,Intro,1970s\r\nGloria Gaynor,I Will Survive,55.447,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Prechorus - 1.mp3,0,Prechorus,1970s\r\nGloria Gaynor,I Will Survive,73.063,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Prechorus - 2.mp3,0,Prechorus,1970s\r\nGloria Gaynor,I Will Survive,121.68,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Solo.mp3,0,Solo,1970s\r\nGloria Gaynor,I Will Survive,138.263,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Verse - 1.mp3,0,Verse,1970s\r\nGloria Gaynor,I Will Survive,148.809,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Verse - 2.mp3,0,Verse,1970s\r\nIrene Cara,Flashdance...What a Feeling,0.0,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Bridge.mp3,0,Bridge,1980s\r\nIrene Cara,Flashdance...What a Feeling,53.991,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 1.mp3,0,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,69.642,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 2.mp3,0,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,101.952,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 3.mp3,0,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,116.558,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Intro.mp3,0,Intro,1980s\r\nIrene Cara,Flashdance...What a Feeling,132.557,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Solo.mp3,0,Solo,1980s\r\nIrene Cara,Flashdance...What a Feeling,163.858,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Verse - 1.mp3,0,Verse,1980s\r\nIrene Cara,Flashdance...What a Feeling,179.533,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Verse - 2.mp3,0,Verse,1980s\r\nJimmy Dean,Big Bad John,0.0,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 1.mp3,0,Chorus,1960s\r\nJimmy Dean,Big Bad John,5.66,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 2.mp3,0,Chorus,1960s\r\nJimmy Dean,Big Bad John,19.033,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 3.mp3,0,Chorus,1960s\r\nJimmy Dean,Big Bad John,30.353,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 4.mp3,0,Chorus,1960s\r\nJimmy Dean,Big Bad John,44.046,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Intro.mp3,0,Intro,1960s\r\nJimmy Dean,Big Bad John,57.853,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 1.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,68.83,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 2.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,82.614,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 3.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,96.239,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 4.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,107.53,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 5.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,121.411,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 6.mp3,0,Verse,1960s\r\nJimmy Dean,Big Bad John,135.287,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 7.mp3,0,Verse,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,0.0,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Chorus - 1.mp3,0,Chorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,9.621,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Chorus - 2.mp3,0,Chorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,21.933,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Intro.mp3,0,Intro,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,33.12,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Prechorus - 1.mp3,0,Prechorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,40.297,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Prechorus - 2.mp3,0,Prechorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,54.626,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Verse - 1.mp3,0,Verse,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,65.8,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Verse - 2.mp3,0,Verse,1960s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,0.0,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Chorus - 1.mp3,0,Chorus,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,15.456,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Chorus - 2.mp3,0,Chorus,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,42.25,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Intro.mp3,0,Intro,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,56.615,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Outro.mp3,0,Outro,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,83.654,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Solo.mp3,0,Solo,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,94.217,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 1.mp3,0,Verse,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,108.018,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 2.mp3,0,Verse,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,124.284,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 3.mp3,0,Verse,1980s\r\nKenny Rogers,Lady,0.0,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Chorus - 1.mp3,0,Chorus,1980s\r\nKenny Rogers,Lady,8.698,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Chorus - 2.mp3,0,Chorus,1980s\r\nKenny Rogers,Lady,54.038,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Intro.mp3,0,Intro,1980s\r\nKenny Rogers,Lady,86.766,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 1.mp3,0,Verse,1980s\r\nKenny Rogers,Lady,131.849,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 2.mp3,0,Verse,1980s\r\nKenny Rogers,Lady,164.718,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 3.mp3,0,Verse,1980s\r\nLeona Lewis,Bleeding Love,0.0,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Bridge.mp3,0,Bridge,2000s\r\nLeona Lewis,Bleeding Love,18.823,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 1.mp3,0,Chorus,2000s\r\nLeona Lewis,Bleeding Love,55.767,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 2.mp3,0,Chorus,2000s\r\nLeona Lewis,Bleeding Love,74.54,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 3.mp3,0,Chorus,2000s\r\nLeona Lewis,Bleeding Love,97.693,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Intro.mp3,0,Intro,2000s\r\nLeona Lewis,Bleeding Love,134.212,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 1.mp3,0,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,152.985,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 2.mp3,0,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,171.081,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 3.mp3,0,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,189.629,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Verse - 1.mp3,0,Verse,2000s\r\nLeona Lewis,Bleeding Love,207.901,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Verse - 2.mp3,0,Verse,2000s\r\nLionel Richie,All Night Long,0.0,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Bridge.mp3,0,Bridge,1980s\r\nLionel Richie,All Night Long,19.11,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 1.mp3,0,Chorus,1980s\r\nLionel Richie,All Night Long,43.976,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 2.mp3,0,Chorus,1980s\r\nLionel Richie,All Night Long,62.681,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 3.mp3,0,Chorus,1980s\r\nLionel Richie,All Night Long,81.947,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Intro.mp3,0,Intro,1980s\r\nLionel Richie,All Night Long,106.931,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Outro.mp3,0,Outro,1980s\r\nLionel Richie,All Night Long,116.695,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 1.mp3,0,Prechorus,1980s\r\nLionel Richie,All Night Long,134.525,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 2.mp3,0,Prechorus,1980s\r\nLionel Richie,All Night Long,161.911,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 3.mp3,0,Prechorus,1980s\r\nLionel Richie,All Night Long,170.708,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Solo.mp3,0,Solo,1980s\r\nLionel Richie,All Night Long,185.824,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 1.mp3,0,Verse,1980s\r\nLionel Richie,All Night Long,193.838,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 2.mp3,0,Verse,1980s\r\nLionel Richie,All Night Long,210.573,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 3.mp3,0,Verse,1980s\r\nLionel Richie,\"Say You, Say Me\",0.0,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Bridge.mp3\",0,Bridge,1980s\r\nLionel Richie,\"Say You, Say Me\",46.084,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 1.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",78.896,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 2.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",119.791,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 3.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",142.64,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 4.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",167.894,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Verse - 1.mp3\",0,Verse,1980s\r\nLionel Richie,\"Say You, Say Me\",196.209,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Verse - 2.mp3\",0,Verse,1980s\r\nLionel Richie and Diana Ross,Endless Love,0.0,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Bridge.mp3,0,Bridge,1980s\r\nLionel Richie and Diana Ross,Endless Love,5.184,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 1.mp3,0,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,35.829,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 2.mp3,0,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,87.263,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 3.mp3,0,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,118.225,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 4.mp3,0,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,163.187,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Intro.mp3,0,Intro,1980s\r\nLionel Richie and Diana Ross,Endless Love,187.919,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Verse - 1.mp3,0,Verse,1980s\r\nLionel Richie and Diana Ross,Endless Love,210.382,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Verse - 2.mp3,0,Verse,1980s\r\nLouis Armstrong,\"Hello, Dolly!\",0.0,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Intro.mp3\",0,Intro,1960s\r\nLouis Armstrong,\"Hello, Dolly!\",12.051,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Solo.mp3\",0,Solo,1960s\r\nLouis Armstrong,\"Hello, Dolly!\",60.911,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Verse.mp3\",0,Verse,1960s\r\nMariah Carey,We Belong Together,0.0,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Chorus - 1.mp3,0,Chorus,2000s\r\nMariah Carey,We Belong Together,21.448,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Chorus - 2.mp3,0,Chorus,2000s\r\nMariah Carey,We Belong Together,49.007,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Intro.mp3,0,Intro,2000s\r\nMariah Carey,We Belong Together,62.768,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Prechorus - 1.mp3,0,Prechorus,2000s\r\nMariah Carey,We Belong Together,89.751,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Prechorus - 2.mp3,0,Prechorus,2000s\r\nMariah Carey,We Belong Together,117.156,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Verse - 1.mp3,0,Verse,2000s\r\nMariah Carey,We Belong Together,131.301,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Verse - 2.mp3,0,Verse,2000s\r\nMario,Let Me Love You,0.0,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Bridge.mp3,0,Bridge,2000s\r\nMario,Let Me Love You,21.109,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 1.mp3,0,Chorus,2000s\r\nMario,Let Me Love You,40.971,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 2.mp3,0,Chorus,2000s\r\nMario,Let Me Love You,59.833,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 3.mp3,0,Chorus,2000s\r\nMario,Let Me Love You,92.329,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 4.mp3,0,Chorus,2000s\r\nMario,Let Me Love You,112.012,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Intro.mp3,0,Intro,2000s\r\nMario,Let Me Love You,131.077,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Prechorus - 1.mp3,0,Prechorus,2000s\r\nMario,Let Me Love You,153.803,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Prechorus - 2.mp3,0,Prechorus,2000s\r\nMario,Let Me Love You,171.489,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Verse - 1.mp3,0,Verse,2000s\r\nMario,Let Me Love You,191.315,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Verse - 2.mp3,0,Verse,2000s\r\nMarvin Gaye,I Heard It Through the Grapevine,0.0,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 1.mp3,0,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,20.487,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 2.mp3,0,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,44.71,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 3.mp3,0,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,69.657,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 4.mp3,0,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,94.182,44.1,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 5.mp3,0,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,112.56,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Intro.mp3,0,Intro,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,126.902,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Other - 1.mp3,0,Other,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,151.125,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Other - 2.mp3,0,Other,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,173.36,25.7,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Outro.mp3,0,Outro,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,200.235,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 1.mp3,0,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,218.734,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 2.mp3,0,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,233.075,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 3.mp3,0,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,257.419,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 4.mp3,0,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,275.798,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 5.mp3,0,Verse,1960s\r\nMarvin Gaye,Let's Get It On,0.0,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Bridge - 1.mp3,0,Bridge,1970s\r\nMarvin Gaye,Let's Get It On,24.264,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Bridge - 2.mp3,0,Bridge,1970s\r\nMarvin Gaye,Let's Get It On,49.199,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Chorus.mp3,0,Chorus,1970s\r\nMarvin Gaye,Let's Get It On,94.329,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 1.mp3,0,Verse,1970s\r\nMarvin Gaye,Let's Get It On,139.125,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 2.mp3,0,Verse,1970s\r\nMarvin Gaye,Let's Get It On,185.285,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 3.mp3,0,Verse,1970s\r\nMichael Jackson,Billie Jean,0.0,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Bridge.mp3,0,Bridge,1980s\r\nMichael Jackson,Billie Jean,29.134,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 1.mp3,0,Chorus,1980s\r\nMichael Jackson,Billie Jean,70.323,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 2.mp3,0,Chorus,1980s\r\nMichael Jackson,Billie Jean,86.693,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 3.mp3,0,Chorus,1980s\r\nMichael Jackson,Billie Jean,111.306,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Intro.mp3,0,Intro,1980s\r\nMichael Jackson,Billie Jean,152.303,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Prechorus - 1.mp3,0,Prechorus,1980s\r\nMichael Jackson,Billie Jean,168.717,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Prechorus - 2.mp3,0,Prechorus,1980s\r\nMichael Jackson,Billie Jean,209.641,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Solo.mp3,0,Solo,1980s\r\nMichael Jackson,Billie Jean,223.99,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Verse - 1.mp3,0,Verse,1980s\r\nMichael Jackson,Billie Jean,234.248,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Verse - 2.mp3,0,Verse,1980s\r\nOlivia Newton-John,Physical,0.0,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 1.mp3,0,Chorus,1980s\r\nOlivia Newton-John,Physical,16.169,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 2.mp3,0,Chorus,1980s\r\nOlivia Newton-John,Physical,46.15,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 3.mp3,0,Chorus,1980s\r\nOlivia Newton-John,Physical,78.437,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Intro.mp3,0,Intro,1980s\r\nOlivia Newton-John,Physical,108.186,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Solo.mp3,0,Solo,1980s\r\nOlivia Newton-John,Physical,140.115,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Verse - 1.mp3,0,Verse,1980s\r\nOlivia Newton-John,Physical,169.591,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Verse - 2.mp3,0,Verse,1980s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,0.0,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Bridge.mp3,0,Bridge,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,9.656,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 1.mp3,0,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,28.03,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 2.mp3,0,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,46.604,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 3.mp3,0,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,64.039,166.8,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Intro.mp3,0,Intro,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,84.558,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 1.mp3,0,Verse,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,103.066,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 2.mp3,0,Verse,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,120.031,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 3.mp3,0,Verse,1960s\r\nOutkast,Hey Ya!,0.0,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Bridge - 1.mp3,0,Bridge,2000s\r\nOutkast,Hey Ya!,34.11,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Bridge - 2.mp3,0,Bridge,2000s\r\nOutkast,Hey Ya!,67.715,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Chorus - 1.mp3,0,Chorus,2000s\r\nOutkast,Hey Ya!,100.35,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Chorus - 2.mp3,0,Chorus,2000s\r\nOutkast,Hey Ya!,133.567,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Verse - 1.mp3,0,Verse,2000s\r\nOutkast,Hey Ya!,167.313,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Verse - 2.mp3,0,Verse,2000s\r\nPaula Abdul,Rush Rush,0.0,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Bridge.mp3,0,Bridge,1990s\r\nPaula Abdul,Rush Rush,18.225,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 1.mp3,0,Chorus,1990s\r\nPaula Abdul,Rush Rush,46.932,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 2.mp3,0,Chorus,1990s\r\nPaula Abdul,Rush Rush,58.561,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 3.mp3,0,Chorus,1990s\r\nPaula Abdul,Rush Rush,80.615,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Intro.mp3,0,Intro,1990s\r\nPaula Abdul,Rush Rush,110.944,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 1.mp3,0,Prechorus,1990s\r\nPaula Abdul,Rush Rush,122.516,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 2.mp3,0,Prechorus,1990s\r\nPaula Abdul,Rush Rush,165.703,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 3.mp3,0,Prechorus,1990s\r\nPaula Abdul,Rush Rush,186.5,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Solo.mp3,0,Solo,1990s\r\nPaula Abdul,Rush Rush,207.185,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Verse - 1.mp3,0,Verse,1990s\r\nPaula Abdul,Rush Rush,218.701,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Verse - 2.mp3,0,Verse,1990s\r\nPaul Mauriat,Love Is Blue,0.0,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Chorus - 1.mp3,0,Chorus,1960s\r\nPaul Mauriat,Love Is Blue,13.913,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Chorus - 2.mp3,0,Chorus,1960s\r\nPaul Mauriat,Love Is Blue,53.991,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Intro.mp3,0,Intro,1960s\r\nPaul Mauriat,Love Is Blue,74.522,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 1.mp3,0,Verse,1960s\r\nPaul Mauriat,Love Is Blue,98.546,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 2.mp3,0,Verse,1960s\r\nPaul Mauriat,Love Is Blue,119.057,38.4,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 3.mp3,0,Verse,1960s\r\nPaul McCartney and Michael Jackson,Say Say Say,0.0,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Bridge.mp3,0,Bridge,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,16.686,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 1.mp3,0,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,33.113,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 2.mp3,0,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,57.694,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 3.mp3,0,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,73.79,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Intro.mp3,0,Intro,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,90.641,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Outro.mp3,0,Outro,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,107.091,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Postchorus.mp3,0,Postchorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,123.047,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 1.mp3,0,Verse,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,139.167,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 2.mp3,0,Verse,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,156.018,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 3.mp3,0,Verse,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,0.0,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Bridge.mp3,0,Bridge,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,6.822,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 1.mp3,0,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,33.615,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 2.mp3,0,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,60.384,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 3.mp3,0,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,81.157,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Intro.mp3,0,Intro,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,96.052,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Outro.mp3,0,Outro,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,107.921,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Solo.mp3,0,Solo,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,134.717,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Verse - 1.mp3,0,Verse,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,176.286,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Verse - 2.mp3,0,Verse,1980s\r\nPercy Faith,Theme from _A Summer Place_,0.0,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Bridge.mp3,0,Bridge,1960s\r\nPercy Faith,Theme from _A Summer Place_,7.834,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Intro.mp3,0,Intro,1960s\r\nPercy Faith,Theme from _A Summer Place_,23.298,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 1.mp3,0,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,46.539,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 2.mp3,0,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,60.401,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 3.mp3,0,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,89.437,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 4.mp3,0,Verse,1960s\r\nQueen,Another One Bites the Dust,0.0,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Bridge.mp3,0,Bridge,1980s\r\nQueen,Another One Bites the Dust,22.161,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Chorus - 1.mp3,0,Chorus,1980s\r\nQueen,Another One Bites the Dust,39.642,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Chorus - 2.mp3,0,Chorus,1980s\r\nQueen,Another One Bites the Dust,65.826,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Intro.mp3,0,Intro,1980s\r\nQueen,Another One Bites the Dust,83.296,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 1.mp3,0,Verse,1980s\r\nQueen,Another One Bites the Dust,101.284,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 2.mp3,0,Verse,1980s\r\nQueen,Another One Bites the Dust,157.49,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 3.mp3,0,Verse,1980s\r\nRay Charles,I Can't Stop Loving You,0.0,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 1.mp3,0,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,49.0,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 2.mp3,0,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,97.056,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 3.mp3,0,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,145.233,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Verse - 1.mp3,0,Verse,1960s\r\nRay Charles,I Can't Stop Loving You,193.146,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Verse - 2.mp3,0,Verse,1960s\r\nRoberta Flack,Killing Me Softly with His Song,0.0,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Bridge.mp3,0,Bridge,1970s\r\nRoberta Flack,Killing Me Softly with His Song,31.419,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 1.mp3,0,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,47.503,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 2.mp3,0,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,71.636,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 3.mp3,0,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,99.675,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 4.mp3,0,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,123.368,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 5.mp3,0,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,152.357,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Intro.mp3,0,Intro,1970s\r\nRoberta Flack,Killing Me Softly with His Song,174.856,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 1.mp3,0,Verse,1970s\r\nRoberta Flack,Killing Me Softly with His Song,202.174,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 2.mp3,0,Verse,1970s\r\nRoberta Flack,Killing Me Softly with His Song,229.182,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 3.mp3,0,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),0.0,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 1.mp3,0,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),17.741,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 2.mp3,0,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),44.352,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 3.mp3,0,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),65.67,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Intro.mp3,0,Intro,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),87.035,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Outro.mp3,0,Outro,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),108.282,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Solo.mp3,0,Solo,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),128.669,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 1.mp3,0,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),150.798,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 2.mp3,0,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),171.782,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 3.mp3,0,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),188.616,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 4.mp3,0,Verse,1970s\r\nSinéad O'Connor,Nothing Compares 2 U,0.0,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Bridge.mp3,0,Bridge,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,9.018,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Chorus - 1.mp3,0,Chorus,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,71.968,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Chorus - 2.mp3,0,Chorus,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,88.521,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Intro.mp3,0,Intro,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,151.946,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Outro.mp3,0,Outro,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,168.44,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Solo.mp3,0,Solo,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,200.3,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Verse - 1.mp3,0,Verse,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,232.518,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Verse - 2.mp3,0,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),0.0,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 1.mp3,0,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),30.218,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 2.mp3,0,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),58.585,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 3.mp3,0,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),90.078,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Intro.mp3,0,Intro,1990s\r\nStevie B,Because I Love You (The Postman Song),118.444,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Outro.mp3,0,Outro,1990s\r\nStevie B,Because I Love You (The Postman Song),149.821,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Solo.mp3,0,Solo,1990s\r\nStevie B,Because I Love You (The Postman Song),179.692,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 1.mp3,0,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),208.058,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 2.mp3,0,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),239.319,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 3.mp3,0,Verse,1990s\r\nSurvivor,Eye of the Tiger,0.0,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 1.mp3,0,Chorus,1980s\r\nSurvivor,Eye of the Tiger,49.347,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 2.mp3,0,Chorus,1980s\r\nSurvivor,Eye of the Tiger,83.866,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 3.mp3,0,Chorus,1980s\r\nSurvivor,Eye of the Tiger,123.59,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Intro.mp3,0,Intro,1980s\r\nSurvivor,Eye of the Tiger,167.706,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Outro.mp3,0,Outro,1980s\r\nSurvivor,Eye of the Tiger,192.824,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Verse.mp3,0,Verse,1980s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,16.686,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Bridge.mp3,0,Bridge,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,36.511,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Chorus - 1.mp3,0,Chorus,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,57.034,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Chorus - 2.mp3,0,Chorus,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,87.964,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Outro.mp3,0,Outro,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,108.065,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Solo.mp3,0,Solo,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,139.053,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Verse - 1.mp3,0,Verse,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,151.618,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Verse - 2.mp3,0,Verse,1960s\r\nThe Archies,\"Sugar, Sugar\",0.0,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Bridge.mp3\",0,Bridge,1960s\r\nThe Archies,\"Sugar, Sugar\",8.182,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Chorus - 1.mp3\",0,Chorus,1960s\r\nThe Archies,\"Sugar, Sugar\",39.616,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Chorus - 2.mp3\",0,Chorus,1960s\r\nThe Archies,\"Sugar, Sugar\",54.208,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Intro.mp3\",0,Intro,1960s\r\nThe Archies,\"Sugar, Sugar\",86.425,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Verse - 1.mp3\",0,Verse,1960s\r\nThe Archies,\"Sugar, Sugar\",102.074,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Verse - 2.mp3\",0,Verse,1960s\r\nThe Beatles,Hey Jude,0.0,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Bridge - 1.mp3,0,Bridge,1960s\r\nThe Beatles,Hey Jude,25.952,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Bridge - 2.mp3,0,Bridge,1960s\r\nThe Beatles,Hey Jude,52.641,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 1.mp3,0,Chorus,1960s\r\nThe Beatles,Hey Jude,92.236,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 2.mp3,0,Chorus,1960s\r\nThe Beatles,Hey Jude,118.979,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 3.mp3,0,Chorus,1960s\r\nThe Beatles,Hey Jude,158.638,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 4.mp3,0,Chorus,1960s\r\nThe Beatles,Hey Jude,187.765,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 1.mp3,0,Verse,1960s\r\nThe Beatles,Hey Jude,229.245,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 2.mp3,0,Verse,1960s\r\nThe Beatles,Hey Jude,294.554,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 3.mp3,0,Verse,1960s\r\nThe Beatles,Hey Jude,320.398,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 4.mp3,0,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,0.0,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 1.mp3,0,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,6.678,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 2.mp3,0,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,21.91,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 3.mp3,0,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,28.295,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Intro.mp3,0,Intro,1960s\r\nThe Beatles,I Want to Hold Your Hand,43.702,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Postchorus - 1.mp3,0,Postchorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,50.966,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Postchorus - 2.mp3,0,Postchorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,70.533,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 1.mp3,0,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,85.999,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 2.mp3,0,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,93.351,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 3.mp3,0,Verse,1960s\r\nThe Bee Gees,How Deep Is Your Love,0.0,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Bridge.mp3,0,Bridge,1970s\r\nThe Bee Gees,How Deep Is Your Love,17.355,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 1.mp3,0,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,35.641,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 2.mp3,0,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,48.535,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 3.mp3,0,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,73.93,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 4.mp3,0,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,90.574,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Intro.mp3,0,Intro,1970s\r\nThe Bee Gees,How Deep Is Your Love,103.443,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 1.mp3,0,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,128.409,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 2.mp3,0,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,145.556,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 3.mp3,0,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,158.253,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Verse - 1.mp3,0,Verse,1970s\r\nThe Bee Gees,How Deep Is Your Love,188.943,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Verse - 2.mp3,0,Verse,1970s\r\nThe Bee Gees,Night Fever,0.0,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 1.mp3,0,Chorus,1970s\r\nThe Bee Gees,Night Fever,18.893,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 2.mp3,0,Chorus,1970s\r\nThe Bee Gees,Night Fever,35.984,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 3.mp3,0,Chorus,1970s\r\nThe Bee Gees,Night Fever,49.657,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Intro.mp3,0,Intro,1970s\r\nThe Bee Gees,Night Fever,67.297,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Prechorus - 1.mp3,0,Prechorus,1970s\r\nThe Bee Gees,Night Fever,84.862,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Prechorus - 2.mp3,0,Prechorus,1970s\r\nThe Bee Gees,Night Fever,102.193,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 1.mp3,0,Verse,1970s\r\nThe Bee Gees,Night Fever,119.641,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 2.mp3,0,Verse,1970s\r\nThe Bee Gees,Night Fever,133.185,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 3.mp3,0,Verse,1970s\r\nThe Bee Gees,Night Fever,150.804,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 4.mp3,0,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,0.0,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 3.mp3,0,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,0.0,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Bridge.mp3,0,Bridge,1970s\r\nThe Bee Gees,Stayin' Alive,13.245,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 1.mp3,0,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,23.064,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 2.mp3,0,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,32.769,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 3.mp3,0,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,62.227,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Intro.mp3,0,Intro,1970s\r\nThe Bee Gees,Stayin' Alive,71.818,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Outro.mp3,0,Outro,1970s\r\nThe Bee Gees,Stayin' Alive,81.409,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 1.mp3,0,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,111.537,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 2.mp3,0,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,133.816,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 3.mp3,0,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,143.589,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 1.mp3,0,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,153.255,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 2.mp3,0,Verse,1970s\r\nThe Black Eyed Peas,Boom Boom Pow,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 4.mp3,0,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Bridge.mp3,0,Bridge,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,15.068,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chorus - 1.mp3,0,Chorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,28.744,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chorus - 2.mp3,0,Chorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,43.944,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chrous - 3.mp3,0,Chrous,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,59.425,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Intro.mp3,0,Intro,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,73.467,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Outro.mp3,0,Outro,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,88.727,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Prechorus - 1.mp3,0,Prechorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,103.723,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Prechorus - 2.mp3,0,Prechorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,133.259,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 1.mp3,0,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,163.25,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 2.mp3,0,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,199.672,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 3.mp3,0,Verse,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Bridge.mp3,0,Bridge,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,28.989,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Chorus - 1.mp3,0,Chorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,90.013,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Chorus - 2.mp3,0,Chorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,104.986,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Intro.mp3,0,Intro,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,119.977,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Other - 1.mp3,0,Other,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,148.589,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Other - 2.mp3,0,Other,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,180.196,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Postchorus - 1.mp3,0,Postchorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,194.99,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Postchorus - 2.mp3,0,Postchorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,224.997,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Verse - 1.mp3,0,Verse,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,239.954,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Verse - 2.mp3,0,Verse,2000s\r\nThe Emotions,Best of My Love,0.0,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 3.mp3,0,Verse,1970s\r\nThe Emotions,Best of My Love,0.0,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 1.mp3,0,Chorus,1970s\r\nThe Emotions,Best of My Love,12.906,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 2.mp3,0,Chorus,1970s\r\nThe Emotions,Best of My Love,45.88,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 3.mp3,0,Chorus,1970s\r\nThe Emotions,Best of My Love,63.162,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Intro.mp3,0,Intro,1970s\r\nThe Emotions,Best of My Love,79.406,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Prechorus.mp3,0,Prechorus,1970s\r\nThe Emotions,Best of My Love,100.301,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 1.mp3,0,Verse,1970s\r\nThe Emotions,Best of My Love,116.932,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 2.mp3,0,Verse,1970s\r\nThe Four Seasons,Big Girls Don't Cry,0.0,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 1.mp3,0,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,12.822,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 2.mp3,0,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,43.004,37.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 3.mp3,0,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,53.207,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Intro.mp3,0,Intro,1960s\r\nThe Four Seasons,Big Girls Don't Cry,71.829,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Other.mp3,0,Other,1960s\r\nThe Four Seasons,Big Girls Don't Cry,93.226,22.2,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Outro.mp3,0,Outro,1960s\r\nThe Four Seasons,Big Girls Don't Cry,109.011,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Verse - 1.mp3,0,Verse,1960s\r\nThe Four Seasons,Big Girls Don't Cry,123.806,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Verse - 2.mp3,0,Verse,1960s\r\nThe J. Geils Band,Centerfold,0.0,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Bridge - 1.mp3,0,Bridge,1980s\r\nThe J. Geils Band,Centerfold,0.0,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 3.mp3,0,Verse,1980s\r\nThe J. Geils Band,Centerfold,17.081,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Bridge - 2.mp3,0,Bridge,1980s\r\nThe J. Geils Band,Centerfold,33.64,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 1.mp3,0,Chorus,1980s\r\nThe J. Geils Band,Centerfold,42.017,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 2.mp3,0,Chorus,1980s\r\nThe J. Geils Band,Centerfold,59.012,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 3.mp3,0,Chorus,1980s\r\nThe J. Geils Band,Centerfold,75.473,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Intro.mp3,0,Intro,1980s\r\nThe J. Geils Band,Centerfold,83.981,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Outro.mp3,0,Outro,1980s\r\nThe J. Geils Band,Centerfold,101.029,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 1.mp3,0,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,116.935,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 2.mp3,0,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,134.462,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 3.mp3,0,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,159.763,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 1.mp3,0,Verse,1980s\r\nThe J. Geils Band,Centerfold,168.636,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 2.mp3,0,Verse,1980s\r\nThe Knack,My Sharona,0.0,45.0,ThatsMySong/1979 - The Knack - My Sharona - Bridge.mp3,0,Bridge,1970s\r\nThe Knack,My Sharona,18.916,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 1.mp3,0,Chorus,1970s\r\nThe Knack,My Sharona,32.51,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 2.mp3,0,Chorus,1970s\r\nThe Knack,My Sharona,49.088,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 3.mp3,0,Chorus,1970s\r\nThe Knack,My Sharona,62.239,45.0,ThatsMySong/1979 - The Knack - My Sharona - Intro.mp3,0,Intro,1970s\r\nThe Knack,My Sharona,78.67,45.0,ThatsMySong/1979 - The Knack - My Sharona - Outro.mp3,0,Outro,1970s\r\nThe Knack,My Sharona,117.126,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 1.mp3,0,Verse,1970s\r\nThe Knack,My Sharona,130.218,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 2.mp3,0,Verse,1970s\r\nThe Knack,My Sharona,159.244,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 3.mp3,0,Verse,1970s\r\nThe Monkees,I'm a Believer,0.0,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Bridge.mp3,0,Bridge,1960s\r\nThe Monkees,I'm a Believer,5.093,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 1.mp3,0,Chorus,1960s\r\nThe Monkees,I'm a Believer,27.602,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 2.mp3,0,Chorus,1960s\r\nThe Monkees,I'm a Believer,49.895,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 3.mp3,0,Chorus,1960s\r\nThe Monkees,I'm a Believer,72.479,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Intro.mp3,0,Intro,1960s\r\nThe Monkees,I'm a Believer,95.18,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Solo.mp3,0,Solo,1960s\r\nThe Monkees,I'm a Believer,106.181,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Verse - 1.mp3,0,Verse,1960s\r\nThe Monkees,I'm a Believer,117.897,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Verse - 2.mp3,0,Verse,1960s\r\nThe Police,Every Breath You Take,0.0,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Bridge.mp3,0,Bridge,1980s\r\nThe Police,Every Breath You Take,14.936,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Chorus - 1.mp3,0,Chorus,1980s\r\nThe Police,Every Breath You Take,47.633,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Chorus - 2.mp3,0,Chorus,1980s\r\nThe Police,Every Breath You Take,63.999,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Intro.mp3,0,Intro,1980s\r\nThe Police,Every Breath You Take,81.87,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Other.mp3,0,Other,1980s\r\nThe Police,Every Breath You Take,112.367,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Outro.mp3,0,Outro,1980s\r\nThe Police,Every Breath You Take,133.543,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 1.mp3,0,Verse,1980s\r\nThe Police,Every Breath You Take,149.899,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 2.mp3,0,Verse,1980s\r\nThe Police,Every Breath You Take,179.011,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 3.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,0.0,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Bridge - 1.mp3,0,Bridge,1980s\r\nThe Steve Miller Band,Abracadabra,16.237,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Bridge - 2.mp3,0,Bridge,1980s\r\nThe Steve Miller Band,Abracadabra,31.406,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 1.mp3,0,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,45.784,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 2.mp3,0,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,61.324,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 3.mp3,0,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,75.957,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Intro.mp3,0,Intro,1980s\r\nThe Steve Miller Band,Abracadabra,91.49,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Outro.mp3,0,Outro,1980s\r\nThe Steve Miller Band,Abracadabra,106.503,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Solo - 1.mp3,0,Solo,1980s\r\nThe Steve Miller Band,Abracadabra,121.052,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Solo - 2.mp3,0,Solo,1980s\r\nThe Steve Miller Band,Abracadabra,136.53,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 1.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,155.261,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 2.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,196.583,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 3.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,219.235,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 4.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,241.917,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 5.mp3,0,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,263.082,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 6.mp3,0,Verse,1980s\r\nTimbaland (feat. OneRepublic),Apologize,0.0,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Bridge.mp3,0,Bridge,2000s\r\nTimbaland (feat. OneRepublic),Apologize,15.802,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 1.mp3,0,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,48.818,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 2.mp3,0,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,73.227,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 3.mp3,0,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,105.608,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Intro.mp3,0,Intro,2000s\r\nTimbaland (feat. OneRepublic),Apologize,120.987,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Verse - 1.mp3,0,Verse,2000s\r\nTimbaland (feat. OneRepublic),Apologize,139.541,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Verse - 2.mp3,0,Verse,2000s\r\nWhitney Houston,I Will Always Love You,0.0,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 1.mp3,0,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,42.719,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 2.mp3,0,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,66.874,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 3.mp3,0,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,76.719,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Intro.mp3,0,Intro,1990s\r\nWhitney Houston,I Will Always Love You,105.599,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Postchorus.mp3,0,Postchorus,1990s\r\nWhitney Houston,I Will Always Love You,127.316,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Solo.mp3,0,Solo,1990s\r\nWhitney Houston,I Will Always Love You,155.252,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Verse - 1.mp3,0,Verse,1990s\r\nWhitney Houston,I Will Always Love You,188.059,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Verse - 2.mp3,0,Verse,1990s\r\nWild Cherry,Play That Funky Music,0.0,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Chorus.mp3,0,Chorus,1970s\r\nWild Cherry,Play That Funky Music,16.797,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Intro.mp3,0,Intro,1970s\r\nWild Cherry,Play That Funky Music,52.587,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Prechorus - 1.mp3,0,Prechorus,1970s\r\nWild Cherry,Play That Funky Music,62.15,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Prechorus - 2.mp3,0,Prechorus,1970s\r\nWild Cherry,Play That Funky Music,88.606,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Solo.mp3,0,Solo,1970s\r\nWild Cherry,Play That Funky Music,105.556,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Verse - 1.mp3,0,Verse,1970s\r\nWild Cherry,Play That Funky Music,200.239,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Verse - 2.mp3,0,Verse,1970s\r\nWings,Silly Love Songs,0.0,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 1.mp3,0,Bridge,1970s\r\nWings,Silly Love Songs,22.557,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 2.mp3,0,Bridge,1970s\r\nWings,Silly Love Songs,45.827,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 3.mp3,0,Bridge,1970s\r\nWings,Silly Love Songs,61.745,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Chorus - 1.mp3,0,Chorus,1970s\r\nWings,Silly Love Songs,92.529,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Chorus - 2.mp3,0,Chorus,1970s\r\nWings,Silly Love Songs,107.573,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Intro.mp3,0,Intro,1970s\r\nWings,Silly Love Songs,123.526,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Prechorus - 1.mp3,0,Prechorus,1970s\r\nWings,Silly Love Songs,139.016,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Prechorus - 2.mp3,0,Prechorus,1970s\r\nWings,Silly Love Songs,160.734,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Solo - 1.mp3,0,Solo,1970s\r\nWings,Silly Love Songs,190.982,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Solo - 2.mp3,0,Solo,1970s\r\nWings,Silly Love Songs,221.421,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Verse - 1.mp3,0,Verse,1970s\r\nWings,Silly Love Songs,251.929,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Verse - 2.mp3,0,Verse,1970s\r\n" + "csv": "Alicia Keys,No One,0.0,45.0,ThatsMySong/2007 - Alicia Keys - No One - Bridge.mp3,Bridge,2000s\r\nAlicia Keys,No One,10.721,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 1.mp3,Chorus,2000s\r\nAlicia Keys,No One,33.277,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 2.mp3,Chorus,2000s\r\nAlicia Keys,No One,53.603,45.0,ThatsMySong/2007 - Alicia Keys - No One - Chorus - 3.mp3,Chorus,2000s\r\nAlicia Keys,No One,86.444,45.0,ThatsMySong/2007 - Alicia Keys - No One - Intro.mp3,Intro,2000s\r\nAlicia Keys,No One,107.351,45.0,ThatsMySong/2007 - Alicia Keys - No One - Outro.mp3,Outro,2000s\r\nAlicia Keys,No One,128.647,45.0,ThatsMySong/2007 - Alicia Keys - No One - Prechorus - 1.mp3,Prechorus,2000s\r\nAlicia Keys,No One,159.742,45.0,ThatsMySong/2007 - Alicia Keys - No One - Prechorus - 2.mp3,Prechorus,2000s\r\nAlicia Keys,No One,183.075,45.0,ThatsMySong/2007 - Alicia Keys - No One - Verse - 1.mp3,Verse,2000s\r\nAlicia Keys,No One,203.982,45.0,ThatsMySong/2007 - Alicia Keys - No One - Verse - 2.mp3,Verse,2000s\r\nAndy Gibb,I Just Want to Be Your Everything,0.0,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Chorus - 1.mp3,Chorus,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,13.653,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Chorus - 2.mp3,Chorus,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,34.043,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Intro.mp3,Intro,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,53.521,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Solo.mp3,Solo,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,91.569,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 1.mp3,Verse,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,115.121,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 2.mp3,Verse,1970s\r\nAndy Gibb,I Just Want to Be Your Everything,136.375,45.0,ThatsMySong/1977 - Andy Gibb - I Just Want to Be Your Everything - Verse - 3.mp3,Verse,1970s\r\nAndy Gibb,Shadow Dancing,0.0,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 1.mp3,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,22.937,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 2.mp3,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,40.874,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Chorus - 3.mp3,Chorus,1970s\r\nAndy Gibb,Shadow Dancing,60.795,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Intro.mp3,Intro,1970s\r\nAndy Gibb,Shadow Dancing,78.656,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Outro.mp3,Outro,1970s\r\nAndy Gibb,Shadow Dancing,101.246,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 1.mp3,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,119.121,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 2.mp3,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,139.228,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Prechorus - 3.mp3,Prechorus,1970s\r\nAndy Gibb,Shadow Dancing,157.201,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Solo.mp3,Solo,1970s\r\nAndy Gibb,Shadow Dancing,179.222,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Verse - 1.mp3,Verse,1970s\r\nAndy Gibb,Shadow Dancing,197.915,45.0,ThatsMySong/1978 - Andy Gibb - Shadow Dancing - Verse - 2.mp3,Verse,1970s\r\nAshanti,Foolish,0.0,45.0,ThatsMySong/2002 - Ashanti - Foolish - Bridge.mp3,Bridge,2000s\r\nAshanti,Foolish,9.894,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 1.mp3,Chorus,2000s\r\nAshanti,Foolish,32.373,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 2.mp3,Chorus,2000s\r\nAshanti,Foolish,53.16,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 3.mp3,Chorus,2000s\r\nAshanti,Foolish,74.966,45.0,ThatsMySong/2002 - Ashanti - Foolish - Chorus - 4.mp3,Chorus,2000s\r\nAshanti,Foolish,95.774,45.0,ThatsMySong/2002 - Ashanti - Foolish - Intro.mp3,Intro,2000s\r\nAshanti,Foolish,118.666,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 1.mp3,Verse,2000s\r\nAshanti,Foolish,138.454,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 2.mp3,Verse,2000s\r\nAshanti,Foolish,160.564,45.0,ThatsMySong/2002 - Ashanti - Foolish - Verse - 3.mp3,Verse,2000s\r\nBarbra Streisand,The Way We Were,0.0,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Bridge.mp3,Bridge,1970s\r\nBarbra Streisand,The Way We Were,33.517,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Intro.mp3,Intro,1970s\r\nBarbra Streisand,The Way We Were,61.419,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 1.mp3,Verse,1970s\r\nBarbra Streisand,The Way We Were,89.332,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 2.mp3,Verse,1970s\r\nBarbra Streisand,The Way We Were,119.82,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 3.mp3,Verse,1970s\r\nBarbra Streisand,The Way We Were,146.561,45.0,ThatsMySong/1973 - Barbra Streisand - The Way We Were - Verse - 4.mp3,Verse,1970s\r\nBlondie,Call Me,0.0,45.0,ThatsMySong/1980 - Blondie - Call Me - Bridge.mp3,Bridge,1980s\r\nBlondie,Call Me,15.467,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 1.mp3,Chorus,1980s\r\nBlondie,Call Me,35.249,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 2.mp3,Chorus,1980s\r\nBlondie,Call Me,55.928,45.0,ThatsMySong/1980 - Blondie - Call Me - Chorus - 3.mp3,Chorus,1980s\r\nBlondie,Call Me,77.328,45.0,ThatsMySong/1980 - Blondie - Call Me - Intro.mp3,Intro,1980s\r\nBlondie,Call Me,98.023,45.0,ThatsMySong/1980 - Blondie - Call Me - Solo.mp3,Solo,1980s\r\nBlondie,Call Me,130.911,45.0,ThatsMySong/1980 - Blondie - Call Me - Verse - 1.mp3,Verse,1980s\r\nBlondie,Call Me,163.287,45.0,ThatsMySong/1980 - Blondie - Call Me - Verse - 2.mp3,Verse,1980s\r\nBobby Lewis,Tossin’ and Turnin’,0.0,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 1.mp3,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,10.263,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 2.mp3,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,20.459,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Chorus - 3.mp3,Chorus,1960s\r\nBobby Lewis,Tossin’ and Turnin’,30.365,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Other - 1.mp3,Other,1960s\r\nBobby Lewis,Tossin’ and Turnin’,40.594,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Other - 2.mp3,Other,1960s\r\nBobby Lewis,Tossin’ and Turnin’,57.203,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Solo.mp3,Solo,1960s\r\nBobby Lewis,Tossin’ and Turnin’,66.985,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 1.mp3,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,77.215,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 2.mp3,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,92.312,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 3.mp3,Verse,1960s\r\nBobby Lewis,Tossin’ and Turnin’,107.551,45.0,ThatsMySong/1961 - Bobby Lewis - Tossin’ and Turnin’ - Verse - 4.mp3,Verse,1960s\r\nBoyz II Men,End of the Road,0.0,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Bridge.mp3,Bridge,1990s\r\nBoyz II Men,End of the Road,21.351,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 1.mp3,Chorus,1990s\r\nBoyz II Men,End of the Road,57.915,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 2.mp3,Chorus,1990s\r\nBoyz II Men,End of the Road,77.131,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Chorus - 3.mp3,Chorus,1990s\r\nBoyz II Men,End of the Road,117.164,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Intro.mp3,Intro,1990s\r\nBoyz II Men,End of the Road,154.728,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 1.mp3,Prechorus,1990s\r\nBoyz II Men,End of the Road,173.21,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 2.mp3,Prechorus,1990s\r\nBoyz II Men,End of the Road,214.044,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Prechorus - 3.mp3,Prechorus,1990s\r\nBoyz II Men,End of the Road,260.75,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Verse - 1.mp3,Verse,1990s\r\nBoyz II Men,End of the Road,269.023,45.0,ThatsMySong/1992 - Boyz II Men - End of the Road - Verse - 2.mp3,Verse,1990s\r\nBrandy and Monica,The Boy Is Mine,0.0,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Bridge.mp3,Bridge,1990s\r\nBrandy and Monica,The Boy Is Mine,45.401,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 1.mp3,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,66.134,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 2.mp3,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,108.107,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 3.mp3,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,128.083,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 4.mp3,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,169.662,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Chorus - 5.mp3,Chorus,1990s\r\nBrandy and Monica,The Boy Is Mine,189.918,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Intro.mp3,Intro,1990s\r\nBrandy and Monica,The Boy Is Mine,210.484,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Verse - 1.mp3,Verse,1990s\r\nBrandy and Monica,The Boy Is Mine,231.217,45.0,ThatsMySong/1998 - Brandy and Monica - The Boy Is Mine - Verse - 2.mp3,Verse,1990s\r\nBrenda Lee,I'm Sorry,0.0,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Intro.mp3,Intro,1960s\r\nBrenda Lee,I'm Sorry,14.747,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 1.mp3,Verse,1960s\r\nBrenda Lee,I'm Sorry,42.478,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 2.mp3,Verse,1960s\r\nBrenda Lee,I'm Sorry,70.501,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 3.mp3,Verse,1960s\r\nBrenda Lee,I'm Sorry,98.754,45.0,ThatsMySong/1960 - Brenda Lee - I'm Sorry - Verse - 4.mp3,Verse,1960s\r\nBryan Adams,(Everything I Do) I Do It for You,0.0,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Bridge.mp3,Bridge,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,14.622,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 1.mp3,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,43.482,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 2.mp3,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,73.203,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Chorus - 3.mp3,Chorus,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,101.968,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Intro.mp3,Intro,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,130.542,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Solo.mp3,Solo,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,162.557,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Verse - 1.mp3,Verse,1990s\r\nBryan Adams,(Everything I Do) I Do It for You,191.991,45.0,ThatsMySong/1991 - Bryan Adams - (Everything I Do) I Do It for You - Verse - 2.mp3,Verse,1990s\r\nCarly Simon,You're So Vain,0.0,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Bridge.mp3,Bridge,1970s\r\nCarly Simon,You're So Vain,18.072,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 1.mp3,Chorus,1970s\r\nCarly Simon,You're So Vain,52.088,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 2.mp3,Chorus,1970s\r\nCarly Simon,You're So Vain,69.537,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 3.mp3,Chorus,1970s\r\nCarly Simon,You're So Vain,103.3,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Chorus - 4.mp3,Chorus,1970s\r\nCarly Simon,You're So Vain,121.418,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Intro.mp3,Intro,1970s\r\nCarly Simon,You're So Vain,147.073,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Solo.mp3,Solo,1970s\r\nCarly Simon,You're So Vain,154.317,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 1.mp3,Verse,1970s\r\nCarly Simon,You're So Vain,171.481,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 2.mp3,Verse,1970s\r\nCarly Simon,You're So Vain,205.237,45.0,ThatsMySong/1972 - Carly Simon - You're So Vain - Verse - 3.mp3,Verse,1970s\r\nChic,Le Freak,0.0,45.0,ThatsMySong/1978 - Chic - Le Freak - Bridge.mp3,Bridge,1970s\r\nChic,Le Freak,35.132,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 1.mp3,Chorus,1970s\r\nChic,Le Freak,66.714,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 2.mp3,Chorus,1970s\r\nChic,Le Freak,100.133,45.0,ThatsMySong/1978 - Chic - Le Freak - Chorus - 3.mp3,Chorus,1970s\r\nChic,Le Freak,131.619,45.0,ThatsMySong/1978 - Chic - Le Freak - Outro.mp3,Outro,1970s\r\nChic,Le Freak,164.707,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 1.mp3,Verse,1970s\r\nChic,Le Freak,229.68,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 2.mp3,Verse,1970s\r\nChic,Le Freak,261.127,45.0,ThatsMySong/1978 - Chic - Le Freak - Verse - 3.mp3,Verse,1970s\r\nChubby Checker,The Twist,0.0,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Bridge - 1.mp3,Bridge,1960s\r\nChubby Checker,The Twist,5.861,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Bridge - 2.mp3,Bridge,1960s\r\nChubby Checker,The Twist,22.519,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Intro.mp3,Intro,1960s\r\nChubby Checker,The Twist,42.033,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Solo.mp3,Solo,1960s\r\nChubby Checker,The Twist,60.1,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 1.mp3,Verse,1960s\r\nChubby Checker,The Twist,82.404,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 2.mp3,Verse,1960s\r\nChubby Checker,The Twist,96.64,45.0,ThatsMySong/1960 - Chubby Checker - The Twist - Verse - 3.mp3,Verse,1960s\r\nCoolio,Gangsta's Paradise,0.0,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 1.mp3,Chorus,1990s\r\nCoolio,Gangsta's Paradise,12.051,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 2.mp3,Chorus,1990s\r\nCoolio,Gangsta's Paradise,48.529,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Chorus - 3.mp3,Chorus,1990s\r\nCoolio,Gangsta's Paradise,72.263,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Intro.mp3,Intro,1990s\r\nCoolio,Gangsta's Paradise,107.794,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Outro.mp3,Outro,1990s\r\nCoolio,Gangsta's Paradise,120.561,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Prechorus.mp3,Prechorus,1990s\r\nCoolio,Gangsta's Paradise,144.571,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 1.mp3,Verse,1990s\r\nCoolio,Gangsta's Paradise,168.559,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 2.mp3,Verse,1990s\r\nCoolio,Gangsta's Paradise,191.854,45.0,ThatsMySong/1995 - Coolio - Gangsta's Paradise - Verse - 3.mp3,Verse,1990s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,0.0,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Bridge.mp3,Bridge,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,11.252,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Chorus - 1.mp3,Chorus,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,38.612,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Chorus - 2.mp3,Chorus,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,72.141,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Intro.mp3,Intro,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,98.98,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Solo.mp3,Solo,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,127.611,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Verse - 1.mp3,Verse,1970s\r\nDawn (feat. Tony Orlando),Tie a Yellow Ribbon Round the Ole Oak Tree,148.053,45.0,ThatsMySong/1973 - Dawn (feat. Tony Orlando) - Tie a Yellow Ribbon Round the Ole Oak Tree - Verse - 2.mp3,Verse,1970s\r\nDebby Boone,You Light Up My Life,0.0,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Chorus - 1.mp3,Chorus,1970s\r\nDebby Boone,You Light Up My Life,4.567,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Chorus - 2.mp3,Chorus,1970s\r\nDebby Boone,You Light Up My Life,41.72,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Intro.mp3,Intro,1970s\r\nDebby Boone,You Light Up My Life,74.569,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Verse - 1.mp3,Verse,1970s\r\nDebby Boone,You Light Up My Life,112.149,45.0,ThatsMySong/1977 - Debby Boone - You Light Up My Life - Verse - 2.mp3,Verse,1970s\r\nDiana Ross,Upside Down,0.0,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 1.mp3,Chorus,1980s\r\nDiana Ross,Upside Down,9.809,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 2.mp3,Chorus,1980s\r\nDiana Ross,Upside Down,19.149,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 3.mp3,Chorus,1980s\r\nDiana Ross,Upside Down,37.804,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Chorus - 4.mp3,Chorus,1980s\r\nDiana Ross,Upside Down,54.608,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Intro.mp3,Intro,1980s\r\nDiana Ross,Upside Down,73.238,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Outro.mp3,Outro,1980s\r\nDiana Ross,Upside Down,89.919,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Postchorus.mp3,Postchorus,1980s\r\nDiana Ross,Upside Down,108.562,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Prechorus.mp3,Prechorus,1980s\r\nDiana Ross,Upside Down,125.255,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 1.mp3,Verse,1980s\r\nDiana Ross,Upside Down,160.788,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 2.mp3,Verse,1980s\r\nDiana Ross,Upside Down,200.467,45.0,ThatsMySong/1980 - Diana Ross - Upside Down - Verse - 3.mp3,Verse,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,0.0,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 1.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,54.235,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 2.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,93.147,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 3.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,126.108,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Chorus - 4.mp3\",0,Chorus,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,160.041,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Verse - 1.mp3\",0,Verse,1980s\r\n\"Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder)\",That's What Friends Are For,193.956,45.0,\"ThatsMySong/1985 - Dionne Warwick (feat. Elton John, Gladys Knight, and Stevie Wonder) - That's What Friends Are For - Verse - 2.mp3\",0,Verse,1980s\r\nDonna Summer,Hot Stuff,0.0,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Bridge.mp3,Bridge,1970s\r\nDonna Summer,Hot Stuff,32.222,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 1.mp3,Chorus,1970s\r\nDonna Summer,Hot Stuff,47.193,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 2.mp3,Chorus,1970s\r\nDonna Summer,Hot Stuff,79.953,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 3.mp3,Chorus,1970s\r\nDonna Summer,Hot Stuff,96.049,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Chorus - 4.mp3,Chorus,1970s\r\nDonna Summer,Hot Stuff,110.973,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Intro.mp3,Intro,1970s\r\nDonna Summer,Hot Stuff,144.888,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 1.mp3,Solo,1970s\r\nDonna Summer,Hot Stuff,175.796,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 2.mp3,Solo,1970s\r\nDonna Summer,Hot Stuff,190.673,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Solo - 3.mp3,Solo,1970s\r\nDonna Summer,Hot Stuff,223.464,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 1.mp3,Verse,1970s\r\nDonna Summer,Hot Stuff,239.417,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 2.mp3,Verse,1970s\r\nDonna Summer,Hot Stuff,254.484,45.0,ThatsMySong/1979 - Donna Summer - Hot Stuff - Verse - 3.mp3,Verse,1970s\r\nElvis Presley,Are You Lonesome Tonight,0.0,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Intro.mp3,Intro,1960s\r\nElvis Presley,Are You Lonesome Tonight,9.803,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Other.mp3,Other,1960s\r\nElvis Presley,Are You Lonesome Tonight,47.341,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Verse - 1.mp3,Verse,1960s\r\nElvis Presley,Are You Lonesome Tonight,85.729,45.0,ThatsMySong/1960 - Elvis Presley - Are You Lonesome Tonight - Verse - 2.mp3,Verse,1960s\r\nElvis Presley,It’s Now Or Never,0.0,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Chorus - 1.mp3,Chorus,1960s\r\nElvis Presley,It’s Now Or Never,11.327,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Chorus - 2.mp3,Chorus,1960s\r\nElvis Presley,It’s Now Or Never,42.593,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Intro.mp3,Intro,1960s\r\nElvis Presley,It’s Now Or Never,72.758,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Verse - 1.mp3,Verse,1960s\r\nElvis Presley,It’s Now Or Never,103.55,45.0,ThatsMySong/1960 - Elvis Presley - It’s Now Or Never - Verse - 2.mp3,Verse,1960s\r\nFergie,Big Girls Don't Cry,0.0,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Bridge.mp3,Bridge,2000s\r\nFergie,Big Girls Don't Cry,8.961,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 1.mp3,Chorus,2000s\r\nFergie,Big Girls Don't Cry,45.012,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 2.mp3,Chorus,2000s\r\nFergie,Big Girls Don't Cry,87.463,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Chorus - 3.mp3,Chorus,2000s\r\nFergie,Big Girls Don't Cry,121.414,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Intro.mp3,Intro,2000s\r\nFergie,Big Girls Don't Cry,155.852,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Verse - 1.mp3,Verse,2000s\r\nFergie,Big Girls Don't Cry,210.491,45.0,ThatsMySong/2007 - Fergie - Big Girls Don't Cry - Verse - 2.mp3,Verse,2000s\r\nGloria Gaynor,I Will Survive,0.0,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Chorus - 1.mp3,Chorus,1970s\r\nGloria Gaynor,I Will Survive,22.355,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Chorus - 2.mp3,Chorus,1970s\r\nGloria Gaynor,I Will Survive,38.893,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Intro.mp3,Intro,1970s\r\nGloria Gaynor,I Will Survive,55.447,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Prechorus - 1.mp3,Prechorus,1970s\r\nGloria Gaynor,I Will Survive,73.063,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Prechorus - 2.mp3,Prechorus,1970s\r\nGloria Gaynor,I Will Survive,121.68,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Solo.mp3,Solo,1970s\r\nGloria Gaynor,I Will Survive,138.263,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Verse - 1.mp3,Verse,1970s\r\nGloria Gaynor,I Will Survive,148.809,45.0,ThatsMySong/1978 - Gloria Gaynor - I Will Survive - Verse - 2.mp3,Verse,1970s\r\nIrene Cara,Flashdance...What a Feeling,0.0,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Bridge.mp3,Bridge,1980s\r\nIrene Cara,Flashdance...What a Feeling,53.991,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 1.mp3,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,69.642,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 2.mp3,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,101.952,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Chorus - 3.mp3,Chorus,1980s\r\nIrene Cara,Flashdance...What a Feeling,116.558,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Intro.mp3,Intro,1980s\r\nIrene Cara,Flashdance...What a Feeling,132.557,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Solo.mp3,Solo,1980s\r\nIrene Cara,Flashdance...What a Feeling,163.858,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Verse - 1.mp3,Verse,1980s\r\nIrene Cara,Flashdance...What a Feeling,179.533,45.0,ThatsMySong/1983 - Irene Cara - Flashdance...What a Feeling - Verse - 2.mp3,Verse,1980s\r\nJimmy Dean,Big Bad John,0.0,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 1.mp3,Chorus,1960s\r\nJimmy Dean,Big Bad John,5.66,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 2.mp3,Chorus,1960s\r\nJimmy Dean,Big Bad John,19.033,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 3.mp3,Chorus,1960s\r\nJimmy Dean,Big Bad John,30.353,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Chorus - 4.mp3,Chorus,1960s\r\nJimmy Dean,Big Bad John,44.046,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Intro.mp3,Intro,1960s\r\nJimmy Dean,Big Bad John,57.853,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 1.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,68.83,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 2.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,82.614,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 3.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,96.239,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 4.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,107.53,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 5.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,121.411,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 6.mp3,Verse,1960s\r\nJimmy Dean,Big Bad John,135.287,45.0,ThatsMySong/1961 - Jimmy Dean - Big Bad John - Verse - 7.mp3,Verse,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,0.0,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Chorus - 1.mp3,Chorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,9.621,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Chorus - 2.mp3,Chorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,21.933,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Intro.mp3,Intro,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,33.12,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Prechorus - 1.mp3,Prechorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,40.297,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Prechorus - 2.mp3,Prechorus,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,54.626,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Verse - 1.mp3,Verse,1960s\r\nJimmy Gilmer (feat. The Fireballs),Sugar Shack,65.8,45.0,ThatsMySong/1963 - Jimmy Gilmer (feat. The Fireballs) - Sugar Shack - Verse - 2.mp3,Verse,1960s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,0.0,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Chorus - 1.mp3,Chorus,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,15.456,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Chorus - 2.mp3,Chorus,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,42.25,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Intro.mp3,Intro,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,56.615,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Outro.mp3,Outro,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,83.654,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Solo.mp3,Solo,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,94.217,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 1.mp3,Verse,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,108.018,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 2.mp3,Verse,1980s\r\nJoan Jett and the Blackhearts,I Love Rock 'N Roll,124.284,45.0,ThatsMySong/1981 - Joan Jett and the Blackhearts - I Love Rock 'N Roll - Verse - 3.mp3,Verse,1980s\r\nKenny Rogers,Lady,0.0,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Chorus - 1.mp3,Chorus,1980s\r\nKenny Rogers,Lady,8.698,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Chorus - 2.mp3,Chorus,1980s\r\nKenny Rogers,Lady,54.038,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Intro.mp3,Intro,1980s\r\nKenny Rogers,Lady,86.766,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 1.mp3,Verse,1980s\r\nKenny Rogers,Lady,131.849,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 2.mp3,Verse,1980s\r\nKenny Rogers,Lady,164.718,45.0,ThatsMySong/1980 - Kenny Rogers - Lady - Verse - 3.mp3,Verse,1980s\r\nLeona Lewis,Bleeding Love,0.0,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Bridge.mp3,Bridge,2000s\r\nLeona Lewis,Bleeding Love,18.823,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 1.mp3,Chorus,2000s\r\nLeona Lewis,Bleeding Love,55.767,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 2.mp3,Chorus,2000s\r\nLeona Lewis,Bleeding Love,74.54,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Chorus - 3.mp3,Chorus,2000s\r\nLeona Lewis,Bleeding Love,97.693,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Intro.mp3,Intro,2000s\r\nLeona Lewis,Bleeding Love,134.212,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 1.mp3,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,152.985,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 2.mp3,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,171.081,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Prechorus - 3.mp3,Prechorus,2000s\r\nLeona Lewis,Bleeding Love,189.629,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Verse - 1.mp3,Verse,2000s\r\nLeona Lewis,Bleeding Love,207.901,45.0,ThatsMySong/2007 - Leona Lewis - Bleeding Love - Verse - 2.mp3,Verse,2000s\r\nLionel Richie,All Night Long,0.0,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Bridge.mp3,Bridge,1980s\r\nLionel Richie,All Night Long,19.11,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 1.mp3,Chorus,1980s\r\nLionel Richie,All Night Long,43.976,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 2.mp3,Chorus,1980s\r\nLionel Richie,All Night Long,62.681,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Chorus - 3.mp3,Chorus,1980s\r\nLionel Richie,All Night Long,81.947,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Intro.mp3,Intro,1980s\r\nLionel Richie,All Night Long,106.931,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Outro.mp3,Outro,1980s\r\nLionel Richie,All Night Long,116.695,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 1.mp3,Prechorus,1980s\r\nLionel Richie,All Night Long,134.525,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 2.mp3,Prechorus,1980s\r\nLionel Richie,All Night Long,161.911,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Prechorus - 3.mp3,Prechorus,1980s\r\nLionel Richie,All Night Long,170.708,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Solo.mp3,Solo,1980s\r\nLionel Richie,All Night Long,185.824,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 1.mp3,Verse,1980s\r\nLionel Richie,All Night Long,193.838,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 2.mp3,Verse,1980s\r\nLionel Richie,All Night Long,210.573,45.0,ThatsMySong/1983 - Lionel Richie - All Night Long - Verse - 3.mp3,Verse,1980s\r\nLionel Richie,\"Say You, Say Me\",0.0,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Bridge.mp3\",0,Bridge,1980s\r\nLionel Richie,\"Say You, Say Me\",46.084,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 1.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",78.896,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 2.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",119.791,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 3.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",142.64,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Chorus - 4.mp3\",0,Chorus,1980s\r\nLionel Richie,\"Say You, Say Me\",167.894,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Verse - 1.mp3\",0,Verse,1980s\r\nLionel Richie,\"Say You, Say Me\",196.209,45.0,\"ThatsMySong/1985 - Lionel Richie - Say You, Say Me - Verse - 2.mp3\",0,Verse,1980s\r\nLionel Richie and Diana Ross,Endless Love,0.0,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Bridge.mp3,Bridge,1980s\r\nLionel Richie and Diana Ross,Endless Love,5.184,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 1.mp3,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,35.829,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 2.mp3,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,87.263,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 3.mp3,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,118.225,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Chorus - 4.mp3,Chorus,1980s\r\nLionel Richie and Diana Ross,Endless Love,163.187,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Intro.mp3,Intro,1980s\r\nLionel Richie and Diana Ross,Endless Love,187.919,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Verse - 1.mp3,Verse,1980s\r\nLionel Richie and Diana Ross,Endless Love,210.382,45.0,ThatsMySong/1981 - Lionel Richie and Diana Ross - Endless Love - Verse - 2.mp3,Verse,1980s\r\nLouis Armstrong,\"Hello, Dolly!\",0.0,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Intro.mp3\",0,Intro,1960s\r\nLouis Armstrong,\"Hello, Dolly!\",12.051,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Solo.mp3\",0,Solo,1960s\r\nLouis Armstrong,\"Hello, Dolly!\",60.911,45.0,\"ThatsMySong/1964 - Louis Armstrong - Hello, Dolly! - Verse.mp3\",0,Verse,1960s\r\nMariah Carey,We Belong Together,0.0,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Chorus - 1.mp3,Chorus,2000s\r\nMariah Carey,We Belong Together,21.448,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Chorus - 2.mp3,Chorus,2000s\r\nMariah Carey,We Belong Together,49.007,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Intro.mp3,Intro,2000s\r\nMariah Carey,We Belong Together,62.768,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Prechorus - 1.mp3,Prechorus,2000s\r\nMariah Carey,We Belong Together,89.751,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Prechorus - 2.mp3,Prechorus,2000s\r\nMariah Carey,We Belong Together,117.156,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Verse - 1.mp3,Verse,2000s\r\nMariah Carey,We Belong Together,131.301,45.0,ThatsMySong/2005 - Mariah Carey - We Belong Together - Verse - 2.mp3,Verse,2000s\r\nMario,Let Me Love You,0.0,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Bridge.mp3,Bridge,2000s\r\nMario,Let Me Love You,21.109,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 1.mp3,Chorus,2000s\r\nMario,Let Me Love You,40.971,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 2.mp3,Chorus,2000s\r\nMario,Let Me Love You,59.833,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 3.mp3,Chorus,2000s\r\nMario,Let Me Love You,92.329,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Chorus - 4.mp3,Chorus,2000s\r\nMario,Let Me Love You,112.012,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Intro.mp3,Intro,2000s\r\nMario,Let Me Love You,131.077,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Prechorus - 1.mp3,Prechorus,2000s\r\nMario,Let Me Love You,153.803,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Prechorus - 2.mp3,Prechorus,2000s\r\nMario,Let Me Love You,171.489,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Verse - 1.mp3,Verse,2000s\r\nMario,Let Me Love You,191.315,45.0,ThatsMySong/2004 - Mario - Let Me Love You - Verse - 2.mp3,Verse,2000s\r\nMarvin Gaye,I Heard It Through the Grapevine,0.0,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 1.mp3,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,20.487,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 2.mp3,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,44.71,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 3.mp3,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,69.657,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 4.mp3,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,94.182,44.1,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Chorus - 5.mp3,Chorus,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,112.56,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Intro.mp3,Intro,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,126.902,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Other - 1.mp3,Other,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,151.125,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Other - 2.mp3,Other,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,173.36,25.7,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Outro.mp3,Outro,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,200.235,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 1.mp3,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,218.734,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 2.mp3,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,233.075,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 3.mp3,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,257.419,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 4.mp3,Verse,1960s\r\nMarvin Gaye,I Heard It Through the Grapevine,275.798,45.0,ThatsMySong/1968 - Marvin Gaye - I Heard It Through the Grapevine - Verse - 5.mp3,Verse,1960s\r\nMarvin Gaye,Let's Get It On,0.0,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Bridge - 1.mp3,Bridge,1970s\r\nMarvin Gaye,Let's Get It On,24.264,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Bridge - 2.mp3,Bridge,1970s\r\nMarvin Gaye,Let's Get It On,49.199,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Chorus.mp3,Chorus,1970s\r\nMarvin Gaye,Let's Get It On,94.329,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 1.mp3,Verse,1970s\r\nMarvin Gaye,Let's Get It On,139.125,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 2.mp3,Verse,1970s\r\nMarvin Gaye,Let's Get It On,185.285,45.0,ThatsMySong/1973 - Marvin Gaye - Let's Get It On - Verse - 3.mp3,Verse,1970s\r\nMichael Jackson,Billie Jean,0.0,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Bridge.mp3,Bridge,1980s\r\nMichael Jackson,Billie Jean,29.134,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 1.mp3,Chorus,1980s\r\nMichael Jackson,Billie Jean,70.323,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 2.mp3,Chorus,1980s\r\nMichael Jackson,Billie Jean,86.693,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Chorus - 3.mp3,Chorus,1980s\r\nMichael Jackson,Billie Jean,111.306,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Intro.mp3,Intro,1980s\r\nMichael Jackson,Billie Jean,152.303,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Prechorus - 1.mp3,Prechorus,1980s\r\nMichael Jackson,Billie Jean,168.717,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Prechorus - 2.mp3,Prechorus,1980s\r\nMichael Jackson,Billie Jean,209.641,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Solo.mp3,Solo,1980s\r\nMichael Jackson,Billie Jean,223.99,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Verse - 1.mp3,Verse,1980s\r\nMichael Jackson,Billie Jean,234.248,45.0,ThatsMySong/1983 - Michael Jackson - Billie Jean - Verse - 2.mp3,Verse,1980s\r\nOlivia Newton-John,Physical,0.0,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 1.mp3,Chorus,1980s\r\nOlivia Newton-John,Physical,16.169,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 2.mp3,Chorus,1980s\r\nOlivia Newton-John,Physical,46.15,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Chorus - 3.mp3,Chorus,1980s\r\nOlivia Newton-John,Physical,78.437,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Intro.mp3,Intro,1980s\r\nOlivia Newton-John,Physical,108.186,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Solo.mp3,Solo,1980s\r\nOlivia Newton-John,Physical,140.115,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Verse - 1.mp3,Verse,1980s\r\nOlivia Newton-John,Physical,169.591,45.0,ThatsMySong/1981 - Olivia Newton-John - Physical - Verse - 2.mp3,Verse,1980s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,0.0,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Bridge.mp3,Bridge,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,9.656,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 1.mp3,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,28.03,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 2.mp3,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,46.604,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Chorus - 3.mp3,Chorus,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,64.039,166.8,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Intro.mp3,Intro,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,84.558,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 1.mp3,Verse,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,103.066,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 2.mp3,Verse,1960s\r\nOtis Redding,(Sittin' On) The Dock of the Bay,120.031,45.0,ThatsMySong/1968 - Otis Redding - (Sittin' On) The Dock of the Bay - Verse - 3.mp3,Verse,1960s\r\nOutkast,Hey Ya!,0.0,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Bridge - 1.mp3,Bridge,2000s\r\nOutkast,Hey Ya!,34.11,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Bridge - 2.mp3,Bridge,2000s\r\nOutkast,Hey Ya!,67.715,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Chorus - 1.mp3,Chorus,2000s\r\nOutkast,Hey Ya!,100.35,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Chorus - 2.mp3,Chorus,2000s\r\nOutkast,Hey Ya!,133.567,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Verse - 1.mp3,Verse,2000s\r\nOutkast,Hey Ya!,167.313,45.0,ThatsMySong/2000 - Outkast - Hey Ya! - Verse - 2.mp3,Verse,2000s\r\nPaula Abdul,Rush Rush,0.0,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Bridge.mp3,Bridge,1990s\r\nPaula Abdul,Rush Rush,18.225,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 1.mp3,Chorus,1990s\r\nPaula Abdul,Rush Rush,46.932,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 2.mp3,Chorus,1990s\r\nPaula Abdul,Rush Rush,58.561,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Chorus - 3.mp3,Chorus,1990s\r\nPaula Abdul,Rush Rush,80.615,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Intro.mp3,Intro,1990s\r\nPaula Abdul,Rush Rush,110.944,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 1.mp3,Prechorus,1990s\r\nPaula Abdul,Rush Rush,122.516,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 2.mp3,Prechorus,1990s\r\nPaula Abdul,Rush Rush,165.703,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Prechorus - 3.mp3,Prechorus,1990s\r\nPaula Abdul,Rush Rush,186.5,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Solo.mp3,Solo,1990s\r\nPaula Abdul,Rush Rush,207.185,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Verse - 1.mp3,Verse,1990s\r\nPaula Abdul,Rush Rush,218.701,45.0,ThatsMySong/1991 - Paula Abdul - Rush Rush - Verse - 2.mp3,Verse,1990s\r\nPaul Mauriat,Love Is Blue,0.0,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Chorus - 1.mp3,Chorus,1960s\r\nPaul Mauriat,Love Is Blue,13.913,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Chorus - 2.mp3,Chorus,1960s\r\nPaul Mauriat,Love Is Blue,53.991,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Intro.mp3,Intro,1960s\r\nPaul Mauriat,Love Is Blue,74.522,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 1.mp3,Verse,1960s\r\nPaul Mauriat,Love Is Blue,98.546,45.0,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 2.mp3,Verse,1960s\r\nPaul Mauriat,Love Is Blue,119.057,38.4,ThatsMySong/1967 - Paul Mauriat - Love Is Blue - Verse - 3.mp3,Verse,1960s\r\nPaul McCartney and Michael Jackson,Say Say Say,0.0,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Bridge.mp3,Bridge,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,16.686,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 1.mp3,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,33.113,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 2.mp3,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,57.694,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Chorus - 3.mp3,Chorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,73.79,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Intro.mp3,Intro,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,90.641,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Outro.mp3,Outro,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,107.091,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Postchorus.mp3,Postchorus,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,123.047,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 1.mp3,Verse,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,139.167,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 2.mp3,Verse,1980s\r\nPaul McCartney and Michael Jackson,Say Say Say,156.018,45.0,ThatsMySong/1983 - Paul McCartney and Michael Jackson - Say Say Say - Verse - 3.mp3,Verse,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,0.0,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Bridge.mp3,Bridge,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,6.822,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 1.mp3,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,33.615,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 2.mp3,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,60.384,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Chorus - 3.mp3,Chorus,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,81.157,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Intro.mp3,Intro,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,96.052,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Outro.mp3,Outro,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,107.921,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Solo.mp3,Solo,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,134.717,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Verse - 1.mp3,Verse,1980s\r\nPaul McCartney (feat. Stevie Wonder),Ebony and Ivory,176.286,45.0,ThatsMySong/1982 - Paul McCartney (feat. Stevie Wonder) - Ebony and Ivory - Verse - 2.mp3,Verse,1980s\r\nPercy Faith,Theme from _A Summer Place_,0.0,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Bridge.mp3,Bridge,1960s\r\nPercy Faith,Theme from _A Summer Place_,7.834,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Intro.mp3,Intro,1960s\r\nPercy Faith,Theme from _A Summer Place_,23.298,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 1.mp3,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,46.539,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 2.mp3,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,60.401,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 3.mp3,Verse,1960s\r\nPercy Faith,Theme from _A Summer Place_,89.437,45.0,ThatsMySong/1959 - Percy Faith - Theme from _A Summer Place_ - Verse - 4.mp3,Verse,1960s\r\nQueen,Another One Bites the Dust,0.0,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Bridge.mp3,Bridge,1980s\r\nQueen,Another One Bites the Dust,22.161,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Chorus - 1.mp3,Chorus,1980s\r\nQueen,Another One Bites the Dust,39.642,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Chorus - 2.mp3,Chorus,1980s\r\nQueen,Another One Bites the Dust,65.826,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Intro.mp3,Intro,1980s\r\nQueen,Another One Bites the Dust,83.296,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 1.mp3,Verse,1980s\r\nQueen,Another One Bites the Dust,101.284,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 2.mp3,Verse,1980s\r\nQueen,Another One Bites the Dust,157.49,45.0,ThatsMySong/1980 - Queen - Another One Bites the Dust - Verse - 3.mp3,Verse,1980s\r\nRay Charles,I Can't Stop Loving You,0.0,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 1.mp3,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,49.0,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 2.mp3,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,97.056,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Chorus - 3.mp3,Chorus,1960s\r\nRay Charles,I Can't Stop Loving You,145.233,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Verse - 1.mp3,Verse,1960s\r\nRay Charles,I Can't Stop Loving You,193.146,45.0,ThatsMySong/1962 - Ray Charles - I Can't Stop Loving You - Verse - 2.mp3,Verse,1960s\r\nRoberta Flack,Killing Me Softly with His Song,0.0,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Bridge.mp3,Bridge,1970s\r\nRoberta Flack,Killing Me Softly with His Song,31.419,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 1.mp3,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,47.503,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 2.mp3,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,71.636,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 3.mp3,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,99.675,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 4.mp3,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,123.368,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Chorus - 5.mp3,Chorus,1970s\r\nRoberta Flack,Killing Me Softly with His Song,152.357,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Intro.mp3,Intro,1970s\r\nRoberta Flack,Killing Me Softly with His Song,174.856,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 1.mp3,Verse,1970s\r\nRoberta Flack,Killing Me Softly with His Song,202.174,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 2.mp3,Verse,1970s\r\nRoberta Flack,Killing Me Softly with His Song,229.182,45.0,ThatsMySong/1973 - Roberta Flack - Killing Me Softly with His Song - Verse - 3.mp3,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),0.0,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 1.mp3,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),17.741,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 2.mp3,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),44.352,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Chorus - 3.mp3,Chorus,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),65.67,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Intro.mp3,Intro,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),87.035,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Outro.mp3,Outro,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),108.282,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Solo.mp3,Solo,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),128.669,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 1.mp3,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),150.798,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 2.mp3,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),171.782,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 3.mp3,Verse,1970s\r\nRod Stewart,Tonight's the Night (Gonna Be Alright),188.616,45.0,ThatsMySong/1976 - Rod Stewart - Tonight's the Night (Gonna Be Alright) - Verse - 4.mp3,Verse,1970s\r\nSinéad O'Connor,Nothing Compares 2 U,0.0,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Bridge.mp3,Bridge,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,9.018,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Chorus - 1.mp3,Chorus,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,71.968,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Chorus - 2.mp3,Chorus,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,88.521,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Intro.mp3,Intro,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,151.946,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Outro.mp3,Outro,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,168.44,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Solo.mp3,Solo,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,200.3,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Verse - 1.mp3,Verse,1990s\r\nSinéad O'Connor,Nothing Compares 2 U,232.518,45.0,ThatsMySong/1990 - Sinéad O'Connor - Nothing Compares 2 U - Verse - 2.mp3,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),0.0,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 1.mp3,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),30.218,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 2.mp3,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),58.585,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Chorus - 3.mp3,Chorus,1990s\r\nStevie B,Because I Love You (The Postman Song),90.078,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Intro.mp3,Intro,1990s\r\nStevie B,Because I Love You (The Postman Song),118.444,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Outro.mp3,Outro,1990s\r\nStevie B,Because I Love You (The Postman Song),149.821,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Solo.mp3,Solo,1990s\r\nStevie B,Because I Love You (The Postman Song),179.692,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 1.mp3,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),208.058,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 2.mp3,Verse,1990s\r\nStevie B,Because I Love You (The Postman Song),239.319,45.0,ThatsMySong/1990 - Stevie B - Because I Love You (The Postman Song) - Verse - 3.mp3,Verse,1990s\r\nSurvivor,Eye of the Tiger,0.0,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 1.mp3,Chorus,1980s\r\nSurvivor,Eye of the Tiger,49.347,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 2.mp3,Chorus,1980s\r\nSurvivor,Eye of the Tiger,83.866,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Chorus - 3.mp3,Chorus,1980s\r\nSurvivor,Eye of the Tiger,123.59,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Intro.mp3,Intro,1980s\r\nSurvivor,Eye of the Tiger,167.706,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Outro.mp3,Outro,1980s\r\nSurvivor,Eye of the Tiger,192.824,45.0,ThatsMySong/1982 - Survivor - Eye of the Tiger - Verse.mp3,Verse,1980s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,16.686,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Bridge.mp3,Bridge,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,36.511,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Chorus - 1.mp3,Chorus,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,57.034,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Chorus - 2.mp3,Chorus,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,87.964,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Outro.mp3,Outro,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,108.065,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Solo.mp3,Solo,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,139.053,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Verse - 1.mp3,Verse,1960s\r\nThe 5th Dimension,Aquarius_Let the Sunshine In,151.618,45.0,ThatsMySong/1969 - The 5th Dimension - Aquarius_Let the Sunshine In - Verse - 2.mp3,Verse,1960s\r\nThe Archies,\"Sugar, Sugar\",0.0,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Bridge.mp3\",0,Bridge,1960s\r\nThe Archies,\"Sugar, Sugar\",8.182,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Chorus - 1.mp3\",0,Chorus,1960s\r\nThe Archies,\"Sugar, Sugar\",39.616,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Chorus - 2.mp3\",0,Chorus,1960s\r\nThe Archies,\"Sugar, Sugar\",54.208,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Intro.mp3\",0,Intro,1960s\r\nThe Archies,\"Sugar, Sugar\",86.425,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Verse - 1.mp3\",0,Verse,1960s\r\nThe Archies,\"Sugar, Sugar\",102.074,45.0,\"ThatsMySong/1969 - The Archies - Sugar, Sugar - Verse - 2.mp3\",0,Verse,1960s\r\nThe Beatles,Hey Jude,0.0,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Bridge - 1.mp3,Bridge,1960s\r\nThe Beatles,Hey Jude,25.952,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Bridge - 2.mp3,Bridge,1960s\r\nThe Beatles,Hey Jude,52.641,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 1.mp3,Chorus,1960s\r\nThe Beatles,Hey Jude,92.236,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 2.mp3,Chorus,1960s\r\nThe Beatles,Hey Jude,118.979,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 3.mp3,Chorus,1960s\r\nThe Beatles,Hey Jude,158.638,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Chorus - 4.mp3,Chorus,1960s\r\nThe Beatles,Hey Jude,187.765,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 1.mp3,Verse,1960s\r\nThe Beatles,Hey Jude,229.245,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 2.mp3,Verse,1960s\r\nThe Beatles,Hey Jude,294.554,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 3.mp3,Verse,1960s\r\nThe Beatles,Hey Jude,320.398,45.0,ThatsMySong/1968 - The Beatles - Hey Jude - Verse - 4.mp3,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,0.0,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 1.mp3,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,6.678,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 2.mp3,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,21.91,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Chorus - 3.mp3,Chorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,28.295,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Intro.mp3,Intro,1960s\r\nThe Beatles,I Want to Hold Your Hand,43.702,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Postchorus - 1.mp3,Postchorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,50.966,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Postchorus - 2.mp3,Postchorus,1960s\r\nThe Beatles,I Want to Hold Your Hand,70.533,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 1.mp3,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,85.999,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 2.mp3,Verse,1960s\r\nThe Beatles,I Want to Hold Your Hand,93.351,45.0,ThatsMySong/1963 - The Beatles - I Want to Hold Your Hand - Verse - 3.mp3,Verse,1960s\r\nThe Bee Gees,How Deep Is Your Love,0.0,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Bridge.mp3,Bridge,1970s\r\nThe Bee Gees,How Deep Is Your Love,17.355,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 1.mp3,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,35.641,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 2.mp3,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,48.535,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 3.mp3,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,73.93,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Chorus - 4.mp3,Chorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,90.574,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Intro.mp3,Intro,1970s\r\nThe Bee Gees,How Deep Is Your Love,103.443,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 1.mp3,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,128.409,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 2.mp3,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,145.556,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Prechorus - 3.mp3,Prechorus,1970s\r\nThe Bee Gees,How Deep Is Your Love,158.253,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Verse - 1.mp3,Verse,1970s\r\nThe Bee Gees,How Deep Is Your Love,188.943,45.0,ThatsMySong/1977 - The Bee Gees - How Deep Is Your Love - Verse - 2.mp3,Verse,1970s\r\nThe Bee Gees,Night Fever,0.0,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 1.mp3,Chorus,1970s\r\nThe Bee Gees,Night Fever,18.893,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 2.mp3,Chorus,1970s\r\nThe Bee Gees,Night Fever,35.984,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Chorus - 3.mp3,Chorus,1970s\r\nThe Bee Gees,Night Fever,49.657,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Intro.mp3,Intro,1970s\r\nThe Bee Gees,Night Fever,67.297,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Prechorus - 1.mp3,Prechorus,1970s\r\nThe Bee Gees,Night Fever,84.862,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Prechorus - 2.mp3,Prechorus,1970s\r\nThe Bee Gees,Night Fever,102.193,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 1.mp3,Verse,1970s\r\nThe Bee Gees,Night Fever,119.641,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 2.mp3,Verse,1970s\r\nThe Bee Gees,Night Fever,133.185,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 3.mp3,Verse,1970s\r\nThe Bee Gees,Night Fever,150.804,45.0,ThatsMySong/1978 - The Bee Gees - Night Fever - Verse - 4.mp3,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,0.0,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 3.mp3,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,0.0,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Bridge.mp3,Bridge,1970s\r\nThe Bee Gees,Stayin' Alive,13.245,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 1.mp3,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,23.064,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 2.mp3,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,32.769,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Chorus - 3.mp3,Chorus,1970s\r\nThe Bee Gees,Stayin' Alive,62.227,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Intro.mp3,Intro,1970s\r\nThe Bee Gees,Stayin' Alive,71.818,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Outro.mp3,Outro,1970s\r\nThe Bee Gees,Stayin' Alive,81.409,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 1.mp3,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,111.537,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 2.mp3,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,133.816,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Prechorus - 3.mp3,Prechorus,1970s\r\nThe Bee Gees,Stayin' Alive,143.589,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 1.mp3,Verse,1970s\r\nThe Bee Gees,Stayin' Alive,153.255,45.0,ThatsMySong/1977 - The Bee Gees - Stayin' Alive - Verse - 2.mp3,Verse,1970s\r\nThe Black Eyed Peas,Boom Boom Pow,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 4.mp3,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Bridge.mp3,Bridge,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,15.068,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chorus - 1.mp3,Chorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,28.744,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chorus - 2.mp3,Chorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,43.944,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Chrous - 3.mp3,Chrous,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,59.425,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Intro.mp3,Intro,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,73.467,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Outro.mp3,Outro,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,88.727,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Prechorus - 1.mp3,Prechorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,103.723,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Prechorus - 2.mp3,Prechorus,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,133.259,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 1.mp3,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,163.25,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 2.mp3,Verse,2000s\r\nThe Black Eyed Peas,Boom Boom Pow,199.672,45.0,ThatsMySong/2009 - The Black Eyed Peas - Boom Boom Pow - Verse - 3.mp3,Verse,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,0.0,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Bridge.mp3,Bridge,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,28.989,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Chorus - 1.mp3,Chorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,90.013,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Chorus - 2.mp3,Chorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,104.986,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Intro.mp3,Intro,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,119.977,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Other - 1.mp3,Other,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,148.589,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Other - 2.mp3,Other,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,180.196,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Postchorus - 1.mp3,Postchorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,194.99,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Postchorus - 2.mp3,Postchorus,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,224.997,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Verse - 1.mp3,Verse,2000s\r\nThe Black Eyed Peas,I Gotta Feeling,239.954,45.0,ThatsMySong/2009 - The Black Eyed Peas - I Gotta Feeling - Verse - 2.mp3,Verse,2000s\r\nThe Emotions,Best of My Love,0.0,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 3.mp3,Verse,1970s\r\nThe Emotions,Best of My Love,0.0,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 1.mp3,Chorus,1970s\r\nThe Emotions,Best of My Love,12.906,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 2.mp3,Chorus,1970s\r\nThe Emotions,Best of My Love,45.88,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Chorus - 3.mp3,Chorus,1970s\r\nThe Emotions,Best of My Love,63.162,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Intro.mp3,Intro,1970s\r\nThe Emotions,Best of My Love,79.406,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Prechorus.mp3,Prechorus,1970s\r\nThe Emotions,Best of My Love,100.301,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 1.mp3,Verse,1970s\r\nThe Emotions,Best of My Love,116.932,45.0,ThatsMySong/1977 - The Emotions - Best of My Love - Verse - 2.mp3,Verse,1970s\r\nThe Four Seasons,Big Girls Don't Cry,0.0,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 1.mp3,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,12.822,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 2.mp3,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,43.004,37.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Chorus - 3.mp3,Chorus,1960s\r\nThe Four Seasons,Big Girls Don't Cry,53.207,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Intro.mp3,Intro,1960s\r\nThe Four Seasons,Big Girls Don't Cry,71.829,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Other.mp3,Other,1960s\r\nThe Four Seasons,Big Girls Don't Cry,93.226,22.2,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Outro.mp3,Outro,1960s\r\nThe Four Seasons,Big Girls Don't Cry,109.011,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Verse - 1.mp3,Verse,1960s\r\nThe Four Seasons,Big Girls Don't Cry,123.806,45.0,ThatsMySong/1962 - The Four Seasons - Big Girls Don't Cry - Verse - 2.mp3,Verse,1960s\r\nThe J. Geils Band,Centerfold,0.0,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Bridge - 1.mp3,Bridge,1980s\r\nThe J. Geils Band,Centerfold,0.0,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 3.mp3,Verse,1980s\r\nThe J. Geils Band,Centerfold,17.081,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Bridge - 2.mp3,Bridge,1980s\r\nThe J. Geils Band,Centerfold,33.64,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 1.mp3,Chorus,1980s\r\nThe J. Geils Band,Centerfold,42.017,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 2.mp3,Chorus,1980s\r\nThe J. Geils Band,Centerfold,59.012,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Chorus - 3.mp3,Chorus,1980s\r\nThe J. Geils Band,Centerfold,75.473,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Intro.mp3,Intro,1980s\r\nThe J. Geils Band,Centerfold,83.981,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Outro.mp3,Outro,1980s\r\nThe J. Geils Band,Centerfold,101.029,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 1.mp3,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,116.935,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 2.mp3,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,134.462,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Prechorus - 3.mp3,Prechorus,1980s\r\nThe J. Geils Band,Centerfold,159.763,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 1.mp3,Verse,1980s\r\nThe J. Geils Band,Centerfold,168.636,45.0,ThatsMySong/1981 - The J. Geils Band - Centerfold - Verse - 2.mp3,Verse,1980s\r\nThe Knack,My Sharona,0.0,45.0,ThatsMySong/1979 - The Knack - My Sharona - Bridge.mp3,Bridge,1970s\r\nThe Knack,My Sharona,18.916,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 1.mp3,Chorus,1970s\r\nThe Knack,My Sharona,32.51,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 2.mp3,Chorus,1970s\r\nThe Knack,My Sharona,49.088,45.0,ThatsMySong/1979 - The Knack - My Sharona - Chorus - 3.mp3,Chorus,1970s\r\nThe Knack,My Sharona,62.239,45.0,ThatsMySong/1979 - The Knack - My Sharona - Intro.mp3,Intro,1970s\r\nThe Knack,My Sharona,78.67,45.0,ThatsMySong/1979 - The Knack - My Sharona - Outro.mp3,Outro,1970s\r\nThe Knack,My Sharona,117.126,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 1.mp3,Verse,1970s\r\nThe Knack,My Sharona,130.218,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 2.mp3,Verse,1970s\r\nThe Knack,My Sharona,159.244,45.0,ThatsMySong/1979 - The Knack - My Sharona - Verse - 3.mp3,Verse,1970s\r\nThe Monkees,I'm a Believer,0.0,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Bridge.mp3,Bridge,1960s\r\nThe Monkees,I'm a Believer,5.093,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 1.mp3,Chorus,1960s\r\nThe Monkees,I'm a Believer,27.602,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 2.mp3,Chorus,1960s\r\nThe Monkees,I'm a Believer,49.895,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Chorus - 3.mp3,Chorus,1960s\r\nThe Monkees,I'm a Believer,72.479,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Intro.mp3,Intro,1960s\r\nThe Monkees,I'm a Believer,95.18,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Solo.mp3,Solo,1960s\r\nThe Monkees,I'm a Believer,106.181,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Verse - 1.mp3,Verse,1960s\r\nThe Monkees,I'm a Believer,117.897,45.0,ThatsMySong/1966 - The Monkees - I'm a Believer - Verse - 2.mp3,Verse,1960s\r\nThe Police,Every Breath You Take,0.0,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Bridge.mp3,Bridge,1980s\r\nThe Police,Every Breath You Take,14.936,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Chorus - 1.mp3,Chorus,1980s\r\nThe Police,Every Breath You Take,47.633,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Chorus - 2.mp3,Chorus,1980s\r\nThe Police,Every Breath You Take,63.999,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Intro.mp3,Intro,1980s\r\nThe Police,Every Breath You Take,81.87,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Other.mp3,Other,1980s\r\nThe Police,Every Breath You Take,112.367,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Outro.mp3,Outro,1980s\r\nThe Police,Every Breath You Take,133.543,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 1.mp3,Verse,1980s\r\nThe Police,Every Breath You Take,149.899,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 2.mp3,Verse,1980s\r\nThe Police,Every Breath You Take,179.011,45.0,ThatsMySong/1983 - The Police - Every Breath You Take - Verse - 3.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,0.0,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Bridge - 1.mp3,Bridge,1980s\r\nThe Steve Miller Band,Abracadabra,16.237,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Bridge - 2.mp3,Bridge,1980s\r\nThe Steve Miller Band,Abracadabra,31.406,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 1.mp3,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,45.784,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 2.mp3,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,61.324,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Chorus - 3.mp3,Chorus,1980s\r\nThe Steve Miller Band,Abracadabra,75.957,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Intro.mp3,Intro,1980s\r\nThe Steve Miller Band,Abracadabra,91.49,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Outro.mp3,Outro,1980s\r\nThe Steve Miller Band,Abracadabra,106.503,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Solo - 1.mp3,Solo,1980s\r\nThe Steve Miller Band,Abracadabra,121.052,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Solo - 2.mp3,Solo,1980s\r\nThe Steve Miller Band,Abracadabra,136.53,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 1.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,155.261,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 2.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,196.583,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 3.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,219.235,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 4.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,241.917,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 5.mp3,Verse,1980s\r\nThe Steve Miller Band,Abracadabra,263.082,45.0,ThatsMySong/1981 - The Steve Miller Band - Abracadabra - Verse - 6.mp3,Verse,1980s\r\nTimbaland (feat. OneRepublic),Apologize,0.0,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Bridge.mp3,Bridge,2000s\r\nTimbaland (feat. OneRepublic),Apologize,15.802,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 1.mp3,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,48.818,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 2.mp3,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,73.227,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Chorus - 3.mp3,Chorus,2000s\r\nTimbaland (feat. OneRepublic),Apologize,105.608,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Intro.mp3,Intro,2000s\r\nTimbaland (feat. OneRepublic),Apologize,120.987,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Verse - 1.mp3,Verse,2000s\r\nTimbaland (feat. OneRepublic),Apologize,139.541,45.0,ThatsMySong/2007 - Timbaland (feat. OneRepublic) - Apologize - Verse - 2.mp3,Verse,2000s\r\nWhitney Houston,I Will Always Love You,0.0,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 1.mp3,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,42.719,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 2.mp3,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,66.874,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Chorus - 3.mp3,Chorus,1990s\r\nWhitney Houston,I Will Always Love You,76.719,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Intro.mp3,Intro,1990s\r\nWhitney Houston,I Will Always Love You,105.599,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Postchorus.mp3,Postchorus,1990s\r\nWhitney Houston,I Will Always Love You,127.316,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Solo.mp3,Solo,1990s\r\nWhitney Houston,I Will Always Love You,155.252,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Verse - 1.mp3,Verse,1990s\r\nWhitney Houston,I Will Always Love You,188.059,45.0,ThatsMySong/1992 - Whitney Houston - I Will Always Love You - Verse - 2.mp3,Verse,1990s\r\nWild Cherry,Play That Funky Music,0.0,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Chorus.mp3,Chorus,1970s\r\nWild Cherry,Play That Funky Music,16.797,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Intro.mp3,Intro,1970s\r\nWild Cherry,Play That Funky Music,52.587,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Prechorus - 1.mp3,Prechorus,1970s\r\nWild Cherry,Play That Funky Music,62.15,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Prechorus - 2.mp3,Prechorus,1970s\r\nWild Cherry,Play That Funky Music,88.606,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Solo.mp3,Solo,1970s\r\nWild Cherry,Play That Funky Music,105.556,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Verse - 1.mp3,Verse,1970s\r\nWild Cherry,Play That Funky Music,200.239,45.0,ThatsMySong/1976 - Wild Cherry - Play That Funky Music - Verse - 2.mp3,Verse,1970s\r\nWings,Silly Love Songs,0.0,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 1.mp3,Bridge,1970s\r\nWings,Silly Love Songs,22.557,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 2.mp3,Bridge,1970s\r\nWings,Silly Love Songs,45.827,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Bridge - 3.mp3,Bridge,1970s\r\nWings,Silly Love Songs,61.745,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Chorus - 1.mp3,Chorus,1970s\r\nWings,Silly Love Songs,92.529,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Chorus - 2.mp3,Chorus,1970s\r\nWings,Silly Love Songs,107.573,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Intro.mp3,Intro,1970s\r\nWings,Silly Love Songs,123.526,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Prechorus - 1.mp3,Prechorus,1970s\r\nWings,Silly Love Songs,139.016,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Prechorus - 2.mp3,Prechorus,1970s\r\nWings,Silly Love Songs,160.734,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Solo - 1.mp3,Solo,1970s\r\nWings,Silly Love Songs,190.982,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Solo - 2.mp3,Solo,1970s\r\nWings,Silly Love Songs,221.421,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Verse - 1.mp3,Verse,1970s\r\nWings,Silly Love Songs,251.929,45.0,ThatsMySong/1976 - Wings - Silly Love Songs - Verse - 2.mp3,Verse,1970s\r\n" } } ] diff --git a/backend/section/forms.py b/backend/section/forms.py index ebe1784af..db0b3a360 100644 --- a/backend/section/forms.py +++ b/backend/section/forms.py @@ -1,14 +1,39 @@ from django import forms +from .models import Playlist from .validators import audio_file_validator + class MultipleFileInput(forms.ClearableFileInput): allow_multiple_selected = True + class AddSections(forms.Form): artist = forms.CharField(max_length=128, required=False) name = forms.CharField(max_length=128, required=False) tag = forms.CharField(max_length=128, required=False) group = forms.CharField(max_length=128, required=False) - files = forms.FileField(widget=MultipleFileInput(attrs={'accept':'.wav,.mp3,.aiff,.flac,.ogg'}), + files = forms.FileField(widget=MultipleFileInput(attrs={'accept':'.wav,.mp3,.aiff,.flac,.ogg'}), validators=[audio_file_validator()]) + + +class PlaylistAdminForm(forms.ModelForm): + csv_file = forms.FileField(required=False, help_text='Upload a CSV file (overrides the text input above)', label='CSV file', widget=forms.FileInput(attrs={'accept':'.csv'})) + + class Meta: + model = Playlist + fields = '__all__' + + def save(self, commit=True): + playlist = super().save(commit=False) + + # Handle uploaded CSV file + csv_file = self.cleaned_data.get('csv_file') + if csv_file: + # Read and process the CSV file + playlist.csv = csv_file.read().decode('utf-8') + + if commit: + playlist.save() + + return playlist diff --git a/backend/section/migrations/0003_song_as_separate_model.py b/backend/section/migrations/0003_song_as_separate_model.py index 07c9abf0a..ecb7b2e86 100644 --- a/backend/section/migrations/0003_song_as_separate_model.py +++ b/backend/section/migrations/0003_song_as_separate_model.py @@ -29,7 +29,6 @@ def move_songs_backwards(apps, schema_editor): section.restrict_to_nl = 1 section.save() - dependencies = [ ('section', '0002_alter_section_filename'), ] diff --git a/backend/section/migrations/0006_auto_20240126_1606.py b/backend/section/migrations/0006_auto_20240126_1606.py new file mode 100644 index 000000000..06a153532 --- /dev/null +++ b/backend/section/migrations/0006_auto_20240126_1606.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.23 on 2024-01-26 15:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('section', '0005_section_add_validator'), + ] + + operations = [ + migrations.RemoveField( + model_name='song', + name='restricted', + ), + migrations.AlterField( + model_name='playlist', + name='csv', + field=models.TextField(blank=True, help_text='CSV Format: artist_name [string], song_name [string], start_position [float], duration [float], "path/filename.mp3" [string], tag [string], group [string]'), + ), + ] diff --git a/backend/section/models.py b/backend/section/models.py index 83da38e14..072398edf 100644 --- a/backend/section/models.py +++ b/backend/section/models.py @@ -2,6 +2,7 @@ import random import csv +from django import forms from django.db import models from django.utils import timezone from django.urls import reverse @@ -9,6 +10,7 @@ from .utils import CsvStringBuilder from .validators import audio_file_validator + class Playlist(models.Model): """List of sections to be used in an Experiment""" @@ -19,12 +21,12 @@ class Playlist(models.Model): default_csv_row = 'CSV Format: artist_name [string],\ song_name [string], start_position [float], duration [float],\ - "path/filename.mp3" [string], restricted_to_nl [int 0=False 1=True], tag [string], group [string]' + "path/filename.mp3" [string], tag [string], group [string]' csv = models.TextField(blank=True, help_text=default_csv_row) def save(self, *args, **kwargs): """Update playlist csv field on every save""" - if self.process_csv is False: + if self.process_csv is False: self.csv = self.update_admin_csv() super(Playlist, self).save(*args, **kwargs) @@ -66,7 +68,7 @@ def update_sections(self): # Add new sections from csv try: reader = csv.DictReader(self.csv.splitlines(), fieldnames=( - 'artist', 'name', 'start_time', 'duration', 'filename', 'restrict_to_nl', 'tag', 'group')) + 'artist', 'name', 'start_time', 'duration', 'filename', 'tag', 'group')) except csv.Error: return { 'status': self.CSV_ERROR, @@ -95,8 +97,7 @@ def is_number(string): # check for valid numbers if not (is_number(row['start_time']) - and is_number(row['duration']) - and is_number(row['restrict_to_nl'])): + and is_number(row['duration'])): return { 'status': self.CSV_ERROR, 'message': "Error: Expected number fields on line: " + str(lines) @@ -106,9 +107,7 @@ def is_number(string): song = None if row['artist'] and row['name']: song, created = Song.objects.get_or_create(artist=row['artist'], name=row['name']) - if int(row['restrict_to_nl']) == 1: - song.restricted = [{"restricted": "nl"}] - song.save() + section = Section(playlist=self, start_time=float(row['start_time']), duration=float(row['duration']), @@ -126,9 +125,6 @@ def is_number(string): if not ex_section.song: ex_section.song = song ex_section.save() - elif ex_section.song.restricted != song.restricted: - ex_section.song.restricted = song.restricted - ex_section.song.save() ex_section.start_time = section.start_time ex_section.duration = section.duration ex_section.tag = section.tag @@ -153,8 +149,8 @@ def is_number(string): self.section_set.filter(pk__in=delete_ids).delete() # Reset process csv option and save playlist - self.process_csv = False - self.save() + self.process_csv = False + self.save() return { 'status': self.CSV_OK, @@ -179,7 +175,6 @@ def get_section(self, filter_by={}, song_ids=[]): return None return self.section_set.get(pk=random.choice(pks)) - def export_admin(self): """Export data for admin""" return { @@ -190,49 +185,48 @@ def export_admin(self): 'sections': [section.export_admin() for section in self.section_set.all()], }, } - + def export_sections(self): # export section objects return self.section_set.all() - + def update_admin_csv(self): """Update csv data for admin""" csvfile = CsvStringBuilder() - writer = csv.writer(csvfile) + writer = csv.writer(csvfile) for section in self.section_set.all(): if section.song: this_artist = section.song.artist this_name = section.song.name - this_restricted = '1' if section.song.restricted else '0' else: this_artist = '' this_name = '' - this_restricted = '' writer.writerow([this_artist, this_name, section.start_time, section.duration, section.filename, - this_restricted, section.tag, section.group]) csv_string = csvfile.csv_string return ''.join(csv_string) + class Song(models.Model): """ A Song object with an artist and name (unique together)""" artist = models.CharField(db_index=True, blank=True, default='', max_length=128) name = models.CharField(db_index=True, blank=True, default='' ,max_length=128) - restricted = models.JSONField(default=list, blank=True) - + class Meta: unique_together = ("artist", "name") + def audio_upload_path(instance, filename): """Generate path to save audio based on playlist.name""" folder_name = instance.playlist.name.replace(' ', '') return '{0}/{1}'.format(folder_name, filename) + class Section(models.Model): """A snippet/section of a song, belonging to a Playlist""" @@ -246,7 +240,7 @@ def random_code(): duration = models.FloatField(default=0.0) # sec filename = models.FileField(upload_to=audio_upload_path, max_length=255, validators=[audio_file_validator()]) play_count = models.PositiveIntegerField(default=0) - code = models.PositiveIntegerField(default=random_code) + code = models.PositiveIntegerField(default=random_code) tag = models.CharField(max_length=128, default='0', blank=True) group = models.CharField(max_length=128, default='0', blank=True) @@ -266,7 +260,7 @@ def artist_name(self): return self.song.artist else: return '' - + def song_name(self): if self.song: return self.song.name @@ -303,22 +297,18 @@ def export_admin(self): 'name': self.song.name, 'play_count': self.play_count } - + def export_song(self): return self.instance def export_admin_csv(self): """Export csv data for admin""" return [ - self.id, - self.pk, self.song.artist, self.song.name, self.start_time, self.duration, self.filename, - self.song.restricted, - self.play_count, self.tag, self.group, ] diff --git a/backend/section/templates/change_form.html b/backend/section/templates/change_form.html new file mode 100644 index 000000000..84646c615 --- /dev/null +++ b/backend/section/templates/change_form.html @@ -0,0 +1,25 @@ +{% extends "admin/change_form.html" %} +{% load i18n static %} + +{% block extrahead %} +{{ block.super }} + +{% endblock %} + + +{% block after_field_sets %} +{% if original.pk %} + +{% endif %} +{% endblock %} \ No newline at end of file diff --git a/backend/section/tests.py b/backend/section/tests.py index 8b9887572..350d8dbdf 100644 --- a/backend/section/tests.py +++ b/backend/section/tests.py @@ -1,7 +1,11 @@ +from typing import Any from django.test import Client, TestCase from django.contrib.admin.sites import AdminSite +from django.core.files.uploadedfile import SimpleUploadedFile +from django.urls import reverse from section.admin import PlaylistAdmin from section.models import Playlist, Section, Song +from section.forms import PlaylistAdminForm class PlaylistModelTest(TestCase): @@ -20,30 +24,30 @@ def test_update_sections_csv_empty(self): def test_update_sections_invalid_row_length(self): playlist = Playlist.objects.get(name='TestPlaylist') # Third row invalid, len < 8 - playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0,0\n" - "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,0,0,0\n" - "Netta,Toy,0.0,10.0,0,0,0\n" - "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,0,0,0\n") + playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0\n" + "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,0,0\n" + "Netta,Toy,0.0,10.0,0,0\n" + "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,0,0\n") s = playlist.update_sections() self.assertEqual(s['status'], playlist.CSV_ERROR) def test_update_sections_not_number(self): playlist = Playlist.objects.get(name='TestPlaylist') - # Third row string is not a number - playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0,0\n" - "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,0,0,0\n" + # Third row string is not a number + playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0\n" + "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,0,0\n" "Netta,Toy,string,string,bat/netta.mp3,string,tag,group\n" - "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,0,0,0\n") + "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,0,0\n") s = playlist.update_sections() self.assertEqual(s['status'], playlist.CSV_ERROR) - + def test_get_section(self): playlist = Playlist.objects.get(name='TestPlaylist') playlist.csv = ( - "Weird Al,Eat It,0.0,10.0,some/file.mp3,0,tag1,0\n" - "Weird Al,Eat It,10.0,20.0,some/file.mp3,0,tag2,0\n" - "Weird Al,Like a Surgeon,0.0,10.0,some/otherfile.mp3,0,tag1,0\n" - "Weird Al,Like a Surgeon,10.0,20.0,some/otherfile.mp3,0,tag2,0\n" + "Weird Al,Eat It,0.0,10.0,some/file.mp3,tag1,0\n" + "Weird Al,Eat It,10.0,20.0,some/file.mp3,tag2,0\n" + "Weird Al,Like a Surgeon,0.0,10.0,some/otherfile.mp3,tag1,0\n" + "Weird Al,Like a Surgeon,10.0,20.0,some/otherfile.mp3,tag2,0\n" ) playlist.update_sections() assert Song.objects.count() == 2 @@ -57,11 +61,11 @@ def test_get_section(self): assert section.tag == 'tag2' and section.song.id == song2.id def test_valid_csv(self): - playlist = Playlist.objects.get(name='TestPlaylist') - playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0,0\n" - "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,0,1,2\n" - "Netta,Toy,0.0,10.0,bat/netta.mp3,1,tag,group\n" - "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,1,0,0\n") + playlist = Playlist.objects.get(name='TestPlaylist') + playlist.csv = ("Måneskin,Zitti e buoni,0.0,10.0,bat/maneskin.mp3,0,0\n" + "Duncan Laurence,Arcade,0.0,10.0,bat/laurence.mp3,1,2\n" + "Netta,Toy,0.0,10.0,bat/netta.mp3,tag,group\n" + "Salvador Sobral,Amar pelos dois,0.0,10.0,bat/sobral.mp3,0,0\n") s = playlist.update_sections() self.assertEqual(s['status'], playlist.CSV_OK) sections = playlist.section_set.all() @@ -72,7 +76,6 @@ def test_valid_csv(self): self.assertEqual(sections[2].start_time, 0.0) self.assertEqual(sections[2].duration, 10.0) self.assertEqual(sections[2].filename,"bat/netta.mp3") - self.assertEqual(sections[2].song.restricted, [{"restricted": "nl"}]) self.assertEqual(sections[2].tag, "tag") self.assertEqual(sections[2].group, "group") @@ -81,24 +84,24 @@ def test_valid_csv(self): self.assertEqual(sections[3].start_time, 0.0) self.assertEqual(sections[3].duration, 10.0) self.assertEqual(sections[3].filename,"bat/sobral.mp3") - self.assertEqual(sections[3].song.restricted, [{"restricted": "nl"}]) self.assertEqual(sections[3].tag, "0") self.assertEqual(sections[3].group, '0') - + + class MockRequest: pass + this_playlist_admin = PlaylistAdmin( model=Playlist, admin_site=AdminSite) -class TestAmdinEditSection(TestCase): + +class TestAdminEditSection(TestCase): @classmethod def setUpTestData(cls): cls.playlist = Playlist.objects.create() - cls.song = Song.objects.create(artist='default', - name='default', - restricted= [{"restricted": "nl"}]) + cls.song = Song.objects.create(artist='default', name='default') Section.objects.create(playlist=cls.playlist, song=cls.song) @@ -106,15 +109,16 @@ def test_edit_sections(self): request = MockRequest() this_section = Section.objects.first() pre_fix = str(this_section.id) - request.POST = {'_update': '', - pre_fix + '_artist': 'edited', - pre_fix + '_name': 'edited', - pre_fix + '_start_time': '1.1', - pre_fix + '_duration': '1.1', - pre_fix + '_tag': 'edited', - pre_fix + '_group': 'edited', - pre_fix + '_restricted': '0'} - this_playlist = Playlist.objects.first() + request.POST = { + '_update': '', + pre_fix + '_artist': 'edited', + pre_fix + '_name': 'edited', + pre_fix + '_start_time': '1.1', + pre_fix + '_duration': '1.1', + pre_fix + '_tag': 'edited', + pre_fix + '_group': 'edited', + } + this_playlist = Playlist.objects.first() response = this_playlist_admin.edit_sections(request, this_playlist) edit_section = Section.objects.first() self.assertEqual(edit_section.song.artist, 'edited') @@ -123,6 +127,62 @@ def test_edit_sections(self): self.assertEqual(edit_section.duration, 1.1) self.assertEqual(edit_section.tag, 'edited') self.assertEqual(edit_section.group, 'edited') - self.assertEqual(edit_section.song.restricted, []) self.assertEqual(response.status_code, 302) - \ No newline at end of file + + +class PlaylistAdminTest(TestCase): + def setUp(self): + self.playlist = Playlist.objects.create(name="Test Playlist") + self.client = Client() + self.playlist_admin = PlaylistAdmin(model=Playlist, admin_site=AdminSite()) + + def test_export_csv(self): + url = reverse('admin:section_playlist_export_csv', args=[self.playlist.pk]) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'text/csv') + + +class PlaylistAdminFormTest(TestCase): + + def setUp(self): + self.csv_content = b'The Beatles, A day in the life,1.0,1.0,https://example.com/the-beatles/a-day-in-the-life.mp3,0,band,9\nGustav Mahler, Symphony No. 5,2.0,2.0,https://example.com/gustav-mahler/symphony-no-5.mp3,0,composer,5\nDjango Reinhardt, Minor Swing,3.0,3.0,https://example.com/django-reinhardt/minor-swing.mp3,0,artist,3\n' + + def test_csv_file_upload(self): + uploaded_file = SimpleUploadedFile('test.csv', self.csv_content, content_type='text/csv') + + form_data = {'name': 'Test Playlist', 'process_csv': True} + file_data = {'csv_file': uploaded_file} + + form = PlaylistAdminForm(data=form_data, files=file_data) + + self.assertTrue(form.is_valid()) + + playlist = form.save() + + self.assertEqual(playlist.csv, self.csv_content.decode('utf-8')) + + def test_csv_text_input(self): + form_data = {'name': 'Test Playlist', 'process_csv': True, 'csv': self.csv_content.decode('utf-8')} + + form = PlaylistAdminForm(data=form_data) + + self.assertTrue(form.is_valid()) + + playlist = form.save() + + self.assertEqual(playlist.csv.strip(), self.csv_content.decode('utf-8').strip()) + + def test_should_not_process_csv(self): + uploaded_file = SimpleUploadedFile('test.csv', self.csv_content, content_type='text/csv') + + form_data = {'name': 'Test Playlist', 'process_csv': False} + file_data = {'csv_file': uploaded_file} + + form = PlaylistAdminForm(data=form_data, files=file_data) + + self.assertTrue(form.is_valid()) + + playlist = form.save() + + self.assertEqual(playlist.csv, '') diff --git a/backend/section/urls.py b/backend/section/urls.py index 0de24999f..a2d0947b2 100644 --- a/backend/section/urls.py +++ b/backend/section/urls.py @@ -5,7 +5,7 @@ app_name = 'section' urlpatterns = [ -# Section + # Section path('//', get_section, name='section'), -] \ No newline at end of file +] diff --git a/backend/section/validators.py b/backend/section/validators.py index 94e9e53ec..6a1369420 100644 --- a/backend/section/validators.py +++ b/backend/section/validators.py @@ -2,5 +2,6 @@ valid_extensions = ['wav', 'mp3', 'aiff', 'flac', 'ogg'] + def audio_file_validator(): return FileExtensionValidator(allowed_extensions=valid_extensions) \ No newline at end of file diff --git a/backend/section/views.py b/backend/section/views.py index 47e83f30d..78f62b63d 100644 --- a/backend/section/views.py +++ b/backend/section/views.py @@ -8,14 +8,10 @@ def get_section(request, section_id, code): - """Get section by given id, check location restrictions""" + """Get section by given id""" try: section = Section.objects.get(pk=section_id, code=code) - # Check location restrictions - if len(section.song.restricted) and not located_in_nl(request): - raise PermissionDenied - # Section will be served, so increase play count # On your local development server you can receive multiple requests on # a single section @@ -35,7 +31,7 @@ def get_section(request, section_id, code): # The range/seeking of audio files in Chrome if not settings.DEBUG: return redirect(settings.MEDIA_URL + str(section.filename)) - + # Option 2: stream file through Django # Advantage: keeps url secure, correct play_count value # Disadvantage: potential high server load diff --git a/backend/session/admin.py b/backend/session/admin.py index 1c5fe8043..cb5133385 100644 --- a/backend/session/admin.py +++ b/backend/session/admin.py @@ -2,6 +2,7 @@ from .models import Session from result.models import Result + class ResultInline(admin.TabularInline): """Result inline admin for SessionAdmin""" diff --git a/backend/session/apps.py b/backend/session/apps.py index 2930e222f..8ce90a79f 100644 --- a/backend/session/apps.py +++ b/backend/session/apps.py @@ -1,4 +1,5 @@ from django.apps import AppConfig + class SessionConfig(AppConfig): name = 'session' diff --git a/backend/session/migrations/0003_migrate_json_data_to_JSONField.py b/backend/session/migrations/0003_migrate_json_data_to_JSONField.py index 4dc48dcc4..3dcf5edc5 100644 --- a/backend/session/migrations/0003_migrate_json_data_to_JSONField.py +++ b/backend/session/migrations/0003_migrate_json_data_to_JSONField.py @@ -3,6 +3,7 @@ from django.db import migrations import json + def forwards_func(apps, schema_editor): Session = apps.get_model('session', 'Session') for session in Session.objects.all(): @@ -10,13 +11,15 @@ def forwards_func(apps, schema_editor): for key,value in json.loads(session.json_data).items(): session.json_temp[key] = value session.save() - + + def reverse_func(apps, schema_editor): Session = apps.get_model('session', 'Session') for session in Session.objects.all(): session.json_data = json.dumps(session.json_temp) session.save() + class Migration(migrations.Migration): dependencies = [('session', '0002_session_json_temp'),] diff --git a/backend/session/migrations/0004_rename_json_temp_to_json_data.py b/backend/session/migrations/0004_rename_json_temp_to_json_data.py index 8e4a697bc..920e1a345 100644 --- a/backend/session/migrations/0004_rename_json_temp_to_json_data.py +++ b/backend/session/migrations/0004_rename_json_temp_to_json_data.py @@ -1,6 +1,7 @@ # Generated by Django 3.2.20 on 2023-11-24 10:46 -from django.db import migrations, models +from django.db import migrations + class Migration(migrations.Migration): diff --git a/backend/session/models.py b/backend/session/models.py index 0ce771502..448cb1e38 100644 --- a/backend/session/models.py +++ b/backend/session/models.py @@ -123,15 +123,7 @@ def song_ids(self): def filter_songs(self, filter_by={}): # Get pks from sections with given filter and song_id - pks = self.playlist.section_set.filter( - # IP checking is overridable in filter_by. - **( - {} - if self.participant.is_dutch() - else {'song__restricted': []} - ), - **filter_by - ).values_list('song_id', flat=True) + pks = self.playlist.section_set.filter(**filter_by).values_list('song_id', flat=True) # Return None if nothing matches if len(pks) == 0: diff --git a/backend/session/tests/test_session.py b/backend/session/tests/test_session.py index bcbb8a3d0..96222ec79 100644 --- a/backend/session/tests/test_session.py +++ b/backend/session/tests/test_session.py @@ -9,6 +9,7 @@ from result.models import Result from session.models import Session + class SessionTest(TestCase): @classmethod @@ -16,12 +17,13 @@ def setUpTestData(cls): cls.participant = Participant.objects.create(unique_hash=42) cls.experiment = Experiment.objects.create(rules='LISTENING_CONDITIONS', slug='test') + cls.playlist = Playlist.objects.create( + name='Test playlist' + ) cls.session = Session.objects.create( experiment=cls.experiment, participant=cls.participant, - ) - cls.playlist = Playlist.objects.create( - name='Test playlist' + playlist=cls.playlist ) def test_create(self): @@ -112,6 +114,25 @@ def test_last_song(self): last_song = self.session.last_song() assert last_song == 'Beavis - Butthead' + def test_section_from_unused_song(self): + csv = ("Artist 1,Name 1,0.0,10.0,test/file1.mp3,1,0\n" + "Artist 1,Name 2,0.0,10.0,test/file2.mp3,1,0\n" + "Artist 2,Name 1,0.0,10.0,test/file3.mp3,0,0\n" + "Artist 2,Name 2,0.0,10.0,test/file4.mp3,0,0\n" + ) + self.playlist.csv = csv + self.playlist.update_sections() + first_section = Section.objects.first() + assert first_section.song.artist == 'Artist 1' + assert first_section.song.name == 'Name 1' + Result.objects.create(session=self.session, section=first_section) + next_section = self.session.section_from_unused_song({'tag': '1'}) + assert next_section.song.artist == 'Artist 1' + assert next_section.song.name == 'Name 2' + Result.objects.create(session=self.session, section=next_section) + another_section = self.session.section_from_unused_song() + assert another_section.song.artist == 'Artist 2' + def test_json_data(self): self.session.save_json_data({'test': 'tested'}) self.assertEqual(self.session.load_json_data(), {'test': 'tested'}) diff --git a/backend/session/tests/test_utils.py b/backend/session/tests/test_utils.py index 4a992f51a..72d8340ac 100644 --- a/backend/session/tests/test_utils.py +++ b/backend/session/tests/test_utils.py @@ -9,6 +9,7 @@ n_results = 10 + class SessionUtilsTest(TestCase): @classmethod def setUpTestData(cls): diff --git a/backend/session/tests/test_views.py b/backend/session/tests/test_views.py new file mode 100644 index 000000000..5431b6317 --- /dev/null +++ b/backend/session/tests/test_views.py @@ -0,0 +1,47 @@ +from django.test import TestCase + +from experiment.models import Experiment +from participant.models import Participant +from section.models import Playlist +from session.models import Session + + +class SessionViewsTest(TestCase): + @classmethod + def setUpTestData(cls): + cls.participant = Participant.objects.create(unique_hash=42) + cls.playlist1 = Playlist.objects.create(name='First Playlist') + cls.playlist2 = Playlist.objects.create(name='Second Playlist') + cls.experiment = Experiment.objects.create( + name='TestViews', + slug='testviews' + ) + cls.experiment.playlists.add( + cls.playlist1, cls.playlist2 + ) + + def setUp(self): + session = self.client.session + session['participant_id'] = self.participant.id + session.save() + + def test_create_with_playlist(self): + request = { + "experiment_id": self.experiment.id, + "playlist_id": self.playlist2.id + } + self.client.post('/session/create/', request) + new_session = Session.objects.get( + experiment=self.experiment, participant=self.participant) + assert new_session + assert new_session.playlist == self.playlist2 + + def test_create_without_playlist(self): + request = { + "experiment_id": self.experiment.id + } + self.client.post('/session/create/', request) + new_session = Session.objects.get( + experiment=self.experiment, participant=self.participant) + assert new_session + assert new_session.playlist == self.playlist1 diff --git a/backend/session/urls.py b/backend/session/urls.py index ff2d6e013..c0f8a2cd4 100644 --- a/backend/session/urls.py +++ b/backend/session/urls.py @@ -1,5 +1,6 @@ from django.urls import path -from .views import create_session, next_round, continue_session, finalize_session +from .views import create_session, continue_session, next_round, finalize_session + app_name='session' @@ -7,8 +8,8 @@ path('create/', create_session, name='session_create'), path('/next_round/', - next_round, name='session_next_round'), + next_round, name='session_next_round'), path('continue/', continue_session, name='continue_session'), path('/finalize/', finalize_session) -] \ No newline at end of file +] diff --git a/backend/session/views.py b/backend/session/views.py index 20ce36758..27bf9b36d 100644 --- a/backend/session/views.py +++ b/backend/session/views.py @@ -31,31 +31,16 @@ def create_session(request): # Create new session session = Session(experiment=experiment, participant=participant) - # Get playlist - if experiment.playlists.count() == 1: - # Skip if there is only one playlist - session.playlist = experiment.playlists.first() - else: - # load playlist from request - playlist_id = request.POST.get("playlist_id") - - if not playlist_id: - return HttpResponseBadRequest("playlist_id not defined") - + if request.POST.get("playlist_id"): try: playlist = Playlist.objects.get( - pk=playlist_id, experiment__id=experiment.id) + pk=request.POST.get("playlist_id"), experiment__id=session.experiment.id) session.playlist = playlist - except Playlist.DoesNotExist: + except: raise Http404("Playlist does not exist") - - # Get json_data - data = request.POST.get("data") - if data: - try: - session.save_json_data(data) - except ValueError: - return HttpResponseBadRequest("Invalid data") + elif experiment.playlists.count() >= 1: + # register first playlist + session.playlist = experiment.playlists.first() # Save session session.save() @@ -99,6 +84,7 @@ def next_round(request, session_id): return JsonResponse({'next_round': actions}, json_dumps_params={'indent': 4}) + def finalize_session(request, session_id): # Get session participant = get_participant(request) diff --git a/docker-compose-deploy.yml b/docker-compose-deploy.yml new file mode 100644 index 000000000..c6a0f8f16 --- /dev/null +++ b/docker-compose-deploy.yml @@ -0,0 +1,114 @@ +version: '3.8' + +services: + db: + image: postgres + environment: + - POSTGRES_DB=${SQL_DATABASE} + - POSTGRES_USER=${SQL_USER} + - POSTGRES_PASSWORD=${SQL_PASSWORD} + - PGHOST=${SQL_HOST} + - PGPORT=${SQL_PORT} + - PGUSER=${SQL_USER} + - PGDATABASE=${SQL_DATABASE} + - PGPASSWORD=${SQL_PASSWORD} + volumes: + - /home/github-runner/podman-volumes/db-data:/var/lib/postgresql/data + - /home/github-runner/podman-volumes/db-backups:/backups + healthcheck: + test: ["CMD-SHELL", "pg_isready"] + start_period: 5s + interval: 5s + timeout: 5s + retries: 5 + restart: always + ip2country: + image: extrawurst/ip2country:latest + ports: + - 8854:5000 + restart: always + + server: + build: + context: ./backend + dockerfile: Dockerfile + depends_on: + db: + condition: service_healthy + ip2country: + condition: service_started + volumes: + - /home/github-runner/podman-volumes/server-static:/server/static + - /home/github-runner/podman-volumes/server-logs:/server/logs + - /home/github-runner/podman-volumes/server-uploads:/server/upload + environment: + - AML_ALLOWED_HOSTS=${AML_ALLOWED_HOSTS} + - AML_DEBUG=${AML_DEBUG} + - AML_CORS_ORIGIN_WHITELIST=${AML_CORS_ORIGIN_WHITELIST} + - AML_LOCATION_PROVIDER=${AML_LOCATION_PROVIDER} + - AML_SECRET_KEY=${AML_SECRET_KEY} + - AML_SUBPATH=${AML_SUBPATH} + - DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE} + - DJANGO_SUPERUSER_USERNAME=${DJANGO_SUPERUSER_USERNAME} + - DJANGO_SUPERUSER_EMAIL=${DJANGO_SUPERUSER_EMAIL} + - DJANGO_SUPERUSER_PASSWORD=${DJANGO_SUPERUSER_PASSWORD} + - SENTRY_DSN=${SENTRY_DSN} + - SQL_DATABASE=${SQL_DATABASE} + - SQL_USER=${SQL_USER} + - SQL_PASSWORD=${SQL_PASSWORD} + - SQL_HOST=${SQL_HOST} + ports: + - 8000:8000 + command: bash -c "python manage.py migrate && python manage.py bootstrap && python manage.py collectstatic --noinput && gunicorn aml.wsgi:application --bind 0.0.0.0:8000" + restart: always + + client-builder: + build: + context: ./frontend + dockerfile: Dockerfile + target: builder + volumes: + - type: bind + source: ./frontend/src + target: /client/src + - type: bind + source: ./frontend/public + target: /client/public + - type: bind + source: ./frontend/.storybook + target: /client/.storybook + environment: + - REACT_APP_API_ROOT=${REACT_APP_API_ROOT} + - REACT_APP_EXPERIMENT_SLUG=${REACT_APP_EXPERIMENT_SLUG} + - REACT_APP_AML_HOME=${REACT_APP_AML_HOME} + - REACT_APP_LOGO_URL=${REACT_APP_LOGO_URL} + - REACT_APP_HTML_FAVICON=${REACT_APP_HTML_FAVICON} + - REACT_APP_HTML_PAGE_TITLE=${REACT_APP_HTML_PAGE_TITLE} + - REACT_APP_HTML_OG_DESCRIPTION=${REACT_APP_HTML_OG_DESCRIPTION} + - REACT_APP_HTML_OG_IMAGE=${REACT_APP_HTML_OG_IMAGE} + - REACT_APP_HTML_OG_TITLE=${REACT_APP_HTML_OG_TITLE} + - REACT_APP_HTML_OG_URL=${REACT_APP_HTML_OG_URL} + - REACT_APP_HTML_BODY_CLASS=${REACT_APP_HTML_BODY_CLASS} + - REACT_APP_SENTRY_DSN=${REACT_APP_SENTRY_DSN} + - REACT_APP_STRICT=${REACT_APP_STRICT} + restart: "no" + + # This service is responsible for serving + # 1. The built frontend from the client-builder service + # 2. The static files from the server service (e.g., static files & uploads from the Django app) + nginx-proxy: + build: + context: ./frontend + dockerfile: Dockerfile + target: runner + command: nginx -g 'daemon off;' + ports: + - 8080:80 + depends_on: + - client-builder + - server + volumes: + - /home/github-runner/podman-volumes/server-static:/usr/share/nginx/html/django_static + - /home/github-runner/podman-volumes/server-uploads:/usr/share/nginx/html/upload + - ./nginx/custom-nginx.conf:/etc/nginx/conf.d/default.conf + restart: always diff --git a/docker-compose.yaml b/docker-compose.yaml index 2840391c1..cae266f3a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,6 +27,13 @@ services: ports: - 8854:5000 server: + labels: + # Enables Traefik for the Django backend service, + # routes HTTP requests with the host 'backend.muscle.local' to this service, + # and sets 'web' as the (http, insecure) network entry point for these requests. + - "traefik.enable=true" + - "traefik.http.routers.server.rule=Host(`backend.muscle.local`)" + - "traefik.http.routers.server.entrypoints=web" build: context: ./backend dockerfile: DockerfileDevelop @@ -40,6 +47,7 @@ services: source: ./backend target: /server environment: + - AML_ALLOWED_HOSTS=${AML_ALLOWED_HOSTS} - AML_DEBUG=${AML_DEBUG} - DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE} - DJANGO_SUPERUSER_USERNAME=${DJANGO_SUPERUSER_USERNAME} @@ -55,6 +63,13 @@ services: - 8000:8000 command: bash -c "python manage.py migrate && python manage.py bootstrap && python manage.py runserver 0.0.0.0:8000" client: + labels: + # Enables Traefik for the React frontend service, + # routes HTTP requests with the host 'muscle.local' to this service, + # and sets 'web' as the (http, insecure) network entry point for these requests. + - "traefik.enable=true" + - "traefik.http.routers.client.rule=Host(`muscle.local`)" + - "traefik.http.routers.client.entrypoints=web" build: context: ./frontend dockerfile: DockerfileDevelop @@ -81,10 +96,22 @@ services: - REACT_APP_HTML_OG_URL=${REACT_APP_HTML_OG_URL} - REACT_APP_HTML_BODY_CLASS=${REACT_APP_HTML_BODY_CLASS} - REACT_APP_SENTRY_DSN=${REACT_APP_SENTRY_DSN} + - REACT_APP_STRICT=${REACT_APP_STRICT} ports: - 3000:3000 - - 6006:6006 command: sh -c "yarn scss && yarn start" + traefik: + image: traefik:latest + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.web.address=:80" + ports: + - "80:80" + - "8080:8080" # Traefik dashboard + volumes: + - /var/run/docker.sock:/var/run/docker.sock volumes: db_data: db_backup: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 984f171cf..0e7dd323e 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,9 +1,22 @@ -FROM node:18-alpine +# Builder image +FROM docker.io/node:18-alpine as builder RUN yarn set version stable WORKDIR /client COPY package.json /client/ COPY yarn.lock /client/ COPY jsconfig.json /client/ -RUN yarn COPY . /client/ + +# Copy .env file to break the cache +COPY .env /client/ + +RUN yarn +RUN yarn scss +RUN yarn build + +# Runner image that serves the built app using nginx +FROM docker.io/nginx:alpine as runner + +COPY --from=builder /client/build /usr/share/nginx/html +EXPOSE 80 \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index ad3dd9990..8992ab4a2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,34 +1,33 @@ { "name": "aml-frontend", - "version": "0.1.0", - "private": true, - "homepage": "/", + "private": false, + "description": "The React Frontend for the MUSCLE platform", + "license": "MIT", "dependencies": { "@sentry/react": "^7.85.0", - "@testing-library/jest-dom": "^5.16.1", - "@testing-library/react": "^12.1.2", - "@testing-library/user-event": "^13.5.0", "axios": ">=1.6.0", "classnames": "^2.2.6", "email-validator": "^2.0.4", "file-saver": "^2.0.5", "next-share": "0.25.0", "qs": "^6.10.3", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-rangeslider": "^2.2.0", "react-router": "5.2.0", "react-router-dom": "5.2.0", "react-scripts": "5.0.0", "react-select": "^5.4.0", - "react-transition-group": "^4.3.0", - "sass": "^1.50" + "react-transition-group": "^4.4.5", + "sass": "^1.69.5", + "zustand": "^4.4.7" }, "scripts": { "start": "react-scripts start", "build": "sass src/index.scss src/index.css; react-scripts build", "test": "react-scripts test", "test:ci": "react-scripts test --coverage --watchAll=false", + "generate-badge": "coverage-badges -s coverage/coverage-summary.json -o coverage-frontend-badge-new.svg --label 'Frontend Code Coverage'", "eject": "react-scripts eject", "scss": "sass src/index.scss src/index.css", "scss:watch": "sass src/index.scss src/index.css; sass --watch src/index.scss src/index.css", @@ -47,7 +46,11 @@ "^scss/(.*)$": "/src/scss/$1", "^stories/(.*)$": "/src/stories/$1", "^util/(.*)$": "/src/util/$1" - } + }, + "coverageReporters": [ + "lcov", + "json-summary" + ] }, "eslintConfig": { "extends": [ @@ -68,22 +71,26 @@ ] }, "devDependencies": { - "@storybook/addon-essentials": "7.5.3", - "@storybook/addon-interactions": "7.5.3", - "@storybook/addon-links": "7.5.3", - "@storybook/addon-onboarding": "1.0.8", - "@storybook/blocks": "7.5.3", - "@storybook/preset-create-react-app": "7.5.3", - "@storybook/react": "7.5.3", - "@storybook/react-webpack5": "7.5.3", + "@storybook/addon-essentials": "7.6.6", + "@storybook/addon-interactions": "7.6.6", + "@storybook/addon-links": "7.6.6", + "@storybook/addon-onboarding": "1.0.10", + "@storybook/blocks": "7.6.6", + "@storybook/preset-create-react-app": "7.6.6", + "@storybook/react": "7.6.6", + "@storybook/react-webpack5": "7.6.6", "@storybook/testing-library": "0.2.2", - "@testing-library/react-hooks": "^8.0.1", + "@testing-library/jest-dom": "^6.1.5", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.1", "babel-plugin-named-exports-order": "0.0.2", + "coverage-badges-cli": "^1.2.5", "eslint": "^8.54.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-storybook": "^0.6.15", + "history": "^5.3.0", "prop-types": "15.8.1", - "storybook": "7.5.3", + "storybook": "7.6.6", "webpack": "5.89.0" } } diff --git a/frontend/public/images/experiments/visual-matching-pairs/blueduiker.jpg b/frontend/public/images/experiments/visual-matching-pairs/blueduiker.jpg new file mode 100644 index 000000000..5acb7caee Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/blueduiker.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/chimp.jpg b/frontend/public/images/experiments/visual-matching-pairs/chimp.jpg new file mode 100644 index 000000000..3e277e047 Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/chimp.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/elephant.jpg b/frontend/public/images/experiments/visual-matching-pairs/elephant.jpg new file mode 100644 index 000000000..4d4fbc9d7 Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/elephant.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/pangolin.jpg b/frontend/public/images/experiments/visual-matching-pairs/pangolin.jpg new file mode 100644 index 000000000..3f9bbb85b Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/pangolin.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/panther.jpg b/frontend/public/images/experiments/visual-matching-pairs/panther.jpg new file mode 100644 index 000000000..908e3e1b7 Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/panther.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/red-river-hog.jpg b/frontend/public/images/experiments/visual-matching-pairs/red-river-hog.jpg new file mode 100644 index 000000000..955de169f Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/red-river-hog.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/tilapia.jpg b/frontend/public/images/experiments/visual-matching-pairs/tilapia.jpg new file mode 100644 index 000000000..f9162a8a4 Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/tilapia.jpg differ diff --git a/frontend/public/images/experiments/visual-matching-pairs/turtle.jpg b/frontend/public/images/experiments/visual-matching-pairs/turtle.jpg new file mode 100644 index 000000000..7249f4846 Binary files /dev/null and b/frontend/public/images/experiments/visual-matching-pairs/turtle.jpg differ diff --git a/frontend/src/API.js b/frontend/src/API.js index fe9c365d7..46fd386c0 100644 --- a/frontend/src/API.js +++ b/frontend/src/API.js @@ -24,11 +24,12 @@ export const URLS = { get: (question) => "/result/" + question + "/", current: "/result/current_profile", score: "/result/score/", + intermediateScore: "/result/intermediate_score/", consent: "/result/consent/" }, session: { create: "/session/create/", - result: "/session/result/", + register_playlist: (id) => "/session/" + id + "/register_playlist/", next_round: (id) => "/session/" + id + "/next_round/", finalize: (id) => "/session/" + id + "/finalize/" }, @@ -37,9 +38,6 @@ export const URLS = { export const useExperiment = (slug) => useGet(API_BASE_URL + URLS.experiment.get(slug)); -export const useParticipant = (urlQueryString) => - useGet(API_BASE_URL + URLS.participant.current + urlQueryString); - export const useParticipantScores = () => useGet(API_BASE_URL + URLS.participant.score); @@ -72,24 +70,39 @@ export const createConsent = async ({ experiment, participant }) => { }; // Create a new session for given experiment -export const createSession = async ({ experiment, participant, playlist }) => { +export const createSession = async ( {experiment, participant, playlist} ) => { try { const response = await axios.post( API_BASE_URL + URLS.session.create, qs.stringify({ experiment_id: experiment.id, - playlist_id: playlist, - json_data: "", + playlist_id: playlist.current, csrfmiddlewaretoken: participant.csrf_token, }) ); - return response.data; + return response.data.session; } catch (err) { console.error(err); return null; } }; +export const registerPlaylist = async (playlistId, participant, session) => { + try { + const response = await axios.post( + API_BASE_URL + URLS.session.register_playlist(session.id), + qs.stringify({ + playlist_id: playlistId, + csrfmiddlewaretoken: participant.csrf_token + }) + ) + return response.data; + } catch(err) { + console.error(err); + return null; + } +} + // Create result for given session export const scoreResult = async ({ session, @@ -119,6 +132,30 @@ export const scoreResult = async ({ } }; +export const scoreIntermediateResult = async ({ + session, + participant, + result, +}) => { + try { + const vars = { + session_id: session.id, + json_data: JSON.stringify(result), + csrfmiddlewaretoken: participant.csrf_token + }; + + const response = await axios.post( + API_BASE_URL + URLS.result.intermediateScore, + qs.stringify(vars) + ); + return response.data; + } catch (err) { + console.error(err); + return null; + } +}; + + // Get next_round from server export const getNextRound = async ({ session }) => { try { @@ -134,7 +171,7 @@ export const getNextRound = async ({ session }) => { export const finalizeSession = async ({ session, participant }) => { try { const response = await axios.post( - API_BASE_URL + URLS.session.finalize(session.current.id), + API_BASE_URL + URLS.session.finalize(session.id), qs.stringify({ csrfmiddlewaretoken: participant.csrf_token, }) diff --git a/frontend/src/components/App/App.js b/frontend/src/components/App/App.js index f3622e4b2..4b62ae322 100644 --- a/frontend/src/components/App/App.js +++ b/frontend/src/components/App/App.js @@ -1,18 +1,47 @@ -import React from "react"; +import {useEffect, React} from "react"; import { BrowserRouter as Router, Switch, Route, Redirect } from "react-router-dom"; -import { URLS, EXPERIMENT_SLUG } from "../../config"; +import axios from "axios"; + +import { API_BASE_URL, EXPERIMENT_SLUG, URLS } from "../../config"; +import { URLS as API_URLS } from "../../API"; +import useBoundStore from "../../util/stores"; import Experiment from "../Experiment/Experiment"; import Profile from "../Profile/Profile"; import Reload from "../Reload/Reload"; import StoreProfile from "../StoreProfile/StoreProfile.js"; + // App is the root component of our application const App = () => { + const error = useBoundStore(state => state.error); + const setError = useBoundStore(state => state.setError); + const setParticipant = useBoundStore((state) => state.setParticipant); + const queryParams = window.location.search; + + useEffect(() => { + if (queryParams && !(new URLSearchParams(queryParams).has("participant_id"))) { + setError("Unknown URL parameter, use ?participant_id="); + return; + } + try { + axios.get(API_BASE_URL + API_URLS.participant.current + queryParams).then(response => { + setParticipant(response.data); + }); + } catch (err) { + console.error(err); + setError(err); + } + }, [setError, queryParams, setParticipant]) + + if (error) { + return

Error: {error}

; + } + return ( diff --git a/frontend/src/components/App/App.scss b/frontend/src/components/App/App.scss index 1f37aba94..869e65478 100644 --- a/frontend/src/components/App/App.scss +++ b/frontend/src/components/App/App.scss @@ -1,3 +1,11 @@ .aha__app { position: relative; } + +.aha__error { + position: absolute; + margin-top: 10vh; + margin-left: 10vw; + color: $red; + font-size: 1.5em; +} diff --git a/frontend/src/components/Button/Button.scss b/frontend/src/components/Button/Button.scss index 5adfa6dbf..ed506aa29 100644 --- a/frontend/src/components/Button/Button.scss +++ b/frontend/src/components/Button/Button.scss @@ -6,4 +6,28 @@ opacity: 0.5; cursor: not-allowed; } + + &.primary { + @include btn-style($primary); + } + + &.secondary { + @include btn-style($secondary); + } + + &.success { + @include btn-style($success); + } + + &.positive { + @include btn-style($positive); + } + + &.warning { + @include btn-style($warning); + } + + &.negative { + @include btn-style($negative); + } } diff --git a/frontend/src/components/Circle/Circle.js b/frontend/src/components/Circle/Circle.js index a833acd57..15b7a3b98 100644 --- a/frontend/src/components/Circle/Circle.js +++ b/frontend/src/components/Circle/Circle.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from "react"; -import Timer from "util/timer"; +import {Timer }from "util/timer"; // Circle shows a counterclockwise circular animation const Circle = ({ diff --git a/frontend/src/components/Circle/Circle.test.js b/frontend/src/components/Circle/Circle.test.js index 9087bfb9d..1506cc34d 100644 --- a/frontend/src/components/Circle/Circle.test.js +++ b/frontend/src/components/Circle/Circle.test.js @@ -1,22 +1,34 @@ import React from 'react'; import { render, waitFor } from '@testing-library/react'; import Circle from './Circle'; -import Timer from 'util/timer'; -global.requestAnimationFrame = (callback) => { - setTimeout(callback, 0); -}; +const Timer = jest.requireActual('util/timer'); + +let timerSpy; + global.performance = { - now: () => Date.now() + now: () => Date.now(), }; -jest.mock('util/timer', () => ({ - __esModule: true, - default: jest.fn(), -})); - describe('Circle', () => { + beforeEach(() => { + timerSpy = jest.spyOn(Timer, 'default'); + + // mock requestAnimationFrame + let time = 0 + jest.spyOn(window, 'requestAnimationFrame').mockImplementation( + // @ts-expect-error + (cb) => { + // we can then use fake timers to preserve the async nature of this call + + setTimeout(() => { + time = time + 16 // 16 ms + cb(time) + }, 0) + }) + }); + afterEach(() => { jest.clearAllMocks(); }); @@ -27,40 +39,33 @@ describe('Circle', () => { expect(container.querySelectorAll('circle').length).toBe(2); }); - it('calls onTick and onFinish callbacks', async () => { - - Timer.mockImplementation(({ onTick, onFinish, duration }) => { - let time = 0; - const interval = 10; // Simulate a timer interval - const timerId = setInterval(() => { - time += interval; - if (onTick) { - onTick(time); - } - if (time >= duration) { - if (onFinish) { - onFinish(); - } - clearInterval(timerId); - } - }, interval); - return () => clearInterval(timerId); - }); - + it('calls onTick and onFinish callbacks when running is true', async () => { const onTick = jest.fn(); const onFinish = jest.fn(); - render(); + + render( + + ); await waitFor(() => expect(onTick).toHaveBeenCalled()); await waitFor(() => expect(onFinish).toHaveBeenCalled()); }); - it('starts timer when running is true', () => { - const startTime = 0; - const duration = 0; - render(); + it('does not start timer when running is false', () => { + const onTick = jest.fn(); + const onFinish = jest.fn(); + render(); - expect(Timer).toHaveBeenCalled(); + expect(timerSpy).not.toHaveBeenCalled(); + expect(onTick).not.toHaveBeenCalled(); + expect(onFinish).not.toHaveBeenCalled(); }); it('calculates style for circle animation correctly', () => { @@ -73,14 +78,4 @@ describe('Circle', () => { expect(percentageCircle).toHaveStyle('stroke-dashoffset: 0.5340707511102648;'); }); - it('does not start timer when running is false', () => { - const onTick = jest.fn(); - const onFinish = jest.fn(); - render(); - - expect(Timer).not.toHaveBeenCalled(); - expect(onTick).not.toHaveBeenCalled(); - expect(onFinish).not.toHaveBeenCalled(); - }); - }); diff --git a/frontend/src/components/Consent/Consent.js b/frontend/src/components/Consent/Consent.js index 25fb0d1cc..255ecfa1c 100644 --- a/frontend/src/components/Consent/Consent.js +++ b/frontend/src/components/Consent/Consent.js @@ -5,10 +5,12 @@ import { URLS } from "../../config"; import Button from "../Button/Button"; import Loading from "../Loading/Loading"; import { createConsent, useConsent } from "../../API"; +import classNames from "classnames"; // Consent is an experiment view that shows the consent text, and handles agreement/stop actions -const Consent = ({ title, text, experiment, participant, onNext, confirm, deny, urlQueryString }) => { +const Consent = ({ title, text, experiment, participant, onNext, confirm, deny }) => { const [consent, loadingConsent] = useConsent(experiment.slug); + const urlQueryString = window.location.search; // Listen for consent, and auto advance if already given useEffect(() => { @@ -54,9 +56,10 @@ const Consent = ({ title, text, experiment, participant, onNext, confirm, deny, const correction = width > 720 ? 300 : 250; + // Show consent return ( -
+

{title}

diff --git a/frontend/src/components/Consent/Consent.test.js b/frontend/src/components/Consent/Consent.test.js index 347c602d0..46598f878 100644 --- a/frontend/src/components/Consent/Consent.test.js +++ b/frontend/src/components/Consent/Consent.test.js @@ -58,7 +58,7 @@ describe('Consent', () => { it('auto advances if consent is already given', () => { useConsent.mockReturnValue([true, false]); const onNext = jest.fn(); - render(); + render(); expect(onNext).toHaveBeenCalled(); }); diff --git a/frontend/src/components/Experiment/Experiment.js b/frontend/src/components/Experiment/Experiment.js index 89b6e0351..30674e812 100644 --- a/frontend/src/components/Experiment/Experiment.js +++ b/frontend/src/components/Experiment/Experiment.js @@ -1,8 +1,10 @@ import React, { useState, useEffect, useCallback, useRef } from "react"; -import { useExperiment, useParticipant, getNextRound } from "../../API"; import { TransitionGroup, CSSTransition } from "react-transition-group"; import { withRouter } from "react-router-dom"; +import classNames from "classnames"; +import { useBoundStore } from "../../util/stores"; +import { createSession, getNextRound, useExperiment } from "../../API"; import Consent from "../Consent/Consent"; import DefaultPage from "../Page/DefaultPage"; import ToontjeHoger from "../ToontjeHoger/ToontjeHoger"; @@ -11,11 +13,11 @@ import Final from "../Final/Final"; import Loading from "../Loading/Loading"; import Playlist from "../Playlist/Playlist"; import Score from "../Score/Score"; -import StartSession from "../StartSession/StartSession"; import Trial from "../Trial/Trial"; import useResultHandler from "../../hooks/useResultHandler"; import Info from "../Info/Info"; -import classNames from "classnames"; +import FloatingActionButton from "components/FloatingActionButton/FloatingActionButton"; +import UserFeedback from "components/UserFeedback/UserFeedback"; // Experiment handles the main experiment flow: // - Loads the experiment and participant @@ -23,58 +25,90 @@ import classNames from "classnames"; // - It handles sending results to the server // - Implements participant_id as URL parameter, e.g. http://localhost:3000/bat?participant_id=johnsmith34 // Empty URL parameter "participant_id" is the same as no URL parameter at all -const Experiment = ({ match, location }) => { +const Experiment = ({ match }) => { const startState = { view: "LOADING" }; + // Stores + const setError = useBoundStore(state => state.setError); + const participant = useBoundStore((state) => state.participant); + const setSession = useBoundStore((state) => state.setSession); + const session = useBoundStore((state) => state.session); // Current experiment state - const [state, setState] = useState(startState); - const [playlist, setPlaylist] = useState(null); const [actions, setActions] = useState([]); - const session = useRef(null); + const [state, setState] = useState(startState); + const playlist = useRef(null); // API hooks const [experiment, loadingExperiment] = useExperiment(match.params.slug); - const urlQueryString = useRef(location.search); // location.search is a part of URL after (and incuding) "?" - const [participant, loadingParticipant] = useParticipant(urlQueryString.current); const loadingText = experiment ? experiment.loading_text : ""; const className = experiment ? experiment.class_name : ""; - // Load state, set random key - const loadState = useCallback((state) => { + // set random key before setting state + // this will assure that `state` will be recognized as an updated object + const updateState = useCallback((state) => { if (!state) return; state.key = Math.random(); setState(state); }, []); - // Create error view - const setError = useCallback( - (error) => { - loadState({ view: "ERROR", error }); - }, - [loadState] - ); - - const updateActions = useCallback( (currentActions) => { - let newActions = currentActions; - const newState = newActions.shift(); - loadState(newState); + const updateActions = useCallback((currentActions) => { + const newActions = currentActions; setActions(newActions); - }, [loadState, setActions]); + const newState = newActions.shift(); + updateState(newState); + }, [updateState]); - // Start first_round when experiment and partipant have been loaded - useEffect(() => { + const checkSession = async () => { + if (session) { + return session; + } + try { + const newSession = await createSession({experiment, participant, playlist}) + setSession(newSession); + return newSession; + } + catch(err) { + setError(`Could not create a session: ${err}`) + }; + }; + + const continueToNextRound = async() => { + const thisSession = await checkSession(); + // Try to get next_round data from server + const round = await getNextRound({ + session: thisSession + }); + if (round) { + updateActions(round.next_round); + } else { + setError( + "An error occured while loading the data, please try to reload the page. (Error: next_round data unavailable)" + ); + setState(undefined); + } + }; - if (urlQueryString.current && !(new URLSearchParams(urlQueryString.current).has("participant_id"))) { - setError("Unknown URL parameter, use ?participant_id="); - return + // trigger next action from next_round array, or call session/next_round + const onNext = async (doBreak) => { + if (!doBreak && actions.length) { + updateActions(actions); + } else { + continueToNextRound(); } + }; + // Start first_round when experiment and partipant have been loaded + useEffect(() => { // Check if done loading - if (!loadingExperiment && !loadingParticipant) { + if (!loadingExperiment && participant) { // Loading succeeded if (experiment) { - updateActions(experiment.next_round); + if (experiment.next_round.length) { + updateActions([ ...experiment.next_round ]); + } else { + setError("The first_round array from the ruleset is empty") + } } else { // Loading error setError("Could not load experiment"); @@ -84,35 +118,13 @@ const Experiment = ({ match, location }) => { experiment, loadingExperiment, participant, - loadingParticipant, setError, - updateActions, - loadState, + updateActions ]); - // trigger next action from next_round array, or call session/next_round - const onNext = async (doBreak) => { - if (!doBreak && actions.length) { - updateActions(actions); - } else { - // Try to get next_round data from server - const round = await getNextRound({ - session: session.current, - }); - if (round) { - updateActions(round.next_round); - } else { - setError( - "An error occured while loading the data, please try to reload the page. (Error: next_round data unavailable)" - ); - } - } - }; - const onResult = useResultHandler({ session, participant, - loadState, onNext, state, }); @@ -122,16 +134,11 @@ const Experiment = ({ match, location }) => { // Default attributes for every view const attrs = { experiment, - session, participant, - loadState, - playlist, loadingText, - setPlaylist, - setError, onResult, onNext, - urlQueryString, + playlist, ...state, }; @@ -155,12 +162,8 @@ const Experiment = ({ match, location }) => { // ------------------------- case "PLAYLIST": return ; - case "START_SESSION": - return ; case "LOADING": return ; - case "ERROR": - return
Error: {state.error}
; case "CONSENT": return ; case "INFO": @@ -184,15 +187,11 @@ const Experiment = ({ match, location }) => { // Fail safe if (!state) { - return
Error: No valid state
; + setError('No valid state'); } - let key = state.view; + const view = state.view; - // Force view refresh for consecutive questions - if (state.view === "QUESTION") { - key = state.question.key; - } return ( { ? "experiment-" + experiment.slug : "" )} + data-testid="experiment-wrapper" > - {(!loadingExperiment && experiment) || key === "ERROR" ? ( + {(!loadingExperiment && experiment) || view === "ERROR" ? ( - {render(state.view)} + {render(view)} + + {experiment?.feedback_info?.show_float_button && ( + + + + )} ) : (
)} + +
); diff --git a/frontend/src/components/Experiment/Experiment.test.js b/frontend/src/components/Experiment/Experiment.test.js new file mode 100644 index 000000000..728fe5ffc --- /dev/null +++ b/frontend/src/components/Experiment/Experiment.test.js @@ -0,0 +1,44 @@ +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { fireEvent, render, screen } from '@testing-library/react'; + +import Experiment from './Experiment'; + +jest.mock("../../util/stores"); + +// need to define the returned objects, otherwise the mocked function +// creates a different object every time, causing useEffect to trigger unnecessarily +const experimentObj = { + id: 24, slug: 'test', name: 'Test', playlists: [{id: 42, name: 'TestPlaylist'}], + next_round: [{view: 'INFO', button_label: 'Continue'}] +}; +const sessionObj = {data: {session: {id: 1}}}; +const nextRoundObj = {next_round: [{view: 'EXPLAINER'}]}; + +jest.mock("../../API", () => ({ + useExperiment: () => { + + return [experimentObj, false] + }, + createSession: () => Promise.resolve(sessionObj), + getNextRound: () => Promise.resolve(nextRoundObj) +})); + +describe('Experiment Component', () => { + + xit('renders with given props', async () => { + /** + * render is caught in an endless useEffect loop now + * skipping for the time being + */ + render( + + + + ); + await screen.findByTestId('experiment-wrapper'); + expect(screen.getByText('Continue')).toBeInTheDocument(); + + }); + +}); \ No newline at end of file diff --git a/frontend/src/components/Explainer/Explainer.js b/frontend/src/components/Explainer/Explainer.js index b35d020c5..bd24d8c1c 100644 --- a/frontend/src/components/Explainer/Explainer.js +++ b/frontend/src/components/Explainer/Explainer.js @@ -3,17 +3,17 @@ import Button from "../Button/Button"; // Explainer is an experiment view that shows a list of steps // If the button has not been clicked, onNext will be called automatically after the timer expires (in milliseconds). If timer == null, onNext will only be called after the button is clicked. -const Explainer = ({ instruction, button_label, steps = [], onNext, timer }) => { +const Explainer = ({ instruction, button_label, steps = [], timer = null, onNext }) => { useEffect( () => { if (timer != null) { const id = setTimeout(onNext, timer); return () => {clearTimeout(id)}; // if button has been clicked, clear timeout } - }) + }, [onNext, timer]) return ( -
+

{instruction}

    diff --git a/frontend/src/components/Explainer/Explainer.test.js b/frontend/src/components/Explainer/Explainer.test.js new file mode 100644 index 000000000..636c519fb --- /dev/null +++ b/frontend/src/components/Explainer/Explainer.test.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; + +import Explainer from './Explainer'; + +describe('Explainer Component', () => { + const props = { + instruction: 'Some instruction', + button_label: 'Next', + steps: [], + onNext: jest.fn(), + timer: 1 + } + + it('renders with given props', () => { + + render( + + ); + expect(screen.getByTestId('explainer')).toBeInTheDocument(); + }) + + + +}); \ No newline at end of file diff --git a/frontend/src/components/Final/Final.js b/frontend/src/components/Final/Final.js index e3357f35a..9e5c0ec63 100644 --- a/frontend/src/components/Final/Final.js +++ b/frontend/src/components/Final/Final.js @@ -6,15 +6,17 @@ import Social from "../Social/Social"; import { URLS } from "../../config"; import { finalizeSession } from "../../API"; +import useBoundStore from "../../util/stores"; import ParticipantLink from "../ParticipantLink/ParticipantLink"; import UserFeedback from "../UserFeedback/UserFeedback"; // Final is an experiment view that shows the final scores of the experiment // It can only be the last view of an experiment -const Final= ({ experiment, participant, session, score, final_text, action_texts, button, - onNext, history, show_participant_link, participant_id_only, - show_profile_link, social, feedback_info, points, rank, logo }) => { +const Final = ({ experiment, participant, score, final_text, action_texts, button, + onNext, history, show_participant_link, participant_id_only, + show_profile_link, social, feedback_info, points, rank, logo }) => { const [showScore, setShowScore] = useState(0); + const session = useBoundStore((state) => state.session); // Use a ref to prevent doing multiple increments // when the render is skipped @@ -46,17 +48,17 @@ const Final= ({ experiment, participant, session, score, final_text, action_text }; }, [score, showScore]); - const finalize = () => { + useEffect(() => { finalizeSession({ session, participant }); - } + }, [session, participant]); return (
    {rank && ( -
    - -

    {showScore} {points}

    -
    +
    + +

    {showScore} {points}

    +
    )}
    @@ -85,10 +87,9 @@ const Final= ({ experiment, participant, session, score, final_text, action_text {action_texts.all_experiments}
    { - history.push(URLS.profile); - }} + onClick={() => history.push(URLS.profile)} > {action_texts.profile}
    diff --git a/frontend/src/components/Final/Final.test.js b/frontend/src/components/Final/Final.test.js new file mode 100644 index 000000000..cb3d75eb9 --- /dev/null +++ b/frontend/src/components/Final/Final.test.js @@ -0,0 +1,132 @@ +import React from 'react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { BrowserRouter, Router } from 'react-router-dom'; +import { createMemoryHistory } from 'history' + +import Final from './Final'; // Adjust the import path as necessary + +// import useBoundStore from "../../util/stores"; + +// const session = useBoundStore((state) => state.session); + +// console.log(session, useBoundStore) + +jest.mock('../../util/stores', () => ({ + __esModule: true, + default: (fn) => { + const state = { + session: 1, + participant: 'participant-id', + }; + + return fn(state); + }, + useBoundStore: jest.fn() +})); + +jest.mock('../../API', () => ({ + finalizeSession: jest.fn(), +})); + +jest.mock('../../config', () => ({ + URLS: { + AMLHome: '/aml', + profile: '/profile', + }, +})); + +describe('Final Component', () => { + it('renders correctly with given props', () => { + render( + + + + ); + + expect(screen.getByText(/Final Text/i)).toBeInTheDocument(); + expect(screen.getByTestId('score')).toBeInTheDocument(); // Adjust based on how you display points + }); + + it('calls onNext prop when button is clicked', async () => { + const onNextMock = jest.fn(); + render( + + + + ); + + fireEvent.click(screen.getByText('Next')); + await waitFor(() => { + expect(onNextMock).toHaveBeenCalled(); + }); + }); + + it('does not render rank and social components when props are not provided', () => { + render( + + + + ); + + expect(screen.queryByText('Rank')).not.toBeInTheDocument(); + expect(screen.queryByText('Social')).not.toBeInTheDocument(); + }); + + it('navigates to profile page when profile link is clicked', async () => { + + const history = createMemoryHistory(); + + const mockActionTexts = { + all_experiments: 'All Experiments', + profile: 'Profile', + }; + + render( + + + + ); + + const profileLink = screen.getByTestId('profile-link'); + + expect(profileLink).toBeInTheDocument(); + + expect(history.location.pathname).toBe('/'); + + fireEvent.click(profileLink) + + expect(history.location.pathname).toBe('/profile'); + + }); + + it('calls finalizeSession with correct arguments', () => { + const { finalizeSession } = require('../../API'); + render( + + + + ); + + expect(finalizeSession).toHaveBeenCalledWith({ session: 1, participant: 'participant-id' }); + }); +}); diff --git a/frontend/src/components/FloatingActionButton/FloatingActionButton.js b/frontend/src/components/FloatingActionButton/FloatingActionButton.js new file mode 100644 index 000000000..76a01b943 --- /dev/null +++ b/frontend/src/components/FloatingActionButton/FloatingActionButton.js @@ -0,0 +1,78 @@ + +import React from 'react'; +import classNames from 'util/classNames'; + +/** + * The FloatingActionButton component is a reusable component that renders a floating action button with customizable position, icon, and content. + * @param {Object} props - The props object containing the following properties: + * - children: The content to be rendered inside the floating action button. + * - icon: The icon class name for the button. Default value is 'fa-comment'. + * - position: The position of the button. Possible values are 'bottom-left', 'bottom-right', 'top-left', 'top-right', 'center-left', 'center-right'. Default value is 'center-right'. + * - className: Additional CSS class names for the button. + * @returns {JSX.Element} The rendered FloatingActionButton component. + */ +const FloatingActionButton = ({ + children, + icon = 'fa-comment', + position = 'center-right', // 'bottom-left', 'bottom-right', 'top-left', 'top-right', 'center-left', 'center-right' (default) + className, +}) => { + + const [expanded, setExpanded] = React.useState(false); + + /** + * The getPositionClassNames function generates CSS class names based on the provided position string for a floating action button. + * Which is used to position the button and overlay. + * @param {string} position (e.g. 'bottom-left', 'center-right') + * @returns {string} (e.g. 'floating-action-button--bottom floating-action-button--left' or 'floating-action-button--center floating-action-button--right') + */ + const getPositionClassNames = (position) => { + const [vertical, horizontal] = position.split('-'); + return `floating-action-button--${vertical} ${horizontal ? `floating-action-button--${horizontal}` : ''}`; + } + + return (<> +
    + +
    + {children} +
    +
    +
    setExpanded(false)} + aria-hidden={expanded ? 'false' : 'true'} + role="presentation" + > +
    + + ); +}; + +export default FloatingActionButton; + diff --git a/frontend/src/components/FloatingActionButton/FloatingActionButton.scss b/frontend/src/components/FloatingActionButton/FloatingActionButton.scss new file mode 100644 index 000000000..bf3a6c488 --- /dev/null +++ b/frontend/src/components/FloatingActionButton/FloatingActionButton.scss @@ -0,0 +1,136 @@ +@import "../../scss/variables.scss"; + +.floating-action-button { + $self: &; + + display: flex; + flex-direction: row; + position: fixed; + z-index: 100; + cursor: pointer; + transition-property: transform, left, right, top, bottom, filter; + transition-duration: 0.2s; + transition-timing-function: ease-in-out; + filter: drop-shadow(0, 0, 0, rgba(0, 0, 0, 0)); + + &--expanded { + filter: drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.2)); + } + + &--left { + flex-direction: row-reverse; + right: auto; + left: -200px; + + &#{$self}--expanded { + left: 0px; + } + } + + &--right { + left: auto; + right: -200px; + + &#{$self}--expanded { + right: 0px; + } + } + + &--top { + align-items: flex-start; + bottom: auto; + top: 0px; + } + + &--bottom { + align-items: flex-end; + top: auto; + bottom: 0px; + } + + // vertically centered + &--center { + align-items: center; + top: 50%; + transform: translateY(-50%); + } + + &__toggle-button { + background: $gray; + border: none; + padding: .5rem; + + #{$self}--left & { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + + #{$self}--right & { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + } + + &__icon { + width: 24px; + height: 24px; + color: $black; + } + + &__content { + background: $gray; + border: none; + padding: .5rem; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + width: 200px; + min-height: 100px; + max-height: 100vh; + + #{$self}--left & { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + + #{$self}--right & { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + + #{$self}--top & { + border-top-left-radius: 0px; + border-top-right-radius: 0px; + } + + #{$self}--bottom & { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + } + } + + &__overlay { + position: fixed; + z-index: 99; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,.2); + opacity: 0; + pointer-events: none; + transition: opacity .2s ease-in-out; + + &--expanded { + opacity: 1; + pointer-events: all; + } + } +} diff --git a/frontend/src/components/FloatingActionButton/FloatingActionButton.test.js b/frontend/src/components/FloatingActionButton/FloatingActionButton.test.js new file mode 100644 index 000000000..684c83805 --- /dev/null +++ b/frontend/src/components/FloatingActionButton/FloatingActionButton.test.js @@ -0,0 +1,73 @@ +import React from 'react'; +import { render, fireEvent, screen } from '@testing-library/react'; +import FloatingActionButton from './FloatingActionButton'; + +describe('FloatingActionButton', () => { + it('renders the button with the initial icon', () => { + render(); + const icon = screen.getByTestId('floating-action-button__icon'); + expect(icon).toBeInTheDocument(); + expect(icon).toHaveClass('fa-comment'); + }); + + it('toggles the content on click', () => { + const { getByTestId } = render(
    Test Content
    ); + + const toggleButton = getByTestId('floating-action-button__toggle-button'); + fireEvent.click(toggleButton); + + const content = getByTestId('floating-action-button'); + expect(content).toHaveClass('floating-action-button--expanded'); + + fireEvent.click(toggleButton); + expect(content).not.toHaveClass('floating-action-button--expanded'); + }); + + it('displays the correct icon when expanded', () => { + const { getByTestId } = render(); + + const toggleButton = getByTestId('floating-action-button__toggle-button'); + fireEvent.click(toggleButton); + + const icon = getByTestId('floating-action-button__icon'); + expect(icon).toBeInTheDocument(); + expect(icon).toHaveClass('fa-times'); + }); + + it('closes the expanded content when the overlay is clicked', () => { + const { getByTestId } = render(
    Test Content
    ); + + const toggleButton = getByTestId('floating-action-button__toggle-button'); + fireEvent.click(toggleButton); + + const overlay = getByTestId('floating-action-button__overlay'); + fireEvent.click(overlay); + + const content = getByTestId('floating-action-button__content'); + expect(content).not.toHaveClass('floating-action-button--expanded'); + }); + + it('initially renders in a collapsed state', () => { + render(); + expect(screen.getByTestId('floating-action-button')).not.toHaveClass('floating-action-button--expanded'); + }); + + it('correctly applies position classes', () => { + render(); + expect(screen.getByTestId('floating-action-button')).toHaveClass('floating-action-button--bottom'); + expect(screen.getByTestId('floating-action-button')).toHaveClass('floating-action-button--left'); + }); + + it('applies custom class name', () => { + render(); + expect(screen.getByTestId('floating-action-button')).toHaveClass('custom-class'); + }); + + it('updates aria-hidden attribute of overlay correctly', () => { + render(); + const overlay = screen.getByTestId('floating-action-button__overlay'); + expect(overlay).toHaveAttribute('aria-hidden', 'true'); + fireEvent.click(screen.getByTestId('floating-action-button__toggle-button')); + expect(overlay).toHaveAttribute('aria-hidden', 'false'); + }); +}); diff --git a/frontend/src/components/Histogram/Histogram.scss b/frontend/src/components/Histogram/Histogram.scss index be67ce7fd..e2f480fea 100644 --- a/frontend/src/components/Histogram/Histogram.scss +++ b/frontend/src/components/Histogram/Histogram.scss @@ -1,8 +1,9 @@ .aha__histogram { display: flex; + aspect-ratio: 1/1; transform: scaleY(-1); - margin-bottom: 5px; margin-top: -10px; + div { border-radius: 1.5px; background: white; diff --git a/frontend/src/components/PlayButton/PlayButton.js b/frontend/src/components/PlayButton/PlayButton.js index 75a278d3d..3a11ccb24 100644 --- a/frontend/src/components/PlayButton/PlayButton.js +++ b/frontend/src/components/PlayButton/PlayButton.js @@ -6,8 +6,9 @@ const PlayButton = ({ playSection, isPlaying, className="" }) => { const [clicked, setClicked] = useState(false); return ( + <>
    {setClicked(true); playSection(0);} : undefined} @@ -17,6 +18,8 @@ const PlayButton = ({ playSection, isPlaying, className="" }) => { }} >
    +
    + ); }; diff --git a/frontend/src/components/PlayButton/PlayButton.scss b/frontend/src/components/PlayButton/PlayButton.scss index 7c6ccf0cc..6406c6a9c 100644 --- a/frontend/src/components/PlayButton/PlayButton.scss +++ b/frontend/src/components/PlayButton/PlayButton.scss @@ -19,8 +19,6 @@ $playIconSize: 30px; opacity: 0.5; } - - &::before { content: ""; transition: border 0.1s ease-out, margin 0.1s ease-out, width 0.1s ease-out, height 0.1s ease-out; @@ -52,3 +50,7 @@ $playIconSize: 30px; } } } + +.playbutton-spacer { + height: 87px; // Difference in height between PlayButton and Preload +} diff --git a/frontend/src/components/PlayButton/PlayCard.js b/frontend/src/components/PlayButton/PlayCard.js index f4aab4664..9ff57c5ca 100644 --- a/frontend/src/components/PlayButton/PlayCard.js +++ b/frontend/src/components/PlayButton/PlayCard.js @@ -1,29 +1,63 @@ import classNames from "classnames"; import Histogram from "../Histogram/Histogram"; +import { VISUALMATCHINGPAIRS } from "components/Playback/Playback"; +import { API_ROOT } from "config"; -const PlayCard = ({ onClick, registerUserClicks, playing, section }) => { +const PlayCard = ({ onClick, registerUserClicks, playing, section, view, showAnimation }) => { + const getImgSrc = (url) => { + if (url.startsWith("http")) { + return url; + } + return API_ROOT + url; + } + + const histogramBars = showAnimation ? 5 : 0; return ( -
    { - registerUserClicks(event.clientX, event.clientY); - onClick(); - }}> - { section.turned ? - { + registerUserClicks(event.clientX, event.clientY); + onClick(); + }} + role="button" + > + {section.turned ? + view === VISUALMATCHINGPAIRS ? +
    + {section.name} +
    + : + - : -
    -
    - } + : +
    +
    + }
    ); }; -export default PlayCard; \ No newline at end of file +export default PlayCard; diff --git a/frontend/src/components/PlayButton/PlayCard.scss b/frontend/src/components/PlayButton/PlayCard.scss index 80773063d..743051cd0 100644 --- a/frontend/src/components/PlayButton/PlayCard.scss +++ b/frontend/src/components/PlayButton/PlayCard.scss @@ -80,30 +80,45 @@ $playButtonWideDisplay: 16vh; &.nomatch { animation-duration: 0.7s; animation-name: nomatch; - animation-iteration-count: 1; + animation-iteration-count: 1; } &.lucky { animation-duration: 0.55s; animation-name: luckymatch; - animation-iteration-count: 1; + animation-iteration-count: 1; } &.memory { animation-duration: 0.8s; animation-name: memorymatch; - animation-iteration-count: 1; + animation-iteration-count: 1; } - + &.noevents { pointer-events: none; } + .front { + border-radius : .5rem; + + &--visual { + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + aspect-ratio: 1/1; + } + } + } + .back { background-color: $gray; border-radius: .5rem; } - + @media(min-aspect-ratio: 1/1) { .back, .turned { width: $playButtonWideDisplay; @@ -117,5 +132,4 @@ $playButtonWideDisplay: 16vh; height: $playButtonHighDisplay; } } - } diff --git a/frontend/src/components/PlayButton/PlayCard.test.js b/frontend/src/components/PlayButton/PlayCard.test.js new file mode 100644 index 000000000..9ca8cb405 --- /dev/null +++ b/frontend/src/components/PlayButton/PlayCard.test.js @@ -0,0 +1,104 @@ +import React from "react"; +import { render, fireEvent, screen } from "@testing-library/react"; +import PlayCard from "./PlayCard"; // Adjust the path as necessary + +jest.mock("../../util/stores"); + +describe("PlayCard Component Tests", () => { + const mockOnClick = jest.fn(); + const mockRegisterUserClicks = jest.fn(); + + const sectionProps = { + turned: false, + noevents: false, + inactive: false, + memory: false, + lucky: false, + nomatch: false, + seen: false, + url: "test.jpg", + name: "Test" + }; + + it("should render without crashing", () => { + render(); + }); + + it("should call onClick and registerUserClicks when clicked", () => { + render(); + fireEvent.click(screen.getByTestId("play-card")); + expect(mockOnClick).toHaveBeenCalled(); + expect(mockRegisterUserClicks).toHaveBeenCalled(); + }); + + it("should display the back of the card by default", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".back")).toBeInTheDocument(); + }); + + it("should display the front of the card when turned", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).toBeInTheDocument(); + expect(screen.getByTestId("play-card").querySelector(".front")).not.toBeInTheDocument(); + }); + + it("should display image for visual matching pairs view", () => { + render(); + expect(screen.getByAltText("Test")).toBeInTheDocument(); + }); + + it("should display histogram for non-visual matching pairs view", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).toHaveClass("aha__histogram"); + }); + + it("should display a disabled card when inactive", () => { + render(); + expect(screen.getByTestId("play-card")).toHaveClass("disabled"); + }); + + it("should display a card with no events when noevents", () => { + render(); + expect(screen.getByTestId("play-card")).toHaveClass("noevents"); + }); + + it("should display a card with memory when memory", () => { + render(); + expect(screen.getByTestId("play-card")).toHaveClass("memory"); + }); + + it("should display a card with lucky when lucky", () => { + render(); + expect(screen.getByTestId("play-card")).toHaveClass("lucky"); + }); + + it("should display a card with nomatch when nomatch", () => { + render(); + expect(screen.getByTestId("play-card")).toHaveClass("nomatch"); + }); + + it("should display a card with seen when seen", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".back")).toHaveClass("seen"); + }); + + it("should display a card with a histogram when turned and playing", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).toBeInTheDocument(); + }); + + it("should display a card with a histogram when turned and not playing", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).toBeInTheDocument(); + }); + + it("should display a card without a histogram when not turned and playing", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).not.toBeInTheDocument(); + }); + + it("should display a card without a histogram when not turned and not playing", () => { + render(); + expect(screen.getByTestId("play-card").querySelector(".aha__histogram")).not.toBeInTheDocument(); + }); +}); diff --git a/frontend/src/components/PlayButton/PlayerSmall.js b/frontend/src/components/PlayButton/PlayerSmall.js index 9e46b9178..2c23e84d1 100644 --- a/frontend/src/components/PlayButton/PlayerSmall.js +++ b/frontend/src/components/PlayButton/PlayerSmall.js @@ -2,8 +2,8 @@ import React from "react"; import PlayButton from "./PlayButton"; import classNames from "classnames"; -const PlayerSmall = ({ colorClass, style, label, onClick, playing, disabled}) => ( -
    +const PlayerSmall = ({ label, onClick, playing, disabled}) => ( +
    {label && <>

    {label}

    diff --git a/frontend/src/components/Playback/Autoplay.js b/frontend/src/components/Playback/Autoplay.js index 10bb080a0..f58d76c5e 100644 --- a/frontend/src/components/Playback/Autoplay.js +++ b/frontend/src/components/Playback/Autoplay.js @@ -1,17 +1,16 @@ -import React, { useRef, useEffect } from "react"; +import React, { useEffect, useState } from "react"; import Circle from "../Circle/Circle"; import ListenCircle from "../ListenCircle/ListenCircle"; -const AutoPlay = ({instruction, playConfig, playSection, time, startedPlaying, finishedPlaying, responseTime, className=''}) => { - // player state +const AutoPlay = ({instruction, showAnimation, playSection, startedPlaying, finishedPlaying, responseTime, className=''}) => { - const running = useRef(playConfig.auto_play); + const [running, setRunning] = useState(true); // Handle view logic useEffect(() => { playSection(0) - }, [playConfig, startedPlaying]); + }, [playSection, startedPlaying]); // Render component return ( @@ -21,14 +20,15 @@ const AutoPlay = ({instruction, playConfig, playSection, time, startedPlaying, f running={running} duration={responseTime} color="white" - animateCircle={playConfig.show_animation} + animateCircle={showAnimation} onFinish={() => { // Stop audio + setRunning(false); finishedPlaying(); }} />
    - {playConfig.show_animation + {showAnimation ? { +const ImagePlayer = (props) => { const playSection = props.playSection; // extraContent callback can be used to add content to each player const extraContent = useCallback( (index) => { - const spectrograms = props.playConfig.spectrograms; - if (!spectrograms) { - return

    Warning: No spectrograms found

    ; + const images = props.images; + if (!images) { + return

    Warning: No images found

    ; } - const labels = props.playConfig.spectrogram_labels; + const labels = props.image_labels; - if (index >= 0 && index < spectrograms.length) { + if (index >= 0 && index < images.length) { return ( -
    +
    Spectrogram { playSection(index); }} @@ -32,14 +32,14 @@ const SpectrogramPlayer = (props) => { return

    Warning: No spectrograms available for index {index}

    ; } }, - [props.playConfig.spectrograms, props.playConfig.spectrogram_labels, playSection] + [props.images, props.image_labels, playSection] ); return ( -
    +
    ); }; -export default SpectrogramPlayer; +export default ImagePlayer; diff --git a/frontend/src/components/Playback/SpectrogramPlayer.scss b/frontend/src/components/Playback/ImagePlayer.scss similarity index 97% rename from frontend/src/components/Playback/SpectrogramPlayer.scss rename to frontend/src/components/Playback/ImagePlayer.scss index 726896acb..a037c6530 100644 --- a/frontend/src/components/Playback/SpectrogramPlayer.scss +++ b/frontend/src/components/Playback/ImagePlayer.scss @@ -1,4 +1,4 @@ -.aha__spectrogram-player { +.aha__image-player { max-width: 100vw; .player-wrapper { @@ -10,7 +10,7 @@ margin-bottom: 0; } - .spectrogram { + .image { max-width: 400px; width: calc(100% - 160px); height: 100px; diff --git a/frontend/src/components/Playback/MatchingPairs.js b/frontend/src/components/Playback/MatchingPairs.js index f38431d21..d21784b6f 100644 --- a/frontend/src/components/Playback/MatchingPairs.js +++ b/frontend/src/components/Playback/MatchingPairs.js @@ -1,29 +1,40 @@ -import React, {useRef, useState} from "react"; +import React, { useRef, useState } from "react"; import classNames from "classnames"; +import { scoreIntermediateResult } from "../../API"; +import useBoundStore from "util/stores"; + import PlayCard from "../PlayButton/PlayCard"; +export const SCORE_FEEDBACK_DISPLAY = { + SMALL_BOTTOM_RIGHT: 'small-bottom-right', + LARGE_TOP: 'large-top', + HIDDEN: 'hidden', +} + const MatchingPairs = ({ playSection, sections, playerIndex, + showAnimation, finishedPlaying, - stopAudioAfter, + scoreFeedbackDisplay = SCORE_FEEDBACK_DISPLAY.LARGE_TOP, // 'large-top' (default) | 'small-bottom-right' | 'hidden' submitResult, }) => { + const xPosition = useRef(-1); const yPosition = useRef(-1); const score = useRef(undefined); const firstCard = useRef(-1); const secondCard = useRef(-1); const [total, setTotal] = useState(100); - const [message, setMessage] = useState('Pick a card') + const [message, setMessage] = useState('Pick a card'); const [end, setEnd] = useState(false); const columnCount = sections.length > 6 ? 4 : 3; - const resultBuffer = useRef([]); - - const startTime = useRef(Date.now()); + const participant = useBoundStore(state => state.participant); + const session = useBoundStore(state => state.session); + const setError = useBoundStore(state => state.setError); const setScoreMessage = (score) => { switch (score) { @@ -40,10 +51,6 @@ const MatchingPairs = ({ yPosition.current = posY; } - const formatTime = (time) => { - return time/1000; - } - // Show (animated) feedback after second click on second card or finished playing const showFeedback = () => { @@ -51,36 +58,40 @@ const MatchingPairs = ({ // Check if this turn has finished if (turnedCards.length === 2) { // update total score & display current score - setTotal(total+score.current); + setTotal(total + score.current); setMessage(setScoreMessage(score.current)); - // show end of turn animations - switch (score.current) { - case 10: - turnedCards[0].lucky = true; - turnedCards[1].lucky = true; - break; - case 20: - turnedCards[0].memory = true; - turnedCards[1].memory = true; - break; - default: - turnedCards[0].nomatch = true; - turnedCards[1].nomatch = true; - // reset nomatch cards for coming turns - setTimeout(() => { - turnedCards[0].nomatch = false; - turnedCards[1].nomatch = false; - }, 700); - break; + setMessage(setScoreMessage(score.current)); + // show end of turn animations if enabled + if (showAnimation) { + switch (score.current) { + case 10: + turnedCards[0].lucky = true; + turnedCards[1].lucky = true; + break; + case 20: + turnedCards[0].memory = true; + turnedCards[1].memory = true; + break; + default: + turnedCards[0].nomatch = true; + turnedCards[1].nomatch = true; + // reset nomatch cards for coming turns + setTimeout(() => { + turnedCards[0].nomatch = false; + turnedCards[1].nomatch = false; + }, 700); + break; + } } + // add third click event to finish the turn document.getElementById('root').addEventListener('click', finishTurn); return; } } - const checkMatchingPairs = (index) => { + const checkMatchingPairs = async (index) => { const currentCard = sections[index]; const turnedCards = sections.filter(s => s.turned); if (turnedCards.length < 2) { @@ -93,17 +104,12 @@ const MatchingPairs = ({ currentCard.noevents = true; // check for match const lastCard = sections[firstCard.current]; - if (lastCard.group === currentCard.group) { - // match - if (currentCard.seen) { - score.current = 20; - } else { - score.current = 10; - } - } else { - if (currentCard.seen) { score.current = -10; } - else { score.current = 0; } - }; + const imScore = await scoreIntermediateResult({ session, participant, result: { currentCard, lastCard } }); + if (!imScore) { + setError('We cannot currently proceed with the game. Try again later'); + return; + } + score.current = imScore.score; currentCard.seen = true; lastCard.seen = true; showFeedback(); @@ -116,12 +122,6 @@ const MatchingPairs = ({ // clear message setMessage(''); } - resultBuffer.current.push({ - selectedSection: currentCard.id, - cardIndex: index, - score: score.current, - timestamp: formatTime(Date.now() - startTime.current) - }); } return; }; @@ -149,42 +149,66 @@ const MatchingPairs = ({ } if (end) { - submitResult({score: total, moves: resultBuffer.current}); + // submit empty result, which will trigger a call to `next_round` + submitResult({}); } return (
    -
    -
    -
    -
    -
    -
    Score:
    {total}
    +
    + + + {scoreFeedbackDisplay !== SCORE_FEEDBACK_DISPLAY.HIDDEN && } + +
    + {Object.keys(sections).map((index) => ( + { + playSection(index); + checkMatchingPairs(index); + }} + registerUserClicks={registerUserClicks} + playing={playerIndex === index} + section={sections[index]} + onFinish={showFeedback} + showAnimation={showAnimation} + /> + ) + )}
    +
    + + ) +} -
    - {Object.keys(sections).map((index) => ( - { - playSection(index); - checkMatchingPairs(index); - }} - registerUserClicks={registerUserClicks} - playing={playerIndex === index} - section={sections[index]} - onFinish={showFeedback} - stopAudioAfter={stopAudioAfter} - /> - ) - )} +const ScoreFeedback = ({ + message, + scoreFeedbackDisplay = SCORE_FEEDBACK_DISPLAY.LARGE_TOP, + score, + total, +}) => { + return ( +
    +
    +
    +
    +
    +
    Score:
    {total}
    ) } export default MatchingPairs; + diff --git a/frontend/src/components/Playback/MatchingPairs.scss b/frontend/src/components/Playback/MatchingPairs.scss index a27622f58..d2286bcd0 100644 --- a/frontend/src/components/Playback/MatchingPairs.scss +++ b/frontend/src/components/Playback/MatchingPairs.scss @@ -13,10 +13,10 @@ } .aha__matching-pairs { - position: absolute; - left: 50%; - transform: translateX(-50%); - margin: 0px auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; } @media (min-aspect-ratio: 1/1) { @@ -45,7 +45,26 @@ .playing-board { display: inline-grid; - max-width: 100%; +} + +.matching-pairs__score-feedback { + + font-weight: 700; + + &--small-bottom-right { + position: fixed; + justify-content: flex-end; + bottom: 0; + right: 0; + text-align: right; + font-size: 0.5rem; + backface-visibility: hidden; + font-weight: normal; + + .matching-pairs__feedback, .matching-pairs__score { + float: none; + } + } } .matching-pairs__feedback, .matching-pairs__score { @@ -53,7 +72,6 @@ line-height: 1; text-align: center; padding-bottom: .7rem; - font-weight: 700; font-size: 95%; width: auto; @@ -78,8 +96,24 @@ &.fbmisremembered { color: $red; } -} + &.nomessage { + opacity: 0; + } +} .matching-pairs__score { float: right; + + &.noscore { + opacity: 0; + } } + +.turnscore { + position: fixed; + bottom: -2rem; + left: -2rem; + &.noturnscore { + opacity: 0; + } +} \ No newline at end of file diff --git a/frontend/src/components/Playback/MatchingPairs.test.js b/frontend/src/components/Playback/MatchingPairs.test.js index 4ceac1208..47a63e812 100644 --- a/frontend/src/components/Playback/MatchingPairs.test.js +++ b/frontend/src/components/Playback/MatchingPairs.test.js @@ -1,10 +1,12 @@ import React from 'react'; import { render } from '@testing-library/react'; -import MatchingPairs from './MatchingPairs'; +import MatchingPairs, { SCORE_FEEDBACK_DISPLAY } from './MatchingPairs'; -jest.mock("../PlayButton/PlayCard", () => (props) => ( -
    -)); +jest.mock("../../util/stores", () => ({ + __esModule: true, + default: jest.fn(), + useBoundStore: jest.fn() +})); describe('MatchingPairs Component', () => { @@ -12,8 +14,10 @@ describe('MatchingPairs Component', () => { playSection: jest.fn(), playerIndex: 0, finishedPlaying: jest.fn(), - stopAudioAfter: jest.fn(), + onFinish: jest.fn(), + stopAudioAfter: 4.0, submitResult: jest.fn(), + showAnimation: false }; it('displays three columns when sections length is less than or equal to 6', () => { @@ -25,6 +29,30 @@ describe('MatchingPairs Component', () => { it('displays four columns when sections length is greater than 6', () => { const sections = new Array(7).fill({}).map((_, index) => ({ id: index })); const { container } = render(); - expect(container.querySelector('.playing-board--two-columns')).not.toBeInTheDocument(); + expect(container.querySelector('.playing-board--three-columns')).not.toBeInTheDocument(); + }); + + it('displays score feedback when scoreFeedbackDisplay is not HIDDEN', () => { + const sections = new Array(6).fill({}).map((_, index) => ({ id: index })); + const { container } = render(); + expect(container.querySelector('.matching-pairs__score-feedback')).toBeInTheDocument(); + }); + + it('does not display score feedback when scoreFeedbackDisplay is HIDDEN', () => { + const sections = new Array(6).fill({}).map((_, index) => ({ id: index })); + const { container } = render(); + expect(container.querySelector('.matching-pairs__score-feedback')).not.toBeInTheDocument(); + }); + + it('displays score feedback on the top when scoreFeedbackDisplay is LARGE_TOP', () => { + const sections = new Array(6).fill({}).map((_, index) => ({ id: index })); + const { container } = render(); + expect(container.querySelector('.matching-pairs__score-feedback--small-bottom-right')).not.toBeInTheDocument(); + }); + + it('displays score feedback on the bottom right when scoreFeedbackDisplay is SMALL_BOTTOM_RIGHT', () => { + const sections = new Array(6).fill({}).map((_, index) => ({ id: index })); + const { container } = render(); + expect(container.querySelector('.matching-pairs__score-feedback--small-bottom-right')).toBeInTheDocument(); }); }); diff --git a/frontend/src/components/Playback/MultiPlayer.js b/frontend/src/components/Playback/MultiPlayer.js index 4029d516f..b7cff4418 100644 --- a/frontend/src/components/Playback/MultiPlayer.js +++ b/frontend/src/components/Playback/MultiPlayer.js @@ -2,13 +2,11 @@ import React from "react"; import PlayerSmall from "../PlayButton/PlayerSmall"; import classNames from "classnames"; -import { getPlayerLabel } from "../../util/label"; - const MultiPlayer = ({ playSection, sections, playerIndex, - playConfig, + labels, disabledPlayers, extraContent, }) => { @@ -30,13 +28,7 @@ const MultiPlayer = ({ disabledPlayers.includes(parseInt(index)) } label={ - playConfig.label_style - ? getPlayerLabel( - index, - playConfig.label_style, - playConfig.labels || [] - ) - : "" + labels? labels[index] : "" } playing={playerIndex === index} /> diff --git a/frontend/src/components/Playback/Playback.js b/frontend/src/components/Playback/Playback.js index f1a856d61..c728fcda2 100644 --- a/frontend/src/components/Playback/Playback.js +++ b/frontend/src/components/Playback/Playback.js @@ -7,26 +7,24 @@ import { playAudio, pauseAudio } from "../../util/audioControl"; import AutoPlay from "./Autoplay"; import PlayButton from "../PlayButton/PlayButton"; import MultiPlayer from "./MultiPlayer"; -import SpectrogramPlayer from "./SpectrogramPlayer"; +import ImagePlayer from "./ImagePlayer"; import MatchingPairs from "./MatchingPairs"; import Preload from "../Preload/Preload"; +import VisualMatchingPairs from "components/VisualMatchingPairs/VisualMatchingPairs"; export const AUTOPLAY = "AUTOPLAY"; export const BUTTON = "BUTTON"; export const MULTIPLAYER = "MULTIPLAYER"; -export const SPECTROGRAM = "SPECTROGRAM"; +export const IMAGE = "IMAGE"; export const MATCHINGPAIRS = "MATCHINGPAIRS"; export const PRELOAD = "PRELOAD"; +export const VISUALMATCHINGPAIRS = "VISUALMATCHINGPAIRS"; const Playback = ({ - playerType, - sections, - instruction, + playbackArgs, onPreloadReady, - preloadMessage = '', autoAdvance, responseTime, - playConfig = {}, submitResult, startedPlaying, finishedPlaying, @@ -38,11 +36,16 @@ const Playback = ({ const setView = (view, data = {}) => { setState({ view, ...data }); } + + // check if the users device is webaudio compatible + const playMethod = webAudio.compatibleDevice() ? playbackArgs.play_method : 'EXTERNAL'; + + const sections = playbackArgs.sections; // Keep track of which player has played, in a an array of player indices const [hasPlayed, setHasPlayed] = useState([]); const prevPlayerIndex = useRef(-1); - + useEffect(() => { const index = prevPlayerIndex.current; if (index !== -1) { @@ -66,161 +69,163 @@ const Playback = ({ }, [cancelAudioListeners]); // Audio ended playing - const onAudioEnded = useCallback(() => { - setPlayerIndex(-1); + const onAudioEnded = useCallback((index) => { + + // If the player index is not the last player index, return + if (lastPlayerIndex.current === index) { + setPlayerIndex(-1); + } - //AJ: added for categorization experiment for form activation after playback and auto_advance to work properly - if (playConfig.timeout_after_playback) { - setTimeout(finishedPlaying, playConfig.timeout_after_playback); + if (playbackArgs.timeout_after_playback) { + setTimeout(finishedPlaying, playbackArgs.timeout_after_playback); } else { finishedPlaying(); } - }, []); - + }, [playbackArgs, finishedPlaying]); + // Keep track of last player index useEffect(() => { lastPlayerIndex.current = playerIndex; }, [playerIndex]); - if (playConfig.play_method === 'EXTERNAL') { - webAudio.closeWebAudio(); + if (playMethod === 'EXTERNAL') { + webAudio.closeWebAudio(); } - // Play section with given index - const playSection = useCallback( - (index = 0) => { - - if (index !== lastPlayerIndex.current) { - // Load different audio - if (prevPlayerIndex.current !== -1) { - pauseAudio(playConfig); - } - // Store player index - setPlayerIndex(index); - - // Determine if audio should be played - if (playConfig.mute) { - setPlayerIndex(-1); - pauseAudio(playConfig); - return; - } - const playheadShift = getPlayheadShift(); - let latency = playAudio(playConfig, sections[index], playheadShift); - - // Cancel active events - cancelAudioListeners(); - - // listen for active audio events - if (playConfig.play_method === 'BUFFER') { - activeAudioEndedListener.current = webAudio.listenOnce("ended", onAudioEnded); - } else { - activeAudioEndedListener.current = audio.listenOnce("ended", onAudioEnded); - } - - // Compensate for audio latency and set state to playing - setTimeout(startedPlaying && startedPlaying(), latency); - return; - } - - // Stop playback - if (lastPlayerIndex.current === index) { - pauseAudio(playConfig); - setPlayerIndex(-1); - return; - } - }, - [playAudio, pauseAudio, sections, activeAudioEndedListener, cancelAudioListeners, startedPlaying, onAudioEnded] - ); - - const getPlayheadShift = () => { + const getPlayheadShift = useCallback(() => { /* if the current Playback view has resume_play set to true, retrieve previous Playback view's decisionTime from sessionStorage */ - return playConfig.resume_play ? + return playbackArgs.resume_play ? parseFloat(window.sessionStorage.getItem('decisionTime')) : 0; - } + }, [playbackArgs] + ) + + // Play section with given index + const playSection = useCallback((index = 0) => { + if (index !== lastPlayerIndex.current) { + // Load different audio + if (prevPlayerIndex.current !== -1) { + pauseAudio(playMethod); + } + // Store player index + setPlayerIndex(index); + // Determine if audio should be played + if (playbackArgs.mute) { + setPlayerIndex(-1); + pauseAudio(playMethod); + return; + } + + const playheadShift = getPlayheadShift(); + let latency = playAudio(sections[index], playMethod, playheadShift + playbackArgs.play_from); + // Cancel active events + cancelAudioListeners(); + // listen for active audio events + if (playMethod === 'BUFFER') { + activeAudioEndedListener.current = webAudio.listenOnce("ended", () => onAudioEnded(index)); + } else { + activeAudioEndedListener.current = audio.listenOnce("ended", () => onAudioEnded(index)); + } + // Compensate for audio latency and set state to playing + setTimeout(startedPlaying && startedPlaying(), latency); + return; + } + // Stop playback + if (lastPlayerIndex.current === index) { + pauseAudio(playMethod); + setPlayerIndex(-1); + return; + } + }, [sections, activeAudioEndedListener, cancelAudioListeners, getPlayheadShift, playbackArgs, playMethod, startedPlaying, onAudioEnded] + ); // Local logic for onfinished playing const onFinishedPlaying = useCallback(() => { setPlayerIndex(-1); - pauseAudio(playConfig); + pauseAudio(playMethod); finishedPlaying && finishedPlaying(); - }, [finishedPlaying]); + }, [finishedPlaying, playMethod]); // Stop audio on unmount useEffect( - () => () => { - pauseAudio(playConfig); + () => { + return () => pauseAudio(playMethod); }, - [] + [playMethod] ); - // Autoplay - useEffect(() => { - playConfig.auto_play && playSection(0); - }, [playConfig.auto_play, playSection]); - const render = (view) => { const attrs = { - sections, - setView, - instruction, - preloadMessage, autoAdvance, - responseTime, - playConfig, - startedPlaying, - playerIndex, finishedPlaying: onFinishedPlaying, - playSection, lastPlayerIndex, + playSection, + playerIndex, + responseTime, + sections, setPlayerIndex, - submitResult + setView, + showAnimation: playbackArgs.show_animation, + startedPlaying, + submitResult, + view, }; switch (state.view) { case PRELOAD: return ( - { - setView(playerType); + { + setView(playbackArgs.view); onPreloadReady(); }} /> ); case AUTOPLAY: - return ; + return ; case BUTTON: return ( -1} - disabled={playConfig.play_once && hasPlayed.includes(0)} + disabled={playbackArgs.play_once && hasPlayed.includes(0)} /> ); case MULTIPLAYER: return ( ); - case SPECTROGRAM: + case IMAGE: return ( - ); case MATCHINGPAIRS: return ( + ); + case VISUALMATCHINGPAIRS: + return ( + ); default: @@ -230,7 +235,7 @@ const Playback = ({ return (
    -
    {render(playerType)}
    {" "} +
    {render(playbackArgs.view)}
    {" "}
    ); }; diff --git a/frontend/src/components/Playback/Playback.test.js b/frontend/src/components/Playback/Playback.test.js new file mode 100644 index 000000000..4ee8562ba --- /dev/null +++ b/frontend/src/components/Playback/Playback.test.js @@ -0,0 +1,45 @@ +import React from 'react'; +import { render } from '@testing-library/react'; + +import Playback from './Playback'; + +jest.mock("../../util/stores"); + +describe('Playback', () => { + + const basicProps = { + autoAdvance: false, + responseTime: 42, + onPreloadReady: jest.fn(), + startedPlaying: jest.fn(), + finishedPlaying: jest.fn(), + submitResult: jest.fn(), + } + + let playbackArgs = { + view: 'BUTTON', + show_animation: false, + instruction: 'Listen, just listen!', + play_method: 'HTML', + ready_time: 1, + preload_message: 'Get ready', + sections: [{id: 13, url: 'some/fancy/tune.mp3'}] + }; + + it('renders itself', () => { + const { container } = render( + ); + expect(container.querySelector('.aha__playback')).toBeInTheDocument(); + }); + + it('shows Preload during ready_time', () => { + const { container } = render( + ); + expect(container.querySelector('.aha__listen')).toBeInTheDocument(); + }); + +}) \ No newline at end of file diff --git a/frontend/src/components/Playlist/Playlist.js b/frontend/src/components/Playlist/Playlist.js index 926570c61..064db59da 100644 --- a/frontend/src/components/Playlist/Playlist.js +++ b/frontend/src/components/Playlist/Playlist.js @@ -1,53 +1,42 @@ import React, { useEffect } from "react"; -import Loading from "../Loading/Loading"; // Playlist is an experiment view, that handles (auto)selection of a playlist -const Playlist = ({ experiment, instruction, setPlaylist, onNext, setError }) => { +const Playlist = ({ experiment, instruction, onNext, playlist }) => { const playlists = experiment.playlists; - // Handle empty or single playlist useEffect(() => { - if (playlists.length === 0) { - setError("No playlist available"); - } - - if (playlists.length === 1) { - // Only one playlist: advance - setPlaylist(playlists[0].id); + if (playlists.length < 2) { + // silently proceed to next view onNext(); } - }, [playlists, setError, setPlaylist, onNext]); + }, [playlists, onNext]) // Handle playlist action - switch (playlists.length) { - case 0: - case 1: - return ; - default: - return ( -
    -

    {instruction}

    - -
      - {playlists.map((playlist, index) => ( - { - setPlaylist(playlistId); - onNext(); - }} - delay={index * 250} - /> - ))} -
    -
    - ); - } + if (playlists.length > 1) { + return ( +
    +

    {instruction}

    +
      + {playlists.map((playlistItem, index) => ( + { + playlist.current = playlistId; + onNext(); + }} + delay={index * 250} + /> + ))} +
    +
    + ); + } else { return null }; }; const PlaylistItem = ({ delay, playlist, onClick }) => (
  • { onClick(playlist.id); }} diff --git a/frontend/src/components/Playlist/Playlist.test.js b/frontend/src/components/Playlist/Playlist.test.js new file mode 100644 index 000000000..8b472cbd8 --- /dev/null +++ b/frontend/src/components/Playlist/Playlist.test.js @@ -0,0 +1,38 @@ +import React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; + +import Playlist from './Playlist'; + +jest.mock("../../util/stores"); + +describe('Playlist Component', () => { + const playlist = { current: 25 }; + const experimentProp = { slug: 'test-experiment', playlists: [{id: 42}, {id: 43}] }; + const onNext = jest.fn(); + + it('renders correctly with given props', () => { + render( + + ) + expect(screen.getByTestId('playlist-instruction')).toBeInTheDocument(); + const playlistItems = screen.getAllByTestId('playlist-item'); + expect(playlistItems.length === 2); + }); + + it('calls registerPlaylist when playlist item is clicked', () => { + render( + + ) + fireEvent.click(screen.getAllByTestId('playlist-item')[0]); + expect((onNext).toHaveBeenCalled); + }) + + it('does not render with less than 2 playlists', () => { + experimentProp.playlists = [{id: 42}] + render( + + ) + expect((onNext).toHaveBeenCalled); + expect(screen.queryByTestId('playlist-instruction')).not.toBeInTheDocument(); + }); +}); \ No newline at end of file diff --git a/frontend/src/components/Preload/Preload.js b/frontend/src/components/Preload/Preload.js index 7a28ee7d9..eb3fa258b 100644 --- a/frontend/src/components/Preload/Preload.js +++ b/frontend/src/components/Preload/Preload.js @@ -1,75 +1,86 @@ -import React, { useEffect, useRef, useState } from "react"; +import React, { useEffect, useState } from "react"; +import classNames from "classnames"; +import { MEDIA_ROOT } from "../../config"; import ListenFeedback from "../Listen/ListenFeedback"; import CountDown from "../CountDown/CountDown"; import * as audio from "../../util/audio"; import * as webAudio from "../../util/webAudio"; -import { MEDIA_ROOT } from "../../config"; -import classNames from "classnames"; // Preload is an experiment screen that continues after a given time or after an audio file has been preloaded -const Preload = ({ instruction, pageTitle, duration, sections, playConfig, onNext }) => { - const timeHasPassed = useRef(false); - const audioIsAvailable = useRef(false); - const [loaderDuration, setLoaderDuration] = useState(duration); +const Preload = ({ sections, playMethod, duration, preloadMessage, pageTitle, onNext }) => { + const [timePassed, setTimePassed] = useState(false); + const [audioAvailable, setAudioAvailable] = useState(false); const [overtime, setOvertime] = useState(false); + const [loaderDuration, setLoaderDuration] = useState(duration); const onTimePassed = () => { - timeHasPassed.current = true; + setTimePassed(true) setLoaderDuration(0); setOvertime(true); - if (audioIsAvailable.current) { + if (audioAvailable) { onNext(); } }; // Audio preloader - useEffect(() => { - if (playConfig.play_method === 'BUFFER') { + useEffect(() => { + const preloadResources = async () => { + if (playMethod === 'NOAUDIO') { - // Use Web-audio and preload sections in buffers - sections.map((section, index) => { - // skip Preload if the section has already been loaded in the previous action - if (webAudio.checkSectionLoaded(section)) { - onNext(); - return undefined; - } - // Clear buffers if this is the first section - if (index === 0) { - webAudio.clearBuffers(); - } - - // Load sections in buffer - return webAudio.loadBuffer(section.id, section.url, () => { - if (index === (sections.length - 1)) { - audioIsAvailable.current = true; - if (timeHasPassed.current) { - onNext(); - } - } - }); - }) - } else { - if (playConfig.play_method === 'EXTERNAL') { - webAudio.closeWebAudio(); + await Promise.all(sections.map((section) => fetch(MEDIA_ROOT + section.url))); + + return onNext(); } - // Load audio until available - // Return remove listener - return audio.loadUntilAvailable(MEDIA_ROOT + sections[0].url, () => { - audioIsAvailable.current = true; - if (timeHasPassed.current) { - onNext(); + + if (playMethod === 'BUFFER') { + + // Use Web-audio and preload sections in buffers + sections.map((section, index) => { + // skip Preload if the section has already been loaded in the previous action + if (webAudio.checkSectionLoaded(section)) { + onNext(); + return undefined; + } + // Clear buffers if this is the first section + if (index === 0) { + webAudio.clearBuffers(); + } + + // Load sections in buffer + return webAudio.loadBuffer(section.id, section.url, () => { + if (index === (sections.length - 1)) { + setAudioAvailable(true); + if (timePassed) { + onNext(); + } + } + }); + }) + } else { + if (playMethod === 'EXTERNAL') { + webAudio.closeWebAudio(); } - }); - } - }, [sections, onNext]); + // Load audio until available + // Return remove listener + return audio.loadUntilAvailable(sections[0].url, () => { + setAudioAvailable(true); + if (timePassed) { + onNext(); + } + }); + } + } + + preloadResources(); + }, [sections, playMethod, onNext, timePassed]); return ( = 1 && } /> diff --git a/frontend/src/components/Question/_ButtonArray.js b/frontend/src/components/Question/_ButtonArray.js index 61e5e9659..f5f787e7f 100644 --- a/frontend/src/components/Question/_ButtonArray.js +++ b/frontend/src/components/Question/_ButtonArray.js @@ -4,7 +4,7 @@ import classNames from "classnames"; import { renderLabel } from "../../util/label"; // ButtonArray is a question view for selecting a single option from a list of buttons -const ButtonArray = ({ question, disabled, onChange }) => { +const ButtonArray = ({ question, disabled, onChange, value }) => { const buttonPress = (value) => { if (disabled) { @@ -15,7 +15,6 @@ const ButtonArray = ({ question, disabled, onChange }) => { } } - return (
    @@ -29,6 +28,7 @@ const ButtonArray = ({ question, disabled, onChange }) => { key={question.key + index} onChange={buttonPress} disabled={disabled} + checked={value === val} /> ))}
    @@ -36,11 +36,12 @@ const ButtonArray = ({ question, disabled, onChange }) => { ) } -const ToggleButton = ({ label, value, index, name, disabled, onChange }) => { +const ToggleButton = ({ label, value, index, name, disabled, onChange, checked }) => { const disabledClasses = disabled ? 'disabled' : ''; + const checkedClasses = checked ? 'checked' : ''; return ( ) diff --git a/frontend/src/components/Question/_ButtonArray.scss b/frontend/src/components/Question/_ButtonArray.scss index 34d86fb13..84c560ffc 100644 --- a/frontend/src/components/Question/_ButtonArray.scss +++ b/frontend/src/components/Question/_ButtonArray.scss @@ -31,10 +31,14 @@ } &.invisible-text { - .btn.btn-secondary:not(.disabled):not(:disabled) { + .btn.btn-secondary { color: transparent; width: 4rem; height: 4rem; + + &:hover { + color: transparent; + } } } } diff --git a/frontend/src/components/Question/_ButtonArray.test.js b/frontend/src/components/Question/_ButtonArray.test.js new file mode 100644 index 000000000..19037680a --- /dev/null +++ b/frontend/src/components/Question/_ButtonArray.test.js @@ -0,0 +1,66 @@ +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import ButtonArray from './_ButtonArray'; + +const getProps = (overrides = {}) => ({ + question: { + "key": "know_song", + "view": "BUTTON_ARRAY", + "explainer": "", + "question": "1. Do you know this song?", + "result_id": 12345, + "is_skippable": false, + "submits": false, + "style": "boolean", + "choices": { + "yes": "Yes", + "unsure": "Unsure", + "no": "No" + }, + "min_values": 1, + }, + disabled: false, + onChange: jest.fn(), + value: null, + ...overrides, +}); + +describe('ButtonArray', () => { + it('adds the "checked" class to a button when it is selected', () => { + const props = getProps({ value: 'yes' }); + const { getByText } = render(); + + const button = getByText('Yes'); + + expect(button).toHaveClass('checked'); + }); + + it('does not add the "checked" class to a button when it is not selected', () => { + const props = getProps({ value: 'yes' }); + const { getByText } = render(); + + const button = getByText('Unsure'); + + expect(button).not.toHaveClass('checked'); + }); + + it('calls the onChange function when a button is clicked', () => { + const props = getProps(); + const { getByText } = render(); + + const button = getByText('Yes'); + fireEvent.click(button); + + expect(props.onChange).toHaveBeenCalledWith('yes'); + }); + + it('does not call the onChange function when a disabled button is clicked', () => { + const props = getProps({ disabled: true }); + const { getByText } = render(); + + const button = getByText('Yes'); + fireEvent.click(button); + + expect(props.onChange).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/components/StartSession/StartSession.js b/frontend/src/components/StartSession/StartSession.js deleted file mode 100644 index 20704d5b3..000000000 --- a/frontend/src/components/StartSession/StartSession.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useEffect } from "react"; -import { createSession } from "../../API.js"; -import Loading from "../Loading/Loading"; - -// StartSession is an experiment view that handles the creation of an experiment session -// - It only shows a loader screen while the session is created -// - This view is requird in every experiment as it created the session that is used for storing results -const StartSession = ({ - experiment, - participant, - playlist, - setError, - session, - onNext, -}) => { - // Create a new session, and set state to next_round - useEffect(() => { - const init = async () => { - const data = await createSession({ - experiment, - participant, - playlist, - }); - - if (!data) { - setError("Could not create a session"); - return; - } - - // Store session - session.current = data.session; - - onNext(); - - }; - init(); - }, [experiment, participant, playlist, session, setError, onNext]); - - return ; -}; - -export default StartSession; diff --git a/frontend/src/components/StoreProfile/StoreProfile.js b/frontend/src/components/StoreProfile/StoreProfile.js index 8980b00c9..3c0297b76 100644 --- a/frontend/src/components/StoreProfile/StoreProfile.js +++ b/frontend/src/components/StoreProfile/StoreProfile.js @@ -3,7 +3,8 @@ import classNames from "classnames"; import { Link, withRouter } from "react-router-dom"; import * as EmailValidator from "email-validator"; import { URLS } from "../../config"; -import { shareParticipant, useParticipant } from "../../API"; +import useBoundStore from "../../util/stores"; +import { shareParticipant} from "../../API"; import DefaultPage from "../Page/DefaultPage"; import Loading from "../Loading/Loading"; @@ -12,7 +13,7 @@ const StoreProfile = ({ history }) => { const [email, setEmail] = useState(""); const validEmail = email && EmailValidator.validate(email); - const [participant, loadingParticipant] = useParticipant(); + const participant = useBoundStore((state) => state.participant); const sendLink = async () => { if (validEmail) { @@ -28,7 +29,7 @@ const StoreProfile = ({ history }) => { } }; - if (loadingParticipant) { + if (!participant) { return ; } diff --git a/frontend/src/components/Trial/Trial.js b/frontend/src/components/Trial/Trial.js index 742d5379c..546b3157d 100644 --- a/frontend/src/components/Trial/Trial.js +++ b/frontend/src/components/Trial/Trial.js @@ -23,7 +23,7 @@ const Trial = ({ }) => { // Main component state const [formActive, setFormActive] = useState(!config.listen_first); - const [preloadReady, setPreloadReady] = useState(!playback?.play_config?.ready_time); + const [preloadReady, setPreloadReady] = useState(!(playback?.ready_time)); const submitted = useRef(false); @@ -50,7 +50,7 @@ const Trial = ({ } if (feedback_form) { - + if (feedback_form.is_skippable) { form.map((formElement => (formElement.value = formElement.value || ''))) } @@ -81,7 +81,7 @@ const Trial = ({ } }, - [feedback_form, config, onNext, onResult] + [feedback_form, config, onNext, onResult, result_id] ); const checkBreakRound = (values, breakConditions) => { @@ -108,8 +108,8 @@ const Trial = ({ if (config.auto_advance) { // Create a time_passed result - if (config.auto_advance_timer != null) { - if (playback.player_type === 'BUTTON') { + if (config.auto_advance_timer != null) { + if (playback.view === 'BUTTON') { startTime.current = getCurrentTime(); } @@ -126,21 +126,16 @@ const Trial = ({ return; }, [config, playback, makeResult]); - return (
    {playback && ( { setPreloadReady(true); }} - preloadMessage={playback.preload_message} autoAdvance={config.auto_advance} responseTime={config.response_time} - playConfig={playback.play_config} - sections={playback.sections} submitResult={makeResult} startedPlaying={startTimer} finishedPlaying={finishedPlaying} diff --git a/frontend/src/components/Trial/Trial.spec.js b/frontend/src/components/Trial/Trial.test.js similarity index 96% rename from frontend/src/components/Trial/Trial.spec.js rename to frontend/src/components/Trial/Trial.test.js index 26f41c6ca..a960fb44d 100644 --- a/frontend/src/components/Trial/Trial.spec.js +++ b/frontend/src/components/Trial/Trial.test.js @@ -3,6 +3,8 @@ import { render, screen } from '@testing-library/react'; import Trial from "./Trial"; +jest.mock("../../util/stores"); + const feedback_form = { form: [{ key: 'test_question', diff --git a/frontend/src/components/UserFeedback/UserFeedback.js b/frontend/src/components/UserFeedback/UserFeedback.js index 0d2fc4227..0431fcdae 100644 --- a/frontend/src/components/UserFeedback/UserFeedback.js +++ b/frontend/src/components/UserFeedback/UserFeedback.js @@ -3,8 +3,9 @@ import React, { useState} from 'react'; import { postFeedback } from '../../API'; import Button from '../Button/Button'; import HTML from '../HTML/HTML'; +import classNames from 'util/classNames'; -const UserFeedback = ({experimentSlug, participant, feedbackInfo}) => { +const UserFeedback = ({experimentSlug, participant, feedbackInfo, inline = true}) => { const [value, setValue] = useState(''); const [showForm, setShowForm] = useState(true); @@ -22,13 +23,15 @@ const UserFeedback = ({experimentSlug, participant, feedbackInfo}) => { const handleChange = (event) => { setValue(event.target.value); } - + + const orientationClassNames = inline ? '' : 'aha__user-feedback--vertical' + return ( -
    +
    {showForm === true ? (
    {feedbackInfo.header}
    -
    +
    @@ -47,4 +50,4 @@ const UserFeedback = ({experimentSlug, participant, feedbackInfo}) => {
    )}; -export default UserFeedback; \ No newline at end of file +export default UserFeedback; diff --git a/frontend/src/components/UserFeedback/UserFeedback.scss b/frontend/src/components/UserFeedback/UserFeedback.scss index 3976b2f68..e9927556a 100644 --- a/frontend/src/components/UserFeedback/UserFeedback.scss +++ b/frontend/src/components/UserFeedback/UserFeedback.scss @@ -1,9 +1,52 @@ +@import '../../scss/variables.scss'; + .aha__user-feedback { * { margin-top: .2rem; } } +.user-feedback__form { + display: flex; + flex-direction: row; + justify-content: center; + gap: 0; + + .aha__user-feedback--vertical & { + display: block; + } +} + + .user-feedback__input { + border: 1px solid #ccc; + border-right: none; + border-radius: 4px; + border-top-right-radius: 0%; + border-bottom-right-radius: 0%; width: 50vw; -} \ No newline at end of file + + .aha__user-feedback--vertical & { + height: 5rem; + width: 100%; + align-items: center; + justify-content: center; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-right: 1px solid #ccc; + } +} + + +.user-feedback__button { + border-top-left-radius: 0%; + border-bottom-left-radius: 0%; + + .aha__user-feedback--vertical & { + margin-top: .5rem; + border-radius: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + width: 100%; + } +} diff --git a/frontend/src/components/UserFeedback/UserFeedback.test.js b/frontend/src/components/UserFeedback/UserFeedback.test.js new file mode 100644 index 000000000..b9a78f723 --- /dev/null +++ b/frontend/src/components/UserFeedback/UserFeedback.test.js @@ -0,0 +1,74 @@ +import React from 'react'; +import { render, fireEvent, waitFor } from '@testing-library/react'; +import UserFeedback from './UserFeedback'; +import { postFeedback } from '../../API'; + +// Mock the API call +jest.mock('../../API', () => ({ + postFeedback: jest.fn(), +})); + +describe('UserFeedback', () => { + const mockExperimentSlug = 'test-slug'; + const mockParticipant = { id: 1 }; + const mockFeedbackInfo = { + header: 'Your Feedback', + button: 'Submit', + contact_body: 'Contact us at test@example.com', + thank_you: 'Thank you for your feedback!' + }; + + it('renders the feedback form', () => { + const { getByText, getByRole } = render( + + ); + + expect(getByText(mockFeedbackInfo.header)).toBeInTheDocument(); + expect(getByRole('textbox')).toBeInTheDocument(); + expect(getByText(mockFeedbackInfo.button)).toBeInTheDocument(); + }); + + it('allows input to be entered', () => { + const { getByRole } = render( + + ); + + const input = getByRole('textbox'); + fireEvent.change(input, { target: { value: 'Great experience!' } }); + + expect(input.value).toBe('Great experience!'); + }); + + it('submits feedback and shows thank you message', async () => { + postFeedback.mockResolvedValueOnce({}); // Mocking resolved promise + + const { getByText, getByRole, queryByText } = render( + + ); + + fireEvent.change(getByRole('textbox'), { target: { value: 'Great experience!' } }); + fireEvent.click(getByText(mockFeedbackInfo.button)); + + await waitFor(() => { + expect(postFeedback).toHaveBeenCalledWith({ + experimentSlug: mockExperimentSlug, + feedback: 'Great experience!', + participant: mockParticipant + }); + expect(queryByText(mockFeedbackInfo.header)).not.toBeInTheDocument(); + expect(getByText(mockFeedbackInfo.thank_you)).toBeInTheDocument(); + }); + }); +}); diff --git a/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.js b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.js new file mode 100644 index 000000000..0fe5f3316 --- /dev/null +++ b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.js @@ -0,0 +1,265 @@ +import React, { useEffect, useState } from "react"; +import classNames from "classnames"; + +import PlayCard from "../PlayButton/PlayCard"; + +const VisualMatchingPairs = (props) => { + + const { + sections, + playerIndex, + finishedPlaying, + setPlayerIndex, + submitResult, + view, + } = props; + + const [gameState, setGameState] = useState(sections); + const [inBetweenTurns, setInBetweenTurns] = useState(false); + const [score, setScore] = useState(null); + const [firstCard, setFirstCard] = useState(-1); + const [secondCard, setSecondCard] = useState(-1); + const [total, setTotal] = useState(100); + const [message, setMessage] = useState('Pick a card') + const [end, setEnd] = useState(false); + const columnCount = gameState.length > 6 ? 4 : 3; + + const [resultBuffer, setResultBuffer] = useState([]); + + const [startTime] = useState(Date.now()); + + const getScoreMessage = (score) => { + switch (score) { + case -10: return '-10
    Misremembered'; + case 0: return '0
    No match'; + case 10: return '+10
    Lucky match'; + case 20: return '+20
    Good job!'; + default: return ''; + } + } + + const formatTime = (time) => { + return time / 1000; + } + + // Show (animated) feedback after second click on second card or finished playing + const showFeedback = (firstCard, secondCard, score) => { + + // update total score & display current score + setTotal(total + score); + setMessage(getScoreMessage(score)); + + // show end of turn animations + switch (score) { + case 10: + setGameState(prev => prev.map((section, i) => { + if (i === firstCard || i === secondCard) { + return { ...section, lucky: true }; + } + return section; + })); + + break; + case 20: + setGameState(prev => prev.map((section, i) => { + if (i === firstCard || i === secondCard) { + return { ...section, memory: true }; + } + return section; + })); + break; + default: + setGameState(prev => prev.map((section, i) => { + if (i === firstCard || i === secondCard) { + return { ...section, nomatch: true }; + } + return section; + })); + + // reset nomatch cards for coming turns + setTimeout(() => { + setGameState(prev => prev.map((section, i) => { + if (i === firstCard || i === secondCard) { + return { ...section, nomatch: false }; + } + return section; + })); + }, 700); + break; + } + + // add third click event to finish the turn + setInBetweenTurns(true); + + return; + } + + const checkMatchingPairs = (index) => { + let gameStateCopy = gameState.map(s => ({ ...s })); + const currentCard = gameStateCopy[index]; + const turnedCardsCount = gameStateCopy.filter(s => s.turned).length; + let newScore = 0; + + if (turnedCardsCount === 1) { + // We have two turned cards + gameStateCopy[index].turned = true; + setSecondCard(index); + + // set no mouse events for all but current + gameStateCopy = gameStateCopy.map((section, i) => { + if (i === index) { + return { ...currentCard, noevents: true }; + } + return { ...section, noevents: true }; + }); + + // check for match + const lastCard = gameStateCopy[firstCard]; + if (lastCard.group === currentCard.group) { + // match + if (currentCard.seen) { + newScore = 20; + } else { + newScore = 10; + } + } else { + if (currentCard.seen) { + newScore = -10; + } else { + newScore = 0; + } + }; + gameStateCopy[index].seen = true; + gameStateCopy[firstCard].seen = true; + + setScore(newScore); + setGameState([...gameStateCopy]); + showFeedback(firstCard, index, newScore); + } + + if (turnedCardsCount === 0) { + // first click of the turn + setFirstCard(index); + // turn first card, disable events + gameStateCopy[index] = { + ...currentCard, + turned: true, + noevents: true, + } + + setGameState(gameStateCopy); + + // clear message + setMessage(''); + } + + const newResult = { + selectedSection: currentCard.id, + cardIndex: index, + score: newScore, + timestamp: formatTime(Date.now() - startTime) + } + + setResultBuffer([...resultBuffer, newResult]); + + return; + }; + + const finishTurn = () => { + finishedPlaying(); + // remove matched cards from the board + if (score === 10 || score === 20) { + setGameState(prev => prev.map((section, i) => { + if (i === firstCard || i === secondCard) { + return { ...section, inactive: true }; + } + + return section; + })) + } + setFirstCard(-1); + setSecondCard(-1); + // remove third click event + setScore(null); + // Turn all cards back and enable events + setGameState(prev => prev.map((section, i) => { + return { ...section, turned: false, noevents: false }; + })); + + setMessage(''); + + setInBetweenTurns(false); + } + + useEffect(() => { + const noMoreActiveCards = !gameState.some(s => !s.inactive); + + if (noMoreActiveCards) { + setEnd(true); + } + }, [gameState, setEnd]); + + const registerUserClicks = () => void 0; + + + const onPlayCardClick = (index) => { + setPlayerIndex(-1); + checkMatchingPairs(index); + } + + useEffect(() => { + if (end) { + submitResult({ score: total, moves: resultBuffer }); + } + }, [end, submitResult, total, resultBuffer]); + + const getScoreClasses = (score) => { + switch (score) { + case -10: return 'fbmisremembered'; + case 0: return 'fbnomatch'; + case 10: return 'fblucky'; + case 20: return 'fbmemory'; + default: return ''; + } + } + + return ( +
    + +
    +
    +
    +
    +
    +
    + Score:
    {total} +
    +
    +
    + +
    + {(gameState).map((section, index) => ( + onPlayCardClick(index)} + playing={playerIndex === index} + registerUserClicks={registerUserClicks} + section={section} + view={view} + /> + ) + )} +
    +
    +
    + ) +} + +export default VisualMatchingPairs; diff --git a/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.scss b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.scss new file mode 100644 index 000000000..4dbe8295c --- /dev/null +++ b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.scss @@ -0,0 +1,94 @@ +@import url('https://fonts.googleapis.com/css2?family=Rajdhani&display=swap'); + +@media (min-aspect-ratio: 1/1) { + $card: 16vh; +} + +@media (max-aspect-ratio: 1/1) { + $card: 18vw; +} + +.aha__page .container { + padding-top: 2vh; +} + +.aha__visual-matching-pairs { + position: absolute; + left: 50%; + transform: translateX(-50%); + margin: 0px auto; +} + +@media (min-aspect-ratio: 1/1) { + .playing-board { + grid-template-columns: 16vh 16vh 16vh 16vh; + column-gap: 1.5vh; + row-gap: 1.5vh; + + &.playing-board--three-columns { + grid-template-columns: 16vh 16vh 16vh; + } + } +} + +@media (max-aspect-ratio: 1/1) { + .playing-board { + grid-template-columns: 18vw 18vw 18vw 18vw; + column-gap: 2vw; + row-gap: 2vw; + + &.playing-board--three-columns { + grid-template-columns: 18vw 18vw 18vw; + } + } +} + +.playing-board { + display: inline-grid; + max-width: 100%; +} + +.visual-matching-pairs__feedback, .visual-matching-pairs__score { + font-family: 'Rajdhani', sans-serif; + line-height: 1; + text-align: center; + padding-bottom: .7rem; + font-weight: 700; + font-size: 95%; + width: auto; + + @media(min-width: 900px) { + font-size: 150%; + } +} + +.visual-matching-pairs__feedback { + float: left; + color: white; + + &.fbnomatch { + color: $gray; + } + &.fblucky { + color: $yellow; + } + &.fbmemory { + color: $teal; + } + &.fbmisremembered { + color: $red; + } +} + +.visual-matching-pairs__score { + float: right; +} + +.visual-matching-pairs__overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; +} diff --git a/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.test.js b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.test.js new file mode 100644 index 000000000..b6966671d --- /dev/null +++ b/frontend/src/components/VisualMatchingPairs/VisualMatchingPairs.test.js @@ -0,0 +1,122 @@ +import React from 'react'; +import { render, fireEvent, waitFor } from '@testing-library/react'; +import VisualMatchingPairs from './VisualMatchingPairs'; // Adjust the import path as necessary + +jest.mock("../../util/stores"); + +// Mock data for sections +const mockSections = [ + { id: 1, content: 'Card 1', url: '/cat-01.jpg', inactive: false, turned: false, noevents: false, seen: false, group: 1 }, + { id: 2, content: 'Card 2', url: '/cat-02.jpg', inactive: false, turned: false, noevents: false, seen: false, group: 2 }, + { id: 3, content: 'Card 1', url: '/cat-01.jpg', inactive: false, turned: false, noevents: false, seen: false, group: 1 }, + { id: 4, content: 'Card 2', url: '/cat-02.jpg', inactive: false, turned: false, noevents: false, seen: false, group: 2 }, +]; + +describe('VisualMatchingPairs', () => { + it('renders correctly', () => { + const { getByText } = render(); + expect(getByText('Pick a card')).toBeInTheDocument(); + }); + + it('flips a card when clicked', async () => { + const { getAllByTestId } = render(); + const cards = getAllByTestId('play-card'); // Assuming each card is a button, adjust if necessary + + fireEvent.click(cards[0]); + + await waitFor(() => expect(cards[0]).toHaveClass('turned')); + }); + + it('updates score after a match', async () => { + const { getAllByTestId, getByTestId } = render(); + const cards = getAllByTestId('play-card'); + + fireEvent.click(cards[0]); + fireEvent.click(cards[1]); + + await waitFor(() => expect(getByTestId('score')).toBeInTheDocument()); + expect(getByTestId('score')).toHaveTextContent('100'); + }); + + it('does not update score for a non-matching pair', async () => { + const { getAllByTestId, getByTestId } = render(); + const cards = getAllByTestId('play-card'); + + fireEvent.click(cards[0]); + fireEvent.click(cards[1]); + + await waitFor(() => expect(getByTestId('score')).toBeInTheDocument()); + expect(getByTestId('score')).toHaveTextContent('100'); // Assuming 100 is the initial score + }); + + it('ends the game when all pairs are matched', async () => { + const finishedPlaying = jest.fn(); + const submitResult = jest.fn(); + const { getAllByTestId, getByTestId, queryByText } = render( + + ); + const cards = getAllByTestId('play-card'); + + fireEvent.click(cards[0]); + fireEvent.click(cards[2]); + fireEvent.click(getByTestId('overlay')); + fireEvent.click(cards[1]); + fireEvent.click(cards[3]); + fireEvent.click(getByTestId('overlay')); + + await waitFor(() => { + expect(queryByText('Pick a card')).not.toBeInTheDocument(); + expect(submitResult).toHaveBeenCalled(); + }); + }); + + it('disables card clicks in-between turns', async () => { + const { getAllByTestId } = render(); + const cards = getAllByTestId('play-card'); + + await waitFor(() => expect(cards[0]).not.toHaveClass('noevents')); + await waitFor(() => expect(cards[1]).not.toHaveClass('noevents')); + + fireEvent.click(cards[0]); + fireEvent.click(cards[1]); + + await waitFor(() => expect(cards[0]).toHaveClass('noevents')); + await waitFor(() => expect(cards[1]).toHaveClass('noevents')); + }); + + it('calculates the correct score for a match', async () => { + const finishedPlaying = jest.fn(); + const submitResult = jest.fn(); + const { getAllByTestId, getByTestId } = render(); + const cards = getAllByTestId('play-card'); + + fireEvent.click(cards[0]); + fireEvent.click(cards[1]); + fireEvent.click(getByTestId('overlay')); + + // No match, no score + await waitFor(() => expect(getByTestId('score')).toHaveTextContent('100')); + + fireEvent.click(cards[0]); + fireEvent.click(cards[3]); + fireEvent.click(getByTestId('overlay')); + + // No match, no score + await waitFor(() => expect(getByTestId('score')).toHaveTextContent('100')); + + fireEvent.click(cards[0]); + fireEvent.click(cards[2]); + fireEvent.click(getByTestId('overlay')); + + // Lucky match, +10 + await waitFor(() => expect(getByTestId('score')).toHaveTextContent('110')); + + fireEvent.click(cards[1]); + fireEvent.click(cards[3]); + fireEvent.click(getByTestId('overlay')); + + // Known match, +20 + await waitFor(() => expect(getByTestId('score')).toHaveTextContent('130')); + }); +}); + diff --git a/frontend/src/components/components.scss b/frontend/src/components/components.scss index 0f6017b94..1100b623a 100644 --- a/frontend/src/components/components.scss +++ b/frontend/src/components/components.scss @@ -21,6 +21,7 @@ @import "./Experiment/Experiment"; @import "./Explainer/Explainer"; @import "./Final/Final"; +@import "./FloatingActionButton/FloatingActionButton"; @import "./HTML/HTML"; @import "./Info/Info"; @import "./Listen/Listen"; @@ -33,10 +34,11 @@ @import "./Playback/Multiplayer"; @import "./Playback/Playback"; @import "./Playback/MatchingPairs"; -@import "./Playback/SpectrogramPlayer"; +@import "./Playback/ImagePlayer"; @import "./Question/Question"; @import "./Score/Score"; @import "./Trial/Trial"; @import "./FeedbackForm/FeedbackForm"; @import "./ToontjeHoger/ToontjeHoger"; @import "./UserFeedback/UserFeedback"; +@import "./VisualMatchingPairs/VisualMatchingPairs.scss"; diff --git a/frontend/src/hooks/useResultHandler.js b/frontend/src/hooks/useResultHandler.js index 19a8b3e87..fa6463fcc 100644 --- a/frontend/src/hooks/useResultHandler.js +++ b/frontend/src/hooks/useResultHandler.js @@ -31,7 +31,7 @@ const useResultHandler = ({ session, participant, onNext, state }) => { // Create result data const data = { - session: session.current, + session, participant, result: mergedResults, }; diff --git a/frontend/src/hooks/useResultHandler.test.js b/frontend/src/hooks/useResultHandler.test.js index 0c6ab8d0d..0025fda94 100644 --- a/frontend/src/hooks/useResultHandler.test.js +++ b/frontend/src/hooks/useResultHandler.test.js @@ -1,4 +1,4 @@ -import { renderHook, act } from "@testing-library/react-hooks"; +import { renderHook, act } from "@testing-library/react"; import useResultHandler from "./useResultHandler"; import * as API from '../API.js'; @@ -9,7 +9,7 @@ describe('useResultHandler', () => { const mockOnNext = jest.fn(); const initialState = { next_round: ['round2'] }; // Example initial state - const mockSession = { current: 'session-id' }; + const mockSession = 'session-id'; const mockParticipant = 'participant-id'; it('buffers results correctly', async () => { diff --git a/frontend/src/index.js b/frontend/src/index.js index 57db4e185..bd6aaee31 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -1,6 +1,6 @@ import "./index.css"; -import React from "react"; -import ReactDOM from "react-dom"; +import React, { StrictMode } from "react"; +import { createRoot } from 'react-dom/client'; import App from "./components/App/App"; import { initSentry } from "./config/sentry"; import { initAudioListener } from "./util/audio"; @@ -13,9 +13,18 @@ initSentry(); initAudioListener(); initWebAudioListener(); - // Create app -ReactDOM.render(, document.getElementById("root")); +const container = document.getElementById("root"); +const root = createRoot(container); +root.render( + process.env.REACT_APP_STRICT === true ? ( + + + + ) : ( + + ) +); // import * as serviceWorker from "./serviceWorker"; // If you want your app to work offline and load faster, you can change diff --git a/frontend/src/scss/color-schemes.scss b/frontend/src/scss/color-schemes.scss index 7d0bd0b2d..fe7719d67 100644 --- a/frontend/src/scss/color-schemes.scss +++ b/frontend/src/scss/color-schemes.scss @@ -78,4 +78,4 @@ .is-7 { color: #0cc7f1; } -} \ No newline at end of file +} diff --git a/frontend/src/scss/elements.scss b/frontend/src/scss/elements.scss index 472cdaf1f..6421a5916 100644 --- a/frontend/src/scss/elements.scss +++ b/frontend/src/scss/elements.scss @@ -29,7 +29,7 @@ h3.title { color: white; } - &:focus { + &:focus, &.checked { box-shadow: 0 0 0 0.2rem rgba($color, 0.5); } diff --git a/frontend/src/scss/variables.scss b/frontend/src/scss/variables.scss index f2fdee84d..991c660cc 100644 --- a/frontend/src/scss/variables.scss +++ b/frontend/src/scss/variables.scss @@ -8,17 +8,26 @@ $blue: #0cc7f1; $green: #00b612; $indigo: #2b2bee; $gray: #bdbebf; +$gray-200: #e9ecef; $gray-900: #212529; $black: $gray-900; $primary: $pink; +$secondary: $gray-900; $success: $teal; $positive: $teal; $negative: $red; -$secondary: $gray-900; +$warning: $yellow; $info: $blue; $facebook-blue: #4267b2; $twitter-blue: #1da1f2; $fa-font-path: "../public/vendor/font-awesome/webfonts"; + +// breakpoints +$breakpoint-xs: 0; +$breakpoint-sm: 576px; +$breakpoint-md: 768px; +$breakpoint-lg: 992px; +$breakpoint-xl: 1200px; diff --git a/frontend/src/stories/ButtonArray.stories.js b/frontend/src/stories/ButtonArray.stories.js index 44cb04b1a..1cb8d3519 100644 --- a/frontend/src/stories/ButtonArray.stories.js +++ b/frontend/src/stories/ButtonArray.stories.js @@ -1,4 +1,3 @@ - import ButtonArray from '../components/Question/_ButtonArray'; export default { @@ -9,25 +8,40 @@ export default { }, }; -export const Default = { - args: { - question: { - question: "This is the question", - explainer: "This is the explainer", - view: "BUTTON_ARRAY", - value: "", - choices: [ - "Choice 1", - "Choice 2", - "Choice 3", - ], - }, - onChange: () => { }, - id: 0, - active: true, - style: {}, - emphasizeTitle: false, +const defaultArgs = { + question: { + question: "This is the question", + explainer: "This is the explainer", + view: "BUTTON_ARRAY", + value: "", + choices: [ + "Choice 1", + "Choice 2", + "Choice 3", + ], }, + onChange: () => { }, + id: 0, + active: true, + style: {}, + emphasizeTitle: false, +} + +const getArgs = (args = {}) => ({ ...defaultArgs, ...args }); + +export const Default = { + args: getArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Disabled = { + args: getArgs({ disabled: true }), decorators: [ (Story) => (
    @@ -38,7 +52,7 @@ export const Default = { }; export const CategorizationWithHiddenText = { - args: { + args: getArgs({ question: { "key": "choice", "view": "BUTTON_ARRAY", @@ -60,12 +74,41 @@ export const CategorizationWithHiddenText = { "min_values": 1, "expected_response": "A" }, - onChange: () => { }, - id: 0, - active: true, - style: {}, - emphasizeTitle: false, - }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const CategorizationWithHiddenTextDisabled = { + args: getArgs({ + disabled: true, + question: { + "key": "choice", + "view": "BUTTON_ARRAY", + "explainer": "", + "question": "", + "result_id": 16549, + "is_skippable": false, + "submits": true, + "style": { + "invisible-text": true, + "buttons-large-gap": true, + "buttons-large-text": true, + "neutral-inverted": true + }, + "choices": { + "A": "___", + "B": "___" + }, + "min_values": 1, + "expected_response": "A" + }, + }), decorators: [ (Story) => (
    @@ -74,3 +117,55 @@ export const CategorizationWithHiddenText = { ), ], } + +export const BooleanColorScheme = { + args: getArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const BooleanNegativeFirstColorScheme = { + args: getArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const NeutralColorScheme = { + args: getArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const NeutralInvertedColorScheme = { + args: getArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} diff --git a/frontend/src/stories/Consent.stories.js b/frontend/src/stories/Consent.stories.js new file mode 100644 index 000000000..14be6c4dc --- /dev/null +++ b/frontend/src/stories/Consent.stories.js @@ -0,0 +1,43 @@ + +import Consent from '../components/Consent/Consent'; + +const defaultArgs = { + title: "This is the title", + text: "This is the text", + onNext: () => {console.log("Next button clicked")}, + confirm: "Confirm", + deny: "Deny", + experiment: { + slug: "experiment-slug", + } +} + +const getArgs = (args = {}) => ({ ...defaultArgs, ...args }); + +export default { + title: 'Consent', + component: Consent, + parameters: { + layout: 'fullscreen', + }, +}; + +export const Default = { + args: { + title: "This is the Consent component's title", + text: "

    This is the Consent component's text

    It can contain lists, headings, bold, italic and underlined text, you name it!

    • Item 1
    • Item 2
    • Item 3
    ", + onNext: () => {console.log("On next triggered")}, + confirm: "Confirm", + deny: "Deny", + experiment: { + slug: "experiment-slug", + } + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; diff --git a/frontend/src/stories/Final.stories.js b/frontend/src/stories/Final.stories.js new file mode 100644 index 000000000..384d4d04e --- /dev/null +++ b/frontend/src/stories/Final.stories.js @@ -0,0 +1,66 @@ +import { + BrowserRouter as Router, +} from "react-router-dom"; + +import Final from '../components/Final/Final'; + +export default { + title: 'Final', + component: Final, + parameters: { + layout: 'fullscreen', + }, +}; + +export const Default = { + args: { + score: 100, + rank: { + text: 'Rank', + class: 'rank', + }, + final_text: '

    Final text

    ', + points: 'points', + button: { + text: 'Button', + link: 'https://www.google.com', + }, + logo: { + image: 'https://via.placeholder.com/150', + link: 'https://www.google.com', + }, + social: { + apps: ['facebook', 'whatsapp', 'twitter', 'weibo', 'share', 'clipboard'], + url: 'https://www.google.com', + message: 'Message', + hashtags: ['hashtag'], + text: 'Text', + }, + show_profile_link: true, + action_texts: { + all_experiments: 'All experiments', + profile: 'Profile', + }, + show_participant_link: true, + participant_id_only: false, + feedback_info: { + header: 'Feedback', + button: 'Submit', + thank_you: 'Thank you for your feedback!', + contact_body: '

    Please contact us at info@example.com if you have any questions.

    ', + }, + experiment: { + slug: 'test', + }, + participant: 'test', + }, + decorators: [ + (Story) => ( +
    + + + +
    + ), + ], +}; diff --git a/frontend/src/stories/FloatingActionButton.stories.js b/frontend/src/stories/FloatingActionButton.stories.js new file mode 100644 index 000000000..a79a3e51d --- /dev/null +++ b/frontend/src/stories/FloatingActionButton.stories.js @@ -0,0 +1,133 @@ +import UserFeedback from 'components/UserFeedback/UserFeedback'; +import FloatingActionButton from '../components/FloatingActionButton/FloatingActionButton'; + +export default { + title: 'FloatingActionButton', + component: FloatingActionButton, + parameters: { + layout: 'fullscreen', + }, +}; + +const userFeedbackProps = { + experimentSlug: 'test', + participant: 'test', + feedbackInfo: { + header: 'Feedback', + button: 'Submit', + thank_you: 'Thank you for your feedback!', + contact_body: '

    Please contact us at info@example.com if you have any questions.

    ' + }, + inline: false +} + +export const Default = { + args: { + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const TopLeft = { + args: { + position: 'top-left', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const TopRight = { + args: { + position: 'top-right', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const BottomLeft = { + args: { + position: 'bottom-left', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const BottomRight = { + args: { + position: 'bottom-right', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const CenterLeft = { + args: { + position: 'center-left', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const CenterRight = { + args: { + position: 'center-right', + children: ( + + ), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; diff --git a/frontend/src/stories/Histogram.stories.js b/frontend/src/stories/Histogram.stories.js new file mode 100644 index 000000000..c669e2edf --- /dev/null +++ b/frontend/src/stories/Histogram.stories.js @@ -0,0 +1,31 @@ + +import Histogram from '../components/Histogram/Histogram'; + +export default { + title: 'Histogram', + component: Histogram, + parameters: { + layout: 'fullscreen', + }, +}; + + +export const Default = { + args: { + bars: 7, + spacing: 6, + interval: 100, + running: true, + marginLeft: 0, + marginTop: 0, + backgroundColor: undefined, + borderRadius: '0.15rem', + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; \ No newline at end of file diff --git a/frontend/src/stories/MatchingPairs.stories.js b/frontend/src/stories/MatchingPairs.stories.js index 092255888..6bd57febc 100644 --- a/frontend/src/stories/MatchingPairs.stories.js +++ b/frontend/src/stories/MatchingPairs.stories.js @@ -1,7 +1,23 @@ -import MatchingPairs from '../components/Playback/MatchingPairs'; +import useBoundStore from 'util/stores'; +import MatchingPairs, { SCORE_FEEDBACK_DISPLAY } from '../components/Playback/MatchingPairs'; import audio from './assets/audio.wav'; + +const StoreDecorator = (Story) => { + const setSession = useBoundStore(state => state.setSession); + const setParticipant = useBoundStore(state => state.setParticipant); + setSession({ id: 1 }); + setParticipant({ id: 1, csrf_token: '123' }); + + return ( +
    + +
    + ) +} + + export default { title: 'MatchingPairs', component: MatchingPairs, @@ -87,13 +103,7 @@ export const Default = { args: { ...getDefaultArgs(), }, - decorators: [ - (Story) => ( -
    - -
    - ), - ], + decorators: [ StoreDecorator ], parameters: { docs: { description: { @@ -149,15 +159,8 @@ export const WithThreeColumns = { memory: false, }, ], - }, - ), - decorators: [ - (Story) => ( -
    - -
    - ), - ], + }), + decorators: [ StoreDecorator ], parameters: { docs: { description: { @@ -166,3 +169,33 @@ export const WithThreeColumns = { }, }, }; + +export const WithSmallBottomRightScoreFeedback = { + args: { + ...getDefaultArgs(), + scoreFeedbackDisplay: SCORE_FEEDBACK_DISPLAY.SMALL_BOTTOM_RIGHT + }, + decorators: [ StoreDecorator ], + parameters: { + docs: { + description: { + component: 'This story shows the component with the default props.', + }, + }, + }, +}; + +export const WithShowAnimation = { + args: { + ...getDefaultArgs(), + showAnimation: true, + }, + decorators: [ StoreDecorator ], + parameters: { + docs: { + description: { + component: 'This story shows the component with the default props.', + }, + }, + }, +}; \ No newline at end of file diff --git a/frontend/src/stories/PlayButton.stories.js b/frontend/src/stories/PlayButton.stories.js new file mode 100644 index 000000000..d307505b4 --- /dev/null +++ b/frontend/src/stories/PlayButton.stories.js @@ -0,0 +1,92 @@ + +import PlayButton from '../components/PlayButton/PlayButton'; + +export default { + title: 'PlayButton', + component: PlayButton, + parameters: { + layout: 'fullscreen', + }, +}; + +export const Default = { + args: { + + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Playing = { + args: { + isPlaying: true, + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const BooleanColorScheme = { + args: { + isPlaying: false, + className: 'boolean', + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const BooleanNegativeFirstColorScheme = { + args: { + isPlaying: false, + className: 'boolean-negative-first', + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const NeutralColorScheme = { + args: { + isPlaying: false, + className: 'neutral', + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const NeutralInvertedColorScheme = { + args: { + isPlaying: false, + className: 'neutral-inverted', + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; diff --git a/frontend/src/stories/PlayCard.stories.js b/frontend/src/stories/PlayCard.stories.js new file mode 100644 index 000000000..a7917129d --- /dev/null +++ b/frontend/src/stories/PlayCard.stories.js @@ -0,0 +1,190 @@ + +import PlayCard from '../components/PlayButton/PlayCard'; +import catImage from './assets/images/cat-01.webp'; + +console.log(catImage); + +export default { + title: 'PlayCard', + component: PlayCard, + parameters: { + layout: 'fullscreen', + }, +}; + +const getDefaultArgs = (overrides = {}) => ({ + onClick: () => alert("Clicked!"), + registerUserClicks: () => void 0, + playing: true, + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1" + }, + showAnimation: true, + view: "MATCHINGPAIRS", + ...overrides +}); + +export const Default = { + args: getDefaultArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Turned = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "turned": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Seen = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "seen": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Memory = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "memory": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Lucky = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "lucky": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const NoEvents = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "noevents": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Inactive = { + args: getDefaultArgs({ + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "inactive": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Playing = { + args: getDefaultArgs({ + onClick: () => void 0, + registerUserClicks: () => void 0, + playing: true, + showAnimation: true, + section: { + "id": 32, + "url": "/section/32/78165/", + "group": "\t1", + "turned": true + }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const VisualMatchingPairs = { + args: getDefaultArgs({ + onClick: () => alert("Clicked!"), + registerUserClicks: () => alert('Registered'), + playing: false, + section: { + "id": 32, + "url": `http://localhost:6006/${catImage}`, + "group": "\t1", + "turned": true + }, + view: "VISUALMATCHINGPAIRS" + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; \ No newline at end of file diff --git a/frontend/src/stories/PlayerSmall.stories.js b/frontend/src/stories/PlayerSmall.stories.js new file mode 100644 index 000000000..848660fed --- /dev/null +++ b/frontend/src/stories/PlayerSmall.stories.js @@ -0,0 +1,54 @@ + +import PlayerSmall from '../components/PlayButton/PlayerSmall'; + +export default { + title: 'PlayerSmall', + component: PlayerSmall, + parameters: { + layout: 'fullscreen', + }, +}; + +export const Default = { + args: { + label: 'Default', + onClick: () => { alert('Default'); }, + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Playing = { + args: { + label: 'Playing', + onClick: () => { alert('Playing'); }, + playing: true, + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Disabled = { + args: { + label: 'Disabled', + onClick: () => { alert('Disabled'); }, + disabled: true, + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; diff --git a/frontend/src/stories/Trial.stories.js b/frontend/src/stories/Trial.stories.js index c9ebe99b8..0e5cd726c 100644 --- a/frontend/src/stories/Trial.stories.js +++ b/frontend/src/stories/Trial.stories.js @@ -8,77 +8,177 @@ export default { }, }; +const getDefaultArgs = (overrides = {}) => ({ + html: { + body: "

    This is the HTML body

    ", + }, + config: { + style: "AUTOPLAY", + auto_advance: true, + response_time: 1000, + continue_label: "Continue", + show_continue_button: true, + }, + playback: { + view: "BUTTON", + instruction: "This is the instruction", + preload_message: "This is the preload message", + play_config: { + autoplay: true, + controls: true, + loop: true, + muted: true, + playback_rate: 1, + preload: "auto", + }, + sections: [ + { + start: 0, + end: 10, + text: "This is the first section", + }, + { + start: 10, + end: 20, + text: "This is the second section", + }, + ], + }, + feedback_form: { + form: [ + { + "key": "know_song", + "view": "BUTTON_ARRAY", + "explainer": "", + "question": "1. Do you know this song?", + "result_id": 17242, + "is_skippable": false, + "submits": false, + "style": "boolean", + "choices": { + "yes": "fa-check", + "unsure": "fa-question", + "no": "fa-xmark" + }, + "min_values": 1 + }, + { + "key": "like_song", + "view": "ICON_RANGE", + "explainer": "", + "question": "2. How much do you like this song?", + "result_id": 17241, + "is_skippable": false, + "submits": false, + "style": "gradient-7", + "choices": { + "1": "fa-face-grin-hearts", + "2": "fa-face-grin", + "3": "fa-face-smile", + "4": "fa-face-meh", + "5": "fa-face-frown", + "6": "fa-face-frown-open", + "7": "fa-face-angry" + } + } + ], + submit_label: "Submit", + skip_label: "Skip", + is_skippable: true, + is_profile: true, + }, + onNext: () => { }, + onResult: () => { }, + ...overrides, +}); + export const Default = { - args: { - html: { - body: "

    This is the HTML body

    ", + args: getDefaultArgs(), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const BooleanColorScheme = { + args: getDefaultArgs({ + config: { + style: "boolean", + auto_advance: true, + response_time: 1000, + continue_label: "Continue", + show_continue_button: true, }, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const BooleanNegativeFirstColorScheme = { + args: getDefaultArgs({ config: { - style: "AUTOPLAY", + style: "boolean-negative-first", auto_advance: true, response_time: 1000, continue_label: "Continue", show_continue_button: true, }, - playback: { - view: "BUTTON", - instruction: "This is the instruction", - preload_message: "This is the preload message", - play_config: { - autoplay: true, - controls: true, - loop: true, - muted: true, - playback_rate: 1, - preload: "auto", - }, - sections: [ - { - start: 0, - end: 10, - text: "This is the first section", - }, - { - start: 10, - end: 20, - text: "This is the second section", - }, - ], + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const NeutralColorScheme = { + args: getDefaultArgs({ + config: { + style: "neutral", + auto_advance: true, + response_time: 1000, + continue_label: "Continue", + show_continue_button: true, }, - feedback_form: { - form: [{ - key: "msi_14_never_complimented", - view: "TEXT_RANGE", - value: "", - question: "Ik heb nog nooit complimenten gekregen voor mijn talenten als muzikant.", - explainer: "In hoeverre ben je het hiermee eens of oneens?", - result_id: 18, - style: "neutral", - scoring_rule: "LIKERT", - scale_steps: 7, - choices: { - "1": "Helemaal mee oneens", - "2": "Zeer mee oneens", - "3": "Mee oneens", - "4": "Niet mee eens of oneens", - "5": "Mee eens", - "6": "Zeer mee eens", - "7": "Helemaal mee eens" - } - }], - submit_label: "Submit", - skip_label: "Skip", - is_skippable: true, - is_profile: true, + }), + decorators: [ + (Story) => ( +
    + +
    + ), + ], +} + +export const NeutralInvertedColorScheme = { + args: getDefaultArgs({ + config: { + style: "neutral-inverted", + auto_advance: true, + response_time: 1000, + continue_label: "Continue", + show_continue_button: true, }, - onNext: () => { }, - onResult: () => { }, - }, + }), decorators: [ (Story) => ( -
    +
    ), ], -}; +} diff --git a/frontend/src/stories/UserFeedback.stories.js b/frontend/src/stories/UserFeedback.stories.js new file mode 100644 index 000000000..7a2173c92 --- /dev/null +++ b/frontend/src/stories/UserFeedback.stories.js @@ -0,0 +1,51 @@ +import UserFeedback from '../components/UserFeedback/UserFeedback'; + +export default { + title: 'UserFeedback', + component: UserFeedback, + parameters: { + layout: 'fullscreen', + }, +}; + +export const Default = { + args: { + experimentSlug: 'test', + participant: 'test', + feedbackInfo: { + header: 'Feedback', + button: 'Submit', + thank_you: 'Thank you for your feedback!', + contact_body: '

    Please contact us at info@example.com if you have any questions.

    ' + }, + inline: true + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; + +export const Vertical = { + args: { + experimentSlug: 'test', + participant: 'test', + feedbackInfo: { + header: 'Feedback', + button: 'Submit', + thank_you: 'Thank you for your feedback!', + contact_body: '

    Please contact us at info@example.com if you have any questions.

    ' + }, + inline: false + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], +}; diff --git a/frontend/src/stories/VisualMatchingPairs.stories.js b/frontend/src/stories/VisualMatchingPairs.stories.js new file mode 100644 index 000000000..6ff301d34 --- /dev/null +++ b/frontend/src/stories/VisualMatchingPairs.stories.js @@ -0,0 +1,218 @@ +import VisualMatchingPairs from '../components/VisualMatchingPairs/VisualMatchingPairs'; + +import Cat01 from './assets/images/cat-01.webp'; +import Cat02 from './assets/images/cat-02.webp'; +import Cat03 from './assets/images/cat-03.webp'; + +export default { + title: 'VisualMatchingPairs', + component: VisualMatchingPairs, + parameters: { + layout: 'fullscreen', + docs: { + description: { + component: 'This story shows the component with the default props.', + story: 'This story shows the component with the default props.', + }, + } + }, +}; + +const getDefaultArgs = (overrides = {}) => ({ + playSection: () => { }, + sections: [ + { + id: 1, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 2, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 3, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + { + id: 4, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 5, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 6, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + ], + playerIndex: 0, + stopAudio: () => { }, + submitResult: (args) => { alert('submitResult: ' + JSON.stringify(args, null, 2)); }, + finishedPlaying: () => { console.log('finished playing') }, + setPlayerIndex: (i) => { console.log('set player index', i) }, + ...overrides, +}) + +export const Default = { + args: { + ...getDefaultArgs(), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], + parameters: { + docs: { + description: { + component: 'This story shows the component with the default props.', + }, + }, + }, +}; + +export const MoreCards = { + args: { + ...getDefaultArgs({ + sections: [ + { + id: 1, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 2, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 3, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + { + id: 4, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 5, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 6, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + { + id: 7, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 8, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 9, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + { + id: 10, + url: Cat02, + turned: false, + lucky: false, + memory: false, + group: 2, + }, + { + id: 11, + url: Cat01, + turned: false, + lucky: false, + memory: false, + group: 1, + }, + { + id: 12, + url: Cat03, + turned: false, + lucky: false, + memory: false, + group: 3, + }, + ], + }), + }, + decorators: [ + (Story) => ( +
    + +
    + ), + ], + parameters: { + docs: { + description: { + component: 'This story shows the component with more cards.', + }, + }, + }, +}; \ No newline at end of file diff --git a/frontend/src/stories/assets/images/cat-01.webp b/frontend/src/stories/assets/images/cat-01.webp new file mode 100644 index 000000000..b6527ad38 Binary files /dev/null and b/frontend/src/stories/assets/images/cat-01.webp differ diff --git a/frontend/src/stories/assets/images/cat-02.webp b/frontend/src/stories/assets/images/cat-02.webp new file mode 100644 index 000000000..3292a3a88 Binary files /dev/null and b/frontend/src/stories/assets/images/cat-02.webp differ diff --git a/frontend/src/stories/assets/images/cat-03.webp b/frontend/src/stories/assets/images/cat-03.webp new file mode 100644 index 000000000..6797142df Binary files /dev/null and b/frontend/src/stories/assets/images/cat-03.webp differ diff --git a/frontend/src/util/__mocks__/stores.js b/frontend/src/util/__mocks__/stores.js new file mode 100644 index 000000000..b80a6f373 --- /dev/null +++ b/frontend/src/util/__mocks__/stores.js @@ -0,0 +1,11 @@ +module.exports = { + useBoundStore: () => { + return { + setError: jest.fn(), + setParticipant: jest.fn(), + setSession: jest.fn(), + participant: { id: 1 }, + session: { id: 1 } + } + } +}; \ No newline at end of file diff --git a/frontend/src/util/audio.js b/frontend/src/util/audio.js index 72ffb8f6b..271f35fbe 100644 --- a/frontend/src/util/audio.js +++ b/frontend/src/util/audio.js @@ -1,4 +1,4 @@ -import { API_ROOT, SILENT_MP3 } from "../config.js"; +import { API_ROOT, MEDIA_ROOT, SILENT_MP3 } from "../config.js"; import Timer from "./timer"; // Audio provides function around a shared audio object @@ -170,7 +170,7 @@ export const loadUntilAvailable = (src, canPlay) => { // without having to stop for further buffering of content. const removeListener = listenOnce("canplaythrough", canPlay); - load(src); + load(MEDIA_ROOT + src); // If the ready state is already > 3, data is already loaded; // Call canPlay right away diff --git a/frontend/src/util/audioControl.js b/frontend/src/util/audioControl.js index 0e8b61458..b10a15e56 100644 --- a/frontend/src/util/audioControl.js +++ b/frontend/src/util/audioControl.js @@ -1,22 +1,21 @@ import * as audio from "./audio"; import * as webAudio from "./webAudio"; -export const playAudio = (playConfig, section, playheadShift=0) => { +export const playAudio = (section, playMethod, playheadShift=0) => { let latency = 0; - const playhead = playConfig.playhead + playheadShift - if (playConfig.play_method === 'BUFFER') { + if (playMethod === 'BUFFER') { // Determine latency for current audio device latency = webAudio.getTotalLatency() // Play audio - webAudio.playBufferFrom(section.id, playhead); + webAudio.playBufferFrom(section.id, playheadShift); return latency } else { // Only initialize webaudio if section is hosted local - if (playConfig.play_method !== 'EXTERNAL') { + if (playMethod !== 'EXTERNAL') { // Determine latency for current audio device latency = webAudio.getTotalLatency() webAudio.initWebAudio(); @@ -26,14 +25,16 @@ export const playAudio = (playConfig, section, playheadShift=0) => { audio.setVolume(1); // Play audio - audio.playFrom(Math.max(0, playhead)); + audio.loadUntilAvailable(section.url, () => { + audio.playFrom(Math.max(0, playheadShift)); + }); return latency } } -export const pauseAudio = (playConfig) => { - if (playConfig.play_method === 'BUFFER') { +export const pauseAudio = (playMethod) => { + if (playMethod === 'BUFFER') { webAudio.stopBuffer(); } else { audio.stop(); diff --git a/frontend/src/util/label.js b/frontend/src/util/label.js index eec6271fb..86ea9cf3b 100644 --- a/frontend/src/util/label.js +++ b/frontend/src/util/label.js @@ -1,32 +1,3 @@ -import { romanNumeral } from "./roman"; - -export const LABEL_NUMERIC = "NUMERIC"; -export const LABEL_ALPHABETIC = "ALPHABETIC"; -export const LABEL_CUSTOM = "CUSTOM"; -export const LABEL_ROMAN = "ROMAN"; - -/** - * @deprecated This function is deprecated and will be removed in the future. - * See also https://github.com/Amsterdam-Music-Lab/MUSCLE/pull/640 - * Get a player label, based on index, labelstyle and customLabels - */ -export const getPlayerLabel = (index, labelStyle, customLabels) => { - index = parseInt(index); - - switch (labelStyle) { - case LABEL_NUMERIC: - return parseInt(index) + 1; - case LABEL_ALPHABETIC: - return String.fromCharCode(65 + index); - case LABEL_ROMAN: - return romanNumeral(index + 1); - case LABEL_CUSTOM: - return customLabels[index] || ""; - default: - return ""; - } -}; - export const renderLabel = (label, size="fa-lg") => { if (!label) return label if (label.startsWith('fa-')) return diff --git a/frontend/src/util/label.test.js b/frontend/src/util/label.test.js index e27736501..b97f434d7 100644 --- a/frontend/src/util/label.test.js +++ b/frontend/src/util/label.test.js @@ -1,35 +1,5 @@ import { render } from '@testing-library/react'; -import { getPlayerLabel, LABEL_NUMERIC, LABEL_ALPHABETIC, LABEL_ROMAN, LABEL_CUSTOM, renderLabel } from "./label"; - -describe('getPlayerLabel', () => { - - it('returns numeric label correctly', () => { - expect(getPlayerLabel(0, LABEL_NUMERIC)).toBe(1); - expect(getPlayerLabel(1, LABEL_NUMERIC)).toBe(2); - }); - - it('returns alphabetic label correctly', () => { - expect(getPlayerLabel(0, LABEL_ALPHABETIC)).toBe('A'); - expect(getPlayerLabel(25, LABEL_ALPHABETIC)).toBe('Z'); - }); - - it('returns roman label correctly', () => { - expect(getPlayerLabel(0, LABEL_ROMAN)).toBe('I'); - expect(getPlayerLabel(3, LABEL_ROMAN)).toBe('IV'); - }); - - it('returns custom label correctly', () => { - const customLabels = ['One', 'Two', 'Three']; - expect(getPlayerLabel(0, LABEL_CUSTOM, customLabels)).toBe('One'); - expect(getPlayerLabel(2, LABEL_CUSTOM, customLabels)).toBe('Three'); - }); - - it('returns empty string for unknown label style', () => { - expect(getPlayerLabel(1, 'UNKNOWN')).toBe(''); - }); - -}); - +import { renderLabel } from "./label"; describe('renderLabel', () => { diff --git a/frontend/src/util/roman.js b/frontend/src/util/roman.js deleted file mode 100644 index 6663a95eb..000000000 --- a/frontend/src/util/roman.js +++ /dev/null @@ -1,21 +0,0 @@ -export const romanNumeral = (int) => { - let roman = ''; - - if (int < 0 || !int) return roman; - - roman += 'M'.repeat(int / 1000); int %= 1000; - roman += 'CM'.repeat(int / 900); int %= 900; - roman += 'D'.repeat(int / 500); int %= 500; - roman += 'CD'.repeat(int / 400); int %= 400; - roman += 'C'.repeat(int / 100); int %= 100; - roman += 'XC'.repeat(int / 90); int %= 90; - roman += 'L'.repeat(int / 50); int %= 50; - roman += 'XL'.repeat(int / 40); int %= 40; - roman += 'X'.repeat(int / 10); int %= 10; - roman += 'IX'.repeat(int / 9); int %= 9; - roman += 'V'.repeat(int / 5); int %= 5; - roman += 'IV'.repeat(int / 4); int %= 4; - roman += 'I'.repeat(int); - - return roman; -} diff --git a/frontend/src/util/roman.test.js b/frontend/src/util/roman.test.js deleted file mode 100644 index 322b6ffe2..000000000 --- a/frontend/src/util/roman.test.js +++ /dev/null @@ -1,45 +0,0 @@ -import { romanNumeral } from './roman'; - -describe('romanNumeral', () => { - it('converts basic numbers correctly', () => { - expect(romanNumeral(1)).toBe('I'); - expect(romanNumeral(5)).toBe('V'); - expect(romanNumeral(10)).toBe('X'); - expect(romanNumeral(50)).toBe('L'); - expect(romanNumeral(100)).toBe('C'); - expect(romanNumeral(500)).toBe('D'); - expect(romanNumeral(1000)).toBe('M'); - }); - - it('converts composite numbers correctly', () => { - expect(romanNumeral(23)).toBe('XXIII'); - expect(romanNumeral(44)).toBe('XLIV'); - expect(romanNumeral(89)).toBe('LXXXIX'); - expect(romanNumeral(199)).toBe('CXCIX'); - expect(romanNumeral(499)).toBe('CDXCIX'); - }); - - it('handles subtractive notation correctly', () => { - expect(romanNumeral(4)).toBe('IV'); - expect(romanNumeral(9)).toBe('IX'); - expect(romanNumeral(40)).toBe('XL'); - expect(romanNumeral(90)).toBe('XC'); - expect(romanNumeral(400)).toBe('CD'); - expect(romanNumeral(900)).toBe('CM'); - expect(romanNumeral(444)).toBe('CDXLIV'); - expect(romanNumeral(999)).toBe('CMXCIX'); - }); - - it('converts large numbers correctly', () => { - expect(romanNumeral(1984)).toBe('MCMLXXXIV'); - expect(romanNumeral(2022)).toBe('MMXXII'); - expect(romanNumeral(3999)).toBe('MMMCMXCIX'); - expect(romanNumeral(4444)).toBe('MMMMCDXLIV'); - expect(romanNumeral(9999)).toBe('MMMMMMMMMCMXCIX'); - }); - - it('handles edge cases correctly', () => { - expect(romanNumeral(0)).toBe(''); - expect(romanNumeral(-1)).toBe(''); - }); -}); diff --git a/frontend/src/util/stores.js b/frontend/src/util/stores.js new file mode 100644 index 000000000..7e59966c8 --- /dev/null +++ b/frontend/src/util/stores.js @@ -0,0 +1,25 @@ +import { create } from "zustand"; + +// Stores +const createErrorSlice = (set) => ({ + error: null, + setError: (error) => set(() => ({ error })) +}); + +const createParticipantSlice = (set) => ({ + participant: null, + setParticipant: (participant) => set(() => ({ participant })) +}); + +const createSessionSlice = (set) => ({ + session: null, + setSession: (session) => set(() => ({ session })) +}); + +export const useBoundStore = create((...args) => ({ + ...createErrorSlice(...args), + ...createParticipantSlice(...args), + ...createSessionSlice(...args) +})); + +export default useBoundStore; \ No newline at end of file diff --git a/frontend/src/util/testUtils/useEffectDebugger.js b/frontend/src/util/testUtils/useEffectDebugger.js new file mode 100644 index 000000000..1ddcc0ac0 --- /dev/null +++ b/frontend/src/util/testUtils/useEffectDebugger.js @@ -0,0 +1,36 @@ +const { useEffect, useRef } = require("react"); + +const usePrevious = (value, initialValue) => { + const ref = useRef(initialValue); + useEffect(() => { + ref.current = value; + }); + return ref.current; + }; + +export const useEffectDebugger = (effectHook, dependencies, dependencyNames = []) => { + /** can be used as a drop-in replacement for useEffect + * to check which dependencies changed. */ + const previousDeps = usePrevious(dependencies, []); + + const changedDeps = dependencies.reduce((accum, dependency, index) => { + if (dependency !== previousDeps[index]) { + const keyName = dependencyNames[index] || index; + return { + ...accum, + [keyName]: { + before: previousDeps[index], + after: dependency + } + }; + } + + return accum; + }, {}); + + if (Object.keys(changedDeps).length) { + console.log('[use-effect-debugger] ', changedDeps); + } + + useEffect(effectHook, dependencies); + }; diff --git a/frontend/src/util/webAudio.js b/frontend/src/util/webAudio.js index d34450b3e..f98b3e873 100644 --- a/frontend/src/util/webAudio.js +++ b/frontend/src/util/webAudio.js @@ -25,21 +25,21 @@ export const initWebAudioListener = () => { }; // init HTML audio element in webaudio context and connect track to destination (output) -export const initWebAudio = () => { - if (track === undefined) { +export const initWebAudio = () => { + if (track === undefined) { track = audioContext.createMediaElementSource(window.audio); - track.connect(audioContext.destination); - } -} + track.connect(audioContext.destination); + } +}; // Change HTML audio element crossorigin attribute for playing external files -export const closeWebAudio = () => { - window.audio.removeAttribute('crossOrigin'); - window.audio.crossorigin = "use-credentials"; -} +export const closeWebAudio = () => { + window.audio.removeAttribute('crossOrigin'); + window.audio.crossorigin = "use-credentials"; +}; // return total audio latency in milliseconds -export const getTotalLatency = () => { +export const getTotalLatency = () => { let baseLatency = audioContext.baseLatency; let outputLatency = audioContext.outputLatency; @@ -51,85 +51,77 @@ export const getTotalLatency = () => { outputLatency = 0; } - let totalLatency = (baseLatency + outputLatency) * 1000; + let totalLatency = (baseLatency + outputLatency) * 1000; return totalLatency; -} +}; // return base audio latency in seconds export const getBaseLatency = () => { return audioContext.baseLatency; -} +}; // return output audio latency in seconds -export const getOutputLatency = () => { +export const getOutputLatency = () => { return audioContext.outputLatency; -} +}; // Adjust gain export const changeGain = (level) => { const gainNode = audioContext.createGain(); track.connect(gainNode).connect(audioContext.destination); - gainNode.gain.value = level; -} + gainNode.gain.value = level; +}; // load sound data and store in buffers object -export const loadBuffer = async (id, src, canPlay) => { +export const loadBuffer = async (id, src, canPlay) => { await fetch(MEDIA_ROOT + src, {}) - // Return the data as an ArrayBuffer + // Return the data as an ArrayBuffer .then(response => response.arrayBuffer()) // Decode the audio data .then(buffer => audioContext.decodeAudioData(buffer)) // store buffer in buffers object - .then(decodedData => { + .then(decodedData => { buffers[id] = decodedData; previousSource = src; canPlay(); }); -} +}; export const checkSectionLoaded = (section) => { if (section.url === previousSource) { return true; - } -} + }; +}; // Clear buffer list export const clearBuffers = () => { buffers = {}; -} +}; // stop buffer playback export const stopBuffer = () => { if (source) { source.stop(); - } -} - -// play buffer by section.id -export const playBuffer = (id) => { - source = audioContext.createBufferSource(); - source.buffer = buffers[id]; - source.connect(audioContext.destination); - source.start(); -} + }; +}; // Play buffer from given time export const playBufferFrom = (id, time) => { source = audioContext.createBufferSource(); - source.buffer = buffers[id]; - source.connect(audioContext.destination); + source.buffer = buffers[id]; + source.connect(audioContext.destination); source.start(0, time); -} +}; // Suspend webaudio (frees up resources) export const suspend = () => { audioContext.suspend(); -} +}; // Resume webaudio export const resume = () => { audioContext.resume(); -} +}; // Listen once to the given event // After that remove listener @@ -144,3 +136,17 @@ export const listenOnce = (event, callback) => { source.addEventListener(event, _callback); return remove; }; + +// function to check wether a users device is webaudio compatible +export const compatibleDevice = () => { + const userAgentString = window.navigator.userAgent; + let compatible = true; + // Disable webaudio for ios versions below 17 + if ((userAgentString.indexOf('iPhone') > -1 || userAgentString.indexOf('iPad') > -1) && (userAgentString.indexOf('OS') > -1)) { + const iosVersion = userAgentString.substring(userAgentString.indexOf('OS') + 3, userAgentString.indexOf('OS') + 5) + if (iosVersion < 17) { + compatible = false; + } + } + return compatible; +}; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index e7ab9b80a..182a67471 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -12,7 +12,7 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.0.1": +"@adobe/css-tools@npm:^4.3.1": version: 4.3.2 resolution: "@adobe/css-tools@npm:4.3.2" checksum: 296a03dd29f227c60500d2da8c7f64991fecf1d8b456ce2b4adb8cec7363d9c08b5b03f1463673fc8cbfe54b538745588e7a13c736d2dd14a80c01a20f127f39 @@ -70,6 +70,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.22.9 resolution: "@babel/compat-data@npm:7.22.9" @@ -84,6 +94,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/compat-data@npm:7.23.5" + checksum: 081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c + languageName: node + linkType: hard + "@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": version: 7.22.11 resolution: "@babel/core@npm:7.22.11" @@ -107,7 +124,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.13.16, @babel/core@npm:^7.22.0, @babel/core@npm:^7.22.9, @babel/core@npm:^7.7.5": +"@babel/core@npm:^7.11.6": version: 7.23.3 resolution: "@babel/core@npm:7.23.3" dependencies: @@ -130,6 +147,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.18.9, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2": + version: 7.23.6 + resolution: "@babel/core@npm:7.23.6" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-module-transforms": "npm:^7.23.3" + "@babel/helpers": "npm:^7.23.6" + "@babel/parser": "npm:^7.23.6" + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.23.6" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: a02bae7d916029b70706dc301535e1b31e5d216f55d4ee6f64a15825c6b69ee2c14c52a213d1497ec414e925ed4e9d897d41fb0d75df9fea28ed2c0008790e31 + languageName: node + linkType: hard + "@babel/eslint-parser@npm:^7.16.3": version: 7.22.11 resolution: "@babel/eslint-parser@npm:7.22.11" @@ -144,18 +184,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/generator@npm:7.23.3" - dependencies: - "@babel/types": "npm:^7.23.3" - "@jridgewell/gen-mapping": "npm:^0.3.2" - "@jridgewell/trace-mapping": "npm:^0.3.17" - jsesc: "npm:^2.5.1" - checksum: d5fff1417eecfada040e01a7c77a4968e81c436aeb35815ce85b4e80cd01e731423613d61033044a6cb5563bb8449ee260e3379b63eb50b38ec0a9ea9c00abfd - languageName: node - linkType: hard - "@babel/generator@npm:^7.22.10, @babel/generator@npm:^7.7.2": version: 7.22.10 resolution: "@babel/generator@npm:7.22.10" @@ -180,6 +208,30 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/generator@npm:7.23.3" + dependencies: + "@babel/types": "npm:^7.23.3" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: d5fff1417eecfada040e01a7c77a4968e81c436aeb35815ce85b4e80cd01e731423613d61033044a6cb5563bb8449ee260e3379b63eb50b38ec0a9ea9c00abfd + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" + dependencies: + "@babel/types": "npm:^7.23.6" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 53540e905cd10db05d9aee0a5304e36927f455ce66f95d1253bb8a179f286b88fa7062ea0db354c566fe27f8bb96567566084ffd259f8feaae1de5eccc8afbda + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -233,6 +285,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" + dependencies: + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-validator-option": "npm:^7.23.5" + browserslist: "npm:^4.22.2" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: ba38506d11185f48b79abf439462ece271d3eead1673dd8814519c8c903c708523428806f05f2ec5efd0c56e4e278698fac967e5a4b5ee842c32415da54bc6fa + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.10, @babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.5": version: 7.22.11 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.11" @@ -538,6 +603,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -566,6 +638,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-wrap-function@npm:7.22.20" @@ -610,6 +689,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helpers@npm:7.23.6" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.23.6" + checksum: df1cf6607676ad36f52f652ec03536f2732d70aef5e76dba5c964e34d49f3c2d3dcf9fb3740db359f53071d74b64606a833d5ba156f79f437f71bfe06e2e7e19 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.22.13": version: 7.22.13 resolution: "@babel/highlight@npm:7.22.13" @@ -621,6 +711,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.11, @babel/parser@npm:^7.22.5": version: 7.22.13 resolution: "@babel/parser@npm:7.22.13" @@ -630,7 +731,16 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.13.16, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.3": +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: ab4ea9360ed4ba3c728c5a9bf33035103ebde20a7e943c4ae1d42becb02a313d731d12a93c795c5a19777031e4022e64b92a52262eda902522a1a18649826283 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.3": version: 7.23.3 resolution: "@babel/parser@npm:7.23.3" bin: @@ -639,12 +749,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/parser@npm:7.23.0" +"@babel/parser@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" bin: parser: ./bin/babel-parser.js - checksum: ab4ea9360ed4ba3c728c5a9bf33035103ebde20a7e943c4ae1d42becb02a313d731d12a93c795c5a19777031e4022e64b92a52262eda902522a1a18649826283 + checksum: 6f76cd5ccae1fa9bcab3525b0865c6222e9c1d22f87abc69f28c5c7b2c8816a13361f5bd06bddbd5faf903f7320a8feba02545c981468acec45d12a03db7755e languageName: node linkType: hard @@ -708,7 +818,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.16.0": +"@babel/plugin-proposal-class-properties@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -735,7 +845,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -759,7 +869,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.16.0": +"@babel/plugin-proposal-optional-chaining@npm:^7.16.0": version: 7.21.0 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: @@ -1152,9 +1262,9 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3" +"@babel/plugin-transform-async-generator-functions@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.4" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -1162,7 +1272,7 @@ __metadata: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e846f282658e097fce4fccf3ee29289bf05f0654846a5994727a36f0cdc2e47abdffd4be4fa65787e94aa975824fae894c90afbfdc8caacd46c12c7f43e99d7f + checksum: f2eef4de609975a3f7da7832576b5ffc93e43c80f87e1a99e886b0f8591096cfc4c37e2d5f52fdeaa2a9c09a25a59f3e621159abaca75d3193922a5c0e4cbe0c languageName: node linkType: hard @@ -1225,14 +1335,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3" +"@babel/plugin-transform-block-scoping@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ccaeded7954c196811d22a35322579254cda52676e823682b6234885a3aaf88fe0d5152dacaec43db9031dcf35a050a5343e36028e5905b0ba9c02d36b30a57f + checksum: 83006804dddf980ab1bcd6d67bc381e24b58c776507c34f990468f820d0da71dba3697355ca4856532fa2eeb2a1e3e73c780f03760b5507a511cbedb0308e276 languageName: node linkType: hard @@ -1273,16 +1383,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-static-block@npm:7.23.3" +"@babel/plugin-transform-class-static-block@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-class-static-block@npm:7.23.4" dependencies: "@babel/helper-create-class-features-plugin": "npm:^7.22.15" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 89cdb66d7bc834cd51659eb7286a6bee23add0bc114943d68c4b6c0c834178cf0d55183df0cf508fec9c55ed4155641360e6f55a91c16fe826ccaf1adf381922 + checksum: fdca96640ef29d8641a7f8de106f65f18871b38cc01c0f7b696d2b49c76b77816b30a812c08e759d06dd10b4d9b3af6b5e4ac22a2017a88c4077972224b77ab0 languageName: node linkType: hard @@ -1305,9 +1415,9 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-classes@npm:7.23.3" +"@babel/plugin-transform-classes@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/plugin-transform-classes@npm:7.23.5" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-compilation-targets": "npm:^7.22.15" @@ -1320,7 +1430,7 @@ __metadata: globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 88bfd332db0ba5cbfb8557a2ba5a7185151aebc9cfe3035b014aa6d795556acbe672bb8c78da3c9fd1d23f55a333d14b5daa127ef037f5ced5198b6d79a146d6 + checksum: 07988f52b4893151887d1ea6ff79e5fe834078c5731bd09babd5659edbbae21ea4e2de326a02443a63fd776b4c945da6177f07875b56fe66e0b7899e830a9e92 languageName: node linkType: hard @@ -1428,15 +1538,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.3" +"@babel/plugin-transform-dynamic-import@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: df3fd130312dc53d068fa76333991dce5e86987b023af8c3b502bd7d36a8e67da6f718e61dc838576a9fbacd06628e29607ee22d9bae30705485c14130eab201 + checksum: 19ae4a4a2ca86d35224734c41c48b2aa6a13139f3cfa1cbd18c0e65e461de8b65687dec7e52b7a72bb49db04465394c776aa1b13a2af5dc975b2a0cde3dcab67 languageName: node linkType: hard @@ -1476,15 +1586,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.3" +"@babel/plugin-transform-export-namespace-from@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 390c6626dcda99023629049d92090242b4575351a4a7b47f97febabd2381f2cd0f624de661d8de8d1f715fedd63753cfd1feddead19e5960c27b88e447465b81 + checksum: 38bf04f851e36240bbe83ace4169da626524f4107bfb91f05b4ad93a5fb6a36d5b3d30b8883c1ba575ccfc1bac7938e90ca2e3cb227f7b3f4a9424beec6fd4a7 languageName: node linkType: hard @@ -1523,14 +1633,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-for-of@npm:7.23.3" +"@babel/plugin-transform-for-of@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/plugin-transform-for-of@npm:7.23.6" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8a36202cfee312ba80e509c7c2131e6773524e572b4dc64a8ee95bd912634fdeb5ea91c6c7747ee30e03562d0f0d333f88ed7dbb929b36b60b8d74189189e12f + checksum: 46681b6ab10f3ca2d961f50d4096b62ab5d551e1adad84e64be1ee23e72eb2f26a1e30e617e853c74f1349fffe4af68d33921a128543b6f24b6d46c09a3e2aec languageName: node linkType: hard @@ -1572,15 +1683,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-json-strings@npm:7.23.3" +"@babel/plugin-transform-json-strings@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-json-strings@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e1cef6a485b9da32aba9449fb459dac062dfc401f3d6ad48e7fbdcb73bbe470c995cc15ce5c421b95efe1e9a90d5507eb606360fe10b6d8cb869dd5dae7a2562 + checksum: 39e82223992a9ad857722ae051291935403852ad24b0dd64c645ca1c10517b6bf9822377d88643fed8b3e61a4e3f7e5ae41cf90eb07c40a786505d47d5970e54 languageName: node linkType: hard @@ -1618,15 +1729,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.3" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 23b7588b26d420c8b132bd08916d49871ca0c8db892f6b58637b10e2a0d918163d413c505db880a9157fc2e61d089040f139298a60d837ccbd0efca0474ac7ca + checksum: 87b034dd13143904e405887e6125d76c27902563486efc66b7d9a9d8f9406b76c6ac42d7b37224014af5783d7edb465db0cdecd659fa3227baad0b3a6a35deff languageName: node linkType: hard @@ -1676,29 +1787,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" +"@babel/plugin-transform-modules-commonjs@npm:^7.22.11, @babel/plugin-transform-modules-commonjs@npm:^7.22.5": + version: 7.22.11 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.11" dependencies: - "@babel/helper-module-transforms": "npm:^7.23.3" + "@babel/helper-module-transforms": "npm:^7.22.9" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d + checksum: 3c51fb9e3c3d9d35a6572f8ceb7701bdd971022e9a0c4f292d97a6f63131ba24359794a082be081f00af4d9d26fdfe460c2e0c6325726cdd8c286e6df5446015 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.22.11, @babel/plugin-transform-modules-commonjs@npm:^7.22.5": - version: 7.22.11 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.11" +"@babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" dependencies: - "@babel/helper-module-transforms": "npm:^7.22.9" + "@babel/helper-module-transforms": "npm:^7.23.3" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3c51fb9e3c3d9d35a6572f8ceb7701bdd971022e9a0c4f292d97a6f63131ba24359794a082be081f00af4d9d26fdfe460c2e0c6325726cdd8c286e6df5446015 + checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d languageName: node linkType: hard @@ -1788,27 +1899,27 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": - version: 7.22.11 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 328c0ebfbbc82256af00252fb795996b093f57b528a57afcb30843ca52d24a6d824029ad6d22f042f3af336bb4dc1963b4841c2ad774424b02d14ae7cfff2701 + checksum: bce490d22da5c87ff27fffaff6ad5a4d4979b8d7b72e30857f191e9c1e1824ba73bb8d7081166289369e388f94f0ce5383a593b1fc84d09464a062c75f824b0b languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.3" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": + version: 7.22.11 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f960faed3975c8454c52d2b5d85daf0c9a27677b248d7933882e59b10202ade2a98c7b925ce0bae2b8eb4d66eb5d63a5588c1090d54eaa4cd235533d71228ff3 + checksum: 328c0ebfbbc82256af00252fb795996b093f57b528a57afcb30843ca52d24a6d824029ad6d22f042f3af336bb4dc1963b4841c2ad774424b02d14ae7cfff2701 languageName: node linkType: hard @@ -1824,15 +1935,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.3" +"@babel/plugin-transform-numeric-separator@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d3748cce20e8752e61dfda55e275c699459a3ff8d0bb46585da813136e04066b1ce70b71beef504fcdc8d4cca3c955112cea96d5e9fd5a42a5bc8956d05236c2 + checksum: e34902da4f5588dc4812c92cb1f6a5e3e3647baf7b4623e30942f551bf1297621abec4e322ebfa50b320c987c0f34d9eb4355b3d289961d9035e2126e3119c12 languageName: node linkType: hard @@ -1851,9 +1962,9 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.3" +"@babel/plugin-transform-object-rest-spread@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4" dependencies: "@babel/compat-data": "npm:^7.23.3" "@babel/helper-compilation-targets": "npm:^7.22.15" @@ -1862,7 +1973,7 @@ __metadata: "@babel/plugin-transform-parameters": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 31ab631aaba945c118662943e5f1f54a21f07d64f06e06b25d55871168c460f3eeeccdf7b05aa74a1340e2cfbe781ad3c7ceccd0c2585d39f7b73ba11ebaa9d0 + checksum: b56017992ffe7fcd1dd9a9da67c39995a141820316266bcf7d77dc912980d228ccbd3f36191d234f5cc389b09157b5d2a955e33e8fb368319534affd1c72b262 languageName: node linkType: hard @@ -1902,15 +2013,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.3" +"@babel/plugin-transform-optional-catch-binding@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 85ac1e94ee8f21648816151628ff931cc16143ec8c904649a1ecfd8960160290eccc5a197b4ae3ee7a1c7a27a7c4189e61b4de24483d5bad4040784afe2d206f + checksum: 4ef61812af0e4928485e28301226ce61139a8b8cea9e9a919215ebec4891b9fea2eb7a83dc3090e2679b7d7b2c8653da601fbc297d2addc54a908b315173991e languageName: node linkType: hard @@ -1927,6 +2038,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.23.0, @babel/plugin-transform-optional-chaining@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 305b773c29ad61255b0e83ec1e92b2f7af6aa58be4cba1e3852bddaa14f7d2afd7b4438f41c28b179d6faac7eb8d4fb5530a17920294f25d459b8f84406bfbfb + languageName: node + linkType: hard + "@babel/plugin-transform-optional-chaining@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3" @@ -2000,9 +2124,9 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.3" +"@babel/plugin-transform-private-property-in-object@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-create-class-features-plugin": "npm:^7.22.15" @@ -2010,7 +2134,7 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9211dd25a6e87a01535f2d97a663fa6de3472b963c8dcfaacce229a2e3fa6500f2e9fc690bc100a540fc7b66c8364faf7ef19b32e9c9b9791e4561b742c15ed3 + checksum: 8d31b28f24204b4d13514cd3a8f3033abf575b1a6039759ddd6e1d82dd33ba7281f9bc85c9f38072a665d69bfa26dc40737eefaf9d397b024654a483d2357bf5 languageName: node linkType: hard @@ -2520,14 +2644,14 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.22.9": - version: 7.23.3 - resolution: "@babel/preset-env@npm:7.23.3" +"@babel/preset-env@npm:^7.23.2": + version: 7.23.6 + resolution: "@babel/preset-env@npm:7.23.6" dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" + "@babel/helper-validator-option": "npm:^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.3" @@ -2551,25 +2675,25 @@ __metadata: "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" - "@babel/plugin-transform-async-generator-functions": "npm:^7.23.3" + "@babel/plugin-transform-async-generator-functions": "npm:^7.23.4" "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" - "@babel/plugin-transform-block-scoping": "npm:^7.23.3" + "@babel/plugin-transform-block-scoping": "npm:^7.23.4" "@babel/plugin-transform-class-properties": "npm:^7.23.3" - "@babel/plugin-transform-class-static-block": "npm:^7.23.3" - "@babel/plugin-transform-classes": "npm:^7.23.3" + "@babel/plugin-transform-class-static-block": "npm:^7.23.4" + "@babel/plugin-transform-classes": "npm:^7.23.5" "@babel/plugin-transform-computed-properties": "npm:^7.23.3" "@babel/plugin-transform-destructuring": "npm:^7.23.3" "@babel/plugin-transform-dotall-regex": "npm:^7.23.3" "@babel/plugin-transform-duplicate-keys": "npm:^7.23.3" - "@babel/plugin-transform-dynamic-import": "npm:^7.23.3" + "@babel/plugin-transform-dynamic-import": "npm:^7.23.4" "@babel/plugin-transform-exponentiation-operator": "npm:^7.23.3" - "@babel/plugin-transform-export-namespace-from": "npm:^7.23.3" - "@babel/plugin-transform-for-of": "npm:^7.23.3" + "@babel/plugin-transform-export-namespace-from": "npm:^7.23.4" + "@babel/plugin-transform-for-of": "npm:^7.23.6" "@babel/plugin-transform-function-name": "npm:^7.23.3" - "@babel/plugin-transform-json-strings": "npm:^7.23.3" + "@babel/plugin-transform-json-strings": "npm:^7.23.4" "@babel/plugin-transform-literals": "npm:^7.23.3" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.3" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.4" "@babel/plugin-transform-member-expression-literals": "npm:^7.23.3" "@babel/plugin-transform-modules-amd": "npm:^7.23.3" "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" @@ -2577,15 +2701,15 @@ __metadata: "@babel/plugin-transform-modules-umd": "npm:^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" "@babel/plugin-transform-new-target": "npm:^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.3" - "@babel/plugin-transform-numeric-separator": "npm:^7.23.3" - "@babel/plugin-transform-object-rest-spread": "npm:^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" + "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" + "@babel/plugin-transform-object-rest-spread": "npm:^7.23.4" "@babel/plugin-transform-object-super": "npm:^7.23.3" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.3" - "@babel/plugin-transform-optional-chaining": "npm:^7.23.3" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" + "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" "@babel/plugin-transform-parameters": "npm:^7.23.3" "@babel/plugin-transform-private-methods": "npm:^7.23.3" - "@babel/plugin-transform-private-property-in-object": "npm:^7.23.3" + "@babel/plugin-transform-private-property-in-object": "npm:^7.23.4" "@babel/plugin-transform-property-literals": "npm:^7.23.3" "@babel/plugin-transform-regenerator": "npm:^7.23.3" "@babel/plugin-transform-reserved-words": "npm:^7.23.3" @@ -2606,11 +2730,11 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 36b02a86817ab5474bb74a8d62a110723b0b05904a52ddc5627cf89457525b8d5ac0739b8e435a6ae12ef8b90cd5fc191169898c3dc2ac9d2c84026b02f2580a + checksum: 5b24d179af52f082d04b9b98cc4777e37bf31a97cef5a91d8917e996dbd75f2f743c88c40f80744cb8529355bb674619d150c0260c32d834aa4067e21d0c8962 languageName: node linkType: hard -"@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.22.5": +"@babel/preset-flow@npm:^7.22.15": version: 7.23.3 resolution: "@babel/preset-flow@npm:7.23.3" dependencies: @@ -2652,7 +2776,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.22.5": +"@babel/preset-react@npm:^7.22.15": version: 7.23.3 resolution: "@babel/preset-react@npm:7.23.3" dependencies: @@ -2668,21 +2792,6 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0": - version: 7.23.3 - resolution: "@babel/preset-typescript@npm:7.23.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-syntax-jsx": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-typescript": "npm:^7.23.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 - languageName: node - linkType: hard - "@babel/preset-typescript@npm:^7.16.0": version: 7.22.11 resolution: "@babel/preset-typescript@npm:7.22.11" @@ -2698,7 +2807,22 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.13.16": +"@babel/preset-typescript@npm:^7.23.0": + version: 7.23.3 + resolution: "@babel/preset-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.15" + "@babel/plugin-syntax-jsx": "npm:^7.23.3" + "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" + "@babel/plugin-transform-typescript": "npm:^7.23.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 + languageName: node + linkType: hard + +"@babel/register@npm:^7.22.15": version: 7.22.15 resolution: "@babel/register@npm:7.22.15" dependencies: @@ -2729,7 +2853,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.7.6": +"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.17.8": version: 7.23.2 resolution: "@babel/runtime@npm:7.23.2" dependencies: @@ -2738,6 +2862,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.7.6": + version: 7.23.7 + resolution: "@babel/runtime@npm:7.23.7" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 3e304133ee55b0750e03e53cb4efb47fb2bdcdb5795f85bbffa10595196c34b9be60eb65bd6d833c87f49fc827f0365f86f95f51d85b188004d3128bb5129c93 + languageName: node + linkType: hard + "@babel/template@npm:^7.22.15": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" @@ -2760,21 +2893,21 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/traverse@npm:7.23.3" +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/traverse@npm:7.23.6" dependencies: - "@babel/code-frame": "npm:^7.22.13" - "@babel/generator": "npm:^7.23.3" + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.3" - "@babel/types": "npm:^7.23.3" - debug: "npm:^4.1.0" + "@babel/parser": "npm:^7.23.6" + "@babel/types": "npm:^7.23.6" + debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 3c2784f4765185126d64fd5eebce0413b7aee6d54f779998594a343a7f973a9693a441ba27533df84e7ab7ce22f1239c6837f35e903132a1b25f7fc7a67bc30f + checksum: 5b4ebb94a00a7e1daf111e4b0b45a7998d5b7598637a14e75e855e88cc1b702789e09a958726b5d599a003be1e9032dbdfde4b88ea6061332228738950d5582d languageName: node linkType: hard @@ -2796,6 +2929,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/traverse@npm:7.23.3" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.3" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.3" + "@babel/types": "npm:^7.23.3" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 3c2784f4765185126d64fd5eebce0413b7aee6d54f779998594a343a7f973a9693a441ba27533df84e7ab7ce22f1239c6837f35e903132a1b25f7fc7a67bc30f + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.11, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.22.11 resolution: "@babel/types@npm:7.22.11" @@ -2807,14 +2958,14 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.2.0, @babel/types@npm:^7.22.19, @babel/types@npm:^7.23.3, @babel/types@npm:^7.8.3": - version: 7.23.3 - resolution: "@babel/types@npm:7.23.3" +"@babel/types@npm:^7.18.9, @babel/types@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" dependencies: - "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: 371a10dd9c8d8ebf48fc5d9e1b327dafd74453f8ea582dcbddd1cee5ae34e8881b743e783a86c08c04dcd1849b1842455472a911ae8a1c185484fe9b7b5f1595 + checksum: 42cefce8a68bd09bb5828b4764aa5586c53c60128ac2ac012e23858e1c179347a4aac9c66fc577994fbf57595227611c5ec8270bf0cfc94ff033bbfac0550b70 languageName: node linkType: hard @@ -2829,6 +2980,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.22.19, @babel/types@npm:^7.23.3, @babel/types@npm:^7.8.3": + version: 7.23.3 + resolution: "@babel/types@npm:7.23.3" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 371a10dd9c8d8ebf48fc5d9e1b327dafd74453f8ea582dcbddd1cee5ae34e8881b743e783a86c08c04dcd1849b1842455472a911ae8a1c185484fe9b7b5f1595 + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -3508,7 +3670,7 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": +"@istanbuljs/schema@npm:^0.1.2": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a @@ -3596,15 +3758,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/expect-utils@npm:29.6.4" - dependencies: - jest-get-type: "npm:^29.6.3" - checksum: 17d87d551090f6b460fa45605c614b2ad28e257360a5b8152216fe983370f4cfb8482d2d017552c2be43be1caa0ff5594f1381be17798dcad3899e05b297fe83 - languageName: node - linkType: hard - "@jest/fake-timers@npm:^27.5.1": version: 27.5.1 resolution: "@jest/fake-timers@npm:27.5.1" @@ -3855,30 +4008,30 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 0ea0b2675cf513ec44dc25605616a3c9b808b9832e74b5b63c44260d66b58558bba65764f81928fc1033ead911f8718dca1134049c3e7a93937faf436671df31 + checksum: 845e6c6efca621b2b85e4d13fd25c319b6e4ab1ea78d4385ff6c0f78322ea0fcdfec8ac763aa4b56e8378c96d7bef101a2638c7a1a076f7d62f6376230c940a7 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.19 - resolution: "@jridgewell/trace-mapping@npm:0.3.19" +"@jridgewell/trace-mapping@npm:^0.3.18": + version: 0.3.20 + resolution: "@jridgewell/trace-mapping@npm:0.3.20" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 845e6c6efca621b2b85e4d13fd25c319b6e4ab1ea78d4385ff6c0f78322ea0fcdfec8ac763aa4b56e8378c96d7bef101a2638c7a1a076f7d62f6376230c940a7 + checksum: 0ea0b2675cf513ec44dc25605616a3c9b808b9832e74b5b63c44260d66b58558bba65764f81928fc1033ead911f8718dca1134049c3e7a93937faf436671df31 languageName: node linkType: hard @@ -3984,7 +4137,7 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.1, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.5": +"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.1, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.11, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": version: 0.5.11 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.11" dependencies: @@ -4776,111 +4929,61 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-actions@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-actions@npm:7.5.3" +"@storybook/addon-actions@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-actions@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" + "@storybook/core-events": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@types/uuid": "npm:^9.0.1" dequal: "npm:^2.0.2" - lodash: "npm:^4.17.21" polished: "npm:^4.2.2" - prop-types: "npm:^15.7.2" - react-inspector: "npm:^6.0.0" - telejson: "npm:^7.2.0" - ts-dedent: "npm:^2.0.0" uuid: "npm:^9.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: c9077396239e03370a6010f6cf60cfa566fab7e39c013d887f78398a17b29774d34991eaa8560add3692c25a12ac1db01b15b7a8552709b1d700aac0b7e24c5f + checksum: 71bfd976c0b9f23bd23661787f382193814291e2ad06d7828c70b6c5c4e1f0636d02d8a7788828037a62dee4f87ce6ce25a9c6b79ed6d8a6db94b698cfaf614a languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-backgrounds@npm:7.5.3" +"@storybook/addon-backgrounds@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-backgrounds@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" memoizerific: "npm:^1.11.3" ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 70308dbec3cc77e3978d1036e5dc442c3ec84904d5d44e877c286d1db56d7f0d87dc5eea1284160006111b10e2e57f9b4c55025fd953dbcc3717a5e9c6025d63 + checksum: 485e9712c82e72579ad538a36bac1200e652dbf42141164f75930ddd2d394493adbba94ad930ff4233504a3f9b9bdded51df5c4758e14703727ec7789448d283 languageName: node linkType: hard -"@storybook/addon-controls@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-controls@npm:7.5.3" +"@storybook/addon-controls@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-controls@npm:7.6.6" dependencies: - "@storybook/blocks": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/blocks": "npm:7.6.6" lodash: "npm:^4.17.21" ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 43d39c726ff9c21aab0472f0b56e17633b2c1bc4ad3c445b0e718eff92efde29a3c6c5b4d3cd50841c9d03fe6b8231873e9dedf178e4b11efaa79ff717ca25b3 + checksum: 895139db0c3f8e2fd8ad666133e60c8fab9c514baae4d895d2c533c2501114ed271f0e8c8997ba2220f560634028d55a991389ab48373b73840a5be24331214d languageName: node linkType: hard -"@storybook/addon-docs@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-docs@npm:7.5.3" +"@storybook/addon-docs@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-docs@npm:7.6.6" dependencies: "@jest/transform": "npm:^29.3.1" "@mdx-js/react": "npm:^2.1.5" - "@storybook/blocks": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/csf-plugin": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" + "@storybook/blocks": "npm:7.6.6" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/components": "npm:7.6.6" + "@storybook/csf-plugin": "npm:7.6.6" + "@storybook/csf-tools": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" "@storybook/mdx2-csf": "npm:^1.0.0" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/postinstall": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/react-dom-shim": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/postinstall": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" + "@storybook/react-dom-shim": "npm:7.6.6" + "@storybook/theming": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" fs-extra: "npm:^11.1.0" remark-external-links: "npm:^8.0.0" remark-slug: "npm:^6.0.0" @@ -4888,223 +4991,137 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: a54f608cbf9f67db3dde5c2fc8ce05579a2a3ca449cf52a919535710881d88d6548fffad8c1fc7964a16d6e68578a85b5cf1ab3d15b691a0154d94ab444feab1 - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-essentials@npm:7.5.3" - dependencies: - "@storybook/addon-actions": "npm:7.5.3" - "@storybook/addon-backgrounds": "npm:7.5.3" - "@storybook/addon-controls": "npm:7.5.3" - "@storybook/addon-docs": "npm:7.5.3" - "@storybook/addon-highlight": "npm:7.5.3" - "@storybook/addon-measure": "npm:7.5.3" - "@storybook/addon-outline": "npm:7.5.3" - "@storybook/addon-toolbars": "npm:7.5.3" - "@storybook/addon-viewport": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" + checksum: f98102c91d0f811a75f765088a3cc4ec2e79ce7ae07eb102ca49f7cc2f1fd54e9ad54ee94b560812d93cad9ad0ece5dd83f916f6d133ec8aebaa3ecea177ed76 + languageName: node + linkType: hard + +"@storybook/addon-essentials@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-essentials@npm:7.6.6" + dependencies: + "@storybook/addon-actions": "npm:7.6.6" + "@storybook/addon-backgrounds": "npm:7.6.6" + "@storybook/addon-controls": "npm:7.6.6" + "@storybook/addon-docs": "npm:7.6.6" + "@storybook/addon-highlight": "npm:7.6.6" + "@storybook/addon-measure": "npm:7.6.6" + "@storybook/addon-outline": "npm:7.6.6" + "@storybook/addon-toolbars": "npm:7.6.6" + "@storybook/addon-viewport": "npm:7.6.6" + "@storybook/core-common": "npm:7.6.6" + "@storybook/manager-api": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" ts-dedent: "npm:^2.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 4f74cb0558c965b04e955004f8902464341bc87f790d6b80b2824a8707b4038ca3334634f7a0e29c814de913b38eb1e116bb58db86f8819ea37bd5d6cb927a39 + checksum: 3392e9fe5994f996804425a942762f7bdb8f26344848d9b58a81b50d85f9ce86ebdaf2ba15d7dac1f64897a61b61653ead3f2e995897cfd7fe894f60e452ac56 languageName: node linkType: hard -"@storybook/addon-highlight@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-highlight@npm:7.5.3" +"@storybook/addon-highlight@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-highlight@npm:7.6.6" dependencies: - "@storybook/core-events": "npm:7.5.3" "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - checksum: d0d8665682bcbc4241489e75695dba4fa831803ddbe17c0936dc7a1e1981237f8698b6b228031594def37a2df9a7ce217afc279aa4f3af052c67c2579972bf70 + checksum: fc526ae81476dca1b0d4e1f062af41ba534a06a762bd1197a5c30e10d68cb94ab3d42454171609de32cc2283adee37f0d29c84704c436a02b9bd1fa03b97c8d7 languageName: node linkType: hard -"@storybook/addon-interactions@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-interactions@npm:7.5.3" +"@storybook/addon-interactions@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-interactions@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/types": "npm:7.6.6" jest-mock: "npm:^27.0.6" polished: "npm:^4.2.2" ts-dedent: "npm:^2.2.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: e9c4b42e781a56f151687a8c116bcdfd2033ff104af66d2e802f35d6f1fc859c1b312186946836cd4be7ebba8b85487c9f4a17b0b2d54778cd88066fc7ed03d5 + checksum: 6ae3d389f5a569fb718b4137f4dbba16d7524af8f1e6b3da7a0b6793fae1402eea27be2d6741d662824f1e000147f39a0300ac3b46f809cfd916d60483e2ac1b languageName: node linkType: hard -"@storybook/addon-links@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-links@npm:7.5.3" +"@storybook/addon-links@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-links@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" + "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/router": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" - prop-types: "npm:^15.7.2" ts-dedent: "npm:^2.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true - react-dom: - optional: true - checksum: 5ac8ccf17be8a2029a028cb1e680bcc24ea937b60e5a1d785018668b4388809c5a42744ec4a9c17d1e6571241298c7f4de0750ab32feed49b82ac32aa4d6dcbc + checksum: 2598ee0bff2794f86e5797d0cae157960b6ba083820628d1bf1a90ef0d48dc7d54901a5cb8cba8cdf3d2aa8e5147b6e362034981a5a5ff14870b594d49b6898f languageName: node linkType: hard -"@storybook/addon-measure@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-measure@npm:7.5.3" +"@storybook/addon-measure@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-measure@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" tiny-invariant: "npm:^1.3.1" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 48a7bf4d6b252ec1b892ece3ee0bf3385ede2aa7a284f49443fe77d36d64cc12366051a6ad3b403da7282f2e631253722b76cf7310f0110c5da812fa27c8cc6b + checksum: 7dfa01eedb3432afff9122afa091f9d841a81b18a4049d2bf50525de1914511ffd7fb4c1fc1349a3c07148d0f69fe38761635b576da4bf735863be7f8089ba8f languageName: node linkType: hard -"@storybook/addon-onboarding@npm:1.0.8": - version: 1.0.8 - resolution: "@storybook/addon-onboarding@npm:1.0.8" +"@storybook/addon-onboarding@npm:1.0.10": + version: 1.0.10 + resolution: "@storybook/addon-onboarding@npm:1.0.10" dependencies: - "@storybook/telemetry": "npm:^7.1.0-alpha.32" + "@storybook/telemetry": "npm:^7.1.0" react-confetti: "npm:^6.1.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 12444cd8831e289df6e46d76fb61932678e4424e591a3ea0be1517547e2111bd35e54161674b851d00d507b05b7e28c6ca83e2b1b09bca483004c51b8f4b5acd + checksum: 4ee04976e9adcf73d9b3645b766e39ba19e34144c05348b63390719cdf77f79fe9e44da45af2cd61849940427c1c553563165d57511e54e1bf26fb3817ec53dc languageName: node linkType: hard -"@storybook/addon-outline@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-outline@npm:7.5.3" +"@storybook/addon-outline@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-outline@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 754413dc06a7fc4a0e0bd8e64553443afd0930b387ddeec5b32ef1e84ba9740d0944f9e60d793d8797fd588400c09fdfb3c5aa9330955bb4967e0b1c1fa3f309 + checksum: 789ce5acd082256ccc5e754c6877beb45d8d27e9c3aef30a9eef0f391beaa4fbac25053a860136f74a4bfc6c593684f194e1a5cce299c67a969cfa2bb027026d languageName: node linkType: hard -"@storybook/addon-toolbars@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-toolbars@npm:7.5.3" - dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: d0c393c9e16b14654fdc92a78eaf20b2c0685fa1ac9c1d1011c11e72cc5ad69a187ef7ac2e6568e3a77c32a53c524da126b55f3d7a31d97d958bc809d34b79c8 +"@storybook/addon-toolbars@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-toolbars@npm:7.6.6" + checksum: 1a71902f5e4a0e1d54847fdbe1312355eac6f3043ccd4c0ebaabb057b530b6c271bdad0a13e7b84b2cc2a604b144234567177f43a8bd1411a671d496c6151693 languageName: node linkType: hard -"@storybook/addon-viewport@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/addon-viewport@npm:7.5.3" +"@storybook/addon-viewport@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/addon-viewport@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" memoizerific: "npm:^1.11.3" - prop-types: "npm:^15.7.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 50207e3bb943ea43914513324fc35c8036556a797c20f1b66bf89615a7158450652d78bbe9ae09a11c539d4dcfeb8a716f1bb41d92e3fecca61aa1ac5bf8646f + checksum: 4821247b05fb08771c65ae2a31e54acae5ce75ceef251693789d1fbe40b8baf948848f3b22032df62053a20a46b16b14f2a0234f5576ec970ef2bb81c7cac124 languageName: node linkType: hard -"@storybook/blocks@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/blocks@npm:7.5.3" +"@storybook/blocks@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/blocks@npm:7.6.6" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/components": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/docs-tools": "npm:7.5.3" + "@storybook/channels": "npm:7.6.6" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/components": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/csf": "npm:^0.1.2" + "@storybook/docs-tools": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/manager-api": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" + "@storybook/theming": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/lodash": "npm:^4.14.167" color-convert: "npm:^2.0.1" dequal: "npm:^2.0.2" @@ -5120,18 +5137,18 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: d7036bea0ff1137063dd7aab28a6fe2e114809127b7f53aadfae272b752b1ffaaf54ec8cbdff689da54285d64cfff58108885fe8f937748efc71a7bbdae0bf75 + checksum: b824c337fe4f8eafc36c2c41f69ce005db364bf9b9396110b00f87b2e7600a9827663d80e1ab85c34e5ee4697f9109857a4547aabc37d99f68cbf482596dbf4b languageName: node linkType: hard -"@storybook/builder-manager@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/builder-manager@npm:7.5.3" +"@storybook/builder-manager@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/builder-manager@npm:7.6.6" dependencies: "@fal-works/esbuild-plugin-global-externals": "npm:^2.1.2" - "@storybook/core-common": "npm:7.5.3" - "@storybook/manager": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" + "@storybook/core-common": "npm:7.6.6" + "@storybook/manager": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" "@types/ejs": "npm:^3.1.1" "@types/find-cache-dir": "npm:^3.2.1" "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" @@ -5144,36 +5161,37 @@ __metadata: fs-extra: "npm:^11.1.0" process: "npm:^0.11.10" util: "npm:^0.12.4" - checksum: 35ed5138a7b7fd968539a3b177a3b8b9a2eff4ddea0a05eb1134188a5c14c0d4334a8e7ac6e5bb5a2eea0c1fe7eec079eee7e056a9584933fd1e9f01def98157 + checksum: a6f2ca8c4478f15c561cea0f06f4bc38af5eaf39d743803414561546c04d3707f485f8cd219f83863d3d3ccade10600d1f3053bdb8cdbdf19da19acdc4c86097 languageName: node linkType: hard -"@storybook/builder-webpack5@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/builder-webpack5@npm:7.5.3" +"@storybook/builder-webpack5@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/builder-webpack5@npm:7.6.6" dependencies: - "@babel/core": "npm:^7.22.0" - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/core-webpack": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" + "@babel/core": "npm:^7.23.2" + "@storybook/channels": "npm:7.6.6" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-common": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/core-webpack": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/preview": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" "@swc/core": "npm:^1.3.82" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" babel-loader: "npm:^9.0.0" - babel-plugin-named-exports-order: "npm:^0.0.2" browser-assert: "npm:^1.2.1" case-sensitive-paths-webpack-plugin: "npm:^2.4.0" constants-browserify: "npm:^1.0.0" css-loader: "npm:^6.7.1" + es-module-lexer: "npm:^1.4.1" express: "npm:^4.17.3" fork-ts-checker-webpack-plugin: "npm:^8.0.0" fs-extra: "npm:^11.1.0" html-webpack-plugin: "npm:^5.5.0" + magic-string: "npm:^0.30.5" path-browserify: "npm:^1.0.1" process: "npm:^0.11.10" semver: "npm:^7.3.7" @@ -5191,40 +5209,40 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ac979ca329a55796743790adcd1279ee92628c81dfc2fb1d2a399b00baf88b5ed99b4ba386bc39177ded26edf8e3a75ced2cd89c5d361865edd358fd288d0fc4 + checksum: dd0c14966fad66d3fb24fc30c3b6ee7b62db003112154902f8eaaec2784589183f41d0cfd41a2f16948f838400567faa0b56dd6023a4b3698800273839d9fb2c languageName: node linkType: hard -"@storybook/channels@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/channels@npm:7.5.3" +"@storybook/channels@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/channels@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" qs: "npm:^6.10.0" telejson: "npm:^7.2.0" tiny-invariant: "npm:^1.3.1" - checksum: 875977b663c0d9d82e47206fa94bbe2f072b2e8700e1f7bec9a0848bbc368247c270d1823221b3455292dd68cc580483a03849bc43e92c551b2224932ff57f92 + checksum: 081666ebe90e1710ed1cd8eb0cae01ff1a307d448c83f83a51d4ff9d55fa54063460024f6d6464ffb0713be37471120a2d60a9981dfcd786cf6a628487c525c2 languageName: node linkType: hard -"@storybook/cli@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/cli@npm:7.5.3" +"@storybook/cli@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/cli@npm:7.6.6" dependencies: - "@babel/core": "npm:^7.22.9" - "@babel/preset-env": "npm:^7.22.9" - "@babel/types": "npm:^7.22.5" + "@babel/core": "npm:^7.23.2" + "@babel/preset-env": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" "@ndelangen/get-tarball": "npm:^3.0.7" - "@storybook/codemod": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/core-server": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/telemetry": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/codemod": "npm:7.6.6" + "@storybook/core-common": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/core-server": "npm:7.6.6" + "@storybook/csf-tools": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/telemetry": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/semver": "npm:^7.3.4" "@yarnpkg/fslib": "npm:2.10.3" "@yarnpkg/libzip": "npm:2.3.0" @@ -5241,7 +5259,7 @@ __metadata: get-port: "npm:^5.1.1" giget: "npm:^1.0.0" globby: "npm:^11.0.2" - jscodeshift: "npm:^0.14.0" + jscodeshift: "npm:^0.15.1" leven: "npm:^3.1.0" ora: "npm:^5.4.1" prettier: "npm:^2.8.0" @@ -5257,79 +5275,79 @@ __metadata: bin: getstorybook: ./bin/index.js sb: ./bin/index.js - checksum: 8d1e694fb39d805482f5b61fa9b2c4fcc5fa70cfe97ba64e0be220b73faaf69454e7347f1630618e53e6c3abb6c152c57df72f6b93b103a172b8930f4286f480 + checksum: 2f186d602508c19e4a46b69c2e1bb4d41c00e81c4cbed3babd91e522fb29a70313a49924376f4d50a23ccb9becbf2226891303840af864d5f2f2be5dace8c2f0 languageName: node linkType: hard -"@storybook/client-logger@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/client-logger@npm:7.5.3" +"@storybook/client-logger@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/client-logger@npm:7.6.6" dependencies: "@storybook/global": "npm:^5.0.0" - checksum: 43997b47a4e49b38c599a08de1cec7a6ae6f000ec35a1d676522325aba60bc11507ad18cb0f40954bcfd77dfbb853493687e4e8fd88e2fdac07cd282ecc0d0bf + checksum: c7d1c8ef8d885c1b82b27a7ef45d75b33cb5a8805dc978240b82e4d319165e690a28b296fb9d364a0450be2fad478e49e99b898294c520082f7f9890dda8f1a6 languageName: node linkType: hard -"@storybook/codemod@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/codemod@npm:7.5.3" +"@storybook/codemod@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/codemod@npm:7.6.6" dependencies: - "@babel/core": "npm:^7.22.9" - "@babel/preset-env": "npm:^7.22.9" - "@babel/types": "npm:^7.22.5" - "@storybook/csf": "npm:^0.1.0" - "@storybook/csf-tools": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@babel/core": "npm:^7.23.2" + "@babel/preset-env": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" + "@storybook/csf": "npm:^0.1.2" + "@storybook/csf-tools": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/cross-spawn": "npm:^6.0.2" cross-spawn: "npm:^7.0.3" globby: "npm:^11.0.2" - jscodeshift: "npm:^0.14.0" + jscodeshift: "npm:^0.15.1" lodash: "npm:^4.17.21" prettier: "npm:^2.8.0" recast: "npm:^0.23.1" - checksum: 83c3e2306a00e2351b1a9930fe1a85eeffb5cee5a92946339352094c01d6d5c223ec3be075e35e7d1abd9957a69046d32f414625cfc245c6b567d76443567c20 + checksum: 0611928617ceeb998b82353cf7926b9a7f7db3729dc5cf3230bf28794b1fbfba113fbf94edeed2ac67926359f8dc4cd2f1e3646075b27aedd65f9399e21e6314 languageName: node linkType: hard -"@storybook/components@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/components@npm:7.5.3" +"@storybook/components@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/components@npm:7.6.6" dependencies: "@radix-ui/react-select": "npm:^1.2.2" "@radix-ui/react-toolbar": "npm:^1.0.4" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/theming": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" memoizerific: "npm:^1.11.3" use-resize-observer: "npm:^9.1.0" util-deprecate: "npm:^1.0.2" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 7d25a5fa2d7c8686c455ee260989e2cf5c0ad3e9d8ba1093a1e43c5647775c06ef79c084b539cbc9fee4753ee175759a7d0e2715d22c7b929687620ad9f4e841 + checksum: 125918bef3cc57cbdc0d267fcfde0553c306e644b99c4451a704632e071a6f38d3395757d442227a48648ae1b399585ffc74d1e1130d94b2f2d626bc04b1db8e languageName: node linkType: hard -"@storybook/core-client@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-client@npm:7.5.3" +"@storybook/core-client@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/core-client@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - checksum: 41c21431f803843c2cf43c72685f10df9282fbe0730623000979296e864770d38c444b4812ed81e6a14bdbfc7ad778761b5c68dd27a8888029cb23e6f82cb1c3 + "@storybook/client-logger": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" + checksum: 71eff6c95de026bc00d7fd78b49c9213ebb698670692859aa05371d6afcd3d621bc4912e00e7aa54acb7d72df0311c1d8e3e86d0ca9902d7b9ab978cd37c2304 languageName: node linkType: hard -"@storybook/core-common@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-common@npm:7.5.3" +"@storybook/core-common@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/core-common@npm:7.6.6" dependencies: - "@storybook/core-events": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/core-events": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/find-cache-dir": "npm:^3.2.1" "@types/node": "npm:^18.0.0" "@types/node-fetch": "npm:^2.6.4" @@ -5350,38 +5368,38 @@ __metadata: pretty-hrtime: "npm:^1.0.3" resolve-from: "npm:^5.0.0" ts-dedent: "npm:^2.0.0" - checksum: f099aca961729abaeafdf224e61da64237632bf13088dea703d13036c89d7b0a188ce4ac4b0d26d40523ddb8b8d12a64a26dac2c5514f7ed7939c47340acba4f + checksum: 19c7eefc93d8884f204cf7b2a8f232de531783789d55f243de2a54f5813fc7eee9f93aa30d36434b05579ad6e812c7fb99c2fdf8cd58c368761d91fa4031d8a8 languageName: node linkType: hard -"@storybook/core-events@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-events@npm:7.5.3" +"@storybook/core-events@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/core-events@npm:7.6.6" dependencies: ts-dedent: "npm:^2.0.0" - checksum: 2c0db835f840e8001928cc032b55531f9225eb146aaf069437925c2f55ad28a15eea287885c3cd59b9be3bb31822dc427fe9a33d79bc0861ceb3f6ee5395766d + checksum: 5d43c14374015bbf653009bb0fcc99690ace861af6130074c38bf2e2baaf8415ab9381261f1d058e4890a6151d827df00e4a59b9d593ecb06cca7b0af0cd7abe languageName: node linkType: hard -"@storybook/core-server@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-server@npm:7.5.3" +"@storybook/core-server@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/core-server@npm:7.6.6" dependencies: "@aw-web-design/x-default-browser": "npm:1.4.126" "@discoveryjs/json-ext": "npm:^0.5.3" - "@storybook/builder-manager": "npm:7.5.3" - "@storybook/channels": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" - "@storybook/csf-tools": "npm:7.5.3" + "@storybook/builder-manager": "npm:7.6.6" + "@storybook/channels": "npm:7.6.6" + "@storybook/core-common": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/csf": "npm:^0.1.2" + "@storybook/csf-tools": "npm:7.6.6" "@storybook/docs-mdx": "npm:^0.1.0" "@storybook/global": "npm:^5.0.0" - "@storybook/manager": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/telemetry": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/manager": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" + "@storybook/telemetry": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/detect-port": "npm:^1.3.0" "@types/node": "npm:^18.0.0" "@types/pretty-hrtime": "npm:^1.0.0" @@ -5408,47 +5426,47 @@ __metadata: util-deprecate: "npm:^1.0.2" watchpack: "npm:^2.2.0" ws: "npm:^8.2.3" - checksum: 6fa783f3efbd6e2cbfb2d29c8d4da8c5bf6daa0c1615bd6484bfd92115c45295fc91de095961f178cb28f5e95cc73c62f67d59c53c5d972ba3fdd1e086d006f4 + checksum: 6381bd6fa0f55320d3204a42cb8ea8da2d48c940c3ede060e6d07a980bc6c3a460094d5b5b2b9a11ddd1b78bfa3e2f5e4a54f8cbb64ec7d084413ff1c9ad763d languageName: node linkType: hard -"@storybook/core-webpack@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/core-webpack@npm:7.5.3" +"@storybook/core-webpack@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/core-webpack@npm:7.6.6" dependencies: - "@storybook/core-common": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/core-common": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/node": "npm:^18.0.0" ts-dedent: "npm:^2.0.0" - checksum: 996a12ef62406fc54da0d8c6ebd597b824059fd8597c831e241ea1f4115dcdcdaeff9c1572cbe66a949194295436ba0a029555964d03effa3babfe2ee7024eb7 + checksum: 92ff0a2c092375114d588e9898910070db486c57b4746c314b95d2953eba740759f308b5ff08c6e43490c460c59a1df20e1eed2eb1b5ed8b3984c198a0fbcb32 languageName: node linkType: hard -"@storybook/csf-plugin@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/csf-plugin@npm:7.5.3" +"@storybook/csf-plugin@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/csf-plugin@npm:7.6.6" dependencies: - "@storybook/csf-tools": "npm:7.5.3" + "@storybook/csf-tools": "npm:7.6.6" unplugin: "npm:^1.3.1" - checksum: 700ef994b1694faf5955d37e52569b8e20f15d800c3aa8ff4a24b02f5a0cf1467a07d72149314b46de477bb710d7d523ca05b20f97f953b28323aa41b30930da + checksum: 9abfe41923e26d804d65fa3e653c1eb07d1b3d003e1e27c96ee3146a0c4d0757ca1ad201c4d3ae5939a29c5276d1081bfcc55b793354b9aeb2e4cfe5af6770d5 languageName: node linkType: hard -"@storybook/csf-tools@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/csf-tools@npm:7.5.3" +"@storybook/csf-tools@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/csf-tools@npm:7.6.6" dependencies: - "@babel/generator": "npm:^7.22.9" - "@babel/parser": "npm:^7.22.7" - "@babel/traverse": "npm:^7.22.8" - "@babel/types": "npm:^7.22.5" - "@storybook/csf": "npm:^0.1.0" - "@storybook/types": "npm:7.5.3" + "@babel/generator": "npm:^7.23.0" + "@babel/parser": "npm:^7.23.0" + "@babel/traverse": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" + "@storybook/csf": "npm:^0.1.2" + "@storybook/types": "npm:7.6.6" fs-extra: "npm:^11.1.0" recast: "npm:^0.23.1" ts-dedent: "npm:^2.0.0" - checksum: d92300f8bb1c70b2313f3fe8fdae5a88fd46b8ca6403ac74543b695289bddd827a7ed8e46b31b1ebc87c5a3b5f4c07a3652f05ff00e85a66df5159bbfc36e2df + checksum: 8a94ca5eb2fa06e81434d4aff61b2002765a332764690ae29a571358910ccd9d46e5464b980b70162fe420975fdaf68ebc5008fa3caa145bb87bc5008f935388 languageName: node linkType: hard @@ -5461,12 +5479,12 @@ __metadata: languageName: node linkType: hard -"@storybook/csf@npm:^0.1.0": - version: 0.1.1 - resolution: "@storybook/csf@npm:0.1.1" +"@storybook/csf@npm:^0.1.2": + version: 0.1.2 + resolution: "@storybook/csf@npm:0.1.2" dependencies: type-fest: "npm:^2.19.0" - checksum: 999bb87fbbe047a559bbaa5baf2ed84872fcd5cdcae3c1169f8e4c641eefe8759d09a09034a78ed114032c0e5cf6301b7fa89e5e3ce60d75cf0bd5e33ec0a6e7 + checksum: b51a55292e5d2af8b1d135a28ecaa94f8860ddfedcb393adfa2cca1ee23853156066f737d8be1cb5412f572781aa525dc0b2f6e4a6f6ce805489f0149efe837c languageName: node linkType: hard @@ -5477,17 +5495,18 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/docs-tools@npm:7.5.3" +"@storybook/docs-tools@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/docs-tools@npm:7.6.6" dependencies: - "@storybook/core-common": "npm:7.5.3" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/core-common": "npm:7.6.6" + "@storybook/preview-api": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/doctrine": "npm:^0.0.3" + assert: "npm:^2.1.0" doctrine: "npm:^3.0.0" lodash: "npm:^4.17.21" - checksum: 1726947cbe552531831df426f55e297e2ad8dce5af274ab09ba52aa667f656420705301a34776d38a503728e86f4b6a4301566dfa543d40c909fd652f1b2a4a3 + checksum: fae6350b3f1328078129c8efe32abafd1c215d440ab189886178e300467b5a6306c9e2bab8f5629adb2461647b61b9243c790418cd4336510a1553ac0bdfea8d languageName: node linkType: hard @@ -5498,31 +5517,18 @@ __metadata: languageName: node linkType: hard -"@storybook/instrumenter@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/instrumenter@npm:7.5.3" - dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - checksum: dc260bc908df36119023512129fb07e297da0aefb880f469e9aceb0dac0edc2dc8be1754f693483382796b46c7b9854018f81999de315ef008d730b0e35a5822 - languageName: node - linkType: hard - -"@storybook/manager-api@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/manager-api@npm:7.5.3" +"@storybook/manager-api@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/manager-api@npm:7.6.6" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" + "@storybook/channels": "npm:7.6.6" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/router": "npm:7.5.3" - "@storybook/theming": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/router": "npm:7.6.6" + "@storybook/theming": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" memoizerific: "npm:^1.11.3" @@ -5530,17 +5536,14 @@ __metadata: store2: "npm:^2.14.2" telejson: "npm:^7.2.0" ts-dedent: "npm:^2.0.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f48834b477ba07a252cb7a99e7513fab4d3f1cd52e4133e30de1984e43a5f86b94f55bfc06c218cfd98dc15ebb62d07f2f3929a37dbc74af29aaad0b779edea + checksum: 2d72453d55dbe329ded778164fa2bc9ebe3556e4daba8bd39732a7707fef842dadd7210274cbfa5f28e4709d14a010f3207794e211c2aa2dab92ef609ce674a9 languageName: node linkType: hard -"@storybook/manager@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/manager@npm:7.5.3" - checksum: 19e0a7d3791c0621c63fe1cbc6de6bdb92195d0cdff9259437c54763bd9958ddaaea75497a0be2b9ea8e5300e746f39c7c3ee5e0e1902a48f4f04a2f3aa0a23d +"@storybook/manager@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/manager@npm:7.6.6" + checksum: c6352090a810155fa04d670f682cd19e063245d9164416a7ae042b29c84af1963ad98c238613ae6c47a8af0c8a80eba22bf80528af73199610f086e4cc858ce3 languageName: node linkType: hard @@ -5551,56 +5554,56 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/node-logger@npm:7.5.3" - checksum: 327f5eef43adcbbf9c5daa49c82ee8d57e6cf795defdde12b9988e04c66209ea99a49574f73a82c01c78331756dd5d50440a1d09cc7b3b6ff19e672d24390e94 +"@storybook/node-logger@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/node-logger@npm:7.6.6" + checksum: 2f6929c9260d2523953aa63faec5dc477a37bf18f5d0c20aff7711f4d39e428eb27c80a4a982a5842759d1531219e41a00635b2219fae999d8ec11354eab3aee languageName: node linkType: hard -"@storybook/postinstall@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/postinstall@npm:7.5.3" - checksum: b2bc3a91ffedb83a54624d6880fa10fab86db86abd6aaa07bc130abd9ffab21f5be8d7e880173c911e58b56f2dfcab03ae0d6e6ce710997f1c323b378d917932 +"@storybook/postinstall@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/postinstall@npm:7.6.6" + checksum: f70bc49a7f490da2615b4e59a0a2fd2dde14e4bb88322428055977182d85cd68cc85bdb46b5c8b4ba17e5920c3295bc6124550b2f8bd2e05b84ad28613367896 languageName: node linkType: hard -"@storybook/preset-create-react-app@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preset-create-react-app@npm:7.5.3" +"@storybook/preset-create-react-app@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/preset-create-react-app@npm:7.6.6" dependencies: "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.1" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" - "@storybook/types": "npm:7.5.3" + "@storybook/types": "npm:7.6.6" "@types/babel__core": "npm:^7.1.7" - babel-plugin-react-docgen: "npm:^4.1.0" pnp-webpack-plugin: "npm:^1.7.0" semver: "npm:^7.3.5" peerDependencies: "@babel/core": "*" react-scripts: ">=5.0.0" - checksum: cd9582dc5306234609824b73dd1527c5b6a7b88210010e2a2f0df2696412393fa4b7ccfef12d13636eec8be4d18709d784395f0b5ea571a5498f9289282dc4f5 + checksum: e634bbcfb60bc9c85b6f2ba76b84e0db5ed2d613fd85100e2d030266b4636980024f850c7fe6c96616df9b31f6b8889b53dfb1c10dd025659853974a71c9a54c languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preset-react-webpack@npm:7.5.3" +"@storybook/preset-react-webpack@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/preset-react-webpack@npm:7.6.6" dependencies: - "@babel/preset-flow": "npm:^7.22.5" - "@babel/preset-react": "npm:^7.22.5" - "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.5" - "@storybook/core-webpack": "npm:7.5.3" - "@storybook/docs-tools": "npm:7.5.3" - "@storybook/node-logger": "npm:7.5.3" - "@storybook/react": "npm:7.5.3" + "@babel/preset-flow": "npm:^7.22.15" + "@babel/preset-react": "npm:^7.22.15" + "@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.11" + "@storybook/core-webpack": "npm:7.6.6" + "@storybook/docs-tools": "npm:7.6.6" + "@storybook/node-logger": "npm:7.6.6" + "@storybook/react": "npm:7.6.6" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" "@types/node": "npm:^18.0.0" "@types/semver": "npm:^7.3.4" babel-plugin-add-react-displayname: "npm:^0.0.5" - babel-plugin-react-docgen: "npm:^4.2.1" fs-extra: "npm:^11.1.0" - react-refresh: "npm:^0.11.0" + magic-string: "npm:^0.30.5" + react-docgen: "npm:^7.0.0" + react-refresh: "npm:^0.14.0" semver: "npm:^7.3.7" webpack: "npm:5" peerDependencies: @@ -5612,20 +5615,20 @@ __metadata: optional: true typescript: optional: true - checksum: f0db46025dce3858a816b2dd71c8b52587360988dee0f89d79f69043326207efae07ae9450678bddbcf28b85fa41bf231294bce8404a3017d99c1aaa395b263c + checksum: d7ca93d1dcff815359bd7a7e9cd09001fb1e2c5c22401997a374180b27cdf8cedf3f5ca991f6876f4a41cbe280e26d2dfe277784f572dc783ef1f21f6c73ee95 languageName: node linkType: hard -"@storybook/preview-api@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preview-api@npm:7.5.3" +"@storybook/preview-api@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/preview-api@npm:7.6.6" dependencies: - "@storybook/channels": "npm:7.5.3" - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-events": "npm:7.5.3" - "@storybook/csf": "npm:^0.1.0" + "@storybook/channels": "npm:7.6.6" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-events": "npm:7.6.6" + "@storybook/csf": "npm:^0.1.2" "@storybook/global": "npm:^5.0.0" - "@storybook/types": "npm:7.5.3" + "@storybook/types": "npm:7.6.6" "@types/qs": "npm:^6.9.5" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" @@ -5634,14 +5637,14 @@ __metadata: synchronous-promise: "npm:^2.0.15" ts-dedent: "npm:^2.0.0" util-deprecate: "npm:^1.0.2" - checksum: 3acc48f1a9e801ff3b9e93261f68810a7f1827b777939dea0065c6385062c24e0e9081f3cca4b8b35d907dccbc2f1ea405ff8dcbfb6bbac9b4cd993f5ad23ccb + checksum: 7a26c769de6255c4ed5644da83b857960bae804f709f88d896cf0b643331d8ef1387ffd892231de9ed580f320406b75f9a7c436726916aae648a8e789734f4a3 languageName: node linkType: hard -"@storybook/preview@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/preview@npm:7.5.3" - checksum: e1f86b40f2d510f0f53ecb214c2cfb67f58c7f4b19456c1ef843e52e9caba4515d25c1ee74fcd514b5d4f74994d02d53f37f9b1c34a2209525b354f7fe8af111 +"@storybook/preview@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/preview@npm:7.6.6" + checksum: c9e966f667da878b771aed60ce18eb5c7e49ca8ed24de28a95c24d9ae3e604cedc10e77c9391ceda79764899b1aa5d3c5ca8dff000041930fffd1b9b44d2a048 languageName: node linkType: hard @@ -5663,23 +5666,23 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/react-dom-shim@npm:7.5.3" +"@storybook/react-dom-shim@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/react-dom-shim@npm:7.6.6" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 91314e9891ef7f80fe32c2c239b112dafbc739d5eba72f8fd2ccde62058b9e649280dd2245705f13cb00044d9482a8b6f358a8262018449f5feb8e5df5b96494 + checksum: bf28419e6369f9044614b368816696b822e7543bed97487671b9749a76215000ad40393b1294aa5cf9effc5e5046372a3159a9534e7852e817d2b8deaea8d126 languageName: node linkType: hard -"@storybook/react-webpack5@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/react-webpack5@npm:7.5.3" +"@storybook/react-webpack5@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/react-webpack5@npm:7.6.6" dependencies: - "@storybook/builder-webpack5": "npm:7.5.3" - "@storybook/preset-react-webpack": "npm:7.5.3" - "@storybook/react": "npm:7.5.3" + "@storybook/builder-webpack5": "npm:7.6.6" + "@storybook/preset-react-webpack": "npm:7.6.6" + "@storybook/react": "npm:7.6.6" "@types/node": "npm:^18.0.0" peerDependencies: "@babel/core": ^7.22.0 @@ -5691,21 +5694,21 @@ __metadata: optional: true typescript: optional: true - checksum: 0e84dd5caffabfe75cf0405e1d40be8d26ac2d078198fc38494d90ede3d157042af86166c844186f6c32be76cab5bb774df7ee76526ec1020cc54f083cadaefc + checksum: ad253f848df3949ef42e4e7ed0925fe685aa910782b1714be7926d47c42a9069b248747878da3d69b8534b2086708291095e9235b296d99736e5763cb7d84bb0 languageName: node linkType: hard -"@storybook/react@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/react@npm:7.5.3" +"@storybook/react@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/react@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-client": "npm:7.5.3" - "@storybook/docs-tools": "npm:7.5.3" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-client": "npm:7.6.6" + "@storybook/docs-tools": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" - "@storybook/preview-api": "npm:7.5.3" - "@storybook/react-dom-shim": "npm:7.5.3" - "@storybook/types": "npm:7.5.3" + "@storybook/preview-api": "npm:7.6.6" + "@storybook/react-dom-shim": "npm:7.6.6" + "@storybook/types": "npm:7.6.6" "@types/escodegen": "npm:^0.0.6" "@types/estree": "npm:^0.0.51" "@types/node": "npm:^18.0.0" @@ -5727,37 +5730,34 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6433c12e12e1eb570d06bd1e03a8eacfcea08387b708bc3d423685d90c6de980ea39a79f5c188fa58c2b8b78fabbe0cb1c07136806f264eb05d2d50fd3532a13 + checksum: b9b349597b47f040faa7949405dc843073d0ca1c0799477e4ac3e1c8ffb0f5ff9462b2ff782391cefb8cf521ee804dbfb5da8a8f74d7ab69c3b012bccac556c0 languageName: node linkType: hard -"@storybook/router@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/router@npm:7.5.3" +"@storybook/router@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/router@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" + "@storybook/client-logger": "npm:7.6.6" memoizerific: "npm:^1.11.3" qs: "npm:^6.10.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 2d85a9c16e2817f38a66d1718dbe2b9b23a31676e991d4760273acb508c40491cb7ff91f14a563529c3cd15becc213c3e3f5cf3290001323a89528907388b368 + checksum: cf8b81908a64692ebda42620ca18aa4db1e4472ea5e8bf6085db489503d2d315e3dbcee1d3097ead724cebfb20d26f8ca656055ebb5afa607e073ccd5488f0a4 languageName: node linkType: hard -"@storybook/telemetry@npm:7.5.3, @storybook/telemetry@npm:^7.1.0-alpha.32": - version: 7.5.3 - resolution: "@storybook/telemetry@npm:7.5.3" +"@storybook/telemetry@npm:7.6.6, @storybook/telemetry@npm:^7.1.0": + version: 7.6.6 + resolution: "@storybook/telemetry@npm:7.6.6" dependencies: - "@storybook/client-logger": "npm:7.5.3" - "@storybook/core-common": "npm:7.5.3" - "@storybook/csf-tools": "npm:7.5.3" + "@storybook/client-logger": "npm:7.6.6" + "@storybook/core-common": "npm:7.6.6" + "@storybook/csf-tools": "npm:7.6.6" chalk: "npm:^4.1.0" detect-package-manager: "npm:^2.0.1" fetch-retry: "npm:^5.0.2" fs-extra: "npm:^11.1.0" read-pkg-up: "npm:^7.0.1" - checksum: 6dc3eb14162ea7846913591b425701e9e238cad704bb00c062850b1db99417073a3c1e7a699768bb79968a4f11b4f4b542ba45845e578cf58665a7e101cf4f40 + checksum: b9e55909ab06a14f7836ff33a0e12a4531a0ae8770a149a15fbc59d5ed4ce73c77c9b5ac37828f863a4dc7821cadb5466a0c907e7215f2b6f6e4b6733be6fc1f languageName: node linkType: hard @@ -5772,30 +5772,30 @@ __metadata: languageName: node linkType: hard -"@storybook/theming@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/theming@npm:7.5.3" +"@storybook/theming@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/theming@npm:7.6.6" dependencies: "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.0" - "@storybook/client-logger": "npm:7.5.3" + "@storybook/client-logger": "npm:7.6.6" "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 30dc5fd55617fcd7f33a6c75ddd1b2b5e1e28ce2973425fb8764f5770292659e1676264252bd14909ac9843799ab2e0a5d9e83ad3b4a29848c54600264f8af10 + checksum: 6f38bf55108c85ef8ab83e32839136cdb82495ff64a8a562ffda1d9e05361f2583f388b3ec0748ad8eb38c36fdcd302db360bff9c4e1e2745dbb2621f4b88b58 languageName: node linkType: hard -"@storybook/types@npm:7.5.3": - version: 7.5.3 - resolution: "@storybook/types@npm:7.5.3" +"@storybook/types@npm:7.6.6": + version: 7.6.6 + resolution: "@storybook/types@npm:7.6.6" dependencies: - "@storybook/channels": "npm:7.5.3" + "@storybook/channels": "npm:7.6.6" "@types/babel__core": "npm:^7.0.0" "@types/express": "npm:^4.7.0" file-system-cache: "npm:2.3.0" - checksum: 4219a92a6e7762ac5a1dae101aa1072f4c37607f6f2173ae70d224ddc294d9f70e55462eb42028a87e676840f2e87f1bc0e82b28bbb35207278405868b467eb7 + checksum: e0f657336ad9d554715a362119e550707129611ee31809b3d5a081d20830f331cf40bdf1471d667d7824f17ae2cd34f75b69dca8c2e443b09266d228d7937f2a languageName: node linkType: hard @@ -6072,22 +6072,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.0.0": - version: 8.20.1 - resolution: "@testing-library/dom@npm:8.20.1" - dependencies: - "@babel/code-frame": "npm:^7.10.4" - "@babel/runtime": "npm:^7.12.5" - "@types/aria-query": "npm:^5.0.1" - aria-query: "npm:5.1.3" - chalk: "npm:^4.1.0" - dom-accessibility-api: "npm:^0.5.9" - lz-string: "npm:^1.5.0" - pretty-format: "npm:^27.0.2" - checksum: 614013756706467f2a7f3f693c18377048c210ec809884f0f9be866f7d865d075805ad15f5d100e8a699467fdde09085bf79e23a00ea0a6ab001d9583ef15e5d - languageName: node - linkType: hard - "@testing-library/dom@npm:^9.0.0": version: 9.3.3 resolution: "@testing-library/dom@npm:9.3.3" @@ -6104,71 +6088,51 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.16.1": - version: 5.17.0 - resolution: "@testing-library/jest-dom@npm:5.17.0" +"@testing-library/jest-dom@npm:^6.1.5": + version: 6.1.5 + resolution: "@testing-library/jest-dom@npm:6.1.5" dependencies: - "@adobe/css-tools": "npm:^4.0.1" + "@adobe/css-tools": "npm:^4.3.1" "@babel/runtime": "npm:^7.9.2" - "@types/testing-library__jest-dom": "npm:^5.9.1" aria-query: "npm:^5.0.0" chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" dom-accessibility-api: "npm:^0.5.6" lodash: "npm:^4.17.15" redent: "npm:^3.0.0" - checksum: 24e09c5779ea44644945ec26f2e4e5f48aecfe57d469decf2317a3253a5db28d865c55ad0ea4818d8d1df7572a6486c45daa06fa09644a833a7dd84563881939 - languageName: node - linkType: hard - -"@testing-library/react-hooks@npm:^8.0.1": - version: 8.0.1 - resolution: "@testing-library/react-hooks@npm:8.0.1" - dependencies: - "@babel/runtime": "npm:^7.12.5" - react-error-boundary: "npm:^3.1.0" peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 - react-dom: ^16.9.0 || ^17.0.0 - react-test-renderer: ^16.9.0 || ^17.0.0 + "@jest/globals": ">= 28" + "@types/jest": ">= 28" + jest: ">= 28" + vitest: ">= 0.32" peerDependenciesMeta: - "@types/react": + "@jest/globals": optional: true - react-dom: + "@types/jest": optional: true - react-test-renderer: + jest: optional: true - checksum: 83bef2d4c437b84143213b5275ef00ef14e5bcd344f9ded12b162d253dc3c799138ead4428026b9c725e5a38dbebf611f2898aa43f3e43432bcaccbd7bf413e5 - languageName: node - linkType: hard - -"@testing-library/react@npm:^12.1.2": - version: 12.1.5 - resolution: "@testing-library/react@npm:12.1.5" - dependencies: - "@babel/runtime": "npm:^7.12.5" - "@testing-library/dom": "npm:^8.0.0" - "@types/react-dom": "npm:<18.0.0" - peerDependencies: - react: <18.0.0 - react-dom: <18.0.0 - checksum: 3c2433d2fdb6535261f62cd85d79657989cebd96f9072da03c098a1cfa56dec4dfec83d7c2e93633a3ccebdb178ea8578261533d11551600966edab77af00c8b + vitest: + optional: true + checksum: f3643a56fcd970b5c7e8fd10faf3c4817d8ab0e74fb1198d726643bdc5ac675ceaac3b0068c5b4fbad254470e8f98ed50028741de875a29ceaa2f854570979c9 languageName: node linkType: hard -"@testing-library/user-event@npm:^13.5.0": - version: 13.5.0 - resolution: "@testing-library/user-event@npm:13.5.0" +"@testing-library/react@npm:^14.2.1": + version: 14.2.1 + resolution: "@testing-library/react@npm:14.2.1" dependencies: "@babel/runtime": "npm:^7.12.5" + "@testing-library/dom": "npm:^9.0.0" + "@types/react-dom": "npm:^18.0.0" peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: ff57edaeab31322c80c3f01d55404b4cebb907b9ec7672b96a1a14d053f172046b01c5f27b45677927ebee8ed91bce695a7d09edec9a48875cfacabe39d0426a + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 83b35cf8bf5640f1b63b32223ebc75799dc1a8e034d819120b26838fba0b0ab10bdbe6ad07dd8ae8287365f2b0c52dc9892a6fa11bb24d3e63ad97dfb7f2f296 languageName: node linkType: hard -"@testing-library/user-event@npm:^14.4.0": +"@testing-library/user-event@npm:^14.4.0, @testing-library/user-event@npm:^14.5.1": version: 14.5.1 resolution: "@testing-library/user-event@npm:14.5.1" peerDependencies: @@ -6224,6 +6188,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.18.0": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.4 resolution: "@types/babel__generator@npm:7.6.4" @@ -6252,6 +6229,15 @@ __metadata: languageName: node linkType: hard +"@types/babel__traverse@npm:^7.18.0": + version: 7.20.4 + resolution: "@types/babel__traverse@npm:7.20.4" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: e76cb4974c7740fd61311152dc497e7b05c1c46ba554aab875544ab0a7457f343cafcad34ba8fb2ff543ab0e012ef2d3fa0c13f1a4e9a4cd9c4c703c7a2a8d62 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.2 resolution: "@types/body-parser@npm:1.19.2" @@ -6313,6 +6299,13 @@ __metadata: languageName: node linkType: hard +"@types/doctrine@npm:^0.0.9": + version: 0.0.9 + resolution: "@types/doctrine@npm:0.0.9" + checksum: cdaca493f13c321cf0cacd1973efc0ae74569633145d9e6fc1128f32217a6968c33bea1f858275239fe90c98f3be57ec8f452b416a9ff48b8e8c1098b20fa51c + languageName: node + linkType: hard + "@types/ejs@npm:^3.1.1": version: 3.1.5 resolution: "@types/ejs@npm:3.1.5" @@ -6418,6 +6411,16 @@ __metadata: languageName: node linkType: hard +"@types/fs-extra@npm:~11.0.0": + version: 11.0.4 + resolution: "@types/fs-extra@npm:11.0.4" + dependencies: + "@types/jsonfile": "npm:*" + "@types/node": "npm:*" + checksum: 9e34f9b24ea464f3c0b18c3f8a82aefc36dc524cc720fc2b886e5465abc66486ff4e439ea3fb2c0acebf91f6d3f74e514f9983b1f02d4243706bdbb7511796ad + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.2": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -6484,16 +6487,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*": - version: 29.5.4 - resolution: "@types/jest@npm:29.5.4" - dependencies: - expect: "npm:^29.0.0" - pretty-format: "npm:^29.0.0" - checksum: 49c1f0fa20e45b1dfd69aea8af667a8be30e210f00673c365d504ca285cf9040d8f4861dd89657640af5f4a49eadcadc08907b5cf82eda28afea8ddd3dda8390 - languageName: node - linkType: hard - "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.12 resolution: "@types/json-schema@npm:7.0.12" @@ -6508,6 +6501,15 @@ __metadata: languageName: node linkType: hard +"@types/jsonfile@npm:*": + version: 6.1.4 + resolution: "@types/jsonfile@npm:6.1.4" + dependencies: + "@types/node": "npm:*" + checksum: b12d068b021e4078f6ac4441353965769be87acf15326173e2aea9f3bf8ead41bd0ad29421df5bbeb0123ec3fc02eb0a734481d52903704a1454a1845896b9eb + languageName: node + linkType: hard + "@types/lodash@npm:^4.14.167": version: 4.14.201 resolution: "@types/lodash@npm:4.14.201" @@ -6543,6 +6545,13 @@ __metadata: languageName: node linkType: hard +"@types/minimist@npm:~1.2.2": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 3f791258d8e99a1d7d0ca2bda1ca6ea5a94e5e7b8fc6cde84dd79b0552da6fb68ade750f0e17718f6587783c24254bbca0357648dd59dc3812c150305cabdc46 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.4": version: 2.6.9 resolution: "@types/node-fetch@npm:2.6.9" @@ -6632,12 +6641,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:<18.0.0": - version: 17.0.20 - resolution: "@types/react-dom@npm:17.0.20" +"@types/react-dom@npm:^18.0.0": + version: 18.2.17 + resolution: "@types/react-dom@npm:18.2.17" dependencies: - "@types/react": "npm:^17" - checksum: 1389bfd96ec5f0c580bb1c237c8af137203de912cf403b4116cdfb026762bf31b4206cc1de0a5c20d0df2e07b0ba1b1b72ac51995d5ef45889d5d878321b7418 + "@types/react": "npm:*" + checksum: 33b53078ed7e9e0cfc4dc691e938f7db1cc06353bc345947b41b581c3efe2b980c9e4eb6460dbf5ddc521dd91959194c970221a2bd4bfad9d23ebce338e12938 languageName: node linkType: hard @@ -6672,17 +6681,6 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^17": - version: 17.0.65 - resolution: "@types/react@npm:17.0.65" - dependencies: - "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" - csstype: "npm:^3.0.2" - checksum: 6451cb4fa43228ea9be05522f02ba2295fd11276a6e7e2e61f9de02690006d1137fc83c65449f3c909c35bb760623cdb312949431cd9b152bcb38facc63ffb2f - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -6692,6 +6690,13 @@ __metadata: languageName: node linkType: hard +"@types/resolve@npm:^1.20.2": + version: 1.20.6 + resolution: "@types/resolve@npm:1.20.6" + checksum: a9b0549d816ff2c353077365d865a33655a141d066d0f5a3ba6fd4b28bc2f4188a510079f7c1f715b3e7af505a27374adce2a5140a3ece2a059aab3d6e1a4244 + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -6766,15 +6771,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.9 - resolution: "@types/testing-library__jest-dom@npm:5.14.9" - dependencies: - "@types/jest": "npm:*" - checksum: 91f7b15e8813b515912c54da44464fb60ecf21162b7cae2272fcb3918074f4e1387dc2beca1f5041667e77b76b34253c39675ea4e0b3f28f102d8cc87fdba9fa - languageName: node - linkType: hard - "@types/trusted-types@npm:^2.0.2": version: 2.0.3 resolution: "@types/trusted-types@npm:2.0.3" @@ -6789,6 +6785,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.7 + resolution: "@types/uuid@npm:9.0.7" + checksum: b329ebd4f9d1d8e08d4f2cc211be4922d70d1149f73d5772630e4a3acfb5170c6d37b3d7a39a0412f1a56e86e8a844c7f297c798b082f90380608bf766688787 + languageName: node + linkType: hard + "@types/ws@npm:^8.5.5": version: 8.5.5 resolution: "@types/ws@npm:8.5.5" @@ -7359,41 +7362,43 @@ __metadata: resolution: "aml-frontend@workspace:." dependencies: "@sentry/react": "npm:^7.85.0" - "@storybook/addon-essentials": "npm:7.5.3" - "@storybook/addon-interactions": "npm:7.5.3" - "@storybook/addon-links": "npm:7.5.3" - "@storybook/addon-onboarding": "npm:1.0.8" - "@storybook/blocks": "npm:7.5.3" - "@storybook/preset-create-react-app": "npm:7.5.3" - "@storybook/react": "npm:7.5.3" - "@storybook/react-webpack5": "npm:7.5.3" + "@storybook/addon-essentials": "npm:7.6.6" + "@storybook/addon-interactions": "npm:7.6.6" + "@storybook/addon-links": "npm:7.6.6" + "@storybook/addon-onboarding": "npm:1.0.10" + "@storybook/blocks": "npm:7.6.6" + "@storybook/preset-create-react-app": "npm:7.6.6" + "@storybook/react": "npm:7.6.6" + "@storybook/react-webpack5": "npm:7.6.6" "@storybook/testing-library": "npm:0.2.2" - "@testing-library/jest-dom": "npm:^5.16.1" - "@testing-library/react": "npm:^12.1.2" - "@testing-library/react-hooks": "npm:^8.0.1" - "@testing-library/user-event": "npm:^13.5.0" + "@testing-library/jest-dom": "npm:^6.1.5" + "@testing-library/react": "npm:^14.2.1" + "@testing-library/user-event": "npm:^14.5.1" axios: "npm:>=1.6.0" babel-plugin-named-exports-order: "npm:0.0.2" classnames: "npm:^2.2.6" + coverage-badges-cli: "npm:^1.2.5" email-validator: "npm:^2.0.4" eslint: "npm:^8.54.0" eslint-config-react-app: "npm:^7.0.1" eslint-plugin-storybook: "npm:^0.6.15" file-saver: "npm:^2.0.5" + history: "npm:^5.3.0" next-share: "npm:0.25.0" prop-types: "npm:15.8.1" qs: "npm:^6.10.3" - react: "npm:^17.0.2" - react-dom: "npm:^17.0.2" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" react-rangeslider: "npm:^2.2.0" react-router: "npm:5.2.0" react-router-dom: "npm:5.2.0" react-scripts: "npm:5.0.0" react-select: "npm:^5.4.0" - react-transition-group: "npm:^4.3.0" - sass: "npm:^1.50" - storybook: "npm:7.5.3" + react-transition-group: "npm:^4.4.5" + sass: "npm:^1.69.5" + storybook: "npm:7.6.6" webpack: "npm:5.89.0" + zustand: "npm:^4.4.7" languageName: unknown linkType: soft @@ -7663,7 +7668,7 @@ __metadata: languageName: node linkType: hard -"assert@npm:^2.0.0": +"assert@npm:^2.0.0, assert@npm:^2.1.0": version: 2.1.0 resolution: "assert@npm:2.1.0" dependencies: @@ -7683,24 +7688,6 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:0.15.2": - version: 0.15.2 - resolution: "ast-types@npm:0.15.2" - dependencies: - tslib: "npm:^2.0.1" - checksum: 5b26e3656e9e8d1db8c8d14971d0cb88ca0138aacce72171cb4cd4555fc8dc53c07e821c568e57fe147366931708fefd25cb9d7e880d42ce9cb569947844c962 - languageName: node - linkType: hard - -"ast-types@npm:^0.14.2": - version: 0.14.2 - resolution: "ast-types@npm:0.14.2" - dependencies: - tslib: "npm:^2.0.1" - checksum: 5d66d89b6c07fe092087454b6042dbaf81f2882b176db93861e2b986aafe0bce49e1f1ff59aac775d451c1426ad1e967d250e9e3548f5166ea8a3475e66c169d - languageName: node - linkType: hard - "ast-types@npm:^0.16.1": version: 0.16.1 resolution: "ast-types@npm:0.16.1" @@ -7906,7 +7893,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-named-exports-order@npm:0.0.2, babel-plugin-named-exports-order@npm:^0.0.2": +"babel-plugin-named-exports-order@npm:0.0.2": version: 0.0.2 resolution: "babel-plugin-named-exports-order@npm:0.0.2" checksum: e1d001722bddabc296b74f7cd020418a3cce9ca7052d5dd5dbd2870745d9566e286d14707c0bbfc9d4b4b643031052b358124ec735069f214d22b0b6768daf9d @@ -7985,17 +7972,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-react-docgen@npm:^4.1.0, babel-plugin-react-docgen@npm:^4.2.1": - version: 4.2.1 - resolution: "babel-plugin-react-docgen@npm:4.2.1" - dependencies: - ast-types: "npm:^0.14.2" - lodash: "npm:^4.17.15" - react-docgen: "npm:^5.0.0" - checksum: 9f7af20e6ebd794beae14aa1ffe4f1c1c5855821a5a9f205099602c89b557e33b9cb3dc3fe0b3a2f2ca35007c6ab45f52da9695a681d8495ad0f5494ef78ec34 - languageName: node - linkType: hard - "babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": version: 0.4.24 resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" @@ -8061,6 +8037,13 @@ __metadata: languageName: node linkType: hard +"badgen@npm:~3.2.2": + version: 3.2.3 + resolution: "badgen@npm:3.2.3" + checksum: da7bd02c7643097682024515420f8e2e544cc6f3064cfe67b1306c206d37f758741dc1c9ac8c957fbeaf7f439231fa1c4a9e5d73a75976c3d2fec06b9ad644fe + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -8269,6 +8252,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.22.2": + version: 4.22.2 + resolution: "browserslist@npm:4.22.2" + dependencies: + caniuse-lite: "npm:^1.0.30001565" + electron-to-chromium: "npm:^1.4.601" + node-releases: "npm:^2.0.14" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 2a331aab90503130043ca41dd5d281fa1e89d5e076d07a2d75e76bf4d693bd56e73d5abcd8c4f39119da6328d450578c216cf1cd5c99b82d8a90a2ae6271b465 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -8323,28 +8320,6 @@ __metadata: languageName: node linkType: hard -"c8@npm:^7.6.0": - version: 7.14.0 - resolution: "c8@npm:7.14.0" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@istanbuljs/schema": "npm:^0.1.3" - find-up: "npm:^5.0.0" - foreground-child: "npm:^2.0.0" - istanbul-lib-coverage: "npm:^3.2.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-reports: "npm:^3.1.4" - rimraf: "npm:^3.0.2" - test-exclude: "npm:^6.0.0" - v8-to-istanbul: "npm:^9.0.0" - yargs: "npm:^16.2.0" - yargs-parser: "npm:^20.2.9" - bin: - c8: bin/c8.js - checksum: 8946f55f2dcc85bf146f429a3deeede78502da245e515a2d181342475d8d8698b4055ec1d9b887ab8e1615f49c1a2af4d63557e68b2005844572fb785991e148 - languageName: node - linkType: hard - "cacache@npm:^18.0.0": version: 18.0.0 resolution: "cacache@npm:18.0.0" @@ -8450,6 +8425,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001565": + version: 1.0.30001570 + resolution: "caniuse-lite@npm:1.0.30001570" + checksum: e47230d2016edea56e002fa462a5289f697b48dcfbf703fb01aecc6c98ad4ecaf945ab23c253cb7af056c2d05f266e4e4cbebf45132100e2c9367439cb95b95b + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -8724,7 +8706,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0": +"commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 @@ -8953,6 +8935,24 @@ __metadata: languageName: node linkType: hard +"coverage-badges-cli@npm:^1.2.5": + version: 1.2.5 + resolution: "coverage-badges-cli@npm:1.2.5" + dependencies: + "@types/fs-extra": "npm:~11.0.0" + "@types/minimist": "npm:~1.2.2" + badgen: "npm:~3.2.2" + fs-extra: "npm:~11.1.0" + lodash.get: "npm:^4.4.2" + mini-svg-data-uri: "npm:^1.4.4" + minimist: "npm:~1.2.5" + bin: + coverage-badges: bin/cli + coverage-badges-cli: bin/cli + checksum: 851fa35f56bec6b38e6f64c0a4f66853d64013791aa1758d71c38206c2ccf1a2c9563cb294b807da895b7f576e81ea55c5f9aae7ff11b51a8eb75e927378d2fc + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -9276,7 +9276,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -9542,13 +9542,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -9795,6 +9788,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.601": + version: 1.4.615 + resolution: "electron-to-chromium@npm:1.4.615" + checksum: 6602172761e44ca1a6c010a010efd0c42710e1e08911e76dd2d3df72ae2a563fb75b0853387273d1e45a4befd314162b2b1debcf9055513f62c6d6a8df4de73a + languageName: node + linkType: hard + "email-validator@npm:^2.0.4": version: 2.0.4 resolution: "email-validator@npm:2.0.4" @@ -10031,6 +10031,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.4.1": + version: 1.4.1 + resolution: "es-module-lexer@npm:1.4.1" + checksum: b7260a138668554d3f0ddcc728cb4b60c2fa463f15545cf155ecbdd5450a1348952d58298a7f48642e900ee579f21d7f5304b6b3c61b3d9fc2d4b2109b5a9dff + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.1 resolution: "es-set-tostringtag@npm:2.0.1" @@ -10599,17 +10606,6 @@ __metadata: languageName: node linkType: hard -"estree-to-babel@npm:^3.1.0": - version: 3.2.1 - resolution: "estree-to-babel@npm:3.2.1" - dependencies: - "@babel/traverse": "npm:^7.1.6" - "@babel/types": "npm:^7.2.0" - c8: "npm:^7.6.0" - checksum: c7949b141f569528b2608ab715d593a04f7e2e529df04e0b595d0a7dea819b410e71d1f04716e43ac1480942afc5701cb5151ad2906ee8402969651a389881bb - languageName: node - linkType: hard - "estree-walker@npm:^1.0.1": version: 1.0.1 resolution: "estree-walker@npm:1.0.1" @@ -10681,19 +10677,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.6.4 - resolution: "expect@npm:29.6.4" - dependencies: - "@jest/expect-utils": "npm:^29.6.4" - jest-get-type: "npm:^29.6.3" - jest-matcher-utils: "npm:^29.6.4" - jest-message-util: "npm:^29.6.3" - jest-util: "npm:^29.6.3" - checksum: d3f4ed2fcc33f743b1dd9cf25a07c2f56c9ddd7e1b327d3e74b5febfc90880a9e2ab10c56b3bf31e14d5ead69dc4cb68f718b7fbc3fae8571f8e18675ffe8080 - languageName: node - linkType: hard - "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -11027,12 +11010,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.0": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" + version: 1.15.4 + resolution: "follow-redirects@npm:1.15.4" peerDependenciesMeta: debug: optional: true - checksum: da5932b70e63944d38eecaa16954bac4347036f08303c913d166eda74809d8797d38386e3a0eb1d2fe37d2aaff2764cce8e9dbd99459d860cf2cdfa237923b5f + checksum: 5f37ed9170c9eb19448c5418fdb0f2b73f644b5364834e70791a76ecc7db215246f9773bbef4852cfae4067764ffc852e047f744b661b0211532155b73556a6a languageName: node linkType: hard @@ -11045,16 +11028,6 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^2.0.0": - version: 2.0.0 - resolution: "foreground-child@npm:2.0.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^3.0.2" - checksum: 6719982783a448162f9a01500757fb2053bc5dcd4d67c7cd30739b38ccc01b39f84e408c30989d1d8774519c021c0498e2450ab127690fb09d7f2568fd94ffcc - languageName: node - linkType: hard - "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -11169,7 +11142,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0": +"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0, fs-extra@npm:~11.1.0": version: 11.1.1 resolution: "fs-extra@npm:11.1.1" dependencies: @@ -11681,6 +11654,15 @@ __metadata: languageName: node linkType: hard +"history@npm:^5.3.0": + version: 5.3.0 + resolution: "history@npm:5.3.0" + dependencies: + "@babel/runtime": "npm:^7.7.6" + checksum: 812ec839386222d6437bd78d9f05db32e47d105ada0ad8834b32626919dd2fee7a10001bc489510f93a8069d02f118214bd8d42a82f7cf9daf8e84fbcbbb2016 + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -12082,9 +12064,9 @@ __metadata: linkType: hard "ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: 8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 + version: 2.0.1 + resolution: "ip@npm:2.0.1" + checksum: cab8eb3e88d0abe23e4724829621ec4c4c5cb41a7f936a2e626c947128c1be16ed543448d42af7cca95379f9892bfcacc1ccd8d09bc7e8bea0e86d492ce33616 languageName: node linkType: hard @@ -12589,7 +12571,7 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.1.3, istanbul-reports@npm:^3.1.4": +"istanbul-reports@npm:^3.1.3": version: 3.1.6 resolution: "istanbul-reports@npm:3.1.6" dependencies: @@ -12753,18 +12735,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-diff@npm:29.6.4" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.6.3" - checksum: 5f96be0f15ba8e70acfa5512ca49ba67363678e7ce222889612385a8d9dd042822fdd22a514394fe726b1f462e605bc5d7fc130bd81fa2247e7d40413975d576 - languageName: node - linkType: hard - "jest-docblock@npm:^27.5.1": version: 27.5.1 resolution: "jest-docblock@npm:27.5.1" @@ -12823,13 +12793,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - "jest-haste-map@npm:^27.5.1": version: 27.5.1 resolution: "jest-haste-map@npm:27.5.1" @@ -12924,18 +12887,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-matcher-utils@npm:29.6.4" - dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^29.6.4" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.6.3" - checksum: aa54f7075438160bd29e8c0a02d6b7e6ed1f18bab5670d161d1555e5cfa9b61e86306a260ca0304680fb1b357a944fd1d007b6519f91fc6f67d72997b1a7fdb8 - languageName: node - linkType: hard - "jest-message-util@npm:^27.5.1": version: 27.5.1 resolution: "jest-message-util@npm:27.5.1" @@ -12970,23 +12921,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-message-util@npm:29.6.3" - dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^29.6.3" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.6.3" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 5ae17c0aa8076bd0d4c68a036865cf156084cf7b4f69b4ffee0f49da61f7fe9eb38c6405c1f6967df031ffe14f8a31830baa1f04f1dbea52f239689cd4e5b326 - languageName: node - linkType: hard - "jest-mock@npm:^27.0.6, jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -13186,20 +13120,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-util@npm:29.6.3" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 9428c07696f27aa8f230a13a35546559f9a087f3e3744f53f69a620598234c03004b808b1b4a12120cc5771a88403bf0a1e3f95a7ccd610acf03d90c36135e88 - languageName: node - linkType: hard - "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -13378,19 +13298,20 @@ __metadata: languageName: node linkType: hard -"jscodeshift@npm:^0.14.0": - version: 0.14.0 - resolution: "jscodeshift@npm:0.14.0" - dependencies: - "@babel/core": "npm:^7.13.16" - "@babel/parser": "npm:^7.13.16" - "@babel/plugin-proposal-class-properties": "npm:^7.13.0" - "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.13.8" - "@babel/plugin-proposal-optional-chaining": "npm:^7.13.12" - "@babel/plugin-transform-modules-commonjs": "npm:^7.13.8" - "@babel/preset-flow": "npm:^7.13.13" - "@babel/preset-typescript": "npm:^7.13.0" - "@babel/register": "npm:^7.13.16" +"jscodeshift@npm:^0.15.1": + version: 0.15.1 + resolution: "jscodeshift@npm:0.15.1" + dependencies: + "@babel/core": "npm:^7.23.0" + "@babel/parser": "npm:^7.23.0" + "@babel/plugin-transform-class-properties": "npm:^7.22.5" + "@babel/plugin-transform-modules-commonjs": "npm:^7.23.0" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.22.11" + "@babel/plugin-transform-optional-chaining": "npm:^7.23.0" + "@babel/plugin-transform-private-methods": "npm:^7.22.5" + "@babel/preset-flow": "npm:^7.22.15" + "@babel/preset-typescript": "npm:^7.23.0" + "@babel/register": "npm:^7.22.15" babel-core: "npm:^7.0.0-bridge.0" chalk: "npm:^4.1.2" flow-parser: "npm:0.*" @@ -13398,14 +13319,17 @@ __metadata: micromatch: "npm:^4.0.4" neo-async: "npm:^2.5.0" node-dir: "npm:^0.1.17" - recast: "npm:^0.21.0" + recast: "npm:^0.23.3" temp: "npm:^0.8.4" write-file-atomic: "npm:^2.3.0" peerDependencies: "@babel/preset-env": ^7.1.6 + peerDependenciesMeta: + "@babel/preset-env": + optional: true bin: jscodeshift: bin/jscodeshift.js - checksum: dab63bdb4b7e67d79634fcd3f5dc8b227146e9f68aa88700bc49c5a45b6339d05bd934a98aa53d29abd04f81237d010e7e037799471b2aab66ec7b9a7d752786 + checksum: 334de6ffa776a68b3f59f2f18a285ea977f3339d85e3517f3854761e65769ffa7e453c35cde320fc969106d573df39bd3fb08b23db54ae17c1b1516e5bf05742 languageName: node linkType: hard @@ -13737,6 +13661,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -13847,6 +13778,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.5": + version: 0.30.5 + resolution: "magic-string@npm:0.30.5" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + checksum: 38ac220ca7539e96da7ea2f38d85796bdf5c69b6bcae728c4bc2565084e6dc326b9174ee9770bea345cf6c9b3a24041b767167874fab5beca874d2356a9d1520 + languageName: node + linkType: hard + "make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" @@ -14069,7 +14009,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0": +"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c @@ -14100,6 +14040,15 @@ __metadata: languageName: node linkType: hard +"mini-svg-data-uri@npm:^1.4.4": + version: 1.4.4 + resolution: "mini-svg-data-uri@npm:1.4.4" + bin: + mini-svg-data-uri: cli.js + checksum: 24545fa30b5a45449241bf19c25b8bc37594b63ec06401b3d563bd1c2e8a6abb7c18741f8b354e0064baa63c291be214154bf3a66f201ae71dfab3cc1a5e3191 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -14134,7 +14083,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.5": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -14333,7 +14282,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d @@ -14368,7 +14317,7 @@ __metadata: languageName: node linkType: hard -"node-dir@npm:^0.1.10, node-dir@npm:^0.1.17": +"node-dir@npm:^0.1.17": version: 0.1.17 resolution: "node-dir@npm:0.1.17" dependencies: @@ -14439,6 +14388,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 + languageName: node + linkType: hard + "nopt@npm:^7.0.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" @@ -15992,17 +15948,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.3": - version: 29.6.3 - resolution: "pretty-format@npm:29.6.3" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 73c6a46acdad4cb9337add02c850769fb831d7154cdb50b1152f3970a8fbf8292188dcccd1ba597f3e34c360af71fc0b63f1db4cf155a0098ffe2812eb7a6b22 - languageName: node - linkType: hard - "pretty-hrtime@npm:^1.0.3": version: 1.0.3 resolution: "pretty-hrtime@npm:1.0.3" @@ -16324,36 +16269,33 @@ __metadata: languageName: node linkType: hard -"react-docgen@npm:^5.0.0": - version: 5.4.3 - resolution: "react-docgen@npm:5.4.3" - dependencies: - "@babel/core": "npm:^7.7.5" - "@babel/generator": "npm:^7.12.11" - "@babel/runtime": "npm:^7.7.6" - ast-types: "npm:^0.14.2" - commander: "npm:^2.19.0" +"react-docgen@npm:^7.0.0": + version: 7.0.1 + resolution: "react-docgen@npm:7.0.1" + dependencies: + "@babel/core": "npm:^7.18.9" + "@babel/traverse": "npm:^7.18.9" + "@babel/types": "npm:^7.18.9" + "@types/babel__core": "npm:^7.18.0" + "@types/babel__traverse": "npm:^7.18.0" + "@types/doctrine": "npm:^0.0.9" + "@types/resolve": "npm:^1.20.2" doctrine: "npm:^3.0.0" - estree-to-babel: "npm:^3.1.0" - neo-async: "npm:^2.6.1" - node-dir: "npm:^0.1.10" - strip-indent: "npm:^3.0.0" - bin: - react-docgen: bin/react-docgen.js - checksum: c920e9611e08317f8fdae707114cf02baaa18e2f1bd23ed18f57e66b9e1042e51dc98cc9de828b03d018ccc4e26300c9a6c4f74e862fc94dc64029267c801a01 + resolve: "npm:^1.22.1" + strip-indent: "npm:^4.0.0" + checksum: 870c1193211f14497bf7a96137f96840dc058842ca75ff7251d91e88c3c71d7a41d5f1a124cc1b53bfbf1f2b6b58bfccc4dd6e22592814a5155d3894953274be languageName: node linkType: hard -"react-dom@npm:^17.0.2": - version: 17.0.2 - resolution: "react-dom@npm:17.0.2" +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: "npm:^1.1.0" - object-assign: "npm:^4.1.1" - scheduler: "npm:^0.20.2" + scheduler: "npm:^0.23.0" peerDependencies: - react: 17.0.2 - checksum: 51abbcb72450fe527ebf978c3bc989ba266630faaa53f47a2fae5392369729e8de62b2e4683598cbe651ea7873cd34ec7d5127e2f50bf4bfe6bd0c3ad9bddcb0 + react: ^18.2.0 + checksum: 66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a languageName: node linkType: hard @@ -16371,17 +16313,6 @@ __metadata: languageName: node linkType: hard -"react-error-boundary@npm:^3.1.0": - version: 3.1.4 - resolution: "react-error-boundary@npm:3.1.4" - dependencies: - "@babel/runtime": "npm:^7.12.5" - peerDependencies: - react: ">=16.13.1" - checksum: f977ca61823e43de2381d53dd7aa8b4d79ff6a984c9afdc88dc44f9973b99de7fd382d2f0f91f2688e24bb987c0185bf45d0b004f22afaaab0f990a830253bfb - languageName: node - linkType: hard - "react-error-overlay@npm:^6.0.11": version: 6.0.11 resolution: "react-error-overlay@npm:6.0.11" @@ -16389,15 +16320,6 @@ __metadata: languageName: node linkType: hard -"react-inspector@npm:^6.0.0": - version: 6.0.2 - resolution: "react-inspector@npm:6.0.2" - peerDependencies: - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - checksum: 8f9b23c21b4d95722e28c9455c2bf00fd9437347714382594461f98e5b9954d60864d0f4e74e881639b065e752a97ba52a65e39930c234072e5bff291bb02b5e - languageName: node - linkType: hard - "react-is@npm:18.1.0": version: 18.1.0 resolution: "react-is@npm:18.1.0" @@ -16445,6 +16367,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.0": + version: 0.14.0 + resolution: "react-refresh@npm:0.14.0" + checksum: b8ae07ad153357d77830928a7f1fc2df837aabefee907fa273ba04c7643f3b860e986f1d4b7ada9b721c8d79b8c24b5b911a314a1a2398b105f1b13d19ea2b8d + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.3": version: 2.3.4 resolution: "react-remove-scroll-bar@npm:2.3.4" @@ -16621,7 +16550,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.3.0": +"react-transition-group@npm:^4.3.0, react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "react-transition-group@npm:4.4.5" dependencies: @@ -16636,13 +16565,12 @@ __metadata: languageName: node linkType: hard -"react@npm:^17.0.2": - version: 17.0.2 - resolution: "react@npm:17.0.2" +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" dependencies: loose-envify: "npm:^1.1.0" - object-assign: "npm:^4.1.1" - checksum: 07ae8959acf1596f0550685102fd6097d461a54a4fd46a50f88a0cd7daaa97fdd6415de1dcb4bfe0da6aa43221a6746ce380410fa848acc60f8ac41f6649c148 + checksum: b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 languageName: node linkType: hard @@ -16713,19 +16641,7 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.21.0": - version: 0.21.5 - resolution: "recast@npm:0.21.5" - dependencies: - ast-types: "npm:0.15.2" - esprima: "npm:~4.0.0" - source-map: "npm:~0.6.1" - tslib: "npm:^2.0.1" - checksum: a45168c82195f24fa2c70293a624fece0069a2e8e8adb637f9963777735f81cb3bb62e55172db677ec3573b08b2daaf1eddd85b74da6fe0bd37c9b15eeaf94b4 - languageName: node - linkType: hard - -"recast@npm:^0.23.1": +"recast@npm:^0.23.1, recast@npm:^0.23.3": version: 0.23.4 resolution: "recast@npm:0.23.4" dependencies: @@ -17003,7 +16919,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0": +"resolve@npm:^1.10.0, resolve@npm:^1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -17042,7 +16958,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -17245,16 +17161,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:^1.50": - version: 1.66.1 - resolution: "sass@npm:1.66.1" +"sass@npm:^1.69.5": + version: 1.69.5 + resolution: "sass@npm:1.69.5" dependencies: chokidar: "npm:>=3.0.0 <4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 2fd9510088c8754010479132b9708b2c7178fe158bba1cb84aba4f22d333919d5e9561b5aa33fee3e635ae2d33e3835d6aad132705200d66e5773ce50842c8a1 + checksum: a9003a9482f2e467fc412cfe58ba4fa14fb78bef7e1283ce5d64a065f8a31114ec3bbf5d4e724f94eb8512c32c768a6f91f228c7f16a26a300bbf4db293b5608 languageName: node linkType: hard @@ -17274,13 +17190,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.20.2": - version: 0.20.2 - resolution: "scheduler@npm:0.20.2" +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" dependencies: loose-envify: "npm:^1.1.0" - object-assign: "npm:^4.1.1" - checksum: b0982e4b0f34f4ffa4f2f486161c0fd9ce9b88680b045dccbf250eb1aa4fd27413570645455187a83535e2370f5c667a251045547765408492bd883cbe95fcdb + checksum: b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd languageName: node linkType: hard @@ -17803,15 +17718,15 @@ __metadata: languageName: node linkType: hard -"storybook@npm:7.5.3": - version: 7.5.3 - resolution: "storybook@npm:7.5.3" +"storybook@npm:7.6.6": + version: 7.6.6 + resolution: "storybook@npm:7.6.6" dependencies: - "@storybook/cli": "npm:7.5.3" + "@storybook/cli": "npm:7.6.6" bin: sb: ./index.js storybook: ./index.js - checksum: 9a2ad5dd703f86bf488efdd425eedb850cbbeca05d2d15f97bca5700d02234cd281f81c07b5d9566986e8d96901c9dc8536f449ba7c1c9e40707b670b9aa6820 + checksum: 3fa91dfc9c107c19817fd09f2ae76960ca84594e0773460a9cf4ce066656aa7331eec817139ad35f2594e5f93ff9770bc204576f78e5b12a52025042e587ab51 languageName: node linkType: hard @@ -18004,6 +17919,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: "npm:^1.0.1" + checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e + languageName: node + linkType: hard + "strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -18988,6 +18912,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: ac4814e5592524f242921157e791b022efe36e451fe0d4fd4d204322d5433a4fc300d63b0ade5185f8e0735ded044c70bcf6d2352db0f74d097a238cebd2da02 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -19063,17 +18996,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.0": - version: 9.1.3 - resolution: "v8-to-istanbul@npm:9.1.3" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.12" - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^2.0.0" - checksum: 7acfc460731b629a0d547b231e9d510aaa826df67f4deeaeeb991b492f78faf3bb1aa4b54fa0f9b06d815bc69eb0a04a6c2180c16ba43a83cc5e5490fa160a96 - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -19953,7 +19875,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.9": +"yargs-parser@npm:^20.2.2": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 @@ -19998,3 +19920,23 @@ __metadata: checksum: 856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 languageName: node linkType: hard + +"zustand@npm:^4.4.7": + version: 4.4.7 + resolution: "zustand@npm:4.4.7" + dependencies: + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: de507f09eb79039d74d282df6ffac6c7fb6b840ca3620b0392bcbe3f9049902802db5448b4002e6fcb32f903f7ec1aea14602049eb2a3a8410bfea7186d72fb7 + languageName: node + linkType: hard diff --git a/nginx/custom-nginx.conf b/nginx/custom-nginx.conf new file mode 100644 index 000000000..433d8af8d --- /dev/null +++ b/nginx/custom-nginx.conf @@ -0,0 +1,20 @@ +server { + listen 80; + + # Serve frontend files for root requests + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + } + + # Proxy pass to the Django app + location /server/ { + client_max_body_size 100M; + + proxy_pass http://server:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} diff --git a/package.json b/package.json index 08f83029d..5ac04f197 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { "name": "aml-experiments", - "version": "1.8.0", - "private": true, + "version": "1.9.0", + "private": false, + "description": "The MUSCLE platform is an application that provides an easy way to implement and run online listening experiments for music research.", + "license": "MIT", "__comment1__": "private set to true to suppress 'warning package.json: No license field'", "scripts": { "test-front": "sudo docker-compose run client yarn test --watchAll=false", diff --git a/scripts/add-hosts-entries b/scripts/add-hosts-entries new file mode 100755 index 000000000..82ccbadb2 --- /dev/null +++ b/scripts/add-hosts-entries @@ -0,0 +1,27 @@ +#!/bin/bash + +# Define host entries +HOST_ENTRIES=( + "# MUSCLE" + "127.0.0.1 muscle.local" + "127.0.0.1 backend.muscle.local" + "# END MUSCLE" +) + +# Path to the hosts file +HOSTS_FILE="/etc/hosts" + +# Function to add an entry if it doesn't exist +add_host_entry() { + local entry=$1 + if ! grep -q "$entry" "$HOSTS_FILE"; then + echo "$entry" | sudo tee -a "$HOSTS_FILE" + else + echo "Entry already exists: $entry" + fi +} + +# Add each host entry +for entry in "${HOST_ENTRIES[@]}"; do + add_host_entry "$entry" +done diff --git a/scripts/lint-back b/scripts/lint-back new file mode 100755 index 000000000..533b74a94 --- /dev/null +++ b/scripts/lint-back @@ -0,0 +1,2 @@ +#!/bin/bash +docker-compose run --rm server bash -c "flake8" diff --git a/scripts/manage b/scripts/manage new file mode 100755 index 000000000..8c7cccdc5 --- /dev/null +++ b/scripts/manage @@ -0,0 +1,4 @@ +#!/bin/bash + +# This script executes Django management commands through Docker. +docker-compose run --rm server python manage.py $@ \ No newline at end of file diff --git a/scripts/test-back-coverage b/scripts/test-back-coverage new file mode 100755 index 000000000..67a0101e0 --- /dev/null +++ b/scripts/test-back-coverage @@ -0,0 +1,3 @@ +#!/bin/bash +docker-compose run --rm server bash -c "coverage run manage.py test && coverage report --show-missing" + diff --git a/tests/tests-selenium.py b/tests/tests-selenium.py index d3fd36536..22a1828b1 100644 --- a/tests/tests-selenium.py +++ b/tests/tests-selenium.py @@ -17,7 +17,7 @@ class TestsSelenium(unittest.TestCase): Install selenium on your system pip install selenium - Create tests-selenium.ini file in the same directory as this file describing your setup: + Create tests-selenium.ini file in the same directory as this file describing your setup: ``` [selenium] @@ -40,7 +40,7 @@ class TestsSelenium(unittest.TestCase): To skip individual tests, add `@unittest.skip` before the test """ - + def setUp(self): warnings.simplefilter("ignore", ResourceWarning) @@ -48,7 +48,7 @@ def setUp(self): self.config = configparser.ConfigParser() self.config.read('tests-selenium.ini') - browser = self.config['selenium']['browser'] + browser = self.config['selenium']['browser'] headless = self.config['selenium']['headless'] == "yes" if browser == "Firefox": @@ -71,7 +71,7 @@ def setUp(self): self.driver.set_window_size(1920, 1080) - + def tearDown(self): self.driver.quit() #warnings.simplefilter("default", ResourceWarning) @@ -80,14 +80,14 @@ def tearDown(self): def test_beatalignment(self): self.driver.get("{}/{}".format(self.config['url']['root'], self.config['experiment_slugs']['beat_alignment'])) - + # Explainer self.driver.find_element(By.XPATH, "//div[text()='Ok']").click() # If consent present, agree if self.driver.find_element(By.TAG_NAME,"h4").text.lower() == "informed consent": self.driver.find_element(By.XPATH, '//div[text()="I agree"]').click() - + # Wait for examples to end and click Start WebDriverWait(self.driver, 60, poll_frequency = 1) \ .until(expected_conditions.element_to_be_clickable((By.XPATH, '//div[text()="Start"]'))) \ @@ -95,7 +95,7 @@ def test_beatalignment(self): btn1 = '//label[text()="ALIGNED TO THE BEAT"]' btn2 = '//label[text()="NOT ALIGNED TO THE BEAT"]' - + while self.driver.find_element(By.TAG_NAME,"h4").text != "END": btn = random.choice([btn1, btn2]) # randomly pick a button to click WebDriverWait(self.driver, 30, poll_frequency = 1) \ @@ -104,7 +104,7 @@ def test_beatalignment(self): def test_eurovision(self): - + self.driver.get("{}/{}".format(self.config['url']['root'], self.config['experiment_slugs']['eurovision'])) # Explainer @@ -117,9 +117,9 @@ def test_eurovision(self): h4_text = None bonus_rounds = False - while True: + while True: - if h4_text == None: time.sleep(1) + if h4_text is None: time.sleep(1) h4_text = WebDriverWait(self.driver, 1).until(presence_of_element_located((By.TAG_NAME,"h4"))).text if "ROUND " in h4_text: @@ -137,12 +137,12 @@ def test_eurovision(self): WebDriverWait(self.driver, 25, poll_frequency = 1) \ .until(presence_of_element_located((By.XPATH, '//*[text()="Next"]'))) \ .click() - + elif h4_text == "QUESTIONNAIRE": if self.driver.find_elements(By.CLASS_NAME, "aha__radios"): self.driver.find_element(By.CSS_SELECTOR, ".radio:nth-child(1)").click() - + if self.driver.find_elements(By.TAG_NAME, "select"): select = Select(self.driver.find_element(By.TAG_NAME, 'select')) select.select_by_value('nl') @@ -156,7 +156,7 @@ def test_eurovision(self): # Click Continue after question answered self.driver.find_element(By.XPATH, '//*[text()="Continue"]').click() - + elif h4_text == "FINAL SCORE": break @@ -164,7 +164,7 @@ def test_eurovision(self): self.driver.find_element(By.XPATH, '//*[text()="Continue"]').click() bonus_rounds = True - else: + else: raise Exception("Unknown view") self.driver.find_element(By.XPATH, '//*[text()="Play again"]')