md5.js 42 KB

                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/script/game/md5.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'd47eb8KOPRE5KRU6y0lCjUT', 'md5');
// script/game/md5.js

"use strict";

/*
 * JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/* global define */
;

(function ($) {
  'use strict';
  /*
  * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  * to work around bugs in some JS interpreters.
  */

  function safeAdd(x, y) {
    var lsw = (x & 0xffff) + (y & 0xffff);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return msw << 16 | lsw & 0xffff;
  }
  /*
  * Bitwise rotate a 32-bit number to the left.
  */


  function bitRotateLeft(num, cnt) {
    return num << cnt | num >>> 32 - cnt;
  }
  /*
  * These functions implement the four basic operations the algorithm uses.
  */


  function md5cmn(q, a, b, x, s, t) {
    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
  }

  function md5ff(a, b, c, d, x, s, t) {
    return md5cmn(b & c | ~b & d, a, b, x, s, t);
  }

  function md5gg(a, b, c, d, x, s, t) {
    return md5cmn(b & d | c & ~d, a, b, x, s, t);
  }

  function md5hh(a, b, c, d, x, s, t) {
    return md5cmn(b ^ c ^ d, a, b, x, s, t);
  }

  function md5ii(a, b, c, d, x, s, t) {
    return md5cmn(c ^ (b | ~d), a, b, x, s, t);
  }
  /*
  * Calculate the MD5 of an array of little-endian words, and a bit length.
  */


  function binlMD5(x, len) {
    /* append padding */
    x[len >> 5] |= 0x80 << len % 32;
    x[(len + 64 >>> 9 << 4) + 14] = len;
    var i;
    var olda;
    var oldb;
    var oldc;
    var oldd;
    var a = 1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d = 271733878;

    for (i = 0; i < x.length; i += 16) {
      olda = a;
      oldb = b;
      oldc = c;
      oldd = d;
      a = md5ff(a, b, c, d, x[i], 7, -680876936);
      d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
      c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
      b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
      a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
      d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
      c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
      b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
      a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
      d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
      c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
      b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
      a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
      d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
      c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
      b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
      a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
      d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
      c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
      b = md5gg(b, c, d, a, x[i], 20, -373897302);
      a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
      d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
      c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
      b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
      a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
      d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
      c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
      b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
      a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
      d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
      c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
      b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
      a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
      d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
      c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
      b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
      a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
      d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
      c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
      b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
      a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
      d = md5hh(d, a, b, c, x[i], 11, -358537222);
      c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
      b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
      a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
      d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
      c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
      b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
      a = md5ii(a, b, c, d, x[i], 6, -198630844);
      d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
      c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
      b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
      a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
      d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
      c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
      b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
      a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
      d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
      c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
      b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
      a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
      d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
      c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
      b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
      a = safeAdd(a, olda);
      b = safeAdd(b, oldb);
      c = safeAdd(c, oldc);
      d = safeAdd(d, oldd);
    }

    return [a, b, c, d];
  }
  /*
  * Convert an array of little-endian words to a string
  */


  function binl2rstr(input) {
    var i;
    var output = '';
    var length32 = input.length * 32;

    for (i = 0; i < length32; i += 8) {
      output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
    }

    return output;
  }
  /*
  * Convert a raw string to an array of little-endian words
  * Characters >255 have their high-byte silently ignored.
  */


  function rstr2binl(input) {
    var i;
    var output = [];
    output[(input.length >> 2) - 1] = undefined;

    for (i = 0; i < output.length; i += 1) {
      output[i] = 0;
    }

    var length8 = input.length * 8;

    for (i = 0; i < length8; i += 8) {
      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
    }

    return output;
  }
  /*
  * Calculate the MD5 of a raw string
  */


  function rstrMD5(s) {
    return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
  }
  /*
  * Calculate the HMAC-MD5, of a key and some data (raw strings)
  */


  function rstrHMACMD5(key, data) {
    var i;
    var bkey = rstr2binl(key);
    var ipad = [];
    var opad = [];
    var hash;
    ipad[15] = opad[15] = undefined;

    if (bkey.length > 16) {
      bkey = binlMD5(bkey, key.length * 8);
    }

    for (i = 0; i < 16; i += 1) {
      ipad[i] = bkey[i] ^ 0x36363636;
      opad[i] = bkey[i] ^ 0x5c5c5c5c;
    }

    hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
    return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
  }
  /*
  * Convert a raw string to a hex string
  */


  function rstr2hex(input) {
    var hexTab = '0123456789abcdef';
    var output = '';
    var x;
    var i;

    for (i = 0; i < input.length; i += 1) {
      x = input.charCodeAt(i);
      output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
    }

    return output;
  }
  /*
  * Encode a string as utf-8
  */


  function str2rstrUTF8(input) {
    return unescape(encodeURIComponent(input));
  }
  /*
  * Take string arguments and return either raw or hex encoded strings
  */


  function rawMD5(s) {
    return rstrMD5(str2rstrUTF8(s));
  }

  function hexMD5(s) {
    return rstr2hex(rawMD5(s));
  }

  function rawHMACMD5(k, d) {
    return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
  }

  function hexHMACMD5(k, d) {
    return rstr2hex(rawHMACMD5(k, d));
  }

  function md5(string, key, raw) {
    if (!key) {
      if (!raw) {
        return hexMD5(string);
      }

      return rawMD5(string);
    }

    if (!raw) {
      return hexHMACMD5(key, string);
    }

    return rawHMACMD5(key, string);
  }

  if (typeof define === 'function' && define.amd) {
    define(function () {
      return md5;
    });
  } else if (typeof module === 'object' && module.exports) {
    module.exports = md5;
  } else {
    $.md5 = md5;
  }
})(void 0);

cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvZ2FtZS9tZDUuanMiXSwibmFtZXMiOlsiJCIsInNhZmVBZGQiLCJ4IiwieSIsImxzdyIsIm1zdyIsImJpdFJvdGF0ZUxlZnQiLCJudW0iLCJjbnQiLCJtZDVjbW4iLCJxIiwiYSIsImIiLCJzIiwidCIsIm1kNWZmIiwiYyIsImQiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJiaW5sTUQ1IiwibGVuIiwiaSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJsZW5ndGgiLCJiaW5sMnJzdHIiLCJpbnB1dCIsIm91dHB1dCIsImxlbmd0aDMyIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicnN0cjJiaW5sIiwidW5kZWZpbmVkIiwibGVuZ3RoOCIsImNoYXJDb2RlQXQiLCJyc3RyTUQ1IiwicnN0ckhNQUNNRDUiLCJrZXkiLCJkYXRhIiwiYmtleSIsImlwYWQiLCJvcGFkIiwiaGFzaCIsImNvbmNhdCIsInJzdHIyaGV4IiwiaGV4VGFiIiwiY2hhckF0Iiwic3RyMnJzdHJVVEY4IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyYXdNRDUiLCJoZXhNRDUiLCJyYXdITUFDTUQ1IiwiayIsImhleEhNQUNNRDUiLCJtZDUiLCJzdHJpbmciLCJyYXciLCJkZWZpbmUiLCJhbWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBO0FBRUE7O0FBQUMsQ0FBQyxVQUFVQSxDQUFWLEVBQWE7QUFDYjtBQUVBOzs7OztBQUlBLFdBQVNDLE9BQVQsQ0FBa0JDLENBQWxCLEVBQXFCQyxDQUFyQixFQUF3QjtBQUN0QixRQUFJQyxHQUFHLEdBQUcsQ0FBQ0YsQ0FBQyxHQUFHLE1BQUwsS0FBZ0JDLENBQUMsR0FBRyxNQUFwQixDQUFWO0FBQ0EsUUFBSUUsR0FBRyxHQUFHLENBQUNILENBQUMsSUFBSSxFQUFOLEtBQWFDLENBQUMsSUFBSSxFQUFs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LEVBQUl4QyxDQUFKLENBQVgsQ0FBZjtBQUNEOztBQUVELFdBQVMwQyxHQUFULENBQWNDLE1BQWQsRUFBc0JuQixHQUF0QixFQUEyQm9CLEdBQTNCLEVBQWdDO0FBQzlCLFFBQUksQ0FBQ3BCLEdBQUwsRUFBVTtBQUNSLFVBQUksQ0FBQ29CLEdBQUwsRUFBVTtBQUNSLGVBQU9OLE1BQU0sQ0FBQ0ssTUFBRCxDQUFiO0FBQ0Q7O0FBQ0QsYUFBT04sTUFBTSxDQUFDTSxNQUFELENBQWI7QUFDRDs7QUFDRCxRQUFJLENBQUNDLEdBQUwsRUFBVTtBQUNSLGFBQU9ILFVBQVUsQ0FBQ2pCLEdBQUQsRUFBTW1CLE1BQU4sQ0FBakI7QUFDRDs7QUFDRCxXQUFPSixVQUFVLENBQUNmLEdBQUQsRUFBTW1CLE1BQU4sQ0FBakI7QUFDRDs7QUFFRCxNQUFJLE9BQU9FLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDOUNELElBQUFBLE1BQU0sQ0FBQyxZQUFZO0FBQ2pCLGFBQU9ILEdBQVA7QUFDRCxLQUZLLENBQU47QUFHRCxHQUpELE1BSU8sSUFBSSxPQUFPSyxNQUFQLEtBQWtCLFFBQWxCLElBQThCQSxNQUFNLENBQUNDLE9BQXpDLEVBQWtEO0FBQ3ZERCxJQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJOLEdBQWpCO0FBQ0QsR0FGTSxNQUVBO0FBQ0wzRCxJQUFBQSxDQUFDLENBQUMyRCxHQUFGLEdBQVFBLEdBQVI7QUFDRDtBQUNGLENBbFFBIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cblxuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG47KGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0J1xuXG4gIC8qXG4gICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gICovXG4gIGZ1bmN0aW9uIHNhZmVBZGQgKHgsIHkpIHtcbiAgICB2YXIgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpXG4gICAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpXG4gICAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4ZmZmZilcbiAgfVxuXG4gIC8qXG4gICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICAqL1xuICBmdW5jdGlvbiBiaXRSb3RhdGVMZWZ0IChudW0sIGNudCkge1xuICAgIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKVxuICB9XG5cbiAgLypcbiAgKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICAqL1xuICBmdW5jdGlvbiBtZDVjbW4gKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKVxuICB9XG4gIGZ1bmN0aW9uIG1kNWZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbigoYiAmIGMpIHwgKH5iICYgZCksIGEsIGIsIHgsIHMsIHQpXG4gIH1cbiAgZnVuY3Rpb24gbWQ1Z2cgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gbWQ1Y21uKChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdClcbiAgfVxuICBmdW5jdGlvbiBtZDVoaCAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KVxuICB9XG4gIGZ1bmN0aW9uIG1kNWlpIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpXG4gIH1cblxuICAvKlxuICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGguXG4gICovXG4gIGZ1bmN0aW9uIGJpbmxNRDUgKHgsIGxlbikge1xuICAgIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gICAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAobGVuICUgMzIpXG4gICAgeFsoKGxlbiArIDY0KSA+Pj4gOSA8PCA0KSArIDE0XSA9IGxlblxuXG4gICAgdmFyIGlcbiAgICB2YXIgb2xkYVxuICAgIHZhciBvbGRiXG4gICAgdmFyIG9sZGNcbiAgICB2YXIgb2xkZFxuICAgIHZhciBhID0gMTczMjU4NDE5M1xuICAgIHZhciBiID0gLTI3MTczMzg3OVxuICAgIHZhciBjID0gLTE3MzI1ODQxOTRcbiAgICB2YXIgZCA9IDI3MTczMzg3OFxuXG4gICAgZm9yIChpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICBvbGRhID0gYVxuICAgICAgb2xkYiA9IGJcbiAgICAgIG9sZGMgPSBjXG4gICAgICBvbGRkID0gZFxuXG4gICAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNilcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpXG4gICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpXG4gICAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMClcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNywgLTE3NjQxODg5NylcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpXG4gICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSlcbiAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyA3XSwgMjIsIC00NTcwNTk4MylcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNilcbiAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KVxuICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2MylcbiAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2MilcbiAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpXG4gICAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKVxuICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKVxuICAgICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpXG5cbiAgICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMClcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpXG4gICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKVxuICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKVxuICAgICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKVxuICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpXG4gICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSlcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpXG4gICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOClcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKVxuICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSlcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpXG4gICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2NylcbiAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KVxuICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3MylcbiAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNClcblxuICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KVxuICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpXG4gICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2MilcbiAgICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKVxuICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1MylcbiAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpXG4gICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpXG4gICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpXG4gICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KVxuICAgICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpXG4gICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpXG4gICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSlcbiAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApXG4gICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKVxuXG4gICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NClcbiAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpXG4gICAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpXG4gICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA2LCAxNzAwNDg1NTcxKVxuICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpXG4gICAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMV0sIDIxLCAtMjA1NDkyMjc5OSlcbiAgICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSlcbiAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpXG4gICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE1LCAtMTU2MDE5ODM4MClcbiAgICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KVxuICAgICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKVxuICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KVxuICAgICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KVxuICAgICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSlcblxuICAgICAgYSA9IHNhZmVBZGQoYSwgb2xkYSlcbiAgICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpXG4gICAgICBjID0gc2FmZUFkZChjLCBvbGRjKVxuICAgICAgZCA9IHNhZmVBZGQoZCwgb2xkZClcbiAgICB9XG4gICAgcmV0dXJuIFthLCBiLCBjLCBkXVxuICB9XG5cbiAgLypcbiAgKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmdcbiAgKi9cbiAgZnVuY3Rpb24gYmlubDJyc3RyIChpbnB1dCkge1xuICAgIHZhciBpXG4gICAgdmFyIG91dHB1dCA9ICcnXG4gICAgdmFyIGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGlucHV0W2kgPj4gNV0gPj4+IChpICUgMzIpKSAmIDB4ZmYpXG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRcbiAgfVxuXG4gIC8qXG4gICogQ29udmVydCBhIHJhdyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICAqIENoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpZ2gtYnl0ZSBzaWxlbnRseSBpZ25vcmVkLlxuICAqL1xuICBmdW5jdGlvbiByc3RyMmJpbmwgKGlucHV0KSB7XG4gICAgdmFyIGlcbiAgICB2YXIgb3V0cHV0ID0gW11cbiAgICBvdXRwdXRbKGlucHV0Lmxlbmd0aCA+PiAyKSAtIDFdID0gdW5kZWZpbmVkXG4gICAgZm9yIChpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgb3V0cHV0W2ldID0gMFxuICAgIH1cbiAgICB2YXIgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDhcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXQuY2hhckNvZGVBdChpIC8gOCkgJiAweGZmKSA8PCAoaSAlIDMyKVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0XG4gIH1cblxuICAvKlxuICAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGEgcmF3IHN0cmluZ1xuICAqL1xuICBmdW5jdGlvbiByc3RyTUQ1IChzKSB7XG4gICAgcmV0dXJuIGJpbmwycnN0cihiaW5sTUQ1KHJzdHIyYmlubChzKSwgcy5sZW5ndGggKiA4KSlcbiAgfVxuXG4gIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBITUFDLU1ENSwgb2YgYSBrZXkgYW5kIHNvbWUgZGF0YSAocmF3IHN0cmluZ3MpXG4gICovXG4gIGZ1bmN0aW9uIHJzdHJITUFDTUQ1IChrZXksIGRhdGEpIHtcbiAgICB2YXIgaVxuICAgIHZhciBia2V5ID0gcnN0cjJiaW5sKGtleSlcbiAgICB2YXIgaXBhZCA9IFtdXG4gICAgdmFyIG9wYWQgPSBbXVxuICAgIHZhciBoYXNoXG4gICAgaXBhZFsxNV0gPSBvcGFkWzE1XSA9IHVuZGVmaW5lZFxuICAgIGlmIChia2V5Lmxlbmd0aCA+IDE2KSB7XG4gICAgICBia2V5ID0gYmlubE1ENShia2V5LCBrZXkubGVuZ3RoICogOClcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDEpIHtcbiAgICAgIGlwYWRbaV0gPSBia2V5W2ldIF4gMHgzNjM2MzYzNlxuICAgICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVjNWM1YzVjXG4gICAgfVxuICAgIGhhc2ggPSBiaW5sTUQ1KGlwYWQuY29uY2F0KHJzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogOClcbiAgICByZXR1cm4gYmlubDJyc3RyKGJpbmxNRDUob3BhZC5jb25jYXQoaGFzaCksIDUxMiArIDEyOCkpXG4gIH1cblxuICAvKlxuICAqIENvbnZlcnQgYSByYXcgc3RyaW5nIHRvIGEgaGV4IHN0cmluZ1xuICAqL1xuICBmdW5jdGlvbiByc3RyMmhleCAoaW5wdXQpIHtcbiAgICB2YXIgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnXG4gICAgdmFyIG91dHB1dCA9ICcnXG4gICAgdmFyIHhcbiAgICB2YXIgaVxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgeCA9IGlucHV0LmNoYXJDb2RlQXQoaSlcbiAgICAgIG91dHB1dCArPSBoZXhUYWIuY2hhckF0KCh4ID4+PiA0KSAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZilcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dFxuICB9XG5cbiAgLypcbiAgKiBFbmNvZGUgYSBzdHJpbmcgYXMgdXRmLThcbiAgKi9cbiAgZnVuY3Rpb24gc3RyMnJzdHJVVEY4IChpbnB1dCkge1xuICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpKVxuICB9XG5cbiAgLypcbiAgKiBUYWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgcmF3IG9yIGhleCBlbmNvZGVkIHN0cmluZ3NcbiAgKi9cbiAgZnVuY3Rpb24gcmF3TUQ1IChzKSB7XG4gICAgcmV0dXJuIHJzdHJNRDUoc3RyMnJzdHJVVEY4KHMpKVxuICB9XG4gIGZ1bmN0aW9uIGhleE1ENSAocykge1xuICAgIHJldHVybiByc3RyMmhleChyYXdNRDUocykpXG4gIH1cbiAgZnVuY3Rpb24gcmF3SE1BQ01ENSAoaywgZCkge1xuICAgIHJldHVybiByc3RySE1BQ01ENShzdHIycnN0clVURjgoayksIHN0cjJyc3RyVVRGOChkKSlcbiAgfVxuICBmdW5jdGlvbiBoZXhITUFDTUQ1IChrLCBkKSB7XG4gICAgcmV0dXJuIHJzdHIyaGV4KHJhd0hNQUNNRDUoaywgZCkpXG4gIH1cblxuICBmdW5jdGlvbiBtZDUgKHN0cmluZywga2V5LCByYXcpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgcmV0dXJuIGhleE1ENShzdHJpbmcpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3TUQ1KHN0cmluZylcbiAgICB9XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHJldHVybiBoZXhITUFDTUQ1KGtleSwgc3RyaW5nKVxuICAgIH1cbiAgICByZXR1cm4gcmF3SE1BQ01ENShrZXksIHN0cmluZylcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1kNVxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IG1kNVxuICB9IGVsc2Uge1xuICAgICQubWQ1ID0gbWQ1XG4gIH1cbn0pKHRoaXMpXG4iXX0=