a simple web player for subsonic tinysub.devins.page
subsonic navidrome javascript
11
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: bundle spark-md5

if we switch to svelte or some sort of framework then ill import this properly as a npm package

intergrav 331365a2 92718ad1

+499 -1
+1 -1
src/index.html
··· 7 7 <link rel="stylesheet" href="css/base.css" /> 8 8 <link rel="stylesheet" href="css/layout.css" /> 9 9 <link rel="stylesheet" href="css/components.css" /> 10 - <script src="https://cdn.jsdelivr.net/npm/spark-md5@3/spark-md5.min.js"></script> 11 10 </head> 12 11 <body> 13 12 <!-- login panel --> ··· 206 205 <script src="js/queue.js"></script> 207 206 <script src="js/library.js"></script> 208 207 <script src="js/ui.js"></script> 208 + <script src="js/spark-md5.js"></script> 209 209 <script src="js/auth.js"></script> 210 210 <script src="js/player.js"></script> 211 211 <script src="js/draggable.js"></script>
+498
src/js/spark-md5.js
··· 1 + /* https://www.npmjs.com/package/spark-md5 */ 2 + (function (factory) { 3 + if (typeof exports === "object") { 4 + module.exports = factory(); 5 + } else if (typeof define === "function" && define.amd) { 6 + define(factory); 7 + } else { 8 + var glob; 9 + try { 10 + glob = window; 11 + } catch (e) { 12 + glob = self; 13 + } 14 + glob.SparkMD5 = factory(); 15 + } 16 + })(function (undefined) { 17 + "use strict"; 18 + var add32 = function (a, b) { 19 + return (a + b) & 4294967295; 20 + }, 21 + hex_chr = [ 22 + "0", 23 + "1", 24 + "2", 25 + "3", 26 + "4", 27 + "5", 28 + "6", 29 + "7", 30 + "8", 31 + "9", 32 + "a", 33 + "b", 34 + "c", 35 + "d", 36 + "e", 37 + "f", 38 + ]; 39 + function cmn(q, a, b, x, s, t) { 40 + a = add32(add32(a, q), add32(x, t)); 41 + return add32((a << s) | (a >>> (32 - s)), b); 42 + } 43 + function md5cycle(x, k) { 44 + var a = x[0], 45 + b = x[1], 46 + c = x[2], 47 + d = x[3]; 48 + a += (((b & c) | (~b & d)) + k[0] - 680876936) | 0; 49 + a = (((a << 7) | (a >>> 25)) + b) | 0; 50 + d += (((a & b) | (~a & c)) + k[1] - 389564586) | 0; 51 + d = (((d << 12) | (d >>> 20)) + a) | 0; 52 + c += (((d & a) | (~d & b)) + k[2] + 606105819) | 0; 53 + c = (((c << 17) | (c >>> 15)) + d) | 0; 54 + b += (((c & d) | (~c & a)) + k[3] - 1044525330) | 0; 55 + b = (((b << 22) | (b >>> 10)) + c) | 0; 56 + a += (((b & c) | (~b & d)) + k[4] - 176418897) | 0; 57 + a = (((a << 7) | (a >>> 25)) + b) | 0; 58 + d += (((a & b) | (~a & c)) + k[5] + 1200080426) | 0; 59 + d = (((d << 12) | (d >>> 20)) + a) | 0; 60 + c += (((d & a) | (~d & b)) + k[6] - 1473231341) | 0; 61 + c = (((c << 17) | (c >>> 15)) + d) | 0; 62 + b += (((c & d) | (~c & a)) + k[7] - 45705983) | 0; 63 + b = (((b << 22) | (b >>> 10)) + c) | 0; 64 + a += (((b & c) | (~b & d)) + k[8] + 1770035416) | 0; 65 + a = (((a << 7) | (a >>> 25)) + b) | 0; 66 + d += (((a & b) | (~a & c)) + k[9] - 1958414417) | 0; 67 + d = (((d << 12) | (d >>> 20)) + a) | 0; 68 + c += (((d & a) | (~d & b)) + k[10] - 42063) | 0; 69 + c = (((c << 17) | (c >>> 15)) + d) | 0; 70 + b += (((c & d) | (~c & a)) + k[11] - 1990404162) | 0; 71 + b = (((b << 22) | (b >>> 10)) + c) | 0; 72 + a += (((b & c) | (~b & d)) + k[12] + 1804603682) | 0; 73 + a = (((a << 7) | (a >>> 25)) + b) | 0; 74 + d += (((a & b) | (~a & c)) + k[13] - 40341101) | 0; 75 + d = (((d << 12) | (d >>> 20)) + a) | 0; 76 + c += (((d & a) | (~d & b)) + k[14] - 1502002290) | 0; 77 + c = (((c << 17) | (c >>> 15)) + d) | 0; 78 + b += (((c & d) | (~c & a)) + k[15] + 1236535329) | 0; 79 + b = (((b << 22) | (b >>> 10)) + c) | 0; 80 + a += (((b & d) | (c & ~d)) + k[1] - 165796510) | 0; 81 + a = (((a << 5) | (a >>> 27)) + b) | 0; 82 + d += (((a & c) | (b & ~c)) + k[6] - 1069501632) | 0; 83 + d = (((d << 9) | (d >>> 23)) + a) | 0; 84 + c += (((d & b) | (a & ~b)) + k[11] + 643717713) | 0; 85 + c = (((c << 14) | (c >>> 18)) + d) | 0; 86 + b += (((c & a) | (d & ~a)) + k[0] - 373897302) | 0; 87 + b = (((b << 20) | (b >>> 12)) + c) | 0; 88 + a += (((b & d) | (c & ~d)) + k[5] - 701558691) | 0; 89 + a = (((a << 5) | (a >>> 27)) + b) | 0; 90 + d += (((a & c) | (b & ~c)) + k[10] + 38016083) | 0; 91 + d = (((d << 9) | (d >>> 23)) + a) | 0; 92 + c += (((d & b) | (a & ~b)) + k[15] - 660478335) | 0; 93 + c = (((c << 14) | (c >>> 18)) + d) | 0; 94 + b += (((c & a) | (d & ~a)) + k[4] - 405537848) | 0; 95 + b = (((b << 20) | (b >>> 12)) + c) | 0; 96 + a += (((b & d) | (c & ~d)) + k[9] + 568446438) | 0; 97 + a = (((a << 5) | (a >>> 27)) + b) | 0; 98 + d += (((a & c) | (b & ~c)) + k[14] - 1019803690) | 0; 99 + d = (((d << 9) | (d >>> 23)) + a) | 0; 100 + c += (((d & b) | (a & ~b)) + k[3] - 187363961) | 0; 101 + c = (((c << 14) | (c >>> 18)) + d) | 0; 102 + b += (((c & a) | (d & ~a)) + k[8] + 1163531501) | 0; 103 + b = (((b << 20) | (b >>> 12)) + c) | 0; 104 + a += (((b & d) | (c & ~d)) + k[13] - 1444681467) | 0; 105 + a = (((a << 5) | (a >>> 27)) + b) | 0; 106 + d += (((a & c) | (b & ~c)) + k[2] - 51403784) | 0; 107 + d = (((d << 9) | (d >>> 23)) + a) | 0; 108 + c += (((d & b) | (a & ~b)) + k[7] + 1735328473) | 0; 109 + c = (((c << 14) | (c >>> 18)) + d) | 0; 110 + b += (((c & a) | (d & ~a)) + k[12] - 1926607734) | 0; 111 + b = (((b << 20) | (b >>> 12)) + c) | 0; 112 + a += ((b ^ c ^ d) + k[5] - 378558) | 0; 113 + a = (((a << 4) | (a >>> 28)) + b) | 0; 114 + d += ((a ^ b ^ c) + k[8] - 2022574463) | 0; 115 + d = (((d << 11) | (d >>> 21)) + a) | 0; 116 + c += ((d ^ a ^ b) + k[11] + 1839030562) | 0; 117 + c = (((c << 16) | (c >>> 16)) + d) | 0; 118 + b += ((c ^ d ^ a) + k[14] - 35309556) | 0; 119 + b = (((b << 23) | (b >>> 9)) + c) | 0; 120 + a += ((b ^ c ^ d) + k[1] - 1530992060) | 0; 121 + a = (((a << 4) | (a >>> 28)) + b) | 0; 122 + d += ((a ^ b ^ c) + k[4] + 1272893353) | 0; 123 + d = (((d << 11) | (d >>> 21)) + a) | 0; 124 + c += ((d ^ a ^ b) + k[7] - 155497632) | 0; 125 + c = (((c << 16) | (c >>> 16)) + d) | 0; 126 + b += ((c ^ d ^ a) + k[10] - 1094730640) | 0; 127 + b = (((b << 23) | (b >>> 9)) + c) | 0; 128 + a += ((b ^ c ^ d) + k[13] + 681279174) | 0; 129 + a = (((a << 4) | (a >>> 28)) + b) | 0; 130 + d += ((a ^ b ^ c) + k[0] - 358537222) | 0; 131 + d = (((d << 11) | (d >>> 21)) + a) | 0; 132 + c += ((d ^ a ^ b) + k[3] - 722521979) | 0; 133 + c = (((c << 16) | (c >>> 16)) + d) | 0; 134 + b += ((c ^ d ^ a) + k[6] + 76029189) | 0; 135 + b = (((b << 23) | (b >>> 9)) + c) | 0; 136 + a += ((b ^ c ^ d) + k[9] - 640364487) | 0; 137 + a = (((a << 4) | (a >>> 28)) + b) | 0; 138 + d += ((a ^ b ^ c) + k[12] - 421815835) | 0; 139 + d = (((d << 11) | (d >>> 21)) + a) | 0; 140 + c += ((d ^ a ^ b) + k[15] + 530742520) | 0; 141 + c = (((c << 16) | (c >>> 16)) + d) | 0; 142 + b += ((c ^ d ^ a) + k[2] - 995338651) | 0; 143 + b = (((b << 23) | (b >>> 9)) + c) | 0; 144 + a += ((c ^ (b | ~d)) + k[0] - 198630844) | 0; 145 + a = (((a << 6) | (a >>> 26)) + b) | 0; 146 + d += ((b ^ (a | ~c)) + k[7] + 1126891415) | 0; 147 + d = (((d << 10) | (d >>> 22)) + a) | 0; 148 + c += ((a ^ (d | ~b)) + k[14] - 1416354905) | 0; 149 + c = (((c << 15) | (c >>> 17)) + d) | 0; 150 + b += ((d ^ (c | ~a)) + k[5] - 57434055) | 0; 151 + b = (((b << 21) | (b >>> 11)) + c) | 0; 152 + a += ((c ^ (b | ~d)) + k[12] + 1700485571) | 0; 153 + a = (((a << 6) | (a >>> 26)) + b) | 0; 154 + d += ((b ^ (a | ~c)) + k[3] - 1894986606) | 0; 155 + d = (((d << 10) | (d >>> 22)) + a) | 0; 156 + c += ((a ^ (d | ~b)) + k[10] - 1051523) | 0; 157 + c = (((c << 15) | (c >>> 17)) + d) | 0; 158 + b += ((d ^ (c | ~a)) + k[1] - 2054922799) | 0; 159 + b = (((b << 21) | (b >>> 11)) + c) | 0; 160 + a += ((c ^ (b | ~d)) + k[8] + 1873313359) | 0; 161 + a = (((a << 6) | (a >>> 26)) + b) | 0; 162 + d += ((b ^ (a | ~c)) + k[15] - 30611744) | 0; 163 + d = (((d << 10) | (d >>> 22)) + a) | 0; 164 + c += ((a ^ (d | ~b)) + k[6] - 1560198380) | 0; 165 + c = (((c << 15) | (c >>> 17)) + d) | 0; 166 + b += ((d ^ (c | ~a)) + k[13] + 1309151649) | 0; 167 + b = (((b << 21) | (b >>> 11)) + c) | 0; 168 + a += ((c ^ (b | ~d)) + k[4] - 145523070) | 0; 169 + a = (((a << 6) | (a >>> 26)) + b) | 0; 170 + d += ((b ^ (a | ~c)) + k[11] - 1120210379) | 0; 171 + d = (((d << 10) | (d >>> 22)) + a) | 0; 172 + c += ((a ^ (d | ~b)) + k[2] + 718787259) | 0; 173 + c = (((c << 15) | (c >>> 17)) + d) | 0; 174 + b += ((d ^ (c | ~a)) + k[9] - 343485551) | 0; 175 + b = (((b << 21) | (b >>> 11)) + c) | 0; 176 + x[0] = (a + x[0]) | 0; 177 + x[1] = (b + x[1]) | 0; 178 + x[2] = (c + x[2]) | 0; 179 + x[3] = (d + x[3]) | 0; 180 + } 181 + function md5blk(s) { 182 + var md5blks = [], 183 + i; 184 + for (i = 0; i < 64; i += 4) { 185 + md5blks[i >> 2] = 186 + s.charCodeAt(i) + 187 + (s.charCodeAt(i + 1) << 8) + 188 + (s.charCodeAt(i + 2) << 16) + 189 + (s.charCodeAt(i + 3) << 24); 190 + } 191 + return md5blks; 192 + } 193 + function md5blk_array(a) { 194 + var md5blks = [], 195 + i; 196 + for (i = 0; i < 64; i += 4) { 197 + md5blks[i >> 2] = 198 + a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); 199 + } 200 + return md5blks; 201 + } 202 + function md51(s) { 203 + var n = s.length, 204 + state = [1732584193, -271733879, -1732584194, 271733878], 205 + i, 206 + length, 207 + tail, 208 + tmp, 209 + lo, 210 + hi; 211 + for (i = 64; i <= n; i += 64) { 212 + md5cycle(state, md5blk(s.substring(i - 64, i))); 213 + } 214 + s = s.substring(i - 64); 215 + length = s.length; 216 + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 217 + for (i = 0; i < length; i += 1) { 218 + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); 219 + } 220 + tail[i >> 2] |= 128 << ((i % 4) << 3); 221 + if (i > 55) { 222 + md5cycle(state, tail); 223 + for (i = 0; i < 16; i += 1) { 224 + tail[i] = 0; 225 + } 226 + } 227 + tmp = n * 8; 228 + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 229 + lo = parseInt(tmp[2], 16); 230 + hi = parseInt(tmp[1], 16) || 0; 231 + tail[14] = lo; 232 + tail[15] = hi; 233 + md5cycle(state, tail); 234 + return state; 235 + } 236 + function md51_array(a) { 237 + var n = a.length, 238 + state = [1732584193, -271733879, -1732584194, 271733878], 239 + i, 240 + length, 241 + tail, 242 + tmp, 243 + lo, 244 + hi; 245 + for (i = 64; i <= n; i += 64) { 246 + md5cycle(state, md5blk_array(a.subarray(i - 64, i))); 247 + } 248 + a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0); 249 + length = a.length; 250 + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 251 + for (i = 0; i < length; i += 1) { 252 + tail[i >> 2] |= a[i] << ((i % 4) << 3); 253 + } 254 + tail[i >> 2] |= 128 << ((i % 4) << 3); 255 + if (i > 55) { 256 + md5cycle(state, tail); 257 + for (i = 0; i < 16; i += 1) { 258 + tail[i] = 0; 259 + } 260 + } 261 + tmp = n * 8; 262 + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 263 + lo = parseInt(tmp[2], 16); 264 + hi = parseInt(tmp[1], 16) || 0; 265 + tail[14] = lo; 266 + tail[15] = hi; 267 + md5cycle(state, tail); 268 + return state; 269 + } 270 + function rhex(n) { 271 + var s = "", 272 + j; 273 + for (j = 0; j < 4; j += 1) { 274 + s += hex_chr[(n >> (j * 8 + 4)) & 15] + hex_chr[(n >> (j * 8)) & 15]; 275 + } 276 + return s; 277 + } 278 + function hex(x) { 279 + var i; 280 + for (i = 0; i < x.length; i += 1) { 281 + x[i] = rhex(x[i]); 282 + } 283 + return x.join(""); 284 + } 285 + if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") { 286 + add32 = function (x, y) { 287 + var lsw = (x & 65535) + (y & 65535), 288 + msw = (x >> 16) + (y >> 16) + (lsw >> 16); 289 + return (msw << 16) | (lsw & 65535); 290 + }; 291 + } 292 + if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) { 293 + (function () { 294 + function clamp(val, length) { 295 + val = val | 0 || 0; 296 + if (val < 0) { 297 + return Math.max(val + length, 0); 298 + } 299 + return Math.min(val, length); 300 + } 301 + ArrayBuffer.prototype.slice = function (from, to) { 302 + var length = this.byteLength, 303 + begin = clamp(from, length), 304 + end = length, 305 + num, 306 + target, 307 + targetArray, 308 + sourceArray; 309 + if (to !== undefined) { 310 + end = clamp(to, length); 311 + } 312 + if (begin > end) { 313 + return new ArrayBuffer(0); 314 + } 315 + num = end - begin; 316 + target = new ArrayBuffer(num); 317 + targetArray = new Uint8Array(target); 318 + sourceArray = new Uint8Array(this, begin, num); 319 + targetArray.set(sourceArray); 320 + return target; 321 + }; 322 + })(); 323 + } 324 + function toUtf8(str) { 325 + if (/[\u0080-\uFFFF]/.test(str)) { 326 + str = unescape(encodeURIComponent(str)); 327 + } 328 + return str; 329 + } 330 + function utf8Str2ArrayBuffer(str, returnUInt8Array) { 331 + var length = str.length, 332 + buff = new ArrayBuffer(length), 333 + arr = new Uint8Array(buff), 334 + i; 335 + for (i = 0; i < length; i += 1) { 336 + arr[i] = str.charCodeAt(i); 337 + } 338 + return returnUInt8Array ? arr : buff; 339 + } 340 + function arrayBuffer2Utf8Str(buff) { 341 + return String.fromCharCode.apply(null, new Uint8Array(buff)); 342 + } 343 + function concatenateArrayBuffers(first, second, returnUInt8Array) { 344 + var result = new Uint8Array(first.byteLength + second.byteLength); 345 + result.set(new Uint8Array(first)); 346 + result.set(new Uint8Array(second), first.byteLength); 347 + return returnUInt8Array ? result : result.buffer; 348 + } 349 + function hexToBinaryString(hex) { 350 + var bytes = [], 351 + length = hex.length, 352 + x; 353 + for (x = 0; x < length - 1; x += 2) { 354 + bytes.push(parseInt(hex.substr(x, 2), 16)); 355 + } 356 + return String.fromCharCode.apply(String, bytes); 357 + } 358 + function SparkMD5() { 359 + this.reset(); 360 + } 361 + SparkMD5.prototype.append = function (str) { 362 + this.appendBinary(toUtf8(str)); 363 + return this; 364 + }; 365 + SparkMD5.prototype.appendBinary = function (contents) { 366 + this._buff += contents; 367 + this._length += contents.length; 368 + var length = this._buff.length, 369 + i; 370 + for (i = 64; i <= length; i += 64) { 371 + md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i))); 372 + } 373 + this._buff = this._buff.substring(i - 64); 374 + return this; 375 + }; 376 + SparkMD5.prototype.end = function (raw) { 377 + var buff = this._buff, 378 + length = buff.length, 379 + i, 380 + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 381 + ret; 382 + for (i = 0; i < length; i += 1) { 383 + tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3); 384 + } 385 + this._finish(tail, length); 386 + ret = hex(this._hash); 387 + if (raw) { 388 + ret = hexToBinaryString(ret); 389 + } 390 + this.reset(); 391 + return ret; 392 + }; 393 + SparkMD5.prototype.reset = function () { 394 + this._buff = ""; 395 + this._length = 0; 396 + this._hash = [1732584193, -271733879, -1732584194, 271733878]; 397 + return this; 398 + }; 399 + SparkMD5.prototype.getState = function () { 400 + return { buff: this._buff, length: this._length, hash: this._hash.slice() }; 401 + }; 402 + SparkMD5.prototype.setState = function (state) { 403 + this._buff = state.buff; 404 + this._length = state.length; 405 + this._hash = state.hash; 406 + return this; 407 + }; 408 + SparkMD5.prototype.destroy = function () { 409 + delete this._hash; 410 + delete this._buff; 411 + delete this._length; 412 + }; 413 + SparkMD5.prototype._finish = function (tail, length) { 414 + var i = length, 415 + tmp, 416 + lo, 417 + hi; 418 + tail[i >> 2] |= 128 << ((i % 4) << 3); 419 + if (i > 55) { 420 + md5cycle(this._hash, tail); 421 + for (i = 0; i < 16; i += 1) { 422 + tail[i] = 0; 423 + } 424 + } 425 + tmp = this._length * 8; 426 + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); 427 + lo = parseInt(tmp[2], 16); 428 + hi = parseInt(tmp[1], 16) || 0; 429 + tail[14] = lo; 430 + tail[15] = hi; 431 + md5cycle(this._hash, tail); 432 + }; 433 + SparkMD5.hash = function (str, raw) { 434 + return SparkMD5.hashBinary(toUtf8(str), raw); 435 + }; 436 + SparkMD5.hashBinary = function (content, raw) { 437 + var hash = md51(content), 438 + ret = hex(hash); 439 + return raw ? hexToBinaryString(ret) : ret; 440 + }; 441 + SparkMD5.ArrayBuffer = function () { 442 + this.reset(); 443 + }; 444 + SparkMD5.ArrayBuffer.prototype.append = function (arr) { 445 + var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), 446 + length = buff.length, 447 + i; 448 + this._length += arr.byteLength; 449 + for (i = 64; i <= length; i += 64) { 450 + md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i))); 451 + } 452 + this._buff = 453 + i - 64 < length 454 + ? new Uint8Array(buff.buffer.slice(i - 64)) 455 + : new Uint8Array(0); 456 + return this; 457 + }; 458 + SparkMD5.ArrayBuffer.prototype.end = function (raw) { 459 + var buff = this._buff, 460 + length = buff.length, 461 + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 462 + i, 463 + ret; 464 + for (i = 0; i < length; i += 1) { 465 + tail[i >> 2] |= buff[i] << ((i % 4) << 3); 466 + } 467 + this._finish(tail, length); 468 + ret = hex(this._hash); 469 + if (raw) { 470 + ret = hexToBinaryString(ret); 471 + } 472 + this.reset(); 473 + return ret; 474 + }; 475 + SparkMD5.ArrayBuffer.prototype.reset = function () { 476 + this._buff = new Uint8Array(0); 477 + this._length = 0; 478 + this._hash = [1732584193, -271733879, -1732584194, 271733878]; 479 + return this; 480 + }; 481 + SparkMD5.ArrayBuffer.prototype.getState = function () { 482 + var state = SparkMD5.prototype.getState.call(this); 483 + state.buff = arrayBuffer2Utf8Str(state.buff); 484 + return state; 485 + }; 486 + SparkMD5.ArrayBuffer.prototype.setState = function (state) { 487 + state.buff = utf8Str2ArrayBuffer(state.buff, true); 488 + return SparkMD5.prototype.setState.call(this, state); 489 + }; 490 + SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; 491 + SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; 492 + SparkMD5.ArrayBuffer.hash = function (arr, raw) { 493 + var hash = md51_array(new Uint8Array(arr)), 494 + ret = hex(hash); 495 + return raw ? hexToBinaryString(ret) : ret; 496 + }; 497 + return SparkMD5; 498 + });