<!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 magicNumbersMath141 = [
                // Mathematica 14.1
                0x60F0,  // 12.0 - 14.1
                0xEEFE,  //        14.1+ - 14.2?
                0x7C91,  //        14.1+ - 14.3?
                0x5770,  //        14.1+ - 15.0?
                0x7C53,  //        14.1+ - 15.1?
                0x64EC,  //        14.1+ - 15.2?
                0x73EE,  //        14.1+ - 15.3?
                0x4209,  //        14.1+ - 16.0?
                0x8C72,  //        14.1+ - 16.1?
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417,  // 13.0 - 14.1+ - 19.0?
                0xD1CF   // 14.1 - 14.1+ - 19.1?
            ];

            var magicNumbersMath140 = [
                // Mathematica 14.0
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417   // 13.0 - 14.1+ - 19.0?
            ];

            var magicNumbersMath133 = [
                // Mathematica 13.3
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417   // 13.0 - 14.1+ - 19.0?
            ];

            var magicNumbersMath132 = [
                // Mathematica 13.2
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417   // 13.0 - 14.1+ - 19.0?
            ];

            var magicNumbersMath131 = [
                // Mathematica 13.1
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417   // 13.0 - 14.1+ - 19.0?
            ];

            var magicNumbersMath130 = [
                // Mathematica 13.0
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756,  // 12.0 - 14.1+ - 17.1?
                0xB4D0,  // 13.0 - 14.1+ - 17.2?
                0xCD2D,  // 13.0 - 14.1+ - 17.3?
                0x22DD,  // 13.0 - 14.1+ - 18.0?
                0x66C0,  // 13.0 - 14.1+ - 18.1?
                0xD54F,  // 13.0 - 14.1+ - 18.2?
                0xB013,  // 13.0 - 14.1+ - 18.3?
                0x5417   // 13.0 - 14.1+ - 19.0?
            ];

            var magicNumbersMath123 = [
                // Mathematica 12.3
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756   // 12.0 - 14.1+ - 17.1?
            ];

            var magicNumbersMath122 = [
                // Mathematica 12.2
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756   // 12.0 - 14.1+ - 17.1?
            ];

            var magicNumbersMath121 = [
                // Mathematica 12.1
                0xE4A8,  // 10.0 - 12.1
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756   // 12.0 - 14.1+ - 17.1?
            ];

            var magicNumbersMath120 = [
                // Mathematica 12.0
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1,  // 10.2 - 13.3
                0x8E3C,  // 12.0 - 14.0
                0x60F0,  // 12.0 - 14.1
                0xABEB,  // 12.0 - 14.1+ - 16.2?
                0x8250,  // 12.0 - 14.1+ - 16.3?
                0x8C68,  // 12.0 - 14.1+ - 17.0?
                0xE756   // 12.0 - 14.1+ - 17.1?
            ];

            var magicNumbersMath113 = [
                // Mathematica 11.3
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath112 = [
                // Mathematica 11.2
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath111 = [
                // Mathematica 11.1
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath110 = [
                // Mathematica 11.0.0, 11.0.1
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath104 = [
                // Mathematica 10.4
                0x5750,  // 10.0 - 10.4
                //0x14411, // 10.0 - 10.4, не работает
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath103 = [
                // Mathematica 10.3.0, 10.3.1
                0x80B9,  // 10.0 - 10.3
                0x5750,  // 10.0 - 10.4
                //0x14411, // 10.0 - 10.4, не работает
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath102 = [
                // Mathematica 10.2
                0xE3B7,  // 10.0 - 10.2
                //0x1764E, // 10.0 - 10.2, не работает
                0x80B9,  // 10.0 - 10.3
                0x5750,  // 10.0 - 10.4
                //0x14411, // 10.0 - 10.4, не работает
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439,  // 10.0 - 12.0
                0x2FDB,  // 10.2 - 12.2
                0xD227,  // 10.2 - 12.3
                0xDB75,  // 10.2 - 13.0
                0xEE71,  // 10.2 - 13.1
                0x29C2,  // 10.2 - 13.2
                0x44F1   // 10.2 - 13.3
            ];

            var magicNumbersMath101 = [
                // Mathematica 10.1
                0xC1AE,  // 10.0 - 10.1
                0xE3B7,  // 10.0 - 10.2
                //0x1764E, // 10.0 - 10.2, не работает
                0x80B9,  // 10.0 - 10.3
                0x5750,  // 10.0 - 10.4
                //0x14411, // 10.0 - 10.4, не работает
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439   // 10.0 - 12.0
            ];

            var magicNumbersMath100 = [
                // Mathematica 10.0
                0xDA5E,  // 10.0 - 10.0
                0xC1AE,  // 10.0 - 10.1
                0xE3B7,  // 10.0 - 10.2
                //0x1764E, // 10.0 - 10.2, не работает
                0x80B9,  // 10.0 - 10.3
                0x5750,  // 10.0 - 10.4
                //0x14411, // 10.0 - 10.4, не работает
                0x25DB,  // 10.0 - 11.0
                0x42DD,  // 10.0 - 11.1
                0x6A91,  // 10.0 - 11.2
                0x29F8,  // 10.0 - 11.3
                0xA68B,  // 10.0 - 12.0
                0xE4A8,  // 10.0 - 12.1
                0xA439   // 10.0 - 12.0
            ];


            var magicNumbersSM141 = [
                // System Modeler 14.1
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?
                0x7C91,  //  4.3 - 14.1+ - 14.3?
                0x5770,  //  4.3 - 14.1+ - 15.0?
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72,  // 13.0 - 14.1+ - 16.1?
                0xABEB,  //        14.1+ - 16.2?
                0x8250,  //        14.1+ - 16.3?
                0x8C68,  //        14.1+ - 17.0?
                0xE756,  //        14.1+ - 17.1?
                0xB4D0,  //        14.1+ - 17.2?
                0xCD2D,  //        14.1+ - 17.3?
                0x22DD,  //        14.1+ - 18.0?
                0x66C0,  //        14.1+ - 18.1?
                0xD54F,  //        14.1+ - 18.2?
                0xB013,  //        14.1+ - 18.3?
                0x5417,  //        14.1+ - 19.0?
                0xD1CF   // 14.1 - 14.1+ - 19.1?
            ];

            var magicNumbersSM140 = [
                // System Modeler 14.0
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770,  //  4.3 - 14.1+ - 15.0?  
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72   // 13.0 - 14.1+ - 16.1?
            ];

            var magicNumbersSM133 = [
                // System Modeler 13.3
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770,  //  4.3 - 14.1+ - 15.0?  
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72   // 13.0 - 14.1+ - 16.1?
            ];

            var magicNumbersSM132 = [
                // System Modeler 13.2
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770,  //  4.3 - 14.1+ - 15.0?  
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72   // 13.0 - 14.1+ - 16.1?
            ];

            var magicNumbersSM131 = [
                // System Modeler 13.1
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770,  //  4.3 - 14.1+ - 15.0?  
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72   // 13.0 - 14.1+ - 16.1?
            ];

            var magicNumbersSM130 = [
                // System Modeler 13.0
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?
                0x7C91,  //  4.3 - 14.1+ - 14.3?
                0x5770,  //  4.3 - 14.1+ - 15.0?
                0x7C53,  // 13.0 - 14.1+ - 15.1?
                0x64EC,  // 13.0 - 14.1+ - 15.2?
                0x73EE,  // 13.0 - 14.1+ - 15.3?
                0x4209,  // 13.0 - 14.1+ - 16.0?
                0x8C72   // 13.0 - 14.1+ - 16.1?
            ];

            var magicNumbersSM123 = [
                // System Modeler 12.3
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?
                0x7C91,  //  4.3 - 14.1+ - 14.3?
                0x5770   //  4.3 - 14.1+ - 15.0?
            ];

            var magicNumbersSM122 = [
                // System Modeler 12.2
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM121 = [
                // System Modeler 12.1
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM120 = [
                // System Modeler 12.0
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM051 = [
                // System Modeler  5.1
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM050 = [
                // System Modeler  5.0
                0x8330,  //  4.0 -  5.0 
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM043 = [
                // System Modeler  4.3
                0x72C4,  //  4.0 -  4.3 
                0x8330,  //  4.0 -  5.0 
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188,  //  4.0 - 12.3
                0xBF47,  //  4.3 - 13.0
                0x1330,  //  4.3 - 13.1 
                0xF536,  //  4.3 - 13.2  
                0xA5CE,  //  4.3 - 13.3  
                0x755E,  //  4.3 - 14.0  
                0x1361,  //  4.3 - 14.1  
                0xEEFE,  //  4.3 - 14.1+ - 14.2?  
                0x7C91,  //  4.3 - 14.1+ - 14.3?  
                0x5770   //  4.3 - 14.1+ - 15.0?  
            ];

            var magicNumbersSM042 = [
                // System Modeler  4.2
                0x2F33,  //  4.0 -  4.2
                0x72C4,  //  4.0 -  4.3 
                0x8330,  //  4.0 -  5.0 
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188   //  4.0 - 12.3
            ];

            var magicNumbersSM041 = [
                // System Modeler  4.1
                0x6897,  //  4.0 -  4.1
                0x2F33,  //  4.0 -  4.2
                0x72C4,  //  4.0 -  4.3 
                0x8330,  //  4.0 -  5.0 
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188   //  4.0 - 12.3
            ];

            var magicNumbersSM040 = [
                // System Modeler  4.0
                0x15BF,  //  4.0
                0x6897,  //  4.0 -  4.1
                0x2F33,  //  4.0 -  4.2
                0x72C4,  //  4.0 -  4.3 
                0x8330,  //  4.0 -  5.0 
                0x81DD,  //  4.0 -  5.1 
                0x47C5,  //  4.0 - 12.0  
                0xB4D3,  //  4.0 - 12.1  
                0xAB0B,  //  4.0 - 12.2  
                0x6188   //  4.0 - 12.3
            ];


            var magicNumbersMathLM = [
                // MathLM 10.0 - 14.1+
                0x5B29,
                0x6587,
                0x7F8C,
                0x3575,
                0x541A,
                0x452D,
                0x3FD1,
                0x140A,
                0x29A5,
                0x72A4
            ];

            const licenseTypeBitTrial                       = (1 <<  1);  //        2
            const licenseTypeBitStudent                     = (1 <<  2);  //        4
            const licenseTypeBitSite                        = (1 <<  3);  //        8
            const licenseTypeBitWolframPlayerOld            = (1 <<  4);  //       10
            const licenseTypeBitWolframPlayer               = (1 <<  5);  //       20
            const licenseTypeBitWolframPlayerPro            = (1 <<  6);  //       40
            const licenseTypeBitHome                        = (1 << 11);  //      800
            const licenseTypeBitEnterpriseEdition           = (1 << 12);  //     1000
            const licenseTypeBitEnterpriseSigning           = (1 << 13);  //     2000
            const licenseTypeBitAltExpirationPolicy         = (1 << 19);  //    80000
            const licenseTypeBitWolframAlphaNotebookEdition = (1 << 20);  //   100000
            const licenseTypeBitWolframOne                  = (1 << 21);  //   200000
            const licenseTypeBitWolframFinancePlatform      = (1 << 22);  //   400000
            const licenseTypeBitMathematica                 = (1 << 23);  //   800000
            const licenseTypeBitWolframProgrammingLab       = (1 << 24);  //  1000000
            const licenseTypeBitAutoRenewingSubscription    = (1 << 29);  // 20000000

            const defaultActivationKey                      = "3893-9258-K6XJLE"                                                                               ;

            const productSystemModeler                      = "system-modeler"                                                                                 ;
            const productWolframPlayer                      = "wolfram-player"                                                                                 ;
            const productWolframPlayerPro                   = "Wolfram-player-pro"                                                                             ;
            const productWolframAlphaNotebookEdition        = "wolfram-alpha-notebook-edition"                                                                 ;
            const productWolframOne                         = "wolfram-one"                                                                                    ;
            const productWolframFinancePlatform             = "wolfram-finance-platform"                                                                       ;
            const productMathematica                        = "mathematica"                                                                                    ;
            const productWolframProgrammingLab              = "wolfram-programming-lab"                                                                        ;

            const singleNetworkSingleMachineLicense         = "single-machine-license"                                                                         ;
            const singleNetworkNetworkLicense               = "network-license"                                                                                ;

            const licenseClassSM                            = "CM"                                                                                             ;

            var   singleNetwork                             = singleNetworkSingleMachineLicense                                                                ;
            var   product                                   = productMathematica                                                                               ;

            var   licenseClassMath                          = "CC"                                                                                             ;

            var   versionMath                               = "14.1"                                                                                           ;
            var   versionSM                                 = "14.1"                                                                                           ;

            var   mathID                                    = ""                                                                                               ;
            var   activationKey                             = defaultActivationKey                                                                             ;
            var   licenseExpirationDate                     = ""                                                                                               ;
            var   licenseType                               = (1 | licenseTypeBitEnterpriseEdition | licenseTypeBitEnterpriseSigning | licenseTypeBitMathematica).toString(16).toUpperCase()                                                     ;
            var   licenseClass                              = ""                                                                                               ;

            var   checkboxTrial                             = false                                                                                            ;
            var   checkboxStudent                           = false                                                                                            ;
            var   checkboxSite                              = false                                                                                            ;
            var   checkboxHome                              = false                                                                                            ;
            var   checkboxEnterprise                        = true                                                                                             ;

            var   checkboxEnterpriseSigning                 = true                                                                                             ;
            var   checkboxAltExpirationPolicy               = false                                                                                            ;
            var   checkboxAutoRenewingSubscription          = false                                                                                            ;

            var   magicNumbersSM                            = magicNumbersSM141                                                                                ;
            var   magicNumbersMath                          = magicNumbersMath141                                                                              ;
            var   magicNumbers                              = magicNumbersMath141                                                                              ;

            function getSelectedValue(name) {
                const radios = document.getElementsByName(name);
                var   selectedValue;
                for (const radio of radios) {
                    if (radio.checked) {
                        selectedValue = radio.value;
                        break;
                    };
                };
                return selectedValue;
            };

            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 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 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 keygenMathematicaPlayerProSM(magicNumbers, mathID, activationKey="", maxLicenseProcessesSubprocesses="", licenseType="", licenseExpirationDate="", licenseClass="") {
                var keyValStr = genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                return magicNumbers
                    .map(function(magicNumber){return genPassword(                       keyValStr, magicNumber)})
                    .reverse()
                    .filter(function(password){return password !== ''});
            };

            function keygenMathLM                (magicNumbers, mathID, activationKey="", maxLicenseProcessesSubprocesses="", licenseType="", licenseExpirationDate="", licenseClass="") {
                var keyValStr = genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                return magicNumbers
                    .map(function(magicNumber){return genPassword('We Are Everywhere!' + keyValStr, magicNumber)})
                    .reverse()
                    .filter(function(password){return password !== ''});
            };

            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 deletePass(documentTag) {
                var outputMathLMEl;
                outputMathLMEl = document.querySelector(documentTag);
                outputMathLMEl.innerHTML = "";
            };

            function update() {
//                var licenseTypeNumber                = 1 | licenseTypeBitEnterpriseEdition | licenseTypeBitEnterpriseSigning | licenseTypeBitMathematica;
                var licenseTypeNumber;
//                if (singleNetwork === singleNetworkSingleMachineLicense) {
//                    licenseTypeNumber                = 1;
//                } else {
//                    licenseTypeNumber                = 0;
//                };
                licenseTypeNumber                = 1;

                if (product       === productSystemModeler) {
                    switch (versionSM) {
                        case  "4.0":
                            magicNumbersSM   = magicNumbersSM040  ;
                            magicNumbersMath = magicNumbersMath100;
                            break;

                        case  "4.1":
                            magicNumbersSM   = magicNumbersSM041  ;
                            magicNumbersMath = magicNumbersMath101;
                            break;

                        case  "4.2":
                            magicNumbersSM   = magicNumbersSM042  ;
                            magicNumbersMath = magicNumbersMath100;
                            break;

                        case  "4.3":
                            magicNumbersSM   = magicNumbersSM043  ;
                            magicNumbersMath = magicNumbersMath110;
                            break;

                        case  "5.0":
                            magicNumbersSM   = magicNumbersSM050  ;
                            magicNumbersMath = magicNumbersMath103;
                            break;

                        case  "5.1":
                            magicNumbersSM   = magicNumbersSM051  ;
                            magicNumbersMath = magicNumbersMath113;
                            break;

                        case "12.0":
                            magicNumbersSM   = magicNumbersSM120  ;
                            magicNumbersMath = magicNumbersMath120;
                            break;

                        case "12.1":
                            magicNumbersSM   = magicNumbersSM121  ;
                            magicNumbersMath = magicNumbersMath121;
                            break;

                        case "12.2":
                            magicNumbersSM   = magicNumbersSM122  ;
                            magicNumbersMath = magicNumbersMath122;
                            break;

                        case "12.3":
                            magicNumbersSM   = magicNumbersSM123  ;
                            magicNumbersMath = magicNumbersMath123;
                            break;

                        case "13.0":
                            magicNumbersSM   = magicNumbersSM130  ;
                            magicNumbersMath = magicNumbersMath130;
                            break;

                        case "13.1":
                            magicNumbersSM   = magicNumbersSM131  ;
                            magicNumbersMath = magicNumbersMath131;
                            break;

                        case "13.2":
                            magicNumbersSM   = magicNumbersSM132  ;
                            magicNumbersMath = magicNumbersMath132;
                            break;

                        case "13.3":
                            magicNumbersSM   = magicNumbersSM133  ;
                            magicNumbersMath = magicNumbersMath133;
                            break;

                        case "14.0":
                            magicNumbersSM   = magicNumbersSM140  ;
                            magicNumbersMath = magicNumbersMath140;
                            break;

                        case "14.1":
                            magicNumbersSM   = magicNumbersSM141  ;
                            magicNumbersMath = magicNumbersMath141;
                            break;

                        default:
                            magicNumbersSM   = magicNumbersSM141  ;
                            magicNumbersMath = magicNumbersMath141;
                            break;
                    };
                    magicNumbers = magicNumbersSM;

//                    licenseTypeNumber                         = 1;
                } else {
                    switch (versionMath) {
                        case "10.0"  :
                            magicNumbersMath = magicNumbersMath100;
                            magicNumbersSM   = magicNumbersSM040  ;
                            break;                           
                                                           
                        case "10.1"  :
                            magicNumbersMath = magicNumbersMath101;
                            magicNumbersSM   = magicNumbersSM041  ;
                            break;                           
                                                           
                        case "10.2"  :
                            magicNumbersMath = magicNumbersMath102;
                            magicNumbersSM   = magicNumbersSM041  ;
                            break;                           
                                                     
                        case "10.3.0":
                            magicNumbersMath = magicNumbersMath103;
                            magicNumbersSM   = magicNumbersSM041  ;
                            break;                           

                        case "10.3.1":
                            magicNumbersMath = magicNumbersMath103;
                            magicNumbersSM   = magicNumbersSM042  ;
                            break;                           
                                                     
                        case "10.4"  :
                            magicNumbersMath = magicNumbersMath104;
                            magicNumbersSM   = magicNumbersSM042  ;
                            break;                           
                                                     
                        case "11.0.0":
                            magicNumbersMath = magicNumbersMath110;
                            magicNumbersSM   = magicNumbersSM042  ;
                            break;                           
                                                           
                        case "11.0.1":
                            magicNumbersMath = magicNumbersMath110;
                            magicNumbersSM   = magicNumbersSM043  ;
                            break;                           
                                                           
                        case "11.1"  :
                            magicNumbersMath = magicNumbersMath111;
                            magicNumbersSM   = magicNumbersSM043  ;
                            break;                           
                                                           
                        case "11.2"  :
                            magicNumbersMath = magicNumbersMath112;
                            magicNumbersSM   = magicNumbersSM050  ;
                            break;                           
                                                           
                        case "11.3"  :
                            magicNumbersMath = magicNumbersMath113;
                            magicNumbersSM   = magicNumbersSM051  ;
                            break;

                        case "12.0"  :
                            magicNumbersMath = magicNumbersMath120;
                            magicNumbersSM   = magicNumbersSM120  ;
                            break;

                        case "12.1"  :
                            magicNumbersMath = magicNumbersMath121;
                            magicNumbersSM   = magicNumbersSM121  ;
                            break;

                        case "12.2"  :
                            magicNumbersMath = magicNumbersMath122;
                            magicNumbersSM   = magicNumbersSM122  ;
                            break;

                        case "12.3"  :
                            magicNumbersMath = magicNumbersMath123;
                            magicNumbersSM   = magicNumbersSM123  ;
                            break;

                        case "13.0"  :
                            magicNumbersMath = magicNumbersMath130;
                            magicNumbersSM   = magicNumbersSM130  ;
                            break;

                        case "13.1"  :
                            magicNumbersMath = magicNumbersMath131;
                            magicNumbersSM   = magicNumbersSM131  ;
                            break;

                        case "13.2"  :
                            magicNumbersMath = magicNumbersMath132;
                            magicNumbersSM   = magicNumbersSM132  ;
                            break;

                        case "13.3"  :
                            magicNumbersMath = magicNumbersMath133;
                            magicNumbersSM   = magicNumbersSM133  ;
                            break;

                        case "14.0"  :
                            magicNumbersMath = magicNumbersMath140;
                            magicNumbersSM   = magicNumbersSM140  ;
                            break;

                        case "14.1"  :
                            magicNumbersMath = magicNumbersMath141;
                            magicNumbersSM   = magicNumbersSM141  ;
                            break;

                        default      :
                            magicNumbersMath = magicNumbersMath141;
                            magicNumbersSM   = magicNumbersSM141  ;
                            break;
                    };  // switch (versionMath)
                    magicNumbers = magicNumbersMath;

//                    licenseTypeNumber = 1;
                    switch (product) {
                        case productWolframPlayer               :
                            licenseTypeNumber |= licenseTypeBitWolframPlayer              ;
                            break;

                        case productWolframPlayerPro            :
                            licenseTypeNumber |= licenseTypeBitWolframPlayerPro           ;
                            break;

                        case productWolframAlphaNotebookEdition :
                            licenseTypeNumber |= licenseTypeBitWolframAlphaNotebookEdition;
                            break;

                        case productWolframOne                  :
                            licenseTypeNumber |= licenseTypeBitWolframOne                 ;
                            break;

                        case productWolframFinancePlatform      :
                            licenseTypeNumber |= licenseTypeBitWolframFinancePlatform     ;
                            break;

                        case productMathematica                 :
                            licenseTypeNumber |= licenseTypeBitMathematica                ;
                            break;

                        case productWolframProgrammingLab       :
                            licenseTypeNumber |= licenseTypeBitWolframProgrammingLab      ;
                            break;

                        default:
                            licenseTypeNumber |= licenseTypeBitMathematica                ;
                            break;

                    };  // switch (product)
                };  // if (product       === productSystemModeler) ... else ...

                if (checkboxTrial                   ) {
                    licenseTypeNumber |= licenseTypeBitTrial;
                };
                if (checkboxStudent                 ) {
                    licenseTypeNumber |= licenseTypeBitStudent                    ;
                };
                if (checkboxSite                    ) {
                    licenseTypeNumber |= licenseTypeBitSite                       ;
                };
                if (checkboxHome                    ) {
                    licenseTypeNumber |= licenseTypeBitHome                       ;
                };
                if (checkboxEnterprise              ) {
                    licenseTypeNumber |= licenseTypeBitEnterpriseEdition          ;
                };
                if (checkboxEnterpriseSigning       ) {
                    licenseTypeNumber |= licenseTypeBitEnterpriseSigning          ;
                };
                if (checkboxAltExpirationPolicy     ) {
                    licenseTypeNumber |= licenseTypeBitAltExpirationPolicy        ;
                };
                if (checkboxAutoRenewingSubscription) {
                    licenseTypeNumber |= licenseTypeBitAutoRenewingSubscription   ;
                };

                if (licenseTypeNumber == 0) { 
                    licenseType  = "";
                } else {
                    licenseType = licenseTypeNumber.toString(16).toUpperCase()                                                     ; 
                };
            };  // function update()

            // Отображение и скрытие радиокнопок с классами лицензии, в зависимости от product и singleNetwork
            function divSelectLicenseClassShowHide() {
                var elementDivSelectLicenseClassMath = document.getElementById("div-select-license-class-math");  // Для доступа к style.display при изменении singleNetwork
                var elementDivSelectLicenseClassSM   = document.getElementById("div-select-license-class-sm"  );  // Для доступа к style.display при изменении singleNetwork

                if        (singleNetwork === singleNetworkSingleMachineLicense) {
                    elementDivSelectLicenseClassMath.style.display = "none" ;
                    elementDivSelectLicenseClassSM.style.display   = "none" ;
                } else if (singleNetwork === singleNetworkNetworkLicense      ) {
                    if (product       === productSystemModeler) {
                        elementDivSelectLicenseClassMath.style.display = "none" ;
                        elementDivSelectLicenseClassSM.style.display   = "block";
                    } else {
                        elementDivSelectLicenseClassMath.style.display = "block";
                        elementDivSelectLicenseClassSM.style.display   = "none" ;
                    };
                };
            };

            function selectSingleNetworkClick(value) {
                singleNetwork         = value;

                // Отображение и скрытие радиокнопок с классами лицензии, в зависимости от product и singleNetwork
                divSelectLicenseClassShowHide();
            };

            function selectProductChange(value) {
                product               = value;

                // Отображение и скрытие радиокнопок с классами лицензии, в зависимости от product и singleNetwork
                divSelectLicenseClassShowHide();

                // Показ или скрытие списков номеров версий для Mathematica и System Modeler
                var elementDivSelectVersionMath      = document.getElementById("div-select-version-math"      );  // Для доступа к style.display при изменении product
                var elementDivSelectVersionSM        = document.getElementById("div-select-version-sm"        );  // Для доступа к style.display при изменении product
                if (product       === productSystemModeler) {
                    elementDivSelectVersionMath.style.display = "none" ;
                    elementDivSelectVersionSM.style.display   = "block";
                } else {
                    elementDivSelectVersionMath.style.display = "block";
                    elementDivSelectVersionSM.style.display   = "none" ;
                };

                // Задание значений по умолчанию для чекбоксов
                checkboxTrial                             = false                                                        ;
                checkboxStudent                           = false                                                        ;
                checkboxSite                              = false                                                        ;
                checkboxHome                              = false                                                        ;
                if (
                    (product === productSystemModeler   ) ||
                    (product === productWolframPlayer   ) ||
                    (product === productWolframPlayerPro)
                ) {
                    checkboxEnterprise                        = false                                                        ;
                    checkboxEnterpriseSigning                 = false                                                        ;
                } else {
                    checkboxEnterprise                        = true                                                         ;
                    checkboxEnterpriseSigning                 = true                                                         ;
                };
                checkboxAltExpirationPolicy               = false                                                        ;
                checkboxAutoRenewingSubscription          = false                                                        ;
                document.getElementById("checkbox-trial"                     ).checked = checkboxTrial                   ;
                document.getElementById("checkbox-student"                   ).checked = checkboxStudent                 ;
                document.getElementById("checkbox-site"                      ).checked = checkboxSite                    ;
                document.getElementById("checkbox-home"                      ).checked = checkboxHome                    ;
                document.getElementById("checkbox-enterprise"                ).checked = checkboxEnterprise              ;
                document.getElementById("checkbox-enterprise-signing"        ).checked = checkboxEnterpriseSigning       ;
                document.getElementById("checkbox-alt-expiration-policy"     ).checked = checkboxAltExpirationPolicy     ;
                document.getElementById("checkbox-auto-renewing-subscription").checked = checkboxAutoRenewingSubscription;

                checkboxTrialClick();
            };

            function selectLicenseClassMathClick(value) {
                licenseClassMath      = value;
            };

            function selectVersionMathChange(value) {
                versionMath           = value;
            };

            function selectVersionSMChange(value) {
                versionSM             = value;
            };

            function inputMathidChange(value) {
                mathID                = value;

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

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

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

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

                        case 61:
                            document.getElementById("mathid-label").textContent = " MachineID (MathID): (для Windows) ";
                            break;

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

                        case 65:
                            document.getElementById("mathid-label").textContent = " MachineID (MathID): (для Linux) ";
                            break;

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

            function inputActivationKeyChange(value) {
                activationKey         = value;
            };

            function inputLicenseExpirationDateChange(value) {
                licenseExpirationDate = value;
            };

            function checkboxTrialClick() {
                checkboxTrial                    = document.getElementById("checkbox-trial"                     ).checked;
                if (checkboxTrial) {
                    document.getElementById("div-input-license-expiration-date").style.display   = "block";
                    document.getElementById("license-expiration-date"          ).setAttribute('required', '');
                    document.getElementById("license-expiration-date"          ).setAttribute('pattern' , '^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$');
                    licenseExpirationDate = document.getElementById("license-expiration-date").value;
                } else {
                    document.getElementById("license-expiration-date"          ).removeAttribute('required');
                    document.getElementById("license-expiration-date"          ).removeAttribute('pattern');
                    document.getElementById("div-input-license-expiration-date").style.display   = "none" ;
                    licenseExpirationDate = "";
                };
            };

            function checkboxStudentClick() {
                checkboxStudent                  = document.getElementById("checkbox-student"                   ).checked;
            };

            function checkboxSiteClick() {
                checkboxSite                     = document.getElementById("checkbox-site"                      ).checked;
            };

            function checkboxHomeClick() {
                checkboxHome                     = document.getElementById("checkbox-home"                      ).checked;
            };

            function checkboxEnterpriseClick() {
                checkboxEnterprise               = document.getElementById("checkbox-enterprise"                ).checked;
            };

            function checkboxEnterpriseSigningClick() {
                checkboxEnterpriseSigning        = document.getElementById("checkbox-enterprise-signing"        ).checked;
            };

            function checkboxAltExpirationPolicyClick() {
                checkboxAltExpirationPolicy      = document.getElementById("checkbox-alt-expiration-policy"     ).checked;
            };

            function checkboxAutoRenewingSubscriptionClick() {
                checkboxAutoRenewingSubscription = document.getElementById("checkbox-auto-renewing-subscription").checked;
            };

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

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

                var keyValStr                       = ""                                                                   ;
                var password                        = ""                                                                   ;

                // Регулярное выражение для проверки формата MachineID
                var regex = /^(\d{4})-(\d{5})-(\d{5})$/;

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

                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 == "") {
                    alert("Укажите Machine ID (Math ID)");
                } else if (match == null) {
                    alert("Неверный формат строки.");
                } else if (B > 4294967295  ) {
                    alert(`UniqueNumber = ${B} (число в MachineID, не включая первые две цифры и последние две цифры) превышает максимально возможное значение 4294967295.`);
                } else if (calculatedC != C) {
                    alert(`Контрольная сумма в MachineID (последние 2 цифры) неверна. Ожидаемое число ${calculatedC}, а полученное число ${C}.`);
                } else {
                    update();
                    if (singleNetwork === singleNetworkNetworkLicense) {
                        if (product       === productSystemModeler) {
                            licenseClass    = licenseClassSM  ;
                        } else {
                            licenseClass    = licenseClassMath;
                        };
                        keyValStr = 'We Are Everywhere!' + genKeyValStr(mathID, activationKey, "", licenseType, licenseExpirationDate, licenseClass);
                        password = (magicNumbersMathLM.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                        printPass(
                            '#outputMathLM',
                            'Пароли для строки: <br>\"' + keyValStr + '\"<br><br>Пароли упорядочены по долговечности (в смысле работы на будущих версиях при условии, что MachineID не изменится) в убывающем порядке, поэтому рекомендуется выбрать первый пароль (password) из списка.<br><br>Пароли для MathLM любой версии:',
                            password
                        );
                        if (product === productSystemModeler) {
                            password = (magicNumbersSM.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                            printPass(
                                "#output1",
                                'Пароли для MathLM для System Modeler выбранной версии:',
                                password
                            );
                            password = (magicNumbersMath.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                            printPass(
                                "#output2",
                                'Пароли для MathLM для Mathematica соответствующей версии:',
                                password
                            );
                        } else {
                            password = (magicNumbersMath.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                            printPass(
                                "#output1",
                                'Пароли для MathLM для Mathematica выбранной версии:',
                                password
                            );
                            password = (magicNumbersSM.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                            printPass(
                                "#output2",
                                'Пароли для MathLM для System Modeler соответствующей версии:',
                                password
                            );
                        };
                    } else {
                        licenseClass    = "";
                        keyValStr =                        genKeyValStr(mathID, activationKey, "", licenseType, licenseExpirationDate, licenseClass);
                        deletePass("#outputMathLM");
                        password = (magicNumbers.map(function(magicNumber){return genPassword(keyValStr, magicNumber)}).reverse().filter(function(password){return password !== ''})).join('\n');
                        printPass(
                            "#output1",
                            'Пароли для строки: <br>\"' + keyValStr + '\"<br><br>Пароли упорядочены по долговечности (в смысле работы на будущих версиях при условии, что MachineID не изменится) в убывающем порядке, поэтому рекомендуется выбрать первый пароль (password) из списка.',
                            password
                        );
                        deletePass("#output2");
                    };
                };
            };
        </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' xmlns='http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg' xmlns:xlink='http%3A%2F%2Fwww%2Ew3%2Eorg%2F1999%2Fxlink' 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' xmlns='http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg' xmlns:xlink='http%3A%2F%2Fwww%2Ew3%2Eorg%2F1999%2Fxlink' 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>Установите приложение <b>Wolfram</b>
                (в версии 14.1 и выше оно заменяет 4 продукта: <b>Mathematica</b>, <b>Wolfram Finance Platform</b>, <b>Wolfram|One</b>, <b>Wolfram|Alpha Notebook Edition</b>)
                с <a href="https://www%2Ewolfram%2Ecom/mathematica/trial/" target="_blank">официального сайта</a><br>
                или установите <b>Wolfram Player</b> с <a href="https://www%2Ewolfram%2Ecom/player/" target="_blank">официального сайта</a><br>
                или установите <b>System Modeler</b> с <a href="https://www%2Ewolfram%2Ecom/system-modeler/trial/" target="_blank">официального сайта</a>.<br>
                См. также <a href="https://www%2Ewolfram%2Ecom/download-center/" target="_blank">Wolfram Download Center</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>Версию</b>.<br>
                <details>
                <summary><b>Сетевая лицензия (для менеджера лицензий MathLM)</b></summary>
                <p>
                     Для генерации пароля для MathLM 
                     выберите <b>Сетевая лицензия (для менеджера лицензий MathLM)</b> и, если лицензия не для System Modeler, то
                     выберите класс лицензии (<b>License Class</b>): A или X или B или C.
                     Платформы 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,
                     то вместо Mathematica мы получим в результате Wolfram Player Pro.<br>
                </p>
                <p>
                    Вся эта информация добавляется в файл <b>mathpass</b> в папке, в которую установлен MathLM (обычно, C:\Program Files (x86)\Wolfram Research\MathLM\) в следующем формате для каждой строки:
                </p>
<pre>!LicenseServer&#9;MathID&#9;ActivationKey&#9;Password</pre>
                <p>
                    где <b>LicenseServer</b> &mdash; имя компьютера на котором запускается MathLM.<br>
                    Все параметры в строке разделены символом табуляции.<br>
                    Пример файла <b>mathpass</b> для <b>MathLM</b>:
                </p>
<pre>
!wolfram	1234-12345-12345	3893-9258-K6XJLE	0818-390-979::803001::CC
!wolfram	1234-12345-12345	3893-9258-K6XJLE	4793-894-053::1::CM</pre>
                <p>
                    В файле <b>mathpass</b> для <b>Mathematica</b> (обычно, C:\ProgramData\Mathematica\Licensing\mathpass) для связи с <b>MathLM</b> при этом указывается только <b>LicenseServer</b>, пример:
                </p>
<pre>%(*userregistered*)
!wolfram&#9;&#9;&#9;&#9;&#9;&#9;</pre>
                </details>
<!--
                Лимиты для количества процессов и субпроцессов Mathematica и System Modeler (<b>Max License Processes и 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).
                Для версий 14.0 и ранее если его не указать, то будет лицензия Professional,
                для версий 14.1+ нужно указать значение, включающее слагаемое 100000 или 200000 или 400000 или 800000 или 1000000 или 20 или 40 (см. ниже).
                Значения имеют отдельные биты (двоичные разряды) числа, поэтому тип лицензии можно получить, сложив отдельные шестнадцатеричные слагаемые, соответствующие битам:<br>
                       1 (бит  0) &mdash; вроде бы ничего не означает,<br>
                       2 (бит  1) &mdash; редакция Trial   (Product Trial) (нужно задать ещё и License Expiration Date),<br>
                       4 (бит  2) &mdash; редакция Student (Student Edition),<br>
                       8 (бит  3) &mdash; редакция Site    (Site License),<br>
                      10 (бит  4) &mdash; Player (Mathematica 13 с такой лицензией будет как Wolfram Player), в 14.0+ версии вроде бы ни на что не влияет,<br>
                      20 (бит  5) &mdash; продукт WolframPlayer (Wolfram Player) (лицензию можно использовать для Wolfram Player, Mathematica и Wolfram 14.1+ с такой лицензией тоже будет как Wolfram Player),<br>
                      40 (бит  6) &mdash; продукт WolframPlayerPro (Wolfram Player Pro) (лицензию можно использовать для Wolfram Player &mdash; 
                                    он превратится в Wolfram Player Pro, а Mathematica и Wolfram 14.1+ с такой лицензией будет как Wolfram Player Pro &mdash; можно вычислять, но не редактировать),<br>
                     800 (бит 11) &mdash; редакция Home    (Home Edition),<br>
                    1000 (бит 12) &mdash; Enterprise (Mathematica 10.0 &ndash; 13.3 с такой лицензией в окнах "About" и "Welcome Screen" пишет что она "Enterprise Edition", но реально вроде не работает как Enterprise), в 14.0+ версии вроде бы ни на что не влияет,<br>
                    2000 (бит 13) &mdash; фича EnterpriseSigning (Enterprise Edition)
                                    (Mathematica 10.0+ с такой лицензией при выборе пункта меню "Preview for Wolfram Player" открывает Preview c "WOLFRAM Player Pro" и "Enterprise CDF Preview",
                                    а также позволяет записывать CDF файлы в формате EnterpriseCDF &mdash; CDFDeploy с опцией "Target" -> "PlayerPro" по умолчанию, для записи FreeCDF нужно будет явно указывать "Target"->"CDFPlayer"),<br>
                   80000 (бит 19) &mdash; фича AltExpirationPolicy,      такой тип лицензии выдают для бесплатного Wolfram Engine (с нулевым лимитом для Front End Mathematica),<br>
                  100000 (бит 20) &mdash; продукт Wolfram|Alpha Notebook Edition 14.1+,<br>
                  200000 (бит 21) &mdash; продукт Wolfram|One                    14.1+,<br>
                  400000 (бит 22) &mdash; продукт Wolfram Finance Platform       14.1+,<br>
                  800000 (бит 23) &mdash; продукт Mathematica                    14.1+,<br>
                 1000000 (бит 24) &mdash; продукт Wolfram Programming Lab (устаревший продукт, все функции и возможности которого доступны в Wolfram|One),<br>
                20000000 (бит 29) &mdash; фича AutoRenewingSubscription, такой тип лицензии выдают для бесплатного Wolfram Engine (с нулевым лимитом для Front End Mathematica),<br>
                80000000 (бит 31) &mdash; с битом, соответствующим этому слагаемому лицензия не принимается.<br>
                Для System Modeler все биты License Type, кроме битов соответствующих слагаемым 2 и 80000000 вроде бы ни на что не влияют.<br>
                Для Wolfram Player последних версий если не будет ни 20 ни 40, Player лицензию не примет, а также не примет, если будет 100000 или 80000000.<br>
                Таким образом,
                для лицензии Mathematica и лицензии для MathLM для Mathematica (т. е. лицензий классов A, X, B, C) лучше всего будет тип лицензии 803000 (для версий меньше 14.1 &mdash; достаточно 3000, для версии 14.0+ достаточно 802000),
                для Wolfram Player &mdash; 40,
                для System Modeler &mdash; оставить пустую строку "License Type", но можно указать и тип лицензии такой же как для Mathematica (803000) &mdash; это вроде не повредит<br>
                <br>
-->
<!--
                <details>
                <summary><b>Trial</b></summary>
                Если вам вдруг зачем-то нужна триальная лицензии (Product Trial), то установите чекбокс <b>Trial</b> и укажите дату истечения срока действия лицензии (License Expiration Date) &mdash;
                задаётся числом в формате ГГГГММДД. Если не указать, то лицензия будет неограниченной во времени.<br>
                </details>
                <details>
                <summary><b>Enterprise</b></summary>
                При установленном чекбоксе <b>Enterprise</b> генерится лицензия, с которой Mathematica 10.0 &ndash; 13.3 в окнах "About" и "Welcome Screen" пишет, что она "Enterprise Edition", в 14.0+ версии вроде бы ни на что не влияет.<br>
                </details>
                <details>
                <summary><b>EnterpriseSigning</b></summary>
                При установленном чекбоксе <b>EnterpriseSigning</b> генерится лицензия, с которой Mathematica при выборе пункта меню "Preview for Wolfram Player" открывает Preview c "WOLFRAM Player Pro" и "Enterprise CDF Preview",
                а также позволяет записывать CDF файлы в формате EnterpriseCDF &mdash; CDFDeploy с опцией "Target" -> "PlayerPro" по умолчанию (для записи FreeCDF нужно будет явно указывать "Target"->"CDFPlayer").<br>
                </details>
                <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)
                через меню <b>Edit &gt; Preferences &gt; Product</b> и переключаться между ними через это же меню.<br>
                <br>
            </li>

            <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>

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

                <div style="display: flex;">
                    <div style="flex: 1;">
                        <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)">
                    </div>
                    <div style="flex: 1; max-width: 10px;">
                        &nbsp;
                    </div>
                    <div style="flex: 1;">
                        <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 - цифра или заглавная латинская буква" oninput="inputActivationKeyChange(this.value)">
                    </div>
                </div>

                <div style="display: flex;">
                    <div style="flex: 1;">
                        <label for="product"> Продукт: </label>
                        <select id="product" name="product" onchange="selectProductChange(this.value)">
                            <option value="mathematica">Mathematica</option>
                            <option value="system-modeler">System Modeler</option>
                            <option value="wolfram-finance-platform">Wolfram Finance Platform</option>
                            <option value="wolfram-one">Wolfram|One</option>
                            <option value="wolfram-alpha-notebook-edition">Wolfram|Alpha Notebook Edition</option>
                            <option value="wolfram-programming-lab">Wolfram Programming Lab</option>
                            <option value="Wolfram-player-pro">Wolfram Player Pro</option>
                            <option value="wolfram-player">Wolfram Player</option>
                        </select>
                    </div>
                    <div style="flex: 1; max-width: 10px;">
                        &nbsp;
                    </div>
                    <div style="flex: 1;">
                        <div id="div-select-version-math" style="display: block;">
                            <label for="version-math"> Версия: </label>
                            <select id="version-math" name="versionMath" onchange="selectVersionMathChange(this.value)">
                                <option value="10.0"                           > 10.0                   </option>
                                <option value="10.1"                           > 10.1                   </option>
                                <option value="10.2"                           > 10.2                   </option>
                                <option value="10.3.0"                         > 10.3.0                 </option>
                                <option value="10.3.1"                         > 10.3.1                 </option>
                                <option value="10.4"                           > 10.4                   </option>
                                <option value="11.0.0"                         > 11.0.0                 </option>
                                <option value="11.0.1"                         > 11.0.1                 </option>
                                <option value="11.1"                           > 11.1                   </option>
                                <option value="11.2"                           > 11.2                   </option>
                                <option value="11.3"                           > 11.3                   </option>
                                <option value="12.0"                           > 12.0                   </option>
                                <option value="12.1"                           > 12.1                   </option>
                                <option value="12.2"                           > 12.2                   </option>
                                <option value="12.3"                           > 12.3                   </option>
                                <option value="13.0"                           > 13.0                   </option>
                                <option value="13.1"                           > 13.1                   </option>
                                <option value="13.2"                           > 13.2                   </option>
                                <option value="13.3"                           > 13.3                   </option>
                                <option value="14.0"                           > 14.0                   </option>
                                <option value="14.1"                   selected> 14.1                   </option>
                            </select>
                        </div>
                        <div id="div-select-version-sm" style="display: none;">
                            <label for="version-sm">Версия:</label>
                            <select id="version-sm" name="versionSM" onchange="selectVersionSMChange(this.value)">
                                <option value="4.0"                            >  4.0                   </option>
                                <option value="4.1"                            >  4.1                   </option>
                                <option value="4.2"                            >  4.2                   </option>
                                <option value="4.3"                            >  4.3                   </option>
                                <option value="5.0"                            >  5.0                   </option>
                                <option value="5.1"                            >  5.1                   </option>
                                <option value="12.0"                           > 12.0                   </option>
                                <option value="12.1"                           > 12.1                   </option>
                                <option value="12.2"                           > 12.2                   </option>
                                <option value="12.3"                           > 12.3                   </option>
                                <option value="13.0"                           > 13.0                   </option>
                                <option value="13.1"                           > 13.1                   </option>
                                <option value="13.2"                           > 13.2                   </option>
                                <option value="13.3"                           > 13.3                   </option>
                                <option value="14.0"                           > 14.0                   </option>
                                <option value="14.1"                   selected> 14.1                   </option>
                            </select>
                        </div>
                    </div>
                </div>

                <input type="radio" id="single-machine-license" name="select-single-network" value="single-machine-license" checked onclick="selectSingleNetworkClick(this.value)">
                <label for="single-machine-license"> Лицензия для одной машины                        </label>
                <input type="radio" id="network-license"        name="select-single-network" value="network-license"                onclick="selectSingleNetworkClick(this.value)">
                <label for="network-license"       > Сетевая лицензия (для менеджера лицензий MathLM) </label>
                <br>

                <div id="div-select-license-class-math" style="display: none;">
                    Класс лицензии:
                    <input type="radio" id="select-license-class-math-a" name="select-license-class" value="CA"         onclick="selectLicenseClassMathClick(this.value)">
                    <label for="select-license-class-math-a">A </label>
                    <input type="radio" id="select-license-class-math-x" name="select-license-class" value="CX"         onclick="selectLicenseClassMathClick(this.value)">
                    <label for="select-license-class-math-x">X </label>
                    <input type="radio" id="select-license-class-math-b" name="select-license-class" value="CB"         onclick="selectLicenseClassMathClick(this.value)">
                    <label for="select-license-class-math-b">B </label>
                    <input type="radio" id="select-license-class-math-c" name="select-license-class" value="CC" checked onclick="selectLicenseClassMathClick(this.value)">
                    <label for="select-license-class-math-c">C </label>
                    <br>
                </div>

                <div id="div-select-license-class-sm" style="display: none;">
                    Класс лицензии: M
                    <br>
                </div>
<!--
                <div style="display: flex;">
-->
                <div style="display: none;">
                    <div style="flex: 1;">
                        Редакции:<br>
                        <div id="div-checkbox-trial">
                            <input type="checkbox" id="checkbox-trial" title="Установите флажок, если хотите редакцию Product Trial" onclick="checkboxTrialClick()">
                            <label for="checkbox-trial"> Trial </label>
                        </div>
                        <div id="div-checkbox-student">
                            <input type="checkbox" id="checkbox-student" title="Установите флажок, если хотите редакцию Student Edition" onclick="checkboxStudentClick()">
                            <label for="checkbox-student"> Student </label>
                        </div>
                        <div id="div-checkbox-site">
                            <input type="checkbox" id="checkbox-site" title="Установите флажок, если хотите редакцию Site License" onclick="checkboxSiteClick()">
                            <label for="checkbox-site"> Site </label>
                        </div>
                        <div id="div-checkbox-home">
                            <input type="checkbox" id="checkbox-home" title="Установите флажок, если хотите редакцию Home Edition" onclick="checkboxHomeClick()">
                            <label for="checkbox-home"> Home </label>
                        </div>
                        <div id="div-checkbox-enterprise">
                            <input type="checkbox" id="checkbox-enterprise" title="Установите флажок, если хотите редакцию Enterprise Edition" checked onclick="checkboxEnterpriseClick()">
                            <label for="checkbox-enterprise"> Enterprise </label>
                        </div>
                    </div>

                    <div style="flex: 1; max-width: 10px;">
                        &nbsp;
                    </div>

                    <div style="flex: 1;">
                        Фичи:<br>
                        <div id="div-checkbox-enterprise-signing">
                            <input type="checkbox" id="checkbox-enterprise-signing" title="Установите флажок, если хотите фичу EnterpriseSigning" checked onclick="checkboxEnterpriseSigningClick()">
                            <label for="checkbox-enterprise-signing"> EnterpriseSigning </label>
                        </div>
                        <div id="div-checkbox-alt-expiration-policy">
                            <input type="checkbox" id="checkbox-alt-expiration-policy" title="Установите флажок, если хотите фичу AltExpirationPolicy" onclick="checkboxAltExpirationPolicyClick()">
                            <label for="checkbox-alt-expiration-policy"> AltExpirationPolicy </label>
                        </div>
                        <div id="div-checkbox-auto-renewing-subscription">
                            <input type="checkbox" id="checkbox-auto-renewing-subscription" title="Установите флажок, если хотите фичу AutoRenewingSubscription" onclick="checkboxAutoRenewingSubscriptionClick()">
                            <label for="checkbox-auto-renewing-subscription"> AutoRenewingSubscription </label>
                        </div>
                    </div>
                </div>

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

                <button id="button" onclick="genPass(event)"> Сгенерировать пароль (password) </button>
            </fieldset>
        </form>
        <div id="outputMathLM"></div>
        <div id="output1"></div>
        <div id="output2"></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>