Use babel-plugin-root-import

This commit is contained in:
Phan An 2017-10-03 00:01:37 +01:00
parent 991acd5f52
commit c5b0ba98e8
69 changed files with 179 additions and 166 deletions

View file

@ -17,6 +17,12 @@
"presets": [
"es2015",
"stage-0"
],
"plugins": [
["babel-plugin-root-import", {
"rootPathSuffix": "resources/assets/js",
"rootPathPrefix": "@"
}]
]
},
"eslintConfig": {
@ -49,6 +55,7 @@
"babel-core": "^6.26.0",
"babel-eslint": "^7.2.3",
"babel-loader": "^7.1.2",
"babel-plugin-root-import": "^5.1.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.23.0",
"babel-preset-stage-0": "^6.24.1",

View file

@ -7,7 +7,7 @@
</template>
<script>
import { userStore } from '../../stores'
import { userStore } from '@/stores'
export default {
data () {

View file

@ -38,9 +38,9 @@
</template>
<script>
import { sharedStore } from '../../../stores'
import { playback, ls } from '../../../services'
import trackListItem from '../../shared/track-list-item.vue'
import { sharedStore } from '@/stores'
import { playback, ls } from '@/services'
import trackListItem from '@/components/shared/track-list-item.vue'
export default {
props: {

View file

@ -29,7 +29,7 @@
</template>
<script>
import { playback } from '../../../services'
import { playback } from '@/services'
export default {
props: {

View file

@ -37,9 +37,9 @@
<script>
import isMobile from 'ismobilejs'
import { event, $ } from '../../../utils'
import { sharedStore, songStore, preferenceStore as preferences } from '../../../stores'
import { songInfo } from '../../../services'
import { event, $ } from '@/utils'
import { sharedStore, songStore, preferenceStore as preferences } from '@/stores'
import { songInfo } from '@/services'
import lyrics from './lyrics.vue'
import artistInfo from './artist-info.vue'

View file

@ -19,7 +19,7 @@
</template>
<script>
import { youtube as youtubeService } from '../../../services'
import { youtube as youtubeService } from '@/services'
export default {
name: 'main-wrapper--extra--youtube',

View file

@ -50,14 +50,14 @@
</template>
<script>
import { pluralize, event } from '../../../utils'
import { albumStore, artistStore, sharedStore } from '../../../stores'
import { playback, download, albumInfo as albumInfoService } from '../../../services'
import router from '../../../router'
import hasSongList from '../../../mixins/has-song-list'
import albumAttributes from '../../../mixins/album-attributes'
import { pluralize, event } from '@/utils'
import { albumStore, artistStore, sharedStore } from '@/stores'
import { playback, download, albumInfo as albumInfoService } from '@/services'
import router from '@/router'
import hasSongList from '@/mixins/has-song-list'
import albumAttributes from '@/mixins/album-attributes'
import albumInfo from '../extra/album-info.vue'
import soundBar from '../../shared/sound-bar.vue'
import soundBar from '@/components/shared/sound-bar.vue'
export default {
name: 'main-wrapper--main-content--album',

View file

@ -14,11 +14,11 @@
</template>
<script>
import { filterBy, limitBy, event } from '../../../utils'
import { albumStore } from '../../../stores'
import albumItem from '../../shared/album-item.vue'
import viewModeSwitch from '../../shared/view-mode-switch.vue'
import infiniteScroll from '../../../mixins/infinite-scroll'
import { filterBy, limitBy, event } from '@/utils'
import { albumStore } from '@/stores'
import albumItem from '@/components/shared/album-item.vue'
import viewModeSwitch from '@/components/shared/view-mode-switch.vue'
import infiniteScroll from '@/mixins/infinite-scroll'
export default {
mixins: [infiniteScroll],

View file

@ -14,12 +14,12 @@
</template>
<script>
import { filterBy, limitBy, event } from '../../../utils'
import { artistStore } from '../../../stores'
import { filterBy, limitBy, event } from '@/utils'
import { artistStore } from '@/stores'
import artistItem from '../../shared/artist-item.vue'
import viewModeSwitch from '../../shared/view-mode-switch.vue'
import infiniteScroll from '../../../mixins/infinite-scroll'
import artistItem from '@/components/shared/artist-item.vue'
import viewModeSwitch from '@/components/shared/view-mode-switch.vue'
import infiniteScroll from '@/mixins/infinite-scroll'
export default {
mixins: [infiniteScroll],

View file

@ -37,10 +37,10 @@
</template>
<script>
import { pluralize } from '../../../utils'
import { favoriteStore, sharedStore } from '../../../stores'
import { download } from '../../../services'
import hasSongList from '../../../mixins/has-song-list'
import { pluralize } from '@/utils'
import { favoriteStore, sharedStore } from '@/stores'
import { download } from '@/services'
import hasSongList from '@/mixins/has-song-list'
export default {
name: 'main-wrapper--main-content--favorites',

View file

@ -78,13 +78,13 @@
<script>
import { sample } from 'lodash'
import { event } from '../../../utils'
import { songStore, albumStore, artistStore, userStore, preferenceStore } from '../../../stores'
import infiniteScroll from '../../../mixins/infinite-scroll'
import { event } from '@/utils'
import { songStore, albumStore, artistStore, userStore, preferenceStore } from '@/stores'
import infiniteScroll from '@/mixins/infinite-scroll'
import albumItem from '../../shared/album-item.vue'
import artistItem from '../../shared/artist-item.vue'
import songItem from '../../shared/home-song-item.vue'
import albumItem from '@/components/shared/album-item.vue'
import artistItem from '@/components/shared/artist-item.vue'
import songItem from '@/components/shared/home-song-item.vue'
export default {
components: { albumItem, artistItem, songItem },

View file

@ -18,8 +18,8 @@
</template>
<script>
import { event } from '../../../utils'
import { albumStore, sharedStore } from '../../../stores'
import { event } from '@/utils'
import { albumStore, sharedStore } from '@/stores'
import albums from './albums.vue'
import album from './album.vue'

View file

@ -42,11 +42,11 @@
</template>
<script>
import { pluralize, event, alerts } from '../../../utils'
import { playlistStore, sharedStore } from '../../../stores'
import { playback, download } from '../../../services'
import router from '../../../router'
import hasSongList from '../../../mixins/has-song-list'
import { pluralize, event, alerts } from '@/utils'
import { playlistStore, sharedStore } from '@/stores'
import { playback, download } from '@/services'
import router from '@/router'
import hasSongList from '@/mixins/has-song-list'
export default {
name: 'main-wrapper--main-content--playlist',

View file

@ -111,9 +111,9 @@
<script>
import { each } from 'lodash'
import { userStore, preferenceStore, sharedStore } from '../../../stores'
import { forceReloadWindow, $ } from '../../../utils'
import { http, ls } from '../../../services'
import { userStore, preferenceStore, sharedStore } from '@/stores'
import { forceReloadWindow, $ } from '@/utils'
import { http, ls } from '@/services'
export default {
data () {

View file

@ -34,10 +34,10 @@
</template>
<script>
import { pluralize } from '../../../utils'
import { queueStore, songStore } from '../../../stores'
import { playback } from '../../../services'
import hasSongList from '../../../mixins/has-song-list'
import { pluralize } from '@/utils'
import { queueStore, songStore } from '@/stores'
import { playback } from '@/services'
import hasSongList from '@/mixins/has-song-list'
export default {
name: 'main-wrapper--main-content--queue',

View file

@ -24,9 +24,9 @@
</template>
<script>
import { settingStore, sharedStore } from '../../../stores'
import { parseValidationError, forceReloadWindow, showOverlay, hideOverlay, alerts } from '../../../utils'
import router from '../../../router'
import { settingStore, sharedStore } from '@/stores'
import { parseValidationError, forceReloadWindow, showOverlay, hideOverlay, alerts } from '@/utils'
import router from '@/router'
export default {
data () {

View file

@ -25,9 +25,9 @@
</template>
<script>
import { pluralize } from '../../../utils'
import { songStore } from '../../../stores'
import hasSongList from '../../../mixins/has-song-list'
import { pluralize } from '@/utils'
import { songStore } from '@/stores'
import hasSongList from '@/mixins/has-song-list'
export default {
name: 'main-wrapper--main-content--songs',

View file

@ -28,10 +28,10 @@
<script>
import isMobile from 'ismobilejs'
import { userStore } from '../../../stores'
import userItem from '../../shared/user-item.vue'
import editUserForm from '../../modals/edit-user-form.vue'
import addUserForm from '../../modals/add-user-form.vue'
import { userStore } from '@/stores'
import userItem from '@/components/shared/user-item.vue'
import editUserForm from '@/components/modals/edit-user-form.vue'
import addUserForm from '@/components/modals/add-user-form.vue'
export default {
components: { userItem, editUserForm, addUserForm },

View file

@ -11,8 +11,8 @@
</template>
<script>
import { event } from '../../../utils'
import { playback } from '../../../services'
import { event } from '@/utils'
import { playback } from '@/services'
import YouTubePlayer from 'youtube-player'
let player

View file

@ -58,8 +58,8 @@
<script>
import isMobile from 'ismobilejs'
import { event, $ } from '../../../utils'
import { sharedStore, userStore, songStore, queueStore } from '../../../stores'
import { event, $ } from '@/utils'
import { sharedStore, userStore, songStore, queueStore } from '@/stores'
import playlists from './playlists.vue'
export default {

View file

@ -21,8 +21,8 @@
</template>
<script>
import { event, $ } from '../../../utils'
import { songStore, playlistStore, favoriteStore } from '../../../stores'
import { event, $ } from '@/utils'
import { songStore, playlistStore, favoriteStore } from '@/stores'
export default {
props: {

View file

@ -32,7 +32,7 @@
<script>
import { clone } from 'lodash'
import soundBar from '../shared/sound-bar.vue'
import { userStore } from '../../stores'
import { userStore } from '@/stores'
export default {
name: 'modals--add-user-form',

View file

@ -76,10 +76,10 @@
<script>
import { every, filter, union } from 'lodash'
import { br2nl } from '../../utils'
import { songInfo } from '../../services/info'
import { artistStore, albumStore, songStore } from '../../stores'
import config from '../../config'
import { br2nl } from '@/utils'
import { songInfo } from '@/services/info'
import { artistStore, albumStore, songStore } from '@/stores'
import config from '@/config'
import soundBar from '../shared/sound-bar.vue'
import typeahead from '../shared/typeahead.vue'

View file

@ -32,7 +32,7 @@
<script>
import { clone } from 'lodash'
import soundBar from '../shared/sound-bar.vue'
import { userStore } from '../../stores'
import { userStore } from '@/stores'
export default {
name: 'modals--edit-user-form',

View file

@ -27,10 +27,10 @@
</template>
<script>
import { pluralize } from '../../utils'
import { playlistStore } from '../../stores'
import router from '../../router'
import songMenuMethods from '../../mixins/song-menu-methods'
import { pluralize } from '@/utils'
import { playlistStore } from '@/stores'
import router from '@/router'
import songMenuMethods from '@/mixins/song-menu-methods'
export default {
name: 'shared--add-to-menu',

View file

@ -36,10 +36,10 @@
</template>
<script>
import { pluralize } from '../../utils'
import { queueStore, artistStore, sharedStore } from '../../stores'
import { playback, download } from '../../services'
import albumAttributes from '../../mixins/album-attributes'
import { pluralize } from '@/utils'
import { queueStore, artistStore, sharedStore } from '@/stores'
import { playback, download } from '@/services'
import albumAttributes from '@/mixins/album-attributes'
export default {
name: 'shared--album-item',

View file

@ -28,10 +28,10 @@
</template>
<script>
import { pluralize } from '../../utils'
import { artistStore, queueStore, sharedStore } from '../../stores'
import { playback, download } from '../../services'
import artistAttributes from '../../mixins/artist-attributes'
import { pluralize } from '@/utils'
import { artistStore, queueStore, sharedStore } from '@/stores'
import { playback, download } from '@/services'
import artistAttributes from '@/mixins/artist-attributes'
export default {
name: 'shared--artist-item',

View file

@ -21,9 +21,9 @@
</template>
<script>
import { pluralize } from '../../utils'
import { queueStore } from '../../stores'
import { playback } from '../../services'
import { pluralize } from '@/utils'
import { queueStore } from '@/stores'
import { playback } from '@/services'
export default {
name: 'shared--home-song-item',

View file

@ -17,7 +17,7 @@
<script>
import { assign } from 'lodash'
import { event } from '../../utils'
import { event } from '@/utils'
import soundBar from './sound-bar.vue'
export default {

View file

@ -26,8 +26,8 @@
</template>
<script>
import { playback } from '../../services'
import { queueStore } from '../../stores'
import { playback } from '@/services'
import { queueStore } from '@/stores'
import $v from 'vuequery'
export default {

View file

@ -51,10 +51,10 @@
import isMobile from 'ismobilejs'
import { each } from 'lodash'
import { filterBy, orderBy, event, pluralize, $ } from '../../utils'
import { playlistStore, queueStore, songStore, favoriteStore } from '../../stores'
import { playback } from '../../services'
import router from '../../router'
import { filterBy, orderBy, event, pluralize, $ } from '@/utils'
import { playlistStore, queueStore, songStore, favoriteStore } from '@/stores'
import { playback } from '@/services'
import router from '@/router'
import songItem from './song-item.vue'
import songMenu from './song-menu.vue'

View file

@ -32,11 +32,11 @@
<script>
import { each } from 'lodash'
import songMenuMethods from '../../mixins/song-menu-methods'
import { event, isClipboardSupported, copyText } from '../../utils'
import { sharedStore, songStore, queueStore, userStore, playlistStore } from '../../stores'
import { playback, download } from '../../services'
import router from '../../router'
import songMenuMethods from '@/mixins/song-menu-methods'
import { event, isClipboardSupported, copyText } from '@/utils'
import { sharedStore, songStore, queueStore, userStore, playlistStore } from '@/stores'
import { playback, download } from '@/services'
import router from '@/router'
export default {
name: 'song-menu',

View file

@ -9,7 +9,7 @@
</template>
<script>
import { $ } from '../../utils'
import { $ } from '@/utils'
export default {
data () {

View file

@ -16,8 +16,8 @@
</template>
<script>
import { songStore, queueStore, sharedStore } from '../../stores'
import { ls, playback } from '../../services'
import { songStore, queueStore, sharedStore } from '@/stores'
import { ls, playback } from '@/services'
export default {
name: 'shared--track-list-item',

View file

@ -21,7 +21,7 @@
</template>
<script>
import { filterBy, $ } from '../../utils'
import { filterBy, $ } from '@/utils'
export default {
props: {

View file

@ -23,9 +23,9 @@
</template>
<script>
import { userStore } from '../../stores'
import router from '../../router'
import { alerts } from '../../utils'
import { userStore } from '@/stores'
import router from '@/router'
import { alerts } from '@/utils'
export default {
props: {

View file

@ -12,8 +12,8 @@
<script>
import isMobile from 'ismobilejs'
import { event } from '../../utils'
import { preferenceStore as preferences } from '../../stores'
import { event } from '@/utils'
import { preferenceStore as preferences } from '@/stores'
export default {
props: {

View file

@ -31,8 +31,8 @@
import { map, cloneDeep, each } from 'lodash'
import nouislider from 'nouislider'
import { isAudioContextSupported, event, $ } from '../../utils'
import { equalizerStore, preferenceStore as preferences } from '../../stores'
import { isAudioContextSupported, event, $ } from '@/utils'
import { equalizerStore, preferenceStore as preferences } from '@/stores'
export default {
data () {

View file

@ -59,9 +59,9 @@
</template>
<script>
import { playback, socket } from '../../services'
import { isAudioContextSupported, event } from '../../utils'
import { songStore, favoriteStore, preferenceStore } from '../../stores'
import { playback, socket } from '@/services'
import { isAudioContextSupported, event } from '@/utils'
import { songStore, favoriteStore, preferenceStore } from '@/stores'
import soundBar from '../shared/sound-bar.vue'
import equalizer from './equalizer.vue'

View file

@ -10,7 +10,7 @@
</template>
<script>
import { playback, socket } from '../../services'
import { playback, socket } from '@/services'
export default {
data () {

View file

@ -14,8 +14,8 @@
</template>
<script>
import config from '../../config'
import { event } from '../../utils'
import config from '@/config'
import { event } from '@/utils'
import searchForm from './search-form.vue'
import userBadge from './user-badge.vue'

View file

@ -14,7 +14,7 @@
import isMobile from 'ismobilejs'
import { debounce } from 'lodash'
import { event } from '../../utils'
import { event } from '@/utils'
export default {
name: 'site-header--search-form',

View file

@ -10,8 +10,8 @@
</template>
<script>
import { userStore } from '../../stores'
import { event } from '../../utils'
import { userStore } from '@/stores'
import { event } from '@/utils'
export default {
name: 'site-header--user-badge',

View file

@ -1,4 +1,4 @@
import { secondsToHis } from '../utils'
import { secondsToHis } from '@/utils'
export default {
computed: {

View file

@ -1,5 +1,5 @@
import { secondsToHis } from '../utils'
import config from '../config'
import { secondsToHis } from '@/utils'
import config from '@/config'
export default {
computed: {

View file

@ -5,10 +5,10 @@
import { assignIn } from 'lodash'
import isMobile from 'ismobilejs'
import { playback } from '../services'
import songList from '../components/shared/song-list.vue'
import songListControls from '../components/shared/song-list-controls.vue'
import controlsToggler from '../components/shared/song-list-controls-toggler.vue'
import { playback } from '@/services'
import songList from '@/components/shared/song-list.vue'
import songListControls from '@/components/shared/song-list-controls.vue'
import controlsToggler from '@/components/shared/song-list-controls-toggler.vue'
export default {
components: { songList, songListControls, controlsToggler },

View file

@ -1,4 +1,4 @@
import toTopButton from '../components/shared/to-top-button.vue'
import toTopButton from '@/components/shared/to-top-button.vue'
/**
* Add a "infinite scroll" functionality to any component using this mixin.

View file

@ -1,6 +1,6 @@
import { each } from 'lodash'
import { queueStore, playlistStore, favoriteStore } from '../stores'
import { queueStore, playlistStore, favoriteStore } from '@/stores'
/**
* Includes the methods triggerable on a song (context) menu.

View file

@ -1,6 +1,6 @@
import './static-loader'
import Vue from 'vue'
import { http } from '../services'
import { http } from '@/services'
import App from './app.vue'
new Vue({

View file

@ -64,9 +64,9 @@
<script>
import nouislider from 'nouislider'
import { socket, ls } from '../services'
import { userStore } from '../stores'
import loginForm from '../components/auth/login-form.vue'
import { socket, ls } from '@/services'
import { userStore } from '@/stores'
import loginForm from '@/components/auth/login-form.vue'
let volumeSlider
const MAX_RETRIES = 10

View file

@ -1,5 +1,5 @@
import 'babel-polyfill/dist/polyfill.min.js'
import '../libs/modernizr-custom.js'
import '../../css/meyer-reset.min.css'
import '@/libs/modernizr-custom.js'
import '@/../css/meyer-reset.min.css'
import 'nouislider/distribute/nouislider.min.css'
import 'font-awesome/css/font-awesome.min.css'

View file

@ -1,6 +1,6 @@
import { reduce } from 'lodash'
import { playlistStore, favoriteStore } from '../stores'
import { playlistStore, favoriteStore } from '@/stores'
import { ls } from '.'
export const download = {

View file

@ -1,8 +1,8 @@
import axios from 'axios'
import NProgress from 'nprogress'
import { event } from '../utils'
import { ls } from '../services'
import { event } from '@/utils'
import { ls } from '@/services'
/**
* Responsible for all HTTP requests.

View file

@ -1,6 +1,6 @@
import { each } from 'lodash'
import { secondsToHis } from '../../utils'
import { secondsToHis } from '@/utils'
import { http } from '..'
export const albumInfo = {

View file

@ -3,11 +3,11 @@ import plyr from 'plyr'
import Vue from 'vue'
import isMobile from 'ismobilejs'
import { event, isMediaSessionSupported } from '../utils'
import { queueStore, sharedStore, userStore, songStore, preferenceStore as preferences } from '../stores'
import { socket } from '../services'
import config from '../config'
import router from '../router'
import { event, isMediaSessionSupported } from '@/utils'
import { queueStore, sharedStore, userStore, songStore, preferenceStore as preferences } from '@/stores'
import { socket } from '@/services'
import config from '@/config'
import router from '@/router'
export const playback = {
player: null,

View file

@ -1,6 +1,6 @@
import Pusher from 'pusher-js'
import { userStore } from '../stores'
import { userStore } from '@/stores'
import { ls } from '.'
export const socket = {

View file

@ -1,6 +1,6 @@
import { http } from '.'
import { event } from '../utils'
import router from '../router'
import { event } from '@/utils'
import router from '@/router'
export const youtube = {
/**

View file

@ -3,7 +3,7 @@
import Vue from 'vue'
import { reduce, each, union, difference, take, filter, orderBy } from 'lodash'
import stub from '../stubs/album'
import stub from '@/stubs/album'
import { artistStore } from '.'
export const albumStore = {

View file

@ -3,7 +3,7 @@
import Vue from 'vue'
import { reduce, each, union, difference, take, filter, orderBy } from 'lodash'
import stub from '../stubs/artist'
import stub from '@/stubs/artist'
const UNKNOWN_ARTIST_ID = 1
const VARIOUS_ARTISTS_ID = 2

View file

@ -1,8 +1,8 @@
import { each, map, difference, union } from 'lodash'
import NProgress from 'nprogress'
import { http } from '../services'
import { alerts, pluralize } from '../utils'
import { http } from '@/services'
import { alerts, pluralize } from '@/utils'
export const favoriteStore = {
state: {

View file

@ -1,9 +1,9 @@
import { each, find, map, difference, union } from 'lodash'
import NProgress from 'nprogress'
import stub from '../stubs/playlist'
import { http } from '../services'
import { alerts, pluralize } from '../utils'
import stub from '@/stubs/playlist'
import { http } from '@/services'
import { alerts, pluralize } from '@/utils'
import { songStore } from '.'
export const playlistStore = {

View file

@ -1,7 +1,7 @@
import { extend, has, each } from 'lodash'
import { userStore } from '.'
import { ls } from '../services'
import { ls } from '@/services'
export const preferenceStore = {
storeKey: '',

View file

@ -1,6 +1,6 @@
import { http } from '../services'
import { alerts } from '../utils'
import stub from '../stubs/settings'
import { http } from '@/services'
import { alerts } from '@/utils'
import stub from '@/stubs/settings'
export const settingStore = {
stub,

View file

@ -1,7 +1,7 @@
import { assign } from 'lodash'
import isMobile from 'ismobilejs'
import { http } from '../services'
import { http } from '@/services'
import { userStore, preferenceStore, artistStore, albumStore, songStore, playlistStore, queueStore, settingStore } from '.'
export const sharedStore = {

View file

@ -3,10 +3,10 @@ import slugify from 'slugify'
import { assign, without, map, take, remove, orderBy, each, unionBy, compact } from 'lodash'
import isMobile from 'ismobilejs'
import { secondsToHis, alerts, pluralize } from '../utils'
import { http, ls } from '../services'
import { secondsToHis, alerts, pluralize } from '@/utils'
import { http, ls } from '@/services'
import { sharedStore, favoriteStore, albumStore, artistStore, preferenceStore } from '.'
import stub from '../stubs/song'
import stub from '@/stubs/song'
export const songStore = {
stub,

View file

@ -3,9 +3,9 @@ import md5 from 'blueimp-md5'
import Vue from 'vue'
import NProgress from 'nprogress'
import { http } from '../services'
import { alerts } from '../utils'
import stub from '../stubs/user'
import { http } from '@/services'
import { alerts } from '@/utils'
import stub from '@/stubs/user'
export const userStore = {
stub,

View file

@ -1,4 +1,4 @@
import config from '../config'
import config from '@/config'
import artist from './artist'
export default {

View file

@ -2,7 +2,7 @@
* Other common methods.
*/
import select from 'select'
import { event } from '../utils'
import { event } from '@/utils'
/**
* Load (display) a main panel (view).

View file

@ -530,6 +530,12 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
babel-plugin-root-import@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-root-import/-/babel-plugin-root-import-5.1.0.tgz#80ea1cd5945b463a5e3f7e204a69478c573e328c"
dependencies:
slash "^1.0.0"
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"