<!DOCTYPE html>
<html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="keywords" content="Wolfram, Wathematica, SystemModeler, WolframPlayer, CDFPlayer, keygen, crack, hack">
        <title>Универсальный генератор паролей для всех продуктов Wolfram</title>
        <script>
            'use strict';

            var hashDescription = {
                0x5B29: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x6587: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x7F8C: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x3575: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x541A: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x452D: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x3FD1: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x140A: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x29A5: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x72A4: 'MathLM начиная с версии 10.0'                                                                                 ,

                0x15BF: 'System Modeler 4.0'                                                                                           ,
                0x6897: 'System Modeler 4.1, подходит для System Modeler 4.0 - 4.1'                                                    ,
                0x2F33: 'System Modeler 4.2, подходит для System Modeler 4.0 - 4.2'                                                    ,
                0x72C4: 'System Modeler 4.3, подходит для System Modeler 4.0 - 4.3'                                                    ,
                0x8330: 'System Modeler 5.0, подходит для System Modeler 4.0 - 5.0'                                                    ,
                0x81DD: 'System Modeler 5.1, подходит для System Modeler 4.0 - 5.1'                                                    ,
                0x47C5: 'System Modeler 12.0, подходит для System Modeler 4.0 - 12.0'                                                  ,
                0xB4D3: 'System Modeler 12.1, подходит для System Modeler 4.0 - 12.1'                                                  ,
                0xAB0B: 'System Modeler 12.2, подходит для System Modeler 4.0 - 12.2'                                                  ,
                0x6188: 'System Modeler 12.3, подходит для System Modeler 4.0 - 12.3'                                                  ,
                0xBF47: 'System Modeler 13.0, подходит для System Modeler 4.3 - 13.0'                                                  ,
                0x1330: 'System Modeler 13.1, подходит для System Modeler 4.3 - 13.1'                                                  ,
                0xF536: 'System Modeler 13.2, подходит для System Modeler 4.3 - 13.2'                                                  ,
                0xA5CE: 'System Modeler 13.3, подходит для System Modeler 4.3 - 13.3'                                                  ,
                0x755E: 'System Modeler 14.0, подходит для System Modeler 4.3 - 14.0'                                                  ,
                0x1361: 'System Modeler 14.1, подходит для System Modeler 4.3 - 14.1'                                                  ,

                0xDA5E: 'Mathematica 10.0'                                                                                             ,
                0xC1AE: 'Mathematica 10.1, подходит для Mathematica 10.0 - 10.1'                                                       ,
                0xE3B7: 'Mathematica 10.2, подходит для Mathematica 10.0 - 10.2'                                                       ,
                0x1764E:'Официально этот хэш не использовался, для Mathematica 10.0 - 10.2, но не работает'                            ,
                0x80B9: 'Mathematica 10.3, подходит для Mathematica 10.0 - 10.3'                                                       ,
                0x5750: 'Mathematica 10.4, подходит для Mathematica 10.0 - 10.4'                                                       ,
                0x14411:'Официально этот хэш не использовался, для Mathematica 10.0 - 10.4, но не работает'                            ,
                0x25DB: 'Mathematica 11.0, подходит для Mathematica 10.0 - 11.0'                                                       ,
                0x42DD: 'Mathematica 11.1, подходит для Mathematica 10.0 - 11.1'                                                       ,
                0x6A91: 'Mathematica 11.2, подходит для Mathematica 10.0 - 11.2'                                                       ,
                0x29F8: 'Mathematica 11.3, подходит для Mathematica 10.0 - 11.3'                                                       ,
                0xA68B: 'Mathematica 12.0, подходит для Mathematica 10.0 - 12.0'                                                       ,
                0xE4A8: 'Mathematica 12.1, подходит для Mathematica 10.0 - 12.1'                                                       ,
                0xA439: 'Официально этот хэш не использовался, подходит для Mathematica 10.0 - 12.0'                                   ,
                0x2FDB: 'Mathematica 12.2, подходит для Mathematica 10.2 - 12.2'                                                       ,
                0xD227: 'Mathematica 12.3, подходит для Mathematica 10.2 - 12.3'                                                       ,
                0xDB75: 'Mathematica 13.0, подходит для Mathematica 10.2 - 13.0'                                                       ,
                0xEE71: 'Mathematica 13.1, подходит для Mathematica 10.2 - 13.1'                                                       ,
                0x29C2: 'Mathematica 13.2, подходит для Mathematica 10.2 - 13.2'                                                       ,
                0x44F1: 'Mathematica 13.3, подходит для Mathematica 10.2 - 13.3'                                                       ,
                0x8E3C: 'Mathematica 14.0, подходит для Mathematica 12.0 - 14.0'                                                       ,
                0x60F0: 'Mathematica 14.1, подходит для Mathematica 12.0 - 14.1'                                                       ,

                0xEEFE: 'Mathematica и System Modeler 14.2(?), подходит для Mathematica 14.1 - 14.2(?) и System Modeler 4.3 - 14.2(?)' ,
                0x7C91: 'Mathematica и System Modeler 14.3(?), подходит для Mathematica 14.1 - 14.3(?) и System Modeler 4.3 - 14.3(?)' ,
                0x5770: 'Mathematica и System Modeler 15.0(?), подходит для Mathematica 14.1 - 15.0(?) и System Modeler 4.3 - 15.0(?)' ,
                0x7C53: 'Mathematica и System Modeler 15.1(?), подходит для Mathematica 14.1 - 15.1(?) и System Modeler 13.0 - 15.1(?)',
                0x64EC: 'Mathematica и System Modeler 15.2(?), подходит для Mathematica 14.1 - 15.2(?) и System Modeler 13.0 - 15.2(?)',
                0x73EE: 'Mathematica и System Modeler 15.3(?), подходит для Mathematica 14.1 - 15.3(?) и System Modeler 13.0 - 15.3(?)',
                0x4209: 'Mathematica и System Modeler 16.0(?), подходит для Mathematica 14.1 - 16.0(?) и System Modeler 13.0 - 16.0(?)',
                0x8C72: 'Mathematica и System Modeler 16.1(?), подходит для Mathematica 14.1 - 16.1(?) и System Modeler 13.0 - 16.1(?)',
                                                                                                                                     
                0xABEB: 'Mathematica и System Modeler 16.2(?), подходит для Mathematica 12.0 - 16.2(?) и System Modeler 14.1 - 16.2(?)',
                0x8250: 'Mathematica и System Modeler 16.3(?), подходит для Mathematica 12.0 - 16.3(?) и System Modeler 14.1 - 16.3(?)',
                0x8C68: 'Mathematica и System Modeler 17.0(?), подходит для Mathematica 12.0 - 17.0(?) и System Modeler 14.1 - 17.0(?)',
                0xE756: 'Mathematica и System Modeler 17.1(?), подходит для Mathematica 12.0 - 17.1(?) и System Modeler 14.1 - 17.1(?)',
                0xB4D0: 'Mathematica и System Modeler 17.2(?), подходит для Mathematica 13.0 - 17.2(?) и System Modeler 14.1 - 17.2(?)',
                0xCD2D: 'Mathematica и System Modeler 17.3(?), подходит для Mathematica 13.0 - 17.3(?) и System Modeler 14.1 - 17.3(?)',
                0x22DD: 'Mathematica и System Modeler 18.0(?), подходит для Mathematica 13.0 - 18.0(?) и System Modeler 14.1 - 18.0(?)',
                0x66C0: 'Mathematica и System Modeler 18.1(?), подходит для Mathematica 13.0 - 18.1(?) и System Modeler 14.1 - 18.1(?)',
                0xD54F: 'Mathematica и System Modeler 18.2(?), подходит для Mathematica 13.0 - 18.2(?) и System Modeler 14.1 - 18.2(?)',
                0xB013: 'Mathematica и System Modeler 18.3(?), подходит для Mathematica 13.0 - 18.3(?) и System Modeler 14.1 - 18.3(?)',
                0x5417: 'Mathematica и System Modeler 19.0(?), подходит для Mathematica 13.0 - 19.0(?) и System Modeler 14.1 - 19.0(?)',
                                                                                                                                     
                0xD1CF: 'Mathematica и System Modeler 19.1(?), подходит для Mathematica 14.1 - 19.1(?) и System Modeler 14.1 - 19.1(?)'
            };


            var defaultActivationKey = '3893-9258-K6XJLE';

            var licenseType                              ;

            function genKeyValStr(mathID, activationKey=defaultActivationKey, maxLicenseProcessesSubprocesses="", licenseType="", licenseExpirationDate="", licenseClass="") {
                var keyValStr = "";
                if (typeof mathID !== "undefined" && mathID.length != 0)
                {
                    keyValStr = mathID;
                    if (typeof licenseExpirationDate           !== "undefined" && licenseExpirationDate          .length != 0) {keyValStr += "@" + licenseExpirationDate          };
                    if (typeof maxLicenseProcessesSubprocesses !== "undefined" && maxLicenseProcessesSubprocesses.length != 0) {keyValStr += ":" + maxLicenseProcessesSubprocesses};
                    if (typeof licenseClass                    !== "undefined" && licenseClass                   .length != 0) {keyValStr += "*" + licenseClass                   };
                    if (typeof licenseType                     !== "undefined" && licenseType                    .length != 0) {keyValStr += "$" + licenseType                    };
                    if (typeof activationKey                   !== "undefined" && activationKey                  .length != 0) {keyValStr += "&" + activationKey                  }
                    else                                                                                                       {keyValStr += "&" + defaultActivationKey           };

                };
                return keyValStr;
            };

            function keyValStr2mathID(keyValStr) {
                var mathID = "";
                var index0 = 0;
                var index1 = keyValStr.indexOf("@");
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");

                if (keyValStr.startsWith('We Are Everywhere!')) {
                    index0 = 18;
                };
                if        (index1 >= 0) {
                    mathID = keyValStr.substring(index0, index1);
                } else if (index2 >= 0) {
                    mathID = keyValStr.substring(index0, index2);
                } else if (index3 >= 0) {
                    mathID = keyValStr.substring(index0, index3);
                } else if (index4 >= 0) {
                    mathID = keyValStr.substring(index0, index4);
                } else if (index5 >= 0) {
                    mathID = keyValStr.substring(index0, index5);
                } else {
                    mathID = keyValStr.substring(index0);
                };
                return mathID;
            };

            function keyValStr2licenseExpirationDate(keyValStr) {
                var licenseExpirationDate = "";
                var index1 = keyValStr.indexOf("@");
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index1 >= 0) {
                    if        (index2 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index2);
                    } else if (index3 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index3);
                    } else if (index4 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index4);
                    } else if (index5 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index5);
                    };
                };
                return licenseExpirationDate;
            };

            function keyValStr2maxLicenseProcessesSubprocesses(keyValStr) {
                var maxLicenseProcessesSubprocesses = "";
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index2 >= 0) {
                    if        (index3 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index3);
                    } else if (index4 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index4);
                    } else if (index5 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index5);
                    };
                };
                return maxLicenseProcessesSubprocesses;
            };

            function keyValStr2licenseClass(keyValStr) {
                var licenseClass = "";
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index3 >= 0) {
                    if        (index4 >= 0) {
                        licenseClass = keyValStr.substring(index3 + 1, index4);
                    } else if (index5 >= 0) {
                        licenseClass = keyValStr.substring(index3 + 1, index5);
                    };
                };
                return licenseClass;
            };

            function keyValStr2licenseType(keyValStr) {
                var licenseType = "";
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index4 >= 0) {
                    if        (index5 >= 0) {
                        licenseType = keyValStr.substring(index4 + 1, index5);
                    };
                };
                return licenseType;
            };

            function keyValStr2ActivationKey(keyValStr) {
                var activationKey = "";
                var index5 = keyValStr.indexOf("&");
                if (index5 >= 0) {
                    activationKey = keyValStr.substring(index5 + 1);
                };
                return activationKey;
            };

            function f2(n, byte, c) {
                for (var bitIndex = 7; bitIndex >= 0; bitIndex--) {
                    var bit = (byte >> bitIndex) & 1;
                    var temp = (n << 1) + bit;
                    if (n & 0x8000) {
                        temp ^= c;
                    };
                    n = temp;
                };

                return n;
            };

            // inverse of f2: testSalt(f2(x, y, c), y, c) == x
            function testSalt(n, byte, c) {
                for (var bitIndex = 0; bitIndex <= 7; bitIndex += 1) {
                    var bit = (byte >> bitIndex) & 1;
                    if (bit + ((n - bit) & ~1) == n) {
                        n = (n - bit) >> 1;
                    } else {
                        n = ((c - bit) ^ n) >> 1;
                    };
                };

                return n;
            };

            function genPassword(keyValStr, salt) {
                var licenseExpirationDate           = keyValStr2licenseExpirationDate          (keyValStr);
                var maxLicenseProcessesSubprocesses = keyValStr2maxLicenseProcessesSubprocesses(keyValStr);
                var licenseClass                    = keyValStr2licenseClass                   (keyValStr);
                var licenseType                     = keyValStr2licenseType                    (keyValStr);

                salt = parseInt(salt);
                var uuid = keyValStr.split('').map(function(x){return x.charCodeAt()});
                var salt1 = salt;
                for (var byteIndex = uuid.length - 1; byteIndex >= 0; byteIndex -= 1) {
                    salt1 = testSalt(salt1, uuid[byteIndex], 0x105C3);
                };

/*
                var offset1 = 0;
                while (testSalt(testSalt(salt1, offset1 & 0xFF, 0x105C3), offset1 >> 8, 0x105C3) !== 0xA5B6) {
                    offset1 ++;
                    if (offset1 >= 0xFFFF) {
                        return '';
                    }
                }
*/
                salt1 = salt1 ^ 0xCEDF;

                salt1 = Math.trunc(((salt1 + 0x72FA) & 0xFFFF) * 99999 / 0xFFFF);
                var offset1 = '0000' + salt1;
                offset1 = offset1.substring(offset1.length - 5);
                var salt2 = parseInt(offset1.substring(0, 2) + offset1.substring(3, 5) + offset1.substring(2, 3));
                salt2 = Math.trunc((salt2 / 99999.0) * 0xFFFF, 10) + 1;
                salt2 = testSalt(testSalt(0, salt2 & 0xFF, 0x1064B), salt2 >> 8, 0x1064B);
                for (var i = uuid.length - 1; i >= 0; i -= 1) {
                    salt2 = testSalt(salt2, uuid[i], 0x1064B);
                };

/*
                var offset2 = 0;
                while(testSalt(testSalt(salt2, offset2 & 0xFF, 0x1064B),
                                offset2 >> 8, 0x1064B) !== 0xA5B6) {
                    offset2 += 1;
                    if (offset2 >= 0xFFFF) { return ''; }
                }
*/
                salt2 = salt2 ^ 0xEF22;

                salt2 = Math.trunc((salt2 & 0xFFFF) * 99999 / 0xFFFF);
                var offset2 = '0000' + salt2;
                offset2 = offset2.substring(offset2.length - 5);
                var password = [
                    offset2.charAt(3),
                    offset1.charAt(3),
                    offset1.charAt(1),
                    offset1.charAt(0),
                    '-',
                    offset2.charAt(4),
                    offset1.charAt(2),
                    offset2.charAt(0),
                    '-',
                    offset2.charAt(2),
                    offset1.charAt(4),
                    offset2.charAt(1)
                ].join('');
                if ((maxLicenseProcessesSubprocesses.length > 0) || (licenseType.length > 0) || (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + maxLicenseProcessesSubprocesses};
                if (                                                (licenseType.length > 0) || (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + licenseType                    };
                if (                                                                            (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + licenseExpirationDate          };
                if                                                                                                                    (licenseClass.length > 0)  {password += ":" + licenseClass                   };
                return password;
            };

            function password2Hash(mathID, activationKey, password) {
                var parts = password.split(":");
                while (parts.length < 5) {
                    parts.push("");
                };
                var maxLicenseProcessesSubprocesses = parts[1];
                var licenseType                     = parts[2];
                var licenseExpirationDate           = parts[3];
                var licenseClass                    = parts[4];

                var keyValStr = '';
                if (licenseClass) {
                    keyValStr = 'We Are Everywhere!';
                };
                keyValStr += genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);

                var uuid = keyValStr.split('').map(function(x){return x.charCodeAt()});

                var offset1 = password.charAt( 3) + password.charAt( 2) + password.charAt( 6) + password.charAt( 1) + password.charAt(10);
                var offset2 = password.charAt( 7) + password.charAt(11) + password.charAt( 9) + password.charAt( 0) + password.charAt( 5);
                var salt1 = ((Math.ceil((Number(offset1) * 0xFFFF) / 99999) - 0x72FA) & 0xFFFF) ^ 0xCEDF;
                var salt2 = Math.ceil((Number(offset2) * 0xFFFF) / 99999) ^ 0xEF22;

                for (var byteIndex = 0; byteIndex <= uuid.length - 1; byteIndex += 1) {
                    salt2 = f2(salt2, uuid[byteIndex], 0x1064B);
                };

                var salt1_2;
                salt1_2 = parseInt(offset1.substring(0, 2) + offset1.substring(3, 5) + offset1.substring(2, 3));
                salt1_2 = Math.trunc((salt1_2 / 99999.0) * 0xFFFF, 10) + 1;

                var b1 = f2(salt2, salt1_2 >>> 8 , 0x1064B);  // 0x1064B = 67147
                var b3 = f2(b1   , salt1_2 & 0xFF, 0x1064B);  // 0x1064B = 67147

                for (var byteIndex = 0; byteIndex <= uuid.length - 1; byteIndex += 1) {
                    salt1 = f2(salt1, uuid[byteIndex], 0x105C3);
                };

                if (b3 === 0) {
                    return salt1;
                } else {
                    return null;
                };
            };

            function printPass(documentTag, outputInnerHTML, passwordText) {
                var outputMathLMEl;
                var passwordMathLMEl;
                var passwordInnerCodeMathLMEl;

                outputMathLMEl = document.querySelector(documentTag);
                outputMathLMEl.innerHTML = outputInnerHTML;
                outputMathLMEl.append(document.createElement("br"));
                passwordMathLMEl = document.createElement("pre");
                passwordInnerCodeMathLMEl = document.createElement("code");
                passwordMathLMEl.append(passwordInnerCodeMathLMEl);
                passwordInnerCodeMathLMEl.innerText = passwordText;
                outputMathLMEl.append(passwordMathLMEl);
            };

            function checkboxLicenseTypeRead() {
                var LicenseTypeNumber;
                var result;
                LicenseTypeNumber = 0;

                if (document.getElementById("checkbox-license-type-bit-00").checked) {LicenseTypeNumber |= (1 <<  0)};
                if (document.getElementById("checkbox-license-type-bit-01").checked) {LicenseTypeNumber |= (1 <<  1)};
                if (document.getElementById("checkbox-license-type-bit-02").checked) {LicenseTypeNumber |= (1 <<  2)};
                if (document.getElementById("checkbox-license-type-bit-03").checked) {LicenseTypeNumber |= (1 <<  3)};
                if (document.getElementById("checkbox-license-type-bit-04").checked) {LicenseTypeNumber |= (1 <<  4)};
                if (document.getElementById("checkbox-license-type-bit-05").checked) {LicenseTypeNumber |= (1 <<  5)};
                if (document.getElementById("checkbox-license-type-bit-06").checked) {LicenseTypeNumber |= (1 <<  6)};
                if (document.getElementById("checkbox-license-type-bit-07").checked) {LicenseTypeNumber |= (1 <<  7)};
                if (document.getElementById("checkbox-license-type-bit-08").checked) {LicenseTypeNumber |= (1 <<  8)};
                if (document.getElementById("checkbox-license-type-bit-09").checked) {LicenseTypeNumber |= (1 <<  9)};
                if (document.getElementById("checkbox-license-type-bit-10").checked) {LicenseTypeNumber |= (1 << 10)};
                if (document.getElementById("checkbox-license-type-bit-11").checked) {LicenseTypeNumber |= (1 << 11)};
                if (document.getElementById("checkbox-license-type-bit-12").checked) {LicenseTypeNumber |= (1 << 12)};
                if (document.getElementById("checkbox-license-type-bit-13").checked) {LicenseTypeNumber |= (1 << 13)};
                if (document.getElementById("checkbox-license-type-bit-14").checked) {LicenseTypeNumber |= (1 << 14)};
                if (document.getElementById("checkbox-license-type-bit-15").checked) {LicenseTypeNumber |= (1 << 15)};
                if (document.getElementById("checkbox-license-type-bit-16").checked) {LicenseTypeNumber |= (1 << 16)};
                if (document.getElementById("checkbox-license-type-bit-17").checked) {LicenseTypeNumber |= (1 << 17)};
                if (document.getElementById("checkbox-license-type-bit-18").checked) {LicenseTypeNumber |= (1 << 18)};
                if (document.getElementById("checkbox-license-type-bit-19").checked) {LicenseTypeNumber |= (1 << 19)};
                if (document.getElementById("checkbox-license-type-bit-20").checked) {LicenseTypeNumber |= (1 << 20)};
                if (document.getElementById("checkbox-license-type-bit-21").checked) {LicenseTypeNumber |= (1 << 21)};
                if (document.getElementById("checkbox-license-type-bit-22").checked) {LicenseTypeNumber |= (1 << 22)};
                if (document.getElementById("checkbox-license-type-bit-23").checked) {LicenseTypeNumber |= (1 << 23)};
                if (document.getElementById("checkbox-license-type-bit-24").checked) {LicenseTypeNumber |= (1 << 24)};
                if (document.getElementById("checkbox-license-type-bit-25").checked) {LicenseTypeNumber |= (1 << 25)};
                if (document.getElementById("checkbox-license-type-bit-26").checked) {LicenseTypeNumber |= (1 << 26)};
                if (document.getElementById("checkbox-license-type-bit-27").checked) {LicenseTypeNumber |= (1 << 27)};
                if (document.getElementById("checkbox-license-type-bit-28").checked) {LicenseTypeNumber |= (1 << 28)};
                if (document.getElementById("checkbox-license-type-bit-29").checked) {LicenseTypeNumber |= (1 << 29)};
                if (document.getElementById("checkbox-license-type-bit-30").checked) {LicenseTypeNumber |= (1 << 30)};
                if (document.getElementById("checkbox-license-type-bit-31").checked) {LicenseTypeNumber |= (1 << 31)};

                LicenseTypeNumber = LicenseTypeNumber >>> 0;  // Чтобы преобразовать в 32-битное беззнаковое представление

                if (LicenseTypeNumber == 0) {result = "";}
                else                        {result = LicenseTypeNumber.toString(16).toUpperCase()};

                return result;
            };

            function inputMathidChange(value) {
                var mathID                = value;

                // Извлекаем первые два символа
                var firstTwo = mathID.slice(0, 2);
                
                // Регулярное выражение для проверки формата MachineID
                var regex = /^(\d{4})-(\d{5})-(\d{5})$/;

                // Проверка формата строки
                var match = mathID.match(regex);

                // Проверяем, что это число и не является NaN
                if (!isNaN(firstTwo) && firstTwo.length === 2) {
                    var machineType = parseInt(firstTwo, 10);
                    switch (machineType) {
                        case 31:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=31 - MacOSX-ARM64) ';
                            break;

                        case 33:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=33 - Windows-ARM64) ';
                            break;

                        case 51:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=51 - MacOSX-x86-64) ';
                            break;

                        case 58:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=58 - Windows-ARM) ';
                            break;

                        case 61:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=61 - Windows) ';
                            break;

                        case 62:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=62 - Windows-x86-64) ';
                            break;

                        case 65:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=65 - Linux) ';
                            break;

                        default:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): ';
                            break;
                    };
                } else {
                    document.getElementById("mathid-label").textContent = ' MachineID (MathID): ';
                };

                if (match) {
                    // Преобразование отдельных частей строки в числа
                    var A = parseInt(match[1].substring(0, 2));   // Первое число (dd)
                    var B = parseInt(match[1].substring(2) + match[2] + match[3].substring(0, 3)); // Второе число (ddddddddd)
                    var C = parseInt(match[3].substring(3));   // Третье число (dd)

                    // Вычисление выражения (((B >> 2) & 0x3FFFFFFF) + 43 * A + 29 * (B & 3)) % 97
                    var calculatedC = ((B >>> 2) + 43 * A + 29 * (B & 3)) % 97;

                    if (mathID != "") {
                        if (match != null) {
                            if (B <= 4294967295  ) {
                                document.getElementById("mathid-label").textContent += ' (UniqueNumber='+B+')';

                                if (calculatedC == C) {
                                    document.getElementById("mathid-label").textContent += ' (checksum='+C+')';
                                } else {
                                    document.getElementById("mathid-label").textContent += ' (checksum='+C+', а ожидалось '+calculatedC+')';
                                };
                            } else {
                                document.getElementById("mathid-label").textContent += ' (UniqueNumber='+B+' превышает максимально возможное значение 4294967295)';
                            };
                        };
                    };
                };
            };

            function checkboxLicenseTypeClick() {
                var licenseType = checkboxLicenseTypeRead();
                document.getElementById("div-license-type").textContent = " Тип лицензии (License Type): " + licenseType;
            };

            function checkPass(event) {
                event.preventDefault();

                var mathID        = document.querySelector('#mathid'        ).value;
                var activationKey = document.querySelector('#activation-key').value;
                var password      = document.querySelector('#password-str'  ).value;
                var hash          = password2Hash(mathID, activationKey, password) ;

                var outputEl      = document.querySelector('#output');

                var outputDivEl;
    
                if (hash != null) {  // не null и не undefined
                    var parts = password.split(":");
                    while (parts.length < 5) {
                        parts.push("");
                    };
                    var maxLicenseProcessesSubprocesses = parts[1];
                    var licenseType                     = parts[2];
                    var licenseExpirationDate           = parts[3];
                    var licenseClass                    = parts[4];
                    var hashDescr;
                    var keyValStr = '';
                    if (licenseClass) {
                        keyValStr = 'We Are Everywhere!';
                    };
                    keyValStr += genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);

                    outputEl.innerHTML = 'Пароль правильный.';

                    if (maxLicenseProcessesSubprocesses) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Максимальное количество процессов и субпроцессов (Max License Processes и Max License Subprocesses):<br><pre style="overflow: auto;"><code>' + maxLicenseProcessesSubprocesses + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    if (licenseType) {
                        var str = 'Тип лицензии (License Type):<pre style="overflow: auto;"><code>' + licenseType.toString(16).toUpperCase() + '</code></pre>';
                        str += 'В типе лицензии установлены следующие биты:<br><pre style="overflow: auto;"><code>';
                        if (Number('0x' + licenseType) & (1 <<  0)) {
                            str += 'бит &ensp;0, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  1)) {
                            str += 'бит &ensp;1, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2 &mdash; редакция Product Trial<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  2)) {
                            str += 'бит &ensp;2, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4 &mdash; редакция Student Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  3)) {
                            str += 'бит &ensp;3, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8 &mdash; редакция Site License<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  4)) {
                            str += 'бит &ensp;4, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10 &mdash; Player<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  5)) {
                            str += 'бит &ensp;5, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20 &mdash; продукт Wolfram Player<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  6)) {
                            str += 'бит &ensp;6, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40 &mdash; продукт Wolfram Player Pro<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  7)) {
                            str += 'бит &ensp;7, маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;80 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  8)) {
                            str += 'бит &ensp;8, маска &ensp;&ensp;&ensp;&ensp;&ensp;100 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  9)) {
                            str += 'бит &ensp;9, маска &ensp;&ensp;&ensp;&ensp;&ensp;200 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 10)) {
                            str += 'бит 10, маска &ensp;&ensp;&ensp;&ensp;&ensp;400 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 11)) {
                            str += 'бит 11, маска &ensp;&ensp;&ensp;&ensp;&ensp;800 &mdash; редакция Home Edition<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 12)) {
                            str += 'бит 12, маска &ensp;&ensp;&ensp;&ensp;1000 &mdash; редакция Enterprise Edition<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 13)) {
                            str += 'бит 13, маска &ensp;&ensp;&ensp;&ensp;2000 &mdash; фича EnterpriseSigning<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 14)) {
                            str += 'бит 14, маска &ensp;&ensp;&ensp;&ensp;4000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 15)) {
                            str += 'бит 15, маска &ensp;&ensp;&ensp;&ensp;8000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 16)) {
                            str += 'бит 16, маска &ensp;&ensp;&ensp;10000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 17)) {
                            str += 'бит 17, маска &ensp;&ensp;&ensp;20000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 18)) {
                            str += 'бит 18, маска &ensp;&ensp;&ensp;40000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 19)) {
                            str += 'бит 19, маска &ensp;&ensp;&ensp;80000 &mdash; фича AltExpirationPolicy<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 20)) {
                            str += 'бит 20, маска &ensp;&ensp;100000 &mdash; продукт Wolfram|Alpha Notebook Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 21)) {
                            str += 'бит 21, маска &ensp;&ensp;200000 &mdash; продукт Wolfram|One<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 22)) {
                            str += 'бит 22, маска &ensp;&ensp;400000 &mdash; продукт Wolfram Finance Platform<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 23)) {
                            str += 'бит 23, маска &ensp;&ensp;800000 &mdash; продукт Mathematica<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 24)) {
                            str += 'бит 24, маска &ensp;1000000 &mdash; продукт Wolfram Programming Lab<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 25)) {
                            str += 'бит 25, маска &ensp;2000000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 26)) {
                            str += 'бит 26, маска &ensp;4000000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 27)) {
                            str += 'бит 27, маска &ensp;8000000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 28)) {
                            str += 'бит 28, маска 10000000 &mdash; неизвестно<br>';                
                        };                                
                        if (Number('0x' + licenseType) & (1 << 29)) {
                            str += 'бит 29, маска 20000000 &mdash; фича AutoRenewingSubscription<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 30)) {
                            str += 'бит 30, маска 40000000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 31)) {
                            str += 'бит 31, маска 80000000 &mdash; неизвестно<br>';
                        };

                        str += '</code></pre>';

                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = str;
                        outputEl.append(outputDivEl);
                    };

                    if (licenseExpirationDate) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Дата истечения срока действия лицензии (License Expiration Date) в формате YYYYMMDD:<br><pre style="overflow: auto;"><code>' + licenseExpirationDate + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    if (licenseClass) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Сетевая лицензия (для MathLM). Класс лицензии (License Class):<br><pre style="overflow: auto;"><code>' + licenseClass + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    outputDivEl = document.createElement("div");
                    outputDivEl.innerHTML = 'Строка для генерации пароля:<br><pre style="overflow: auto;"><code>' + keyValStr + '</code></pre>';
                    outputEl.append(outputDivEl);

                    outputDivEl = document.createElement("div");
                    hashDescr = hashDescription[hash];
                    if (!(typeof hashDescr === "string" && hashDescr.length > 0)) {
                        hashDescr = 'Неизвестный хэш';
                    };
                    outputDivEl.innerHTML = 'Хэш:<br><pre style="overflow: auto;"><code>0x' + hash.toString(16).toUpperCase() + ' = ' + hash + '<br>' + hashDescr + '</code></pre>';
                    outputEl.append(outputDivEl);
                } else {  // Плохой пароль (password).
                    outputEl.innerHTML = 'Плохой пароль (password).';
                };

            };  // function checkPass(event)

            function genPass(event) {
                event.preventDefault();

                var formEl = document.querySelector('#form');
                if(formEl.reportValidity && !formEl.reportValidity()) { return; }

                var weAreEverywhere                 = document.querySelector('#we-are-everywhere'                 ).checked;
                var mathID                          = document.querySelector('#mathid'                            ).value  ;
                var activationKey                   = document.querySelector('#activation-key'                    ).value  ;
                var maxLicenseProcessesSubprocesses = document.querySelector('#max-license-processes-subprocesses').value  ;
                //var licenseType                     = document.querySelector('#license-type'                      ).value  ;
                var licenseType                     = checkboxLicenseTypeRead();
                var licenseExpirationDate           = document.querySelector('#license-expiration-date'           ).value  ;
                var licenseClass                    = document.querySelector('#license-class'                     ).value  ;
                var keyValStr                       = document.querySelector('#key-val-str'                       ).value  ;
                var salt                            = document.querySelector('#salt'                              ).value  ;
                var password                        = ""                                                                   ;

                if ((keyValStr == "") && (mathID == "")) {
                    alert("Укажите Machine ID (Math ID) или строку для генерации пароля");
                } else if ((keyValStr == "") && !(mathID == "") &&  (weAreEverywhere == true) &&  (licenseClass == "")) {
                    alert("Снимите флажок \"We Are Everywhere!\" или укажите класс лицензии (License Class) или укажите строку для генерации пароля")
                } else if ((keyValStr == "") && !(mathID == "") && !(weAreEverywhere == true) && !(licenseClass == "")) {
                    alert("Установите флажок \"We Are Everywhere!\" или очистите поле класса лицензии (License Class) или укажите строку для генерации пароля")
                } else {
                    if (keyValStr == "") {
                        if (weAreEverywhere == true) {
                          keyValStr = 'We Are Everywhere!' + genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                        } else {
                          keyValStr =                        genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                        };
                    };
                    password = genPassword(keyValStr, salt);

                    printPass(
                        '#output',
                        'Пароль (password) для строки<br>\"' + keyValStr + '\":',
                        password
                    );
                };
            };  // function genPass(event)

            // При загрузке страницы
            document.addEventListener("DOMContentLoaded", function() {
                licenseType          = checkboxLicenseTypeRead();
                document.getElementById("div-license-type").textContent = " Тип лицензии (License Type): " + licenseType;
            });
        </script>
        <style>
            /**
             * Forced light theme version
             */

            :root {
              --background-body: #fff;
              --background: #efefef;
              --background-alt: #f7f7f7;
              --selection: #9e9e9e;
              --text-main: #363636;
              --text-bright: #000;
              --text-muted: #70777f;
              --links: #0076d1;
              --focus: #0096bfab;
              --border: #dbdbdb;
              --code: #000;
              --animation-duration: 0.1s;
              --button-hover: #ddd;
              --scrollbar-thumb: rgb(213, 213, 213);
              --scrollbar-thumb-hover: rgb(196, 196, 196);
              --form-placeholder: #949494;
              --form-text: #000;
              --variable: #39a33c;
              --highlight: #ff0;
              --select-arrow: url("data:image/svg+xml;charset=utf-8,%3C?xml version='1.0' encoding='utf-8'?%3E %3Csvg version='1.1' height='62.5' width='116.9' fill='%23161f27'%3E %3Cpath d='M115.3,1.6 C113.7,0 111.1,0 109.5,1.6 L58.5,52.7 L7.4,1.6 C5.8,0 3.2,0 1.6,1.6 C0,3.2 0,5.8 1.6,7.4 L55.5,61.3 C56.3,62.1 57.3,62.5 58.4,62.5 C59.4,62.5 60.5,62.1 61.3,61.3 L115.2,7.4 C116.9,5.8 116.9,3.2 115.3,1.6Z'/%3E %3C/svg%3E");
            }

            html {
              scrollbar-color: rgb(213, 213, 213) #fff;
              scrollbar-color: var(--scrollbar-thumb) var(--background-body);
              scrollbar-width: thin;
            }

            body {
              font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', sans-serif;
              line-height: 1.4;
              max-width: 800px;
              margin: 20px auto;
              padding: 0 10px;
              word-wrap: break-word;
              color: #363636;
              color: var(--text-main);
              background: #fff;
              background: var(--background-body);
              text-rendering: optimizeLegibility;
            }

            button {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            input {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            textarea {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            h1 {
              font-size: 2.2em;
              margin-top: 0;
            }

            h1,
            h2,
            h3,
            h4,
            h5,
            h6 {
              margin-bottom: 12px;
              margin-top: 24px;
            }

            h1 {
              color: #000;
              color: var(--text-bright);
            }

            h2 {
              color: #000;
              color: var(--text-bright);
            }

            h3 {
              color: #000;
              color: var(--text-bright);
            }

            h4 {
              color: #000;
              color: var(--text-bright);
            }

            h5 {
              color: #000;
              color: var(--text-bright);
            }

            h6 {
              color: #000;
              color: var(--text-bright);
            }

            strong {
              color: #000;
              color: var(--text-bright);
            }

            h1,
            h2,
            h3,
            h4,
            h5,
            h6,
            b,
            strong,
            th {
              font-weight: 600;
            }

            q::before {
              content: none;
            }

            q::after {
              content: none;
            }

            blockquote {
              border-left: 4px solid #0096bfab;
              border-left: 4px solid var(--focus);
              margin: 1.5em 0;
              padding: 0.5em 1em;
              font-style: italic;
            }

            q {
              border-left: 4px solid #0096bfab;
              border-left: 4px solid var(--focus);
              margin: 1.5em 0;
              padding: 0.5em 1em;
              font-style: italic;
            }

            blockquote > footer {
              font-style: normal;
              border: 0;
            }

            blockquote cite {
              font-style: normal;
            }

            address {
              font-style: normal;
            }

            a[href^='mailto\:']::before {
              content: '📧 ';
            }

            a[href^='tel\:']::before {
              content: '📞 ';
            }

            a[href^='sms\:']::before {
              content: '💬 ';
            }

            mark {
              background-color: #ff0;
              background-color: var(--highlight);
              border-radius: 2px;
              padding: 0 2px 0 2px;
              color: #000;
            }

            button,
            select,
            input[type='submit'],
            input[type='button'],
            input[type='checkbox'],
            input[type='range'],
            input[type='radio'] {
              cursor: pointer;
            }

            input:not([type='checkbox']):not([type='radio']),
            select {
              display: block;
            }

            input {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            button {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            textarea {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            select {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            input[type='checkbox'],
            input[type='radio'] {
              height: 1em;
              width: 1em;
            }

            input[type='radio'] {
              border-radius: 100%;
            }

            input {
              vertical-align: top;
            }

            label {
              vertical-align: middle;
              margin-bottom: 4px;
              display: inline-block;
            }

            input:not([type='checkbox']):not([type='radio']),
            input[type='range'],
            select,
            button,
            textarea {
              -webkit-appearance: none;
            }

            textarea {
              display: block;
              margin-right: 0;
              box-sizing: border-box;
              resize: vertical;
            }

            textarea:not([cols]) {
              width: 100%;
            }

            textarea:not([rows]) {
              min-height: 40px;
              height: 140px;
            }

            select {
              background: #efefef url("data:image/svg+xml;charset=utf-8,%3C?xml version='1.0' encoding='utf-8'?%3E %3Csvg version='1.1' height='62.5' width='116.9' fill='%23161f27'%3E %3Cpath d='M115.3,1.6 C113.7,0 111.1,0 109.5,1.6 L58.5,52.7 L7.4,1.6 C5.8,0 3.2,0 1.6,1.6 C0,3.2 0,5.8 1.6,7.4 L55.5,61.3 C56.3,62.1 57.3,62.5 58.4,62.5 C59.4,62.5 60.5,62.1 61.3,61.3 L115.2,7.4 C116.9,5.8 116.9,3.2 115.3,1.6Z'/%3E %3C/svg%3E") calc(100% - 12px) 50% / 12px no-repeat;
              background: var(--background) var(--select-arrow) calc(100% - 12px) 50% / 12px no-repeat;
              padding-right: 35px;
            }

            select::-ms-expand {
              display: none;
            }

            select[multiple] {
              padding-right: 10px;
              background-image: none;
              overflow-y: auto;
            }

            button,
            input[type='submit'],
            input[type='button'] {
              padding-right: 30px;
              padding-left: 30px;
            }

            button:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input[type='submit']:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input[type='button']:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            select:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            button:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            textarea:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            input[type='checkbox']:active,
            input[type='radio']:active,
            input[type='submit']:active,
            input[type='button']:active,
            input[type='range']:active,
            button:active {
              transform: translateY(2px);
            }

            input:disabled,
            select:disabled,
            button:disabled,
            textarea:disabled {
              cursor: not-allowed;
              opacity: 0.5;
            }

            ::-moz-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            :-ms-input-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            ::-ms-input-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            ::placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            fieldset {
              border: 1px #0096bfab solid;
              border: 1px var(--focus) solid;
              border-radius: 6px;
              margin: 0;
              margin-bottom: 12px;
              padding: 10px;
            }

            legend {
              font-size: 0.9em;
              font-weight: 600;
            }

            input[type='range'] {
              margin: 10px 0;
              padding: 10px 0;
              background: transparent;
            }

            input[type='range']:focus {
              outline: none;
            }

            input[type='range']::-webkit-slider-runnable-track {
              width: 100%;
              height: 9.5px;
              -webkit-transition: 0.2s;
              transition: 0.2s;
              background: #efefef;
              background: var(--background);
              border-radius: 3px;
            }

            input[type='range']::-webkit-slider-thumb {
              box-shadow: 0 1px 1px #000, 0 0 1px #0d0d0d;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
              -webkit-appearance: none;
              margin-top: -7px;
            }

            input[type='range']:focus::-webkit-slider-runnable-track {
              background: #efefef;
              background: var(--background);
            }

            input[type='range']::-moz-range-track {
              width: 100%;
              height: 9.5px;
              -moz-transition: 0.2s;
              transition: 0.2s;
              background: #efefef;
              background: var(--background);
              border-radius: 3px;
            }

            input[type='range']::-moz-range-thumb {
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
            }

            input[type='range']::-ms-track {
              width: 100%;
              height: 9.5px;
              background: transparent;
              border-color: transparent;
              border-width: 16px 0;
              color: transparent;
            }

            input[type='range']::-ms-fill-lower {
              background: #efefef;
              background: var(--background);
              border: 0.2px solid #010101;
              border-radius: 3px;
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
            }

            input[type='range']::-ms-fill-upper {
              background: #efefef;
              background: var(--background);
              border: 0.2px solid #010101;
              border-radius: 3px;
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
            }

            input[type='range']::-ms-thumb {
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
              border: 1px solid #000;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
            }

            input[type='range']:focus::-ms-fill-lower {
              background: #efefef;
              background: var(--background);
            }

            input[type='range']:focus::-ms-fill-upper {
              background: #efefef;
              background: var(--background);
            }

            a {
              text-decoration: none;
              color: #0076d1;
              color: var(--links);
            }

            a:hover {
              text-decoration: underline;
            }

            code {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            samp {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            time {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            pre > code {
              padding: 10px;
              display: block;
              overflow-x: auto;
            }

            var {
              color: #39a33c;
              color: var(--variable);
              font-style: normal;
              font-family: monospace;
            }

            kbd {
              background: #efefef;
              background: var(--background);
              border: 1px solid #dbdbdb;
              border: 1px solid var(--border);
              border-radius: 2px;
              color: #363636;
              color: var(--text-main);
              padding: 2px 4px 2px 4px;
            }

            img,
            video {
              max-width: 100%;
              height: auto;
            }

            hr {
              border: none;
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
            }

            table {
              border-collapse: collapse;
              margin-bottom: 10px;
              width: 100%;
              table-layout: fixed;
            }

            table caption {
              text-align: left;
            }

            td,
            th {
              padding: 6px;
              text-align: left;
              vertical-align: top;
              word-wrap: break-word;
            }

            thead {
              border-bottom: 1px solid #dbdbdb;
              border-bottom: 1px solid var(--border);
            }

            tfoot {
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
            }

            tbody tr:nth-child(even) {
              background-color: #f7f7f7;
              background-color: var(--background-alt);
            }

            ::-webkit-scrollbar {
              height: 10px;
              width: 10px;
            }

            ::-webkit-scrollbar-track {
              background: #efefef;
              background: var(--background);
              border-radius: 6px;
            }

            ::-webkit-scrollbar-thumb {
              background: rgb(213, 213, 213);
              background: var(--scrollbar-thumb);
              border-radius: 6px;
            }

            ::-webkit-scrollbar-thumb:hover {
              background: rgb(196, 196, 196);
              background: var(--scrollbar-thumb-hover);
            }

            ::-moz-selection {
              background-color: #9e9e9e;
              background-color: var(--selection);
              color: #000;
              color: var(--text-bright);
            }

            ::selection {
              background-color: #9e9e9e;
              background-color: var(--selection);
              color: #000;
              color: var(--text-bright);
            }

            details {
              display: flex;
              flex-direction: column;
              align-items: flex-start;
              background-color: #f7f7f7;
              background-color: var(--background-alt);
              padding: 10px 10px 0;
              margin: 1em 0;
              border-radius: 6px;
              overflow: hidden;
            }

            details[open] {
              padding: 10px;
            }

            details > :last-child {
              margin-bottom: 0;
            }

            details[open] summary {
              margin-bottom: 10px;
            }

            summary {
              display: list-item;
              background-color: #efefef;
              background-color: var(--background);
              padding: 10px;
              margin: -10px -10px 0;
              cursor: pointer;
              outline: none;
            }

            summary:hover,
            summary:focus {
              text-decoration: underline;
            }

            details > :not(summary) {
              margin-top: 0;
            }

            summary::-webkit-details-marker {
              color: #363636;
              color: var(--text-main);
            }

            footer {
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
              padding-top: 10px;
              color: #70777f;
              color: var(--text-muted);
            }

            body > footer {
              margin-top: 40px;
            }

            @media print {
              body,
              pre,
              code,
              summary,
              details,
              button,
              input,
              textarea {
                background-color: #fff;
              }

              button,
              input,
              textarea {
                border: 1px solid #000;
              }

              body,
              h1,
              h2,
              h3,
              h4,
              h5,
              h6,
              pre,
              code,
              button,
              input,
              textarea,
              footer,
              summary,
              strong {
                color: #000;
              }

              summary::marker {
                color: #000;
              }

              summary::-webkit-details-marker {
                color: #000;
              }

              tbody tr:nth-child(even) {
                background-color: #f2f2f2;
              }

              a {
                color: #00f;
                text-decoration: underline;
              }
            }

            /*# sourceMappingURL=light.css.map */

            input[type="text"] {
                width: calc(100% - 20px);
            }
        </style>
    </head>
    <body>
        <h1>Универсальный генератор паролей для всех продуктов Wolfram</h1>
        <ol>
            <li>
                Скачайте и запустите установку нужного вам приложения с <a href="https://www%2Ewolfram%2Ecom/download-center/" target="_blank"><b>Wolfram Download Center</b></a>.<br>
                Если вам нужна бесплатная пробная версия см. также:<br>
                &mdash; приложение <a href="https://www%2Ewolfram%2Ecom/mathematica/trial/" target="_blank"><b>Wolfram</b></a>
                (начиная с версии 14.1 оно заменяет 4 продукта: <b>Mathematica</b>, <b>Wolfram Finance Platform</b>, <b>Wolfram|One</b>, <b>Wolfram|Alpha Notebook Edition</b>),<br>
                &mdash; приложение <a href="https://www%2Ewolfram%2Ecom/system-modeler/trial/" target="_blank"><b>System Modeler</b></a>.<br>
                <br>
            </li>
            <li>На экране активации продукта нажмите кнопку <b>Other ways to activate</b>, а затем <b>Manual Activation</b> или <b>Activate offline through activation key and requested password</b>.<br>
                <br>
            </li>
            <li>Ниже введите полученный <b>MachineID</b>, он же <b>MathID</b> (nnnn-nnnnn-nnnnn), любой <b>Activation Key</b> (nnnn-nnnn-xxxxxx) (достаточно просто оставить Activation Key по умолчанию), введите <b>хэш</b>,
                а также для <b>Wolfram Player</b> и продукта под названием <b>Wolfram</b> (который начиная с версии <b>14.1</b> заменяет одновременно 4 продукта: Mathematica, Wolfram Finance Platform, Wolfram|One и Wolfram|Alpha Notebook Edition),
                обязательно укажите <b>тип лицензии (License Type &mdash; см. ниже)</b>,
                для приложения сетевого менеджера лицензий <b>MathLM</b> установите чекбокс (флажок) "We Are Everywhere!" и укажите <b>класс лицензии (License Class &mdash; см. ниже)</b>
                и, если нужно, укажите также другие данные.<br>
                <br>
                Список <b>хэшей</b> (номера версий больше 14.1 &mdash; условные):<br>
                <br>
                0xD1CF  &mdash; Mathematica и System Modeler 19.1(?), подходит для Mathematica    14.1 &ndash; 19.1(?) и System Modeler 14.1 &ndash; 19.1(?)<br>
                                                                                                                                                            <br>
                0x5417  &mdash; Mathematica и System Modeler 19.0(?), подходит для Mathematica    13.0 &ndash; 19.0(?) и System Modeler 14.1 &ndash; 19.0(?)<br>
                0xB013  &mdash; Mathematica и System Modeler 18.3(?), подходит для Mathematica    13.0 &ndash; 18.3(?) и System Modeler 14.1 &ndash; 18.3(?)<br>
                0xD54F  &mdash; Mathematica и System Modeler 18.2(?), подходит для Mathematica    13.0 &ndash; 18.2(?) и System Modeler 14.1 &ndash; 18.2(?)<br>
                0x66C0  &mdash; Mathematica и System Modeler 18.1(?), подходит для Mathematica    13.0 &ndash; 18.1(?) и System Modeler 14.1 &ndash; 18.1(?)<br>
                0x22DD  &mdash; Mathematica и System Modeler 18.0(?), подходит для Mathematica    13.0 &ndash; 18.0(?) и System Modeler 14.1 &ndash; 18.0(?)<br>
                0xCD2D  &mdash; Mathematica и System Modeler 17.3(?), подходит для Mathematica    13.0 &ndash; 17.3(?) и System Modeler 14.1 &ndash; 17.3(?)<br>
                0xB4D0  &mdash; Mathematica и System Modeler 17.2(?), подходит для Mathematica    13.0 &ndash; 17.2(?) и System Modeler 14.1 &ndash; 17.2(?)<br>
                0xE756  &mdash; Mathematica и System Modeler 17.1(?), подходит для Mathematica    12.0 &ndash; 17.1(?) и System Modeler 14.1 &ndash; 17.1(?)<br>
                0x8C68  &mdash; Mathematica и System Modeler 17.0(?), подходит для Mathematica    12.0 &ndash; 17.0(?) и System Modeler 14.1 &ndash; 17.0(?)<br>
                0x8250  &mdash; Mathematica и System Modeler 16.3(?), подходит для Mathematica    12.0 &ndash; 16.3(?) и System Modeler 14.1 &ndash; 16.3(?)<br>
                0xABEB  &mdash; Mathematica и System Modeler 16.2(?), подходит для Mathematica    12.0 &ndash; 16.2(?) и System Modeler 14.1 &ndash; 16.2(?)<br>
                                                                                                                                                            <br>
                0x8C72  &mdash; Mathematica и System Modeler 16.1(?), подходит для Mathematica    14.1 &ndash; 16.1(?) и System Modeler 13.0 &ndash; 16.1(?)<br>
                0x4209  &mdash; Mathematica и System Modeler 16.0(?), подходит для Mathematica    14.1 &ndash; 16.0(?) и System Modeler 13.0 &ndash; 16.0(?)<br>
                0x73EE  &mdash; Mathematica и System Modeler 15.3(?), подходит для Mathematica    14.1 &ndash; 15.3(?) и System Modeler 13.0 &ndash; 15.3(?)<br>
                0x64EC  &mdash; Mathematica и System Modeler 15.2(?), подходит для Mathematica    14.1 &ndash; 15.2(?) и System Modeler 13.0 &ndash; 15.2(?)<br>
                0x7C53  &mdash; Mathematica и System Modeler 15.1(?), подходит для Mathematica    14.1 &ndash; 15.1(?) и System Modeler 13.0 &ndash; 15.1(?)<br>
                0x5770  &mdash; Mathematica и System Modeler 15.0(?), подходит для Mathematica    14.1 &ndash; 15.0(?) и System Modeler  4.3 &ndash; 15.0(?)<br>
                0x7C91  &mdash; Mathematica и System Modeler 14.3(?), подходит для Mathematica    14.1 &ndash; 14.3(?) и System Modeler  4.3 &ndash; 14.3(?)<br>
                0xEEFE  &mdash; Mathematica и System Modeler 14.2(?), подходит для Mathematica    14.1 &ndash; 14.2(?) и System Modeler  4.3 &ndash; 14.2(?)<br>
                                                                                                                                                            <br>
                0x60F0  &mdash; Mathematica                  14.1,    подходит для Mathematica    12.0 &ndash; 14.1                                         <br>
                0x8E3C  &mdash; Mathematica                  14.0,    подходит для Mathematica    12.0 &ndash; 14.0                                         <br>
                0x44F1  &mdash; Mathematica                  13.3,    подходит для Mathematica    10.2 &ndash; 13.3                                         <br>
                0x29C2  &mdash; Mathematica                  13.2,    подходит для Mathematica    10.2 &ndash; 13.2                                         <br>
                0xEE71  &mdash; Mathematica                  13.1,    подходит для Mathematica    10.2 &ndash; 13.1                                         <br>
                0xDB75  &mdash; Mathematica                  13.0,    подходит для Mathematica    10.2 &ndash; 13.0                                         <br>
                0xD227  &mdash; Mathematica                  12.3,    подходит для Mathematica    10.2 &ndash; 12.3                                         <br>
                0x2FDB  &mdash; Mathematica                  12.2,    подходит для Mathematica    10.2 &ndash; 12.2                                         <br>
                0xA439  &mdash; Официально этот хэш не использовался, подходит для Mathematica    10.0 &ndash; 12.0                                         <br>
                0xE4A8  &mdash; Mathematica                  12.1,    подходит для Mathematica    10.0 &ndash; 12.1                                         <br>
                0xA68B  &mdash; Mathematica                  12.0,    подходит для Mathematica    10.0 &ndash; 12.0                                         <br>
                0x29F8  &mdash; Mathematica                  11.3,    подходит для Mathematica    10.0 &ndash; 11.3                                         <br>
                0x6A91  &mdash; Mathematica                  11.2,    подходит для Mathematica    10.0 &ndash; 11.2                                         <br>
                0x42DD  &mdash; Mathematica                  11.1,    подходит для Mathematica    10.0 &ndash; 11.1                                         <br>
                0x25DB  &mdash; Mathematica                  11.0,    подходит для Mathematica    10.0 &ndash; 11.0                                         <br>
                0x14411 &mdash; Официально этот хэш не использовался,          для Mathematica    10.0 &ndash; 10.4, но не работает                         <br>
                0x5750  &mdash; Mathematica                  10.4,    подходит для Mathematica    10.0 &ndash; 10.4                                         <br>
                0x80B9  &mdash; Mathematica                  10.3,    подходит для Mathematica    10.0 &ndash; 10.3                                         <br>
                0x1764E &mdash; Официально этот хэш не использовался,          для Mathematica    10.0 &ndash; 10.2, но не работает                         <br>
                0xE3B7  &mdash; Mathematica                  10.2,    подходит для Mathematica    10.0 &ndash; 10.2                                         <br>
                0xC1AE  &mdash; Mathematica                  10.1,    подходит для Mathematica    10.0 &ndash; 10.1                                         <br>
                0xDA5E  &mdash; Mathematica                  10.0,                                                                                          <br>
                                                                                                                                                            <br>
                0x1361  &mdash; System Modeler               14.1,    подходит для System Modeler  4.3 &ndash; 14.1                                         <br>
                0x755E  &mdash; System Modeler               14.0,    подходит для System Modeler  4.3 &ndash; 14.0                                         <br>
                0xA5CE  &mdash; System Modeler               13.3,    подходит для System Modeler  4.3 &ndash; 13.3                                         <br>
                0xF536  &mdash; System Modeler               13.2,    подходит для System Modeler  4.3 &ndash; 13.2                                         <br>
                0x1330  &mdash; System Modeler               13.1,    подходит для System Modeler  4.3 &ndash; 13.1                                         <br>
                0xBF47  &mdash; System Modeler               13.0,    подходит для System Modeler  4.3 &ndash; 13.0                                         <br>
                0x6188  &mdash; System Modeler               12.3,    подходит для System Modeler  4.0 &ndash; 12.3                                         <br>
                0xAB0B  &mdash; System Modeler               12.2,    подходит для System Modeler  4.0 &ndash; 12.2                                         <br>
                0xB4D3  &mdash; System Modeler               12.1,    подходит для System Modeler  4.0 &ndash; 12.1                                         <br>
                0x47C5  &mdash; System Modeler               12.0,    подходит для System Modeler  4.0 &ndash; 12.0                                         <br>
                0x81DD  &mdash; System Modeler                5.1,    подходит для System Modeler  4.0 &ndash;  5.1                                         <br>
                0x8330  &mdash; System Modeler                5.0,    подходит для System Modeler  4.0 &ndash;  5.0                                         <br>
                0x72C4  &mdash; System Modeler                4.3,    подходит для System Modeler  4.0 &ndash;  4.3                                         <br>
                0x2F33  &mdash; System Modeler                4.2,    подходит для System Modeler  4.0 &ndash;  4.2                                         <br>
                0x6897  &mdash; System Modeler                4.1,    подходит для System Modeler  4.0 &ndash;  4.1                                         <br>
                0x15BF  &mdash; System Modeler                4.0                                                                                           <br>
                                                                                                                                                            <br>
                0x72A4  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x29A5  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x140A  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x3FD1  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x452D  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x541A  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x3575  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x7F8C  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x6587  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                0x5B29  &mdash; MathLM начиная с версии 10.0                                                                                                       <br>
                                                                                                                                                            <br>
                Таким образом, начиная с версии 14.1 у Mathematica и System Modeler общий список хэшей, кроме одного, а со следующей версии скорее всего вообще будут одинаковые списки хэшей.<br>
                Все хэши от Mathematica и System Modeler подходят также и для соответствующих версий MathLM.<br>
                Хэши от Mathematica используются также и для Wolfram Player, Wolfram Finance Platform, Wolfram|Alpha Notebook Edition, Wolfram|One, Wolfram Desktop, Wolfram Engine, WolframScript.<br>
                Списки хэшей приведены в порядке, обратном тому, который зашит в программы, поэтому более долговечные хэши приведены здесь в начале списков.<br>
                Причина, по которой вместо одного хэша имеется целый список хэшей и этот список меняется в каждой версии, в том, что предполагается, что официально выдаваемая лицензия будет пригодна для текущей версии,
                не будет работать на следующей (в следующей версии этот хэш исключается из списка), но пригодна также и для нескольких предыдущих версий.
                Для этого в EXE и DLL файлы приложений и были заранее зашиты хэши от будущих версий.
                Данный кейген позволяет использовать не только хэши от текущей версии, но и хэши от будущих версий, но которые пригодны и для текущей версии.<br>
                <br>
                Для справки, выдаваемый приложением <b>MachineID</b> (он же <b>MathID</b>) имеет формат:<br>
                aabb-bbbbb-bbbcc<br>
                где:<br>
                aa - цифры числа MachineType (в пределах вроде бы от 10 до 79), которое зависит от архитектуры:<br>
                58 - Windows-ARM,<br>
                33 - Windows-ARM64,<br>
                62 - Windows-x86-64 (AMD64 (K8), Intel 64),<br>
                61 - Windows (unknown),<br>
                65 - Linux,<br>
                31 - MacOSX-ARM64,<br>
                51 - MacOSX-x86-64.<br>
                bbbbbbbbbb - цифры числа UniqueNumber (32-битное число без знака, т. е. должно быть не больше 4294967295), которое привязано к разделу с операционной системой, для его вычисления:<br>
                 - в Linux используется /etc/machine-id (для systemd) либо /var/lib/dbus/machine-id, который генерируется случайным образом при загрузке операционной системы (если его нет),<br>
                 - в Mac OS X вроде бы используется MAC адрес,<br>
                 - в Windows до версии 14.0 включительно используется серийный номер тома Windows, печатается командой vol (vol %SystemDrive%), поменять можно утилитой volumeid от SysInternals,<br>
                а начиная с версии 14.1 в Windows в первую очередь используется переменная реестра<br>
                HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid<br>
                (см. командой reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid), 
                поэтому в версии 14.1 MachineID отличается от предыдущих версий.<br>
                cc - цифры числа checksum, которое вычисляется по формуле:<br>
                checksum = ((UniqueNumber >> 2) + 43 * MachineType + 29 * (UniqueNumber & 3)) % 97<br>
                Проверить MachineID в Mathematica (или WolframScript) можно, используя встроенный символ 
                <a href="https://reference%2Ewolfram%2Ecom/language/ref/$MachineID.html" target="_blank"><b>$MachineID</b></a>. 
                Под Linux, чтобы узнать MachineID, также вроде бы можно запустить mathinfo.<br>
                Хранится MachineID в файле паролей, путь к которому можно узнать в Mathematica или WolframScript, используя встроенный символ 
                <a href="https://reference%2Ewolfram%2Ecom/language/ref/$PasswordFile.html" target="_blank"><b>$PasswordFile</b></a>.<br>
                <br>
                Для генерации пароля для менеджера лицензий MathLM установите флажок <b>"We Are Everywhere!"</b> и укажите класс лицензии (<b>License Class</b>): CA или CX или CB или CC или CM 
                (для остальных приложений этот флажок не надо ставить и не нужно указывать класс лицензии).
                Платформы Windows, Mac OS X и некоторые Linux относятся к классу A. Платформы серверного класса относятся к классу B.
                Для одного и того же Activation Key можно задать по одной лицензии каждого класса.<br>
                Пароли классов A, X, B, C предназначены для процессов Mathematica (MathKernel, Mathematica, Sub MathKernel, Sub Mathematica).<br>
                Пароли класса A действительны для клиентов класса A.<br>
                Пароли класса X действительны для клиентов классов A, X.<br>
                Пароли класса B действительны для клиентов классов A, X, B.<br>
                Пароли класса C действительны для клиентов классов A, X, B, C.<br>
                Пароли класса M предназачены для процессов System Modeler (Modeling Center, Simulation Center, Session Manager).<br>
                Поэтому скорее всего для MathLM достаточно 2 лицензий: класса C (для клиентов процессов Mathematica) и класса M (для клиентов процессов System Modeler).<br>
                Вероятно, клиентом запрашивается сетевая лицензия определённого класса: M &mdash; от System Modeler, и A, X, B, C &mdash; от остальных продуктов,
                и сервером лицензий MathLM выдаётся первая попавшаяся лицензия, которая подходит для запрашиваемого класса,
                поэтому не получится, чтобы от одного и того же сервера лицензий MathLM можно было получить лицензии,
                например, и для Mathematica и для Wolfram Player Pro,
                например, если запрашивается лицензия класса A, а первая попавшаяся лицензия &mdash; это лицензия класса C для Wolfram Player Pro (т. е. с типом лицензии 40),
                то вместо Mathematica мы получим в результате Wolfram Player Pro.<br>
                <br>
                Лимиты для количества процессов и субпроцессов Mathematica и System Modeler (<b>Max License Processes и Max License Subprocesses</b>)
                задаются в виде нескольких неотрицательных целых десятичных чисел, перечисленных через запятую без пробелов.
                Если оставить строку пустой, то количество процессов и субпроцессов будет неограничено.<br>
                Для Mathematica можно указать до 4 чисел: первое число &mdash; максимальное количество процессов (т. е. управляющих процессов) ядра (MathKernel),
                второе число &mdash; максимальное количество процессов Front End (Mathematica),
                если указать только одно число, то второе будет считаться равным первому,
                третье и четвёртое числа &mdash; максимальное число субпроцессов (т. е. вычислительных процессов) соответственно для ядра (MathKernel) и Front End (Mathematica).
                Если указать только 2 числа, то 3-е и 4-е будут считаться в 4 раза большими, чем соответственно 1-е и 2-е число.<br>
                Для System Modeler можно указать до 3 чисел: первое число &mdash; максимальное количество процессов Modeling Center,
                второе число &mdash; максимальное количество процессов Simulation Center,
                третье число &mdash; максимальное количество процессов Session Manager,
                если не указать второе число, то оно будет считаться равным первому,
                если не указать третье число, то оно будет считаться равным первому.<br>
                Числа 9999 и более означают бесконечность, т. е. неограниченное количество,
                т. е. 9999,9999,9999,9999 для Mathematica и 9999,9999,9999 для System Modeler дадут тот же эффект, что и пустая строка.<br>
                <br>

                Тип лицензии (<b>License Type</b>) &mdash; шестнадцатеричное число (без префикса 0x).<br>
                Для Mathematica и т. п. версий 14.0 и ниже если его не указать, то будет лицензия Professional,
                для приложения Wolfram начиная с версии 14.1 нужно указать значение, включающее одну из масок: 100000 (Wolfram|Alpha Notebook Edition) или 200000 (Wolfram|One) или 400000 (Finance Platform) или 800000 (Mathematica) или 1000000 (Wolfram Programming Lab) или 20 (Player) или 40 (Player Pro).
                Значения имеют отдельные биты (двоичные разряды) числа, поэтому тип лицензии можно получить, сложив побитово (с помощью битовой операция ИЛИ) соответствующие шестнадцатеричные битовые маски:<br>
                &mdash; бит &ensp;0 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1) &mdash; неизвестно что означает этот бит, но он установлен в бесплатных триальных лицензиях,<br>
                &mdash; бит &ensp;1 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2) &mdash; редакция Product Trial, также нужно задать дату истечения срока действия лицензии (License Expiration Date) в формате ГГГГММДД,<br>
                &mdash; бит &ensp;2 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4) &mdash; редакция Student Edition,<br>
                &mdash; бит &ensp;3 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8) &mdash; редакция Site License,<br>
                &mdash; бит &ensp;4 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10)      &mdash; Player, если установить этот бит, то Mathematica версии 13 и ниже будет как Wolfram Player, в версии 14.0 и выше этот бит вроде бы игнорируется,<br>
                &mdash; бит &ensp;5 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20)      &mdash; продукт Wolfram Player, если установить этот бит, то лицензию можно использовать для Wolfram Player, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией
                                                                                                тоже будут как Wolfram Player,<br>
                &mdash; бит &ensp;6 (маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40)      &mdash; продукт Wolfram Player Pro, если установить этот бит, то лицензию можно использовать для Wolfram Player &mdash;
                                                                                                он превратится в Wolfram Player Pro, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией будут как Wolfram Player Pro &mdash; можно вычислять, но не редактировать,<br>
                &mdash; бит 11      (маска &ensp;&ensp;&ensp;&ensp;&ensp;800)           &mdash; редакция Home Edition,<br>
                &mdash; бит 12      (маска &ensp;&ensp;&ensp;&ensp;1000)                &mdash; редакция Enterprise Edition, если установить этот бит, то Mathematica версии 13.3 и ниже с такой лицензией в окнах "About" и "Welcome Screen" пишет что она "Enterprise Edition",
                                                                                                но реально вроде бы этот бит больше ни на что не влияет, в версии 14 и выше этот бит вроде бы игнорируется,<br>
                &mdash; бит 13      (маска &ensp;&ensp;&ensp;&ensp;2000)                &mdash; фича EnterpriseSigning &mdash;
                                                                                                если установить этот бит, то Mathematica и Wolfram начиная с версии 14.1 с такой лицензией при выборе пункта меню "Preview for Wolfram Player"
                                                                                                открывает Preview c "WOLFRAM Player Pro" и "Enterprise CDF Preview",
                                                                                                а также позволяет записывать CDF файлы в формате EnterpriseCDF &mdash; CDFDeploy с опцией "Target" -> "PlayerPro" по умолчанию,
                                                                                                для записи FreeCDF нужно будет явно указывать "Target" -> "CDFPlayer",<br>
                &mdash; бит 19      (маска &ensp;&ensp;&ensp;80000)                     &mdash; фича AltExpirationPolicy, неизвестно, что означает, лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription)
                                                                                                выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии,
                                                                                                эта лицезия у Wolfram Engine вроде бы автоматически обновляется,<br>
                &mdash; бит 20      (маска &ensp;&ensp;100000)                          &mdash; продукт Wolfram|Alpha Notebook Edition приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 21      (маска &ensp;&ensp;200000)                          &mdash; продукт Wolfram|One                    приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 22      (маска &ensp;&ensp;400000)                          &mdash; продукт Wolfram Finance Platform       приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 23      (маска &ensp;&ensp;800000)                          &mdash; продукт Mathematica                    приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 24      (маска &ensp;1000000)                               &mdash; продукт Wolfram Programming Lab        приложения Wolfram начиная с версии 14.1, но вообще-то Wolfram Programming Lab &mdash; это устаревший продукт,
                                                                                                все функции и возможности которого доступны в Wolfram|One, в каждой лицензии для приложения Wolfram (начиная с версия 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 29      (маска 20000000)                                    &mdash; фича AutoRenewingSubscription, неизвестно, что означает, лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription)
                                                                                                выдают например  для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии,
                                                                                                эта лицезия у Wolfram Engine вроде бы автоматически обновляется,<br>
                &mdash; бит 31      (маска 80000000)                                    &mdash; неизвестно что означает этот бит, но если его установить, то приложение не принимает лицензию.<br>
                Просто поставьте внизу галочки, соответствующие выбранным битам.<br>
                Для System Modeler все биты License Type, кроме битов соответствующих битовым маскам 2 и 80000000 вроде бы ни на что не влияют.<br>
                Для Wolfram Player последних версий если не будет ни 20 ни 40, Player лицензию не примет, а также не примет, если будет 100000 или 80000000.<br>
                Таким образом,
                для лицензии для продукта Mathematica и лицензии для приложения MathLM для Mathematica (т. е. лицензий классов A, X, B, C) лучше всего будет тип лицензии 803001,
                для приложения Wolfram Player &mdash; 41,
                для приложения System Modeler &mdash; 1.<br>
                <br>

                Дата истечения срока действия лицензии (<b>License Expiration Date</b>) задаётся числом в формате ГГГГММДД. Если не указать, то лицензия будет неограниченной во времени.<br>
                <br>

                Вместо всех параметров (кроме хэша) можно указать <b>строку для генерации пароля</b> (если строка не пустая, все параметры кроме хэша игнорируются):<br>
                &mdash; для приложения MathLM в формате:<br>
                <pre style="overflow: auto;">We Are Everywhere!MathID@LicenseExpirationDate:MaxLicenseProcessesSubprocesses*LicenseClass$LicenseType&ActivationKey</pre>
                &mdash; для приложений Mathematica (и ему подобных), Wolfram (начиная с версия 14.1), Wolfram Player и System Modeler в формате:<br>
                <pre style="overflow: auto;">MathID@LicenseExpirationDate:MaxLicenseProcessesSubprocesses$LicenseType&ActivationKey</pre>
                Ненужные параметры вместе с соответствующим символом перед ними указывать не нужно.<br>

                Примеры для MathID=6202-24738-25165 и Activation Key=3893-9258-K6XJLE:<br>

                &mdash; для Mathematica Enterprise, тип лицензии 803001:<br>
                строка: 6202-24738-25165$803001&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                5664-002-955::803001<br>

                &mdash; для Wolfram Finance Platform Enterprise, тип лицензии 403001:<br>
                строка: 6202-24738-25165$403001&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                1854-941-555::403001<br>

                &mdash; для Wolfram|One Enterprise, тип лицензии 203001:<br>
                строка: 6202-24738-25165$203001&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                0854-315-897::203001<br>

                &mdash; для Wolfram|Alpha Notebook Edition Enterprise, тип лицензии 103001:<br>
                строка: 6202-24738-25165$103001&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                4454-201-119::103001<br>

                &mdash; для Wolfram Player Pro, тип лицензии 41:<br>
                строка: 6202-24738-25165$41&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                8893-153-716::41<br>

                &mdash; для System Modeler, тип лицензии 1:<br>
                строка: 6202-24738-25165$1&3893-9258-K6XJLE<br>
                С хэшем 0xD1CF (начиная с версии 14.1) пароль будет:<br>
                2866-955-005::1<br>

                &mdash; для MathLM для Mathematica Enterprise, тип лицензии 803001, класс лицензии C:<br>
                строка: We Are Everywhere!6202-24738-25165*CC$803001&3893-9258-K6XJLE<br>
                С хэшем 0x72A4 (начиная с версии 10.0) пароль будет:<br>
                4558-527-625::803001::CC<br>

                &mdash; для MathLM для System Modeler, тип лицензии 1, класс лицензии M:<br>
                строка: We Are Everywhere!6202-24738-25165*CM$1&3893-9258-K6XJLE<br>
                С хэшем 0x72A4 (начиная с версии 10.0) пароль будет:<br>
                6842-019-251::1::CM<br>
                <br>
            </li>
            <li>Нажмите <b>Сгенерировать пароль (password)</b>.<br>
                <br>
            </li>
                
            <li>В окне активации продукта введите ваш <b>Activation Key</b> и сгенерированный <b>Password</b> чтобы активировать продукт.<br>
                <br>
            </li>
                
            <li>Игнорируйте запрос <b>Register</b>.<br>
                <br>
            </li>
                
            <li>Для приложения под названием <b>Wolfram</b> (<b>начиная с версии 14.1</b>) можно добавить регистрации для разных продуктов (например, для
                Mathematica, Wolfram Finance Platform, Wolfram|One, Wolfram|Alpha Notebook Edition,
                Wolfram Player Pro, Wolfram Player, Wolfram Programming Lab) и переключаться между ними
                при помощи <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/UsingTheWolframProductSwitcher.html" target="_blank"><b>Переключателя продуктов Wolfram</b></a>
                &mdash; смотрите <b>Настройки</b> (меню <b>Edit&nbsp;&gt;&nbsp;Preferences</b> или кнопка <b>Открыть&nbsp;настройки...</b>), вкладка <b>Product</b>.<br>
            </li>
        </ol>

        См. также:<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/RegistrationAndPasswords.html" target="_blank"><b>Регистрация и пароли</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/MathematicaSystemAdministrationOverview.html" target="_blank"><b>Администрирование системы Wolfram</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingWolfram.html" target="_blank"><b>Установка Wolfram (начиная с версии 14.1)</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingMathematica.html" target="_blank"><b>Установка Mathematica (для версии 14 и старее)</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingMathLM.html" target="_blank"><b>Установка MathLM</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/ActivatingMathematica.html" target="_blank"><b>Активация Mathematica</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/UsingTheWolframProductSwitcher.html" target="_blank"><b>Переключатель продуктов Wolfram</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/guide/SystemAndLicenseManagement.html" target="_blank"><b>Управление системой и лицензиями</b></a>,<br>
        &mdash; Встроенный символ <a href="https://reference%2Ewolfram%2Ecom/language/ref/$MachineID.html" target="_blank"><b>$MachineID</b></a> &mdash; показывает MachineID (он же MathID),<br>
        &mdash; Встроенный символ <a href="https://reference%2Ewolfram%2Ecom/language/ref/$PasswordFile.html" target="_blank"><b>$PasswordFile</b></a> &mdash; путь к файлу с паролями.<br>
        <br>

        <b>Новые версии кейгена ищите <a href="https://forum%2Eru-board%2Ecom/topic.cgi?forum=35&topic=1174&start=0&limit=1&m=27#1" target="_blank">здесь</a>.</b><br>
        <br>

        <form id="form">
            <fieldset>
                <legend> Генератор паролей </legend>

                <label for="mathid" id="mathid-label"> MachineID (MathID): </label>
                <input type="text" id="mathid" pattern="\d{4}-\d{5}-\d{5}" title="В формате nnnn-nnnnn-nnnnn, где n - цифра." oninput="inputMathidChange(this.value)">

                <label for="activation-key"> Ключ активации (Activation Key): </label>
                <input type="text" id="activation-key" pattern="\d{4}-\d{4}-[0-9A-Z]{6}" value="3893-9258-K6XJLE" title="В формате nnnn-nnnn-xxxxxx, где n - цифра, а x - цифра или заглавная латинская буква.">

                <label for="password-str">Пароль (password), заполняйте только для проверки известного пароля: </label>
                <input type="text" id="password-str" title="Пароль. Заполняте только если хотите проверить известный пароль.">

                <button id="button-check-password" onclick="checkPass(event)">Проверить пароль (password)</button>

                <label for="max-license-processes-subprocesses"> Максимальное количество процессов и субпроцессов (Max License Processes и Max License Subprocesses): </label>
                <input type="text" id="max-license-processes-subprocesses" pattern="^(\s*|[0-9]\d{0,3}(,[0-9]\d{0,3}){0,3}\s*)$" title="От 1 до 4 чисел от 0 до 9999, разделённых запятыми или пустая строка.">

                <label for="license-type" style="display: none;"> Тип лицензии (License Type): </label>
                <input type="text" id="license-type" pattern="^(\s*|[1-9A-F][0-9A-F]{0,7}\s*)$" title="Шестнадцатеричное число от 1 до 8 цифр или пустая строка." style="display: none;">

                <div>
                    <div id="div-license-type"> Тип лицензии (License Type): </div>
                    <div id="div-checkbox-license-type-bit-00" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-00" title="Неизвестно что означает этот бит, но он установлен в бесплатных триальных лицензиях." checked onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-00"> бит  &ensp;0, маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1 &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-01" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-01" title="Установите флажок, если хотите редакцию Product Trial. Также нужно ниже задать дату истечения срока действия лицензии (License Expiration Date) в формате ГГГГММДД." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-01"> бит  &ensp;1, маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2 &mdash; редакция Product Trial </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-02" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-02" title="Установите флажок, если хотите редакцию Student Edition." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-ише-02"> бит  &ensp;2, маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4 &mdash; редакция Student Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-03" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-03" title="Установите флажок, если хотите редакцию Site License." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-03"> бит  &ensp;3, маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8 &mdash; редакция Site License </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-04" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-04" title="Установите флажок, если хотите чтобы Mathematica версии 13 и ниже превратилась в Wolfram Player. В версии 14 и выше этот бит вроде бы игнорируется." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-04"> бит  &ensp;4, маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10       &mdash; Player </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-05" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-05" title="Установите флажок, если вам нужна лицензия для Wolfram Player. Лицензию можно использовать для приложения Wolfram Player, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией тоже будут как Wolfram Player. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseWolframTypeClick()">
                        <label for="checkbox-license-type-bit-05"> бит  &ensp;5, маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20       &mdash; продукт Wolfram Player </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-06" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-06" title='Установите флажок, если вам нужна лицензия для Wolfram Player Pro. Лицензию можно использовать для приложения Wolfram Player &mdash; он превратится в Wolfram Player Pro, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией тоже будет как Wolfram Player Pro &mdash; можно вычислять, но не редактировать. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт.' onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-06"> бит  &ensp;6, маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40       &mdash; продукт Wolfram Player Pro </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-07" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-07" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-07"> бит  &ensp;7, маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;80       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-08" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-08" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-08"> бит  &ensp;8, маска &ensp;&ensp;&ensp;&ensp;&ensp;100                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-09" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-09" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-09"> бит  &ensp;9, маска &ensp;&ensp;&ensp;&ensp;&ensp;200                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-10" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-10" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-10"> бит 10,       маска &ensp;&ensp;&ensp;&ensp;&ensp;400                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-11" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-11" title="Установите флажок, если хотите редакцию Home Edition." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-11"> бит 11,       маска &ensp;&ensp;&ensp;&ensp;&ensp;800                  &mdash; редакция Home Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-12" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-12" title='Установите флажок, если хотите редакцию Enterprise Edition. Mathematica версии 13.3 и ниже с такой лицензией в окнах "About" и "Welcome Screen" пишет что она "Enterprise Edition", но реально вроде бы этот бит больше ни на что не влияет. В версии 14 и выше этот бит вроде бы игнорируется.' checked onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-12"> бит 12,       маска &ensp;&ensp;&ensp;&ensp;1000                       &mdash; редакция Enterprise Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-13" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-13" title='Фича EnterpriseSigning. Установите флажок, если хотите чтобы CDF файлы записывались в формате EnterpriseCDF &mdash; CDFDeploy с опцией "Target" -> "PlayerPro" по умолчанию, для записи FreeCDF нужно будет явно указывать "Target" -> "CDFPlayer". Mathematica и Wolfram начиная с версии 14.1 с такой лицензией при выборе пункта меню "Preview for Wolfram Player" открывает Preview c "WOLFRAM Player Pro" и "Enterprise CDF Preview".' checked onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-13"> бит 13,       маска &ensp;&ensp;&ensp;&ensp;2000                       &mdash; фича EnterpriseSigning </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-14" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-14" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-14"> бит 14,       маска &ensp;&ensp;&ensp;&ensp;4000                       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-15" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-15" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-15"> бит 15,       маска &ensp;&ensp;&ensp;&ensp;8000                       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-16" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-16" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-16"> бит 16,       маска &ensp;&ensp;&ensp;10000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-17" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-17" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-17"> бит 17,       маска &ensp;&ensp;&ensp;20000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-18" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-18" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-18"> бит 18,       маска &ensp;&ensp;&ensp;40000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-19" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-19" title='Фича AltExpirationPolicy. Неизвестно, что означает. Лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription) выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии, эта лицезия у Wolfram Engine вроде бы автоматически обновляется.' onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-19"> бит 19,       маска &ensp;&ensp;&ensp;80000                            &mdash; фича AltExpirationPolicy </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-20" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-20" title="Установите флажок, если вам нужна лицензия для продукта Wolfram|Alpha Notebook Edition приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-20"> бит 20,       маска &ensp;&ensp;100000                                 &mdash; продукт Wolfram|Alpha Notebook Edition  </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-21" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-21" title="Установите флажок, если вам нужна лицензия для продукта Wolfram|One приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-21"> бит 21,       маска &ensp;&ensp;200000                                 &mdash; продукт Wolfram|One </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-22" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-22" title="Установите флажок, если вам нужна лицензия для продукта Wolfram Finance Platform приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-22"> бит 22,       маска &ensp;&ensp;400000                                 &mdash; продукт Wolfram Finance Platform </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-23" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-23" title="Установите флажок, если вам нужна лицензия для продукта Mathematica приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." checked onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-23"> бит 23,       маска &ensp;&ensp;800000                                 &mdash; продукт Mathematica </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-24" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-24" title='Установите флажок, если вам нужна лицензия для продукта Wolfram Programming Lab приложения Wolfram начиная с версии 14.1. Но вообще-то Wolfram Programming Lab &mdash; это устаревший продукт, все функции и возможности которого доступны в Wolfram|One. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт.' onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-24"> бит 24,       маска &ensp;1000000                                      &mdash; продукт Wolfram Programming Lab </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-25" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-25" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-25"> бит 25,       маска &ensp;2000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-26" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-26" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-26"> бит 26,       маска &ensp;4000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-27" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-27" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-27"> бит 27,       маска &ensp;8000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-28" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-28" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-28"> бит 28,       маска 10000000                                           &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-29" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-29" title='Фича AutoRenewingSubscription. Неизвестно, что означает. Лицензию с установленным этим битом (а также с установленным битом для фичи AltExpirationPolicy) выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии, эта лицезия у Wolfram Engine вроде бы автоматически обновляется.' onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-29"> бит 29,       маска 20000000                                           &mdash; фича AutoRenewingSubscription </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-30" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-30" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-30"> бит 30,       маска 40000000                                           &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-31" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-31" title="Неизвестно что означает этот бит, но если его установить, то приложение не принимает лицензию." onclick="checkboxLicenseTypeClick()">
                        <label for="checkbox-license-type-bit-31"> бит 31,       маска 80000000                                           &mdash; неизвестно </label>
                    </div>
                </div>

                <br>

                <label for="license-expiration-date">Дата истечения срока действия лицензии (License Expiration Date): </label>
                <input type="text" id="license-expiration-date" pattern="^(\s*|[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\s*)$" title="Дата в формате ГГГГММДД или пустая строка.">

                <label for="we-are-everywhere"> "We Are Everywhere!": </label>
                <input type="checkbox" id="we-are-everywhere" title="Установите флажок, если лицензия для приложения MathLM, а также нужно указать класс лицензии (License Class). Для остальных приложений этот флажок снимите и очистите поле с классом лицензии (License Class)."><br>

                <label for="license-class">Класс лицензии (License Class): </label>
                <input type="text" id="license-class" pattern="^(\s*|CA|CX|CB|CC|CM\s*)$" title='Укажите CA или CX или CB или CC или CM если вам нужна лицензия для приложения MathLM, а также нужно установить флажок "We Are Everywhere!". Для остальных приложений очистите поле с классом лицензии (License Class) и снимите этот флажок "We Are Everywhere!".'>

                <label for="key-val-str">Строка для генерации пароля: </label>
                <input type="text" id="key-val-str" title="Строка для генерации пароля. Если строка не пустая, все параметры кроме хэша игнорируются.">

                <label for="salt">Хэш: </label>
                <input type="text" id="salt" required pattern="^(\s*|0x[0-9a-fA-F]{1,4}|[0-9]{1,5}\s*)$" title="Число либо в десятичном формате (от 0 до 65535), либо в шестнадцатеричном формате (от 0x0000 до 0xFFFF).">

                <button id="button" onclick="genPass(event)" type="submit">Сгенерировать пароль (password)</button>
            </fieldset>
        </form>
        <div id="output"></div>
    </body>
</html>
 

HTML Online Editor & Compiler

Write, Run & Share HTML code online using OneCompiler's HTML online Code editor for free. It's one of the robust, feature-rich online Code editor for HTML language, running on the latest version HTML5. Getting started with the OneCompiler's HTML compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as HTML. You can also specify the stylesheet information in styles.css tab and scripts information in scripts.js tab and start coding.

About HTML

HTML(Hyper Text Markup language) is the standard markup language for Web pages, was created by Berners-Lee in the year 1991. Almost every web page over internet might be using HTML.

Syntax help

Fundamentals

  • Any HTML document must start with document declaration <!DOCTYPE html>
  • HTML documents begin with <html> and ends with </html>
  • Headings are defined with <h1> to <h6> where <h1> is the highest important heading and <h6> is the least important sub-heading.
  • Paragrahs are defined in <p>..</p> tag.
  • Links are defined in <a> tag.

    Example:

    <a href="https://onecompiler.com/html">HTML online compiler</a>
    
  • Images are defined in <img> tag, where src attribute consists of image name.
  • Buttons are defined in <button>..</button> tag
  • Lists are defined in <ul> for unordered/bullet list and <ol> for ordered/number list, and the list items are defined in <li>.

HTML Elements and Attributes

  • HTML element is everything present from start tag to end tag.
  • The text present between start and end tag is called HTML element content.
  • Anything can be a tagname but it's preferred to put the meaningful title to the content present as tag name.
  • Do not forget the end tag.
  • Elements with no content are called empty elements.
  • Elements can have attributes which provides additional information about the element.
  • In the below example, href is an attribute and a is the tag name.

    Example:

    <a href="https://onecompiler.com/html">HTML online compiler</a>
    

CSS

CSS(cascading style sheets) describes how HTML elements will look on the web page like color, font-style, font-size, background color etc.

Example:

Below is a sample style sheet which displays heading in green and in Candara font with padding space of 25px.

body{
  padding: 25px;
}
.title {
	color: #228B22;
	font-family: Candara;
}

HTML Tables

  • HTML Tables are defined in <table> tag.
  • Table row should be defined in <tr> tag
  • Table header should be defined in <th> tag
  • Table data should be defined in <td> tag
  • Table caption should be defined in <caption> tag

HTML-Javascript

  • Javascript is used in HTML pages to make them more interactive.
  • <script> is the tag used to write scripts in HTML
  • You can either reference a external script or write script code in this tag.

Example

<script src="script.js"></script>