[
  {
    "path": ".config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-validate\": {\n      \"version\": \"0.0.1-preview.304\",\n      \"commands\": [\n        \"dotnet-validate\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": ".github/workflows/continuous-integration.yml",
    "content": "name: Continuous Integration\n\non: [push, pull_request]\n\nenv:\n  Configuration: Release\n  ContinuousIntegrationBuild: true\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\n  DOTNET_NOLOGO: true\n  DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: true\n  TERM: xterm-256color\n\njobs:\n  package:\n    strategy:\n      matrix:\n        os: [ macos-latest, ubuntu-latest, windows-latest ]\n      fail-fast: false\n    runs-on: ${{ matrix.os }}\n    name: Build and run tests\n    steps:\n      - name: Checkout git repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: |\n            6.x\n            8.x\n\n      - name: Restore NuGet packages\n        run: dotnet restore\n\n      - name: Build solution\n        run: dotnet build --no-restore --verbosity normal\n\n      - name: Run tests\n        run: dotnet test --no-build --verbosity normal\n\n      - name: Upload test results\n        uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: TestResults-${{ runner.os }}\n          path: TestResults-*.html\n\n      - name: Create and validate NuGet packages\n        run: |\n          dotnet tool restore\n          dotnet pack --no-build --verbosity normal\n        if: startsWith(matrix.os,'windows')\n"
  },
  {
    "path": ".github/workflows/demos.yaml",
    "content": "name: Demos\n\non: [push, pull_request]\n\nenv:\n  Configuration: Release\n  ContinuousIntegrationBuild: true\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\n  DOTNET_NOLOGO: true\n  DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: true\n  TERM: xterm-256color\n\njobs:\n  build:\n    runs-on: windows-latest\n    name: Build demo projects\n    steps:\n      - name: Checkout git repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: |\n            6.x\n            8.x\n\n      - name: Create local NuGet source\n        run: |\n          mkdir ..\\LocalPackages\n          $pkgdir = Resolve-Path ..\\LocalPackages\n          dotnet nuget add source $pkgdir --name Local\n\n      - name: Build library package\n        run: |\n          dotnet restore\n          dotnet tool restore\n          dotnet pack --verbosity normal\n\n      - name: Install library package\n        run: |\n          $pkg = Resolve-Path QrCodeGenerator\\bin\\Release\\Net.Codecrete.QrCodeGenerator.*.nupkg\n          nuget push $pkg -Source Local\n\n      - name: Build Demo-ImageSharp\n        run: dotnet build\n        working-directory: Demo-ImageSharp\n      - name: Build Demo-ASP.NET-Core\n        run: dotnet build\n        working-directory: Demo-ASP.NET-Core\n      - name: Build Demo-ImageMagick\n        run: dotnet build\n        working-directory: Demo-ImageMagick\n      - name: Build Demo-QRCode-Variety\n        run: dotnet build\n        working-directory: Demo-QRCode-Variety\n      - name: Build Demo-SkiaSharp\n        run: dotnet build\n        working-directory: Demo-SkiaSharp\n      - name: Build Demo-System-Drawing\n        run: dotnet build\n        working-directory: Demo-System-Drawing\n      - name: Build Demo-VCard\n        run: dotnet build\n        working-directory: Demo-VCard\n      - name: Build Demo-WindowsPresentationFoundation\n        run: dotnet build\n        working-directory: Demo-WindowsPresentationFoundation\n      - name: Build Demo-WinForms\n        run: dotnet build\n        working-directory: Demo-WinForms\n      - name: Build Demo-WinUI\n        run: dotnet build\n        working-directory: Demo-WinUI\n"
  },
  {
    "path": ".gitignore",
    "content": "# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n\n# Build results\n[Bb]in/\n[Oo]bj/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n\n# Visual Studio Code\n.vscode/\n\n# Rider\n.idea/\n"
  },
  {
    "path": "Demo-ASP.NET-Core/Demo-ASP.NET-Core.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.1.0\" />\n    <PackageReference Include=\"SkiaSharp\" Version=\"2.88.6\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-ASP.NET-Core/Demo-ASP.NET-Core.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31919.166\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-ASP.NET-Core\", \"Demo-ASP.NET-Core.csproj\", \"{8EA82CD7-A88E-4A93-94B0-FA0C7DD1C7F1}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8EA82CD7-A88E-4A93-94B0-FA0C7DD1C7F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8EA82CD7-A88E-4A93-94B0-FA0C7DD1C7F1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8EA82CD7-A88E-4A93-94B0-FA0C7DD1C7F1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8EA82CD7-A88E-4A93-94B0-FA0C7DD1C7F1}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {2902DABB-C256-46C5-AF46-35600F5F7A0E}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-ASP.NET-Core/Program.cs",
    "content": "//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/Properties/launchSettings.json",
    "content": "﻿{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:25726\",\n      \"sslPort\": 44337\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"Demo_ASP.NET_Core\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": \"true\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/QrCodeBitmapExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing SkiaSharp;\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    public static class QrCodeBitmapExtensions\n    {\n        /// <inheritdoc cref=\"ToBitmap(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static SKBitmap ToBitmap(this QrCode qrCode, int scale, int border, SKColor foreground, SKColor background)\n        {\n            // check arguments\n            if (scale <= 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Value out of range\");\n            }\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Value out of range\");\n            }\n\n            int size = qrCode.Size;\n            int dim = (size + border * 2) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large\");\n            }\n\n            // create bitmap\n            SKBitmap bitmap = new SKBitmap(dim, dim, SKColorType.Rgb888x, SKAlphaType.Opaque);\n\n            using (SKCanvas canvas = new SKCanvas(bitmap))\n            {\n                // draw background\n                using (SKPaint paint = new SKPaint { Color = background })\n                {\n                    canvas.DrawRect(0, 0, dim, dim, paint);\n                }\n\n                // draw modules\n                using (SKPaint paint = new SKPaint { Color = foreground })\n                {\n                    for (int y = 0; y < size; y++)\n                    {\n                        for (int x = 0; x < size; x++)\n                        {\n                            if (qrCode.GetModule(x, y))\n                            {\n                                canvas.DrawRect((x + border) * scale, (y + border) * scale, scale, scale, paint);\n                            }\n                        }\n                    }\n                }\n            }\n\n            return bitmap;\n        }\n\n        /// <summary>\n        /// Creates a bitmap (raster image) of this QR code.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// The resulting bitmap uses the pixel format <see cref=\"PixelFormat.Format24bppRgb\"/>.\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static SKBitmap ToBitmap(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToBitmap(scale, border, SKColors.Black, SKColors.White);\n        }\n\n        /// <inheritdoc cref=\"ToPng(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border, SKColor foreground, SKColor background)\n        {\n            using SKBitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 90);\n            return data.ToArray();\n        }\n\n        /// <summary>\n        /// Creates a PNG image of this QR code and returns it as a byte array.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToPng(scale, border, SKColors.Black, SKColors.White);\n        }\n\n        /// <inheritdoc cref=\"SaveAsPng(QrCode, string, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, SKColor foreground, SKColor background)\n        {\n            using SKBitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 90);\n            using FileStream stream = File.OpenWrite(filename);\n            data.SaveTo(stream);\n        }\n\n        /// <summary>\n        /// Saves this QR code as a PNG file.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)\n        {\n            qrCode.SaveAsPng(filename, scale, border, SKColors.Black, SKColors.White);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/QrCodeController.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Text;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    /// <summary>\n    /// Controller for generating QR code as PNG or SVG images\n    /// </summary>\n    [ApiController]\n    public class QrCodeController : ControllerBase\n    {\n        private static readonly QrCode.Ecc[] errorCorrectionLevels = { QrCode.Ecc.Low, QrCode.Ecc.Medium, QrCode.Ecc.Quartile, QrCode.Ecc.High };\n\n        /// <summary>\n        /// Generates QR code as PNG image\n        /// </summary>\n        /// <param name=\"text\">Text to encode in QR code</param>\n        /// <param name=\"ecc\">Error correction level (0: low ... 3: high)</param>\n        /// <param name=\"borderWidth\">Border width in multiples of a module (QR code pixel)</param>\n        /// <returns>PNG image</returns>\n        [HttpGet(\"qrcode/png\")]\n        [ResponseCache(Duration = 2592000)]\n        public ActionResult<byte[]> GeneratePng([FromQuery(Name = \"text\")] string text,\n            [FromQuery(Name = \"ecc\")] int? ecc, [FromQuery(Name = \"border\")] int? borderWidth)\n        {\n            ecc = Math.Clamp(ecc ?? 1, 0, 3);\n            borderWidth = Math.Clamp(borderWidth ?? 3, 0, 999999);\n\n            var qrCode = QrCode.EncodeText(text, errorCorrectionLevels[(int)ecc]);\n            byte[] png = qrCode.ToPng(20, (int)borderWidth);\n            return new FileContentResult(png, \"image/png\");\n        }\n\n        /// <summary>\n        /// Generates QR code as SVG image\n        /// </summary>\n        /// <param name=\"text\">Text to encode in QR code</param>\n        /// <param name=\"ecc\">Error correction level (0: low ... 3: high)</param>\n        /// <param name=\"borderWidth\">Border width in multiples of a module (QR code pixel)</param>\n        /// <returns>SVG image</returns>\n        [HttpGet(\"qrcode/svg\")]\n        [ResponseCache(Duration = 2592000)]\n        public ActionResult<byte[]> GenerateSvg([FromQuery(Name = \"text\")] string text,\n            [FromQuery(Name = \"ecc\")] int? ecc, [FromQuery(Name = \"border\")] int? borderWidth)\n        {\n            ecc = Math.Clamp(ecc ?? 1, 0, 3);\n            borderWidth = Math.Clamp(borderWidth ?? 3, 0, 999999);\n\n            var qrCode = QrCode.EncodeText(text, errorCorrectionLevels[(int)ecc]);\n            byte[] svg = Encoding.UTF8.GetBytes(qrCode.ToSvgString((int)borderWidth));\n            return new FileContentResult(svg, \"image/svg+xml; charset=utf-8\");\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/README.md",
    "content": "# Sample code for ASP.NET Core\n\nThis example program shows how to create a QR codes in an ASP.NET core application.\n\nThe [`QrCodeController`](QrCodeController.cs) class receives the QR code text, border width and error correction level as query parameters and generates the QR code, either as an SVG or PNG.\n\nFor  PNG generation, the [SkiaSharp](https://github.com/mono/SkiaSharp) rasterization library is used.\n"
  },
  {
    "path": "Demo-ASP.NET-Core/Startup.cs",
    "content": "//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Rewrite;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    public class Startup\n    {\n        // This method gets called by the runtime. Use this method to add services to the container.\n        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddControllers();\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            var rewriter = new RewriteOptions();\n            rewriter.AddRewrite(\"^$\", \"home.html\", skipRemainingRules: false);\n            app.UseRewriter(rewriter);\n\n            app.UseStaticFiles();\n\n            app.UseRouting();\n\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapControllers();\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "Demo-ASP.NET-Core/wwwroot/home.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title>QR Code</title>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/purecss@2.0.6/build/pure-min.css\" integrity=\"sha384-Uu6IeWbM+gzNVXJcM9XV3SohHtmWE+3VGi496jvgX1jyvDTXfdK+rfZc8C1Aehk5\" crossorigin=\"anonymous\">\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/purecss@2.0.6/build/grids-responsive-min.css\">\n    <link rel=\"stylesheet\" href=\"styles.css\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n</head>\n<body>\n    <div class=\"content\">\n        <div class=\"pure-g\">\n            <h1>QR Code</h1>\n            <form class=\"pure-form\">\n                <fieldset>\n                    <div class=\"pure-u-1\"><img id=\"qrcode\" src=\"qrcode/svg?text=Hello%20world!&ecc=1&border=3\" /></div>\n                    <div class=\"pure-u-1 more-space\"><input id=\"text\" type=\"text\" placeholder=\"QR code text\" value=\"Hello world!\" /></div>\n                    <div class=\"pure-u-1 pure-u-lg-1-2 more-space\">\n                        <label for=\"ecc\">\n                            Error correction:\n                            <select id=\"ecc\">\n                                <option value=\"0\">Low</option>\n                                <option value=\"1\" selected>Medium</option>\n                                <option value=\"2\">Quartile</option>\n                                <option value=\"3\">High</option>\n                            </select>\n\n                        </label>\n                    </div>\n                    <div class=\"pure-u-1 pure-u-lg-1-2 more-space\">\n                        <label for=\"border\">\n                            Border width: <input type=\"number\" id=\"border\" value=\"3\" min=\"0\" max=\"99999\" />\n                        </label>\n                    </div>\n                </fieldset>\n            </form>\n        </div>\n    </div>\n\n    <script src=\"ui.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Demo-ASP.NET-Core/wwwroot/styles.css",
    "content": "﻿.content {\n    max-width: 768px;\n    margin-left: auto;\n    margin-right: auto;\n    padding-left: 1em;\n    padding-right: 1em;\n    background: #eee;\n}\n#qrcode {\n    width: 80%;\n    max-width: 400px;\n    margin-top: 1em;\n    margin-bottom: 2em;\n    margin-left: auto;\n    margin-right: auto;\n    display: block;\n}\n#text {\n    width: 90%;\n}\n.more-space {\n    margin-top: 0.5em;\n    margin-bottom: 0.5em;\n}\nh1 {\n    letter-spacing: 0;\n    text-align: center;\n    width: 100%;\n}"
  },
  {
    "path": "Demo-ASP.NET-Core/wwwroot/ui.js",
    "content": "﻿(function () {\n    var qrCodeImage;\n    var textField;\n    var borderField;\n    var eccSelect;\n\n    function updateQrCode() {\n        var url = new URL('qrcode/svg', document.baseURI);\n        url.searchParams.append('text', textField.value);\n        url.searchParams.append('ecc', eccSelect.value);\n        url.searchParams.append('border', borderField.value);\n        qrCodeImage.src = url;\n    }\n\n    function init() {\n        textField = document.getElementById('text');\n        qrCodeImage = document.getElementById('qrcode');\n        borderField = document.getElementById('border');\n        eccSelect = document.getElementById('ecc');\n\n        textField.onchange = function () { updateQrCode(); }\n        textField.oninput = function () { updateQrCode(); }\n        borderField.onchange = function () { updateQrCode(); }\n        borderField.oninput = function () { updateQrCode(); }\n        eccSelect.onchange = function () { updateQrCode(); }\n    }\n\n    init();\n})();\n"
  },
  {
    "path": "Demo-ImageMagick/Demo-ImageMagick.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Magick.NET-Q16-AnyCPU\" Version=\"14.10.4\" />\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.1.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-ImageMagick/Demo-ImageMagick.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.2.32630.192\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-ImageMagick\", \"Demo-ImageMagick.csproj\", \"{E4F86D1E-F08C-4BFE-BC37-9BED8A411E88}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E4F86D1E-F08C-4BFE-BC37-9BED8A411E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E4F86D1E-F08C-4BFE-BC37-9BED8A411E88}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E4F86D1E-F08C-4BFE-BC37-9BED8A411E88}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E4F86D1E-F08C-4BFE-BC37-9BED8A411E88}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {BC2EF2FB-30F7-431B-B92C-05E9C7B7B07B}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-ImageMagick/Program.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2022 suxiaobu9, Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing ImageMagick;\nusing Net.Codecrete.QrCodeGenerator;\n\nstring text = \"Hello, world!\",\n    fileName = \"hello-world-QR.png\";\n\nvar qr = QrCode.EncodeText(text, QrCode.Ecc.Medium);\n\nqr.SaveAsPng(fileName, 10, 4, MagickColors.Black, MagickColors.White);\n"
  },
  {
    "path": "Demo-ImageMagick/QrCodeImageExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2022 suxiaobu9, Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing ImageMagick;\nusing ImageMagick.Drawing;\n\nnamespace Net.Codecrete.QrCodeGenerator;\n\npublic static class QrCodeImageExtensions\n{\n    /// <summary>\n    /// Creates a image of this QR code.\n    /// <para>\n    /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n    /// equivalent to the width and height of each QR code module. Additionally, the number\n    /// of modules to add as a border to all four sides can be specified.\n    /// </para>\n    /// <para>\n    /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n    /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n    /// </para>\n    /// </summary>\n    /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n    /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n    /// <param name=\"background\">The background color.</param>\n    /// <param name=\"foreground\">The foreground color.</param>\n    /// <returns></returns>\n    /// <exception cref=\"ArgumentOutOfRangeException\"></exception>\n    public static MagickImage ToImage(this QrCode qrCode, int scale, int border, MagickColor foreground, MagickColor background)\n    {\n        if (scale <= 0)\n        {\n            throw new ArgumentOutOfRangeException(nameof(scale), \" Value out of range\");\n        }\n\n        if (border < 0)\n        {\n            throw new ArgumentOutOfRangeException(nameof(border), \" Value out of range\");\n        }\n\n        var size = qrCode.Size;\n        var dim = (uint)((size + border * 2) * scale);\n\n        if (dim > short.MaxValue)\n        {\n            throw new ArgumentOutOfRangeException(nameof(scale), \" Scale or border too large\");\n        }\n\n        var image = new MagickImage(background, dim, dim)\n        {\n            Format = MagickFormat.Png,\n        };\n\n        var drawables = new Drawables();\n        drawables.FillColor(foreground);\n\n        for (var x = 0; x < size; x++)\n        {\n            var pointerX = (x + border) * scale;\n\n            for (var y = 0; y < size; y++)\n            {\n                if (qrCode.GetModule(x, y))\n                {\n                    var pointerY = (y + border) * scale;\n                    drawables.Rectangle(pointerX, pointerY, pointerX + scale - 1, pointerY + scale - 1);\n                }\n            }\n        }\n        drawables.Draw(image);\n        return image;\n    }\n\n    /// <summary>\n    /// Creates a PNG image of this QR code and returns it as a byte array.\n    /// <para>\n    /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n    /// equivalent to the width and height of each QR code module. Additionally, the number\n    /// of modules to add as a border to all four sides can be specified.\n    /// </para>\n    /// <para>\n    /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n    /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n    /// </para>\n    /// </summary>\n    /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n    /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n    /// <param name=\"foreground\">The foreground color.</param>\n    /// <param name=\"background\">The background color.</param>\n    /// <returns></returns>\n    public static byte[] ToPng(this QrCode qrCode, int scale, int border, MagickColor foreground, MagickColor background)\n    {\n        using var image = qrCode.ToImage(scale, border, foreground, background);\n        return image.ToByteArray();\n    }\n\n    /// <summary>\n    /// Saves this QR code as a PNG file.\n    /// <para>\n    /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n    /// equivalent to the width and height of each QR code module. Additionally, the number\n    /// of modules to add as a border to all four sides can be specified.\n    /// </para>\n    /// <para>\n    /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n    /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n    /// </para>\n    /// </summary>\n    /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n    /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n    /// <param name=\"foreground\">The foreground color.</param>\n    /// <param name=\"background\">The background color.</param>\n    public static void SaveAsPng(this QrCode qrCode, string fileName, int scale, int border, MagickColor foreground, MagickColor background)\n    {\n        using var image = qrCode.ToImage(scale, border, foreground, background);\n        image.Write(fileName);\n    }\n}\n"
  },
  {
    "path": "Demo-ImageMagick/README.md",
    "content": "# Saving as PNG using Magick.NET\n\nThis example program shows how to create a QR code and save it as a PNG file using the [Magick.NET](https://github.com/dlemstra/Magick.NET) image manipulation library (based on ImageMagick).\n"
  },
  {
    "path": "Demo-ImageSharp/Demo-ImageSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <PackageId>Net.Codecrete.QrCodeGenerator.Demo</PackageId>\n    <Version>2.1.0</Version>\n    <Authors>Manuel Bleichenbacher, Project Nayuki</Authors>\n    <Product>QR Code Generator for .NET</Product>\n    <Description>Demo application for QR Code Generation</Description>\n    <Copyright>Copyright Manuel Bleichenbacher and Project Nayuki (MIT License)</Copyright>\n    <PackageLicenseUrl>https://opensource.org/licenses/MIT</PackageLicenseUrl>\n    <PackageProjectUrl>https://github.com/manuelbl/QrCodeGenerator</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/manuelbl/QrCodeGenerator</RepositoryUrl>\n    <Company>Codecrete</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Remove=\"heart.png\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"heart.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n    <PackageReference Include=\"SixLabors.ImageSharp.Drawing\" Version=\"2.1.7\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-ImageSharp/Demo-ImageSharp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30611.23\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo-ImageSharp\", \"Demo-ImageSharp.csproj\", \"{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {94BC47F9-3AE8-471A-AC3F-CDEFA1B21089}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-ImageSharp/Program.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    internal class Program\n    {\n        // Create a QR code and save it as a PNG.\n        internal static void Main()\n        {\n            HelloWorld();\n            QrCodeWithImage();\n        }\n\n\n        internal static void HelloWorld()\n        {\n            var text = \"Hello, world!\";\n            var filename = \"hello-world-QR.png\";\n\n            var qr = QrCode.EncodeText(text, QrCode.Ecc.Medium); // Create the QR code symbol\n            qr.SaveAsPng(filename, scale: 10, border: 4);\n\n            Console.WriteLine($\"The QR code has been saved as {Path.GetFullPath(filename)}\");\n        }\n\n        internal static void QrCodeWithImage()\n        {\n            var text = \"https://github.com/manuelbl/QrCodeGenerator\";\n            var filename = \"qr-code-with-image.png\";\n            var logoFilename = \"heart.png\";\n            const float logoWidth = 0.15f; // logo will have 15% the width of the QR code \n\n            var qr = QrCode.EncodeText(text, QrCode.Ecc.Medium);\n\n            using (var bitmap = qr.ToBitmap(scale: 10, border: 4))\n            using (var logo = Image.Load(logoFilename))\n            {\n                // resize logo\n                var w = (int)Math.Round(bitmap.Width * logoWidth);\n                logo.Mutate(logo => logo.Resize(w, 0));\n\n                // draw logo in center\n                var topLeft = new Point((bitmap.Width - logo.Width) / 2, (bitmap.Height - logo.Height) / 2);\n                bitmap.Mutate(img => img.DrawImage(logo, topLeft, 1));\n\n                // save as PNG\n                bitmap.SaveAsPng(filename);\n            }\n\n            Console.WriteLine($\"The QR code has been saved as {Path.GetFullPath(filename)}\");\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-ImageSharp/QrCodeBitmapExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Drawing.Processing;\nusing SixLabors.ImageSharp.PixelFormats;\nusing SixLabors.ImageSharp.Processing;\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    public static class QrCodeBitmapExtensions\n    {\n        /// <inheritdoc cref=\"ToBitmap(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static Image ToBitmap(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            // check arguments\n            if (scale <= 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Value out of range\");\n            }\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Value out of range\");\n            }\n\n            int size = qrCode.Size;\n            int dim = (size + border * 2) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large\");\n            }\n\n            // create bitmap\n            var image = new Image<Rgb24>(dim, dim);\n\n            image.Mutate(img =>\n            {\n                // draw background\n                img.Fill(background);\n\n                // draw modules\n                for (int y = 0; y < size; y++)\n                {\n                    for (int x = 0; x < size; x++)\n                    {\n                        if (qrCode.GetModule(x, y))\n                        {\n                            img.Fill(foreground, new Rectangle((x + border) * scale, (y + border) * scale, scale, scale));\n                        }\n                    }\n                }\n            });\n\n            return image;\n        }\n\n        /// <summary>\n        /// Creates a bitmap (raster image) of this QR code.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// The resulting bitmap uses the pixel format <see cref=\"PixelFormat.Format24bppRgb\"/>.\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static Image ToBitmap(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToBitmap(scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"ToPng(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            using var image = qrCode.ToBitmap(scale, border, foreground, background);\n            using var ms = new MemoryStream();\n            image.SaveAsPng(ms);\n            return ms.ToArray();\n        }\n\n        /// <summary>\n        /// Creates a PNG image of this QR code and returns it as a byte array.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToPng(scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"SaveAsPng(QrCode, string, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, Color foreground, Color background)\n        {\n            using Image image = qrCode.ToBitmap(scale, border, foreground, background);\n            image.SaveAsPng(filename);\n        }\n\n        /// <summary>\n        /// Saves this QR code as a PNG file.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)\n        {\n            qrCode.SaveAsPng(filename, scale, border, Color.Black, Color.White);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-ImageSharp/README.md",
    "content": "# Saving as PNG using ImageSharp\n\nThis example program shows how to create a QR code and save it as a PNG file using the [ImageSharp](https://github.com/SixLabors/ImageSharp) rasterization library.\n\nAdditionally, it demonstrates how to add an image in the center of the QR code.\n\nThe use of ImageSharp is recommended if the project already uses ImageSharp.\n"
  },
  {
    "path": "Demo-QRCode-Variety/Demo-QRCode-Variety.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Demo_Basic</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-QRCode-Variety/Demo-QRCode-Variety.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31903.59\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-QRCode-Variety\", \"Demo-QRCode-Variety.csproj\", \"{CE334406-7A4A-4455-889B-200DEBB6C08C}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{CE334406-7A4A-4455-889B-200DEBB6C08C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CE334406-7A4A-4455-889B-200DEBB6C08C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CE334406-7A4A-4455-889B-200DEBB6C08C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CE334406-7A4A-4455-889B-200DEBB6C08C}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {BB8EAC9D-6D83-4A9C-A867-300B9DD2B793}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-QRCode-Variety/Program.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    internal class Program\n    {\n        // The main application program.\n        internal static void Main()\n        {\n            DoBasicDemo();\n            DoVarietyDemo();\n            DoSegmentDemo();\n            DoMaskDemo();\n            DoBinaryDemo();\n        }\n\n        #region Demo suite\n\n        // Creates a single QR code, then writes it to an SVG file.\n        private static void DoBasicDemo()\n        {\n            const string text = \"Hello, world!\"; // User-supplied Unicode text\n            var errCorLvl = QrCode.Ecc.Low; // Error correction level\n\n            var qr = QrCode.EncodeText(text, errCorLvl); // Make the QR code symbol\n            SaveAsSvg(qr, \"hello-world-QR.svg\", border: 4); // Save as SVG\n        }\n\n\n        // Creates a variety of QR codes that exercise different features of the library, and writes each one to file.\n        private static void DoVarietyDemo()\n        {\n            // Numeric mode encoding (3.33 bits per digit)\n            var qr = QrCode.EncodeText(\"314159265358979323846264338327950288419716939937510\", QrCode.Ecc.Medium);\n            SaveAsSvg(qr, \"pi-digits-QR.svg\");\n\n            // Alphanumeric mode encoding (5.5 bits per character)\n            qr = QrCode.EncodeText(\"DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/\", QrCode.Ecc.High);\n            SaveAsSvg(qr, \"alphanumeric-QR.svg\", 2);\n\n            // Unicode text as UTF-8\n            qr = QrCode.EncodeText(\"こんにちwa、世界！ αβγδ\", QrCode.Ecc.Quartile);\n            SaveAsSvg(qr, \"unicode-QR.svg\", 3);\n\n            // Moderately large QR code using longer text (from Lewis Carroll's Alice in Wonderland)\n            qr = QrCode.EncodeText(\n                \"Alice was beginning to get very tired of sitting by her sister on the bank, \"\n                + \"and of having nothing to do: once or twice she had peeped into the book her sister was reading, \"\n                + \"but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice \"\n                + \"'without pictures or conversations?' So she was considering in her own mind (as well as she could, \"\n                + \"for the hot day made her feel very sleepy and stupid), whether the pleasure of making a \"\n                + \"daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly \"\n                + \"a White Rabbit with pink eyes ran close by her.\", QrCode.Ecc.High);\n            SaveAsSvg(qr, \"alice-wonderland-QR.svg\", 10);\n        }\n\n\n        // Creates QR codes with manually specified segments for better compactness.\n        private static void DoSegmentDemo()\n        {\n            // Illustration \"silver\"\n            const string silver0 = \"THE SQUARE ROOT OF 2 IS 1.\";\n            const string silver1 = \"41421356237309504880168872420969807856967187537694807317667973799\";\n            var qr = QrCode.EncodeText(silver0 + silver1, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"sqrt2-monolithic-QR.svg\", 3);\n\n            var segs = new List<QrSegment>\n            {\n                QrSegment.MakeAlphanumeric(silver0),\n                QrSegment.MakeNumeric(silver1)\n            };\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"sqrt2-segmented-QR.svg\", 3);\n\n            // Illustration \"golden\"\n            const string golden0 = \"Golden ratio φ = 1.\";\n            const string golden1 =\n                \"6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374\";\n            const string golden2 = \"......\";\n            qr = QrCode.EncodeText(golden0 + golden1 + golden2, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"phi-monolithic-QR.svg\", 5);\n\n            segs = new List<QrSegment>\n            {\n                QrSegment.MakeBytes(Encoding.UTF8.GetBytes(golden0)),\n                QrSegment.MakeNumeric(golden1),\n                QrSegment.MakeAlphanumeric(golden2)\n            };\n\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"phi-segmented-QR.svg\", 5);\n\n            // Illustration \"Madoka\": kanji, kana, Cyrillic, full-width Latin, Greek characters\n            const string madoka = \"「魔法少女まどか☆マギカ」って、　ИАИ　ｄｅｓｕ　κα？\";\n            qr = QrCode.EncodeText(madoka, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"madoka-utf8-QR.svg\", 4);\n\n            segs = new List<QrSegment> { QrSegmentAdvanced.MakeKanji(madoka) };\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Low);\n            SaveAsSvg(qr, \"madoka-kanji-QR.svg\", 4);\n        }\n\n\n        // Creates QR codes with the same size and contents but different mask patterns.\n        private static void DoMaskDemo()\n        {\n            // Project Nayuki URL\n            var segs = QrSegment.MakeSegments(\"https://www.nayuki.io/\");\n            var qr = QrCode.EncodeSegments(segs, QrCode.Ecc.High);\n            SaveAsSvg(qr, \"project-nayuki-automask-QR.svg\", 6);\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.High, QrCode.MinVersion, QrCode.MaxVersion, 3);  // Force mask 3\n            SaveAsSvg(qr, \"project-nayuki-mask3-QR.svg\", 6);\n\n            // Chinese text as UTF-8\n            segs = QrSegment.MakeSegments(\"維基百科（Wikipedia，聆聽i/ˌwɪkᵻˈpiːdi.ə/）是一個自由內容、公開編輯且多語言的網路百科全書協作計畫\");\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Medium, QrCode.MinVersion, QrCode.MaxVersion, 0);  // Force mask 0\n            SaveAsSvg(qr, \"unicode-mask0-QR.svg\");\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Medium, QrCode.MinVersion, QrCode.MaxVersion, 1);  // Force mask 1\n            SaveAsSvg(qr, \"unicode-mask1-QR.svg\");\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Medium, QrCode.MinVersion, QrCode.MaxVersion, 5);  // Force mask 5\n            SaveAsSvg(qr, \"unicode-mask5-QR.svg\");\n            qr = QrCode.EncodeSegments(segs, QrCode.Ecc.Medium, QrCode.MinVersion, QrCode.MaxVersion, 7);  // Force mask 7\n            SaveAsSvg(qr, \"unicode-mask7-QR.svg\");\n        }\n\n        private static void DoBinaryDemo()\n        {\n            // create binary data\n            byte[] data = {\n                0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00,\n                0x01, 0x00, 0x80, 0x01, 0x00, 0xff, 0xff, 0xff,\n                0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x0a,\n                0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,\n                0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x4c,\n                0x01, 0x00, 0x3b\n            };\n            var qr = QrCode.EncodeBinary(data, QrCode.Ecc.Medium);\n            SaveAsSvg(qr, \"binary.svg\");\n        }\n\n        #endregion\n\n        private static void SaveAsSvg(QrCode qrCode, string filname, int border = 3)\n        {\n            string svg = qrCode.ToSvgString(border); // Convert to SVG XML code\n            File.WriteAllText(filname, svg, Encoding.UTF8); // Write image to file\n        }\n\n    }\n}\n"
  },
  {
    "path": "Demo-QRCode-Variety/README.md",
    "content": "# Demonstration of various QR code\n\nThis example program creates a series of QR code and saves them as SVG files.\n\nAside from a simple standard case, the examples demonstrates the use of:\n\n- different encodings (numeric, alpha-numeric, Unicode)\n- different error correction levels\n- using multiple segments\n- using different masks\n- encoding binary data\n"
  },
  {
    "path": "Demo-SkiaSharp/Demo-SkiaSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <PackageId>Net.Codecrete.QrCodeGenerator.Demo</PackageId>\n    <Version>2.1.0</Version>\n    <Authors>Manuel Bleichenbacher, Project Nayuki</Authors>\n    <Product>QR Code Generator for .NET</Product>\n    <Description>Demo application for QR Code Generation</Description>\n    <Copyright>Copyright Manuel Bleichenbacher and Project Nayuki (MIT License)</Copyright>\n    <PackageLicenseUrl>https://opensource.org/licenses/MIT</PackageLicenseUrl>\n    <PackageProjectUrl>https://github.com/manuelbl/QrCodeGenerator</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/manuelbl/QrCodeGenerator</RepositoryUrl>\n    <Company>Codecrete</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n    <PackageReference Include=\"SkiaSharp\" Version=\"2.*\" />\n    <PackageReference Include=\"SkiaSharp.NativeAssets.Linux\" Version=\"2.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-SkiaSharp/Demo-SkiaSharp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30611.23\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo-SkiaSharp\", \"Demo-SkiaSharp.csproj\", \"{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {94BC47F9-3AE8-471A-AC3F-CDEFA1B21089}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-SkiaSharp/Program.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    internal class Program\n    {\n        // Create a QR code and save it as a PNG.\n        internal static void Main()\n        {\n            var text = \"Hello, world!\";\n            var filename = \"hello-world-QR.png\";\n\n            var qr = QrCode.EncodeText(text, QrCode.Ecc.Medium); // Create the QR code symbol\n            qr.SaveAsPng(filename, scale: 10, border: 4);\n\n            Console.WriteLine($\"The QR code has been saved as {Path.GetFullPath(filename)}\");\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-SkiaSharp/QrCodeBitmapExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing SkiaSharp;\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    public static class QrCodeBitmapExtensions\n    {\n        /// <inheritdoc cref=\"ToBitmap(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static SKBitmap ToBitmap(this QrCode qrCode, int scale, int border, SKColor foreground, SKColor background)\n        {\n            // check arguments\n            if (scale <= 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Value out of range\");\n            }\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Value out of range\");\n            }\n\n            int size = qrCode.Size;\n            int dim = (size + border * 2) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large\");\n            }\n\n            // create bitmap\n            SKBitmap bitmap = new SKBitmap(dim, dim, SKColorType.Rgb888x, SKAlphaType.Opaque);\n\n            using (SKCanvas canvas = new SKCanvas(bitmap))\n            {\n                // draw background\n                using (SKPaint paint = new SKPaint { Color = background })\n                {\n                    canvas.DrawRect(0, 0, dim, dim, paint);\n                }\n\n                // draw modules\n                using (SKPaint paint = new SKPaint { Color = foreground })\n                {\n                    for (int y = 0; y < size; y++)\n                    {\n                        for (int x = 0; x < size; x++)\n                        {\n                            if (qrCode.GetModule(x, y))\n                            {\n                                canvas.DrawRect((x + border) * scale, (y + border) * scale, scale, scale, paint);\n                            }\n                        }\n                    }\n                }\n            }\n\n            return bitmap;\n        }\n\n        /// <summary>\n        /// Creates a bitmap (raster image) of this QR code.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// The resulting bitmap uses the pixel format <see cref=\"PixelFormat.Format24bppRgb\"/>.\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static SKBitmap ToBitmap(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToBitmap(scale, border, SKColors.Black, SKColors.White);\n        }\n\n        /// <inheritdoc cref=\"ToPng(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border, SKColor foreground, SKColor background)\n        {\n            using SKBitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 90);\n            return data.ToArray();\n        }\n\n        /// <summary>\n        /// Creates a PNG image of this QR code and returns it as a byte array.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToPng(scale, border, SKColors.Black, SKColors.White);\n        }\n\n        /// <inheritdoc cref=\"SaveAsPng(QrCode, string, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, SKColor foreground, SKColor background)\n        {\n            using SKBitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 90);\n            using FileStream stream = File.OpenWrite(filename);\n            data.SaveTo(stream);\n        }\n\n        /// <summary>\n        /// Saves this QR code as a PNG file.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)\n        {\n            qrCode.SaveAsPng(filename, scale, border, SKColors.Black, SKColors.White);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-SkiaSharp/README.md",
    "content": "# Saving as PNG using SkiaSharp\n\nThis example program shows how to create a QR code and save it as a PNG file using the [SkiaSharp](https://github.com/mono/SkiaSharp) rasterization library.\n\nThe use of SkiaSharp is recommended for multi-platform and all non-Windows projects.\n"
  },
  {
    "path": "Demo-System-Drawing/Demo-System-Drawing.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <PackageId>Net.Codecrete.QrCodeGenerator.Demo</PackageId>\n    <Version>2.1.0</Version>\n    <Authors>Manuel Bleichenbacher, Project Nayuki</Authors>\n    <Product>QR Code Generator for .NET</Product>\n    <Description>Demo application for QR Code Generation</Description>\n    <Copyright>Copyright Manuel Bleichenbacher and Project Nayuki (MIT License)</Copyright>\n    <PackageLicenseUrl>https://opensource.org/licenses/MIT</PackageLicenseUrl>\n    <PackageProjectUrl>https://github.com/manuelbl/QrCodeGenerator</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/manuelbl/QrCodeGenerator</RepositoryUrl>\n    <Company>Codecrete</Company>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n    <PackageReference Include=\"System.Drawing.Common\" Version=\"5.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-System-Drawing/Demo-System-Drawing.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30611.23\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo-System-Drawing\", \"Demo-System-Drawing.csproj\", \"{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BBB1A4A6-D82E-4233-8FC9-9300F9576FD2}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {94BC47F9-3AE8-471A-AC3F-CDEFA1B21089}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-System-Drawing/Program.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    internal class Program\n    {\n        // Create a QR code and save it as a PNG.\n        internal static void Main()\n        {\n            var text = \"Hello, world!\";\n            var filename = \"hello-world-QR.png\";\n\n            var qr = QrCode.EncodeText(text, QrCode.Ecc.Medium); // Create the QR code symbol\n            qr.SaveAsPng(filename, scale: 10, border: 4);\n\n            Console.WriteLine($\"The QR code has been saved as {Path.GetFullPath(filename)}\");\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-System-Drawing/QrCodeBitmapExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// <c>QrCode</c> extension for creating bitmaps using <c>System.Drawing</c> classes.\n    /// <para>\n    /// In .NET 6 and later versions, this extension will only work on Windows.\n    /// </para>\n    /// </summary>\n    public static class QrCodeBitmapExtensions\n    {\n        /// <inheritdoc cref=\"ToBitmap(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static Bitmap ToBitmap(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            // check arguments\n            if (scale <= 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Value out of range\");\n            }\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Value out of range\");\n            }\n\n            int size = qrCode.Size;\n            int dim = (size + border * 2) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large\");\n            }\n\n            // create bitmap\n            Bitmap bitmap = new Bitmap(dim, dim, PixelFormat.Format24bppRgb);\n\n            using (Graphics g = Graphics.FromImage(bitmap))\n            {\n                Draw(qrCode, g, scale, border, foreground, background);\n            }\n\n            return bitmap;\n        }\n\n        /// <summary>\n        /// Creates a bitmap (raster image) of this QR code.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// The resulting bitmap uses the pixel format <see cref=\"PixelFormat.Format24bppRgb\"/>.\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static Bitmap ToBitmap(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToBitmap(scale, border, Color.Black, Color.White);\n        }\n\n        /// <summary>\n        /// Draws this QR code into the specified graphics context.\n        /// <para>\n        /// The QR code is drawn at offset (0, 0). Use <see cref=\"Graphics.TranslateTransform(float, float)\"/>\n        /// to draw it at a different position.\n        /// </para>\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>Draw(graphics, scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// </summary>\n        /// <param name=\"graphics\">The graphics context to draw in.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        public static void Draw(this QrCode qrCode, Graphics graphics, float scale, float border)\n        {\n            Draw(qrCode, graphics, scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"Draw(QrCode, Graphics, float, float)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void Draw(this QrCode qrCode, Graphics graphics, float scale, float border, Color foreground, Color background)\n        {\n            if (scale <= 0 || border < 0)\n            {\n                return;\n            }\n\n            int size = qrCode.Size;\n            float dim = (size + border * 2) * scale;\n\n            // draw background\n            if (background != Color.Transparent)\n            {\n                using SolidBrush brush = new SolidBrush(background);\n                graphics.FillRectangle(brush, 0, 0, dim, dim);\n            }\n\n            // draw modules\n            using (SolidBrush brush = new SolidBrush(foreground))\n            {\n                for (int y = 0; y < size; y++)\n                {\n                    for (int x = 0; x < size; x++)\n                    {\n                        if (qrCode.GetModule(x, y))\n                        {\n                            graphics.FillRectangle(brush, (x + border) * scale, (y + border) * scale, scale, scale);\n                        }\n                    }\n                }\n            }\n        }\n\n        /// <inheritdoc cref=\"ToPng(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            using Bitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using MemoryStream ms = new MemoryStream();\n            bitmap.Save(ms, ImageFormat.Png);\n            return ms.ToArray();\n        }\n\n        /// <summary>\n        /// Creates a PNG image of this QR code and returns it as a byte array.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToPng(scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"SaveAsPng(QrCode, string, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, Color foreground, Color background)\n        {\n            using Bitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            bitmap.Save(filename, ImageFormat.Png);\n        }\n\n        /// <summary>\n        /// Saves this QR code as a PNG file.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)\n        {\n            qrCode.SaveAsPng(filename, scale, border, Color.Black, Color.White);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-System-Drawing/README.md",
    "content": "# Saving as PNG using System.Drawing\n\nThis example program shows how to create a QR code and save it as a PNG file using the *System.Drawing* classes.\n\nWith .NET 6 and later, *System.Drawing* has become a Windows only technology. While *System.Drawing* is available on macOS and Linux on earlier .NET version, its use is only recommended for Windows.\n"
  },
  {
    "path": "Demo-VCard/Program.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * \n * Demo creating a QR code containing a vCard.\n *\n */\nusing MixERP.Net.VCards;\nusing MixERP.Net.VCards.Models;\nusing MixERP.Net.VCards.Serializer;\nusing MixERP.Net.VCards.Types;\nusing Net.Codecrete.QrCodeGenerator;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace VCardDemo\n{\n    class Program\n    {\n        static void Main()\n        {\n            var vcard = new VCard\n            {\n                Version = VCardVersion.V3,\n                FirstName = \"Robin\",\n                LastName = \"Hood\",\n                Organization = \"Sherwood Inc.\",\n                Addresses = new List<Address>\n                {\n                    new Address {\n                        Type = AddressType.Work,\n                        Street = \"The Major Oak\",\n                        Locality = \"Sherwood Forest\",\n                        PostalCode = \"NG21 9RN\",\n                        Country = \"United Kingdom\",\n                    }\n                },\n                Telephones = new List<Telephone>\n                {\n                    new Telephone {\n                        Type = TelephoneType.Work,\n                        Number = \"+441623677321\"\n                    }\n                },\n                Emails = new List<Email>\n                {\n                    new Email\n                    {\n                        Type = EmailType.Smtp,\n                        EmailAddress = \"robin.hood@sherwoodinc.co.uk\"\n                    }\n                }\n            };\n\n            var qrCode = QrCode.EncodeText(vcard.Serialize(), QrCode.Ecc.Medium);\n            File.WriteAllText(\"vcard-qrcode.svg\", qrCode.ToSvgString(3));\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-VCard/VCardDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"MixERP.Net.VCards\" Version=\"1.0.7\" />\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-VCard/VCardDemo.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.31702.278\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"VCardDemo\", \"VCardDemo.csproj\", \"{5DE9E10C-E608-4661-AAE9-ABCF46C0F2F5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{5DE9E10C-E608-4661-AAE9-ABCF46C0F2F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5DE9E10C-E608-4661-AAE9-ABCF46C0F2F5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5DE9E10C-E608-4661-AAE9-ABCF46C0F2F5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5DE9E10C-E608-4661-AAE9-ABCF46C0F2F5}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {7E8A810C-1062-422C-B511-9634C165EB47}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-WinForms/Demo-WinForms.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <UseWindowsForms>True</UseWindowsForms>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "Demo-WinForms/Demo-WinForms.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31903.59\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-WinForms\", \"Demo-WinForms.csproj\", \"{A3AD57D8-ED64-40DB-8EB1-F4E1B8EF18FD}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A3AD57D8-ED64-40DB-8EB1-F4E1B8EF18FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A3AD57D8-ED64-40DB-8EB1-F4E1B8EF18FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A3AD57D8-ED64-40DB-8EB1-F4E1B8EF18FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A3AD57D8-ED64-40DB-8EB1-F4E1B8EF18FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {0CCE4B82-DC41-4CAA-9643-0130009B5A28}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-WinForms/Form1.Designer.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    partial class Form1\n    {\n        /// <summary>\n        ///  Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        ///  Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        ///  Required method for Designer support - do not modify\n        ///  the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.qrCodeControl = new Net.Codecrete.QrCodeGenerator.QrCodeControl();\n            this.qrCodeText = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.errorCorrectionCombo = new System.Windows.Forms.ComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.copyButton = new System.Windows.Forms.Button();\n            this.borderNumericUpDown = new System.Windows.Forms.NumericUpDown();\n            ((System.ComponentModel.ISupportInitialize)(this.borderNumericUpDown)).BeginInit();\n            this.SuspendLayout();\n            // \n            // qrCodeControl\n            // \n            this.qrCodeControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.qrCodeControl.BinaryData = null;\n            this.qrCodeControl.BorderWidth = 3;\n            this.qrCodeControl.ErrorCorrection = 2;\n            this.qrCodeControl.Location = new System.Drawing.Point(32, 32);\n            this.qrCodeControl.Name = \"qrCodeControl\";\n            this.qrCodeControl.Size = new System.Drawing.Size(712, 344);\n            this.qrCodeControl.TabIndex = 0;\n            this.qrCodeControl.TextData = \"Test\";\n            // \n            // qrCodeText\n            // \n            this.qrCodeText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.qrCodeText.Location = new System.Drawing.Point(32, 420);\n            this.qrCodeText.Name = \"qrCodeText\";\n            this.qrCodeText.Size = new System.Drawing.Size(712, 39);\n            this.qrCodeText.TabIndex = 1;\n            this.qrCodeText.Text = \"QR code text\";\n            this.qrCodeText.TextChanged += new System.EventHandler(this.QrCodeText_TextChanged);\n            // \n            // label1\n            // \n            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(32, 488);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(187, 32);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Error Correction:\";\n            // \n            // errorCorrectionCombo\n            // \n            this.errorCorrectionCombo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\n            this.errorCorrectionCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.errorCorrectionCombo.FormattingEnabled = true;\n            this.errorCorrectionCombo.Items.AddRange(new object[] {\n            \"Low\",\n            \"Medium\",\n            \"Quartile\",\n            \"High\"});\n            this.errorCorrectionCombo.Location = new System.Drawing.Point(225, 485);\n            this.errorCorrectionCombo.Name = \"errorCorrectionCombo\";\n            this.errorCorrectionCombo.Size = new System.Drawing.Size(186, 40);\n            this.errorCorrectionCombo.TabIndex = 3;\n            this.errorCorrectionCombo.SelectedIndexChanged += new System.EventHandler(this.ErrorCorrectionCombo_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(496, 488);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(90, 32);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Border:\";\n            // \n            // copyButton\n            // \n            this.copyButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.copyButton.Location = new System.Drawing.Point(498, 568);\n            this.copyButton.Name = \"copyButton\";\n            this.copyButton.Size = new System.Drawing.Size(246, 46);\n            this.copyButton.TabIndex = 6;\n            this.copyButton.Text = \"Copy QR Code\";\n            this.copyButton.UseVisualStyleBackColor = true;\n            this.copyButton.Click += new System.EventHandler(this.CopyButton_Click);\n            // \n            // borderNumericUpDown\n            // \n            this.borderNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.borderNumericUpDown.Location = new System.Drawing.Point(592, 486);\n            this.borderNumericUpDown.Name = \"borderNumericUpDown\";\n            this.borderNumericUpDown.Size = new System.Drawing.Size(152, 39);\n            this.borderNumericUpDown.TabIndex = 7;\n            this.borderNumericUpDown.Value = new decimal(new int[] {\n            3,\n            0,\n            0,\n            0});\n            this.borderNumericUpDown.ValueChanged += new System.EventHandler(this.BorderNumericUpDown_ValueChanged);\n            // \n            // Form1\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 32F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(774, 649);\n            this.Controls.Add(this.borderNumericUpDown);\n            this.Controls.Add(this.copyButton);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.errorCorrectionCombo);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.qrCodeText);\n            this.Controls.Add(this.qrCodeControl);\n            this.Name = \"Form1\";\n            this.Text = \"QR Code\";\n            ((System.ComponentModel.ISupportInitialize)(this.borderNumericUpDown)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private QrCodeControl qrCodeControl;\n        private System.Windows.Forms.TextBox qrCodeText;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ComboBox errorCorrectionCombo;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Button copyButton;\n        private System.Windows.Forms.NumericUpDown borderNumericUpDown;\n    }\n}\n"
  },
  {
    "path": "Demo-WinForms/Form1.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Windows.Forms;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    public partial class Form1 : Form\n    {\n        public Form1()\n        {\n            InitializeComponent();\n\n            errorCorrectionCombo.SelectedIndex = 1;\n\n            qrCodeControl.TextData = qrCodeText.Text;\n            qrCodeControl.ErrorCorrection = errorCorrectionCombo.SelectedIndex;\n            qrCodeControl.BorderWidth = (int)borderNumericUpDown.Value;\n        }\n\n        private void QrCodeText_TextChanged(object sender, EventArgs e)\n        {\n            qrCodeControl.TextData = qrCodeText.Text;\n        }\n\n        private void ErrorCorrectionCombo_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            qrCodeControl.ErrorCorrection = errorCorrectionCombo.SelectedIndex;\n        }\n\n        private void BorderNumericUpDown_ValueChanged(object sender, EventArgs e)\n        {\n            qrCodeControl.BorderWidth = (int)borderNumericUpDown.Value;\n        }\n\n        private void CopyButton_Click(object sender, EventArgs e)\n        {\n            qrCodeControl.CopyToClipboard();\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-WinForms/Form1.resx",
    "content": "﻿<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Demo-WinForms/Program.cs",
    "content": "//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Windows.Forms;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    internal static class Program\n    {\n        /// <summary>\n        ///  The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.SetHighDpiMode(HighDpiMode.SystemAware);\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new Form1());\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-WinForms/QrCodeBitmapExtensions.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.IO;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// <c>QrCode</c> extension for creating bitmaps using <c>System.Drawing</c> classes.\n    /// <para>\n    /// In .NET 6 and later versions, this extension will only work on Windows.\n    /// </para>\n    /// </summary>\n    public static class QrCodeBitmapExtensions\n    {\n        /// <inheritdoc cref=\"ToBitmap(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static Bitmap ToBitmap(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            // check arguments\n            if (scale <= 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Value out of range\");\n            }\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Value out of range\");\n            }\n\n            int size = qrCode.Size;\n            int dim = (size + border * 2) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large\");\n            }\n\n            // create bitmap\n            Bitmap bitmap = new Bitmap(dim, dim, PixelFormat.Format24bppRgb);\n\n            using (Graphics g = Graphics.FromImage(bitmap))\n            {\n                Draw(qrCode, g, scale, border, foreground, background);\n            }\n\n            return bitmap;\n        }\n\n        /// <summary>\n        /// Creates a bitmap (raster image) of this QR code.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// The resulting bitmap uses the pixel format <see cref=\"PixelFormat.Format24bppRgb\"/>.\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static Bitmap ToBitmap(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToBitmap(scale, border, Color.Black, Color.White);\n        }\n\n        /// <summary>\n        /// Draws this QR code into the specified graphics context.\n        /// <para>\n        /// The QR code is drawn at offset (0, 0). Use <see cref=\"Graphics.TranslateTransform(float, float)\"/>\n        /// to draw it at a different position.\n        /// </para>\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>Draw(graphics, scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// </summary>\n        /// <param name=\"graphics\">The graphics context to draw in.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        public static void Draw(this QrCode qrCode, Graphics graphics, float scale, float border)\n        {\n            Draw(qrCode, graphics, scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"Draw(QrCode, Graphics, float, float)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void Draw(this QrCode qrCode, Graphics graphics, float scale, float border, Color foreground, Color background)\n        {\n            if (scale <= 0 || border < 0)\n            {\n                return;\n            }\n\n            int size = qrCode.Size;\n            float dim = (size + border * 2) * scale;\n\n            // draw background\n            if (background != Color.Transparent)\n            {\n                using SolidBrush brush = new SolidBrush(background);\n                graphics.FillRectangle(brush, 0, 0, dim, dim);\n            }\n\n            // draw modules\n            using (SolidBrush brush = new SolidBrush(foreground))\n            {\n                for (int y = 0; y < size; y++)\n                {\n                    for (int x = 0; x < size; x++)\n                    {\n                        if (qrCode.GetModule(x, y))\n                        {\n                            graphics.FillRectangle(brush, (x + border) * scale, (y + border) * scale, scale, scale);\n                        }\n                    }\n                }\n            }\n        }\n\n        /// <inheritdoc cref=\"ToPng(QrCode, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border, Color foreground, Color background)\n        {\n            using Bitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            using MemoryStream ms = new MemoryStream();\n            bitmap.Save(ms, ImageFormat.Png);\n            return ms.ToArray();\n        }\n\n        /// <summary>\n        /// Creates a PNG image of this QR code and returns it as a byte array.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <returns>The created bitmap representing this QR code.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static byte[] ToPng(this QrCode qrCode, int scale, int border)\n        {\n            return qrCode.ToPng(scale, border, Color.Black, Color.White);\n        }\n\n        /// <inheritdoc cref=\"SaveAsPng(QrCode, string, int, int)\"/>\n        /// <param name=\"background\">The background color.</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, Color foreground, Color background)\n        {\n            using Bitmap bitmap = qrCode.ToBitmap(scale, border, foreground, background);\n            bitmap.Save(filename, ImageFormat.Png);\n        }\n\n        /// <summary>\n        /// Saves this QR code as a PNG file.\n        /// <para>\n        /// The <paramref name=\"scale\"/> parameter specifies the scale of the image, which is\n        /// equivalent to the width and height of each QR code module. Additionally, the number\n        /// of modules to add as a border to all four sides can be specified.\n        /// </para>\n        /// <para>\n        /// For example, <c>SaveAsPng(\"qrcode.png\", scale: 10, border: 4)</c> means to pad the QR code with 4 white\n        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.\n        /// </para>\n        /// <para>\n        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).\n        /// </para>\n        /// </summary>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"border\">The number of border modules to add to each of the four sides.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"scale\"/> is 0 or negative, <paramref name=\"border\"/> is negative\n        /// or the resulting image is wider than 32,768 pixels.</exception>\n        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)\n        {\n            qrCode.SaveAsPng(filename, scale, border, Color.Black, Color.White);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-WinForms/QrCodeControl.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Custom control for displaying a QR code\n    /// </summary>\n    public class QrCodeControl : Control\n    {\n\n        private string _textData;\n        private byte[] _binaryData;\n        private int _errorCorrection;\n        private int _borderWidth;\n\n        public QrCodeControl()\n        {\n            _textData = \"Test\";\n            _errorCorrection = 2;\n            _borderWidth = 3;\n            ResizeRedraw = true;\n        }\n\n        public string TextData\n        {\n            get\n            {\n                if (_binaryData != null)\n                {\n                    return \"binary data\";\n                }\n                return _textData;\n            }\n\n            set\n            {\n                _textData = value;\n                _binaryData = null;\n                if (_textData == null)\n                {\n                    _textData = \"\";\n                }\n                Invalidate();\n            }\n        }\n\n        public byte[] BinaryData\n        {\n            get { return _binaryData; }\n            set\n            {\n                _binaryData = value;\n                _textData = null;\n                if (_binaryData == null)\n                {\n                    _binaryData = new byte[0];\n                }\n                Invalidate();\n            }\n        }\n\n        public int ErrorCorrection\n        {\n            get { return _errorCorrection; }\n            set\n            {\n                _errorCorrection = Math.Min(Math.Max(value, 0), 3);\n                Invalidate();\n            }\n        }\n\n        public int BorderWidth\n        {\n            get { return _borderWidth; }\n            set\n            {\n                _borderWidth = Math.Max(value, 0);\n                Invalidate();\n            }\n        }\n\n\n        private static readonly QrCode.Ecc[] errorCorrectionLevels = { QrCode.Ecc.Low, QrCode.Ecc.Medium, QrCode.Ecc.Quartile, QrCode.Ecc.High };\n\n        /// <summary>\n        /// Creates the <c>QrCode</c> instance with the current settings.\n        /// </summary>\n        /// <returns></returns>\n        private QrCode CreateQrCode()\n        {\n            QrCode qrCode;\n            var ecc = errorCorrectionLevels[_errorCorrection];\n\n            if (_binaryData != null)\n            {\n                qrCode = QrCode.EncodeBinary(_binaryData, ecc);\n            }\n            else\n            {\n                qrCode = QrCode.EncodeText(_textData, ecc);\n            }\n\n            return qrCode;\n        }\n\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n\n            int size = Math.Min(Width, Height);\n            var graphics = e.Graphics;\n\n            var qrCode = CreateQrCode();\n            graphics.TranslateTransform((Width - size) / 2, (Height - size) / 2);\n            qrCode.Draw(graphics, scale: size / (float)(qrCode.Size + 2 * _borderWidth), border: _borderWidth,\n                foreground: Color.Black, background: Color.White);\n        }\n\n        /// <summary>\n        /// Copy the QR code to the clipboard.\n        /// <para>\n        /// The QR code is copied as a bitmap. It uses a scaling factor of 20 to\n        /// prevent a blurry result from upscaling.\n        /// </para>\n        /// </summary>\n        public void CopyToClipboard()\n        {\n            DataObject dataObject = new DataObject();\n            var qrCode = CreateQrCode();\n            dataObject.SetData(DataFormats.Bitmap, qrCode.ToBitmap(20, _borderWidth));\n            Clipboard.SetDataObject(dataObject);\n        }\n    }\n}"
  },
  {
    "path": "Demo-WinForms/README.md",
    "content": "# Windows Forms example application\n\nThis example application shows how to use the QR code library in a Windows Forms application:\n\n- `QrCodeControl` is a custom control that can be used in any `Form`.\n- The control also implements copying the QR code to the clipboard.\n\n![Windows Forms QR Code](QrCodeWinForms.png)\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/App.xaml",
    "content": "<!-- Swiss QR Bill Generator for .NET -->\n<!-- Copyright (c) 2022 Manuel Bleichenbacher -->\n<!-- Licensed under MIT License -->\n<!-- https://opensource.org/licenses/MIT -->\n\n<Application\n    x:Class=\"Net.Codecrete.QrCodeGenerator.Demo.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Net.Codecrete.QrCodeGenerator.Demo\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <XamlControlsResources xmlns=\"using:Microsoft.UI.Xaml.Controls\" />\n                <!-- Other merged dictionaries here -->\n            </ResourceDictionary.MergedDictionaries>\n            <!-- Other app resources here -->\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/App.xaml.cs",
    "content": "﻿//\n// Swiss QR Bill Generator for .NET\n// Copyright (c) 2022 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.UI;\nusing Microsoft.UI.Windowing;\nusing Microsoft.UI.Xaml;\nusing System;\nusing System.Runtime.InteropServices;\nusing Windows.Graphics;\nusing WinRT.Interop;\nusing Windows.Win32;\nusing Windows.Win32.Foundation;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo;\n\n/// <summary>\n/// QR Code application.\n/// </summary>\npublic partial class App : Application\n{\n    /// <summary>\n    /// Initializes the singleton application object.  This is the first line of authored code\n    /// executed, and as such is the logical equivalent of main() or WinMain().\n    /// </summary>\n    public App()\n    {\n        InitializeComponent();\n    }\n\n    /// <summary>\n    /// Invoked when the application is launched.\n    /// </summary>\n    /// <param name=\"args\">Details about the launch request and process.</param>\n    protected override void OnLaunched(LaunchActivatedEventArgs args)\n    {\n        m_window = new MainWindow\n        {\n            Title = \"QR Code\"\n        };\n\n        // Set initial windows size.\n        Resize(500, 600);\n\n        m_window.Activate();\n    }\n\n    private Window m_window;\n\n    private void Resize(int x, int y)\n    {\n        var scalingFactor = GetDpiScalingFactor();\n        GetAppWindow().Resize(new SizeInt32((int)(x * scalingFactor), (int)(y * scalingFactor)));\n    }\n\n    private AppWindow GetAppWindow()\n    {\n        IntPtr hWnd = WindowNative.GetWindowHandle(m_window);\n        WindowId wndId = Win32Interop.GetWindowIdFromWindow(hWnd);\n        return AppWindow.GetFromWindowId(wndId);\n    }\n\n    private double GetDpiScalingFactor()\n    {\n        IntPtr hWnd = WindowNative.GetWindowHandle(m_window);\n        var dpi = PInvoke.GetDpiForWindow((HWND)hWnd);\n        return (float)dpi / 96;\n    }\n}\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Demo-WinUI.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>\n    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n    <Platforms>x86;x64;ARM64</Platforms>\n    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>\n    <PublishProfile>win-$(Platform).pubxml</PublishProfile>\n    <UseWinUI>true</UseWinUI>\n    <EnableMsixTooling>true</EnableMsixTooling>\n    <AssemblyName>QrCodeWinUIDemo</AssemblyName>\n    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>\n    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>\n    <AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>\n    <GenerateTestArtifacts>True</GenerateTestArtifacts>\n    <AppxBundle>Never</AppxBundle>\n    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\"QrCodeControl.xaml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" Version=\"8.3.2\" />\n    <PackageReference Include=\"Microsoft.Graphics.Win2D\" Version=\"1.3.0\" />\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\" Version=\"0.3.106\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.WindowsAppSDK\" Version=\"1.6.241114003\" />\n    <PackageReference Include=\"Microsoft.Windows.SDK.BuildTools\" Version=\"10.0.26100.1742\" />\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.1.0\" />\n    <Manifest Include=\"$(ApplicationManifest)\" />\n  </ItemGroup>\n\n  <!-- \n    Defining the \"Msix\" ProjectCapability here allows the Single-project MSIX Packaging\n    Tools extension to be activated for this project even if the Windows App SDK Nuget\n    package has not yet been restored.\n  -->\n  <ItemGroup Condition=\"'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'\">\n    <ProjectCapability Include=\"Msix\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Page Update=\"QrCodeControl.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n\n  <!-- \n    Defining the \"HasPackageAndPublishMenuAddedByProject\" property here allows the Solution \n    Explorer \"Package and Publish\" context menu entry to be enabled for this project even if \n    the Windows App SDK Nuget package has not yet been restored.\n  -->\n  <PropertyGroup Condition=\"'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'\">\n    <HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/MainViewModel.cs",
    "content": "﻿//\n// Swiss QR Bill Generator for .NET\n// Copyright (c) 2022 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing System;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel.DataTransfer;\nusing Windows.Storage.Streams;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo;\n\n/// <summary>\n/// View model for MainWindow\n/// </summary>\npublic partial class MainViewModel : ObservableObject\n{\n    /// <summary>\n    /// QR code text\n    /// </summary>\n    [ObservableProperty]\n    string text = \"Hello, world!\";\n\n    /// <summary>\n    /// QR code error correction level\n    /// </summary>\n    [ObservableProperty]\n    QrCode.Ecc errorCorrection = QrCode.Ecc.Medium;\n\n    /// <summary>\n    /// Width of border around QR code (in QR code pixels)\n    /// </summary>\n    [ObservableProperty]\n    int borderWidth = 3;\n\n    private readonly Tuple<string, QrCode.Ecc>[] errorCorrectionLevels_ =\n    {\n        new Tuple<string, QrCode.Ecc>(\"Low\", QrCode.Ecc.Low),\n        new Tuple<string, QrCode.Ecc>(\"Medium\", QrCode.Ecc.Medium),\n        new Tuple<string, QrCode.Ecc>(\"Quartile\", QrCode.Ecc.Quartile),\n        new Tuple<string, QrCode.Ecc>(\"High\", QrCode.Ecc.High)\n    };\n\n    /// <summary>\n    /// List of error correction levels\n    /// </summary>\n    public Tuple<string, QrCode.Ecc>[] ErrorCorrectionLevels => errorCorrectionLevels_;\n\n    /// <summary>\n    /// Copy the QR code to the clipboard (as a PNG image).\n    /// </summary>\n    /// <returns></returns>\n    [RelayCommand]\n    async Task CopyToClipboard()\n    {\n        var qrCode = QrCode.EncodeText(Text, ErrorCorrection);\n\n        // Don't close stream; it won't work anymore\n        var stream = new InMemoryRandomAccessStream();\n        await QrCodeDrawing.WriteAsPng(stream, qrCode, 20, BorderWidth);\n\n        var dataPackage = new DataPackage();\n        dataPackage.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));\n        Clipboard.SetContent(dataPackage);\n    }\n}\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/MainWindow.xaml",
    "content": "<!-- Swiss QR Bill Generator for .NET -->\n<!-- Copyright (c) 2022 Manuel Bleichenbacher -->\n<!-- Licensed under MIT License -->\n<!-- https://opensource.org/licenses/MIT -->\n\n<Window\n    x:Class=\"Net.Codecrete.QrCodeGenerator.Demo.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Net.Codecrete.QrCodeGenerator.Demo\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n\n    <Grid x:Name=\"RootElement\" Background=\"#fff7f7f7\">\n        <Grid Margin=\"20,16,20,16\">\n\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"1*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"1*\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <local:QrCodeControl x:Name=\"QrCodeControl\" Grid.Row=\"0\" Margin=\"0,0,0,16\"\n                Text=\"{x:Bind ViewModel.Text, Mode=TwoWay}\" ErrorCorrection=\"{x:Bind ViewModel.ErrorCorrection, Mode=TwoWay}\" BorderWidth=\"{x:Bind ViewModel.BorderWidth, Mode=TwoWay}\" />\n            <TextBox x:Name=\"QrCodeTextBox\" Text=\"{x:Bind ViewModel.Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Grid.Row=\"1\" Padding=\"5,3\" Margin=\"0,6\"/>\n            <VariableSizedWrapGrid Grid.Row=\"2\" Orientation=\"Horizontal\">\n                <StackPanel Orientation=\"Horizontal\">\n                    <TextBlock HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Padding=\"0,5,12,5\">Error Correction:</TextBlock>\n                    <ComboBox x:Name=\"ErrorCorrectionCombo\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Width=\"140\" Margin=\"0,6,24,6\"\n                          ItemsSource=\"{x:Bind ViewModel.ErrorCorrectionLevels, Mode=OneTime}\" DisplayMemberPath=\"Item1\"  SelectedValuePath=\"Item2\" SelectedValue=\"{x:Bind ViewModel.ErrorCorrection, Mode=TwoWay}\" />\n                </StackPanel>\n                <StackPanel Orientation=\"Horizontal\">\n                    <TextBlock HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Padding=\"0,5,12,5\">Border Width:</TextBlock>\n                    <NumberBox x:Name=\"BorderWidthTextBox\" Value=\"{x:Bind ViewModel.BorderWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                               SpinButtonPlacementMode=\"Inline\" Minimum=\"0\" Maximum=\"999\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Width=\"150\" Margin=\"0,6\" Padding=\"5,3\"/>\n                </StackPanel>\n            </VariableSizedWrapGrid>\n            <Button x:Name=\"CopyButton\" Command=\"{x:Bind ViewModel.CopyToClipboardCommand}\" Content=\"Copy QR Code\" Grid.Row=\"3\" Margin=\"0,6,0,0\"\n                    VerticalAlignment=\"Center\" HorizontalAlignment=\"Right\" Padding=\"10,3\" Grid.ColumnSpan=\"4\" />\n        </Grid>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/MainWindow.xaml.cs",
    "content": "//\n// Swiss QR Bill Generator for .NET\n// Copyright (c) 2022 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.UI.Xaml;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo;\n\n/// <summary>\n/// Main window\n/// </summary>\npublic sealed partial class MainWindow : Window\n{\n\n    public MainWindow()\n    {\n        InitializeComponent();\n        RootElement.Loaded += RootElement_Loaded;\n    }\n\n    public MainViewModel ViewModel { get; } = new MainViewModel();\n\n    private void RootElement_Loaded(object sender, RoutedEventArgs e)\n    {\n        // The combo box needs help to set the initial value\n        ErrorCorrectionCombo.SelectedValue = ViewModel.ErrorCorrection;\n    }\n}\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/NativeMethods.txt",
    "content": "GetDpiForWindow\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n  IgnorableNamespaces=\"uap rescap\">\n\n  <Identity\n    Name=\"c77c87b7-6566-498b-9b78-4b9785310689\"\n    Publisher=\"CN=Manuel\"\n    Version=\"1.0.0.0\" />\n\n  <Properties>\n    <DisplayName>Qr Code Generator</DisplayName>\n    <PublisherDisplayName>Manuel</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.17763.0\" MaxVersionTested=\"10.0.19041.0\" />\n    <TargetDeviceFamily Name=\"Windows.Desktop\" MinVersion=\"10.0.17763.0\" MaxVersionTested=\"10.0.19041.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$targetentrypoint$\">\n      <uap:VisualElements\n        DisplayName=\"QR Code Generator\"\n        Description=\"QR Code Generator Demo\"\n        BackgroundColor=\"transparent\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\" />\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <rescap:Capability Name=\"runFullTrust\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Properties/PublishProfiles/win-arm64.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <Platform>ARM64</Platform>\n    <RuntimeIdentifier>win-arm64</RuntimeIdentifier>\n    <PublishDir>bin\\$(Configuration)\\$(TargetFramework)\\$(RuntimeIdentifier)\\publish\\</PublishDir>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>False</PublishSingleFile>\n    <PublishReadyToRun Condition=\"'$(Configuration)' == 'Debug'\">False</PublishReadyToRun>\n    <PublishReadyToRun Condition=\"'$(Configuration)' != 'Debug'\">True</PublishReadyToRun>\n   <!-- \n    See https://github.com/microsoft/CsWinRT/issues/373\n    <PublishTrimmed>True</PublishTrimmed>\n    -->\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Properties/PublishProfiles/win-x64.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <Platform>x64</Platform>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n    <PublishDir>bin\\$(Configuration)\\$(TargetFramework)\\$(RuntimeIdentifier)\\publish\\</PublishDir>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>False</PublishSingleFile>\n    <PublishReadyToRun Condition=\"'$(Configuration)' == 'Debug'\">False</PublishReadyToRun>\n    <PublishReadyToRun Condition=\"'$(Configuration)' != 'Debug'\">True</PublishReadyToRun>\n   <!-- \n    See https://github.com/microsoft/CsWinRT/issues/373\n    <PublishTrimmed>True</PublishTrimmed>\n    -->\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Properties/PublishProfiles/win-x86.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <Platform>x86</Platform>\n    <RuntimeIdentifier>win-x86</RuntimeIdentifier>\n    <PublishDir>bin\\$(Configuration)\\$(TargetFramework)\\$(RuntimeIdentifier)\\publish\\</PublishDir>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>False</PublishSingleFile>\n    <PublishReadyToRun Condition=\"'$(Configuration)' == 'Debug'\">False</PublishReadyToRun>\n    <PublishReadyToRun Condition=\"'$(Configuration)' != 'Debug'\">True</PublishReadyToRun>\n   <!-- \n    See https://github.com/microsoft/CsWinRT/issues/373\n    <PublishTrimmed>True</PublishTrimmed>\n    -->\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"Demo-WinUI (Package)\": {\n      \"commandName\": \"MsixPackage\"\n    },\n    \"Demo-WinUI (Unpackaged)\": {\n      \"commandName\": \"Project\"\n    }\n  }\n}"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/QrCodeControl.xaml",
    "content": "<!-- Swiss QR Bill Generator for .NET -->\n<!-- Copyright (c) 2022 Manuel Bleichenbacher -->\n<!-- Licensed under MIT License -->\n<!-- https://opensource.org/licenses/MIT -->\n\n<UserControl\n    x:Class=\"Net.Codecrete.QrCodeGenerator.Demo.QrCodeControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:canvas=\"using:Microsoft.Graphics.Canvas.UI.Xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n        <canvas:CanvasControl x:Name=\"qrCodeCanvas\" Grid.Row=\"0\" Grid.Column=\"0\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Draw=\"QrCode_Draw\"/>\n\n</UserControl>\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/QrCodeControl.xaml.cs",
    "content": "//\n// Swiss QR Bill Generator for .NET\n// Copyright (c) 2022 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.Graphics.Canvas.UI.Xaml;\nusing Microsoft.UI;\nusing Microsoft.UI.Xaml;\nusing Microsoft.UI.Xaml.Controls;\nusing System;\nusing System.Numerics;\nusing Windows.Foundation;\nusing Windows.UI;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo;\n\n/// <summary>\n/// Control for displaying a QR code.\n/// </summary>\npublic sealed partial class QrCodeControl : UserControl\n{\n    public QrCodeControl()\n    {\n        InitializeComponent();\n    }\n\n    /// <summary>\n    /// Text contained in QR code.\n    /// </summary>\n    public string Text\n    {\n        get { return (string)GetValue(TextProperty); }\n        set { SetValue(TextProperty, value); }\n    }\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\n        nameof(Text),\n        typeof(string),\n        typeof(QrCodeControl),\n        new PropertyMetadata(\"\", (d, args) => { (d as QrCodeControl).qrCodeCanvas.Invalidate(); })\n    );\n\n    /// <summary>\n    /// Width of border around QR code (in QR pixels)\n    /// </summary>\n    public int BorderWidth\n    {\n        get { return (int)GetValue(BorderWidthProperty); }\n        set { SetValue(BorderWidthProperty, value); }\n    }\n\n    public static readonly DependencyProperty BorderWidthProperty = DependencyProperty.Register(\n        nameof(BorderWidth),\n        typeof(int),\n        typeof(QrCodeControl),\n        new PropertyMetadata(3, (d, args) => { (d as QrCodeControl).qrCodeCanvas.Invalidate(); })\n    );\n\n    /// <summary>\n    /// Error correction level\n    /// </summary>\n    public QrCode.Ecc ErrorCorrection\n    {\n        get { return (QrCode.Ecc)GetValue(ErrorCorrectionProperty); }\n        set { SetValue(ErrorCorrectionProperty, value); }\n    }\n\n    public static readonly DependencyProperty ErrorCorrectionProperty = DependencyProperty.Register(\n        nameof(ErrorCorrection),\n        typeof(QrCode.Ecc),\n        typeof(QrCodeControl),\n        new PropertyMetadata(QrCode.Ecc.Medium, (d, args) => { (d as QrCodeControl).qrCodeCanvas.Invalidate(); })\n    );\n\n    /// <summary>\n    /// QR code background color\n    /// </summary>\n    public Color QrCodeBackgroundColor\n    {\n        get { return (Color)GetValue(QrCodeBackgroundColorProperty); }\n        set { SetValue(QrCodeBackgroundColorProperty, value); }\n    }\n\n    public static readonly DependencyProperty QrCodeBackgroundColorProperty = DependencyProperty.Register(\n        nameof(QrCodeBackgroundColor),\n        typeof(Color),\n        typeof(QrCodeControl),\n        new PropertyMetadata(Colors.White, (d, args) => { (d as QrCodeControl).qrCodeCanvas.Invalidate(); })\n    );\n\n    /// <summary>\n    /// QR code pixel color\n    /// </summary>\n    public Color QrCodePixelColor\n    {\n        get { return (Color)GetValue(QrCodePixelColorProperty); }\n        set { SetValue(QrCodePixelColorProperty, value); }\n    }\n\n    public static readonly DependencyProperty QrCodePixelColorProperty = DependencyProperty.Register(\n        nameof(QrCodePixelColor),\n        typeof(Color),\n        typeof(QrCodeControl),\n        new PropertyMetadata(Colors.Black, (d, args) => { (d as QrCodeControl).qrCodeCanvas.Invalidate(); })\n    );\n\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        var dim = Math.Min(finalSize.Width, finalSize.Height);\n        qrCodeCanvas.Arrange(new Rect(new Point((finalSize.Width - dim) / 2, (finalSize.Height - dim) / 2), new Size(dim, dim)));\n        return finalSize;\n    }\n\n    protected override Size MeasureOverride(Size availableSize)\n    {\n        var dim = Math.Min(availableSize.Width, availableSize.Height);\n        if (double.IsPositiveInfinity(dim))\n            dim = 3000;\n        return new Size(dim, dim);\n    }\n\n    private void QrCode_Draw(CanvasControl sender, CanvasDrawEventArgs args)\n    {\n        var code = QrCode.EncodeText(Text, ErrorCorrection);\n        var scale = (float)(sender.ActualWidth / (code.Size + 2 * BorderWidth));\n        args.DrawingSession.Transform = Matrix3x2.CreateScale(scale, scale);\n        QrCodeDrawing.Draw(code, args.DrawingSession, BorderWidth, QrCodePixelColor, QrCodeBackgroundColor);\n    }\n}\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/QrCodeDrawing.cs",
    "content": "﻿//\n// Swiss QR Bill Generator for .NET\n// Copyright (c) 2022 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing Microsoft.Graphics.Canvas;\nusing Microsoft.UI;\nusing System;\nusing System.Numerics;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.Storage.Streams;\nusing Windows.UI;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo;\n\npublic class QrCodeDrawing\n{\n    /// <summary>\n    /// Draws the QR code in the specified drawing context.\n    /// <para>\n    /// The QR code is drawn with the top left corner of the border at (0, 0).\n    /// Each module (QR code pixel) will be drawn with 1 unit wide and tall.\n    /// If a different position or size is desired, the drawing context's transformation\n    /// matrix can be setup accordingly.\n    /// </para>\n    /// </summary>\n    /// <param name=\"qrCode\">The QR code.</param>\n    /// <param name=\"drawingSession\">The drawing session.</param>\n    /// <param name=\"borderWidth\"></param>\n    /// <param name=\"foreground\"></param>\n    /// <param name=\"background\"></param>\n    public static void Draw(QrCode qrCode, CanvasDrawingSession drawingSession, int borderWidth, Color foreground, Color? background)\n    {\n        int size = qrCode.Size;\n\n        // draw the background\n        if (background != null)\n        {\n            drawingSession.FillRectangle(new Rect(0, 0, size + 2 * borderWidth, size + 2 * borderWidth), (Color)background);\n        }\n\n        // draw the modules\n        for (int y = 0; y < size; y++)\n        {\n            for (int x = 0; x < size; x++)\n            {\n                if (qrCode.GetModule(x, y))\n                {\n                    var rect = new Rect(x + borderWidth, y + borderWidth, 1, 1);\n                    drawingSession.FillRectangle(rect, foreground);\n                }\n            }\n        }\n    }\n\n    /// <summary>\n    /// Writes a PNG for the specified QR code.\n    /// <para>\n    /// To achieve a crisp bitmap without any anti-aliasing, the bitmap is sized such\n    /// that each QR code module is multiple pixels tall and wide.\n    /// The resulting size depends on the QR code size;\n    /// it is (qr-code-size + 2 * border-width) pixels tall and wide.\n    /// </para>\n    /// </summary>\n    /// <param name=\"stream\">The stream to write to</param>\n    /// <param name=\"qrCode\">The QR code.</param>\n    /// <param name=\"moduleSize\">The size of each module (QR code pixel), in pixels</param>\n    /// <param name=\"borderWidth\">The width of the border around the QR code, in multiples of a single module (QR code pixel).</param>\n    public static Task WriteAsPng(IRandomAccessStream stream, QrCode qrCode, int moduleSize, int borderWidth = 3)\n    {\n        return WriteAsPng(stream, qrCode, moduleSize, borderWidth, Colors.Black, Colors.White);\n    }\n\n    /// <inheritdoc cref=\"CreateBitmapAsPng(QrCode, int, int)\"/>\n    /// <param name=\"foreground\">The forground color.</param>\n    /// <param name=\"background\">The background color.</param>\n    /// <returns>PNG image</returns>\n    public static async Task WriteAsPng(IRandomAccessStream stream, QrCode qrCode, int moduleSize, int borderWidth, Color foreground, Color background)\n    {\n        // create offscreen bitmap\n        int size = moduleSize * (qrCode.Size + 2 * borderWidth);\n        var device = CanvasDevice.GetSharedDevice();\n        var offscreen = new CanvasRenderTarget(device, size, size, 96);\n\n        using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())\n        {\n            // draw QR code\n            ds.Clear(background);\n            ds.Transform = Matrix3x2.CreateScale(moduleSize, moduleSize);\n            Draw(qrCode, ds, borderWidth, foreground, null);\n        }\n\n        // create PNG image\n        await offscreen.SaveAsync(stream, CanvasBitmapFileFormat.Png);\n    }\n\n}\n"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI/app.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"Demo-WinUI.app\"/>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!--The ID below informs the system that this application is compatible with OS features first introduced in Windows 8. \n      For more info see https://docs.microsoft.com/windows/win32/sysinfo/targeting-your-application-at-windows-8-1 \n      \n      It is also necessary to support features in unpackaged applications, for example the custom titlebar implementation.-->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n    </application>\n  </compatibility>\n  \n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <!-- The combination of below two tags have the following effect:\n           1) Per-Monitor for >= Windows 10 Anniversary Update\n           2) System < Windows 10 Anniversary Update\n      -->\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/PM</dpiAware>\n      <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2, PerMonitor</dpiAwareness>\n    </windowsSettings>\n  </application>\n</assembly>"
  },
  {
    "path": "Demo-WinUI/Demo-WinUI.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.33122.133\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-WinUI\", \"Demo-WinUI\\Demo-WinUI.csproj\", \"{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|ARM64 = Release|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|ARM64.Deploy.0 = Debug|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x64.Build.0 = Debug|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x86.Build.0 = Debug|x86\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|ARM64.Deploy.0 = Release|ARM64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x64.ActiveCfg = Release|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x64.Build.0 = Release|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x64.Deploy.0 = Release|x64\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x86.ActiveCfg = Release|x86\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x86.Build.0 = Release|x86\n\t\t{28CEBE86-06C4-42B3-BEC9-8A8C40D2C83A}.Release|x86.Deploy.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {8B01C7CA-A20C-4B84-815A-3F3519AACB3A}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-WinUI/README.md",
    "content": "# WinUI 3 example application\n\nThis example application shows how to use the QR code library in a WinUI 3 application:\n\n- [`QrCodeControl`](Demo-WinUI/QrCodeControl.xaml.cs) is a user control for displaying a QR code.\n- [`QrCodeDrawing`](Demo-WinUI/QrCodeDrawing.cs) is a class for drawing a QR code to [Win2D](https://github.com/microsoft/Win2D) `CanvasDrawingSession` (resolution independent) or to a PNG file.\n- Copying a QR code to the clipboard is also shown.\n\n![WinUI QR Code App](WinUI-QR-Code-App.png)\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/App.xaml",
    "content": "﻿<Application x:Class=\"Demo_WindowsPresentationFoundation.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:Demo_WindowsPresentationFoundation\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/App.xaml.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System.Windows;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/AssemblyInfo.cs",
    "content": "//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System.Windows;\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n                                     //(used if a resource is not found in the page,\n                                     // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n                                              //(used if a resource is not found in the page,\n                                              // app, or any theme specific resource dictionaries)\n)]\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/Demo-WindowsPresentationFoundation.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Demo</RootNamespace>\n    <Nullable>enable</Nullable>\n    <UseWPF>true</UseWPF>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Net.Codecrete.QrCodeGenerator\" Version=\"2.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/Demo-WindowsPresentationFoundation.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31903.59\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo-WindowsPresentationFoundation\", \"Demo-WindowsPresentationFoundation.csproj\", \"{6E8E5080-AF6E-4B4F-89A8-098B0BE6A912}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{6E8E5080-AF6E-4B4F-89A8-098B0BE6A912}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6E8E5080-AF6E-4B4F-89A8-098B0BE6A912}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6E8E5080-AF6E-4B4F-89A8-098B0BE6A912}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6E8E5080-AF6E-4B4F-89A8-098B0BE6A912}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {36CE72FB-2954-40CC-B7E3-D3C496C61DF5}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"Net.Codecrete.QrCodeGenerator.Demo.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:Net.Codecrete.QrCodeGenerator.Demo\"\n        mc:Ignorable=\"d\"\n        Title=\"QR Code\" Height=\"400\" Width=\"600\"\n        Background=\"{DynamicResource {x:Static SystemColors.ControlBrushKey}}\"\n        DataContext=\"{Binding RelativeSource={RelativeSource Self}}\">\n    <Grid Margin=\"20,16,20,16\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n        </Grid.ColumnDefinitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"1*\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Image x:Name=\"QrCodeImage\" Grid.Row=\"0\" Margin=\"0,0,0,16\"\n               RenderOptions.BitmapScalingMode=\"NearestNeighbor\" RenderOptions.EdgeMode=\"Aliased\"/>\n        <TextBox x:Name=\"QrCodeTextBox\" Text=\"{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}\"\n                 Grid.Row=\"1\" Padding=\"5,3\" Margin=\"0,6\"/>\n        <WrapPanel Grid.Row=\"2\">\n            <Label Content=\"Error Correction:\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Padding=\"0,5,12,5\"/>\n            <ComboBox x:Name=\"ErrorCorrectionCombo\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Width=\"100\" Margin=\"0,6,24,6\"\n                  ItemsSource=\"{Binding Path=ErrorCorrectionLevels}\" DisplayMemberPath=\"Item1\" SelectedValuePath=\"Item2\" SelectedValue=\"{Binding Path=ErrorCorrection}\"/>\n            <Label Content=\"Border Width:\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Padding=\"0,5,12,5\"/>\n            <TextBox x:Name=\"BorderWidthTextBox\" Text=\"{Binding Path=BorderWidth, UpdateSourceTrigger=PropertyChanged}\"\n                 HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Width=\"60\" Margin=\"0,6\" Padding=\"5,3\"/>\n        </WrapPanel>\n        <Button x:Name=\"CopyButton\" Content=\"Copy QR Code\" Grid.Row=\"3\" Margin=\"0,6,0,0\"\n                VerticalAlignment=\"Center\" HorizontalAlignment=\"Right\" Padding=\"10,3\" Click=\"CopyButton_Click\" Grid.ColumnSpan=\"4\"/>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/MainWindow.xaml.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System;\nusing System.Windows;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        private string _text = \"QR code text\";\n        private int _borderWidth = 3;\n        private QrCode.Ecc _errorCorrection = QrCode.Ecc.Medium;\n        private readonly Tuple<string, QrCode.Ecc>[] _errorCorrectionLevels =\n        {\n            new Tuple<string, QrCode.Ecc>(\"Low\", QrCode.Ecc.Low),\n            new Tuple<string, QrCode.Ecc>(\"Medium\", QrCode.Ecc.Medium),\n            new Tuple<string, QrCode.Ecc>(\"Quartile\", QrCode.Ecc.Quartile),\n            new Tuple<string, QrCode.Ecc>(\"High\", QrCode.Ecc.High)\n        };\n\n        public MainWindow()\n        {\n            InitializeComponent();\n            UpdateQrCode();\n        }\n\n        public int BorderWidth\n        {\n            get { return _borderWidth; }\n            set\n            {\n                _borderWidth = value;\n                UpdateQrCode();\n            }\n        }\n\n        public string Text\n        {\n            get { return _text; }\n            set\n            {\n                _text = value;\n                UpdateQrCode();\n            }\n        }\n\n        public Tuple<string, QrCode.Ecc>[] ErrorCorrectionLevels\n        {\n            get { return _errorCorrectionLevels; }\n        }\n\n        public QrCode.Ecc ErrorCorrection\n        {\n            get { return _errorCorrection; }\n            set\n            {\n                _errorCorrection = value;\n                UpdateQrCode();\n            }\n        }\n\n        private void UpdateQrCode()\n        {\n            var qrCode = QrCode.EncodeText(_text, ErrorCorrection);\n            QrCodeImage.Source = QrCodeDrawing.CreateDrawing(qrCode, 192, BorderWidth);\n        }\n\n        private void CopyButton_Click(object sender, RoutedEventArgs e)\n        {\n            // put the QR code on the clipboard as a bitmap\n            var qrCode = QrCode.EncodeText(_text, ErrorCorrection);\n            var bitmap = QrCodeDrawing.CreateBitmapImage(qrCode, 20, BorderWidth);\n            var dataObject = new DataObject();\n            dataObject.SetData(DataFormats.Bitmap, bitmap);\n            Clipboard.SetDataObject(dataObject);\n        }\n    }\n}\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/QrCodeDrawing.cs",
    "content": "﻿//\n// QR code generator library (.NET)\n// https://github.com/manuelbl/QrCodeGenerator\n//\n// Copyright (c) 2021 Manuel Bleichenbacher\n// Licensed under MIT License\n// https://opensource.org/licenses/MIT\n//\n\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nnamespace Net.Codecrete.QrCodeGenerator.Demo\n{\n    public class QrCodeDrawing\n    {\n        /// <summary>\n        /// Create a resolution independent drawing for the specified QR code.\n        /// <para>\n        /// The drawing can be used as an image's source, or for printing.\n        /// </para>\n        /// </summary>\n        /// <param name=\"qrCode\">The QR code.</param>\n        /// <param name=\"size\">The width and height of the resulting drawing, including the border (in dip).</param>\n        /// <param name=\"borderWidth\">The width of the border, in multiples of a single module (QR code pixel)</param>\n        /// <returns>The device independent drawing.</returns>\n        public static DrawingImage CreateDrawing(QrCode qrCode, double size, int borderWidth = 3)\n        {\n            return CreateDrawing(qrCode, size, borderWidth, Colors.Black, Colors.White);\n        }\n\n        /// <inheritdoc cref=\"CreateDrawing(QrCode, double, int)\"/>\n        /// <param name=\"foreground\"></param>\n        /// <param name=\"background\"></param>\n        /// <returns>The device independent drawing.</returns>\n        public static DrawingImage CreateDrawing(QrCode qrCode, double size, int borderWidth, Color foreground, Color? background)\n        {\n            var group = new DrawingGroup();\n            using (var drawingContext = group.Open())\n            {\n                var backgroundBrush = background != null ? new SolidColorBrush((Color)background) : null;\n                var foregroundBrush = new SolidColorBrush(foreground);\n                double scale = size / (qrCode.Size + 2 * borderWidth);\n                drawingContext.PushTransform(new ScaleTransform(scale, scale));\n                Draw(qrCode, drawingContext, borderWidth, foregroundBrush, backgroundBrush);\n                drawingContext.Pop();\n            }\n\n            var image = new DrawingImage(group);\n            image.Freeze();\n            return image;\n        }\n\n        /// <summary>\n        /// Draws the QR code in the specified drawing context.\n        /// <para>\n        /// The QR code is drawn with the top left corner of the border at (0, 0).\n        /// Each module (QR code pixel) will be drawn with 1 unit wide and tall.\n        /// If a different position or size is desired, the drawing context's transformation\n        /// matrix can be setup accordingly.\n        /// </para>\n        /// </summary>\n        /// <param name=\"qrCode\">The QR code.</param>\n        /// <param name=\"drawingContext\">The drawing context.</param>\n        /// <param name=\"borderWidth\"></param>\n        /// <param name=\"foreground\"></param>\n        /// <param name=\"background\"></param>\n        public static void Draw(QrCode qrCode, DrawingContext drawingContext, int borderWidth, Brush foreground, Brush? background)\n        {\n            int size = qrCode.Size;\n\n            // draw the background\n            if (background != null)\n            {\n                drawingContext.DrawRectangle(background, null, new Rect(0, 0, size + 2 * borderWidth, size + 2 * borderWidth));\n            }\n\n            // draw the modules\n            for (int y = 0; y < size; y++)\n            {\n                for (int x = 0; x < size; x++)\n                {\n                    if (qrCode.GetModule(x, y))\n                    {\n                        var rect = new Rect(x + borderWidth, y + borderWidth, 1, 1);\n                        drawingContext.DrawRectangle(foreground, null, rect);\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Create a bitmap for the specified QR code.\n        /// <para>\n        /// To achieve a crisp bitmap without any anti-aliasing, the bitmap is sized such\n        /// that each QR code module is multiple pixels tall and wide.\n        /// The resulting size depends on the QR code size;\n        /// it is (qr-code-size + 2 * border-width) pixels tall and wide.\n        /// </para>\n        /// </summary>\n        /// <param name=\"qrCode\">The QR code.</param>\n        /// <param name=\"moduleSize\">The size of each module (QR code pixel), in pixels</param>\n        /// <param name=\"borderWidth\">The width of the border around the QR code, in multiples of a single module (QR code pixel).</param>\n        /// <returns>The bitmap.</returns>\n        public static BitmapSource CreateBitmapImage(QrCode qrCode, int moduleSize, int borderWidth = 3)\n        {\n            return CreateBitmapImage(qrCode, moduleSize, borderWidth, Colors.Black, Colors.White);\n        }\n\n        /// <inheritdoc cref=\"CreateBitmapImage(QrCode, int, int)\"/>\n        /// <param name=\"foreground\">The forground color.</param>\n        /// <param name=\"background\">The background color.</param>\n        /// <returns>The bitmap.</returns>\n        public static BitmapSource CreateBitmapImage(QrCode qrCode, int moduleSize, int borderWidth, Color foreground, Color background)\n        {\n            var drawingVisual = new AliasedDrawingVisual();\n            int size = qrCode.Size + 2 * borderWidth;\n\n            using (var drawingContext = drawingVisual.RenderOpen())\n            {\n                var foregroundBrush = new SolidColorBrush(foreground);\n                var backgroundBrush = new SolidColorBrush(background);\n                drawingContext.PushTransform(new ScaleTransform(moduleSize, moduleSize));\n                drawingContext.DrawRectangle(backgroundBrush, null, new Rect(0, 0, size, size));\n                Draw(qrCode, drawingContext, borderWidth, foregroundBrush, null);\n            }\n\n            var bitmap = new RenderTargetBitmap(size * moduleSize, size * moduleSize, 96, 96, PixelFormats.Pbgra32);\n            bitmap.Render(drawingVisual);\n            return bitmap;\n        }\n\n        /// <summary>\n        /// Drawing visual using aliased edge mode.\n        /// <para>\n        /// This subclass is needed because the <c>VisualEdgeMode</c> property is protected\n        /// and <see cref=\"RenderOptions\"/> doesn't work for <c>DrawingVisual</c>.\n        /// </para>\n        /// </summary>\n        class AliasedDrawingVisual : DrawingVisual\n        {\n            public AliasedDrawingVisual()\n            {\n                VisualEdgeMode = EdgeMode.Aliased;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/README.md",
    "content": "# Windows Presentation Foundation (WPF) example application\n\nThis example application shows how to use the QR code library in a WPF application:\n\n- `QrCodeDrawing` is a class for either creating a resolution independent `DrawingVisual` or a bitmap. Both can be displayed in an `Image` control\n- The control also implements copying the QR code to the clipboard.\n\n![WPF QR Code](Qr-Code-App.png)\n"
  },
  {
    "path": "Demo-WindowsPresentationFoundation/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t<assemblyIdentity version=\"1.0.0.0\" name=\"QR Code\"/>\n\n\t<application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n\t\t<windowsSettings>\n\t\t\t<!-- dpiAwareness is recognized only on Win10 1607(aka RS1)+ -->\n\t\t\t<dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2,PerMonitor</dpiAwareness>\n\t\t\t<!-- Prior to Win10 1607, WPF really doesn't support per-mon DPI. Do not specify true/pm - use just true -->\n\t\t\t<dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n\t\t</windowsSettings>\n\t</application>\n\n</assembly>\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Manuel Bleichenbacher\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "QrCodeGenerator/BitArrayExtensions.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Extension methods for the <see cref=\"BitArray\"/> class.\n    /// </summary>\n    public static class BitArrayExtensions\n    {\n\n        /// <summary>\n        /// Appends the specified number bits of the specified value to this bit array.\n        /// <para>\n        /// The least significant bits of the specified value are added. They are appended in reverse order,\n        /// from the most significant to the least significant one, i.e. bits 0 to <i>len-1</i>\n        /// are appended in the order <i>len-1</i>, <i>len-2</i> ... 1, 0.\n        /// </para>\n        /// <para>\n        /// Requires 0 &#x2264; len &#x2264; 31, and 0 &#x2264; val &lt; 2<sup>len</sup>.\n        /// </para>\n        /// </summary>\n        /// <param name=\"bitArray\">The BitArray instance that this method extends.</param>\n        /// <param name=\"val\">The value to append.</param>\n        /// <param name=\"len\">The number of low-order bits in the value to append.</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Value or number of bits is out of range.</exception>\n        public static void AppendBits(this BitArray bitArray, uint val, int len)\n        {\n            if (len < 0 || len > 31)\n            {\n                throw new ArgumentOutOfRangeException(nameof(len), \"'len' out of range\");\n            }\n\n            if (val >> len != 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(val), \"'val' out of range\");\n            }\n\n            var bitLength = bitArray.Length;\n            bitArray.Length = bitLength + len;\n            var mask = 1U << (len - 1);\n            for (var i = bitLength; i < bitLength + len; i++) // Append bit by bit\n            {\n                if ((val & mask) != 0)\n                {\n                    bitArray.Set(i, true);\n                }\n\n                mask >>= 1;\n            }\n        }\n\n\n        /// <summary>\n        /// Appends the content of the specified bit array to the end of this array.\n        /// </summary>\n        /// <param name=\"bitArray\">The BitArray instance that this method extends.</param>\n        /// <param name=\"otherArray\">The bit array to append</param>\n        /// <exception cref=\"ArgumentNullException\">If <c>bitArray</c> is <c>null</c>.</exception>\n        public static void AppendData(this BitArray bitArray, BitArray otherArray)\n        {\n            Objects.RequireNonNull(otherArray);\n            var bitLength = bitArray.Length;\n            bitArray.Length = bitLength + otherArray.Length;\n            for (var i = 0; i < otherArray.Length; i++, bitLength++)  // Append bit by bit\n            {\n                if (otherArray[i])\n                {\n                    bitArray.Set(bitLength, true);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Extracts the specified number of bits at the specified index in this bit array.\n        /// <para>\n        /// The bit at index <paramref name=\"index\"/> becomes the most significant bit of the result,\n        /// The bit at index <paramref name=\"index\"/> + <paramref name=\"len\"/> - 1 becomes the least significant bit.\n        /// </para>\n        /// <para>\n        /// Requires 0 &#x2264; <em>len</em> &#x2264; 31, 0 &#x2264; <em>index</em>, and <em>index + len</em> &#x2264; <em>bit array length</em>.\n        /// </para>\n        /// </summary>\n        /// <param name=\"bitArray\">The BitArray instance that this method extends.</param>\n        /// <param name=\"index\">The index of the first bit to extract.</param>\n        /// <param name=\"len\">The number of bits to extract.</param>\n        /// <returns>The extracted bits as an unsigned integer.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Index or length is out of range.</exception>\n        public static uint ExtractBits(this BitArray bitArray, int index, int len)\n        {\n            if (len < 0 || len > 31)\n            {\n                throw new ArgumentOutOfRangeException(nameof(len), \"'len' out of range\");\n            }\n\n            if (index < 0 || index + len > bitArray.Length)\n            {\n                throw new ArgumentOutOfRangeException(nameof(index), \"'index' out of range\");\n            }\n\n            uint result = 0;\n            for (var i = 0; i < len; i++)\n            {\n                result <<= 1;\n                if (bitArray.Get(index + i))\n                {\n                    result |= 1;\n                }\n            }\n\n            return result;\n        }\n    }\n}\n\n"
  },
  {
    "path": "QrCodeGenerator/DataTooLongException.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// The exception that is thrown when the supplied data does not fit in the QR code.\n    /// </summary>\n    /// <remarks>\n    /// Ways to handle this exception include:\n    /// <ul>\n    ///   <li>Decrease the error correction level (if it was greater than <see cref=\"QrCode.Ecc.Low\"/>)</li>\n    ///   <li>Increase the <c>maxVersion</c> argument (if it was less than <see cref=\"QrCode.MaxVersion\"/>).\n    ///       This advice applies to the advanced factory functions\n    ///       <see cref=\"QrCode.EncodeSegments\"/> and\n    ///       <see cref=\"QrSegmentAdvanced.MakeSegmentsOptimally(string, QrCode.Ecc, int, int)\"/> only.\n    ///       Other factory functions automatically try all versions up to <see cref=\"QrCode.MaxVersion\"/>.</li>\n    ///   <li>Split the text into several segments and encode them using different encoding modes\n    ///     (see <see cref=\"QrSegmentAdvanced.MakeSegmentsOptimally(string, QrCode.Ecc, int, int)\"/>.)</li>\n    ///   <li>Make the text or binary data shorter.</li>\n    ///   <li>Change the text to fit the character set of a particular segment mode (e.g. alphanumeric).</li>\n    ///   <li>Reject the data and notify the caller/user.</li>\n    /// </ul>\n    /// </remarks>\n    /// <seealso cref=\"QrCode.EncodeText(string, QrCode.Ecc)\"/>\n    /// <seealso cref=\"QrCode.EncodeBinary(byte[], QrCode.Ecc)\"/>\n    /// <seealso cref=\"QrCode.EncodeSegments(List{QrSegment}, QrCode.Ecc, int, int, int, bool)\"/>\n    /// <seealso cref=\"QrSegmentAdvanced.MakeSegmentsOptimally(string, QrCode.Ecc, int, int)\"/>\n    public class DataTooLongException : ArgumentException\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DataTooLongException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message that describes the error.</param>\n        public DataTooLongException(string message)\n            : base(message)\n        { }\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/Graphics.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Globalization;\nusing System.Text;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    internal class Graphics\n    {\n        internal Graphics(int size, bool[,] modules)\n        {\n            _size = size;\n            _modules = modules;\n        }\n\n        private readonly int _size;\n\n        // The modules of this QR code (false = light, true = dark).\n        // Immutable after constructor finishes.\n        private readonly bool[,] _modules;\n\n        internal string ToSvgString(int border, string foreground, string background)\n        {\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Border must be non-negative\");\n            }\n\n            var dim = _size + border * 2;\n            var sb = new StringBuilder()\n                .Append(\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\")\n                .Append(\"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\")\n                .Append($\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 {dim} {dim}\\\" stroke=\\\"none\\\">\\n\")\n                .Append($\"\\t<rect width=\\\"100%\\\" height=\\\"100%\\\" fill=\\\"{background}\\\"/>\\n\")\n                .Append(\"\\t<path d=\\\"\");\n\n            // Work on copy as it is destructive\n            var modules = CopyModules();\n            CreatePath(sb, modules, border);\n\n            return sb\n                .Append($\"\\\" fill=\\\"{foreground}\\\"/>\\n\")\n                .Append(\"</svg>\\n\")\n                .ToString();\n        }\n\n        internal string ToGraphicsPath(int border)\n        {\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), \"Border must be non-negative\");\n            }\n\n            // Work on copy as it is destructive\n            var modules = CopyModules();\n            var path = new StringBuilder();\n            CreatePath(path, modules, border);\n            return path.ToString();\n        }\n\n        internal byte[] ToBmpBitmap(int border, int scale, int foreground, int background)\n        {\n            if (scale < 1)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), scale, \"Scale must be greater than 0.\");\n            }\n\n            if (border < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(border), border, \"Border must be non-negative.\");\n            }\n\n            var dim = (_size + 2 * border) * scale;\n\n            if (dim > short.MaxValue)\n            {\n                throw new ArgumentOutOfRangeException(nameof(scale), \"Scale or border too large.\");\n            }\n\n            // NOTE: Works for Size > 0\n            // Modules to bytes\n            // x >> 3 == x / 8\n            var bytesToWrite = ((dim - 1) >> 3) + 1;\n\n            // NOTE: Align to 4 bytes\n            // This is a Bitmap requirement\n            // (size + (align - 1)) & ~(align - 1)\n            var aligned = (bytesToWrite + 3) & ~3;\n            var fileSize = 62 + dim * aligned;\n\n            var buf = new byte[fileSize];\n\n            // NOTE: BMP file header\n            buf[0] = (byte)'B';\n            buf[1] = (byte)'M';\n\n            buf[2] = (byte)fileSize;\n            buf[3] = (byte)(fileSize >> 8);\n            buf[4] = (byte)(fileSize >> 16);\n            buf[5] = (byte)(fileSize >> 24);\n\n            // NOTE: Offset to bitmap data\n            buf[10] = 62;\n\n            // NOTE: BMP info header\n            buf[14] = 40;\n\n            // NOTE: Image width\n            buf[18] = (byte)dim;\n            buf[19] = (byte)(dim >> 8);\n            buf[20] = (byte)(dim >> 16);\n            buf[21] = (byte)(dim >> 24);\n\n            // NOTE: Image height\n            buf[22] = buf[18];\n            buf[23] = buf[19];\n            buf[24] = buf[20];\n            buf[25] = buf[21];\n\n            // NOTE: Number of color planes (usually 1)\n            // Must be non-zero\n            buf[26] = 1;\n\n            // NOTE: Number of bits per pixel (1 bpp)\n            buf[28] = 1;\n\n            // NOTE: Horizontal resolution (pixels/meter)\n            // 3780 ppm (96 dpi)\n            buf[38] = 196;\n            buf[39] = 14;\n\n            // NOTE: Vertical resolution (pixels/meter)\n            // 3780 ppm (96 dpi)\n            buf[42] = buf[38];\n            buf[43] = buf[39];\n\n            // NOTE: Color table\n            // Alpha isn't useful here\n            // Foreground - Dark\n            buf[54] = (byte)foreground; // blue\n            buf[55] = (byte)(foreground >> 8); // green\n            buf[56] = (byte)(foreground >> 16); // red\n\n            // Background - Light\n            buf[58] = (byte)background; // blue\n            buf[59] = (byte)(background >> 8); // green\n            buf[60] = (byte)(background >> 16); // red\n\n            var scaledBorder = border * scale;\n\n            int i;\n            int y;\n            byte px;\n\n            if (border > 0)\n            {\n                var scaledSize = _size * scale;\n\n                for (i = 0; i < aligned; ++i)\n                {\n                    px = 255;\n\n                    if (i == bytesToWrite - 1)\n                    {\n                        px = (byte)(255 << ((bytesToWrite << 3) - dim));\n                    }\n                    else if (i >= bytesToWrite)\n                    {\n                        px = 0;\n                    }\n\n                    for (y = 0; y < scaledBorder; ++y)\n                    {\n                        buf[62 + i + y * aligned] = px;\n                        buf[62 + i + (y + scaledSize + scaledBorder) * aligned] = px;\n                    }\n                }\n            }\n\n            for (y = 0; y < _size; ++y)\n            {\n                int j;\n                var yOffset = y * scale + scaledBorder;\n\n                for (i = 0; i < aligned; ++i)\n                {\n                    px = 0;\n\n                    for (j = 0; j < 8; ++j)\n                    {\n                        var x = ((i << 3) + j) / scale;\n\n                        if (x >= dim)\n                        {\n                            continue;\n                        }\n\n                        if (x < border || x >= _size + border)\n                        {\n                            px |= (byte)(1 << (7 - j));\n                            continue;\n                        }\n\n                        px |= (byte)(_modules[(_size - y - 1), x - border] ? 0 : 1 << (7 - j));\n                    }\n\n                    buf[62 + i + yOffset * aligned] = px;\n                }\n\n                // NOTE: Copy rows when scaling\n                for (i = 1; i <= scale - 1; ++i)\n                {\n                    for (j = 0; j < aligned; ++j)\n                    {\n                        buf[62 + j + (yOffset + i) * aligned] = buf[62 + j + yOffset * aligned];\n                    }\n                }\n            }\n\n            return buf;\n        }\n\n        // Append a SVG/XAML path for the QR code to the provided string builder\n        private static void CreatePath(StringBuilder path, bool[,] modules, int border)\n        {\n            // Simple algorithm to reduce the number of rectangles for drawing the QR code\n            // and reduce SVG/XAML size.\n            var size = modules.GetLength(0);\n            for (var y = 0; y < size; y++)\n            {\n                for (var x = 0; x < size; x++)\n                {\n                    if (modules[y, x])\n                    {\n                        DrawLargestRectangle(path, modules, x, y, border);\n                    }\n                }\n            }\n        }\n\n        // Find, draw and clear largest rectangle with (x, y) as the top left corner\n        private static void DrawLargestRectangle(StringBuilder path, bool[,] modules, int x, int y, int border)\n        {\n            var size = modules.GetLength(0);\n\n            var bestW = 1;\n            var bestH = 1;\n            var maxArea = 1;\n\n            var xLimit = size;\n            var iy = y;\n            while (iy < size && modules[iy, x])\n            {\n                var w = 0;\n                while (x + w < xLimit && modules[iy, x + w])\n                {\n                    w++;\n                }\n\n                var area = w * (iy - y + 1);\n                if (area > maxArea)\n                {\n                    maxArea = area;\n                    bestW = w;\n                    bestH = iy - y + 1;\n                }\n                xLimit = x + w;\n                iy++;\n            }\n\n            // append path command\n            if (x != 0 || y != 0)\n            {\n                path.Append(' ');\n            }\n\n            // Different locales use different minus signs.\n            FormattableString pathElement = $\"M{x + border},{y + border}h{bestW}v{bestH}h{-bestW}z\";\n            path.Append(pathElement.ToString(CultureInfo.InvariantCulture));\n\n            // clear processed modules\n            ClearRectangle(modules, x, y, bestW, bestH);\n        }\n\n        // Clear a rectangle of modules\n        private static void ClearRectangle(bool[,] modules, int x, int y, int width, int height)\n        {\n            for (var iy = y; iy < y + height; iy++)\n            {\n                for (var ix = x; ix < x + width; ix++)\n                {\n                    modules[iy, ix] = false;\n                }\n            }\n        }\n\n        // Create a copy of the modules (in row-major order)\n        private bool[,] CopyModules()\n        {\n            var modules = new bool[_size, _size];\n            for (var y = 0; y < _size; y++)\n            {\n                for (var x = 0; x < _size; x++)\n                {\n                    modules[y, x] = _modules[y, x];\n                }\n            }\n\n            return modules;\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/Objects.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Helper functions to check for valid arguments.\n    /// </summary>\n    internal static class Objects\n    {\n        /// <summary>\n        /// Ensures that the specified argument is <i>not null</i>.\n        /// <para>\n        /// Throws a <see cref=\"ArgumentNullException\"/> exception if the argument is <c>null</c>.\n        /// </para>\n        /// </summary>\n        /// <typeparam name=\"T\">The type of the argument.</typeparam>\n        /// <param name=\"arg\">The argument to check.</param>\n        /// <returns>Argument passed to function.</returns>\n        /// <exception cref=\"ArgumentNullException\">The specified argument is <c>null</c>.</exception>\n        internal static T RequireNonNull<T>(T arg)\n        {\n            if (arg == null)\n            {\n                throw new ArgumentNullException();\n            }\n            return arg;\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/PngBuilder.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * \n */\n\nusing System;\nusing System.IO;\nusing System.IO.Compression;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Creates a PNG file from a given QR code.\n    /// </summary>\n    internal sealed class PngBuilder\n    {\n        private static readonly byte[] Signature = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };\n        private static readonly uint[] CrcTable =\n        {\n            0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n            0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n            0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n            0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n        };\n\n        private static readonly byte[] IHDR = { 73, 72, 68, 82 };\n        private static readonly byte[] PLTE = { 80, 76, 84, 69 };\n        private static readonly byte[] IDAT = { 73, 68, 65, 84 };\n        private static readonly byte[] IEND = { 73, 69, 78, 68 };\n\n        /// <summary>\n        /// Creates a PNG image for the given QR code.\n        /// <para>\n        /// The PNG image uses indexed colors, 1 bit per pixel and a palette with entries for the foreground and background colors.\n        /// </para>\n        /// </summary>\n        /// <param name=\"qrCode\">The QR code.</param>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"foreground\">The foreground color (dark modules), in RGB value (little endian).</param>\n        /// <param name=\"background\">The background color (light modules), in RGB value (little endian).</param>\n        /// <returns>A PNG image, as a byte array.</returns>\n        /// \n        internal static byte[] ToImage(QrCode qrCode, int scale, int border, int foreground, int background)\n        {\n            var imageSize = (qrCode.Size + border * 2) * scale;\n            var builder = new PngBuilder();\n            builder.WriteHeader(imageSize, imageSize, 1, 3);\n            builder.WritePalette(new int[] { background, foreground });\n            builder.WriteData(CreateBitmap(qrCode, border, scale));\n            builder.WriteEnd();\n            return builder.GetBytes();\n        }\n\n        /// <summary>\n        /// Creates an uncompressed 1-bit per pixel bitmap of the QR code.\n        /// </summary>\n        /// <param name=\"qrCode\">The QR code</param>\n        /// <param name=\"border\">The border</param>\n        /// <param name=\"scale\">The scale</param>\n        /// <returns>Bitmap, as a byte array</returns>\n        private static byte[] CreateBitmap(QrCode qrCode, int border, int scale)\n        {\n            var size = qrCode.Size;\n            var imageSize = (size + border * 2) * scale;\n\n            var bytesPerLine = (imageSize + 7) / 8 + 1; // additional byte at the start for filter type\n            var data = new byte[bytesPerLine * imageSize];\n\n            for (var y = 0; y < size; y++)\n            {\n                var offset = (border + y) * scale * bytesPerLine;\n\n                for (var x = 0; x < size; x++)\n                {\n                    if (!qrCode.GetModule(x, y))\n                        continue;\n\n                    var pos = (border + x) * scale;\n                    var end = pos + scale;\n\n                    // set pixels for module ('scale' times)\n                    for (; pos < end; pos++)\n                    {\n                        var index = offset + pos / 8 + 1;\n                        data[index] |= (byte)(0x80U >> (pos % 8));\n                    }\n                }\n\n                // replicate line 'scale' times\n                for (var i = 1; i < scale; i++)\n                    Array.Copy(data, offset, data, offset + i * bytesPerLine, bytesPerLine);\n            }\n\n            return data;\n        }\n\n        private readonly MemoryStream stream = new MemoryStream();\n\n        /// <summary>\n        /// Returns the resulting PNG bytes.\n        /// </summary>\n        /// <returns>PNG file, as a byte array.</returns>\n        private byte[] GetBytes()\n        {\n            var bytes = stream.ToArray();\n            SetCRC(bytes);\n            return bytes;\n        }\n\n        /// <summary>\n        /// Writes the PNG header (IHDR chunk).\n        /// </summary>\n        /// <param name=\"width\">The image width.</param>\n        /// <param name=\"height\">The image height.</param>\n        /// <param name=\"bitDepth\">The bits per pixel.</param>\n        /// <param name=\"colorType\">The color type (see PNG specification).</param>\n        private void WriteHeader(int width, int height, byte bitDepth, byte colorType)\n        {\n            stream.Write(Signature, 0, Signature.Length);\n\n            WriteChunkStart(IHDR, 13);\n            WriteIntBigEndian((uint)width);\n            WriteIntBigEndian((uint)height);\n\n            stream.WriteByte(bitDepth);\n            stream.WriteByte(colorType);\n            stream.WriteByte(0);\n            stream.WriteByte(0);\n            stream.WriteByte(0);\n\n            WriteChunkEnd();\n        }\n\n        /// <summary>\n        /// Writes the palette (PLTE chunk).\n        /// </summary>\n        /// <param name=\"palette\">The color palettes as an array of RGB values.</param>\n        private void WritePalette(int[] palette)\n        {\n            WriteChunkStart(PLTE, palette.Length * 3);\n            foreach (var color in palette)\n            {\n                stream.WriteByte((byte)((color >> 16) & 0xFF));\n                stream.WriteByte((byte)((color >> 8) & 0xFF));\n                stream.WriteByte((byte)(color & 0xFF));\n            }\n            WriteChunkEnd();\n        }\n\n        /// <summary>\n        /// Writes the pixel data (IDAT chunk).\n        /// </summary>\n        /// <param name=\"data\">The pixel data.</param>\n        private void WriteData(byte[] data)\n        {\n            var compressedData = Deflate(data);\n            WriteChunkStart(IDAT, compressedData.Length + 6);\n\n            stream.WriteByte(0x78);\n            stream.WriteByte(0x9C);\n\n            stream.Write(compressedData, 0, compressedData.Length);\n\n            var adler = CalcAdler32(data, 0, data.Length);\n            WriteIntBigEndian(adler);\n            WriteChunkEnd();\n        }\n\n        /// <summary>\n        /// Writes the end chunk (IEND).\n        /// </summary>\n        private void WriteEnd()\n        {\n            WriteChunkStart(IEND, 0);\n            WriteChunkEnd();\n        }\n\n        private static void SetCRC(byte[] bytes)\n        {\n            var chunkOffset = Signature.Length;\n            while (chunkOffset < bytes.Length)\n            {\n                // calculate CRC\n                var dataLength = (bytes[chunkOffset] << 24) | (bytes[chunkOffset + 1] << 16) | (bytes[chunkOffset + 2] << 8) | bytes[chunkOffset + 3];\n                var crc = CalcCrc32(bytes, chunkOffset + 4, dataLength + 4);\n                var crcOffset = chunkOffset + 8 + dataLength;\n\n                // set CRC\n                bytes[crcOffset + 0] = (byte)(crc >> 24);\n                bytes[crcOffset + 1] = (byte)(crc >> 16);\n                bytes[crcOffset + 2] = (byte)(crc >> 8);\n                bytes[crcOffset + 3] = (byte)crc;\n\n                chunkOffset = crcOffset + 4;\n            }\n        }\n\n        private void WriteChunkStart(byte[] type, int length)\n        {\n            WriteIntBigEndian((uint)length);\n            stream.Write(type, 0, 4);\n        }\n\n        private void WriteChunkEnd()\n        {\n            stream.SetLength(stream.Length + 4);\n            stream.Position += 4;\n        }\n\n        private void WriteIntBigEndian(uint value)\n        {\n            stream.WriteByte((byte)(value >> 24));\n            stream.WriteByte((byte)(value >> 16));\n            stream.WriteByte((byte)(value >> 8));\n            stream.WriteByte((byte)value);\n        }\n\n        private static byte[] Deflate(byte[] data)\n        {\n            var output = new MemoryStream();\n            using (var deflater = new DeflateStream(output, CompressionLevel.Optimal))\n            {\n                deflater.Write(data, 0, data.Length);\n            }\n            return output.ToArray();\n        }\n\n        private static uint CalcAdler32(byte[] data, int index, int length)\n        {\n            const uint Base = 65521;\n            uint s1 = 1;\n            uint s2 = 0;\n\n            var end = index + length;\n            for (var n = index; n < end; n++)\n            {\n                s1 = (s1 + data[n]) % Base;\n                s2 = (s2 + s1) % Base;\n            }\n\n            return (s2 << 16) + s1;\n        }\n\n        private static uint CalcCrc32(byte[] data, int index, int length)\n        {\n            var c = 0xffffffff;\n\n            var end = index + length;\n            for (var n = index; n < end; n++)\n                c = CrcTable[(c ^ data[n]) & 0xff] ^ (c >> 8);\n\n            return c ^ 0xffffffff;\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/QrCode.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Represents a QR code containing text or binary data.\n    /// <para>\n    /// Instances of this class represent an immutable square grid of dark and light pixels\n    /// (called <i>modules</i> by the QR code specification).\n    /// Static factory methods are provided to create QR codes from text or binary data.\n    /// Some of the methods provide detailed control about the encoding parameters such a QR\n    /// code size (called <i>version</i> by the standard), error correction level and mask.\n    /// </para>\n    /// <para>\n    /// QR codes are a type of two-dimensional barcodes, invented by Denso Wave and\n    /// described in the ISO/IEC 18004 standard.\n    /// </para>\n    /// <para>\n    /// This class covers the QR Code Model 2 specification, supporting all versions (sizes)\n    /// from 1 to 40, all 4 error correction levels, and 4 character encoding modes.</para>\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// To create a QR code instance:\n    /// </para>\n    /// <ul>\n    ///   <li>High level: Take the payload data and call <see cref=\"EncodeText(string, Ecc)\"/>\n    ///       or <see cref=\"EncodeBinary(byte[], Ecc)\"/>.</li>\n    ///   <li>Mid level: Custom-make a list of <see cref=\"QrSegment\"/> instances and call\n    ///       <see cref=\"EncodeSegments\"/></li>\n    ///   <li>Low level: Custom-make an array of data codeword bytes (including segment headers and\n    ///       final padding, excluding error correction codewords), supply the appropriate version number,\n    ///       and call the <see cref=\"QrCode(int, Ecc, byte[], int)\"/>.</li>\n    /// </ul>\n    /// </remarks>\n    /// <seealso cref=\"QrSegment\"/>\n    public class QrCode\n    {\n        #region Static factory functions (high level)\n\n        /// <summary>\n        /// Creates a QR code representing the specified text using the specified error correction level.\n        /// <para>\n        /// As a conservative upper bound, this function is guaranteed to succeed for strings with up to 738\n        /// Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n        /// QR code version (size) is automatically chosen. The resulting ECC level will be higher than the one\n        /// specified if it can be achieved without increasing the size (version).\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to be encoded. The full range of Unicode characters may be used.</param>\n        /// <param name=\"ecl\">The minimum error correction level to use.</param>\n        /// <returns>The created QR code instance representing the specified text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"text\"/> or <paramref name=\"ecl\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"DataTooLongException\">The text is too long to fit in the largest QR code size (version)\n        /// at the specified error correction level.</exception>\n        public static QrCode EncodeText(string text, Ecc ecl)\n        {\n            Objects.RequireNonNull(text);\n            Objects.RequireNonNull(ecl);\n            var segments = QrSegment.MakeSegments(text);\n            return EncodeSegments(segments, ecl);\n        }\n\n        /// <summary>\n        /// Creates a series of QR codes representing the specified text.\n        /// <para>\n        /// The result will consist of the minimal number of QR codes needed\n        /// to encode the text with the given error correction level and version (size of QR code).\n        /// If multiple QR codes are required, <em>Structured Append</em> data is included to link the QR codes.\n        /// </para>\n        /// <para>\n        /// Each QR code might use multiple segments with different encoding modes\n        /// to maximize the amount of text that can be stored in each QR code.\n        /// </para>\n        /// <para>\n        /// Each QR code will contain a valid string as it is ensured that splitting only occurs\n        /// at character boundaries and not in the middle of a multi-byte encoding of a character.\n        /// This increases compatibility with QR code scanners that incorrectly assume that each\n        /// individual QR code in the series contains a valid UTF-8 string.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to be encoded. The full range of Unicode characters may be used.</param>\n        /// <param name=\"ecl\">The minimum error correction level to use.</param>\n        /// <param name=\"version\">The version (size of QR code) to use. Default is 29.</param>\n        /// <param name=\"boostEcl\">Whether error correction level should be upgraded if possible. Default is false.</param>\n        /// <returns>A list of QR codes representing the specified text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"text\"/> or <paramref name=\"ecl\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"DataTooLongException\">The text is too long to fit the maximum of 16 QR codes with the given parameters.</exception>\n        public static List<QrCode> EncodeTextInMultipleCodes(string text, Ecc ecl, int version = 29, bool boostEcl = true)\n        {\n            Objects.RequireNonNull(text);\n            Objects.RequireNonNull(ecl);\n\n            // Test if text fits in a single QR code\n            try {\n                var segments = QrSegmentAdvanced.MakeSegmentsOptimally(text, ecl, version, version);\n                var qrCode = EncodeSegments(segments, ecl, minVersion: version, maxVersion: version, boostEcl: boostEcl);\n                return new List<QrCode> { qrCode };\n            } catch (DataTooLongException)\n            {\n                // Continue with multiple QR codes\n            }\n\n            return QrSegmentAdvanced.MakeSegmentsForMultipleCodes(text, ecl, version)\n                .Select(segmentList => EncodeSegments(segmentList, ecl, minVersion: version, maxVersion: version, boostEcl: boostEcl))\n                .ToList();\n        }\n\n        /// <summary>\n        /// Creates a QR code representing the specified binary data using the specified error correction level.\n        /// <para>\n        /// This function encodes the data in the binary segment mode. The maximum number of\n        /// bytes allowed is 2953. The smallest possible QR code version is automatically chosen.\n        /// The resulting ECC level will be higher than the one specified if it can be achieved without increasing the size (version).\n        /// </para>\n        /// </summary>\n        /// <param name=\"data\">The binary data to encode.</param>\n        /// <param name=\"ecl\">The minimum error correction level to use.</param>\n        /// <returns>The created QR code representing the specified data.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"data\"/> or <paramref name=\"ecl\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"DataTooLongException\">The specified data is too long to fit in the largest QR code size (version)\n        /// at the specified error correction level.</exception>\n        public static QrCode EncodeBinary(byte[] data, Ecc ecl)\n        {\n            Objects.RequireNonNull(data);\n            Objects.RequireNonNull(ecl);\n            var seg = QrSegment.MakeBytes(data);\n            return EncodeSegments(new List<QrSegment> { seg }, ecl);\n        }\n\n        #endregion\n\n\n        #region Static factory functions (mid level)\n\n        /// <summary>\n        /// Creates a QR code representing the specified segments with the specified encoding parameters.\n        /// <para>\n        /// The smallest possible QR code version (size) is used. The range of versions can be\n        /// restricted by the <paramref name=\"minVersion\"/> and <paramref name=\"maxVersion\"/> parameters.\n        /// </para>\n        /// <para>\n        /// If <paramref name=\"boostEcl\"/> is <c>true</c>, the resulting ECC level will be higher than the\n        /// one specified if it can be achieved without increasing the size (version).\n        /// </para>\n        /// <para>\n        /// The QR code mask is usually automatically chosen. It can be explicitly set with the <paramref name=\"mask\"/>\n        /// parameter by using a value between 0 to 7 (inclusive). -1 is for automatic mode (which may be slow).\n        /// </para>\n        /// <para>\n        /// This function allows the user to create a custom sequence of segments that switches\n        /// between modes (such as alphanumeric and byte) to encode text in less space and gives full control over all\n        /// encoding parameters.\n        /// </para>\n        /// </summary>\n        /// <remarks>\n        /// This is a mid-level API; the high-level APIs are <see cref=\"EncodeText(string, Ecc)\"/>\n        /// and <see cref=\"EncodeBinary(byte[], Ecc)\"/>.\n        /// </remarks>\n        /// <param name=\"segments\">The segments to encode.</param>\n        /// <param name=\"ecl\">The minimal or fixed error correction level to use .</param>\n        /// <param name=\"minVersion\">The minimum version (size) of the QR code (between 1 and 40).</param>\n        /// <param name=\"maxVersion\">The maximum version (size) of the QR code (between 1 and 40).</param>\n        /// <param name=\"mask\">The mask number to use (between 0 and 7), or -1 for automatic mask selection.</param>\n        /// <param name=\"boostEcl\">If <c>true</c> the ECC level wil be increased if it can be achieved without increasing the size (version).</param>\n        /// <returns>The created QR code representing the segments.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"segments\"/>, any list element, or <paramref name=\"ecl\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">1 &#x2264; minVersion &#x2264; maxVersion &#x2264; 40\n        /// or -1 &#x2264; mask &#x2264; 7 is violated.</exception>\n        /// <exception cref=\"DataTooLongException\">The segments are too long to fit in the largest QR code size (version)\n        /// at the specified error correction level.</exception>\n        public static QrCode EncodeSegments(List<QrSegment> segments, Ecc ecl, int minVersion = MinVersion, int maxVersion = MaxVersion, int mask = -1, bool boostEcl = true)\n        {\n            Objects.RequireNonNull(segments);\n            Objects.RequireNonNull(ecl);\n            if (minVersion < MinVersion || minVersion > maxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(minVersion), \"Invalid value\");\n            }\n            if (maxVersion > MaxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(maxVersion), \"Invalid value\");\n            }\n            if (mask < -1 || mask > 7)\n            {\n                throw new ArgumentOutOfRangeException(nameof(mask), \"Invalid value\");\n            }\n\n            // Find the minimal version number to use\n            int version, dataUsedBits;\n            for (version = minVersion; ; version++)\n            {\n                var numDataBits = GetNumDataCodewords(version, ecl) * 8;  // Number of data bits available\n                dataUsedBits = QrSegment.GetTotalBits(segments, version);\n                if (dataUsedBits != -1 && dataUsedBits <= numDataBits)\n                {\n                    break;  // This version number is found to be suitable\n                }\n\n                if (version < maxVersion)\n                {\n                    continue;\n                }\n\n                // All versions in the range could not fit the given data\n                var msg = \"Segment too long\";\n                if (dataUsedBits != -1)\n                {\n                    msg = $\"Data length = {dataUsedBits} bits, Max capacity = {numDataBits} bits\";\n                }\n\n                throw new DataTooLongException(msg);\n            }\n            Debug.Assert(dataUsedBits != -1);\n\n            // Increase the error correction level while the data still fits in the current version number\n            foreach (var newEcl in Ecc.AllValues)\n            {  // From low to high\n                if (boostEcl && dataUsedBits <= GetNumDataCodewords(version, newEcl) * 8)\n                {\n                    ecl = newEcl;\n                }\n            }\n\n            // Concatenate all segments to create the data bit string\n            var ba = new BitArray(0);\n            foreach (var seg in segments)\n            {\n                ba.AppendBits(seg.EncodingMode.ModeBits, 4);\n                ba.AppendBits((uint)seg.NumChars, seg.EncodingMode.NumCharCountBits(version));\n                ba.AppendData(seg.GetData());\n            }\n            Debug.Assert(ba.Length == dataUsedBits);\n\n            // Add terminator and pad up to a byte if applicable\n            var dataCapacityBits = GetNumDataCodewords(version, ecl) * 8;\n            Debug.Assert(ba.Length <= dataCapacityBits);\n            ba.AppendBits(0, Math.Min(4, dataCapacityBits - ba.Length));\n            ba.AppendBits(0, (8 - ba.Length % 8) % 8);\n            Debug.Assert(ba.Length % 8 == 0);\n\n            // Pad with alternating bytes until data capacity is reached\n            for (uint padByte = 0xEC; ba.Length < dataCapacityBits; padByte ^= 0xEC ^ 0x11)\n            {\n                ba.AppendBits(padByte, 8);\n            }\n\n            // Pack bits into bytes in big endian\n            var dataCodewords = new byte[ba.Length / 8];\n            for (var i = 0; i < ba.Length; i++)\n            {\n                if (ba.Get(i))\n                {\n                    dataCodewords[i >> 3] |= (byte)(1 << (7 - (i & 7)));\n                }\n            }\n\n            // Create the QR code object\n            return new QrCode(version, ecl, dataCodewords, mask);\n        }\n\n        #endregion\n\n\n        #region Public immutable properties\n\n        /// <summary>\n        /// The version (size) of this QR code (between 1 for the smallest and 40 for the biggest).\n        /// </summary>\n        /// <value>The QR code version (size).</value>\n        public int Version { get; }\n\n        /// <summary>\n        /// The width and height of this QR code, in modules (pixels).\n        /// The size is a value between 21 and 177.\n        /// This is equal to version &#xD7; 4 + 17.\n        /// </summary>\n        /// <value>The QR code size.</value>\n        public int Size { get; }\n\n        /// <summary>\n        /// The error correction level used for this QR code.\n        /// </summary>\n        /// <value>The error correction level.</value>\n        public Ecc ErrorCorrectionLevel { get; }\n\n        /// <summary>\n        /// The index of the mask pattern used fort this QR code (between 0 and 7).\n        /// <para>\n        /// Even if a QR code is created with automatic mask selection (<c>mask</c> = 1),\n        /// this property returns the effective mask used.\n        /// </para>\n        /// </summary>\n        /// <value>The mask pattern index.</value>\n        public int Mask { get; }\n\n        #endregion\n\n\n        #region Private grids of modules/pixels, with dimensions of size * size\n\n        // The modules of this QR code (false = light, true = dark).\n        // Immutable after constructor finishes. Accessed through GetModule().\n        private readonly bool[,] _modules;\n\n        // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n        private readonly bool[,] _isFunction;\n\n        #endregion\n\n\n        #region  Constructor (low level)\n\n        /// <summary>\n        /// Constructs a QR code with the specified version number,\n        /// error correction level, data codeword bytes, and mask number.\n        /// </summary>\n        /// <remarks>\n        /// This is a low-level API that most users should not use directly. A mid-level\n        /// API is the <see cref=\"EncodeSegments\"/> function.\n        /// </remarks>\n        /// <param name=\"version\">The version (size) to use (between 1 to 40).</param>\n        /// <param name=\"ecl\">The error correction level to use.</param>\n        /// <param name=\"dataCodewords\">The bytes representing segments to encode (without ECC).</param>\n        /// <param name=\"mask\">The mask pattern to use (either -1 for automatic selection, or a value from 0 to 7 for fixed choice).</param>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"ecl\"/> or <paramref name=\"dataCodewords\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">The version or mask value is out of range,\n        /// or the data has an invalid length for the specified version and error correction level.</exception>\n        public QrCode(int version, Ecc ecl, byte[] dataCodewords, int mask = -1)\n        {\n            // Check arguments and initialize fields\n            if (version < MinVersion || version > MaxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(version), \"Version value out of range\");\n            }\n\n            if (mask < -1 || mask > 7)\n            {\n                throw new ArgumentOutOfRangeException(nameof(mask), \"Mask value out of range\");\n            }\n\n            Version = version;\n            Size = version * 4 + 17;\n            Objects.RequireNonNull(ecl);\n            ErrorCorrectionLevel = ecl;\n            Objects.RequireNonNull(dataCodewords);\n            _modules = new bool[Size, Size];  // Initially all light\n            _isFunction = new bool[Size, Size];\n\n            // Compute ECC, draw modules, do masking\n            DrawFunctionPatterns();\n            var allCodewords = AddEccAndInterleave(dataCodewords);\n            DrawCodewords(allCodewords);\n\n            // Do masking\n            if (mask == -1)\n            {\n                // Automatically choose best mask\n                var minPenalty = int.MaxValue;\n                for (uint i = 0; i < 8; i++)\n                {\n                    ApplyMask(i);\n                    DrawFormatBits(i);\n                    var penalty = GetPenaltyScore();\n                    if (penalty < minPenalty)\n                    {\n                        mask = (int)i;\n                        minPenalty = penalty;\n                    }\n                    ApplyMask(i);  // Undoes the mask due to XOR\n                }\n            }\n            Debug.Assert(0 <= mask && mask <= 7);\n            Mask = mask;\n            ApplyMask((uint)mask);  // Apply the final choice of mask\n            DrawFormatBits((uint)mask);  // Overwrite old format bits\n\n            _isFunction = null;\n        }\n\n\n        #endregion\n\n\n        #region Public methods\n\n        /// <summary>\n        /// Gets the color of the module (pixel) at the specified coordinates.\n        /// <para>\n        /// The top left corner has the coordinates (x=0, y=0). <i>x</i>-coordinates extend from left to right,\n        /// <i>y</i>-coordinates extend from top to bottom.\n        /// </para>\n        /// <para>\n        /// If coordinates outside the bounds of this QR code are specified, light (<c>false</c>) is returned.\n        /// </para>\n        /// </summary>\n        /// <param name=\"x\">The x coordinate.</param>\n        /// <param name=\"y\">The y coordinate.</param>\n        /// <returns>The color of the specified module: <c>true</c> for dark modules and <c>false</c>\n        /// for light modules (or if the coordinates are outside the bounds).</returns>\n        public bool GetModule(int x, int y)\n        {\n            return 0 <= x && x < Size && 0 <= y && y < Size && _modules[y, x];\n        }\n\n        /// <summary>\n        /// Creates an SVG image of this QR code.\n        /// <para>\n        /// The images uses Unix newlines (\\n), regardless of the platform.\n        /// </para>\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size</param>\n        /// <returns>The SVG image as a string.</returns>\n        public string ToSvgString(int border)\n        {\n            return ToSvgString(border, \"#000000\", \"#ffffff\");\n        }\n\n        /// <summary>\n        /// Creates an SVG image of this QR code.\n        /// <para>\n        /// The images uses Unix newlines (\\n), regardless of the platform.\n        /// </para>\n        /// <para>\n        /// Colors are specified using CSS color data type. Examples of valid values are\n        /// \"#339966\", \"fuchsia\", \"rgba(137, 23, 89, 0.3)\".\n        /// </para>\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size</param>\n        /// <param name=\"foreground\">The foreground color.</param>\n        /// <param name=\"background\">The background color.</param>\n        public string ToSvgString(int border, string foreground, string background)\n        {\n            return AsGraphics().ToSvgString(border, foreground, background);\n        }\n\n        /// <summary>\n        /// Creates a graphics path of this QR code valid in SVG or XAML.\n        /// <para>\n        /// The graphics path uses a coordinate system where each module is 1 unit wide and tall,\n        /// and the top left module is offset vertically and horizontally by <i>border</i> units.\n        /// </para>\n        /// <para>\n        /// Note that a border width other than 0 only make sense if the bounding box of the QR code\n        /// is explicitly set by the graphics using this path. If the bounding box of this path is\n        /// automatically derived, at least the right and bottom border will be missing.\n        /// </para>\n        /// <para>\n        /// The path will look like this: <c>M3,3h7v1h-7z M12,3h1v4h-1z ... M70,71h1v1h-1z</c>. It\n        /// is valid for SVG (<c>&lt;path d=\"M3,3h...\" /&gt;</c>) and for XAML\n        /// (<c>&lt;Path Data=\"M3,3h...\" /&gt;</c>). For programmatic geometry creation in WPF see\n        /// <a href=\"https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.geometry.parse?view=windowsdesktop-6.0\">Geometry.Parse(String)</a>.\n        /// </para>\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size</param>\n        /// <returns>The graphics path</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if border is negative</exception>\n        public string ToGraphicsPath(int border = 0)\n        {\n            return AsGraphics().ToGraphicsPath(border);\n        }\n\n        /// <summary>\n        /// Creates a bitmap in the BMP format.\n        /// <para>\n        /// The bitmap uses 1 bit per pixel and a color table with 2 entries.\n        /// </para>\n        /// <para>\n        /// Color values can be created with <see cref=\"RgbColor(byte, byte, byte)\"/>.\n        /// </para>\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"foreground\">The foreground color (dark modules), in RGB value (little endian).</param>\n        /// <param name=\"background\">The background color (light modules), in RGB value (little endian).</param>\n        /// <returns>Bitmap data</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if <paramref name=\"border\"/> is negative,\n        /// <paramref name=\"scale\"/> is less than 1 or the resulting image is wider than 32,768 pixels.</exception>\n        public byte[] ToBmpBitmap(int border, int scale, int foreground, int background)\n        {\n            return AsGraphics().ToBmpBitmap(border, scale, foreground, background);\n        }\n\n        /// <summary>\n        /// Creates bitmap in the BMP format data using black for dark modules and white for light modules.\n        /// <para>\n        /// The bitmap uses 1 bit per pixel and a color table with 2 entries.\n        /// </para>\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <returns>Bitmap data</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if <paramref name=\"border\"/> is negative,\n        /// <paramref name=\"scale\"/> is less than 1 or the resulting image is wider than 32,768 pixels.</exception>\n        public byte[] ToBmpBitmap(int border = 0, int scale = 1)\n        {\n            return ToBmpBitmap(border, scale, 0x000000, 0xffffff);\n        }\n\n        /// <summary>\n        /// Creates bitmap in the PNG format data using specified foreground and background colors for dark and light modules.\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <param name=\"foreground\">The foreground color (dark modules), in RGB value (little endian).</param>\n        /// <param name=\"background\">The background color (light modules), in RGB value (little endian).</param>\n        /// <returns>Bitmap data</returns>\n        public byte[] ToPngBitmap(int border, int scale, int foreground, int background)\n        {\n            return PngBuilder.ToImage(this, scale, border, foreground, background);\n        }\n\n        /// <summary>\n        /// Creates bitmap in the PNG format data using black for dark modules and white for light modules.\n        /// </summary>\n        /// <param name=\"border\">The border width, as a factor of the module (QR code pixel) size.</param>\n        /// <param name=\"scale\">The width and height, in pixels, of each module.</param>\n        /// <returns>Bitmap data</returns>\n        public byte[] ToPngBitmap(int border = 0, int scale = 1)\n        {\n            return PngBuilder.ToImage(this, scale, border, 0x000000, 0xffffff);\n        }\n\n        /// <summary>\n        /// Creates an RGB color value in little endian format.\n        /// </summary>\n        /// <param name=\"red\">Red component.</param>\n        /// <param name=\"green\">Green component.</param>\n        /// <param name=\"blue\">Blue component.</param>\n        /// <returns>RGB color value</returns>\n        public int RgbColor(byte red, byte green, byte blue)\n        {\n\n            return (red << 16) | (green << 8) | blue;\n        }\n\n        #endregion\n\n\n        #region Private helper methods for constructor: Drawing function modules\n\n        // Reads this object's version field, and draws and marks all function modules.\n        private void DrawFunctionPatterns()\n        {\n            // Draw horizontal and vertical timing patterns\n            for (var i = 0; i < Size; i++)\n            {\n                SetFunctionModule(6, i, i % 2 == 0);\n                SetFunctionModule(i, 6, i % 2 == 0);\n            }\n\n            // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)\n            DrawFinderPattern(3, 3);\n            DrawFinderPattern(Size - 4, 3);\n            DrawFinderPattern(3, Size - 4);\n\n            // Draw numerous alignment patterns\n            var alignPatPos = GetAlignmentPatternPositions();\n            var numAlign = alignPatPos.Length;\n            for (var i = 0; i < numAlign; i++)\n            {\n                for (var j = 0; j < numAlign; j++)\n                {\n                    // Don't draw on the three finder corners\n                    if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n                    {\n                        DrawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n                    }\n                }\n            }\n\n            // Draw configuration data\n            DrawFormatBits(0);  // Dummy mask value; overwritten later in the constructor\n            DrawVersion();\n        }\n\n\n        // Draws two copies of the format bits (with its own error correction code)\n        // based on the given mask and this object's error correction level field.\n        private void DrawFormatBits(uint mask)\n        {\n            // Calculate error correction code and pack bits\n            var data = (ErrorCorrectionLevel.FormatBits << 3) | mask;  // errCorrLvl is uint2, mask is uint3\n            var rem = data;\n            for (var i = 0; i < 10; i++)\n            {\n                rem = (rem << 1) ^ ((rem >> 9) * 0x537);\n            }\n\n            var bits = ((data << 10) | rem) ^ 0x5412;  // uint15\n            Debug.Assert(bits >> 15 == 0);\n\n            // Draw first copy\n            for (var i = 0; i <= 5; i++)\n            {\n                SetFunctionModule(8, i, GetBit(bits, i));\n            }\n\n            SetFunctionModule(8, 7, GetBit(bits, 6));\n            SetFunctionModule(8, 8, GetBit(bits, 7));\n            SetFunctionModule(7, 8, GetBit(bits, 8));\n            for (var i = 9; i < 15; i++)\n            {\n                SetFunctionModule(14 - i, 8, GetBit(bits, i));\n            }\n\n            // Draw second copy\n            for (var i = 0; i < 8; i++)\n            {\n                SetFunctionModule(Size - 1 - i, 8, GetBit(bits, i));\n            }\n\n            for (var i = 8; i < 15; i++)\n            {\n                SetFunctionModule(8, Size - 15 + i, GetBit(bits, i));\n            }\n\n            SetFunctionModule(8, Size - 8, true);  // Always dark\n        }\n\n\n        // Draws two copies of the version bits (with its own error correction code),\n        // based on this object's version field, iff 7 <= version <= 40.\n        private void DrawVersion()\n        {\n            if (Version < 7)\n            {\n                return;\n            }\n\n            // Calculate error correction code and pack bits\n            var rem = (uint)Version;  // version is uint6, in the range [7, 40]\n            for (var i = 0; i < 12; i++)\n            {\n                rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);\n            }\n\n            var bits = ((uint)Version << 12) | rem;  // uint18\n            Debug.Assert(bits >> 18 == 0);\n\n            // Draw two copies\n            for (var i = 0; i < 18; i++)\n            {\n                var bit = GetBit(bits, i);\n                var a = Size - 11 + i % 3;\n                var b = i / 3;\n                SetFunctionModule(a, b, bit);\n                SetFunctionModule(b, a, bit);\n            }\n        }\n\n        // Draws a 9*9 finder pattern including the border separator,\n        // with the center module at (x, y). Modules can be out of bounds.\n        private void DrawFinderPattern(int x, int y)\n        {\n            for (var dy = -4; dy <= 4; dy++)\n            {\n                for (var dx = -4; dx <= 4; dx++)\n                {\n                    var dist = Math.Max(Math.Abs(dx), Math.Abs(dy));  // Chebyshev/infinity norm\n                    int xx = x + dx, yy = y + dy;\n                    if (0 <= xx && xx < Size && 0 <= yy && yy < Size)\n                    {\n                        SetFunctionModule(xx, yy, dist != 2 && dist != 4);\n                    }\n                }\n            }\n        }\n\n\n        // Draws a 5*5 alignment pattern, with the center module\n        // at (x, y). All modules must be in bounds.\n        private void DrawAlignmentPattern(int x, int y)\n        {\n            for (var dy = -2; dy <= 2; dy++)\n            {\n                for (var dx = -2; dx <= 2; dx++)\n                {\n                    SetFunctionModule(x + dx, y + dy, Math.Max(Math.Abs(dx), Math.Abs(dy)) != 1);\n                }\n            }\n        }\n\n\n        // Sets the color of a module and marks it as a function module.\n        // Only used by the constructor. Coordinates must be in bounds.\n        private void SetFunctionModule(int x, int y, bool isDark)\n        {\n            _modules[y, x] = isDark;\n            _isFunction[y, x] = true;\n        }\n\n        private Graphics AsGraphics()\n        {\n            return new Graphics(Size, _modules);\n        }\n\n        #endregion\n\n\n        #region Private helper methods for constructor: Codewords and masking\n\n        // Returns a new byte string representing the given data with the appropriate error correction\n        // codewords appended to it, based on this object's version and error correction level.\n        private byte[] AddEccAndInterleave(byte[] data)\n        {\n            Objects.RequireNonNull(data);\n            if (data.Length != GetNumDataCodewords(Version, ErrorCorrectionLevel))\n            {\n                throw new ArgumentOutOfRangeException(nameof(data), \"Length of data does not match version and ecl\");\n            }\n\n            // Calculate parameter numbers\n            int numBlocks = NumErrorCorrectionBlocks[ErrorCorrectionLevel.Ordinal, Version];\n            int blockEccLen = EccCodewordsPerBlock[ErrorCorrectionLevel.Ordinal, Version];\n            var rawCodewords = GetNumRawDataModules(Version) / 8;\n            var numShortBlocks = numBlocks - rawCodewords % numBlocks;\n            var shortBlockLen = rawCodewords / numBlocks;\n\n            // Split data into blocks and append ECC to each block\n            var blocks = new byte[numBlocks][];\n            var rsDiv = new ReedSolomonGenerator(blockEccLen);\n            for (int i = 0, k = 0; i < numBlocks; i++)\n            {\n                var dat = CopyOfRange(data, k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n                k += dat.Length;\n                var block = CopyOf(dat, shortBlockLen + 1);\n                var ecc = rsDiv.GetRemainder(dat);\n                Array.Copy(ecc, 0, block, block.Length - blockEccLen, ecc.Length);\n                blocks[i] = block;\n            }\n\n            // Interleave (not concatenate) the bytes from every block into a single sequence\n            var result = new byte[rawCodewords];\n            for (int i = 0, k = 0; i < blocks[0].Length; i++)\n            {\n                for (var j = 0; j < blocks.Length; j++)\n                {\n                    // Skip the padding byte in short blocks\n                    if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n                    {\n                        result[k] = blocks[j][i];\n                        k++;\n                    }\n                }\n            }\n            return result;\n        }\n\n\n        // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n        // data area of this QR code. Function modules need to be marked off before this is called.\n        private void DrawCodewords(byte[] data)\n        {\n            Objects.RequireNonNull(data);\n            if (data.Length != GetNumRawDataModules(Version) / 8)\n            {\n                throw new ArgumentOutOfRangeException(nameof(data), \"data length does not match version\");\n            }\n\n            var i = 0;  // Bit index into the data\n\n            // Do the funny zigzag scan\n            for (var right = Size - 1; right >= 1; right -= 2)\n            {\n                // Index of right column in each column pair\n                if (right == 6)\n                {\n                    right = 5;\n                }\n\n                for (var vert = 0; vert < Size; vert++)\n                {\n                    // Vertical counter\n                    for (var j = 0; j < 2; j++)\n                    {\n                        var x = right - j;  // Actual x coordinate\n                        var upward = ((right + 1) & 2) == 0;\n                        var y = upward ? Size - 1 - vert : vert;  // Actual y coordinate\n                        if (!_isFunction[y, + x] && i < data.Length * 8)\n                        {\n                            _modules[y, x] = GetBit(data[(uint)i >> 3], 7 - (i & 7));\n                            i++;\n                        }\n                        // If this QR code has any remainder bits (0 to 7), they were assigned as\n                        // 0/false/light by the constructor and are left unchanged by this method\n                    }\n                }\n            }\n            Debug.Assert(i == data.Length * 8);\n        }\n\n\n        // XORs the codeword modules in this QR code with the given mask pattern.\n        // The function modules must be marked and the codeword bits must be drawn\n        // before masking. Due to the arithmetic of XOR, calling applyMask() with\n        // the same mask value a second time will undo the mask. A final well-formed\n        // QR code needs exactly one (not zero, two, etc.) mask applied.\n        private void ApplyMask(uint mask)\n        {\n            if (mask < 0 || mask > 7)\n            {\n                throw new ArgumentOutOfRangeException(nameof(mask), \"Mask value out of range\");\n            }\n\n            for (var y = 0; y < Size; y++)\n            {\n                for (var x = 0; x < Size; x++)\n                {\n                    var invert = false;\n                    switch (mask)\n                    {\n                        case 0: invert = (x + y) % 2 == 0; break;\n                        case 1: invert = y % 2 == 0; break;\n                        case 2: invert = x % 3 == 0; break;\n                        case 3: invert = (x + y) % 3 == 0; break;\n                        case 4: invert = (x / 3 + y / 2) % 2 == 0; break;\n                        case 5: invert = x * y % 2 + x * y % 3 == 0; break;\n                        case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break;\n                        case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break;\n                    }\n                    _modules[y, x] ^= invert && !_isFunction[y, x];\n                }\n            }\n        }\n\n\n        // Calculates and returns the penalty score based on state of this QR code's current modules.\n        // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n        private int GetPenaltyScore()\n        {\n            var result = 0;\n\n            // Adjacent modules in row having same color, and finder-like patterns\n            for (var y = 0; y < Size; y++)\n            {\n                var runColor = false;\n                var runX = 0;\n                var finderPenalty = new FinderPenalty(Size);\n                for (var x = 0; x < Size; x++)\n                {\n                    if (_modules[y, x] == runColor)\n                    {\n                        runX++;\n                        if (runX == 5)\n                        {\n                            result += PenaltyN1;\n                        }\n                        else if (runX > 5)\n                        {\n                            result++;\n                        }\n                    }\n                    else\n                    {\n                        finderPenalty.AddHistory(runX);\n                        if (!runColor)\n                        {\n                            result += finderPenalty.CountPatterns() * PenaltyN3;\n                        }\n\n                        runColor = _modules[y, x];\n                        runX = 1;\n                    }\n\n                }\n                result += finderPenalty.TerminateAndCount(runColor, runX) * PenaltyN3;\n            }\n\n            // Adjacent modules in column having same color, and finder-like patterns\n            for (var x = 0; x < Size; x++)\n            {\n                var runColor = false;\n                var runY = 0;\n                var finderPenalty = new FinderPenalty(Size);\n                for (var y = 0; y < Size; y++)\n                {\n                    if (_modules[y, x] == runColor)\n                    {\n                        runY++;\n                        if (runY == 5)\n                        {\n                            result += PenaltyN1;\n                        }\n                        else if (runY > 5)\n                        {\n                            result++;\n                        }\n                    }\n                    else\n                    {\n                        finderPenalty.AddHistory(runY);\n                        if (!runColor)\n                        {\n                            result += finderPenalty.CountPatterns() * PenaltyN3;\n                        }\n\n                        runColor = _modules[y, x];\n                        runY = 1;\n                    }\n                }\n                result += finderPenalty.TerminateAndCount(runColor, runY) * PenaltyN3;\n            }\n\n            // 2*2 blocks of modules having same color\n            for (var y = 0; y < Size - 1; y++)\n            {\n                for (var x = 0; x < Size - 1; x++)\n                {\n                    var color = _modules[y, x];\n                    if (color == _modules[y, x + 1] &&\n                          color == _modules[y + 1, x] &&\n                          color == _modules[y + 1, x + 1])\n                    {\n                        result += PenaltyN2;\n                    }\n\n                }\n            }\n\n            // Balance of dark and light modules\n            var dark = 0;\n            for (var y = 0; y < Size; y++)\n            {\n                for (var x = 0; x < Size; x++)\n                {\n                    if (_modules[y, x])\n                    {\n                        dark++;\n                    }\n                }\n            }\n            var total = Size * Size;  // Note that size is odd, so dark/total != 1/2\n                                      // Compute the smallest integer k >= 0 such that (45-5k)% <= dark/total <= (55+5k)%\n            var k = (Math.Abs(dark * 20 - total * 10) + total - 1) / total - 1;\n            result += k * PenaltyN4;\n            Debug.Assert(0 <= result && result <= 2568888);  // Non-tight upper bound based on default values of PENALTY_N1, ..., N4\n            return result;\n        }\n\n\n        #endregion\n\n\n        #region Private helper functions\n\n        // Returns an ascending list of positions of alignment patterns for this version number.\n        // Each position is in the range [0,177), and are used on both the x and y axes.\n        // This could be implemented as lookup table of 40 variable-length lists of unsigned bytes.\n        private int[] GetAlignmentPatternPositions()\n        {\n            if (Version == 1)\n            {\n                return Array.Empty<int>();\n            }\n            else\n            {\n                var numAlign = Version / 7 + 2;\n                var step = (Version * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4) * 2;\n                var result = new int[numAlign];\n                result[0] = 6;\n                for (int i = result.Length - 1, pos = Size - 7; i >= 1; i--, pos -= step)\n                {\n                    result[i] = pos;\n                }\n                return result;\n            }\n        }\n\n        /// <summary>\n        /// Returns the number of data bits that can be stored in a QR code of the given version.\n        /// <para>\n        /// The returned number is after all function modules are excluded. This includes remainder bits,\n        /// so it might not be a multiple of 8. The result is in the range [208, 29648].\n        /// </para>\n        /// </summary>\n        private static int GetNumRawDataModules(int ver)\n        {\n            if (ver < MinVersion || ver > MaxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(ver), \"Version number out of range\");\n            }\n\n            var size = ver * 4 + 17;\n            var result = size * size;   // Number of modules in the whole QR code square\n            result -= 8 * 8 * 3;        // Subtract the three finders with separators\n            result -= 15 * 2 + 1;       // Subtract the format information and dark module\n            result -= (size - 16) * 2;  // Subtract the timing patterns (excluding finders)\n                                        // The five lines above are equivalent to: int result = (16 * ver + 128) * ver + 64;\n\n            if (ver >= 2)\n            {\n                var numAlign = ver / 7 + 2;\n                result -= (numAlign - 1) * (numAlign - 1) * 25;  // Subtract alignment patterns not overlapping with timing patterns\n                result -= (numAlign - 2) * 2 * 20;  // Subtract alignment patterns that overlap with timing patterns\n                                                    // The two lines above are equivalent to: result -= (25 * numAlign - 10) * numAlign - 55;\n                if (ver >= 7)\n                {\n                    result -= 6 * 3 * 2;  // Subtract version information\n                }\n            }\n\n            Debug.Assert(208 <= result && result <= 29648);\n            return result;\n        }\n\n\n        /// <summary>\n        /// Returns the number of 8-bit data codewords contained in a QR code of the given version number and error correction level.\n        /// <para>\n        /// The result is the net data capacity, without error correction data, and after discarding remainder bits.\n        /// </para>\n        /// </summary>\n        /// <param name=\"ver\">The version number.</param>\n        /// <param name=\"ecl\">The error correction level.</param>\n        /// <returns>The number of codewords.</returns>\n        public static int GetNumDataCodewords(int ver, Ecc ecl)\n        {\n            return GetNumRawDataModules(ver) / 8\n                - EccCodewordsPerBlock[ecl.Ordinal, ver]\n                * NumErrorCorrectionBlocks[ecl.Ordinal, ver];\n        }\n\n        // Helper class for getPenaltyScore().\n        // Internal the run history is organized in reverse order\n        // (compared to Nayuki's code) to avoid the copying when\n        // adding to the history.\n        private struct FinderPenalty\n        {\n            private readonly short[] _runHistory;\n            private readonly int _size;\n\n            public FinderPenalty(int size)\n            {\n                _size = size;\n                _runHistory = new short[7];\n            }\n\n            // Can only be called immediately after a light run is added, and\n            // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n            internal int CountPatterns()\n            {\n                int n = _runHistory[1];\n                Debug.Assert(n <= _size * 3);\n                var core = n > 0 && _runHistory[2] == n && _runHistory[3] == n * 3 && _runHistory[4] == n && _runHistory[5] == n;\n                return (core && _runHistory[0] >= n * 4 && _runHistory[6] >= n ? 1 : 0)\n                     + (core && _runHistory[6] >= n * 4 && _runHistory[0] >= n ? 1 : 0);\n            }\n\n            // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n            internal int TerminateAndCount(bool currentRunColor, int currentRunLength)\n            {\n                if (currentRunColor)\n                {\n                    // Terminate dark run\n                    AddHistory(currentRunLength);\n                    currentRunLength = 0;\n                }\n                currentRunLength += _size;  // Add light border to final run\n                AddHistory(currentRunLength);\n                return CountPatterns();\n            }\n\n            // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n            internal void AddHistory(int currentRunLength)\n            {\n                if (_runHistory[0] == 0)\n                    currentRunLength += _size;  // Add light border to initial run\n                Array.Copy(_runHistory, 0, _runHistory, 1, 6);\n                _runHistory[0] = (short) currentRunLength;\n            }\n        }\n\n\n        private static byte[] CopyOfRange(byte[] original, int from, int to)\n        {\n            var result = new byte[to - from];\n            Array.Copy(original, from, result, 0, to - from);\n            return result;\n        }\n\n\n        private static byte[] CopyOf(byte[] original, int newLength)\n        {\n            var result = new byte[newLength];\n            Array.Copy(original, result, Math.Min(original.Length, newLength));\n            return result;\n        }\n\n\n        // Returns true iff the i'th bit of x is set to 1.\n        private static bool GetBit(uint x, int i)\n        {\n            return ((x >> i) & 1) != 0;\n        }\n\n        #endregion\n\n\n        #region Constants and tables\n\n        /// <summary>\n        /// The minimum version (size) supported in the QR Code Model 2 standard – namely 1.\n        /// </summary>\n        /// <value>The minimum version.</value>\n        public const int MinVersion = 1;\n\n        /// <summary>\n        /// The maximum version (size) supported in the QR Code Model 2 standard – namely 40.\n        /// </summary>\n        /// <value>The maximum version.</value>\n        public const int MaxVersion = 40;\n\n\n        // For use in getPenaltyScore(), when evaluating which mask is best.\n        private const int PenaltyN1 = 3;\n        private const int PenaltyN2 = 3;\n        private const int PenaltyN3 = 40;\n        private const int PenaltyN4 = 10;\n\n\n        private static readonly byte[,] EccCodewordsPerBlock = {\n\t\t    // Version: (note that index 0 is for padding, and is set to an illegal value)\n            //  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40     Error correction level\t\t    { 255,  7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },  // Low\n            { 255,  7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },  // Low\n\t\t    { 255, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28 },  // Medium\n\t\t    { 255, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },  // Quartile\n\t\t    { 255, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }   // High\n\t    };\n\n        private static readonly byte[,] NumErrorCorrectionBlocks = {\n\t\t    // Version: (note that index 0 is for padding, and is set to an illegal value)\n\t\t    //  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40     Error correction level\n\t\t    { 255, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4,  4,  4,  4,  4,  6,  6,  6,  6,  7,  8,  8,  9,  9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25 },  // Low\n\t\t    { 255, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5,  5,  8,  9,  9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49 },  // Medium\n\t\t    { 255, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8,  8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68 },  // Quartile\n\t\t    { 255, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81 }   // High\n\t    };\n\n        #endregion\n\n\n        #region Public helper enumeration\n\n        /// <summary>\n        /// Error correction level in QR code symbol.\n        /// </summary>\n        public sealed class Ecc\n        {\n            /// <summary>\n            /// Low error correction level. The QR code can tolerate about 7% erroneous codewords.\n            /// </summary>\n            /// <value>Low error correction level.</value>\n            public static readonly Ecc Low = new Ecc(0, 1);\n\n            /// <summary>\n            /// Medium error correction level. The QR code can tolerate about 15% erroneous codewords.\n            /// </summary>\n            /// <value>Medium error correction level.</value>\n            public static readonly Ecc Medium = new Ecc(1, 0);\n\n            /// <summary>\n            /// Quartile error correction level. The QR code can tolerate about 25% erroneous codewords.\n            /// </summary>\n            /// <value>Quartile error correction level.</value>\n            public static readonly Ecc Quartile = new Ecc(2, 3);\n\n            /// <summary>\n            /// High error correction level. The QR code can tolerate about 30% erroneous codewords.\n            /// </summary>\n            /// <value>High error correction level.</value>\n            public static readonly Ecc High = new Ecc(3, 2);\n\n\n            internal static readonly Ecc[] AllValues = { Low, Medium, Quartile, High };\n\n            /// <summary>\n            /// Ordinal number of error correction level (in the range 0 to 3).\n            /// </summary>\n            /// <remarks>\n            /// Higher number represent a higher amount of error tolerance.\n            /// </remarks>\n            /// <value>Ordinal number.</value>\n            public int Ordinal { get; }\n\n            // In the range 0 to 3 (unsigned 2-bit integer).\n            internal uint FormatBits { get; }\n\n            // Constructor.\n            private Ecc(int ordinal, uint fb)\n            {\n                Ordinal = ordinal;\n                FormatBits = fb;\n            }\n        }\n\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/QrCodeGenerator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>\n    <IsTrimmable Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))\">true</IsTrimmable>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator</RootNamespace>\n    <PackageId>Net.Codecrete.QrCodeGenerator</PackageId>\n    <Version>2.1.0</Version>\n    <Authors>Manuel Bleichenbacher, Project Nayuki</Authors>\n    <Product>QR Code Generator for .NET</Product>\n    <Description>QR Code Generator for .NET – simple, compact and with many examples.\n\nCore features:\n- Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard\n- Output formats: Raw modules/pixels of the QR symbol, SVG, XAML path, PNG and BMP files. For other raster bitmap formats, see project home page.\n- Encodes numeric and special-alphanumeric text in less space than general text\n- Open source code under the permissive MIT License\n- Built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.).\n- Example code for WinForms, WPF, ASP.NET, ImageSharp, SkiaSharp and many more\n\nManual parameters:\n- You can specify the minimum and maximum version number allowed, and the library will automatically choose the smallest version in the range that fits the data.\n- You can specify the mask pattern manually, otherwise library will automatically evaluate all 8 masks and select the optimal one.\n- You can specify an error correction level, or optionally allow the library to boost it if it doesn't increase the version number.\n- You can create a list of data segments manually and add ECI segments.\n\nOptional advanced features:\n- Long text can be split into multiple linked QR codes (aka Structured Append)\n- Encodes Japanese Unicode text in Kanji mode to save a lot of space compared to UTF-8 bytes\n- Computes optimal segment mode switching for text with mixed numeric/alphanumeric/general/kanji parts\n</Description>\n    <Copyright>Copyright (c) Manuel Bleichenbacher and Project Nayuki (MIT License)</Copyright>\n    <RepositoryUrl>https://github.com/manuelbl/QrCodeGenerator</RepositoryUrl>\n    <PackageProjectUrl>https://github.com/manuelbl/QrCodeGenerator</PackageProjectUrl>\n    <PackageLicenseUrl></PackageLicenseUrl>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <PackageIcon>logo.png</PackageIcon>\n    <PackageTags>qr code, qrcode, kanji, qrcode generator, svg</PackageTags>\n    <PackageReleaseNotes>New in releases 2.1.x:\n- PNG support\n- Structured append / Linked QR mode\n</PackageReleaseNotes>\n    <Company>Codecrete</Company>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile>\n    <AssemblyVersion>1.6.0.0</AssemblyVersion>\n    <FileVersion>2.0.1.0</FileVersion>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <GenerateDocumentationFile>True</GenerateDocumentationFile>\n    <EnablePackageValidation>true</EnablePackageValidation>\n    <PackageVersion>2.1.0</PackageVersion>\n    <PackageValidationBaselineVersion>2.0.0</PackageValidationBaselineVersion>\n    <Deterministic>True</Deterministic>\n  </PropertyGroup>\n\n  <PropertyGroup Label=\"Restoring\">\n    <DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>\n  </PropertyGroup>\n\n  <PropertyGroup Label=\"Packaging\">\n    <PublishRepositoryUrl>true</PublishRepositoryUrl>\n    <DebugType>embedded</DebugType>\n    <EmbedAllSources>true</EmbedAllSources>\n    <ContinuousIntegrationBuild Condition=\"$(Configuration) == 'Release'\">true</ContinuousIntegrationBuild>\n  </PropertyGroup>\n\t\n  <ItemGroup>\n    <None Include=\"docs\\logo.png\" Pack=\"true\" PackagePath=\"\\\" />\n    <None Include=\"docs\\README.md\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.SourceLink.GitHub\" Version=\"8.0.0\" PrivateAssets=\"All\"/>\n  </ItemGroup>\n\n  <Target Name=\"ValidateNuGetPackage\" AfterTargets=\"Pack\">\n    <Exec Command=\"dotnet tool restore\" />\n    <Exec Command=\"dotnet validate package local $([MSBuild]::EnsureTrailingSlash($(PackageOutputPath)))$(PackageId).$(PackageVersion).nupkg\" />\n  </Target>\n  \n</Project>\n"
  },
  {
    "path": "QrCodeGenerator/QrSegment.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Represents a segment of character/binary/control data in a QR code symbol.\n    /// </summary>\n    /// <remarks>\n    /// <para>\n    /// The easiest way to deal with QR code segments is to call\n    /// <see cref=\"QrCode.EncodeText\"/> or <see cref=\"QrCode.EncodeBinary\"/>, and not\n    /// to use instances of this class directly. The mid-level way is to take the payload\n    /// data and call a static factory function such as <see cref=\"MakeNumeric(string)\"/>.\n    /// The low-level way is to custom-make the bit array and call the\n    /// <see cref=\"QrSegment(Mode, int, BitArray)\"/> constructor with appropriate values.\n    /// </para>\n    /// <para>\n    /// This segment class imposes no length restrictions, but QR codes have restrictions.\n    /// Even in the most favorable conditions, a QR code can only hold 7089 characters of data.\n    /// Any segment longer than this is meaningless for the purpose of generating QR codes.\n    /// </para>\n    /// <para>\n    /// This class can represent kanji mode segments, but provides no help in encoding them\n    /// - see <see cref=\"QrSegmentAdvanced\"/> for full kanji support.\n    /// </para>\n    /// <para>\n    /// Instances of this class are immutable.\n    /// </para>\n    /// </remarks>\n    public class QrSegment\n    {\n        #region Static factory functions (mid level)\n\n        /// <summary>\n        /// Creates a segment representing the specified binary data\n        /// encoded in byte mode. All input byte arrays are acceptable.\n        /// <para>\n        /// Any text string can be converted to UTF-8 bytes (using <c>Encoding.UTF8.GetBytes(str)</c>)\n        /// and encoded as a byte mode segment.\n        /// </para>\n        /// </summary>\n        /// <param name=\"data\">The binary data to encode.</param>\n        /// <returns>The created segment containing the specified data.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>data</c> is <c>null</c>.</exception>\n        public static QrSegment MakeBytes(byte[] data)\n        {\n            Objects.RequireNonNull(data);\n            var ba = new BitArray(0);\n            foreach (var b in data)\n            {\n                ba.AppendBits(b, 8);\n            }\n\n            return new QrSegment(Mode.Byte, data.Length, ba);\n        }\n\n\n        /// <summary>\n        /// Creates a segment representing the specified binary data\n        /// encoded in byte mode. All input byte arrays are acceptable.\n        /// <para>\n        /// Any text string can be converted to UTF-8 bytes (using <c>Encoding.UTF8.GetBytes(str)</c>)\n        /// and encoded as a byte mode segment.\n        /// </para>\n        /// </summary>\n        /// <param name=\"data\">The binary data to encode.</param>\n        /// <returns>The created segment containing the specified data.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>data</c> is <c>null</c>.</exception>\n        public static QrSegment MakeBytes(ArraySegment<byte> data)\n        {\n            Objects.RequireNonNull(data);\n            var ba = new BitArray(0);\n            foreach (var b in data)\n            {\n                ba.AppendBits(b, 8);\n            }\n\n            return new QrSegment(Mode.Byte, data.Count, ba);\n        }\n\n\n        /// <summary>\n        /// Creates a segment representing the specified string of decimal digits.\n        /// The segment is encoded in numeric mode.\n        /// </summary>\n        /// <param name=\"digits\">The text to encode, consisting of digits from 0 to 9 only.</param>\n        /// <returns>The created segment containing the text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>digits</c> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><c>digits</c> contains non-digit characters</exception>\n        public static QrSegment MakeNumeric(string digits)\n        {\n            Objects.RequireNonNull(digits);\n            if (!IsNumeric(digits))\n            {\n                throw new ArgumentOutOfRangeException(nameof(digits), \"String contains non-numeric characters\");\n            }\n\n            var ba = new BitArray(0);\n            for (var i = 0; i < digits.Length;)\n            {\n                // Consume up to 3 digits per iteration\n                var n = Math.Min(digits.Length - i, 3);\n                ba.AppendBits(uint.Parse(digits.Substring(i, n)), n * 3 + 1);\n                i += n;\n            }\n            return new QrSegment(Mode.Numeric, digits.Length, ba);\n        }\n\n\n        /// <summary>\n        /// Creates a segment representing the specified text string.\n        /// The segment is encoded in alphanumeric mode.\n        /// <para>\n        /// Allowed characters are: 0 to 9, A to Z (uppercase only), space,\n        /// dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to encode, consisting of allowed characters only.</param>\n        /// <returns>The created segment containing the text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>text</c> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><c>text</c> contains non-encodable characters.</exception>\n        public static QrSegment MakeAlphanumeric(string text)\n        {\n            Objects.RequireNonNull(text);\n            if (!IsAlphanumeric(text))\n            {\n                throw new ArgumentOutOfRangeException(nameof(text), \"String contains unencodable characters in alphanumeric mode\");\n            }\n\n            var ba = new BitArray(0);\n            int i;\n            for (i = 0; i <= text.Length - 2; i += 2)\n            {\n                // Process groups of 2\n                var temp = (uint)AlphanumericCharset.IndexOf(text[i]) * 45;\n                temp += (uint)AlphanumericCharset.IndexOf(text[i + 1]);\n                ba.AppendBits(temp, 11);\n            }\n            if (i < text.Length)  // 1 character remaining\n            {\n                ba.AppendBits((uint)AlphanumericCharset.IndexOf(text[i]), 6);\n            }\n\n            return new QrSegment(Mode.Alphanumeric, text.Length, ba);\n        }\n\n\n        /// <summary>\n        /// Creates a segment for the structured append header.\n        /// </summary>\n        /// <param name=\"parity\">The parity value.</param>\n        /// <param name=\"position\">The position of the code within the sequence of codes (1 based).</param>\n        /// <param name=\"total\">The total number of codes in the sequence of codes.</param>\n        /// <returns>The created segment containing the specified header.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>data</c> is <c>null</c>.</exception>\n        internal static QrSegment MakeStructuredAppend(byte parity, int position, int total)\n        {\n            var bitArray = new BitArray(0);\n            bitArray.AppendBits((uint)position - 1, 4);\n            bitArray.AppendBits((uint)total - 1, 4);\n            bitArray.AppendBits(parity, 8);\n            return new QrSegment(Mode.StructuredAppend, 0, bitArray);\n        }\n\n\n        /// <summary>\n        /// Creates a list of zero or more segments representing the specified text string.\n        /// <para>\n        /// The text may contain the full range of Unicode characters.\n        /// </para>\n        /// <para>\n        /// The result may consist of multiple segments with various encoding modes in order to minimize the length of the bit stream.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to be encoded.</param>\n        /// <returns>The created mutable list of segments representing the specified text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><c>text</c> is <c>null</c>.</exception>\n        /// <remarks>\n        /// The current implementation does not create multiple segments.\n        /// </remarks>\n        public static List<QrSegment> MakeSegments(string text)\n        {\n            Objects.RequireNonNull(text);\n\n            // Select the most efficient segment encoding automatically\n            var result = new List<QrSegment>();\n            if (text == \"\")\n            {\n                // Leave result empty\n            }\n            else if (IsNumeric(text))\n            {\n                result.Add(MakeNumeric(text));\n            }\n            else if (IsAlphanumeric(text))\n            {\n                result.Add(MakeAlphanumeric(text));\n            }\n            else\n            {\n                result.Add(MakeBytes(Encoding.UTF8.GetBytes(text)));\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates a segment representing an Extended Channel Interpretation\n        /// (ECI) designator with the specified assignment value.\n        /// </summary>\n        /// <param name=\"assignVal\">The ECI assignment number (see the AIM ECI specification).</param>\n        /// <returns>The created segment containing the data.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><c>assignVal</c>is outside the range [0, 10<sup>6</sup>).</exception>\n        public static QrSegment MakeEci(int assignVal)\n        {\n            var ba = new BitArray(0);\n            if (assignVal < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(assignVal), \"ECI assignment value out of range\");\n            }\n\n            if (assignVal < 1 << 7)\n            {\n                ba.AppendBits((uint)assignVal, 8);\n            }\n            else if (assignVal < 1 << 14)\n            {\n                ba.AppendBits(2, 2);\n                ba.AppendBits((uint)assignVal, 14);\n            }\n            else if (assignVal < 1_000_000)\n            {\n                ba.AppendBits(6, 3);\n                ba.AppendBits((uint)assignVal, 21);\n            }\n            else\n            {\n                throw new ArgumentOutOfRangeException(nameof(assignVal), \"ECI assignment value out of range\");\n            }\n\n            return new QrSegment(Mode.Eci, 0, ba);\n        }\n\n        /// <summary>\n        /// Tests whether the specified string can be encoded as a segment in numeric mode.\n        /// <para>\n        /// A string is encodable iff each character is in the range \"0\" to \"9\".\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">the string to test for encodability (not <c>null</c>)</param>\n        /// <returns><c>true</c> iff each character is in the range \"0\" to \"9\".</returns>\n        /// <exception cref=\"NullReferenceException\">if the string is <c>null</c></exception>\n        /// <seealso cref=\"MakeNumeric(string)\"/>\n        public static bool IsNumeric(string text)\n        {\n            return NumericRegex.IsMatch(text);\n        }\n\n        /// <summary>\n        /// Tests whether the specified string can be encoded as a segment in alphanumeric mode.\n        /// <para>\n        /// A string is encodable iff each character is in the range \"0\" to \"9\", \"A\" to \"Z\" (uppercase only),\n        /// space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">the string to test for encodability (not <c>null</c>)</param>\n        /// <returns><c>true</c> iff each character is in the alphanumeric mode character set.</returns>\n        /// <exception cref=\"NullReferenceException\">if the string is <c>null</c></exception>\n        /// <seealso cref=\"MakeAlphanumeric(string)\"/>\n        public static bool IsAlphanumeric(string text)\n        {\n            return AlphanumericRegex.IsMatch(text);\n        }\n\n        #endregion\n\n\n        #region Instance fields\n\n        /// <summary>The encoding mode of this segment.</summary>\n        /// <value>Encoding mode.</value>\n        public Mode EncodingMode { get; }\n\n        /// <summary>\n        /// The length of this segment's unencoded data.\n        /// <para>\n        /// Measured in characters for numeric/alphanumeric/kanji mode,\n        /// bytes for byte mode, and 0 for ECI mode.\n        /// </para>\n        /// <para>\n        /// Different from the data's bit length.\n        /// </para>\n        /// </summary>\n        /// <value>Length of the segment's unencoded data.</value>\n        public int NumChars { get; }\n\n        // The data bits of this segment. Not null. Accessed through GetData().\n        private readonly BitArray _data;\n\n        #endregion\n\n\n        #region Constructor (low level)\n\n        /// <summary>\n        /// Initializes a QR code segment with the specified attributes and data.\n        /// <para>\n        /// The character count <paramref name=\"numChars\"/> must agree with the mode and the bit array length,\n        /// but the constraint isn't checked. The specified bit array is cloned.\n        /// </para>\n        /// </summary>\n        /// <param name=\"mode\">The segment mode used to encode this segment.</param>\n        /// <param name=\"numChars\">The data length in characters or bytes (depending on the segment mode).</param>\n        /// <param name=\"data\">The data bits.</param>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"mode\"/> or <paramref name=\"data\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"numChars\"/> is negative.</exception>\n        public QrSegment(Mode mode, int numChars, BitArray data)\n        {\n            EncodingMode = Objects.RequireNonNull(mode);\n            Objects.RequireNonNull(data);\n            if (numChars < 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(numChars), \"Invalid value\");\n            }\n\n            NumChars = numChars;\n            _data = (BitArray)data.Clone();  // Make defensive copy\n        }\n\n        #endregion\n\n\n        #region Methods\n\n        /// <summary>\n        /// Returns a copy of this segment's data bits.\n        /// </summary>\n        /// <returns>A copy of the data bits.</returns>\n        public BitArray GetData()\n        {\n            return (BitArray)_data.Clone();  // Make defensive copy\n        }\n\n        /// <summary>\n        /// Returns the text represented by this segment.\n        /// <para>\n        /// This method will fail if the segment contains binary data that\n        /// cannot be converted to text.\n        /// </para>\n        /// </summary>\n        /// <returns>The text.</returns>\n        public string GetText()\n        {\n            var result = new StringBuilder();\n            AppendText(result);\n            return result.ToString();\n        }\n\n        /// <summary>\n        /// Returns the joined text represented by the provided segments.\n        /// </summary>\n        /// <param name=\"segments\">List of segments</param>\n        /// <returns></returns>\n        public static string GetJoinedText(List<QrSegment> segments)\n        {\n            var result = new StringBuilder();\n            foreach (var segment in segments)\n            {\n                segment.AppendText(result);\n            }\n            return result.ToString();\n        }\n\n        /// <summary>\n        /// Returns the joined text represented by the provided segments.\n        /// </summary>\n        /// <param name=\"segments\">List of list of segments</param>\n        /// <returns></returns>\n        public static string GetJoinedText(List<List<QrSegment>> segments)\n        {\n            var result = new StringBuilder();\n            foreach (var segmentList in segments)\n            {\n                foreach (var segment in segmentList)\n                {\n                    segment.AppendText(result);\n                }\n            }\n            return result.ToString();\n        }\n\n        private void AppendText(StringBuilder builder)\n        {\n            if (EncodingMode == Mode.Numeric)\n            {\n                for (int offset = 0; offset < NumChars; offset += 3)\n                {\n                    var n = Math.Min(NumChars - offset, 3);\n                    var bitIndex = offset / 3 * 10;\n                    if (n == 3)\n                    {\n                        var value = _data.ExtractBits(bitIndex, 10);\n                        builder.Append((char)('0' + value / 100));\n                        builder.Append((char)('0' + value / 10 % 10));\n                        builder.Append((char)('0' + value % 10));\n                    }\n                    else if (n == 2)\n                    {\n                        var value = _data.ExtractBits(bitIndex, 7);\n                        builder.Append((char)('0' + value / 10));\n                        builder.Append((char)('0' + value % 10));\n                    }\n                    else if (n == 1)\n                    {\n                        var value = _data.ExtractBits(bitIndex, 4);\n                        builder.Append((char)('0' + value));\n                    }\n                }\n            }\n            else if (EncodingMode == Mode.Alphanumeric)\n            {\n                for (int offset = 0; offset < NumChars; offset += 2)\n                {\n                    var n = Math.Min(NumChars - offset, 2);\n                    var bitIndex = offset / 2 * 11;\n                    if (n == 2)\n                    {\n                        var value = (int)_data.ExtractBits(bitIndex, 11);\n                        builder.Append(AlphanumericCharset[value / 45]);\n                        builder.Append(AlphanumericCharset[value % 45]);\n                    }\n                    else\n                    {\n                        var value = (int)_data.ExtractBits(bitIndex, 6);\n                        builder.Append(AlphanumericCharset[value]);\n                    }\n                }\n            }\n            else if (EncodingMode == Mode.Byte)\n            {\n                var bytes = new byte[NumChars];\n                for (int i = 0; i < NumChars; i++)\n                {\n                    bytes[i] = (byte)_data.ExtractBits(i * 8, 8);\n                }\n                builder.Append(Encoding.UTF8.GetString(bytes));\n            }\n        }\n\n        /// <summary>\n        /// Calculates the number of bits needed to encode the given segments.\n        /// <para>\n        /// Returns a non-negative number if successful. Otherwise returns -1 if a segment has too\n        /// many characters to fit its length field, or the total bits exceeds int.MaxValue.\n        /// </para>\n        /// </summary>\n        /// <param name=\"segments\">The segements.</param>\n        /// <param name=\"version\">The version number.</param>\n        /// <returns>The number of bits, or -1.</returns>\n        internal static int GetTotalBits(List<QrSegment> segments, int version)\n        {\n            Objects.RequireNonNull(segments);\n            long result = 0;\n            foreach (var seg in segments)\n            {\n                Objects.RequireNonNull(seg);\n                var ccBits = seg.EncodingMode.NumCharCountBits(version);\n                if (seg.NumChars >= 1 << ccBits)\n                {\n                    return -1;  // The segment's length doesn't fit the field's bit width\n                }\n\n                result += 4L + ccBits + seg._data.Length;\n                if (result > int.MaxValue)\n                {\n                    return -1;  // The sum will overflow an int type\n                }\n            }\n            return (int)result;\n        }\n\n        /// <summary>\n        /// Calculates the total number of bits required to encode a data segment in a QR code.\n        /// </summary>\n        /// <param name=\"numChars\">The number of characters in the data segment to be encoded. For byte mode, it is the number of bytes.</param>\n        /// <param name=\"mode\">The encoding mode used for the data segment.</param>\n        /// <param name=\"version\">The QR code version.</param>\n        /// <returns>The total number of bits required to encode the segment, including the mode indicator, character count\n        /// indicator, and data bits. Returns -1 if the number of characters exceeds the maximum allowed for the\n        /// specified mode and version.</returns>\n        /// <exception cref=\"ArgumentOutOfRangeException\">Thrown if the specified mode is not supported for this calculation.</exception>\n        internal static int GetTotalBits(int numChars, Mode mode, int version)\n        {\n            var ccBits = mode.NumCharCountBits(version);\n            if (numChars >= 1 << ccBits)\n            {\n                return -1;  // The segment's length doesn't fit the field's bit width\n            }\n\n            int dataBits = 0;\n            if (mode == Mode.Numeric)\n            {\n                dataBits = numChars / 3 * 10 + (numChars % 3 == 0 ? 0 : (numChars % 3 * 3 + 1));\n            }\n            else if (mode == Mode.Alphanumeric)\n            {\n                dataBits = numChars / 2 * 11 + (numChars % 2 == 0 ? 0 : 6);\n            }\n            else if (mode == Mode.Byte)\n            {\n                dataBits = numChars * 8;\n            }\n            else if (mode == Mode.Kanji)\n            {\n                dataBits = numChars * 13;\n            }\n            else\n            {\n                throw new ArgumentOutOfRangeException(nameof(mode), \"Unsupported mode for this calculation\");\n            }\n\n            return 4 + ccBits + dataBits;\n        }\n\n        #endregion\n\n\n        #region Constants\n\n        // Describes precisely all strings that are encodable in numeric mode.\n        private static readonly Regex NumericRegex = new Regex(\"^[0-9]*$\", RegexOptions.Compiled);\n\n        // Describes precisely all strings that are encodable in alphanumeric mode.\n        private static readonly Regex AlphanumericRegex = new Regex(\"^[A-Z0-9 $%*+./:-]*$\", RegexOptions.Compiled);\n\n\n        // The set of all legal characters in alphanumeric mode, where\n        // each character value maps to the index in the string.\n        internal const string AlphanumericCharset = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n\n        #endregion\n\n\n        #region Public helper enumeration\n\n        /// <summary>\n        /// Segment encoding mode.\n        /// <para>\n        /// Describes how text or binary data is encoded into bits.\n        /// </para>\n        /// </summary>\n        public sealed class Mode\n        {\n            /// <summary>\n            /// Numeric encoding mode.\n            /// </summary>\n            /// <value>Numeric encoding mode.</value>\n            public static readonly Mode Numeric = new Mode(0x1, 10, 12, 14);\n\n            /// <summary>\n            /// Alphanumeric encoding mode.\n            /// </summary>\n            /// <value>Alphanumeric encoding mode.</value>\n            public static readonly Mode Alphanumeric = new Mode(0x2, 9, 11, 13);\n\n            /// <summary>\n            /// Byte encoding mode.\n            /// </summary>\n            /// <value>Byte encoding mode.</value>\n            public static readonly Mode Byte = new Mode(0x4, 8, 16, 16);\n\n            /// <summary>\n            /// Kanji encoding mode.\n            /// </summary>\n            /// <value>Kanji encoding mode.</value>\n            public static readonly Mode Kanji = new Mode(0x8, 8, 10, 12);\n\n            /// <summary>\n            /// ECI encoding mode.\n            /// </summary>\n            /// <value>ECI encoding mode.</value>\n            public static readonly Mode Eci = new Mode(0x7, 0, 0, 0);\n\n            /// <summary>\n            /// Structured append encoding mode.\n            /// </summary>\n            /// <value>Structured append encoding mode.</value>\n            public static readonly Mode StructuredAppend = new Mode(0x3, 0, 0, 0);\n\n            /// <summary>\n            /// Mode indicator value.\n            /// <para>\n            /// 4 bit value in the QR segment header indicating the encoding mode.\n            /// </para>\n            /// </summary>\n            /// <value>Mode indicator value</value>\n            internal uint ModeBits { get; }\n\n\n            /// <summary>\n            /// Array of character count bit length.\n            /// <para>\n            /// Number of bits for character count in QR segment header.\n            /// The three array values apply to versions 0 to 9, 10 to 26 and 27 to 40\n            /// respectively. All array values are in the range [0, 16].\n            /// </para>\n            /// </summary>\n            /// <value>Array of character count bit length</value>\n            private int[] NumBitsCharCount { get; }\n\n\n            /// <summary>\n            /// Returns the bit length of the character count in the QR segment header\n            /// for the specified QR code version. The result is in the range [0, 16].\n            /// </summary>\n            /// <param name=\"ver\">the QR code version (between 1 and 40)</param>\n            /// <returns></returns>\n            internal int NumCharCountBits(int ver)\n            {\n                Debug.Assert(QrCode.MinVersion <= ver && ver <= QrCode.MaxVersion);\n                return NumBitsCharCount[(ver + 7) / 17];\n            }\n\n            // private constructor to initializes the constants\n            private Mode(uint modeBits, params int[] numBitsCharCount)\n            {\n                ModeBits = modeBits;\n                NumBitsCharCount = numBitsCharCount;\n            }\n        }\n\n        #endregion\n\n    }\n\n}\n"
  },
  {
    "path": "QrCodeGenerator/QrSegmentAdvanced.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing static Net.Codecrete.QrCodeGenerator.QrSegment;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Advanced methods for encoding QR codes using Kanji mode or using multiple segments with different encodings.\n    /// </summary>\n    /// <seealso cref=\"QrSegment\"/>\n    /// <seealso cref=\"QrCode\"/>\n    public static class QrSegmentAdvanced\n    {\n        #region Optimal list of segments encoder\n\n        /// <summary>\n        /// Creates a list of zero or more segments to represent the specified text string.\n        /// The resulting list optimally minimizes the total encoded bit length, subjected to the constraints\n        /// of the specified error correction level, minimum and maximum version number.\n        /// <para>\n        /// This function potentially uses all four text encoding modes: numeric, alphanumeric, byte (UTF-8),\n        /// and Kanji. It is a more sophisticated but slower replacement for <see cref=\"MakeSegments\"/>.\n        /// </para>\n        /// <para>\n        /// The text to be encoded can contain the full set of Unicode characters (code points).\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to be encoded.</param>\n        /// <param name=\"ecl\">The error correction level to use.</param>\n        /// <param name=\"minVersion\">The minimum version (size) of the QR code (between 1 and 40).</param>\n        /// <param name=\"maxVersion\">The maximum version (size) of the QR code (between 1 and 40).</param>\n        /// <returns>The created mutable list of segments encoding the specified text with a minimal bit length.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"text\"/> or <paramref name=\"ecl\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\">1 &#x2264; minVersion &#x2264; maxVersion &#x2264; 40 is violated.</exception>\n        /// <exception cref=\"DataTooLongException\">The text is too long to fit into the QR code with the given encoding parameters.</exception>\n        public static List<QrSegment> MakeSegmentsOptimally(string text, QrCode.Ecc ecl, int minVersion = QrCode.MinVersion, int maxVersion = QrCode.MaxVersion)\n        {\n            // Check arguments\n            Objects.RequireNonNull(text);\n            Objects.RequireNonNull(ecl);\n            if (minVersion < QrCode.MinVersion || minVersion > maxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(minVersion), \"Invalid value\");\n            }\n\n            if (maxVersion > QrCode.MaxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(maxVersion), \"Invalid value\");\n            }\n\n            List<QrSegment> segments = null;\n            var codePoints = ToCodePoints(text);\n            int dataCapacityBits = 0;\n            int dataUsedBits = 0;\n\n            // Iterate through version numbers, and make tentative segments\n            for (var version = minVersion; version <= maxVersion; version += 1)\n            {\n                if (version == minVersion || version == 10 || version == 27)\n                    segments = MakeSegmentsOptimally(codePoints, version);\n                Debug.Assert(segments != null);\n\n                // Check if the segments fit\n                dataCapacityBits = QrCode.GetNumDataCodewords(version, ecl) * 8;\n                dataUsedBits = GetTotalBits(segments, version);\n                if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits)\n                    return segments; // This version number is found to be suitable\n            }\n\n            // All versions in the range could not fit the given text\n            var msg = \"Segment too long\";\n            if (dataUsedBits != -1)\n                msg = $\"Data length = {dataUsedBits} bits, Max capacity = {dataCapacityBits} bits\";\n            throw new DataTooLongException(msg);\n        }\n\n\n        // Returns a new list of segments that is optimal for the given text at the given version number.\n        private static List<QrSegment> MakeSegmentsOptimally(IReadOnlyList<int> codePoints, int version)\n        {\n            if (codePoints.Count == 0)\n                return new List<QrSegment>();\n            var charModes = ComputeCharacterModes(codePoints, version);\n            return SplitIntoSegments(codePoints, charModes);\n        }\n\n        /// <summary>\n        /// Measures the length of the segments optimal for the given version number.\n        /// </summary>\n        /// <param name=\"codePoints\">The text, as an array of codepoints.</param>\n        /// <param name=\"version\">The version.</param>\n        /// <returns>The length, in bits.</returns>\n        private static int MeasureSegmentsOptimally(IReadOnlyList<int> codePoints, int version)\n        {\n            if (codePoints.Count == 0)\n                return 0;\n            var charModes = ComputeCharacterModes(codePoints, version);\n            return MeasureSegments(codePoints, charModes, version);\n        }\n\n\n        // Returns a new array representing the optimal mode per code point based on the given text and version.\n        private static Mode[] ComputeCharacterModes(IReadOnlyList<int> codePoints, int version)\n        {\n            if (codePoints.Count == 0)\n            {\n                throw new ArgumentOutOfRangeException(nameof(codePoints));\n            }\n\n            Mode[] modeTypes = { Mode.Byte, Mode.Alphanumeric, Mode.Numeric, Mode.Kanji }; // Do not modify\n            var numModes = modeTypes.Length;\n\n            // Segment header sizes, measured in 1/6 bits\n            var headCosts = new int[numModes];\n            for (var i = 0; i < numModes; i++)\n            {\n                headCosts[i] = (4 + modeTypes[i].NumCharCountBits(version)) * 6;\n            }\n\n            // charModes[i][j] represents the mode to encode the code point at\n            // index i such that the final segment ends in modeTypes[j] and the\n            // total number of bits is minimized over all possible choices\n            var charModes = new Mode[codePoints.Count, numModes];\n\n            // At the beginning of each iteration of the loop below,\n            // prevCosts[j] is the exact minimum number of 1/6 bits needed to\n            // encode the entire string prefix of length i, and end in modeTypes[j]\n            var prevCosts = (int[])headCosts.Clone();\n\n            // Calculate costs using dynamic programming\n            for (var i = 0; i < codePoints.Count; i++)\n            {\n                var c = codePoints[i];\n                var curCosts = new int[numModes];\n                {\n                    // Always extend a byte mode segment\n                    curCosts[0] = prevCosts[0] + CountUtf8Bytes(c) * 8 * 6;\n                    charModes[i, 0] = modeTypes[0];\n                }\n                // Extend a segment if possible\n                if (AlphanumericCharset.Contains((char)c))\n                {\n                    // Is alphanumeric\n                    curCosts[1] = prevCosts[1] + 33; // 5.5 bits per alphanumeric char\n                    charModes[i, 1] = modeTypes[1];\n                }\n\n                if ('0' <= c && c <= '9')\n                {\n                    // Is numeric\n                    curCosts[2] = prevCosts[2] + 20; // 3.33 bits per digit\n                    charModes[i, 2] = modeTypes[2];\n                }\n\n                if (IsKanji(c))\n                {\n                    curCosts[3] = prevCosts[3] + 78; // 13 bits per Shift JIS char\n                    charModes[i, 3] = modeTypes[3];\n                }\n\n                // Start new segment at the end to switch modes\n                for (var j = 0; j < numModes; j++)\n                {\n                    // To mode\n                    for (var k = 0; k < numModes; k++)\n                    {\n                        // From mode\n                        var newCost = (curCosts[k] + 5) / 6 * 6 + headCosts[j];\n                        if (charModes[i, k] == null || charModes[i, j] != null && newCost >= curCosts[j])\n                            continue;\n                        curCosts[j] = newCost;\n                        charModes[i, j] = modeTypes[k];\n                    }\n                }\n\n                prevCosts = curCosts;\n            }\n\n            // Find optimal ending mode\n            Mode curMode = null;\n            for (int i = 0, minCost = 0; i < numModes; i++)\n            {\n                if (curMode != null && prevCosts[i] >= minCost) continue;\n                minCost = prevCosts[i];\n                curMode = modeTypes[i];\n            }\n\n            // Get optimal mode for each code point by tracing backwards\n            var result = new Mode[codePoints.Count];\n            for (var i = result.Length - 1; i >= 0; i--)\n            {\n                for (var j = 0; j < numModes; j++)\n                {\n                    if (modeTypes[j] != curMode) continue;\n                    curMode = charModes[i, j];\n                    result[i] = curMode;\n                    break;\n                }\n            }\n\n            return result;\n        }\n\n\n        // Returns a new list of segments based on the given text and modes, such that\n        // consecutive code points in the same mode are put into the same segment.\n        private static List<QrSegment> SplitIntoSegments(IReadOnlyList<int> codePoints, IReadOnlyList<Mode> charModes)\n        {\n            if (codePoints.Count == 0)\n                throw new ArgumentOutOfRangeException(nameof(codePoints));\n\n            var result = new List<QrSegment>();\n\n            GroupConsecutiveModes(charModes, (startIndex, endIndex, mode) =>\n            {\n                var s = FromCodePoints(codePoints, startIndex, endIndex - startIndex);\n                if (mode == Mode.Byte)\n                {\n                    result.Add(MakeBytes(Encoding.UTF8.GetBytes(s)));\n                }\n                else if (mode == Mode.Numeric)\n                {\n                    result.Add(MakeNumeric(s));\n                }\n                else if (mode == Mode.Alphanumeric)\n                {\n                    result.Add(MakeAlphanumeric(s));\n                }\n                else if (mode == Mode.Kanji)\n                {\n                    result.Add(MakeKanji(s));\n                }\n                else\n                {\n                    Debug.Assert(false);\n                }\n            });\n\n            return result;\n        }\n\n\n        // Measures the length of segments based on the given text and modes, such that\n        // consecutive code points in the same mode are put into the same segment.\n        private static int MeasureSegments(IReadOnlyList<int> codePoints, IReadOnlyList<Mode> charModes, int version)\n        {\n            if (codePoints.Count == 0)\n                throw new ArgumentOutOfRangeException(nameof(codePoints));\n\n            var result = 0;\n\n            GroupConsecutiveModes(charModes, (startIndex, endIndex, mode) =>\n            {\n                int numChars;\n                if (mode == Mode.Byte)\n                {\n                    numChars = 0;\n                    for (int i = startIndex; i < endIndex; i += 1)\n                    {\n                        numChars += CountUtf8Bytes(codePoints[i]);\n                    }\n                }\n                else\n                {\n                    numChars = endIndex - startIndex;\n                }\n\n                result += GetTotalBits(numChars, mode, version);\n            });\n\n            return result;\n        }\n\n\n        private static string FromCodePoints(IReadOnlyList<int> codepoints, int startIndex, int count)\n        {\n            var useBigEndian = !BitConverter.IsLittleEndian;\n            Encoding utf32 = new UTF32Encoding(useBigEndian, false, true);\n\n            var octets = new byte[count * 4];\n            for (int i = startIndex, j = 0; i < startIndex + count; i++, j += 4)\n            {\n                var bytes = BitConverter.GetBytes(codepoints[i]);\n                octets[j] = bytes[0];\n                octets[j + 1] = bytes[1];\n                octets[j + 2] = bytes[2];\n                octets[j + 3] = bytes[3];\n            }\n\n            return utf32.GetString(octets);\n        }\n\n\n        // Returns a new array of Unicode code points (effectively\n        // UTF-32 / UCS-4) representing the given UTF-16 string.\n        private static int[] ToCodePoints(string s)\n        {\n            var useBigEndian = !BitConverter.IsLittleEndian;\n            Encoding utf32 = new UTF32Encoding(useBigEndian, false, true);\n            var octets = utf32.GetBytes(s);\n\n            var result = new int[octets.Length / 4];\n            for (int i = 0, j = 0; i < octets.Length; i += 4, j++)\n            {\n                result[j] = BitConverter.ToInt32(octets, i);\n            }\n\n            return result;\n        }\n\n\n        // Returns the number of UTF-8 bytes needed to encode the given Unicode code point.\n        private static int CountUtf8Bytes(int cp)\n        {\n            if (cp < 0) throw new ArgumentOutOfRangeException(nameof(cp), \"Invalid code point\");\n            if (cp < 0x80) return 1;\n            if (cp < 0x800) return 2;\n            if (cp < 0x10000) return 3;\n            if (cp < 0x110000) return 4;\n            throw new ArgumentOutOfRangeException(nameof(cp), \"Invalid code point\");\n        }\n\n\n        #endregion\n\n\n        #region Kanji mode segment encoder\n\n        /// <summary>\n        /// Creates a segment encoding the specified text in Kanji mode.\n        /// <para>\n        /// Broadly speaking, the set of encodable characters are Kanji used in Japan,\n        /// Hiragana, Katakana, East Asian punctuation, full-width ASCII, Greek, and Cyrillic.\n        /// Examples of non-encodable characters include ordinary ASCII, half-width Katakana,\n        /// more extensive Chinese Hanzi.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to encoding, containing only characters allowed by the Kanji encoding.</param>\n        /// <returns>The created segment representing the specified text.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"text\"/> is <c>null</c>.</exception>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"text\"/> contains non-encodable characters.</exception>\n        /// <seealso cref=\"IsEncodableAsKanji\"/>\n        public static QrSegment MakeKanji(string text)\n        {\n            Objects.RequireNonNull(text);\n            var ba = new BitArray(0);\n\n            foreach (var val in text.Select(t => UnicodeToQrKanji[t]))\n            {\n                if (val == 0xffff)\n                {\n                    throw new ArgumentOutOfRangeException(nameof(text), \"String contains non-kanji-mode characters\");\n                }\n\n                ba.AppendBits(val, 13);\n            }\n\n            return new QrSegment(Mode.Kanji, text.Length, ba);\n        }\n\n\n        /// <summary>\n        /// Tests whether the specified string can be encoded as a segment in Kanji mode.\n        /// <para>\n        /// Broadly speaking, the set of encodable characters are Kanji used in Japan,\n        /// Hiragana, Katakana, East Asian punctuation, full-width ASCII, Greek, and Cyrillic.\n        /// Examples of non-encodable characters include ordinary ASCII, half-width Katakana,\n        /// more extensive Chinese Hanzi.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to test for encodability.</param>\n        /// <returns><c>true</c> iff each character is in the Kanji mode character set.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"text\"/> is <c>null</c>.</exception>\n\t    public static bool IsEncodableAsKanji(string text)\n        {\n            Objects.RequireNonNull(text);\n            return text.All(t => IsKanji(t));\n        }\n\n\n        private static bool IsKanji(int c)\n        {\n            return c < UnicodeToQrKanji.Length && UnicodeToQrKanji[c] != 0xffff;\n        }\n\n\n        // Data derived from ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT\n        private const string PackedQrKanjiToUnicode =\n            \"MAAwATAC/wz/DjD7/xr/G/8f/wEwmzCcALT/QACo/z7/4/8/MP0w/jCdMJ4wA07dMAUwBjAHMPwgFSAQ/w8AXDAcIBb/XCAmICUgGCAZIBwgHf8I/wkwFDAV/zv/Pf9b/10wCDAJMAowCzAMMA0wDjAPMBAwEf8LIhIAsQDX//8A9/8dImD/HP8eImYiZyIeIjQmQiZA\" +\n            \"ALAgMiAzIQP/5f8EAKIAo/8F/wP/Bv8K/yAApyYGJgUlyyXPJc4lxyXGJaEloCWzJbIlvSW8IDswEiGSIZAhkSGTMBP/////////////////////////////IggiCyKGIocigiKDIioiKf////////////////////8iJyIoAKwh0iHUIgAiA///////////////////\" +\n            \"//////////8iICKlIxIiAiIHImEiUiJqImsiGiI9Ih0iNSIrIiz//////////////////yErIDAmbyZtJmogICAhALb//////////yXv/////////////////////////////////////////////////xD/Ef8S/xP/FP8V/xb/F/8Y/xn///////////////////8h\" +\n            \"/yL/I/8k/yX/Jv8n/yj/Kf8q/yv/LP8t/y7/L/8w/zH/Mv8z/zT/Nf82/zf/OP85/zr///////////////////9B/0L/Q/9E/0X/Rv9H/0j/Sf9K/0v/TP9N/07/T/9Q/1H/Uv9T/1T/Vf9W/1f/WP9Z/1r//////////zBBMEIwQzBEMEUwRjBHMEgwSTBKMEswTDBN\" +\n            \"ME4wTzBQMFEwUjBTMFQwVTBWMFcwWDBZMFowWzBcMF0wXjBfMGAwYTBiMGMwZDBlMGYwZzBoMGkwajBrMGwwbTBuMG8wcDBxMHIwczB0MHUwdjB3MHgweTB6MHswfDB9MH4wfzCAMIEwgjCDMIQwhTCGMIcwiDCJMIowizCMMI0wjjCPMJAwkTCSMJP/////////////\" +\n            \"////////////////////////MKEwojCjMKQwpTCmMKcwqDCpMKowqzCsMK0wrjCvMLAwsTCyMLMwtDC1MLYwtzC4MLkwujC7MLwwvTC+ML8wwDDBMMIwwzDEMMUwxjDHMMgwyTDKMMswzDDNMM4wzzDQMNEw0jDTMNQw1TDWMNcw2DDZMNow2zDcMN0w3jDf//8w4DDh\" +\n            \"MOIw4zDkMOUw5jDnMOgw6TDqMOsw7DDtMO4w7zDwMPEw8jDzMPQw9TD2/////////////////////wORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDowOkA6UDpgOnA6gDqf////////////////////8DsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+\" +\n            \"A78DwAPBA8MDxAPFA8YDxwPIA8n/////////////////////////////////////////////////////////////////////////////////////////////////////////////BBAEEQQSBBMEFAQVBAEEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQm\" +\n            \"BCcEKAQpBCoEKwQsBC0ELgQv////////////////////////////////////////BDAEMQQyBDMENAQ1BFEENgQ3BDgEOQQ6BDsEPAQ9//8EPgQ/BEAEQQRCBEMERARFBEYERwRIBEkESgRLBEwETQROBE///////////////////////////////////yUAJQIlDCUQ\" +\n            \"JRglFCUcJSwlJCU0JTwlASUDJQ8lEyUbJRclIyUzJSslOyVLJSAlLyUoJTclPyUdJTAlJSU4JUL/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"/////////////////////////////////////06cVRZaA5Y/VMBhG2MoWfaQIoR1gxx6UGCqY+FuJWXthGaCppv1aJNXJ2WhYnFbm1nQhnuY9H1ifb6bjmIWfJ+It1uJXrVjCWaXaEiVx5eNZ09O5U8KT01PnVBJVvJZN1nUWgFcCWDfYQ9hcGYTaQVwunVPdXB5+32t\" +\n            \"fe+Aw4QOiGOLApBVkHpTO06VTqVX34CykMF4704AWPFuopA4ejKDKIKLnC9RQVNwVL1U4VbgWftfFZjybeuA5IUt////////lmKWcJagl/tUC1PzW4dwz3+9j8KW6FNvnVx6uk4ReJOB/G4mVhhVBGsdhRqcO1nlU6ltZnTclY9WQk6RkEuW8oNPmQxT4VW2WzBfcWYg\" +\n            \"ZvNoBGw4bPNtKXRbdsh6Tpg0gvGIW4pgku1tsnWrdsqZxWCmiwGNipWyaY5TrVGG//9XElgwWURbtF72YChjqWP0bL9vFHCOcRRxWXHVcz9+AYJ2gtGFl5BgkludG1hpZbxsWnUlUflZLlllX4Bf3GK8ZfpqKmsna7Rzi3/BiVadLJ0OnsRcoWyWg3tRBFxLYbaBxmh2\" +\n            \"cmFOWU/6U3hgaW4pek+X804LUxZO7k9VTz1PoU9zUqBT71YJWQ9awVu2W+F50WaHZ5xntmtMbLNwa3PCeY15vno8e4eCsYLbgwSDd4Pvg9OHZoqyVimMqI/mkE6XHoaKT8Rc6GIRcll1O4Hlgr2G/ozAlsWZE5nVTstPGonjVt5YSljKXvtf62AqYJRgYmHQYhJi0GU5\" +\n            \"////////m0FmZmiwbXdwcHVMdoZ9dYKlh/mVi5aOjJ1R8VK+WRZUs1uzXRZhaGmCba94jYTLiFeKcpOnmrhtbJmohtlXo2f/hs6SDlKDVodUBF7TYuFkuWg8aDhru3NyeLp6a4maidKNa48DkO2Vo5aUl2lbZlyzaX2YTZhOY5t7IGor//9qf2i2nA1vX1JyVZ1gcGLs\" +\n            \"bTtuB27RhFuJEI9EThScOVP2aRtqOpeEaCpRXHrDhLKR3JOMVludKGgigwWEMXylUgiCxXTmTn5Pg1GgW9JSClLYUudd+1WaWCpZ5luMW5hb215yXnlgo2EfYWNhvmPbZWJn0WhTaPprPmtTbFdvIm+Xb0V0sHUYduN3C3r/e6F8IX3pfzZ/8ICdgmaDnomzisyMq5CE\" +\n            \"lFGVk5WRlaKWZZfTmSiCGE44VCtcuF3Mc6l2THc8XKl/640LlsGYEZhUmFhPAU8OU3FVnFZoV/pZR1sJW8RckF4MXn5fzGPuZzpl12XiZx9oy2jE////////al9eMGvFbBdsfXV/eUhbY3oAfQBfvYmPihiMtI13jsyPHZjimg6bPE6AUH1RAFmTW5xiL2KAZOxrOnKg\" +\n            \"dZF5R3+ph/uKvItwY6yDypegVAlUA1WraFRqWIpweCdndZ7NU3RbooEahlCQBk4YTkVOx08RU8pUOFuuXxNgJWVR//9nPWxCbHJs43B4dAN6dnquewh9Gnz+fWZl53JbU7tcRV3oYtJi4GMZbiCGWooxjd2S+G8BeaabWk6oTqtOrE+bT6BQ0VFHevZRcVH2U1RTIVN/\" +\n            \"U+tVrFiDXOFfN19KYC9gUGBtYx9lWWpLbMFywnLtd++A+IEFggiFTpD3k+GX/5lXmlpO8FHdXC1mgWltXEBm8ml1c4loUHyBUMVS5FdHXf6TJmWkayNrPXQ0eYF5vXtLfcqCuYPMiH+JX4s5j9GR0VQfkoBOXVA2U+VTOnLXc5Z36YLmjq+ZxpnImdJRd2Eahl5VsHp6\" +\n            \"UHZb05BHloVOMmrbkedcUVxI////////Y5h6n2yTl3SPYXqqcYqWiHyCaBd+cGhRk2xS8lQbhauKE3+kjs2Q4VNmiIh5QU/CUL5SEVFEVVNXLXPqV4tZUV9iX4RgdWF2YWdhqWOyZDplbGZvaEJuE3Vmej18+31MfZl+S39rgw6DSobNigiKY4tmjv2YGp2PgriPzpvo\" +\n            \"//9Sh2IfZINvwJaZaEFQkWsgbHpvVHp0fVCIQIojZwhO9lA5UCZQZVF8UjhSY1WnVw9YBVrMXvphsmH4YvNjcmkcailyfXKscy54FHhvfXl3DICpiYuLGYzijtKQY5N1lnqYVZoTnnhRQ1OfU7Nee18mbhtukHOEc/59Q4I3igCK+pZQTk5QC1PkVHxW+lnRW2Rd8V6r\" +\n            \"XydiOGVFZ69uVnLQfMqItIChgOGD8IZOioeN6JI3lseYZ58TTpROkk8NU0hUSVQ+Wi9fjF+hYJ9op2qOdFp4gYqeiqSLd5GQTl6byU6kT3xPr1AZUBZRSVFsUp9SuVL+U5pT41QR////////VA5ViVdRV6JZfVtUW11bj13lXedd9154XoNeml63XxhgUmFMYpdi2GOn\" +\n            \"ZTtmAmZDZvRnbWghaJdpy2xfbSptaW4vbp11MnaHeGx6P3zgfQV9GH1efbGAFYADgK+AsYFUgY+CKoNSiEyIYYsbjKKM/JDKkXWScXg/kvyVpJZN//+YBZmZmtidO1JbUqtT91QIWNVi92/gjGqPX565UUtSO1RKVv16QJF3nWCe0nNEbwmBcHURX/1g2pqoctuPvGtk\" +\n            \"mANOylbwV2RYvlpaYGhhx2YPZgZoOWixbfd11X06gm6bQk6bT1BTyVUGXW9d5l3uZ/tsmXRzeAKKUJOWiN9XUF6nYytQtVCsUY1nAFTJWF5Zu1uwX2liTWOhaD1rc24IcH2Rx3KAeBV4JnltZY59MIPciMGPCZabUmRXKGdQf2qMoVG0V0KWKlg6aYqAtFSyXQ5X/HiV\" +\n            \"nfpPXFJKVItkPmYoZxRn9XqEe1Z9IpMvaFybrXs5UxlRilI3////////W99i9mSuZOZnLWu6hamW0XaQm9ZjTJMGm6t2v2ZSTglQmFPCXHFg6GSSZWNoX3Hmc8p1I3uXfoKGlYuDjNuReJkQZaxmq2uLTtVO1E86T39SOlP4U/JV41bbWOtZy1nJWf9bUFxNXgJeK1/X\" +\n            \"YB1jB2UvW1xlr2W9ZehnnWti//9re2wPc0V5SXnBfPh9GX0rgKKBAoHziZaKXoppimaKjIrujMeM3JbMmPxrb06LTzxPjVFQW1db+mFIYwFmQmshbstsu3I+dL111HjBeTqADIAzgeqElI+ebFCef18Pi1idK3r6jvhbjZbrTgNT8Vf3WTFayVukYIluf28Gdb6M6luf\" +\n            \"hQB74FByZ/SCnVxhhUp+HoIOUZlcBGNojWZlnHFueT59F4AFix2OypBuhseQqlAfUvpcOmdTcHxyNZFMkciTK4LlW8JfMWD5TjtT1luIYktnMWuKculz4HougWuNo5FSmZZRElPXVGpb/2OIajl9rJcAVtpTzlRo////////W5dcMV3eT+5hAWL+bTJ5wHnLfUJ+TX/S\" +\n            \"ge2CH4SQiEaJcouQjnSPL5AxkUuRbJbGkZxOwE9PUUVTQV+TYg5n1GxBbgtzY34mkc2Sg1PUWRlbv23ReV1+LnybWH5xn1H6iFOP8E/KXPtmJXeseuOCHJn/UcZfqmXsaW9riW3z//9ulm9kdv59FF3hkHWRh5gGUeZSHWJAZpFm2W4aXrZ90n9yZviFr4X3ivhSqVPZ\" +\n            \"WXNej1+QYFWS5JZkULdRH1LdUyBTR1PsVOhVRlUxVhdZaFm+WjxbtVwGXA9cEVwaXoReil7gX3Bif2KEYttjjGN3ZgdmDGYtZnZnfmiiah9qNWy8bYhuCW5YcTxxJnFndcd3AXhdeQF5ZXnweuB7EXynfTmAloPWhIuFSYhdiPOKH4o8ilSKc4xhjN6RpJJmk36UGJac\" +\n            \"l5hOCk4ITh5OV1GXUnBXzlg0WMxbIl44YMVk/mdhZ1ZtRHK2dXN6Y4S4i3KRuJMgVjFX9Jj+////////Yu1pDWuWce1+VIB3gnKJ5pjfh1WPsVw7TzhP4U+1VQdaIFvdW+lfw2FOYy9lsGZLaO5pm214bfF1M3W5dx95XnnmfTOB44KvhaqJqoo6jquPm5Aykd2XB066\" +\n            \"TsFSA1h1WOxcC3UaXD2BTooKj8WWY5dteyWKz5gIkWJW81Oo//+QF1Q5V4JeJWOobDRwindhfIt/4IhwkEKRVJMQkxiWj3RemsRdB11pZXBnoo2olttjbmdJaRmDxZgXlsCI/m+EZHpb+E4WcCx1XWYvUcRSNlLiWdNfgWAnYhBlP2V0Zh9mdGjyaBZrY24FcnJ1H3bb\" +\n            \"fL6AVljwiP2Jf4qgipOKy5AdkZKXUpdZZYl6DoEGlrteLWDcYhplpWYUZ5B383pNfE1+PoEKjKyNZI3hjl94qVIHYtljpWRCYpiKLXqDe8CKrJbqfXaCDIdJTtlRSFNDU2Bbo1wCXBZd3WImYkdksGgTaDRsyW1FbRdn029ccU5xfWXLen97rX3a////////fkp/qIF6\" +\n            \"ghuCOYWmim6Mzo31kHiQd5KtkpGVg5uuUk1VhG84cTZRaHmFflWBs3zOVkxYUVyoY6pm/mb9aVpy2XWPdY55DnlWed98l30gfUSGB4o0ljuQYZ8gUOdSdVPMU+JQCVWqWO5ZT3I9W4tcZFMdYONg82NcY4NjP2O7//9kzWXpZvld42nNaf1vFXHlTol16Xb4epN8333P\" +\n            \"fZyAYYNJg1iEbIS8hfuIxY1wkAGQbZOXlxyaElDPWJdhjoHThTWNCJAgT8NQdFJHU3Ngb2NJZ19uLI2zkB9P11xejMplz32aU1KIllF2Y8NbWFtrXApkDWdRkFxO1lkaWSpscIpRVT5YFVmlYPBiU2fBgjVpVZZAmcSaKE9TWAZb/oAQXLFeL1+FYCBhS2I0Zv9s8G7e\" +\n            \"gM6Bf4LUiIuMuJAAkC6Wip7bm9tO41PwWSd7LJGNmEyd+W7dcCdTU1VEW4ViWGKeYtNsom/vdCKKF5Q4b8GK/oM4UeeG+FPq////////U+lPRpBUj7BZaoExXf166o+/aNqMN3L4nEhqPYqwTjlTWFYGV2ZixWOiZeZrTm3hbltwrXfteu97qn27gD2AxobLipWTW1bj\" +\n            \"WMdfPmWtZpZqgGu1dTeKx1Akd+VXMF8bYGVmemxgdfR6Gn9ugfSHGJBFmbN7yXVcevl7UYTE//+QEHnpepKDNlrhd0BOLU7yW5lf4GK9Zjxn8WzohmuId4o7kU6S85nQahdwJnMqgueEV4yvTgFRRlHLVYtb9V4WXjNegV8UXzVfa1+0YfJjEWaiZx1vbnJSdTp3OoB0\" +\n            \"gTmBeId2ir+K3I2FjfOSmpV3mAKc5VLFY1d29GcVbIhzzYzDk66Wc20lWJxpDmnMj/2TmnXbkBpYWmgCY7Rp+09Dbyxn2I+7hSZ9tJNUaT9vcFdqWPdbLH0scipUCpHjnbROrU9OUFxQdVJDjJ5USFgkW5peHV6VXq1e918fYIxitWM6Y9Bor2xAeId5jnoLfeCCR4oC\" +\n            \"iuaORJAT////////kLiRLZHYnw5s5WRYZOJldW70doR7G5Bpk9FuulTyX7lkpI9Nj+2SRFF4WGtZKVxVXpdt+36PdRyMvI7imFtwuU8da79vsXUwlvtRTlQQWDVYV1msXGBfkmWXZ1xuIXZ7g9+M7ZAUkP2TTXgleDpSql6mVx9ZdGASUBJRWlGs//9RzVIAVRBYVFhY\" +\n            \"WVdblVz2XYtgvGKVZC1ncWhDaLxo33bXbdhub22bcG9xyF9Tddh5d3tJe1R7UnzWfXFSMIRjhWmF5IoOiwSMRo4PkAOQD5QZlnaYLZowldhQzVLVVAxYAlwOYadknm0ed7N65YD0hASQU5KFXOCdB1M/X5dfs22ccnl3Y3m/e+Rr0nLsiq1oA2phUfh6gWk0XEqc9oLr\" +\n            \"W8WRSXAeVnhcb2DHZWZsjIxakEGYE1RRZseSDVlIkKNRhU5NUeqFmYsOcFhjepNLaWKZtH4EdXdTV2lgjt+W42xdToxcPF8Qj+lTAozRgImGeV7/ZeVOc1Fl////////WYJcP5fuTvtZil/Nio1v4XmweWJb54RxcytxsV50X/Vje2SaccN8mE5DXvxOS1fcVqJgqW/D\" +\n            \"fQ2A/YEzgb+PsomXhqRd9GKKZK2Jh2d3bOJtPnQ2eDRaRn91gq2ZrE/zXsNi3WOSZVdnb3bDckyAzIC6jymRTVANV/lakmiF//9pc3Fkcv2Mt1jyjOCWapAZh3955HfnhClPL1JlU1pizWfPbMp2fXuUfJWCNoWEj+tm3W8gcgZ+G4OrmcGeplH9e7F4cnu4gId7SGro\" +\n            \"XmGAjHVRdWBRa5Jibox2epGXmupPEH9wYpx7T5WlnOlWelhZhuSWvE80UiRTSlPNU9teBmQsZZFnf2w+bE5ySHKvc+11VH5BgiyF6Yype8SRxnFpmBKY72M9Zml1anbkeNCFQ4buUypTUVQmWYNeh198YLJiSWJ5YqtlkGvUbMx1snaueJF52H3Lf3eApYirirmMu5B/\" +\n            \"l16Y22oLfDhQmVw+X65nh2vYdDV3CX+O////////nztnynoXUzl1i5rtX2aBnYPxgJhfPF/FdWJ7RpA8aGdZ61qbfRB2fossT/VfamoZbDdvAnTieWiIaIpVjHle32PPdcV50oLXkyiS8oSchu2cLVTBX2xljG1ccBWMp4zTmDtlT3T2Tg1O2FfgWStaZlvMUaheA16c\" +\n            \"YBZidmV3//9lp2ZubW5yNnsmgVCBmoKZi1yMoIzmjXSWHJZET65kq2tmgh6EYYVqkOhcAWlTmKiEeoVXTw9Sb1+pXkVnDXmPgXmJB4mGbfVfF2JVbLhOz3Jpm5JSBlQ7VnRYs2GkYm5xGllufIl83n0blvBlh4BeThlPdVF1WEBeY15zXwpnxE4mhT2ViZZbfHOYAVD7\" +\n            \"WMF2VninUiV3pYURe4ZQT1kJckd7x33oj7qP1JBNT79SyVopXwGXrU/dgheS6lcDY1VraXUriNyPFHpCUt9Yk2FVYgpmrmvNfD+D6VAjT/hTBVRGWDFZSVudXPBc710pXpZisWNnZT5luWcL////////bNVs4XD5eDJ+K4DegrOEDITshwKJEooqjEqQppLSmP2c851s\" +\n            \"Tk9OoVCNUlZXSlmoXj1f2F/ZYj9mtGcbZ9Bo0lGSfSGAqoGoiwCMjIy/kn6WMlQgmCxTF1DVU1xYqGSyZzRyZ3dmekaR5lLDbKFrhlgAXkxZVGcsf/tR4XbG//9kaXjom1Seu1fLWblmJ2eaa85U6WnZXlWBnGeVm6pn/pxSaF1Opk/jU8hiuWcrbKuPxE+tfm2ev04H\" +\n            \"YWJugG8rhRNUc2cqm0Vd83uVXKxbxoccbkqE0XoUgQhZmXyNbBF3IFLZWSJxIXJfd9uXJ51haQtaf1oYUaVUDVR9Zg5234/3kpic9Fnqcl1uxVFNaMl9v33sl2KeumR4aiGDAlmEW19r23MbdvJ9soAXhJlRMmcontl27mdiUv+ZBVwkYjt8foywVU9gtn0LlYBTAU5f\" +\n            \"UbZZHHI6gDaRzl8ld+JThF95fQSFrIozjo2XVmfzha6UU2EJYQhsuXZS////////iu2POFUvT1FRKlLHU8tbpV59YKBhgmPWZwln2m5nbYxzNnM3dTF5UIjVipiQSpCRkPWWxIeNWRVOiE9ZTg6KiY8/mBBQrV58WZZbuV64Y9pj+mTBZtxpSmnYbQtutnGUdSh6r3+K\" +\n            \"gACESYTJiYGLIY4KkGWWfZkKYX5ikWsy//9sg210f8x//G3Af4WHuoj4Z2WDsZg8lvdtG31hhD2Rak5xU3VdUGsEb+uFzYYtiadSKVQPXGVnTmiodAZ0g3XiiM+I4ZHMluKWeF+Lc4d6y4ROY6B1ZVKJbUFunHQJdVl4a3ySloZ63J+NT7ZhbmXFhlxOhk6uUNpOIVHM\" +\n            \"W+5lmWiBbbxzH3ZCd616HHzngm+K0pB8kc+WdZgYUpt90VArU5hnl23LcdB0M4HojyqWo5xXnp90YFhBbZl9L5heTuRPNk+LUbdSsV26YBxzsnk8gtOSNJa3lvaXCp6Xn2Jmpmt0UhdSo3DIiMJeyWBLYZBvI3FJfD599IBv////////hO6QI5MsVEKbb2rTcImMwo3v\" +\n            \"lzJStFpBXspfBGcXaXxplG1qbw9yYnL8e+2AAYB+h0uQzlFtnpN5hICLkzKK1lAtVIyKcWtqjMSBB2DRZ6Cd8k6ZTpicEIprhcGFaGkAbn54l4FV////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"/////////////////////////////18MThBOFU4qTjFONk48Tj9OQk5WTlhOgk6FjGtOioISXw1Ojk6eTp9OoE6iTrBOs062Ts5OzU7ETsZOwk7XTt5O7U7fTvdPCU9aTzBPW09dT1dPR092T4hPj0+YT3tPaU9wT5FPb0+GT5ZRGE/UT99Pzk/YT9tP0U/aT9BP5E/l\" +\n            \"UBpQKFAUUCpQJVAFTxxP9lAhUClQLE/+T+9QEVAGUENQR2cDUFVQUFBIUFpQVlBsUHhQgFCaUIVQtFCy////////UMlQylCzUMJQ1lDeUOVQ7VDjUO5Q+VD1UQlRAVECURZRFVEUURpRIVE6UTdRPFE7UT9RQFFSUUxRVFFievhRaVFqUW5RgFGCVthRjFGJUY9RkVGT\" +\n            \"UZVRllGkUaZRolGpUapRq1GzUbFRslGwUbVRvVHFUclR21HghlVR6VHt//9R8FH1Uf5SBFILUhRSDlInUipSLlIzUjlST1JEUktSTFJeUlRSalJ0UmlSc1J/Un1SjVKUUpJScVKIUpGPqI+nUqxSrVK8UrVSwVLNUtdS3lLjUuaY7VLgUvNS9VL4UvlTBlMIdThTDVMQ\" +\n            \"Uw9TFVMaUyNTL1MxUzNTOFNAU0ZTRU4XU0lTTVHWU15TaVNuWRhTe1N3U4JTllOgU6ZTpVOuU7BTtlPDfBKW2VPfZvxx7lPuU+hT7VP6VAFUPVRAVCxULVQ8VC5UNlQpVB1UTlSPVHVUjlRfVHFUd1RwVJJUe1SAVHZUhFSQVIZUx1SiVLhUpVSsVMRUyFSo////////\" +\n            \"VKtUwlSkVL5UvFTYVOVU5lUPVRRU/VTuVO1U+lTiVTlVQFVjVUxVLlVcVUVVVlVXVThVM1VdVZlVgFSvVYpVn1V7VX5VmFWeVa5VfFWDValVh1WoVdpVxVXfVcRV3FXkVdRWFFX3VhZV/lX9VhtV+VZOVlBx31Y0VjZWMlY4//9Wa1ZkVi9WbFZqVoZWgFaKVqBWlFaP\" +\n            \"VqVWrla2VrRWwla8VsFWw1bAVshWzlbRVtNW11buVvlXAFb/VwRXCVcIVwtXDVcTVxhXFlXHVxxXJlc3VzhXTlc7V0BXT1dpV8BXiFdhV39XiVeTV6BXs1ekV6pXsFfDV8ZX1FfSV9NYClfWV+NYC1gZWB1YclghWGJYS1hwa8BYUlg9WHlYhVi5WJ9Yq1i6WN5Yu1i4\" +\n            \"WK5YxVjTWNFY11jZWNhY5VjcWORY31jvWPpY+Vj7WPxY/VkCWQpZEFkbaKZZJVksWS1ZMlk4WT560llVWVBZTllaWVhZYllgWWdZbFlp////////WXhZgVmdT15Pq1mjWbJZxlnoWdxZjVnZWdpaJVofWhFaHFoJWhpaQFpsWklaNVo2WmJaalqaWrxavlrLWsJavVrj\" +\n            \"Wtda5lrpWtZa+lr7WwxbC1sWWzJa0FsqWzZbPltDW0VbQFtRW1VbWltbW2VbaVtwW3NbdVt4ZYhbeluA//9bg1umW7hbw1vHW8lb1FvQW+Rb5lviW95b5VvrW/Bb9lvzXAVcB1wIXA1cE1wgXCJcKFw4XDlcQVxGXE5cU1xQXE9bcVxsXG5OYlx2XHlcjFyRXJRZm1yr\" +\n            \"XLtctly8XLdcxVy+XMdc2VzpXP1c+lztXYxc6l0LXRVdF11cXR9dG10RXRRdIl0aXRldGF1MXVJdTl1LXWxdc112XYddhF2CXaJdnV2sXa5dvV2QXbddvF3JXc1d013SXdZd213rXfJd9V4LXhpeGV4RXhteNl43XkReQ15AXk5eV15UXl9eYl5kXkdedV52XnqevF5/\" +\n            \"XqBewV7CXshe0F7P////////XtZe417dXtpe217iXuFe6F7pXuxe8V7zXvBe9F74Xv5fA18JX11fXF8LXxFfFl8pXy1fOF9BX0hfTF9OXy9fUV9WX1dfWV9hX21fc193X4Nfgl9/X4pfiF+RX4dfnl+ZX5hfoF+oX61fvF/WX/tf5F/4X/Ff3WCzX/9gIWBg//9gGWAQ\" +\n            \"YClgDmAxYBtgFWArYCZgD2A6YFpgQWBqYHdgX2BKYEZgTWBjYENgZGBCYGxga2BZYIFgjWDnYINgmmCEYJtglmCXYJJgp2CLYOFguGDgYNNgtF/wYL1gxmC1YNhhTWEVYQZg9mD3YQBg9GD6YQNhIWD7YPFhDWEOYUdhPmEoYSdhSmE/YTxhLGE0YT1hQmFEYXNhd2FY\" +\n            \"YVlhWmFrYXRhb2FlYXFhX2FdYVNhdWGZYZZhh2GsYZRhmmGKYZFhq2GuYcxhymHJYfdhyGHDYcZhumHLf3lhzWHmYeNh9mH6YfRh/2H9Yfxh/mIAYghiCWINYgxiFGIb////////Yh5iIWIqYi5iMGIyYjNiQWJOYl5iY2JbYmBiaGJ8YoJiiWJ+YpJik2KWYtRig2KU\" +\n            \"Ytdi0WK7Ys9i/2LGZNRiyGLcYsxiymLCYsdim2LJYwxi7mLxYydjAmMIYu9i9WNQYz5jTWQcY09jlmOOY4Bjq2N2Y6Njj2OJY59jtWNr//9jaWO+Y+ljwGPGY+NjyWPSY/ZjxGQWZDRkBmQTZCZkNmUdZBdkKGQPZGdkb2R2ZE5lKmSVZJNkpWSpZIhkvGTaZNJkxWTH\" +\n            \"ZLtk2GTCZPFk54IJZOBk4WKsZONk72UsZPZk9GTyZPplAGT9ZRhlHGUFZSRlI2UrZTRlNWU3ZTZlOHVLZUhlVmVVZU1lWGVeZV1lcmV4ZYJlg4uKZZtln2WrZbdlw2XGZcFlxGXMZdJl22XZZeBl4WXxZ3JmCmYDZftnc2Y1ZjZmNGYcZk9mRGZJZkFmXmZdZmRmZ2Zo\" +\n            \"Zl9mYmZwZoNmiGaOZolmhGaYZp1mwWa5Zslmvma8////////ZsRmuGbWZtpm4GY/ZuZm6WbwZvVm92cPZxZnHmcmZyeXOGcuZz9nNmdBZzhnN2dGZ15nYGdZZ2NnZGeJZ3BnqWd8Z2pnjGeLZ6ZnoWeFZ7dn72e0Z+xns2fpZ7hn5GfeZ91n4mfuZ7lnzmfGZ+dqnGge\" +\n            \"aEZoKWhAaE1oMmhO//9os2graFloY2h3aH9on2iPaK1olGidaJtog2quaLlodGi1aKBoumkPaI1ofmkBaMppCGjYaSJpJmjhaQxozWjUaOdo1Wk2aRJpBGjXaONpJWj5aOBo72koaSppGmkjaSFoxml5aXdpXGl4aWtpVGl+aW5pOWl0aT1pWWkwaWFpXmldaYFpammy\" +\n            \"aa5p0Gm/acFp02m+ac5b6GnKad1pu2nDaadqLmmRaaBpnGmVabRp3mnoagJqG2n/awpp+WnyaedqBWmxah5p7WoUaetqCmoSasFqI2oTakRqDGpyajZqeGpHamJqWWpmakhqOGoiapBqjWqgaoRqomqj////////apeGF2q7asNqwmq4arNqrGreatFq32qqatpq6mr7\" +\n            \"awWGFmr6axJrFpsxax9rOGs3dtxrOZjua0drQ2tJa1BrWWtUa1trX2tha3hreWt/a4BrhGuDa41rmGuVa55rpGuqa6trr2uya7Frs2u3a7xrxmvLa9Nr32vsa+tr82vv//+evmwIbBNsFGwbbCRsI2xebFVsYmxqbIJsjWyabIFsm2x+bGhsc2ySbJBsxGzxbNNsvWzX\" +\n            \"bMVs3WyubLFsvmy6bNts72zZbOptH4hNbTZtK209bThtGW01bTNtEm0MbWNtk21kbVpteW1ZbY5tlW/kbYVt+W4VbgpttW3HbeZtuG3Gbext3m3Mbeht0m3Fbfpt2W3kbdVt6m3ubi1ubm4ubhlucm5fbj5uI25rbitudm5Nbh9uQ246bk5uJG7/bh1uOG6CbqpumG7J\" +\n            \"brdu0269bq9uxG6ybtRu1W6PbqVuwm6fb0FvEXBMbuxu+G7+bz9u8m8xbu9vMm7M////////bz5vE273b4Zvem94b4FvgG9vb1tv829tb4JvfG9Yb45vkW/Cb2Zvs2+jb6FvpG+5b8Zvqm/fb9Vv7G/Ub9hv8W/ub9twCXALb/pwEXABcA9v/nAbcBpvdHAdcBhwH3Aw\" +\n            \"cD5wMnBRcGNwmXCScK9w8XCscLhws3CucN9wy3Dd//9w2XEJcP1xHHEZcWVxVXGIcWZxYnFMcVZxbHGPcftxhHGVcahxrHHXcblxvnHScclx1HHOceBx7HHncfVx/HH5cf9yDXIQchtyKHItcixyMHIycjtyPHI/ckByRnJLclhydHJ+coJygXKHcpJylnKicqdyuXKy\" +\n            \"csNyxnLEcs5y0nLicuBy4XL5cvdQD3MXcwpzHHMWcx1zNHMvcylzJXM+c05zT57Yc1dzanNoc3BzeHN1c3tzenPIc7NzznO7c8Bz5XPuc950onQFdG90JXP4dDJ0OnRVdD90X3RZdEF0XHRpdHB0Y3RqdHZ0fnSLdJ50p3TKdM901HPx////////dOB043TndOl07nTy\" +\n            \"dPB08XT4dPd1BHUDdQV1DHUOdQ11FXUTdR51JnUsdTx1RHVNdUp1SXVbdUZ1WnVpdWR1Z3VrdW11eHV2dYZ1h3V0dYp1iXWCdZR1mnWddaV1o3XCdbN1w3W1db11uHW8dbF1zXXKddJ12XXjdd51/nX///91/HYBdfB1+nXydfN2C3YNdgl2H3YndiB2IXYidiR2NHYw\" +\n            \"djt2R3ZIdkZ2XHZYdmF2YnZodml2anZndmx2cHZydnZ2eHZ8doB2g3aIdot2jnaWdpN2mXaadrB2tHa4drl2unbCds121nbSdt524Xbldud26oYvdvt3CHcHdwR3KXckdx53JXcmdxt3N3c4d0d3Wndod2t3W3dld393fnd5d453i3eRd6B3nnewd7Z3uXe/d7x3vXe7\" +\n            \"d8d3zXfXd9p33Hfjd+53/HgMeBJ5JnggeSp4RXiOeHR4hnh8eJp4jHijeLV4qniveNF4xnjLeNR4vni8eMV4ynjs////////eOd42nj9ePR5B3kSeRF5GXkseSt5QHlgeVd5X3laeVV5U3l6eX95inmdeaefS3mqea55s3m5ebp5yXnVeed57HnheeN6CHoNehh6GXog\" +\n            \"eh95gHoxejt6Pno3ekN6V3pJemF6Ynppn516cHp5en16iHqXepV6mHqWeql6yHqw//96tnrFesR6v5CDesd6ynrNes961XrTetl62nrdeuF64nrmeu168HsCew97CnsGezN7GHsZex57NXsoezZ7UHt6ewR7TXsLe0x7RXt1e2V7dHtne3B7cXtse257nXuYe597jXuc\" +\n            \"e5p7i3uSe497XXuZe8t7wXvMe897tHvGe9176XwRfBR75nvlfGB8AHwHfBN783v3fBd8DXv2fCN8J3wqfB98N3wrfD18THxDfFR8T3xAfFB8WHxffGR8VnxlfGx8dXyDfJB8pHytfKJ8q3yhfKh8s3yyfLF8rny5fL18wHzFfMJ82HzSfNx84ps7fO988nz0fPZ8+n0G\" +\n            \"////////fQJ9HH0VfQp9RX1LfS59Mn0/fTV9Rn1zfVZ9Tn1yfWh9bn1PfWN9k32JfVt9j319fZt9un2ufaN9tX3Hfb19q349faJ9r33cfbh9n32wfdh93X3kfd59+33yfeF+BX4KfiN+IX4SfjF+H34Jfgt+In5GfmZ+O341fjl+Q343//9+Mn46fmd+XX5Wfl5+WX5a\" +\n            \"fnl+an5pfnx+e36DfdV+fY+ufn9+iH6Jfox+kn6QfpN+lH6Wfo5+m36cfzh/On9Ff0x/TX9Of1B/UX9Vf1R/WH9ff2B/aH9pf2d/eH+Cf4Z/g3+If4d/jH+Uf55/nX+af6N/r3+yf7l/rn+2f7iLcX/Ff8Z/yn/Vf9R/4X/mf+l/83/5mNyABoAEgAuAEoAYgBmAHIAh\" +\n            \"gCiAP4A7gEqARoBSgFiAWoBfgGKAaIBzgHKAcIB2gHmAfYB/gISAhoCFgJuAk4CagK1RkICsgNuA5YDZgN2AxIDagNaBCYDvgPGBG4EpgSOBL4FL////////louBRoE+gVOBUYD8gXGBboFlgWaBdIGDgYiBioGAgYKBoIGVgaSBo4FfgZOBqYGwgbWBvoG4gb2BwIHC\" +\n            \"gbqByYHNgdGB2YHYgciB2oHfgeCB54H6gfuB/oIBggKCBYIHggqCDYIQghaCKYIrgjiCM4JAglmCWIJdglqCX4Jk//+CYoJogmqCa4IugnGCd4J4gn6CjYKSgquCn4K7gqyC4YLjgt+C0oL0gvOC+oOTgwOC+4L5gt6DBoLcgwmC2YM1gzSDFoMygzGDQIM5g1CDRYMv\" +\n            \"gyuDF4MYg4WDmoOqg5+DooOWgyODjoOHg4qDfIO1g3ODdYOgg4mDqIP0hBOD64POg/2EA4PYhAuDwYP3hAeD4IPyhA2EIoQgg72EOIUGg/uEbYQqhDyFWoSEhHeEa4SthG6EgoRphEaELIRvhHmENYTKhGKEuYS/hJ+E2YTNhLuE2oTQhMGExoTWhKGFIYT/hPSFF4UY\" +\n            \"hSyFH4UVhRSE/IVAhWOFWIVI////////hUGGAoVLhVWFgIWkhYiFkYWKhaiFbYWUhZuF6oWHhZyFd4V+hZCFyYW6hc+FuYXQhdWF3YXlhdyF+YYKhhOGC4X+hfqGBoYihhqGMIY/hk1OVYZUhl+GZ4ZxhpOGo4aphqqGi4aMhraGr4bEhsaGsIbJiCOGq4bUht6G6Ybs\" +\n            \"//+G34bbhu+HEocGhwiHAIcDhvuHEYcJhw2G+YcKhzSHP4c3hzuHJYcphxqHYIdfh3iHTIdOh3SHV4doh26HWYdTh2OHaogFh6KHn4eCh6+Hy4e9h8CH0JbWh6uHxIezh8eHxoe7h++H8ofgiA+IDYf+h/aH94gOh9KIEYgWiBWIIoghiDGINog5iCeIO4hEiEKIUohZ\" +\n            \"iF6IYohriIGIfoieiHWIfYi1iHKIgoiXiJKIroiZiKKIjYikiLCIv4ixiMOIxIjUiNiI2YjdiPmJAoj8iPSI6IjyiQSJDIkKiROJQ4keiSWJKokriUGJRIk7iTaJOIlMiR2JYIle////////iWaJZIltiWqJb4l0iXeJfomDiYiJiomTiZiJoYmpiaaJrImvibKJuom9\" +\n            \"ib+JwInaidyJ3YnnifSJ+IoDihaKEIoMihuKHYolijaKQYpbilKKRopIinyKbYpsimKKhYqCioSKqIqhipGKpYqmipqKo4rEis2KworaiuuK84rn//+K5IrxixSK4IriiveK3orbiwyLB4saiuGLFosQixeLIIszl6uLJosriz6LKItBi0yLT4tOi0mLVotbi1qLa4tf\" +\n            \"i2yLb4t0i32LgIuMi46LkouTi5aLmYuajDqMQYw/jEiMTIxOjFCMVYxijGyMeIx6jIKMiYyFjIqMjYyOjJSMfIyYYh2MrYyqjL2MsoyzjK6MtozIjMGM5IzjjNqM/Yz6jPuNBI0FjQqNB40PjQ2NEJ9OjROMzY0UjRaNZ41tjXGNc42BjZmNwo2+jbqNz43ajdaNzI3b\" +\n            \"jcuN6o3rjd+N4438jgiOCY3/jh2OHo4Qjh+OQo41jjCONI5K////////jkeOSY5MjlCOSI5ZjmSOYI4qjmOOVY52jnKOfI6BjoeOhY6EjouOio6TjpGOlI6ZjqqOoY6sjrCOxo6xjr6OxY7IjsuO247jjvyO+47rjv6PCo8FjxWPEo8ZjxOPHI8fjxuPDI8mjzOPO485\" +\n            \"j0WPQo8+j0yPSY9Gj06PV49c//+PYo9jj2SPnI+fj6OPrY+vj7eP2o/lj+KP6o/vkIeP9JAFj/mP+pARkBWQIZANkB6QFpALkCeQNpA1kDmP+JBPkFCQUZBSkA6QSZA+kFaQWJBekGiQb5B2lqiQcpCCkH2QgZCAkIqQiZCPkKiQr5CxkLWQ4pDkYkiQ25ECkRKRGZEy\" +\n            \"kTCRSpFWkViRY5FlkWmRc5FykYuRiZGCkaKRq5GvkaqRtZG0kbqRwJHBkcmRy5HQkdaR35HhkduR/JH1kfaSHpH/khSSLJIVkhGSXpJXkkWSSZJkkkiSlZI/kkuSUJKckpaSk5KbklqSz5K5kreS6ZMPkvqTRJMu////////kxmTIpMakyOTOpM1kzuTXJNgk3yTbpNW\" +\n            \"k7CTrJOtk5STuZPWk9eT6JPlk9iTw5Pdk9CTyJPklBqUFJQTlAOUB5QQlDaUK5Q1lCGUOpRBlFKURJRblGCUYpRelGqSKZRwlHWUd5R9lFqUfJR+lIGUf5WClYeVipWUlZaVmJWZ//+VoJWolaeVrZW8lbuVuZW+lcpv9pXDlc2VzJXVldSV1pXcleGV5ZXiliGWKJYu\" +\n            \"li+WQpZMlk+WS5Z3llyWXpZdll+WZpZylmyWjZaYlpWWl5aqlqeWsZaylrCWtJa2lriWuZbOlsuWyZbNiU2W3JcNltWW+ZcElwaXCJcTlw6XEZcPlxaXGZcklyqXMJc5lz2XPpdEl0aXSJdCl0mXXJdgl2SXZpdoUtKXa5dxl3mXhZd8l4GXepeGl4uXj5eQl5yXqJem\" +\n            \"l6OXs5e0l8OXxpfIl8uX3Jftn0+X8nrfl/aX9ZgPmAyYOJgkmCGYN5g9mEaYT5hLmGuYb5hw////////mHGYdJhzmKqYr5ixmLaYxJjDmMaY6ZjrmQOZCZkSmRSZGJkhmR2ZHpkkmSCZLJkumT2ZPplCmUmZRZlQmUuZUZlSmUyZVZmXmZiZpZmtma6ZvJnfmduZ3ZnY\" +\n            \"mdGZ7ZnumfGZ8pn7mfiaAZoPmgWZ4poZmiuaN5pFmkKaQJpD//+aPppVmk2aW5pXml+aYpplmmSaaZprmmqarZqwmryawJrPmtGa05rUmt6a35rimuOa5prvmuua7pr0mvGa95r7mwabGJsamx+bIpsjmyWbJ5somymbKpsumy+bMptEm0ObT5tNm06bUZtYm3Sbk5uD\" +\n            \"m5GblpuXm5+boJuom7SbwJvKm7mbxpvPm9Gb0pvjm+Kb5JvUm+GcOpvym/Gb8JwVnBScCZwTnAycBpwInBKcCpwEnC6cG5wlnCScIZwwnEecMpxGnD6cWpxgnGecdpx4nOec7JzwnQmdCJzrnQOdBp0qnSadr50jnR+dRJ0VnRKdQZ0/nT6dRp1I////////nV2dXp1k\" +\n            \"nVGdUJ1ZnXKdiZ2Hnaudb516nZqdpJ2pnbKdxJ3BnbuduJ26ncadz53Cndmd0534nead7Z3vnf2eGp4bnh6edZ55nn2egZ6InouejJ6SnpWekZ6dnqWeqZ64nqqerZdhnsyezp7PntCe1J7cnt6e3Z7gnuWe6J7v//+e9J72nvee+Z77nvye/Z8Hnwh2t58VnyGfLJ8+\" +\n            \"n0qfUp9Un2OfX59gn2GfZp9nn2yfap93n3Kfdp+Vn5yfoFgvaceQWXRkUdxxmf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\" +\n            \"/////////////////////////////////////////////w==\";\n\n\n        private static readonly ushort[] UnicodeToQrKanji = new ushort[1 << 16];\n\n        static QrSegmentAdvanced()\n        {\n            // Unpack the Shift JIS table into a more computation-friendly form\n            for (var i = 0; i < UnicodeToQrKanji.Length; i++)\n                UnicodeToQrKanji[i] = 0xffff;\n\n            var bytes = Convert.FromBase64String(PackedQrKanjiToUnicode);\n            for (var i = 0; i < bytes.Length; i += 2)\n            {\n                var c = (bytes[i] << 8) | bytes[i + 1];\n                if (c == 0xFFFF)\n                    continue;\n                Debug.Assert(UnicodeToQrKanji[c] == 0xffff);\n                UnicodeToQrKanji[c] = (ushort)(i / 2);\n            }\n        }\n\n        #endregion\n\n        #region Structured Append\n\n        /// <summary>\n        /// Creates the segments for multiple QR codes for the specified text.\n        /// <para>\n        /// The result will consist of the minimal number of QR codes needed\n        /// to encode the text with the given error correction level and version (size of QR code).\n        /// If multiple QR codes are required, <em>Structured Append</em> data is included to link the QR codes.\n        /// </para>\n        /// <para>\n        /// Each QR code might use multiple segments with different encoding modes\n        /// to maximize the amount of text that can be stored in each QR code.\n        /// </para>\n        /// <para>\n        /// The outer list represents the series of QR codes to be created.\n        /// The inner lists contains the QR segments for each QR code.\n        /// </para>\n        /// <para>\n        /// Each QR code will contain a valid string as it is ensured that splitting only occurs\n        /// at character boundaries and not in the middle of a multi-byte encoding of a character.\n        /// This increases compatibility with QR code scanners that incorrectly assume that each\n        /// individual QR code in the series contains a valid UTF-8 string.\n        /// </para>\n        /// </summary>\n        /// <param name=\"text\">The text to be encoded. The full range of Unicode characters may be used.</param>\n        /// <param name=\"ecl\">The minimum error correction level to use.</param>\n        /// <param name=\"version\">The version (size of QR code) to use. Default is 29.</param>\n        /// <returns>A list of list of QR segments representing the specified text.</returns>\n        public static List<List<QrSegment>> MakeSegmentsForMultipleCodes(string text, QrCode.Ecc ecl, int version = 29)\n        {\n            // Check arguments\n            Objects.RequireNonNull(text);\n            Objects.RequireNonNull(ecl);\n            if (version < QrCode.MinVersion || version > QrCode.MaxVersion)\n            {\n                throw new ArgumentOutOfRangeException(nameof(version), \"Invalid value\");\n            }\n\n            var qrCodesSegments = SplitTextIntoMultipleCodes(text, ecl, version);\n            var parity = CalculateParity(text);\n\n            // add structured append segment\n            for (int i = 0; i < qrCodesSegments.Count; i += 1)\n            {\n                qrCodesSegments[i].Insert(0, MakeStructuredAppend(parity, i + 1, qrCodesSegments.Count));\n            }\n\n            return qrCodesSegments;\n        }\n\n        private static List<List<QrSegment>> SplitTextIntoMultipleCodes(string text, QrCode.Ecc ecl, int version)\n        {\n            var codePoints = ToCodePoints(text);\n            var dataCapacityBits = QrCode.GetNumDataCodewords(version, ecl) * 8 - 20; // 20 bits for the structured append\n            var result = new List<List<QrSegment>>();\n\n            // repeatedly find the longest text that fits into a QR code of the given version and ecl\n            int startIndex = 0;\n            while (startIndex < codePoints.Length)\n            {\n                if (result.Count >= 16)\n                {\n                    throw new DataTooLongException(\"The text is too long to fit into 16 QR codes\");\n                }\n\n                // binary search for longest text\n                var low = startIndex;\n                var high = codePoints.Length;\n                while (low < high)\n                {\n                    var mid = (low + high + 1) / 2;\n                    var requiredBits = MeasureSegmentsOptimally(new ArraySegment<int>(codePoints, startIndex, mid - startIndex), version);\n                    if (requiredBits <= dataCapacityBits)\n                    {\n                        low = mid;\n                    }\n                    else\n                    {\n                        high = mid - 1;\n                    }\n                }\n\n                if (high == startIndex)\n                {\n                    // even a version 1 QR code should be sufficient to fit the structured append header plus one character\n                    throw new InvalidOperationException(\"QR code splitting: should not reach\");\n                }\n\n                Debug.Assert(high == codePoints.Length\n                    || MeasureSegmentsOptimally(new ArraySegment<int>(codePoints, startIndex, high - startIndex + 1), version) > dataCapacityBits);\n\n                result.Add(MakeSegmentsOptimally(new ArraySegment<int>(codePoints, startIndex, high - startIndex), version));\n                startIndex = high;\n            }\n\n            return result;\n        }\n\n        private static byte CalculateParity(string text)\n        {\n            var data = Encoding.UTF8.GetBytes(text);\n\n            byte parity = 0;\n            foreach (var value in data)\n            {\n                parity ^= (byte)(value >> 8);\n            }\n            return parity;\n        }\n\n        #endregion\n\n\n        #region Helpers\n\n        /// <summary>\n        /// Groups consecutive segment modes with the same value and calls the action.\n        /// </summary>\n        /// <param name=\"elements\">List of segement modes</param>\n        /// <param name=\"action\">Action to call for each group</param>\n        private static void GroupConsecutiveModes(IReadOnlyList<Mode> elements, Action<int, int, Mode> action)\n        {\n            var startIndex = 0;\n            var lastValue = elements[0];\n            var index = 0;\n            while (true)\n            {\n                if (index == elements.Count || elements[index] != lastValue)\n                {\n                    action(startIndex, index, lastValue);\n                    if (index == elements.Count)\n                        break;\n                    startIndex = index;\n                    lastValue = elements[index];\n                }\n                index += 1;\n            }\n        }\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/ReedSolomonGenerator.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Net.Codecrete.QrCodeGenerator\n{\n    /// <summary>\n    /// Computes the Reed-Solomon error correction codewords for a sequence of data codewords at a given degree.\n    /// <para>\n    /// Instances are immutable, and the state only depends on the degree.\n    /// This class is useful because all data blocks in a QR code share the same the divisor polynomial.\n    /// </para>\n    /// </summary>\n    internal class ReedSolomonGenerator\n    {\n        #region Fields\n\n        // Coefficients of the divisor polynomial, stored from highest to lowest power, excluding the leading term which\n        // is always 1. For example the polynomial x^3 + 255x^2 + 8x + 93 is stored as the uint8 array {255, 8, 93}.\n        private readonly byte[] _coefficients;\n\n        #endregion\n\n\n        #region Constructors\n\n        /// <summary>\n        /// Initializes a new Reed-Solomon ECC generator for the specified degree. \n        /// </summary>\n        /// <remarks>\n        /// This could be implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n        /// </remarks>\n        /// <param name=\"degree\">The divisor polynomial degree (between 1 and 255).</param>\n        /// <exception cref=\"ArgumentOutOfRangeException\"><c>degree</c> &lt; 1 or <c>degree</c> &gt; 255</exception>\n        internal ReedSolomonGenerator(int degree)\n        {\n            if (degree < 1 || degree > 255)\n            {\n                throw new ArgumentOutOfRangeException(nameof(degree), \"Degree out of range\");\n            }\n\n            // Start with the monomial x^0\n            _coefficients = new byte[degree];\n            _coefficients[degree - 1] = 1;\n\n            // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),\n            // drop the highest term, and store the rest of the coefficients in order of descending powers.\n            // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).\n            uint root = 1;\n            for (var i = 0; i < degree; i++)\n            {\n                // Multiply the current product by (x - r^i)\n                for (var j = 0; j < _coefficients.Length; j++)\n                {\n                    _coefficients[j] = Multiply(_coefficients[j], root);\n                    if (j + 1 < _coefficients.Length)\n                    {\n                        _coefficients[j] ^= _coefficients[j + 1];\n                    }\n                }\n                root = Multiply(root, 0x02);\n            }\n        }\n\n        #endregion\n\n\n        #region Methods\n\n        /// <summary>\n        /// Computes the Reed-Solomon error correction codewords for the specified\n        /// sequence of data codewords.\n        /// <para>\n        /// This method does not alter this object's state (as it is immutable).\n        /// </para>\n        /// </summary>\n        /// <param name=\"data\">The sequence of data codewords.</param>\n        /// <returns>The Reed-Solomon error correction codewords, as a byte array.</returns>\n        /// <exception cref=\"ArgumentNullException\">If <c>data</c> is <c>null</c>.</exception>\n        internal byte[] GetRemainder(byte[] data)\n        {\n            Objects.RequireNonNull(data);\n\n            // Compute the remainder by performing polynomial division\n            var result = new byte[_coefficients.Length];\n            foreach (var b in data)\n            {\n                var factor = (uint)(b ^ result[0]);\n                Array.Copy(result, 1, result, 0, result.Length - 1);\n                result[result.Length - 1] = 0;\n                for (var i = 0; i < result.Length; i++)\n                {\n                    result[i] ^= Multiply(_coefficients[i], factor);\n                }\n            }\n            return result;\n        }\n\n        #endregion\n\n\n        #region Static functions\n\n        // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n        // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n        private static byte Multiply(uint x, uint y)\n        {\n            Debug.Assert(x >> 8 == 0 && y >> 8 == 0);\n            // Russian peasant multiplication\n            uint z = 0;\n            for (var i = 7; i >= 0; i--)\n            {\n                z = (z << 1) ^ ((z >> 7) * 0x11D);\n                z ^= ((y >> i) & 1) * x;\n            }\n            Debug.Assert(z >> 8 == 0);\n            return (byte)z;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "QrCodeGenerator/docfx/api/index.md",
    "content": "# QR Code Generator for .NET\n\nOpen-source library for generating QR codes from text strings and byte arrays.\n\n\n## .NET API Documention\n\n* [QrCode](xref:Net.Codecrete.QrCodeGenerator.QrCode): Creates and represents QR codes\n\n* [QrSegment](xref:Net.Codecrete.QrCodeGenerator.QrSegment): Represents a segment of character/binary/control data in a QR code symbol\n\n* [QrSegmentAdvanced](xref:Net.Codecrete.QrCodeGenerator.QrSegmentAdvanced): Advanced methods for encoding QR codes using Kanji mode or using multiple segments with different encodings.\n\n* [All types and classes](xref:Net.Codecrete.QrCodeGenerator)\n\nAdditional information on [GitHub project page](https://github.com/manuelbl/QrCodeGenerator)\n\n\n## Features\n\nCore features:\n\n * Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard\n * Output formats: Raw modules/pixels of the QR symbol, SVG, XAML path, PNG and BMP files. For other raster bitmap formats, see project home page.\n * Encodes numeric and special alphanumeric text in less space than general text\n * Open source code under the permissive *MIT License*\n * Built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.).\n * Available as a [NuGet package](https://www.nuget.org/packages/Net.Codecrete.QrCodeGenerator/) (named *Net.Codecrete.QrCodeGenerator*)\n * Example code for WinForms, WPF, ASP.NET, ImageSharp, SkiaSharp and many more\n\nManual parameters:\n\n * You can specify the minimum and maximum *version number* allowed, and the library will automatically choose the smallest version in the range that fits the data.\n * You can specify the *mask pattern* manually, otherwise library will automatically evaluate all 8 masks and select the optimal one.\n * You can specify an *error correction level*, or optionally allow the library to boost it if it doesn't increase the version number.\n * You can create a list of *data segments* manually and add *ECI segments*.\n\nOptional advanced features:\n\n * Long text can be split into multiple linked QR codes (aka Structured Append)\n * Encodes Japanese Unicode text in *Kanji mode* to save a lot of space compared to UTF-8 bytes\n * Computes *optimal segment mode* switching for text with mixed numeric/alphanumeric/general/kanji parts\n\n\n## Examples\n\nSimple operation:\n\n<pre>\n<code class=\"lang-csharp hljs\">using Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class SimpleOperation\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            string svg = qr.ToSvgString(4);\n            File.WriteAllText(\"hello-world-qr.svg\", svg, Encoding.UTF8);\n        }\n    }\n}</code>\n</pre>\n\nManual operation:\n\n<pre>\n<code class=\"lang-csharp hljs\">using Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class ManualOperation\n    {\n        static void Main()\n        {\n            var segments = QrCode.MakeSegments(\"3141592653589793238462643383\");\n            var qr = QrCode.EncodeSegments(segments, QrCode.Ecc.High, 5, 5, 2, false);\n            for (int y = 0; y < qr.Size; y++)\n            {\n                for (int x = 0; x < qr.Size; x++)\n                {\n                    ... paint qr.GetModule(x,y) ...\n                }\n            }\n        }\n    }\n}</code>\n</pre>\n\n\n## Requirements\n\nQR Code Generator for .NET requires a .NET implementation compatible with .NET Standard 2.0 or higher, i.e. any of:\n\n- .NET Core 2.0 or higher\n- .NET Framework 4.6.1 or higher\n- Mono 5.4 or higher\n- Universal Windows Platform 10.0.16299 or higher\n- Xamarin\n\n### Raster Images / Bitmaps\n\nStarting with .NET 6, *System.Drawing* is only supported on Windows operating system and thus cannot be used for multi-platform libraries like this one. Therefore, `ToBitmap()` has been removed.\n\nTwo raster bitmap formats are supported with the need for additional libraries:\n\n- *PNG*: See [`QrCode.ToPngBitmap()`](xref:Net.Codecrete.QrCodeGenerator.QrCode.ToPngBitmap(System.Int32,System.Int32))\n- *BMP*: See [`QrCode.ToBmpBitmap()`](xref:Net.Codecrete.QrCodeGenerator.QrCode.ToBmpBitmap(System.Int32,System.Int32))\n\nThese methods are limited, e.g. with regards to the size of the generated image.\nFor more advanced and more efficient ways to generate different raster image formats:\n\n- Select one of the imaging libraries below\n- Add the NuGet dependencies to your project\n- Copy the appropriate `QrCodeBitmapExtensions.cs` file to your project\n\n\n| Library | Recommendation | NuGet dependencies | Extension file |\n| ------- | -------------- | ------------------ | -------------- |\n| **System.Drawing** | For Windows only projects | `System.Drawing.Common` | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-SkiaSharp/QrCodeBitmapExtensions.cs) |\n| **SkiaSharp** | For macOS, Linux, iOS, Android and multi-platform projects | `SkiaSharp` and `SkiaSharp.NativeAssets.Linux` (for Linux only) | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-SkiaSharp/QrCodeBitmapExtensions.cs) |\n| **ImageSharp** | Alternative for multi-platform projects. Might require a commercial license. | `SixLabors.ImageSharp.Drawing` | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/QrCodeBitmapExtensions.cs) |\n\nUsing these extension methods, generating PNG images is straight-forward:\n\n<pre>\n<code class=\"lang-csharp hljs\">using Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class PngImage\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            qr.SaveAsPng(\"hello-world-qr.png\", 10, 3);\n        }\n    }\n}</code>\n</pre>\n"
  },
  {
    "path": "QrCodeGenerator/docfx/docfx.json",
    "content": "{\n  \"metadata\": [\n    {\n      \"src\": [\n        {\n          \"files\": [\n            \"**.csproj\"\n          ],\n          \"src\": \"..\"\n        }\n      ],\n      \"dest\": \"../obj/docfx/api\",\n      \"disableGitFeatures\": false,\n      \"disableDefaultFilter\": false\n    }\n  ],\n  \"build\": {\n    \"content\": [\n      {\n        \"files\": [\n          \"api/**.yml\"\n        ],\n        \"src\": \"../obj/docfx\"\n      },\n      {\n        \"files\": [\n          \"index.md\",\n          \"api/index.md\"\n        ]\n      }\n    ],\n    \"resource\": [\n    ],\n    \"overwrite\": [\n      {\n        \"files\": [\n          \"apidoc/**.md\"\n        ],\n        \"exclude\": [\n          \"obj/**\",\n          \"bin/**\"\n        ]\n      }\n    ],\n    \"dest\": \"../bin/_site\",\n    \"globalMetadataFiles\": [],\n    \"fileMetadataFiles\": [],\n    \"template\": [\n      \"default\",\n      \"modern\"\n    ],\n    \"postProcessors\": [],\n    \"markdownEngineName\": \"markdig\",\n    \"noLangKeyword\": false,\n    \"keepFileLink\": false,\n    \"cleanupCacheHistory\": false,\n    \"disableGitFeatures\": false\n  }\n}"
  },
  {
    "path": "QrCodeGenerator/docfx/index.md",
    "content": "# QR Code Generator for .NET\n\n[.NET Reference Documentation](api/index.md)\n"
  },
  {
    "path": "QrCodeGenerator/docs/README.md",
    "content": "# QR Code Generator for .NET\n\nOpen-source library for generating QR codes from text strings and byte arrays.\n\nThe library is built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.) including .NET 6 on all platforms.\n\nIt is mostly a translation of project Nayuki's Java version of the QR code generator. The project provides implementations for\nmany more programming languages, and the [Project Nayuki web site](https://www.nayuki.io/page/qr-code-generator-library) has additional information about the implementation.\n\n\n## Features\n\nCore features:\n\n * Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard\n * Output formats: Raw modules/pixels of the QR symbol, SVG, XAML path, PNG and BMP files. For other raster bitmap formats, see [below](#raster-images--bitmaps).\n * Encodes numeric and special-alphanumeric text in less space than general text\n * Open source code under the permissive *MIT License*\n * Built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.).\n * Available as a [NuGet package](https://www.nuget.org/packages/Net.Codecrete.QrCodeGenerator/) (named *Net.Codecrete.QrCodeGenerator*)\n * Example code for WinForms, WPF, ASP.NET, ImageSharp, SkiaSharp and many more\n\nManual parameters:\n\n * You can specify the minimum and maximum *version number* allowed, and the library will automatically choose the smallest version in the range that fits the data.\n * You can specify the *mask pattern* manually, otherwise library will automatically evaluate all 8 masks and select the optimal one.\n * You can specify an *error correction level*, or optionally allow the library to boost it if it doesn't increase the size (version).\n * You can create a list of *data segments* manually and add *ECI segments*.\n\nOptional advanced features:\n\n * Long text can be split into multiple linked QR codes (aka Structured Append)\n * Encodes Japanese Unicode text in *Kanji mode* to save space compared to UTF-8 bytes\n * Computes *optimal segment mode* switching for text with mixed numeric/alphanumeric/general/kanji parts\n\n\n\n## Getting started\n\n1. Create a new Visual Studio project for .NET Core 3.1 (or higher) (*File > New > Project...* / *Visual C# > .NET Core > Console App (.NET Core)*)\n\n2. Add the library via NuGet:\n\n   Either via *Project > Manage NuGet Packages...* / *Browse* / search for *qrcodegenerator* / *Install*\n   \n   Or by running a command in the Package Manager Console\n\n```\nInstall-Package Net.Codecrete.QrCodeGenerator -Version 2.0.7\n```\n3. Add the code from the example below\n\n4. Run it\n\n\n## API Documention\n\nSee [API Documentation](https://codecrete.net/QrCodeGenerator/api/index.html)\n\n\n## Examples\n\n**Simple operation**\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class SimpleOperation\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            string svg = qr.ToSvgString(4);\n            File.WriteAllText(\"hello-world-qr.svg\", svg, Encoding.UTF8);\n        }\n    }\n}\n```\n\n**Manual operation**\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class ManualOperation\n    {\n        static void Main()\n        {\n            var segments = QrSegment.MakeSegments(\"3141592653589793238462643383\");\n            var qr = QrCode.EncodeSegments(segments, QrCode.Ecc.High, 5, 5, 2, false);\n            for (int y = 0; y < qr.Size; y++)\n            {\n                for (int x = 0; x < qr.Size; x++)\n                {\n                    ... paint qr.GetModule(x,y) ...\n                }\n            }\n        }\n    }\n}\n```\n\n\n## Requirements\n\nQR Code Generator for .NET requires a .NET implementation compatible with .NET Standard 2.0 or higher, i.e. any of:\n\n- .NET Core 2.0 or higher\n- .NET Framework 4.6.1 or higher\n- Mono 5.4 or higher\n- Universal Windows Platform 10.0.16299 or higher\n- Xamarin\n\n### Raster Images / Bitmaps\n\nStarting with .NET 6, *System.Drawing* is only supported on Windows operating system and thus cannot be used for multi-platform libraries like this one. Therefore, `ToBitmap()` has been removed.\n\nTwo raster bitmap formats are supported with the need for additional libraries:\n\n- *PNG*: See `QrCode.ToPngBitmap()`\n- *BMP*: See `QrCode.ToBmpBitmap()`\n\nThese methods are limited, e.g. with regards to the size of the generated image.\nFor more advanced and more efficient ways to generate different raster image formats:\n\n- Select one of the imaging libraries below\n- Add the NuGet dependencies to your project\n- Copy the appropriate `QrCodeBitmapExtensions.cs` file to your project\n\n| Imaging library | Recommendation | NuGet dependencies | Extension file |\n| ------- | -------------- | ------------------ | -------------- |\n| **System.Drawing** | For Windows only projects | `System.Drawing.Common` | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-System-Drawing/QrCodeBitmapExtensions.cs) |\n| **SkiaSharp** | For macOS, Linux, iOS, Android and multi-platform projects | `SkiaSharp` and `SkiaSharp.NativeAssets.Linux` (for Linux only) | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-SkiaSharp/QrCodeBitmapExtensions.cs) |\n| **ImageSharp** | Alternative for multi-platform projects. Might require a commercial license. | `SixLabors.ImageSharp.Drawing` | [QrCodeBitmapExtensions.cs](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-ImageSharp/QrCodeBitmapExtensions.cs) |\n\nUsing these extension methods, generating PNG images is straight-forward:\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class PngImage\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            qr.SaveAsPng(\"hello-world-qr.png\", 10, 3);\n        }\n    }\n}\n```\n\n## Examples\n\nSeveral example projects demonstrate how to generate QR code with different frameworks and libraries:\n\n- [Demo-QRCode-Variety](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-QRCode-Variety): Demonstrates how QR codes with different encodings, error correction and masks can be generated. All QR codes are saved as SVG files.\n\n- [Demo-WinUI](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-WinUI): Demonstrates how QR codes can be used in WinUI 3 applications and/or using [Win2D](https://github.com/microsoft/Win2D) (incl. copying to the clipboard).\n\n- [Demo-WindowsPresentationFoundation](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-WindowsPresentationFoundation): Demonstrates how QR codes can be used in WPF applications (incl. copying to the clipboard).\n\n- [Demo-WinForms](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-WinForms): Demonstrates how QR codes can be used in Windows Forms applications (incl. copying to the clipboard).\n\n- [Demo-ASP.NET-Core](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-ASP.NET-Core): Demonstrates how to create QR codes in a web application implemented using ASP.NET Core.\n\n- [Demo-VCard](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-VCard): Demonstrates how contact data (similar to business cards) can be saved in a QR Code using the VCard standard.\n\n- [Demo-System-Drawing](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-System-Drawing): Demonstrates how a QR code can be saved a PNG file, using the *System.Drawing* classes, which have become a Windows only technology starting with .NET 6.\n\n- [Demo-SkiaSharp](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-SkiaSharp): Demonstrates how a QR code can be saved a PNG file, using the SkiaSharp multi-platform raster image library.\n\n- [Demo-ImageSharp](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-ImageSharp): Demonstrates how a QR code can be saved a PNG file, using the ImageSharp raster image library. Additionally, a QR code with an image in the center is created.\n\n- [Demo-ImageMagick](https://github.com/manuelbl/QrCodeGenerator/blob/v2.1.0/Demo-ImageMagick): Demonstrates how a QR code can be saved a PNG file, using the Magick.NET image manipulation library (based on ImageMagick).\n"
  },
  {
    "path": "QrCodeGenerator.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.31424.327\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"QrCodeGenerator\", \"QrCodeGenerator\\QrCodeGenerator.csproj\", \"{36B0822E-28D7-43C7-BAF7-AF578E31E978}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"QrCodeGeneratorTest\", \"QrCodeGeneratorTest\\QrCodeGeneratorTest.csproj\", \"{81307EE7-7915-4D2D-8F71-495F239FD266}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{36B0822E-28D7-43C7-BAF7-AF578E31E978} = {36B0822E-28D7-43C7-BAF7-AF578E31E978}\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{36B0822E-28D7-43C7-BAF7-AF578E31E978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{36B0822E-28D7-43C7-BAF7-AF578E31E978}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{36B0822E-28D7-43C7-BAF7-AF578E31E978}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{36B0822E-28D7-43C7-BAF7-AF578E31E978}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{81307EE7-7915-4D2D-8F71-495F239FD266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{81307EE7-7915-4D2D-8F71-495F239FD266}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{81307EE7-7915-4D2D-8F71-495F239FD266}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{81307EE7-7915-4D2D-8F71-495F239FD266}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {256EFBB5-C259-4422-BE66-29B9FF4BF92F}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "QrCodeGeneratorTest/BitArrayExtensionsTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\nusing Xunit;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class BitArrayExtensionsTest\n    {\n        [Fact]\n        public void AppendInt1()\n        {\n            var ba = new BitArray(0);\n            ba.AppendBits(18, 6);\n\n            Assert.Equal(6, ba.Length);\n\n            Assert.False(ba[0]);\n            Assert.True(ba[1]);\n            Assert.False(ba[2]);\n            Assert.False(ba[3]);\n            Assert.True(ba[4]);\n            Assert.False(ba[5]);\n        }\n\n        [Fact]\n        public void AppendInt2()\n        {\n            var ba = new BitArray(0);\n            ba.AppendBits(18, 6);\n\n            ba.AppendBits(3, 2);\n\n            Assert.Equal(8, ba.Length);\n\n            Assert.False(ba[0]);\n            Assert.True(ba[1]);\n            Assert.False(ba[2]);\n            Assert.False(ba[3]);\n            Assert.True(ba[4]);\n            Assert.False(ba[5]);\n            Assert.True(ba[6]);\n            Assert.True(ba[7]);\n        }\n\n        [Fact]\n        public void AppendExtraBits()\n        {\n            var ba = new BitArray(0);\n\n            Assert.Throws<ArgumentOutOfRangeException>(() =>\n            {\n                ba.AppendBits(128, 4);\n            });\n        }\n\n        [Fact]\n        public void ExtractBits()\n        {\n            var ba = new BitArray(0);\n            ba.AppendBits(18, 6);\n            ba.AppendBits(0b11001010, 8);\n\n            Assert.Equal(18u, ba.ExtractBits(0, 6));\n            Assert.Equal(0b11001010u, ba.ExtractBits(6, 8));\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/KanjiTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System.Collections.Generic;\nusing Xunit;\n\n// ReSharper disable StringLiteralTypo\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class KanjiTest\n    {\n        private const string KanjiSample\n            = \"委マツニオ男喜でろつ絶選にッ自君エ碁４配堪イルネコ禁２京果ユウタカ著書ンぴは役村ン政経購税き視思６１近退ほぜ。投むでみ書権し輔組キ黒壁えちをあ刊中申内イヌ著太記ヲ庁宿ホマ湯連マクラ相就づ藤業トリカ場止ラマエニ現露ラ情伝ま登厘架れち。任ムオホ除８５郊ツ執父たはんゅ喜離レクセサ社暖せげ磨育こぽずぎ聞来ンは事聞煙や無杯すやべぽ信９３幕もいび及町いば事階齢利江ず。\"\n              + \"陸スシネク賢軽ワマ産闘人めせ視豊ネワマキ庭朝療へ終胸ずでリぐ価交こる覧夜でわみを氷性聞年よとク。朝定掲ぞぴえる縄策ヌキウク主力まひ本生ウヒア鎖検ヘ同階リぞ美字ツイキニ問企表カクツ助１台づレぼえ。事箕ケテ内上べが訃長す容批ヨ多帯ヌムフハ社早オイ球選アヘ話交じぞぽ上国７８覚は根辺むげたょ室也も。\"\n              + \"数ヨフヱイ血結質ッろ護外すうだご古犠リ自陽カアタ幅交数ぼもそき請件ろ問拉著フヒミ陰天６１債ン。竹ごつべク市成キヤウ検新スセヒヲ花期的もぴは嶋信ヱマサワ局記来イヲナネ比引フタニハ津適よいうり長熊う割監ッそ投出リラツル誇載距ふかすん論紅ょごくむ井５消宗征訟おなス。油ヤレワ減力テミ機４６残ツケ遺鳥そ前名ニ作３８草あぶづだ見遠ヘ覧程ラり転由教おとへ当潟とみ味購域施活ぜどだ。\"\n              + \"駆投ねづ女日べリりが離口にわ神新え続竹ワハ時円とりば権読け質打ノセ記囲ラヨヒソ暮交だ族時加せげ。山テカ牧於ちぶん社４７開低きねぽぶ眼明んドっ東検キ連可劇はよしぶ意田ソ信道ユヌネル経自い日花ぴラに。休ク況術ハヤ感要ヨ禁社ぴくざな賠表台里レヱ属自ホヱ民活え因物ぴぽド形型会ロモヱセ法本談ル関４９打ツノ速新ぎき堀冬密浦絶どぞつ。\"\n              + \"追ろ役陸モヘセ担妊ぱゅン島４７自ミリシホ子載科ぐばのド返物ナ月営わを屋界ヒクエム取強あるゆ売増ロムネ鶏交応更ょ。認投か者木ッ変甲テケツマ類読けっイり鋼巻ス観市徴ンぎる金谷ゆけ当披トソロ薬身とを勢米ハ件確ー実市浮絵レ。職ウト基交と止士高こてゆべ集団制ラクイ観経回スミネカ治６聖うぜ頑機ずお国２０覧歌ヌレ故携ムネナシ選文ヲレ西納３０図ねリず行格ぜお電医丸族の。\"\n              + \"県梨フアヨ長気チ手過フエ本患イやぼ回劇ぶ表神サヘヌ聞変モチ導産埼もすけん付必ッ罪真え号情６長ドンたじ雄員将格真復ほるおと。答モ闘貨午マソカチ革覇ヱキチマ農多ルメタ宮門ルメユ中作ツキテ主書タカモサ事崎ぞルぼ犯柴海図ほち義暴よッろン阪制エ景修級ぐル。変ム注止まどけふ境趣んかラ内経むがる面２８湯ぱはげど元使ナ屋俸どだび会表連トスなり年埋たれゃ。\"\n              + \"資むぎ方退キソセ逃於ケイヲカ域元まど月経快美りか再入ソエヨム播大マス勝星むま芸投フサル男記クかふば詰当ソ患京へ駆食えぞ知属ヱレアユ市秋ょ。７速コ覧広ヤミチケ接済なクろ件２段ト折６７的了だぞじ伸属ぴっ秋頭イナタフ聞践周は上並あ一６便苦レざ外喰杜椿榎び。応めにえン稿業タキリ盗１６水春めわ雑成めす国含ウレハラ最完レ面立更東稿ハクヌ添起チタヨテ営尾ら。\"\n              + \"済メヌ集取ネツホユ人９芋ヒツコワ春３４能メレタツ朝源ぞ名校げイ太化テソタ近慎ナ口２０夜け会報あルトお量問保ぎ場上っ浪足まだゅト育更ラホテカ太健象延ゆル。展つゃた後幸ちぞわぼ金質レ未曲ネマ勝投の若著遅ごぽ時顔セカ報高夫コユエラ応迎飯りばまで愛児ケ息９債核築がち。応文ドッ記強ユノヌエ初検なしよぱ長止表へよ今工テメ相取載ミ青１書にあひ略稿ぶごよ的会報じぐ挑政手一基づ。\"\n              + \"覧ツハ女子み絡康８９嘉塁塾嶋４分４約タニウ政提タヌル王朝よきはべ運案ヒホ男週めーお開培イわ北事巡流む。服勢ラメリユ邦大め地若ゅ構神ヒカロ疑育サ済供しりろべ告惑合コヤリナ代井てじぜゆ沖立験ヲモスロ加知ネ競３０嘉塁塾嶋９０女れフわず勝脱せでに植出党尾滋ず。写ねけを値碁ヌロ計新そへう最男イ筑地ー作提ツムハウ暮工ざ転阜終ふてお抑売買エ題要じレ王護い手乗学カクリソ発府めだごラ変実三以て。\"\n              + \"世なべるそ名走スレヤ変週トウ残予ハサヌカ払者じのドル分定リば米６１与アエユ来熱成かのら終参しつド日備てな要勤奇そむ磐価ヌ問者チ治本ンむくい限前サトスハ郎禁ヘマ自朝せ主並局行承ね。全キロヲ芸来はてし見９所謙レ撤住ワ約子情農スニ手個いよゆぴ事断ニ遊８３常左県煙８東金締ばねぞ。友府ょ盤養虚ぽ昇球つはー繰申チオ境著ごふょ派広だ戦事すめ無問きこどぱ毎保３７火ヱト韓端侍勃卑ぼン。\";\n\n        [Fact]\n        public void IsKanjiEncodable()\n        {\n            Assert.True(QrSegmentAdvanced.IsEncodableAsKanji(KanjiSample));\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/PngTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * \n */\n\nusing System.IO;\nusing System.Threading.Tasks;\nusing VerifyTests;\nusing VerifyXunit;\nusing Xunit;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class PngTest\n    {\n        static PngTest()\n        {\n            VerifyImageMagick.Initialize();\n            VerifyImageMagick.RegisterComparers(threshold: 0.005);\n        }\n\n        private const string CodeText1 = \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.\";\n        private const string CodeText2 = \"The quick brown fox\";\n\n        protected readonly VerifySettings Settings = new VerifySettings();\n\n        public PngTest()\n        {\n            Settings.UseDirectory(\"ReferenceFiles\");\n        }\n\n        [Fact]\n        public Task PngImage()\n        {\n            var qrCode = EncodeText(CodeText1, Ecc.Medium);\n            var pngData = qrCode.ToPngBitmap(5, 3);\n\n            using (var stream = new MemoryStream(pngData))\n            {\n                return Verifier.Verify(stream, \"png\", Settings);\n            }\n        }\n\n\n        [Fact]\n        public Task ColorPngImage()\n        {\n            var qrCode = EncodeText(CodeText2, Ecc.Medium);\n            var pngData = qrCode.ToPngBitmap(3, 7, 0x171c80, 0xccbc9b);\n\n            using (var stream = new MemoryStream(pngData))\n            {\n                return Verifier.Verify(stream, \"png\", Settings);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrCodeBitmapTest.cs",
    "content": "/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing Xunit;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n\n    public class QrCodeBitmapTest\n    {\n        private static Ecc EccFromOrdinal(int val)\n        {\n            Ecc ecc;\n            switch (val) {\n                case 0:\n                    ecc = Ecc.Low;\n                    break;\n                case 1:\n                    ecc = Ecc.Medium;\n                    break;\n                case 2:\n                    ecc = Ecc.Quartile;\n                    break;\n                case 3:\n                    ecc = Ecc.High;\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(val), val, string.Empty);\n            }\n            return ecc;\n        }\n\n        [Theory]\n        [InlineData(\"https://some-weird-test-site.site?whatever=test&test=123&qrcodes=true\", 1, 0, 1,\n            \"Qk1mAQAAAAAAAD4AAAAoAAAAJQAAACUAAAABAAEAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP///wABNbl4gAAAAH2YIHtIAAAARZKOUbgAAABF18iIsAAAAEULZ/AQAAAAfZzqZwAAAAABYtBVaAAAAP8KPrdoAAAAHVwj8EAAAADmh5vWmAAAANCnMkWYAAAAR+1mSzgAAAAtnd3kiAAAABPpnc5YAAAAiXY2DBgAAABv8FrGaAAAAHiVuNCYAAAAAywgdMgAAADQcKpM+AAAAOrRjotoAAAAVXNn/YAAAACSHPJaSAAAALhO2q4YAAAAxmIcBzgAAABsKCF5gAAAAN9hmn3IAAAA4MVQolgAAAArPWKDKAAAAHQXyPAwAAAA/wOSb/gAAAABVVVUAAAAAH0JTdXwAAAARRH2pRAAAABFccYFEAAAAEX0A8UQAAAAfaGzFfAAAAABEwzkAAAAAA==\")]\n        [InlineData(\"https://some-weird-test-site.site?whatever=test&test=123&qrcodes=true\", 2, 3, 1,\n            \"Qk22AQAAAAAAAD4AAAAoAAAALwAAAC8AAAABAAEAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP///wD///////4AAP///////gAA///////+AADgO6v/YF4AAO+lxCohTgAA6L2ATReuAADouUKYTT4AAOigXCdAXgAA77/XlU5OAADgP97Ayo4AAP/iVozOrgAA5zlqO0D+AAD4+wMZZW4AAPilMcmmbgAA4c22rPiOAAD1l98/df4AAPnKd3lDfgAA8Z0JkavOAAD8dAKZIK4AAOGKaI1l3gAA6mgrWDluAADyLHIZrm4AAOt5c5RwLgAA6jxX4lfOAADsRaV5aW4AAOy55Z0tbgAA9XL2RLCOAAD5M02aHV4AAPPi/21fTgAA/rYvuSHuAADhczd3qq4AAPcUukk33gAA7UCOCQ1eAADgHCpZLO4AAPVGm7CyTgAA9qZa7lS+AAD//LTZL/4AAOAqqqqoDgAA76jKfwvuAADopX0Q+i4AAOi25Ci6LgAA6K8FphouAADvv3xO2+4AAOA6ZIx4DgAA///////+AAD///////4AAP///////gAA\")]\n        [InlineData(\"https://some-weird-test-site.site?whatever=test&test=123&qrcodes=true\", 2, 3, 4,\n            \"Qk3eEQAAAAAAAD4AAAAoAAAAvAAAALwAAAABAAEAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP///wD///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D/8AAAAP/w//Dw8P//////D/AAAA8P////8AAAAP/w//Dw8P//////D/AAAA8P////8AAAAP/w//Dw8P//////D/AAAA8P////8AAAAP/w//Dw8P//////D/AAAA8P////8P//8PAPD/8ADwAA8PDwAPAADw8A////8P//8PAPD/8ADwAA8PDwAPAADw8A////8P//8PAPD/8ADwAA8PDwAPAADw8A////8P//8PAPD/8ADwAA8PDwAPAADw8A////8PAA8P//D/AAAAAPAP8PAA8P//Dw////8PAA8P//D/AAAAAPAP8PAA8P//Dw////8PAA8P//D/AAAAAPAP8PAA8P//Dw////8PAA8P//D/AAAAAPAP8PAA8P//Dw////8PAA8P/wDw8AAPDwD/AADwD/DwD/////8PAA8P/wDw8AAPDwD/AADwD/DwD/////8PAA8P/wDw8AAPDwD/AADwD/DwD/////8PAA8P/wDw8AAPDwD/AADwD/DwD/////8PAA8PAAAA8P/wAA8A//DwAAAA8P////8PAA8PAAAA8P/wAA8A//DwAAAA8P////8PAA8PAAAA8P/wAA8A//DwAAAA8P////8PAA8PAAAA8P/wAA8A//DwAAAA8P////8P//8P////8PD//wDw8PDwD/8A8A////8P//8P////8PD//wDw8PDwD/8A8A////8P//8P////8PD//wDw8PDwD/8A8A////8P//8P////8PD//wDw8PDwD/8A8A////8AAAAP////8P//D/AAAA/wDw8PAA////8AAAAP////8P//D/AAAA/wDw8PAA////8AAAAP////8P//D/AAAA/wDw8PAA////8AAAAP////8P//D/AAAA/wDw8PAA//////////AA8A8PD/DwAP8A/wD/8PDw//////////AA8A8PD/DwAP8A/wD/8PDw//////////AA8A8PD/DwAP8A/wD/8PDw//////////AA8A8PD/DwAP8A/wD/8PDw////8A//AP/wDw/w8PAA//D/DwAAAP//////8A//AP/wDw/w8PAA//D/DwAAAP//////8A//AP/wDw/w8PAA//D/DwAAAP//////8A//AP/wDw/w8PAA//D/DwAAAP////////AA///w/wAAAP8AD/APD/APDw/w//////AA///w/wAAAP8AD/APD/APDw/w//////AA///w/wAAAP8AD/APD/APDw/w//////AA///w/wAAAP8AD/APD/APDw/w//////AA8PAPDwD/AA//APAP8PAP8A/w//////AA8PAPDwD/AA//APAP8PAP8A/w//////AA8PAPDwD/AA//APAP8PAP8A/w//////AA8PAPDwD/AA//APAP8PAP8A/w////8AAP/wD/D/D/D/Dw8P8A///wAPAA////8AAP/wD/D/D/D/Dw8P8A///wAPAA////8AAP/wD/D/D/D/Dw8P8A///wAPAA////8AAP/wD/D/D/D/Dw8P8A///wAPAA/////w8P8A8P//8P//8A////D/8PD////////w8P8A8P//8P//8A////D/8PD////////w8P8A8P//8P//8A////D/8PD////////w8P8A8P//8P//8A////D/8PD/////////AP/wDw8A//D/8P//APDwAA/w////////AP/wDw8A//D/8P//APDwAA/w////////AP/wDw8A//D/8P//APDwAA/w////////AP/wDw8A//D/8P//APDwAA/w///////wAP8A//DwAA8A/wDwAP8PDw//8A/////wAP8A//DwAA8A/wDwAP8PDw//8A/////wAP8A//DwAA8A/wDwAP8PDw//8A/////wAP8A//DwAA8A/wDwAP8PDw//8A//////8AD/8PAAAAAPDwD/APAPAAAPDw//////8AD/8PAAAAAPDwD/APAPAAAPDw//////8AD/8PAAAAAPDwD/APAPAAAPDw//////8AD/8PAAAAAPDwD/APAPAAAPDw////8AAP8ADw8A/w8ADwAP8PD/APD/8P////8AAP8ADw8A/w8ADwAP8PD/APD/8P////8AAP8ADw8A/w8ADwAP8PD/APD/8P////8AAP8ADw8A/w8ADwAP8PD/APD/8P////8PDwD/DwAADw8P8PD/AAAP/wDw/w////8PDwD/DwAADw8P8PD/AAAP/wDw/w////8PDwD/DwAADw8P8PD/AAAP/wDw/w////8PDwD/DwAADw8P8PD/AAAP/wDw/w/////wDwAPD/AA//APAAD/AP8PD/8A/w/////wDwAPD/AA//APAAD/AP8PD/8A/w/////wDwAPD/AA//APAAD/AP8PD/8A/w/////wDwAPD/AA//APAAD/AP8PD/8A/w////8PD/D//wDw//AP/wDw8AD/8AAADw////8PD/D//wDw//AP/wDw8AD/8AAADw////8PD/D//wDw//AP/wDw8AD/8AAADw////8PD/D//wDw//AP/wDw8AD/8AAADw////8PDwAP//AA8PD///8ADwDw8P//8A////8PDwAP//AA8PD///8ADwDw8P//8A////8PDwAP//AA8PD///8ADwDw8P//8A////8PDwAP//AA8PD///8ADwDw8P//8A////8P8ADwAPD/DwDw8P//APD/DwDw/w////8P8ADwAPD/DwDw8P//APD/DwDw/w////8P8ADwAPD/DwDw8P//APD/DwDw/w////8P8ADwAPD/DwDw8P//APD/DwDw/w////8P8A8P/wD//wDw/wD/8PAPD/Dw/w////8P8A8P/wD//wDw/wD/8PAPD/Dw/w////8P8A8P/wD//wDw/wD/8PAPD/Dw/w////8P8A8P/wD//wDw/wD/8PAPD/Dw/w/////w8PD/8A8P//D/APAA8A8P8AAPAA/////w8PD/8A8P//D/APAA8A8P8AAPAA/////w8PD/8A8P//D/APAA8A8P8AAPAA/////w8PD/8A8P//D/APAA8A8P8AAPAA//////APAP8A/w8A/w/wD/DwAA//Dw8P//////APAP8A/w8A/w/wD/DwAA//Dw8P//////APAP8A/w8A/w/wD/DwAA//Dw8P//////APAP8A/w8A/w/wD/DwAA//Dw8P/////wD///AA8P////8P8P8PDw///w8A/////wD///AA8P////8P8P8PDw///w8A/////wD///AA8P////8P8P8PDw///w8A/////wD///AA8P////8P8P8PDw///w8A///////w8P8P8ADw///w//APAPAAD//w///////w8P8P8ADw///w//APAPAAD//w///////w8P8P8ADw///w//APAPAAD//w///////w8P8P8ADw///w//APAPAAD//w////8AAPD/8A/wD/D/8P/w//8PDw8PDw////8AAPD/8A/wD/D/8P/w//8PDw8PDw////8AAPD/8A/wD/D/8P/w//8PDw8PDw////8AAPD/8A/wD/D/8P/w//8PDw8PDw/////w//AA8PAPD/8PAPAPAPAP8P//8P/////w//AA8PAPD/8PAPAPAPAP8P//8P/////w//AA8PAPD/8PAPAPAPAP8P//8P/////w//AA8PAPD/8PAPAPAPAP8P//8P////8P8PDwAAAPAA//AAAPAPAAD/Dw8P////8P8PDwAAAPAA//AAAPAPAAD/Dw8P////8P8PDwAAAPAA//AAAPAPAAD/Dw8P////8P8PDwAAAPAA//AAAPAPAAD/Dw8P////8AAAAA//AADw8PAPD/APAPD/AP/w////8AAAAA//AADw8PAPD/APAPD/AP/w////8AAAAA//AADw8PAPD/APAPD/AP/w////8AAAAA//AADw8PAPD/APAPD/AP/w/////w8PDwAP8PAP8P/w/wAA8P8A8A8A/////w8PDwAP8PAP8P/w/wAA8P8A8A8A/////w8PDwAP8PAP8P/w/wAA8P8A8A8A/////w8PDwAP8PAP8P/w/wAA8P8A8A8A/////w/w8PAP8A8P8PD/8P/wDw8PAPD//////w/w8PAP8A8P8PD/8P/wDw8PAPD//////w/w8PAP8A8P8PD/8P/wDw8PAPD//////w/w8PAP8A8P8PD/8P/wDw8PAPD/////////////APD/DwD/D/APAPD/////////////////APD/DwD/D/APAPD/////////////////APD/DwD/D/APAPD/////////////////APD/DwD/D/APAPD/////////8AAAAPDw8PDw8PDw8PDw8PDwAAAA////8AAAAPDw8PDw8PDw8PDw8PDwAAAA////8AAAAPDw8PDw8PDw8PDw8PDwAAAA////8AAAAPDw8PDw8PDw8PDw8PDwAAAA////8P//8PDwAP8A8PAP////AADw///w////8P//8PDwAP8A8PAP////AADw///w////8P//8PDwAP8A8PAP////AADw///w////8P//8PDwAP8A8PAP////AADw///w////8PAA8PAPDw///w8ADwAA///w8ADw////8PAA8PAPDw///w8ADwAA///w8ADw////8PAA8PAPDw///w8ADwAA///w8ADw////8PAA8PAPDw///w8ADwAA///w8ADw////8PAA8P8P8P/wDwAA8PAA8P/w8ADw////8PAA8P8P8P/wDwAA8PAA8P/w8ADw////8PAA8P8P8P/wDwAA8PAA8P/w8ADw////8PAA8P8P8P/wDwAA8PAA8P/w8ADw////8PAA8PD//wAADw/w8A/wAA/w8ADw////8PAA8PD//wAADw/w8A/wAA/w8ADw////8PAA8PD//wAADw/w8A/wAA/w8ADw////8PAA8PD//wAADw/w8A/wAA/w8ADw////8P//8P///w///wAPAP/w/w/w///w////8P//8P///w///wAPAP/w/w/w///w////8P//8P///w///wAPAP/w/w/w///w////8P//8P///w///wAPAP/w/w/w///w////8AAAAP/w8A/wDwDwAP8AD//wAAAA////8AAAAP/w8A/wDwDwAP8AD//wAAAA////8AAAAP/w8A/wDwDwAP8AD//wAAAA////8AAAAP/w8A/wDwDwAP8AD//wAAAA//////////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////D///////////////////////////////A=\")]\n        [InlineData(\"https://some-weird-test-site.site?whatever=test&test=123&qrcodes=true\", 3, 2, 2,\n            \"Qk3eBgAAAAAAAD4AAAAoAAAAagAAAGoAAAABAAEAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP///wD/////////////////wAAA/////////////////8AAAP/////////////////AAAD/////////////////wAAA8AA8wAzz8//PwA//A/////AAPMAM8/P/z8AP/wP////z/z/wADMwAzPAwPA/////8/8/8AAzMAMzwMDwP/////MDMM/zAAzAwwD/AP/////zAzDP8wAMwMMA/wD/////8wMzw8wzMAAw8P8wM/////MDM8PMMzAAMPD/MDP////zAzw8w88APPwPMADD////8wM8PMPPADz8DzAAw/////P/PDD/wz8D/MDz8P/////z/zww/8M/A/zA8/D/////8AAzDAwPMzw8w/Mww/////AAMwwMDzM8PMPzMMP///////AMP/8/D/zPA/AD///////wDD//Pw/8zwPwA/////A/PPP8MwA88z/wA//////wPzzz/DMAPPM/8AP//////A/AzDzwwA/DDDzPM/////wPwMw88MAPwww8zzP////8/D//PMMD8Dz/DM/P/////Pw//zzDA/A8/wzPz/////DM/zz88/88wPAzAAP////wzP88/PP/PMDwMwAD/////D8Pw8/zAwAMMMMzA/////w/D8PP8wMADDDDMwP////8MM8z8Dz8zAMDzwwP/////DDPM/A8/MwDA88MD/////PAPwDDMzzw8A/zwz/////zwD8AwzM88PAP88M//////8PzwAPwP/AMwMMPz//////D88AD8D/wDMDDD8//////zzMMAzzADMw8/PD//////88zDAM8wAzMPPzw//////PM/wDzDz/PADwMMMP////zzP8A8w8/zwA8DDDD//////wwAM88M8MPMwMP8//////8MADPPDPDDzMDD/P////zwPwzD/zww/wD/8zD////88D8Mw/88MP8A//Mw/////MDA/zDAMPz8Pz/wDP////zAwP8wwDD8/D8/8Az//////zMD8MPAzP//PzP///////8zA/DDwMz//z8z//////z8AM8MPAADzPPMAPD////8/ADPDDwAA8zzzADw/////Az8zDPPz8MPMwD8A/////wM/Mwzz8/DDzMA/AP////8PMzMD8wMwADMPMwA/////DzMzA/MDMAAzDzMAP////8A/ADPAM/AA8zw/AP/////APwAzwDPwAPM8PwD/////8wAwDADwAAzw/AAP//////MAMAwA8AAM8PwAD/////8MPDDMzMwAwDw/w///////DDwwzMzMAMA8P8P//////zADPzDw/Mz8wPP/zP////8wAz8w8PzM/MDz/8z/////z/wwD/8DAP8DDAzPP////8/8MA//AwD/AwwMzz/////MMAAAMD/P8D8MM8w/////zDAAADA/z/A/DDPMP/////w/P//Aw/MP8AzAPz/////8Pz//wMPzD/AMwD8/////P/P8MM///MMPw8AP/////z/z/DDP//zDD8PAD//////APM/zzDAz/Mz8Dww/////wDzP88wwM/zM/A8MP////wPzD/AwPzAAzAPwA/////8D8w/wMD8wAMwD8AP/////8AwAAA8Mz/DPw/w8P/////AMAAAPDM/wz8P8PD////8DM88D8z8DDAw8PMM/////AzPPA/M/AwwMPDzDP/////DPwPP88P/wADw/Mz/////wz8Dz/PD/8AA8PzM/////PAD8PMPz8wDDD/AA/////zwA/DzD8/MAww/wAP///////DPA/PzMAw/PwMz///////wzwPz8zAMPz8DM//////DwA8PwAADMMAPDP//////w8APD8AAAzDADwz////////8ADP8D8MDMwD//////////AAz/A/DAzMA///////8AAzMzMzMzMzMzMAA/////AAMzMzMzMzMzMzAAP////z/zzz/MM/M/PDPz/z////8/888/zDPzPzwz8/8/////MDM8/DMwAw8PD/MDP////zAzPPwzMAMPDw/zAz////8wM8PwD8M8/MwM8wM/////MDPD8A/DPPzMDPMDP////zAzzwzDMAPMwwwzAz////8wM88MwzADzMMMMwM/////P/PwP8wPwAwDADP/P////z/z8D/MD8AMAwAz/z////8AA/DAM//zw/wPMAA/////AAPwwDP/88P8DzAAP/////////////////////wAAA/////////////////8AAAP/////////////////AAAD/////////////////wAAA\")]\n        [InlineData(\"https://some-weird-test-site.site?whatever=test&test=123&qrcodes=true\", 1, 1, 16,\n            \"Qk0+wwAAAAAAAD4AAAAoAAAAcAIAAHACAAABAAEAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP///wD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP//AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAP////8AAP//AAD/////AAD///////8AAAAA//8AAP//////////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAA/////wAA//8AAP////8AAP///////wAAAAD//wAA//////////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAP////8AAP//AAD/////AAD///////8AAAAA//8AAP//////////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAA/////wAA//8AAP////8AAP///////wAAAAD//wAA//////////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAP////8AAP//AAD/////AAD///////8AAAAA//8AAP//////////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAA/////wAA//8AAP////8AAP///////wAAAAD//wAA//////////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAP////8AAP//AAD/////AAD///////8AAAAA//8AAP//////////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAA/////wAA//8AAP////8AAP///////wAAAAD//wAA//////////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAP////8AAP//AAD/////AAD///////8AAAAA//8AAP//////////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAA/////wAA//8AAP////8AAP///////wAAAAD//wAA//////////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAD/////AAD//wAA/////wAA////////AAAAAP//AAD//////////wAAAAAAAP//AAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA/////////////wAA/////wAAAAD/////AAAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//////////8AAP////8AAP//AAAAAP//////////AAD/////////////AAD/////AAAAAP////8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//////////wAA/////wAA//8AAAAA//////////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA/////////////wAA/////wAAAAD/////AAAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//////////8AAP////8AAP//AAAAAP//////////AAD/////////////AAD/////AAAAAP////8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//////////wAA/////wAA//8AAAAA//////////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA/////////////wAA/////wAAAAD/////AAAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//////////8AAP////8AAP//AAAAAP//////////AAD/////////////AAD/////AAAAAP////8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//////////wAA/////wAA//8AAAAA//////////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA/////////////wAA/////wAAAAD/////AAAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//////////8AAP////8AAP//AAAAAP//////////AAD/////////////AAD/////AAAAAP////8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//////////wAA/////wAA//8AAAAA//////////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA/////////////wAA/////wAAAAD/////AAAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//////////8AAP////8AAP//AAAAAP//////////AAD/////////////AAD/////AAAAAP////8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//////////wAA/////wAA//8AAAAA//////////8AAP////////////8AAP////8AAAAA/////wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAP//////////AAD/////AAD//wAAAAD//////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD/////AAAAAP//AAAAAP//AAD//wAAAAAAAP///////wAAAAD//wAA//8AAAAAAAD/////AAD///////////////8AAP//AAAAAAAA//8AAP////8AAAAA//8AAAAA//8AAP//AAAAAAAA////////AAAAAP//AAD//wAAAAAAAP////8AAP///////////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD/////AAAAAP//AAAAAP//AAD//wAAAAAAAP///////wAAAAD//wAA//8AAAAAAAD/////AAD///////////////8AAP//AAAAAAAA//8AAP////8AAAAA//8AAAAA//8AAP//AAAAAAAA////////AAAAAP//AAD//wAAAAAAAP////8AAP///////////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD/////AAAAAP//AAAAAP//AAD//wAAAAAAAP///////wAAAAD//wAA//8AAAAAAAD/////AAD///////////////8AAP//AAAAAAAA//8AAP////8AAAAA//8AAAAA//8AAP//AAAAAAAA////////AAAAAP//AAD//wAAAAAAAP////8AAP///////////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD/////AAAAAP//AAAAAP//AAD//wAAAAAAAP///////wAAAAD//wAA//8AAAAAAAD/////AAD///////////////8AAP//AAAAAAAA//8AAP////8AAAAA//8AAAAA//8AAP//AAAAAAAA////////AAAAAP//AAD//wAAAAAAAP////8AAP///////////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD/////AAAAAP//AAAAAP//AAD//wAAAAAAAP///////wAAAAD//wAA//8AAAAAAAD/////AAD///////////////8AAP//AAAAAAAA//8AAP////8AAAAA//8AAAAA//8AAP//AAAAAAAA////////AAAAAP//AAD//wAAAAAAAP////8AAP///////////////wAA//8AAAAAAAD//wAA/////wAAAAD//wAAAAD//wAA//8AAAAAAAD///////8AAAAA//8AAP//AAAAAAAA/////wAA////////////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP///////wAA//8AAP////////////8AAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAP////8AAP///////wAA//8AAAAAAAD//wAA////////AAD//wAA/////////////wAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA/////wAA////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP///////wAA//8AAP////////////8AAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAP////8AAP///////wAA//8AAAAAAAD//wAA////////AAD//wAA/////////////wAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA/////wAA////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP///////wAA//8AAP////////////8AAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAP////8AAP///////wAA//8AAAAAAAD//wAA////////AAD//wAA/////////////wAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA/////wAA////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP///////wAA//8AAP////////////8AAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAP////8AAP///////wAA//8AAAAAAAD//wAA////////AAD//wAA/////////////wAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA/////wAA////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP///////wAA//8AAP////////////8AAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAP////8AAP///////wAA//8AAAAAAAD//wAA////////AAD//wAA/////////////wAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA/////wAA////////AAD//wAAAAAAAP//AAD///////8AAP//AAD/////////////AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAD/////AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAAAAP//AAD/////AAD/////AAAAAP//////////////////AAAAAAAAAAAAAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAAAA//8AAP////8AAP////8AAAAA//////////////////8AAAAAAAAAAAAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAAAAP//AAD/////AAD/////AAAAAP//////////////////AAAAAAAAAAAAAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAAAA//8AAP////8AAP////8AAAAA//////////////////8AAAAAAAAAAAAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAAAAP//AAD/////AAD/////AAAAAP//////////////////AAAAAAAAAAAAAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAAAA//8AAP////8AAP////8AAAAA//////////////////8AAAAAAAAAAAAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAAAAP//AAD/////AAD/////AAAAAP//////////////////AAAAAAAAAAAAAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAAAA//8AAP////8AAP////8AAAAA//////////////////8AAAAAAAAAAAAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAAAAP//AAD/////AAD/////AAAAAP//////////////////AAAAAAAAAAAAAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAAAA//8AAP////8AAP////8AAAAA//////////////////8AAAAAAAAAAAAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAAAAD//wAA/////wAA/////wAAAAD//////////////////wAAAAAAAAAAAAAAAAAA//8AAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAD/////////////AAD/////AAAAAP///////wAAAAD///////8AAP//AAD//wAAAAD/////AAAAAP///////wAAAAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA////////AAAAAP///////wAA//8AAP//AAAAAP////8AAAAA////////AAAAAAAAAAAAAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAD/////////////AAD/////AAAAAP///////wAAAAD///////8AAP//AAD//wAAAAD/////AAAAAP///////wAAAAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA////////AAAAAP///////wAA//8AAP//AAAAAP////8AAAAA////////AAAAAAAAAAAAAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAD/////////////AAD/////AAAAAP///////wAAAAD///////8AAP//AAD//wAAAAD/////AAAAAP///////wAAAAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA////////AAAAAP///////wAA//8AAP//AAAAAP////8AAAAA////////AAAAAAAAAAAAAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAD/////////////AAD/////AAAAAP///////wAAAAD///////8AAP//AAD//wAAAAD/////AAAAAP///////wAAAAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA////////AAAAAP///////wAA//8AAP//AAAAAP////8AAAAA////////AAAAAAAAAAAAAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAD/////////////AAD/////AAAAAP///////wAAAAD///////8AAP//AAD//wAAAAD/////AAAAAP///////wAAAAAAAAAAAAD///////8AAP////////////8AAP////8AAAAA////////AAAAAP///////wAA//8AAP//AAAAAP////8AAAAA////////AAAAAAAAAAAAAP///////wAA/////////////wAA/////wAAAAD///////8AAAAA////////AAD//wAA//8AAAAA/////wAAAAD///////8AAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA//////////8AAAAAAAAAAAAAAAAAAP//AAD/////AAAAAAAA//8AAP////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD/////AAD//////////wAAAAAAAAAAAAAAAAAA//8AAP////8AAAAAAAD//wAA/////wAA//8AAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP////8AAP//////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA//////////8AAAAAAAAAAAAAAAAAAP//AAD/////AAAAAAAA//8AAP////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD/////AAD//////////wAAAAAAAAAAAAAAAAAA//8AAP////8AAAAAAAD//wAA/////wAA//8AAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP////8AAP//////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA//////////8AAAAAAAAAAAAAAAAAAP//AAD/////AAAAAAAA//8AAP////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD/////AAD//////////wAAAAAAAAAAAAAAAAAA//8AAP////8AAAAAAAD//wAA/////wAA//8AAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP////8AAP//////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA//////////8AAAAAAAAAAAAAAAAAAP//AAD/////AAAAAAAA//8AAP////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD/////AAD//////////wAAAAAAAAAAAAAAAAAA//8AAP////8AAAAAAAD//wAA/////wAA//8AAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP////8AAP//////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA//////////8AAAAAAAAAAAAAAAAAAP//AAD/////AAAAAAAA//8AAP////8AAP//AAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD/////AAD//////////wAAAAAAAAAAAAAAAAAA//8AAP////8AAAAAAAD//wAA/////wAA//8AAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP////8AAP//////////AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAAAAP//AAD/////AAD//wAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD///////////////////////////////8AAAAAAAAAAP//AAD//wAAAAAAAP////////////8AAP//AAD/////AAD///////8AAP////8AAP///////////////////////////////wAAAAAAAAAA//8AAP//AAAAAAAA/////////////wAA//8AAP////8AAP///////wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD///////////////////////////////8AAAAAAAAAAP//AAD//wAAAAAAAP////////////8AAP//AAD/////AAD///////8AAP////8AAP///////////////////////////////wAAAAAAAAAA//8AAP//AAAAAAAA/////////////wAA//8AAP////8AAP///////wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD///////////////////////////////8AAAAAAAAAAP//AAD//wAAAAAAAP////////////8AAP//AAD/////AAD///////8AAP////8AAP///////////////////////////////wAAAAAAAAAA//8AAP//AAAAAAAA/////////////wAA//8AAP////8AAP///////wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD///////////////////////////////8AAAAAAAAAAP//AAD//wAAAAAAAP////////////8AAP//AAD/////AAD///////8AAP////8AAP///////////////////////////////wAAAAAAAAAA//8AAP//AAAAAAAA/////////////wAA//8AAP////8AAP///////wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD///////////////////////////////8AAAAAAAAAAP//AAD//wAAAAAAAP////////////8AAP//AAD/////AAD///////8AAP////8AAP///////////////////////////////wAAAAAAAAAA//8AAP//AAAAAAAA/////////////wAA//8AAP////8AAP///////wAA/////wAA////////////////////////////////AAAAAAAAAAD//wAA//8AAAAAAAD/////////////AAD//wAA/////wAA////////AAD/////AAD//////////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////AAAAAAAA////////AAD//wAA//8AAP///////wAAAAAAAAAA//8AAAAAAAD///////////////8AAAAAAAAAAAAA//8AAAAAAAD///////8AAAAAAAD///////8AAP//AAD//wAA////////AAAAAAAAAAD//wAAAAAAAP///////////////wAAAAAAAAAAAAD//wAAAAAAAP///////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////AAAAAAAA////////AAD//wAA//8AAP///////wAAAAAAAAAA//8AAAAAAAD///////////////8AAAAAAAAAAAAA//8AAAAAAAD///////8AAAAAAAD///////8AAP//AAD//wAA////////AAAAAAAAAAD//wAAAAAAAP///////////////wAAAAAAAAAAAAD//wAAAAAAAP///////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////AAAAAAAA////////AAD//wAA//8AAP///////wAAAAAAAAAA//8AAAAAAAD///////////////8AAAAAAAAAAAAA//8AAAAAAAD///////8AAAAAAAD///////8AAP//AAD//wAA////////AAAAAAAAAAD//wAAAAAAAP///////////////wAAAAAAAAAAAAD//wAAAAAAAP///////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////AAAAAAAA////////AAD//wAA//8AAP///////wAAAAAAAAAA//8AAAAAAAD///////////////8AAAAAAAAAAAAA//8AAAAAAAD///////8AAAAAAAD///////8AAP//AAD//wAA////////AAAAAAAAAAD//wAAAAAAAP///////////////wAAAAAAAAAAAAD//wAAAAAAAP///////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////AAAAAAAA////////AAD//wAA//8AAP///////wAAAAAAAAAA//8AAAAAAAD///////////////8AAAAAAAAAAAAA//8AAAAAAAD///////8AAAAAAAD///////8AAP//AAD//wAA////////AAAAAAAAAAD//wAAAAAAAP///////////////wAAAAAAAAAAAAD//wAAAAAAAP///////wAAAAAAAP///////wAA//8AAP//AAD///////8AAAAAAAAAAP//AAAAAAAA////////////////AAAAAAAAAAAAAP//AAAAAAAA////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP////////////////////8AAAAA/////wAA//8AAAAAAAAAAP//////////AAAAAP////8AAP//////////AAD//wAA/////wAA//8AAAAA/////////////////////wAAAAD/////AAD//wAAAAAAAAAA//////////8AAAAA/////wAA//////////8AAP//AAD/////AAD//wAAAAD/////////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP////////////////////8AAAAA/////wAA//8AAAAAAAAAAP//////////AAAAAP////8AAP//////////AAD//wAA/////wAA//8AAAAA/////////////////////wAAAAD/////AAD//wAAAAAAAAAA//////////8AAAAA/////wAA//////////8AAP//AAD/////AAD//wAAAAD/////////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP////////////////////8AAAAA/////wAA//8AAAAAAAAAAP//////////AAAAAP////8AAP//////////AAD//wAA/////wAA//8AAAAA/////////////////////wAAAAD/////AAD//wAAAAAAAAAA//////////8AAAAA/////wAA//////////8AAP//AAD/////AAD//wAAAAD/////////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP////////////////////8AAAAA/////wAA//8AAAAAAAAAAP//////////AAAAAP////8AAP//////////AAD//wAA/////wAA//8AAAAA/////////////////////wAAAAD/////AAD//wAAAAAAAAAA//////////8AAAAA/////wAA//////////8AAP//AAD/////AAD//wAAAAD/////////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP////////////////////8AAAAA/////wAA//8AAAAAAAAAAP//////////AAAAAP////8AAP//////////AAD//wAA/////wAA//8AAAAA/////////////////////wAAAAD/////AAD//wAAAAAAAAAA//////////8AAAAA/////wAA//////////8AAP//AAD/////AAD//wAAAAD/////////////////////AAAAAP////8AAP//AAAAAAAAAAD//////////wAAAAD/////AAD//////////wAA//8AAP////8AAP//AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA//////////////////8AAP//AAAAAAAAAAD//wAA//8AAAAA////////AAAAAP////8AAAAA//8AAAAA//8AAAAAAAD//wAA/////wAAAAD//////////////////wAA//8AAAAAAAAAAP//AAD//wAAAAD///////8AAAAA/////wAAAAD//wAAAAD//wAAAAAAAP//AAD/////AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA//////////////////8AAP//AAAAAAAAAAD//wAA//8AAAAA////////AAAAAP////8AAAAA//8AAAAA//8AAAAAAAD//wAA/////wAAAAD//////////////////wAA//8AAAAAAAAAAP//AAD//wAAAAD///////8AAAAA/////wAAAAD//wAAAAD//wAAAAAAAP//AAD/////AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA//////////////////8AAP//AAAAAAAAAAD//wAA//8AAAAA////////AAAAAP////8AAAAA//8AAAAA//8AAAAAAAD//wAA/////wAAAAD//////////////////wAA//8AAAAAAAAAAP//AAD//wAAAAD///////8AAAAA/////wAAAAD//wAAAAD//wAAAAAAAP//AAD/////AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA//////////////////8AAP//AAAAAAAAAAD//wAA//8AAAAA////////AAAAAP////8AAAAA//8AAAAA//8AAAAAAAD//wAA/////wAAAAD//////////////////wAA//8AAAAAAAAAAP//AAD//wAAAAD///////8AAAAA/////wAAAAD//wAAAAD//wAAAAAAAP//AAD/////AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA//////////////////8AAP//AAAAAAAAAAD//wAA//8AAAAA////////AAAAAP////8AAAAA//8AAAAA//8AAAAAAAD//wAA/////wAAAAD//////////////////wAA//8AAAAAAAAAAP//AAD//wAAAAD///////8AAAAA/////wAAAAD//wAAAAD//wAAAAAAAP//AAD/////AAAAAP//////////////////AAD//wAAAAAAAAAA//8AAP//AAAAAP///////wAAAAD/////AAAAAP//AAAAAP//AAAAAAAA//8AAP////8AAAAA/////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAD//wAAAAAAAP///////////////wAA/////wAA//8AAP////8AAAAA/////wAAAAD//wAAAAD//wAA/////wAAAAD///////////////8AAP//AAAAAAAA////////////////AAD/////AAD//wAA/////wAAAAD/////AAAAAP//AAAAAP//AAD/////AAAAAP///////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAD//wAAAAAAAP///////////////wAA/////wAA//8AAP////8AAAAA/////wAAAAD//wAAAAD//wAA/////wAAAAD///////////////8AAP//AAAAAAAA////////////////AAD/////AAD//wAA/////wAAAAD/////AAAAAP//AAAAAP//AAD/////AAAAAP///////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAD//wAAAAAAAP///////////////wAA/////wAA//8AAP////8AAAAA/////wAAAAD//wAAAAD//wAA/////wAAAAD///////////////8AAP//AAAAAAAA////////////////AAD/////AAD//wAA/////wAAAAD/////AAAAAP//AAAAAP//AAD/////AAAAAP///////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAD//wAAAAAAAP///////////////wAA/////wAA//8AAP////8AAAAA/////wAAAAD//wAAAAD//wAA/////wAAAAD///////////////8AAP//AAAAAAAA////////////////AAD/////AAD//wAA/////wAAAAD/////AAAAAP//AAAAAP//AAD/////AAAAAP///////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAD//wAAAAAAAP///////////////wAA/////wAA//8AAP////8AAAAA/////wAAAAD//wAAAAD//wAA/////wAAAAD///////////////8AAP//AAAAAAAA////////////////AAD/////AAD//wAA/////wAAAAD/////AAAAAP//AAAAAP//AAD/////AAAAAP///////////////wAA//8AAAAAAAD///////////////8AAP////8AAP//AAD/////AAAAAP////8AAAAA//8AAAAA//8AAP////8AAAAA////////////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAA//8AAP////8AAP////8AAAAA////////AAD///////8AAP///////wAA//////////8AAAAA//8AAAAA//8AAAAAAAD//////////wAAAAD//wAA/////wAA/////wAAAAD///////8AAP///////wAA////////AAD//////////wAAAAD//wAAAAD//wAAAAAAAP//////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAA//8AAP////8AAP////8AAAAA////////AAD///////8AAP///////wAA//////////8AAAAA//8AAAAA//8AAAAAAAD//////////wAAAAD//wAA/////wAA/////wAAAAD///////8AAP///////wAA////////AAD//////////wAAAAD//wAAAAD//wAAAAAAAP//////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAA//8AAP////8AAP////8AAAAA////////AAD///////8AAP///////wAA//////////8AAAAA//8AAAAA//8AAAAAAAD//////////wAAAAD//wAA/////wAA/////wAAAAD///////8AAP///////wAA////////AAD//////////wAAAAD//wAAAAD//wAAAAAAAP//////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAA//8AAP////8AAP////8AAAAA////////AAD///////8AAP///////wAA//////////8AAAAA//8AAAAA//8AAAAAAAD//////////wAAAAD//wAA/////wAA/////wAAAAD///////8AAP///////wAA////////AAD//////////wAAAAD//wAAAAD//wAAAAAAAP//////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAA//8AAP////8AAP////8AAAAA////////AAD///////8AAP///////wAA//////////8AAAAA//8AAAAA//8AAAAAAAD//////////wAAAAD//wAA/////wAA/////wAAAAD///////8AAP///////wAA////////AAD//////////wAAAAD//wAAAAD//wAAAAAAAP//////////AAAAAP//AAD/////AAD/////AAAAAP///////wAA////////AAD///////8AAP//////////AAAAAP//AAAAAP//AAAAAAAA//////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA/////////////wAAAAAAAP//AAAAAP////////////8AAP//AAAAAP////8AAAAA////////AAD///////8AAAAA////////AAAAAP//AAD/////////////AAAAAAAA//8AAAAA/////////////wAA//8AAAAA/////wAAAAD///////8AAP///////wAAAAD///////8AAAAA//8AAP////////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA/////////////wAAAAAAAP//AAAAAP////////////8AAP//AAAAAP////8AAAAA////////AAD///////8AAAAA////////AAAAAP//AAD/////////////AAAAAAAA//8AAAAA/////////////wAA//8AAAAA/////wAAAAD///////8AAP///////wAAAAD///////8AAAAA//8AAP////////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA/////////////wAAAAAAAP//AAAAAP////////////8AAP//AAAAAP////8AAAAA////////AAD///////8AAAAA////////AAAAAP//AAD/////////////AAAAAAAA//8AAAAA/////////////wAA//8AAAAA/////wAAAAD///////8AAP///////wAAAAD///////8AAAAA//8AAP////////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA/////////////wAAAAAAAP//AAAAAP////////////8AAP//AAAAAP////8AAAAA////////AAD///////8AAAAA////////AAAAAP//AAD/////////////AAAAAAAA//8AAAAA/////////////wAA//8AAAAA/////wAAAAD///////8AAP///////wAAAAD///////8AAAAA//8AAP////////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA/////////////wAAAAAAAP//AAAAAP////////////8AAP//AAAAAP////8AAAAA////////AAD///////8AAAAA////////AAAAAP//AAD/////////////AAAAAAAA//8AAAAA/////////////wAA//8AAAAA/////wAAAAD///////8AAP///////wAAAAD///////8AAAAA//8AAP////////////8AAAAAAAD//wAAAAD/////////////AAD//wAAAAD/////AAAAAP///////wAA////////AAAAAP///////wAAAAD//wAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD///////////////8AAAAAAAD//wAAAAD//wAA////////AAD/////AAAAAAAA/////wAA/////wAAAAAAAAAAAAD/////AAAAAAAAAAAAAP///////////////wAAAAAAAP//AAAAAP//AAD///////8AAP////8AAAAAAAD/////AAD/////AAAAAAAAAAAAAP////8AAAAAAAAAAAAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD///////////////8AAAAAAAD//wAAAAD//wAA////////AAD/////AAAAAAAA/////wAA/////wAAAAAAAAAAAAD/////AAAAAAAAAAAAAP///////////////wAAAAAAAP//AAAAAP//AAD///////8AAP////8AAAAAAAD/////AAD/////AAAAAAAAAAAAAP////8AAAAAAAAAAAAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD///////////////8AAAAAAAD//wAAAAD//wAA////////AAD/////AAAAAAAA/////wAA/////wAAAAAAAAAAAAD/////AAAAAAAAAAAAAP///////////////wAAAAAAAP//AAAAAP//AAD///////8AAP////8AAAAAAAD/////AAD/////AAAAAAAAAAAAAP////8AAAAAAAAAAAAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD///////////////8AAAAAAAD//wAAAAD//wAA////////AAD/////AAAAAAAA/////wAA/////wAAAAAAAAAAAAD/////AAAAAAAAAAAAAP///////////////wAAAAAAAP//AAAAAP//AAD///////8AAP////8AAAAAAAD/////AAD/////AAAAAAAAAAAAAP////8AAAAAAAAAAAAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD///////////////8AAAAAAAD//wAAAAD//wAA////////AAD/////AAAAAAAA/////wAA/////wAAAAAAAAAAAAD/////AAAAAAAAAAAAAP///////////////wAAAAAAAP//AAAAAP//AAD///////8AAP////8AAAAAAAD/////AAD/////AAAAAAAAAAAAAP////8AAAAAAAAAAAAA////////////////AAAAAAAA//8AAAAA//8AAP///////wAA/////wAAAAAAAP////8AAP////8AAAAAAAAAAAAA/////wAAAAAAAAAAAAD/////////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP////8AAP////////////////////8AAAAAAAAAAAAA//8AAP////8AAP//AAD/////AAAAAAAA/////wAAAAD/////AAD//////////wAA/////wAA/////////////////////wAAAAAAAAAAAAD//wAA/////wAA//8AAP////8AAAAAAAD/////AAAAAP////8AAP//////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP////8AAP////////////////////8AAAAAAAAAAAAA//8AAP////8AAP//AAD/////AAAAAAAA/////wAAAAD/////AAD//////////wAA/////wAA/////////////////////wAAAAAAAAAAAAD//wAA/////wAA//8AAP////8AAAAAAAD/////AAAAAP////8AAP//////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP////8AAP////////////////////8AAAAAAAAAAAAA//8AAP////8AAP//AAD/////AAAAAAAA/////wAAAAD/////AAD//////////wAA/////wAA/////////////////////wAAAAAAAAAAAAD//wAA/////wAA//8AAP////8AAAAAAAD/////AAAAAP////8AAP//////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP////8AAP////////////////////8AAAAAAAAAAAAA//8AAP////8AAP//AAD/////AAAAAAAA/////wAAAAD/////AAD//////////wAA/////wAA/////////////////////wAAAAAAAAAAAAD//wAA/////wAA//8AAP////8AAAAAAAD/////AAAAAP////8AAP//////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP////8AAP////////////////////8AAAAAAAAAAAAA//8AAP////8AAP//AAD/////AAAAAAAA/////wAAAAD/////AAD//////////wAA/////wAA/////////////////////wAAAAAAAAAAAAD//wAA/////wAA//8AAP////8AAAAAAAD/////AAAAAP////8AAP//////////AAD/////AAD/////////////////////AAAAAAAAAAAAAP//AAD/////AAD//wAA/////wAAAAAAAP////8AAAAA/////wAA//////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAA//////////8AAAAAAAD//wAAAAD//wAA//8AAP////8AAP///////wAAAAAAAP////8AAP//AAAAAAAAAAD//wAAAAD/////////////AAD//////////wAAAAAAAP//AAAAAP//AAD//wAA/////wAA////////AAAAAAAA/////wAA//8AAAAAAAAAAP//AAAAAP////////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAA//////////8AAAAAAAD//wAAAAD//wAA//8AAP////8AAP///////wAAAAAAAP////8AAP//AAAAAAAAAAD//wAAAAD/////////////AAD//////////wAAAAAAAP//AAAAAP//AAD//wAA/////wAA////////AAAAAAAA/////wAA//8AAAAAAAAAAP//AAAAAP////////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAA//////////8AAAAAAAD//wAAAAD//wAA//8AAP////8AAP///////wAAAAAAAP////8AAP//AAAAAAAAAAD//wAAAAD/////////////AAD//////////wAAAAAAAP//AAAAAP//AAD//wAA/////wAA////////AAAAAAAA/////wAA//8AAAAAAAAAAP//AAAAAP////////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAA//////////8AAAAAAAD//wAAAAD//wAA//8AAP////8AAP///////wAAAAAAAP////8AAP//AAAAAAAAAAD//wAAAAD/////////////AAD//////////wAAAAAAAP//AAAAAP//AAD//wAA/////wAA////////AAAAAAAA/////wAA//8AAAAAAAAAAP//AAAAAP////////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAA//////////8AAAAAAAD//wAAAAD//wAA//8AAP////8AAP///////wAAAAAAAP////8AAP//AAAAAAAAAAD//wAAAAD/////////////AAD//////////wAAAAAAAP//AAAAAP//AAD//wAA/////wAA////////AAAAAAAA/////wAA//8AAAAAAAAAAP//AAAAAP////////////8AAP//////////AAAAAAAA//8AAAAA//8AAP//AAD/////AAD///////8AAAAAAAD/////AAD//wAAAAAAAAAA//8AAAAA/////////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP//////////AAAAAAAAAAAAAAAA/////wAAAAD//wAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAD///////8AAP//AAAAAP////8AAAAA//////////8AAAAAAAAAAAAAAAD/////AAAAAP//AAD/////AAAAAAAAAAD//wAAAAAAAAAAAAAAAP///////wAA//8AAAAA/////wAAAAD//////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP//////////AAAAAAAAAAAAAAAA/////wAAAAD//wAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAD///////8AAP//AAAAAP////8AAAAA//////////8AAAAAAAAAAAAAAAD/////AAAAAP//AAD/////AAAAAAAAAAD//wAAAAAAAAAAAAAAAP///////wAA//8AAAAA/////wAAAAD//////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP//////////AAAAAAAAAAAAAAAA/////wAAAAD//wAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAD///////8AAP//AAAAAP////8AAAAA//////////8AAAAAAAAAAAAAAAD/////AAAAAP//AAD/////AAAAAAAAAAD//wAAAAAAAAAAAAAAAP///////wAA//8AAAAA/////wAAAAD//////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP//////////AAAAAAAAAAAAAAAA/////wAAAAD//wAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAD///////8AAP//AAAAAP////8AAAAA//////////8AAAAAAAAAAAAAAAD/////AAAAAP//AAD/////AAAAAAAAAAD//wAAAAAAAAAAAAAAAP///////wAA//8AAAAA/////wAAAAD//////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP//////////AAAAAAAAAAAAAAAA/////wAAAAD//wAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAD///////8AAP//AAAAAP////8AAAAA//////////8AAAAAAAAAAAAAAAD/////AAAAAP//AAD/////AAAAAAAAAAD//wAAAAAAAAAAAAAAAP///////wAA//8AAAAA/////wAAAAD//////////wAAAAAAAAAAAAAAAP////8AAAAA//8AAP////8AAAAAAAAAAP//AAAAAAAAAAAAAAAA////////AAD//wAAAAD/////AAAAAP///////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP//////////////////////////AAD//wAAAAAAAAAAAAD///////8AAAAAAAAAAP//AAD//wAA//8AAP//AAAAAP//AAAAAP////8AAAAA//////////////////////////8AAP//AAAAAAAAAAAAAP///////wAAAAAAAAAA//8AAP//AAD//wAA//8AAAAA//8AAAAA/////wAAAAD//////////////////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP//////////////////////////AAD//wAAAAAAAAAAAAD///////8AAAAAAAAAAP//AAD//wAA//8AAP//AAAAAP//AAAAAP////8AAAAA//////////////////////////8AAP//AAAAAAAAAAAAAP///////wAAAAAAAAAA//8AAP//AAD//wAA//8AAAAA//8AAAAA/////wAAAAD//////////////////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP//////////////////////////AAD//wAAAAAAAAAAAAD///////8AAAAAAAAAAP//AAD//wAA//8AAP//AAAAAP//AAAAAP////8AAAAA//////////////////////////8AAP//AAAAAAAAAAAAAP///////wAAAAAAAAAA//8AAP//AAD//wAA//8AAAAA//8AAAAA/////wAAAAD//////////////////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP//////////////////////////AAD//wAAAAAAAAAAAAD///////8AAAAAAAAAAP//AAD//wAA//8AAP//AAAAAP//AAAAAP////8AAAAA//////////////////////////8AAP//AAAAAAAAAAAAAP///////wAAAAAAAAAA//8AAP//AAD//wAA//8AAAAA//8AAAAA/////wAAAAD//////////////////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP//////////////////////////AAD//wAAAAAAAAAAAAD///////8AAAAAAAAAAP//AAD//wAA//8AAP//AAAAAP//AAAAAP////8AAAAA//////////////////////////8AAP//AAAAAAAAAAAAAP///////wAAAAAAAAAA//8AAP//AAD//wAA//8AAAAA//8AAAAA/////wAAAAD//////////////////////////wAA//8AAAAAAAAAAAAA////////AAAAAAAAAAD//wAA//8AAP//AAD//wAAAAD//wAAAAD/////AAAAAP////////////////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////////////wAA//8AAP//AAD/////AAD//wAAAAAAAP////8AAAAAAAD///////8AAP//AAAAAAAA//8AAP////8AAP////8AAP//////////////////AAD//wAA//8AAP////8AAP//AAAAAAAA/////wAAAAAAAP///////wAA//8AAAAAAAD//wAA/////wAA/////wAA//////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////////////wAA//8AAP//AAD/////AAD//wAAAAAAAP////8AAAAAAAD///////8AAP//AAAAAAAA//8AAP////8AAP////8AAP//////////////////AAD//wAA//8AAP////8AAP//AAAAAAAA/////wAAAAAAAP///////wAA//8AAAAAAAD//wAA/////wAA/////wAA//////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////////////wAA//8AAP//AAD/////AAD//wAAAAAAAP////8AAAAAAAD///////8AAP//AAAAAAAA//8AAP////8AAP////8AAP//////////////////AAD//wAA//8AAP////8AAP//AAAAAAAA/////wAAAAAAAP///////wAA//8AAAAAAAD//wAA/////wAA/////wAA//////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////////////wAA//8AAP//AAD/////AAD//wAAAAAAAP////8AAAAAAAD///////8AAP//AAAAAAAA//8AAP////8AAP////8AAP//////////////////AAD//wAA//8AAP////8AAP//AAAAAAAA/////wAAAAAAAP///////wAA//8AAAAAAAD//wAA/////wAA/////wAA//////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////////////wAA//8AAP//AAD/////AAD//wAAAAAAAP////8AAAAAAAD///////8AAP//AAAAAAAA//8AAP////8AAP////8AAP//////////////////AAD//wAA//8AAP////8AAP//AAAAAAAA/////wAAAAAAAP///////wAA//8AAAAAAAD//wAA/////wAA/////wAA//////////////////8AAP//AAD//wAA/////wAA//8AAAAAAAD/////AAAAAAAA////////AAD//wAAAAAAAP//AAD/////AAD/////AAD//////////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA////////AAD//wAA//8AAP//AAD//wAA////////AAAAAP////8AAP////8AAAAA////////////////////////AAD/////AAAAAAAAAAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAAAA/////wAA/////wAAAAD///////////////////////8AAP////8AAAAAAAAAAP///////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA////////AAD//wAA//8AAP//AAD//wAA////////AAAAAP////8AAP////8AAAAA////////////////////////AAD/////AAAAAAAAAAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAAAA/////wAA/////wAAAAD///////////////////////8AAP////8AAAAAAAAAAP///////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA////////AAD//wAA//8AAP//AAD//wAA////////AAAAAP////8AAP////8AAAAA////////////////////////AAD/////AAAAAAAAAAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAAAA/////wAA/////wAAAAD///////////////////////8AAP////8AAAAAAAAAAP///////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA////////AAD//wAA//8AAP//AAD//wAA////////AAAAAP////8AAP////8AAAAA////////////////////////AAD/////AAAAAAAAAAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAAAA/////wAA/////wAAAAD///////////////////////8AAP////8AAAAAAAAAAP///////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA////////AAD//wAA//8AAP//AAD//wAA////////AAAAAP////8AAP////8AAAAA////////////////////////AAD/////AAAAAAAAAAD///////8AAP//AAD//wAA//8AAP//AAD///////8AAAAA/////wAA/////wAAAAD///////////////////////8AAP////8AAAAAAAAAAP///////wAA//8AAP//AAD//wAA//8AAP///////wAAAAD/////AAD/////AAAAAP///////////////////////wAA/////wAAAAAAAAAA//////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAAAAD//wAAAAD//wAAAAAAAAAA////////AAAAAP//////////AAAAAP//AAAAAP//AAD/////AAD//wAAAAD//wAAAAD/////////////AAAAAP//AAAAAP//AAAAAAAAAAD///////8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP//AAAAAP//AAAAAP////////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAAAAD//wAAAAD//wAAAAAAAAAA////////AAAAAP//////////AAAAAP//AAAAAP//AAD/////AAD//wAAAAD//wAAAAD/////////////AAAAAP//AAAAAP//AAAAAAAAAAD///////8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP//AAAAAP//AAAAAP////////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAAAAD//wAAAAD//wAAAAAAAAAA////////AAAAAP//////////AAAAAP//AAAAAP//AAD/////AAD//wAAAAD//wAAAAD/////////////AAAAAP//AAAAAP//AAAAAAAAAAD///////8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP//AAAAAP//AAAAAP////////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAAAAD//wAAAAD//wAAAAAAAAAA////////AAAAAP//////////AAAAAP//AAAAAP//AAD/////AAD//wAAAAD//wAAAAD/////////////AAAAAP//AAAAAP//AAAAAAAAAAD///////8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP//AAAAAP//AAAAAP////////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAAAAD//wAAAAD//wAAAAAAAAAA////////AAAAAP//////////AAAAAP//AAAAAP//AAD/////AAD//wAAAAD//wAAAAD/////////////AAAAAP//AAAAAP//AAAAAAAAAAD///////8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP//AAAAAP//AAAAAP////////////8AAAAA//8AAAAA//8AAAAAAAAAAP///////wAAAAD//////////wAAAAD//wAAAAD//wAA/////wAA//8AAAAA//8AAAAA/////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA////////////////AAD///////8AAAAAAAAAAP//AAAAAP///////wAA/////wAA/////wAA//8AAP//AAD//wAA////////AAAAAAAAAAD///////////////8AAP///////wAAAAAAAAAA//8AAAAA////////AAD/////AAD/////AAD//wAA//8AAP//AAD///////8AAAAAAAAAAP///////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA////////////////AAD///////8AAAAAAAAAAP//AAAAAP///////wAA/////wAA/////wAA//8AAP//AAD//wAA////////AAAAAAAAAAD///////////////8AAP///////wAAAAAAAAAA//8AAAAA////////AAD/////AAD/////AAD//wAA//8AAP//AAD///////8AAAAAAAAAAP///////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA////////////////AAD///////8AAAAAAAAAAP//AAAAAP///////wAA/////wAA/////wAA//8AAP//AAD//wAA////////AAAAAAAAAAD///////////////8AAP///////wAAAAAAAAAA//8AAAAA////////AAD/////AAD/////AAD//wAA//8AAP//AAD///////8AAAAAAAAAAP///////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA////////////////AAD///////8AAAAAAAAAAP//AAAAAP///////wAA/////wAA/////wAA//8AAP//AAD//wAA////////AAAAAAAAAAD///////////////8AAP///////wAAAAAAAAAA//8AAAAA////////AAD/////AAD/////AAD//wAA//8AAP//AAD///////8AAAAAAAAAAP///////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA////////////////AAD///////8AAAAAAAAAAP//AAAAAP///////wAA/////wAA/////wAA//8AAP//AAD//wAA////////AAAAAAAAAAD///////////////8AAP///////wAAAAAAAAAA//8AAAAA////////AAD/////AAD/////AAD//wAA//8AAP//AAD///////8AAAAAAAAAAP///////////////wAA////////AAAAAAAAAAD//wAAAAD///////8AAP////8AAP////8AAP//AAD//wAA//8AAP///////wAAAAAAAAAA//////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA/////////////////////wAAAAAAAP////8AAAAA/////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP///////wAAAAD/////////////////////AAAAAAAA/////wAAAAD/////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA////////AAAAAP////////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA/////////////////////wAAAAAAAP////8AAAAA/////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP///////wAAAAD/////////////////////AAAAAAAA/////wAAAAD/////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA////////AAAAAP////////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA/////////////////////wAAAAAAAP////8AAAAA/////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP///////wAAAAD/////////////////////AAAAAAAA/////wAAAAD/////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA////////AAAAAP////////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA/////////////////////wAAAAAAAP////8AAAAA/////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP///////wAAAAD/////////////////////AAAAAAAA/////wAAAAD/////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA////////AAAAAP////////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA/////////////////////wAAAAAAAP////8AAAAA/////wAAAAAAAP//AAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP///////wAAAAD/////////////////////AAAAAAAA/////wAAAAD/////AAAAAAAA//8AAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA////////AAAAAP////////////////////8AAAAAAAD/////AAAAAP////8AAAAAAAD//wAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD///////8AAAAA////////////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD///////8AAP////8AAP////8AAAAAAAAAAP//AAD//wAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//////////AAAAAP////8AAAAAAAAAAP///////wAA/////wAA/////wAAAAAAAAAA//8AAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAA//////////8AAAAA/////wAAAAAAAAAA////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD///////8AAP////8AAP////8AAAAAAAAAAP//AAD//wAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//////////AAAAAP////8AAAAAAAAAAP///////wAA/////wAA/////wAAAAAAAAAA//8AAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAA//////////8AAAAA/////wAAAAAAAAAA////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD///////8AAP////8AAP////8AAAAAAAAAAP//AAD//wAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//////////AAAAAP////8AAAAAAAAAAP///////wAA/////wAA/////wAAAAAAAAAA//8AAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAA//////////8AAAAA/////wAAAAAAAAAA////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD///////8AAP////8AAP////8AAAAAAAAAAP//AAD//wAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//////////AAAAAP////8AAAAAAAAAAP///////wAA/////wAA/////wAAAAAAAAAA//8AAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAA//////////8AAAAA/////wAAAAAAAAAA////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD///////8AAP////8AAP////8AAAAAAAAAAP//AAD//wAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//////////AAAAAP////8AAAAAAAAAAP///////wAA/////wAA/////wAAAAAAAAAA//8AAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAA//////////8AAAAA/////wAAAAAAAAAA////////AAD/////AAD/////AAAAAAAAAAD//wAA//8AAAAAAAAAAAAA//8AAAAAAAAAAP//AAD//////////wAAAAD/////AAAAAAAAAAD/////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD///////////////8AAP////////////8AAP////8AAAAAAAAAAP////8AAAAA/////wAA//8AAAAA/////////////wAA////////AAAAAP///////////////wAA/////////////wAA/////wAAAAAAAAAA/////wAAAAD/////AAD//wAAAAD/////////////AAD///////8AAAAA////////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD///////////////8AAP////////////8AAP////8AAAAAAAAAAP////8AAAAA/////wAA//8AAAAA/////////////wAA////////AAAAAP///////////////wAA/////////////wAA/////wAAAAAAAAAA/////wAAAAD/////AAD//wAAAAD/////////////AAD///////8AAAAA////////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD///////////////8AAP////////////8AAP////8AAAAAAAAAAP////8AAAAA/////wAA//8AAAAA/////////////wAA////////AAAAAP///////////////wAA/////////////wAA/////wAAAAAAAAAA/////wAAAAD/////AAD//wAAAAD/////////////AAD///////8AAAAA////////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD///////////////8AAP////////////8AAP////8AAAAAAAAAAP////8AAAAA/////wAA//8AAAAA/////////////wAA////////AAAAAP///////////////wAA/////////////wAA/////wAAAAAAAAAA/////wAAAAD/////AAD//wAAAAD/////////////AAD///////8AAAAA////////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD///////////////8AAP////////////8AAP////8AAAAAAAAAAP////8AAAAA/////wAA//8AAAAA/////////////wAA////////AAAAAP///////////////wAA/////////////wAA/////wAAAAAAAAAA/////wAAAAD/////AAD//wAAAAD/////////////AAD///////8AAAAA////////////////AAD/////////////AAD/////AAAAAAAAAAD/////AAAAAP////8AAP//AAAAAP////////////8AAP///////wAAAAD//////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////////////AAAAAAAAAAAAAP////8AAAAAAAD//wAA//8AAP//AAD//wAAAAAAAAAA//8AAP//AAAAAAAA//8AAAAA//8AAP////////////////////8AAAAAAAAAAAAA/////wAAAAAAAP//AAD//wAA//8AAP//AAAAAAAAAAD//wAA//8AAAAAAAD//wAAAAD//wAA/////////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////////////AAAAAAAAAAAAAP////8AAAAAAAD//wAA//8AAP//AAD//wAAAAAAAAAA//8AAP//AAAAAAAA//8AAAAA//8AAP////////////////////8AAAAAAAAAAAAA/////wAAAAAAAP//AAD//wAA//8AAP//AAAAAAAAAAD//wAA//8AAAAAAAD//wAAAAD//wAA/////////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////////////AAAAAAAAAAAAAP////8AAAAAAAD//wAA//8AAP//AAD//wAAAAAAAAAA//8AAP//AAAAAAAA//8AAAAA//8AAP////////////////////8AAAAAAAAAAAAA/////wAAAAAAAP//AAD//wAA//8AAP//AAAAAAAAAAD//wAA//8AAAAAAAD//wAAAAD//wAA/////////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////////////AAAAAAAAAAAAAP////8AAAAAAAD//wAA//8AAP//AAD//wAAAAAAAAAA//8AAP//AAAAAAAA//8AAAAA//8AAP////////////////////8AAAAAAAAAAAAA/////wAAAAAAAP//AAD//wAA//8AAP//AAAAAAAAAAD//wAA//8AAAAAAAD//wAAAAD//wAA/////////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////////////AAAAAAAAAAAAAP////8AAAAAAAD//wAA//8AAP//AAD//wAAAAAAAAAA//8AAP//AAAAAAAA//8AAAAA//8AAP////////////////////8AAAAAAAAAAAAA/////wAAAAAAAP//AAD//wAA//8AAP//AAAAAAAAAAD//wAA//8AAAAAAAD//wAAAAD//wAA/////////////////////wAAAAAAAAAAAAD/////AAAAAAAA//8AAP//AAD//wAA//8AAAAAAAAAAP//AAD//wAAAAAAAP//AAAAAP//AAD/////////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAAAA//8AAP//AAD/////AAAAAP//////////AAD//wAA/////wAAAAAAAP//AAD//wAAAAAAAAAAAAD/////AAAAAP//AAD//////////wAAAAD//wAA//8AAP////8AAAAA//////////8AAP//AAD/////AAAAAAAA//8AAP//AAAAAAAAAAAAAP////8AAAAA//8AAP//////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAAAA//8AAP//AAD/////AAAAAP//////////AAD//wAA/////wAAAAAAAP//AAD//wAAAAAAAAAAAAD/////AAAAAP//AAD//////////wAAAAD//wAA//8AAP////8AAAAA//////////8AAP//AAD/////AAAAAAAA//8AAP//AAAAAAAAAAAAAP////8AAAAA//8AAP//////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAAAA//8AAP//AAD/////AAAAAP//////////AAD//wAA/////wAAAAAAAP//AAD//wAAAAAAAAAAAAD/////AAAAAP//AAD//////////wAAAAD//wAA//8AAP////8AAAAA//////////8AAP//AAD/////AAAAAAAA//8AAP//AAAAAAAAAAAAAP////8AAAAA//8AAP//////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAAAA//8AAP//AAD/////AAAAAP//////////AAD//wAA/////wAAAAAAAP//AAD//wAAAAAAAAAAAAD/////AAAAAP//AAD//////////wAAAAD//wAA//8AAP////8AAAAA//////////8AAP//AAD/////AAAAAAAA//8AAP//AAAAAAAAAAAAAP////8AAAAA//8AAP//////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAAAA//8AAP//AAD/////AAAAAP//////////AAD//wAA/////wAAAAAAAP//AAD//wAAAAAAAAAAAAD/////AAAAAP//AAD//////////wAAAAD//wAA//8AAP////8AAAAA//////////8AAP//AAD/////AAAAAAAA//8AAP//AAAAAAAAAAAAAP////8AAAAA//8AAP//////////AAAAAP//AAD//wAA/////wAAAAD//////////wAA//8AAP////8AAAAAAAD//wAA//8AAAAAAAAAAAAA/////wAAAAD//wAA//////////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP///////wAA////////AAD//wAAAAAAAAAAAAD//wAA/////////////wAAAAD//wAAAAAAAP//////////AAAAAAAAAAAAAAAA/////wAA////////AAD///////8AAP//AAAAAAAAAAAAAP//AAD/////////////AAAAAP//AAAAAAAA//////////8AAAAAAAAAAAAAAAD/////AAD///////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP///////wAA////////AAD//wAAAAAAAAAAAAD//wAA/////////////wAAAAD//wAAAAAAAP//////////AAAAAAAAAAAAAAAA/////wAA////////AAD///////8AAP//AAAAAAAAAAAAAP//AAD/////////////AAAAAP//AAAAAAAA//////////8AAAAAAAAAAAAAAAD/////AAD///////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP///////wAA////////AAD//wAAAAAAAAAAAAD//wAA/////////////wAAAAD//wAAAAAAAP//////////AAAAAAAAAAAAAAAA/////wAA////////AAD///////8AAP//AAAAAAAAAAAAAP//AAD/////////////AAAAAP//AAAAAAAA//////////8AAAAAAAAAAAAAAAD/////AAD///////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP///////wAA////////AAD//wAAAAAAAAAAAAD//wAA/////////////wAAAAD//wAAAAAAAP//////////AAAAAAAAAAAAAAAA/////wAA////////AAD///////8AAP//AAAAAAAAAAAAAP//AAD/////////////AAAAAP//AAAAAAAA//////////8AAAAAAAAAAAAAAAD/////AAD///////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP///////wAA////////AAD//wAAAAAAAAAAAAD//wAA/////////////wAAAAD//wAAAAAAAP//////////AAAAAAAAAAAAAAAA/////wAA////////AAD///////8AAP//AAAAAAAAAAAAAP//AAD/////////////AAAAAP//AAAAAAAA//////////8AAAAAAAAAAAAAAAD/////AAD///////8AAP///////wAA//8AAAAAAAAAAAAA//8AAP////////////8AAAAA//8AAAAAAAD//////////wAAAAAAAAAAAAAAAP////8AAP////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA/////////////////////////////////////////////////////wAAAAAAAAAAAAAAAP///////wAAAAD//wAAAAD//wAAAAD/////AAD/////////////////////////////////////////////////////AAAAAAAAAAAAAAAA////////AAAAAP//AAAAAP//AAAAAP////8AAP////////////////////////////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA/////////////////////////////////////////////////////wAAAAAAAAAAAAAAAP///////wAAAAD//wAAAAD//wAAAAD/////AAD/////////////////////////////////////////////////////AAAAAAAAAAAAAAAA////////AAAAAP//AAAAAP//AAAAAP////8AAP////////////////////////////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA/////////////////////////////////////////////////////wAAAAAAAAAAAAAAAP///////wAAAAD//wAAAAD//wAAAAD/////AAD/////////////////////////////////////////////////////AAAAAAAAAAAAAAAA////////AAAAAP//AAAAAP//AAAAAP////8AAP////////////////////////////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA/////////////////////////////////////////////////////wAAAAAAAAAAAAAAAP///////wAAAAD//wAAAAD//wAAAAD/////AAD/////////////////////////////////////////////////////AAAAAAAAAAAAAAAA////////AAAAAP//AAAAAP//AAAAAP////8AAP////////////////////////////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA/////////////////////////////////////////////////////wAAAAAAAAAAAAAAAP///////wAAAAD//wAAAAD//wAAAAD/////AAD/////////////////////////////////////////////////////AAAAAAAAAAAAAAAA////////AAAAAP//AAAAAP//AAAAAP////8AAP////////////////////////////////////////////////////8AAAAAAAAAAAAAAAD///////8AAAAA//8AAAAA//8AAAAA/////wAA////////////////////////////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAD/////AAD///////8AAP//AAD//wAA/////////////wAA////////AAD/////////////AAD//wAAAAAAAAAA//8AAAAA//8AAP//AAAAAP////8AAP///////wAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAD/////AAD///////8AAP//AAD//wAA/////////////wAA////////AAD/////////////AAD//wAAAAAAAAAA//8AAAAA//8AAP//AAAAAP////8AAP///////wAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAD/////AAD///////8AAP//AAD//wAA/////////////wAA////////AAD/////////////AAD//wAAAAAAAAAA//8AAAAA//8AAP//AAAAAP////8AAP///////wAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAD/////AAD///////8AAP//AAD//wAA/////////////wAA////////AAD/////////////AAD//wAAAAAAAAAA//8AAAAA//8AAP//AAAAAP////8AAP///////wAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAD/////AAD///////8AAP//AAD//wAA/////////////wAA////////AAD/////////////AAD//wAAAAAAAAAA//8AAAAA//8AAP//AAAAAP////8AAP///////wAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP//AAAAAAAAAAD//wAAAAD//wAA//8AAAAA/////wAA////////AAD//wAA//8AAP////////////8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAP//AAAAAAAA/////////////wAA/////wAA//8AAP//AAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAAAAAAD/////////////AAD/////AAD//wAA//8AAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAP//AAAAAAAA/////////////wAA/////wAA//8AAP//AAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAAAAAAD/////////////AAD/////AAD//wAA//8AAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAP//AAAAAAAA/////////////wAA/////wAA//8AAP//AAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAAAAAAD/////////////AAD/////AAD//wAA//8AAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAP//AAAAAAAA/////////////wAA/////wAA//8AAP//AAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAAAAAAD/////////////AAD/////AAD//wAA//8AAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAAAAAAAP//AAAAAAAA/////////////wAA/////wAA//8AAP//AAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAAAAAAD/////////////AAD/////AAD//wAA//8AAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAAAAAAD//wAAAAAAAP////////////8AAP////8AAP//AAD//wAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAD///////8AAAAAAAD///////8AAAAAAAD/////AAAAAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAP///////wAAAAAAAP///////wAAAAAAAP////8AAAAAAAAAAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAD///////8AAAAAAAD///////8AAAAAAAD/////AAAAAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAP///////wAAAAAAAP///////wAAAAAAAP////8AAAAAAAAAAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAD///////8AAAAAAAD///////8AAAAAAAD/////AAAAAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAP///////wAAAAAAAP///////wAAAAAAAP////8AAAAAAAAAAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAD///////8AAAAAAAD///////8AAAAAAAD/////AAAAAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAP///////wAAAAAAAP///////wAAAAAAAP////8AAAAAAAAAAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP//AAD///////8AAAAAAAD///////8AAAAAAAD/////AAAAAAAAAAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA//8AAP///////wAAAAAAAP///////wAAAAAAAP////8AAAAAAAAAAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD//wAA////////AAAAAAAA////////AAAAAAAA/////wAAAAAAAAAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA/////////////wAA//8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD/////////////AAD//wAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA/////////////wAA//8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD/////////////AAD//wAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA/////////////wAA//8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD/////////////AAD//wAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA/////////////wAA//8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD/////////////AAD//wAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA//8AAAAAAAD//wAA/////////////wAA//8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAD//wAA//8AAAAAAAD//wAA////////AAD//wAAAAAAAP//AAD/////////////AAD//wAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAP//AAD//wAAAAAAAP//AAD///////8AAP//AAAAAAAA//8AAP////////////8AAP//AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAA//8AAP//AAAAAAAA//8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAD/////////////AAD/////AAD//wAAAAAAAAAA/////wAA/////wAAAAD/////AAAAAAAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP////8AAP//AAAAAAAAAAD/////AAD/////AAAAAP////8AAAAAAAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAD/////////////AAD/////AAD//wAAAAAAAAAA/////wAA/////wAAAAD/////AAAAAAAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP////8AAP//AAAAAAAAAAD/////AAD/////AAAAAP////8AAAAAAAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAD/////////////AAD/////AAD//wAAAAAAAAAA/////wAA/////wAAAAD/////AAAAAAAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP////8AAP//AAAAAAAAAAD/////AAD/////AAAAAP////8AAAAAAAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAD/////////////AAD/////AAD//wAAAAAAAAAA/////wAA/////wAAAAD/////AAAAAAAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP////8AAP//AAAAAAAAAAD/////AAD/////AAAAAP////8AAAAAAAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAD/////////////AAD/////AAD//wAAAAAAAAAA/////wAA/////wAAAAD/////AAAAAAAA//8AAP//AAD/////////////AAD///////8AAP////////////8AAP////8AAP//AAAAAAAAAAD/////AAD/////AAAAAP////8AAAAAAAD//wAA//8AAP////////////8AAP///////wAA/////////////wAA/////wAA//8AAAAAAAAAAP////8AAP////8AAAAA/////wAAAAAAAP//AAD//wAA/////////////wAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAA/////wAAAAAAAAAA/////wAAAAD///////8AAAAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAD/////AAAAAAAAAAD/////AAAAAP///////wAAAAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAA/////wAAAAAAAAAA/////wAAAAD///////8AAAAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAD/////AAAAAAAAAAD/////AAAAAP///////wAAAAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAA/////wAAAAAAAAAA/////wAAAAD///////8AAAAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAD/////AAAAAAAAAAD/////AAAAAP///////wAAAAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAA/////wAAAAAAAAAA/////wAAAAD///////8AAAAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAD/////AAAAAAAAAAD/////AAAAAP///////wAAAAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAA/////wAAAAAAAAAA/////wAAAAD///////8AAAAA//8AAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAD/////AAAAAAAAAAD/////AAAAAP///////wAAAAD//wAAAAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAP////8AAAAAAAAAAP////8AAAAA////////AAAAAP//AAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAD///////////////////////////////////////////////////////////////////////////////////////////////////////8AAP///////////////////////////////////////////////////////////////////////////////////////////////////////wAA////////////////////////////////////////////////////////////////////////////////////////////////////////AAA=\")]\n        public void ToMonochromeBitmap_CreatesValidBitmap(\n            string stubText,\n            int stubEccOrdinal,\n            int stubBorder,\n            int stubScale,\n            string expectedBitmapBase64)\n        {\n            var stubEcc = EccFromOrdinal(stubEccOrdinal);\n\n            var qrCode = QrCode.EncodeText(stubText, stubEcc);\n\n            var actualBitmap = qrCode.ToBmpBitmap(stubBorder, stubScale);\n            var actualBase64 = Convert.ToBase64String(actualBitmap);\n\n            Assert.Equal(expectedBitmapBase64, actualBase64);\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrCodeDataProvider.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class QrCodeDataProvider : IEnumerable<object[]>\n    {\n        private static readonly List<QrSegment> Segment0 = QrSegment.MakeSegments(\"\");\n        private static readonly List<QrSegment> Segment1 = QrSegment.MakeSegments(\"A\");\n        private static readonly List<QrSegment> Segment2 = QrSegment.MakeSegments(\"Hello, world!\");\n        private static readonly List<QrSegment> Segment3 = QrSegment.MakeSegments(\"The quick brown fox jumps over the lazy dog\");\n        private static readonly List<QrSegment> Segment4 = QrSegment.MakeSegments(\"87634846443833526\");\n        private static readonly List<QrSegment> Segment5 = QrSegment.MakeSegments(\"kVtnmdZMDB wbhQ4Y0L0D 6dxWYgeDO7 6XEq8JBGFD dbA5ruetw0 zIevtZZkJL UnEcrObNuS COOscwe4PD PL2lKGcbqk uXnmfUX00E l4FsUfvkiU O8bje4GTce  C85HiEHDha EoObmX7Hef VEipzaCPV7 XpBy5cgYRZ VzlrmMTRSW f0U7Dt0x5j Mb5uk2JcA6 MFov2hnHQR\");\n        private static readonly List<QrSegment> Segment6 = QrSegment.MakeSegments(\"😀 € éñ 💩\");\n        private static readonly List<QrSegment> Segment7 = QrSegment.MakeSegments(\"DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/\");\n        private static readonly List<QrSegment> Segment8 = QrSegment.MakeSegments(\"こんにちwa、世界！ αβγδ\");\n        private static readonly List<QrSegment> Segment9 = QrSegment.MakeSegments(\"Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversations?' So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.\");\n        private static readonly List<QrSegment> Segment10 = QrSegment.MakeSegments(\"https://www.nayuki.io/\");\n        private static readonly List<QrSegment> Segment11 = QrSegment.MakeSegments(\"維基百科（Wikipedia，聆聽i/ˌwɪkᵻˈpiːdi.ə/）是一個自由內容、公開編輯且多語言的網路百科全書協作計畫\");\n        private static readonly List<QrSegment> Segment12 = new List<QrSegment> { QrSegment.MakeNumeric(\"\"), QrSegment.MakeAlphanumeric(\"\") };\n        private static readonly List<QrSegment> Segment13 = new List<QrSegment> { QrSegmentAdvanced.MakeKanji(\"昨夜のコンサートは最高でした。\") };\n        private static readonly List<QrSegment> Segment14 = QrSegmentAdvanced.MakeSegmentsOptimally(\"2342342340ABC234234jkl~~\", Ecc.High);\n\n        private static readonly string[] Modules0 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X XXXXX X XXX X\",\n            \"X XXX X XXX X X XXX X\",\n            \"X XXX X  XXX  X XXX X\",\n            \"X     X  X XX X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"                     \",\n            \"   XX XX    X    XX  \",\n            \"XX   X XX  XX  XXX XX\",\n            \"XX   XXXX   XXXX X  X\",\n            \" X XX   XXXX   XX  X \",\n            \"X XX  X X     XXXXXXX\",\n            \"        XX   X    XXX\",\n            \"XXXXXXX XXX  XX  XX X\",\n            \"X     X  XXX XX   X  \",\n            \"X XXX X XX X  X X XX \",\n            \"X XXX X XX  X  XX    \",\n            \"X XXX X  X XX  XXX XX\",\n            \"X     X      X X X XX\",\n            \"XXXXXXX   XXX XXX XX \"\n        };\n        private static readonly string[] Modules1 = {\n            \"XXXXXXX X  XX  XX  XX  XX XXXXXXX\",\n            \"X     X XXX XXX XXX XXX X X     X\",\n            \"X XXX X   XXX XXX XXX XXX X XXX X\",\n            \"X XXX X   X   X   X   X   X XXX X\",\n            \"X XXX X XXXX XXX XXX XXX  X XXX X\",\n            \"X     X X  X   X   X   X  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXX XXX XXX XXX        \",\n            \"XXX  XX XXX  XX  XX  XX  XXXX  XX\",\n            \" XXX X   XX  XX  XX  XX  X       \",\n            \" XXXX XXX  X   X   X   X    X X  \",\n            \" X     X X   X   X   X    X     X\",\n            \"    XXX  X XXX XXX XXX XX  XX X  \",\n            \" XXX    X   X   X   X   X  XXXXX \",\n            \"  XX XXXX X XXX XXX XXX XXXX X XX\",\n            \"X XXX   X  XX XXX XXX XXXX XXXXX \",\n            \" X X  XX XX  XX  XX  XX  XX XXXXX\",\n            \"   X    XXX  XX  XX  XX  X       \",\n            \"X  X  XX XXX   X   X   X    X X  \",\n            \"  X X     X  X   X   X    X     X\",\n            \"X X   XX XXXXX XXX XXX XX  XX X  \",\n            \" X  XX   XX X   X   X   X  XXXXX \",\n            \"XX XXXX  XX XXX XXX XXX XXXX X XX\",\n            \"    XX X X XX XXX XXX XXXX XXXXX \",\n            \"XX XX XXXX   XX  XX  XX XXXXXXXXX\",\n            \"        X X  XX  XX  XXXX   X    \",\n            \"XXXXXXX  X X   X   X   XX X X X  \",\n            \"X     X X    X   X   X  X   X   X\",\n            \"X XXX X    XXX XXX XXX XXXXXX X  \",\n            \"X XXX X  X  X   X   X  X   X XX  \",\n            \"X XXX X X   XXX XXX XXXXX XXXX XX\",\n            \"X     X X  XX XXX XXX X  XXX XX  \",\n            \"XXXXXXX X X  XX  XX  XX  X XXXXXX\"\n        };\n        private static readonly string[] Modules2 = {\n            \"XXXXXXX  X  XX  XX  XX  X XXXXXXX\",\n            \"X     X   XXX XXX XXX XXX X     X\",\n            \"X XXX X XXX XXX XXX XXX X X XXX X\",\n            \"X XXX X  XXX XXX XXX XXX  X XXX X\",\n            \"X XXX X   X   X   X   X   X XXX X\",\n            \"X     X  X   X   X   X    X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XXX XXX XXX XXX X        \",\n            \"XXX XXXXX XX  XX  XX  XX XX   X  \",\n            \"  X    X  XX  XX  XX  XX   X X X \",\n            \"  X XXX XX   X   X   X   X XXXXX \",\n            \"   X X     X   X   X   X XXX X XX\",\n            \" X XX XX    X   X   X   XX  XXXX \",\n            \"  X  X XXX XXX XXX XXX XXX  X X  \",\n            \" XX   X XXXXX XXX XXX XXX X     X\",\n            \"XXX XX XXX  XXX XXX XXX X   X X  \",\n            \"     XX   XX  XX  XX  XX  XXX X X\",\n            \" X   X XX XX  XX  XX  XX   X X X \",\n            \"XX   XX   X  X   X   X   X XXXXX \",\n            \" XXXXX X XXX   X   X   X XXX X XX\",\n            \"XXXX XX   X X   X   X   XX  XXXX \",\n            \"   XX  X  XXXX XXX XXX XXX  X X  \",\n            \"X   X XX  XXX XXX XXX XXX X     X\",\n            \" X XX       XXX XXX XXX X   X X  \",\n            \"X   XXX X  X  XX  XX  XXXXXXX X X\",\n            \"        XXXX  XX  XX  X X   XX X \",\n            \"XXXXXXX X    X   X   X  X X XXXX \",\n            \"X     X XX X   X   X   XX   XX XX\",\n            \"X XXX X XX  X   X   X   XXXXXXXX \",\n            \"X XXX X    XXX XXX XXX   X    XX \",\n            \"X XXX X XX XX XXX XXX X XXX X   X\",\n            \"X     X XX  XXX XXX XXXX  X   XX \",\n            \"XXXXXXX XXXX  XX  XX  XX    X X X\"\n        };\n        private static readonly string[] Modules3 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X XXXXX X XXX X\",\n            \"X XXX X XXX X X XXX X\",\n            \"X XXX X  XXX  X XXX X\",\n            \"X     X  X XX X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"                     \",\n            \"   XX XX    X    XX  \",\n            \"XX   X XX  XX  XXX XX\",\n            \"XX   XXXX   XXXX X  X\",\n            \" X XX   XXXX   XX  X \",\n            \"X XX  X X     XXXXXXX\",\n            \"        XX   X    XXX\",\n            \"XXXXXXX XXX  XX  XX X\",\n            \"X     X  XXX XX   X  \",\n            \"X XXX X XX X  X X XX \",\n            \"X XXX X XX  X  XX    \",\n            \"X XXX X  X XX  XXX XX\",\n            \"X     X      X X X XX\",\n            \"XXXXXXX   XXX XXX XX \"\n        };\n        private static readonly string[] Modules4 = {\n            \"XXXXXXX  XXX  XX     XX X XXXXXXX\",\n            \"X     X  XXXX  XX X XX    X     X\",\n            \"X XXX X X     XX     XX X X XXX X\",\n            \"X XXX X XX X   X  X  X  X X XXX X\",\n            \"X XXX X X  XXXXXXX  X X   X XXX X\",\n            \"X     X XX   XX  X X  XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X  XXX  XXXXX  X         \",\n            \"X XXXXX  XX   X    X XXXX XXXXX  \",\n            \" X X X  XXX  X XXXX X    X X X X \",\n            \"  XX  XXX XXXXX  X X  XXX        \",\n            \"X    X    XXXX  XXXXX  X X X X X \",\n            \"XXX  XXX X    X X  XXXXX   X  X  \",\n            \"X    X  X   X  X  X  X  XX  XX X \",\n            \"   X  XXX  X   XX X XX   XXXX    \",\n            \" XXXXX XX  X X X     XX X X XX X \",\n            \"X  X  X  XXXXX XX X XX   XXX  X  \",\n            \"XX X   X XXX  XX     XX X   X X  \",\n            \"XXX XXXX  X XXXXX X XX   XXXXXXXX\",\n            \" X X X    XXX XX     XX X X X X X\",\n            \"  X X X X XX   X  X  X  XXX  XXXX\",\n            \"X XXXX X       XXX  X X    X  X  \",\n            \"X    XX  XXX     X X  XXX    XXXX\",\n            \"X  X X X X XX X XXXXX  X X X  X X\",\n            \"X  XXXXX XX XXX    X XXXXXXXXXXXX\",\n            \"        X XXXX XXXX X   X   XX X \",\n            \"XXXXXXX   XXX X  X X  X X X X    \",\n            \"X     X X  XXXX XXXXX  XX   XX X \",\n            \"X XXX X XX    X X  XXXXXXXXXX X  \",\n            \"X XXX X XX   XXX  X  X       X   \",\n            \"X XXX X XXXXXXXXX X XX X X X     \",\n            \"X     X  X  X XX     XXXX    X   \",\n            \"XXXXXXX X  XX XXX X XX  XX X  X  \"\n        };\n        private static readonly string[] Modules5 = {\n            \"XXXXXXX    X    X   X   X XXXXXXX\",\n            \"X     X XXX  X XXX XXX XX X     X\",\n            \"X XXX X  XX     X   X   X X XXX X\",\n            \"X XXX X  X  XX X X X X X  X XXX X\",\n            \"X XXX X XXXXXX   X   X    X XXX X\",\n            \"X     X  X XX X   X   X   X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"                X   X   X        \",\n            \"X X X X        XX  XX  XX   X  X \",\n            \"X  X   XXXXXX  XX  XX  XX  X  X  \",\n            \"    X XX X XXX XXX XXX XX XXX   X\",\n            \" X     X  X     X   X   X  X  X  \",\n            \"XX XXXXXX X    X   X   X  X X X X\",\n            \" X     XX  X X X X X X X    X X  \",\n            \"  X X XX XXX  X   X   X  X      X\",\n            \"X XXX   X   X  X XXX XXX XX X X  \",\n            \"X X X X X  XXXX   X   X  X  X X X\",\n            \"   X X   XX XXXX XXX XXX X  XX X \",\n            \"XX X XXXXX  XX    X   X  X   XXX \",\n            \"X  X   X  X  XXX XXX XXX XX XX XX\",\n            \"   X  X  X X  X X X X X XX XXXXX \",\n            \" XXXX      XXX XX XXX XXXX X X X \",\n            \"X XXXXX X  X  XXXX XXX XX XXXXXX \",\n            \" X X     X   XX X   X   X  X X XX\",\n            \"X X  XXXX   XX XX  XX  XXXXXXXXX \",\n            \"        X X    XX  XX  XX   X X  \",\n            \"XXXXXXX  X XX  XXX XXX  X X X   X\",\n            \"X     X       X X   X   X   X X  \",\n            \"X XXX X X X    X   X   XXXXXX X X\",\n            \"X XXX X  X XX XX X X X XXX    XX \",\n            \"X XXX X X  XXX    X   XX XX X   X\",\n            \"X     X  X X XXX XXX XX  X    XX \",\n            \"XXXXXXX XXXXX     X   X XXX X X X\"\n        };\n        private static readonly string[] Modules6 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X XXXXX X XXX X\",\n            \"X XXX X XXX X X XXX X\",\n            \"X XXX X  XXX  X XXX X\",\n            \"X     X  X XX X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"                     \",\n            \"   XX XX    X    XX  \",\n            \"XX   X XX  XX  XXX XX\",\n            \"XX   XXXX   XXXX X  X\",\n            \" X XX   XXXX   XX  X \",\n            \"X XX  X X     XXXXXXX\",\n            \"        XX   X    XXX\",\n            \"XXXXXXX XXX  XX  XX X\",\n            \"X     X  XXX XX   X  \",\n            \"X XXX X XX X  X X XX \",\n            \"X XXX X XX  X  XX    \",\n            \"X XXX X  X XX  XXX XX\",\n            \"X     X      X X X XX\",\n            \"XXXXXXX   XXX XXX XX \"\n        };\n        private static readonly string[] Modules7 = {\n            \"XXXXXXX  X X   X   XX X X XXXXXXX\",\n            \"X     X  XXX XX X XX      X     X\",\n            \"X XXX X XX   XXX XX  X X  X XXX X\",\n            \"X XXX X  XXX XX  X   XXX  X XXX X\",\n            \"X XXX X X XXX XXXX X XX   X XXX X\",\n            \"X     X X  X     X  XXXXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X     X   XX X X        \",\n            \" X  X X XX  XX  X   X XXXX XX X  \",\n            \"  XX X XXX XXX   XXX X    X  X  X\",\n            \" XXXXXX XX   XXX  XX        XXX  \",\n            \"XXXXXX XXXXXX X X  XX X XX XX XX \",\n            \"X     X  XXXX  X      XX XX   XXX\",\n            \"  X  X  XX X   XX XXX   X XXXX  X\",\n            \"X   X X  XXX    X   XXXXXXXX XX  \",\n            \"XXXX X X X  XX X     X X  X   XX \",\n            \"X XX  XX X  X  X  XX          XXX\",\n            \"   XXX  XX XXXXXXX XX X XXXXX XXX\",\n            \"X X XXX XX XXX      XXXXXXXX   XX\",\n            \"X XX   X  XXXXX   X  X X  X  X  X\",\n            \"XX   XXX X X X XXX XX   X  X XX  \",\n            \"X   X  XXXXX  X XX X XX  XX   XXX\",\n            \"  X  XXX X X XXX   X        X  XX\",\n            \"  XXXX  XXXX  X  XXXX X XX XXX  X\",\n            \"XX XX X X   XX X  X X XXXXXXXXX  \",\n            \"        XXXXXXXXXX X X  X   XX  X\",\n            \"XXXXXXX  XX   X XXXX   XX X XXX  \",\n            \"X     X  X X  XXXX XX X X   X XX \",\n            \"X XXX X XX   XX XXX   XXXXXXX XXX\",\n            \"X XXX X  X   X  XX XX    XXX X XX\",\n            \"X XXX X   X    X XX XXX XX XXXX  \",\n            \"X     X X X   XXXXX  X      X X  \",\n            \"XXXXXXX      X  XXXX    X X   XXX\"\n        };\n        private static readonly string[] Modules8 = {\n            \"XXXXXXX XXXX X XX   X   X XXXXXXX\",\n            \"X     X X X XX XXX XXX XX X     X\",\n            \"X XXX X X  XXX      X   X X XXX X\",\n            \"X XXX X XX X  X XX X X X  X XXX X\",\n            \"X XXX X X  XXXXX X   X    X XXX X\",\n            \"X     X  X  X XX  X   X   X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XXX  X XX   X   X        \",\n            \" XX X XX XX X      XX  XX X XXXXX\",\n            \"X      X     XXX   XX  XX  X  X  \",\n            \"XX  X X    XXX   X XXX XX XXX   X\",\n            \"X XX X  XX XXXX     X   X  X  X  \",\n            \"XX  X XX X XXX XX  X   X  X X X X\",\n            \"X  X        X X XX X X X    X X  \",\n            \"  XXXXX X X X XXXXX   X  X      X\",\n            \"X XXXX   XX X  XX  X XXX XX X X  \",\n            \"XXXXX X  XX XX XX X   X  X  X X X\",\n            \"X X X        X  X XX XXX X  XX X \",\n            \"   XX X      XXX XX   X  X   XXX \",\n            \"XXXXX      XX X X XX XXX XX XX XX\",\n            \"X   XXX  XXX   X X  X X XX XXXXX \",\n            \"  XXXX X  X X  XX XXX XXXX X X X \",\n            \"X  X  XXX   XX   XXXXX XX XXXXXX \",\n            \" XXX X XXX X XX XXX X   X  X X XX\",\n            \"X  X  XXX X X  XX XXX  XXXXXXXXX \",\n            \"        X X  X  X XXX  XX   X X  \",\n            \"XXXXXXX X XXX  XX  XXX  X X X   X\",\n            \"X     X  XXX XXX X  X   X   X X  \",\n            \"X XXX X XXX   X  XXX   XXXXXX X X\",\n            \"X XXX X    XXXXXX XX X XXX    XX \",\n            \"X XXX X XXXXX X       XX XX X   X\",\n            \"X     X X    XXX XXX XX  X    XX \",\n            \"XXXXXXX   X      XX   X XXX X X X\"\n        };\n        private static readonly string[] Modules9 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X XXXXX X XXX X\",\n            \"X XXX X XXX X X XXX X\",\n            \"X XXX X  XXX  X XXX X\",\n            \"X     X  X XX X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"                     \",\n            \"   XX XX    X    XX  \",\n            \"XX   X XX  XX  XXX XX\",\n            \"XX   XXXX   XXXX X  X\",\n            \" X XX   XXXX   XX  X \",\n            \"X XX  X X     XXXXXXX\",\n            \"        XX   X    XXX\",\n            \"XXXXXXX XXX  XX  XX X\",\n            \"X     X  XXX XX   X  \",\n            \"X XXX X XX X  X X XX \",\n            \"X XXX X XX  X  XX    \",\n            \"X XXX X  X XX  XXX XX\",\n            \"X     X      X X X XX\",\n            \"XXXXXXX   XXX XXX XX \"\n        };\n        private static readonly string[] Modules10 = {\n            \"XXXXXXX  XXX X XXXX X     XXXXXXX\",\n            \"X     X XXX  X  X X X  XX X     X\",\n            \"X XXX X   XXX  X X  XX  X X XXX X\",\n            \"X XXX X  X      X  X XX   X XXX X\",\n            \"X XXX X  XX   XXXX XXXX   X XXX X\",\n            \"X     X XX X XX    XXXXXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXX XXXXXXX X X        \",\n            \"    XXXX X X X X XXXX XX  XX   X \",\n            \"X  XX  XXX   XXX XXX    X X  X  X\",\n            \"XX X XXX   XX XXXX  XXXXXXX XXX  \",\n            \"XX   X  X X     XX   X X  XXX XX \",\n            \"  XX  X X XXXXX  XXXX   X  X  XXX\",\n            \" X XXX  XXX   XXXX XX X  XX   XXX\",\n            \"XXX  XX XX  X  XX    XX     X  XX\",\n            \"     X X   XX  XX XXXX  XX XXX  X\",\n            \"X  XXXX XXXXXX X XXXX  X XX  XX  \",\n            \"X X X     XXXX XX X XXX X XXX XXX\",\n            \"XX   XXX  XX XX  X X   XXXXX   XX\",\n            \"XX   X   X  XX XXXX   XX  X  X  X\",\n            \"   X  XXX X    X   XX X    X XX  \",\n            \"XX XXX  X  XX XX X X    XXX  X  X\",\n            \"  X   X XX X        XXXXXXX XXX  \",\n            \"    X  X X XX   X XXXX X  XXX XX \",\n            \"XX X  X  X  X     XXX   XXXXX XXX\",\n            \"        X  XXX X     XX X   X XXX\",\n            \"XXXXXXX X X XXX  X     XX X X  XX\",\n            \"X     X XX XXX XXXX X X X   XX  X\",\n            \"X XXX X X XX   X    X XXXXXXXXX  \",\n            \"X XXX X  X XXXXX X X X       X XX\",\n            \"X XXX X    X XX   X XX  X    XX  \",\n            \"X     X  X XXX  XXXXX X    X  X  \",\n            \"XXXXXXX  XX   X X XX XX X XXX XXX\"\n        };\n        private static readonly string[] Modules11 = {\n            \"XXXXXXX XX X   X XXXX X   XXXXXXX\",\n            \"X     X   XXXXXXXX   X    X     X\",\n            \"X XXX X  XX   X   X    X  X XXX X\",\n            \"X XXX X XXX  X       X    X XXX X\",\n            \"X XXX X  X   XXX X  XX    X XXX X\",\n            \"X     X     XX X XXX  X   X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"           XXXXX XX X   X        \",\n            \"  X XXX XXXX   XXXX X  X X   X  X\",\n            \"  X XX X   XXX     XXX X   X  X  \",\n            \" XX   XXXX      X X   X  X XX   X\",\n            \"X   XX XX    X   X X XXX XXX  X  \",\n            \" XXXX XXX  XX X XXX X X XX XX X X\",\n            \"XXX X     XXX   X XX XXXXX X X X \",\n            \" X X  X    X  X XXX X XXX XXXXXX \",\n            \" X  XX    XXXX X  X XXX X  X X XX\",\n            \"XX X XXXXX XX  XXXX X XX  X XXXX \",\n            \"   XXX  XXX  XX XX    XX    XX X \",\n            \" XXX  XXXXX XX X  XXXX   X   XXX \",\n            \"X   XX X XX X  X XXX   X XX XX XX\",\n            \" X XX X X    X XX   X    X XXXXX \",\n            \" XX X    X        XXXX X X X  X  \",\n            \"X  X XX     X XX XX   X  X XX   X\",\n            \" X       XXXXX    X XXXX XXX  X  \",\n            \"X  XX XX XX XX  X X X X XXXXX X X\",\n            \"        XX   XX  XX X XXX   XX X \",\n            \"XXXXXXX  XXX X X  X XX  X X XXXX \",\n            \"X     X XXXXX  X XXXX   X   XX XX\",\n            \"X XXX X X  X X XX  XX  XXXXXXXXX \",\n            \"X XXX X      X    XXX  XX XX  XX \",\n            \"X XXX X XX  XX X X     X  XX    X\",\n            \"X     X  XXXX    XX X    X XX XX \",\n            \"XXXXXXX  X   XX   X  X  XXXX  X X\"\n        };\n        private static readonly string[] Modules12 = {\n            \"XXXXXXX   XX  XXXXXXX\",\n            \"X     X X   X X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   XX  X XXX X\",\n            \"X XXX X  X  X X XXX X\",\n            \"X     X X   X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        XXXX         \",\n            \"    XXXX      XX   X \",\n            \" XXX   XX   X  X X XX\",\n            \"  X  XX  X XX XXXXX  \",\n            \"X  XXX X XX  X  X X  \",\n            \" X X  XX XX X     X X\",\n            \"        X  XX     X X\",\n            \"XXXXXXX XX  X X     X\",\n            \"X     X X  X  XX X   \",\n            \"X XXX X XX     XXXXXX\",\n            \"X XXX X   XXX  X X XX\",\n            \"X XXX X  XX    XXXX  \",\n            \"X     X  X XX   X X X\",\n            \"XXXXXXX  XX XXX   XXX\"\n        };\n        private static readonly string[] Modules13 = {\n            \"XXXXXXX  X  XX  XX  XX  X XXXXXXX\",\n            \"X     X   XXX XXX XXX XXX X     X\",\n            \"X XXX X XXX XXX XXX XXX X X XXX X\",\n            \"X XXX X  XXX XXX XXX XXX  X XXX X\",\n            \"X XXX X   X   X   X   X   X XXX X\",\n            \"X     X  X   X   X   X    X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XXX XXX XXX XXX X        \",\n            \"XXX XXXXX XX  XX  XX  XX XX   X  \",\n            \" XXXX     XX  XX  XX  XX   X X X \",\n            \"   X XXX X   X   X   X   X XXXXX \",\n            \" X     X   X   X   X   X XXX X XX\",\n            \" XXX  X     X   X   X   XX  XXXX \",\n            \" XX     XX XXX XXX XXX XXX  X X  \",\n            \" X   XX XXXXX XXX XXX XXX X     X\",\n            \" XXX      X XXX XXX XXX X   X X  \",\n            \"X   XXXX X X  XX  XX  XX  XXX X X\",\n            \" XXXX    XXX  XX  XX  XX   X X X \",\n            \"X XXX XXX X  X   X   X   X XXXXX \",\n            \"    XX  XXXX   X   X   X XXX X XX\",\n            \" X X  XXX X X   X   X   XX  XXXX \",\n            \"  X  X  X  XXX XXX XXX XXX  X XX \",\n            \"X  XXXX X XXX XXX XXX XXX X     X\",\n            \" X  X  XXX  XXX XXX XXX X   X XX \",\n            \"X XXXXX  XXX  XX  XX  XXXXXXX XXX\",\n            \"        X XX  XX  XX  X X   XX   \",\n            \"XXXXXXX XX   X   X   X  X X XXX  \",\n            \"X     X X XX   X   X   XX   XX X \",\n            \"X XXX X XX  X   X   X   XXXXXXX X\",\n            \"X XXX X   XXXX XXX XXX   X    XX \",\n            \"X XXX X XXXXX XXX XXX X XXX X   X\",\n            \"X     X X X XXX XXX XXXX  X   XXX\",\n            \"XXXXXXX XX X  XX  XX  XX    X X X\"\n        };\n        private static readonly string[] Modules14 = {\n            \"XXXXXXX X  XX  XX  XX  XX XXXXXXX\",\n            \"X     X XXX XXX XXX XXX X X     X\",\n            \"X XXX X   XXX XXX XXX XXX X XXX X\",\n            \"X XXX X   X   X   X   X   X XXX X\",\n            \"X XXX X XXXX XXX XXX XXX  X XXX X\",\n            \"X     X X  X   X   X   X  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXX XXX XXX XXX        \",\n            \"XXX  XX XXX  XX  XX  XX  XXXX  XX\",\n            \"  X XX X XX  XX  XX  XX  X       \",\n            \" X    X    X   X   X   X    X X  \",\n            \"   X X   X   X   X   X    X     X\",\n            \"  X  XXX X XXX XXX XXX XX  XX X  \",\n            \"  XX X XX   X   X   X   X  XXXXX \",\n            \"   X  XXX X XXX XXX XXX XXXX X XX\",\n            \"  X  X X XXXX XXX XXX XXXX XXXXX \",\n            \"XX XX X      XX  XX  XX  XX XXXXX\",\n            \"  X XX X  X  XX  XX  XX  X       \",\n            \"XXX XXX XXXX   X   X   X    X X  \",\n            \" X XX  XX X  X   X   X    X     X\",\n            \"     XX XXXXXX XXX XXX XX  XX X  \",\n            \" XXX   XXX  X   X   X   X  XXXX  \",\n            \"XX  X XXXXX XXX XXX XXX XXXX X XX\",\n            \"   XXX  X  XX XXX XXX XXXX XXXX  \",\n            \"XXX X XX  X  XX  XX  XX XXXXXXX X\",\n            \"        XXX  XX  XX  XXXX   X  X \",\n            \"XXXXXXX    X   X   X   XX X X XX \",\n            \"X     X XXX  X   X   X  X   X    \",\n            \"X XXX X    XXX XXX XXX XXXXXX XXX\",\n            \"X XXX X  XX X   X   X  X   X XX  \",\n            \"X XXX X X X XXX XXX XXXXX XXXX XX\",\n            \"X     X XXXXX XXX XXX X  XXX XX X\",\n            \"XXXXXXX X    XX  XX  XX  X XXXXXX\"\n        };\n        private static readonly string[] Modules15 = {\n            \"XXXXXXX   XX  XXXXXXX\",\n            \"X     X X   X X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   XX  X XXX X\",\n            \"X XXX X  X  X X XXX X\",\n            \"X     X X   X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        XXXX         \",\n            \"    XXXX      XX   X \",\n            \" XXX   XX   X  X X XX\",\n            \"  X  XX  X XX XXXXX  \",\n            \"X  XXX X XX  X  X X  \",\n            \" X X  XX XX X     X X\",\n            \"        X  XX     X X\",\n            \"XXXXXXX XX  X X     X\",\n            \"X     X X  X  XX X   \",\n            \"X XXX X XX     XXXXXX\",\n            \"X XXX X   XXX  X X XX\",\n            \"X XXX X  XX    XXXX  \",\n            \"X     X  X XX   X X X\",\n            \"XXXXXXX  XX XXX   XXX\"\n        };\n        private static readonly string[] Modules16 = {\n            \"XXXXXXX  XXX  XX     XX X XXXXXXX\",\n            \"X     X  XXXX  XX X XX    X     X\",\n            \"X XXX X X     XX     XX X X XXX X\",\n            \"X XXX X XX     X  X  X  X X XXX X\",\n            \"X XXX X X  XXXXXXX  X X   X XXX X\",\n            \"X     X X X  XX  X X  XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXXX  XXXXX  X         \",\n            \"X XXXXX   X   X    X XXXX XXXXX  \",\n            \"   X    XX   X XXXX X    X X X X \",\n            \"   X  XXX X  XX  X X  XXX        \",\n            \"X  X X XX X XX  XXXXX  X X X X X \",\n            \"XX   XX  X    X X  XXXXX   X  X  \",\n            \"X   XX  X   X  X  X  X  XX  XX   \",\n            \"   XX XXX  X  XXX X XX   XXXX    \",\n            \"XXXXX  XX  X  XX     XX X X XX   \",\n            \" X XX X X  XXXXXX X XX   XXX  XX \",\n            \"XXXX   X X X   X     XX X   X X  \",\n            \"XX XXXX X XX XXXX X XX   XXXXXXXX\",\n            \" X X X XX X X XX     XX X X X X X\",\n            \"  X X XXX XX   X  X  X  XXX  XXXX\",\n            \"X XX X X     X XXX  X X    X  XX \",\n            \"X   XXX  XXX     X X  XXX    XX X\",\n            \"X  XXX X X XXXX XXXXX  X X X  X  \",\n            \"X   X XXXXX XX     X XXXXXXXXXX  \",\n            \"        X XX X XXXX X   X   XX X \",\n            \"XXXXXXX   XX  X  X X  X X X X    \",\n            \"X     X X  XXXX XXXXX  XX   XX X \",\n            \"X XXX X XX    X X  XXXXXXXXXX X  \",\n            \"X XXX X XX   XXX  X  X       X   \",\n            \"X XXX X X XXXX XX X XX X X X     \",\n            \"X     X     X  X     XXXX    X  X\",\n            \"XXXXXXX X XXXXXXX X XX  XX X  X  \"\n        };\n        private static readonly string[] Modules17 = {\n            \"XXXXXXX XX   X XXX XXX XX XXXXXXX\",\n            \"X     X   XX    X   X   X X     X\",\n            \"X XXX X X XX X XXX XXX XX X XXX X\",\n            \"X XXX X     X             X XXX X\",\n            \"X XXX X   X X  X   X   X  X XXX X\",\n            \"X     X XXX XXXX XXX XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XXX X XXX XXX XX        \",\n            \"X X   XX   X X  XX  XX  X  X  X X\",\n            \"X       X   XX  XX  XX  XX   XXX \",\n            \" XXXXXX    X    X   X   XXX XX XX\",\n            \"     X XXXX  X XXX XXX XXX   XXX \",\n            \"X X X XXXXXX X   X   X   XXXXXXXX\",\n            \"   XXX  XX               X XXXX  \",\n            \" XXX XX   X  X X XXX XXX   X X XX\",\n            \" XX X  XXX XX X   X   X   XXXXX  \",\n            \"  XX XXX  X X  X XXX XXX   XXXX X\",\n            \" XX    X   XX     X   X    XX    \",\n            \"X XX  XX       X XXX XXX   X  X  \",\n            \"XX   X XXXX   X   X   X   XXX   X\",\n            \" X   XX      XXXXXXXXXXXX   X X  \",\n            \"  X  X X X  XX  XXX XXX X      X \",\n            \"XXX   XXXX   XX X   X   XXX X XX \",\n            \"    XX X   X XXXXX XXX XXX       \",\n            \"XXX  XX  X XX X XX  XX  XXXXX XXX\",\n            \"        XXXXXX  XX  XX  X   XXXX \",\n            \"XXXXXXX X    X  X   X  XX X XX XX\",\n            \"X     X  X X XXXXX XXX XX   XXXX \",\n            \"X XXX X  XXX X   X   X  XXXXXXXXX\",\n            \"X XXX X     XXX         X  X XX  \",\n            \"X XXX X X   X XX XXX XX   XXXX XX\",\n            \"X     X  X        X   XX   X XX X\",\n            \"XXXXXXX X   X  X XXX XXXX XXXXXXX\"\n        };\n        private static readonly string[] Modules18 = {\n            \"XXXXXXX   XX  XXXXXXX\",\n            \"X     X X   X X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   XX  X XXX X\",\n            \"X XXX X  X  X X XXX X\",\n            \"X     X X   X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        XXXX         \",\n            \"    XXXX      XX   X \",\n            \" XXX   XX   X  X X XX\",\n            \"  X  XX  X XX XXXXX  \",\n            \"X  XXX X XX  X  X X  \",\n            \" X X  XX XX X     X X\",\n            \"        X  XX     X X\",\n            \"XXXXXXX XX  X X     X\",\n            \"X     X X  X  XX X   \",\n            \"X XXX X XX     XXXXXX\",\n            \"X XXX X   XXX  X X XX\",\n            \"X XXX X  XX    XXXX  \",\n            \"X     X  X XX   X X X\",\n            \"XXXXXXX  XX XXX   XXX\"\n        };\n        private static readonly string[] Modules19 = {\n            \"XXXXXXX X  X XXXX    XX X XXXXXXX\",\n            \"X     X   XX    X X XX    X     X\",\n            \"X XXX X  XXX XX X    XX X X XXX X\",\n            \"X XXX X  X XXXX X X  X  X X XXX X\",\n            \"X XXX X XXXXXX  XX  X X   X XXX X\",\n            \"X     X XXXX X X X X  XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XXXX  XXXXXX  X         \",\n            \" XXXXXXX X    XX   X XXXX  XX   X\",\n            \"  XX X XX  X   X XX X    X X X X \",\n            \"XX    XX XX XXX XX X  XXX        \",\n            \" XX    XXX    XXXXXXX  X X X X X \",\n            \"XXXX  X X X XXX    XXXXX   X  X  \",\n            \"XX XXX X   X  X XXX  X  XX  XX   \",\n            \"X   X X   X XXX     XX   XXXX    \",\n            \"XXXX   X X X  XXX    XX X X XX   \",\n            \"X   XXX X    XX  XX XX   XXX  XX \",\n            \"  XXXX         X XX  XX X   X X  \",\n            \"      XXXXX XX  XXX XX   XXXXXXXX\",\n            \"  XXXX X     XXXXX   XX X X X X X\",\n            \"X XX XXXX     X XX   X  XXX  XXXX\",\n            \"XXXXX     XX   XXX  X X    X  XX \",\n            \"X X X XX  X X  XXXXX  XXX    XX X\",\n            \"X XXXX  XXX XX  X XXX  X X X  X  \",\n            \"X XX XXX  X XX    XX XXXXXXXXXX  \",\n            \"        X X X   XXX X   X   XX X \",\n            \"XXXXXXX XX    X    X  X X X X    \",\n            \"X     X XXXX  X   XXX  XX   XX X \",\n            \"X XXX X X  X    XXXXXXXXXXXXX X  \",\n            \"X XXX X X    XXXXX   X       X   \",\n            \"X XXX X X XXX XXX X XX X X X     \",\n            \"X     X X  XX  X  X  XXXX    X  X\",\n            \"XXXXXXX   X  XXX  X XX  XX X  X  \"\n        };\n        private static readonly string[] Modules20 = {\n            \"XXXXXXX   X    X X XXX XX XXXXXXX\",\n            \"X     X  XXXX  XX   X   X X     X\",\n            \"X XXX X  X       X XXX XX X XXX X\",\n            \"X XXX X X  X XXXX         X XXX X\",\n            \"X XXX X  X  X X    X   X  X XXX X\",\n            \"X     X X XXXX   XXX XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XX    XX XXX XX        \",\n            \" XX   X  XXX X XXX  XX  X XX X   \",\n            \"X X  X XXX XX    X  XX  XX   XXX \",\n            \"X X XXX XX XX       X   XXX XX XX\",\n            \"XXXX   XX   X X XX XXX XXX   XXX \",\n            \"X  XXXXX   XX   XX   X   XXXXXXXX\",\n            \" X  XX X X XX XXXX       X XXXX  \",\n            \"XXX  XXXX  XX   XX X XXX   X X XX\",\n            \" XX    X   XX X X X   X   XXXXX  \",\n            \"XXX   XX  XX    X XX XXX   XXXX X\",\n            \"X X XX   X  X    X    X    XX    \",\n            \" XX XXX  X XX X   XX XXX   X  X  \",\n            \"X X XX X X  XXX XXX   X   XXX   X\",\n            \"XX XX X   XX X     XXXXXX   X X  \",\n            \" XX X    XXXX   XXX XXX X      X \",\n            \"XX   XX X  XXXXX  X X   XXX X XX \",\n            \"  X XX  X X  X XX  XXX XXX       \",\n            \"XX XX X X  XX X XXX XX  XXXXX XXX\",\n            \"        XXX    XXX  XX  X   XXXX \",\n            \"XXXXXXX  XXX X  XX  X  XX X XX XX\",\n            \"X     X   XXX XX   XXX XX   XXXX \",\n            \"X XXX X   X  XX   X  X  XXXXXXXXX\",\n            \"X XXX X  X  XXX XXX     X  X XX  \",\n            \"X XXX X X   XX X XXX XX   XXXX XX\",\n            \"X     X XX X          XX   X XX X\",\n            \"XXXXXXX    X   XXXXX XXXX XXXXXXX\"\n        };\n        private static readonly string[] Modules21 = {\n            \"XXXXXXX   XX  XXXXXXX\",\n            \"X     X X   X X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   XX  X XXX X\",\n            \"X XXX X  X  X X XXX X\",\n            \"X     X X   X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        XXXX         \",\n            \"    XXXX      XX   X \",\n            \" XXX   XX   X  X X XX\",\n            \"  X  XX  X XX XXXXX  \",\n            \"X  XXX X XX  X  X X  \",\n            \" X X  XX XX X     X X\",\n            \"        X  XX     X X\",\n            \"XXXXXXX XX  X X     X\",\n            \"X     X X  X  XX X   \",\n            \"X XXX X XX     XXXXXX\",\n            \"X XXX X   XXX  X X XX\",\n            \"X XXX X  XX    XXXX  \",\n            \"X     X  X XX   X X X\",\n            \"XXXXXXX  XX XXX   XXX\"\n        };\n        private static readonly string[] Modules22 = {\n            \"XXXXXXX    XXXXXX    XXX  XXXXXXX\",\n            \"X     X  XXXXX    XXX  XX X     X\",\n            \"X XXX X X XX X XX X XX X  X XXX X\",\n            \"X XXX X X   X X XXX X XXX X XXX X\",\n            \"X XXX X   XX XX X   X XX  X XXX X\",\n            \"X     X  XX     XX   X  X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X   X       X X         \",\n            \"   XX XX  XX XX XXXX X X     XX  \",\n            \"X       XXX   XXXXX   X XXX XX XX\",\n            \" XX XXXXX XX   X XX  X X X   X  X\",\n            \" XXX X   XX X  XXXX    XX X X  X \",\n            \"  X XXX XX  XXXXX XXXXXXX   XXXXX\",\n            \" X XXX  X X   XXX  XX X  XX   X X\",\n            \"  X   XXX XX  XXXX X XXXXX  XXXXX\",\n            \"X XX   XX    X  X  X   X XX X X X\",\n            \"XX  X XXX X X X  X  XX    XX  X X\",\n            \"XX   X XX X X   XXXXXX XXX X  X  \",\n            \"  X  XX X XXX    XX X  X   X XX  \",\n            \"  XXX  XX X   XXX   XX  XX XX XX \",\n            \"  X X XX X X  X X    X    X X X X\",\n            \"X  XXX XX XXXXXXXX    X X X XX XX\",\n            \"X   X X  XXXX X X X  X X X   X  X\",\n            \"X  X   X   X   XX  XX  XX X X  X \",\n            \"XX X XX   XXX  XXXXXXXXXXXXXXXXXX\",\n            \"        X  XXX X     XX X   X XXX\",\n            \"XXXXXXX X XX  X   XX    X X XXX X\",\n            \"X     X      XX X    XXXX   X X  \",\n            \"X XXX X XXX  X   X XXXX XXXXX XX \",\n            \"X XXX X XXX XX XX   XXXX XX X    \",\n            \"X XXX X   XXXXX  X X X   XX  X XX\",\n            \"X     X  X    XX       XXXX XX X \",\n            \"XXXXXXX  X  XX XX  XXX  X     XX \"\n        };\n        private static readonly string[] Modules23 = {\n            \"XXXXXXX    XXXXXX    XXX  XXXXXXX\",\n            \"X     X XXXX  X        X  X     X\",\n            \"X XXX X X X  XXXXXX  X    X XXX X\",\n            \"X XXX X X X      X     X  X XXX X\",\n            \"X XXX X X  X  X    XX  X  X XXX X\",\n            \"X     X XX XX     X  XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X  X X   XXXX XX        \",\n            \"  X  XXXX X  X  X XXXX   X XXXXX \",\n            \"  X X    X  X  X X  X    X   XXX \",\n            \"  X  XX X  X X XXXXX XXX    XX XX\",\n            \"XXXXX    X X   X      X   X  XXX \",\n            \"  X XXX XX  XXXXX XXXXXXX   XXXXX\",\n            \"X XXXX X  X XX XX X   X X      X \",\n            \"     XXX  X    XX  XXXX XXX X XX \",\n            \"   XX  X  X XXX   XXX XXXX       \",\n            \"X     X X   XXX XX XXXX  XXXX XXX\",\n            \" X  X  XX  X       XXXX  X XXX   \",\n            \"  X  XX X XXX    XX X  X   X XX  \",\n            \"XX XX     X XX XX XX X    XXX   X\",\n            \"    XXXXXX      XX  XX X    XXX  \",\n            \"  XX X X   X X X XX X        XXX \",\n            \"XX    XX X XXXX   XX XXX    XX XX\",\n            \"   XXX X  X X  X XXXX X   X  XXX \",\n            \"XX X XX   XXX  XXXXXXXXXXXXXXXXXX\",\n            \"        X  X  XX  XXXXX X   X    \",\n            \"XXXXXXX X X      XXXX  XX X X X  \",\n            \"X     X X X XX    X XX XX   X   X\",\n            \"X XXX X  X      XX  XX  XXXXX X  \",\n            \"X XXX X  X X X X XX XX  XXX  XX  \",\n            \"X XXX X X XXXXX  X X X   XX  X XX\",\n            \"X     X  X  XX X  XXX  X    XXX X\",\n            \"XXXXXXX  X XXXXXXX X X XX X  XXXX\"\n        };\n        private static readonly string[] Modules24 = {\n            \"XXXXXXX     X XXXXXXX\",\n            \"X     X  X X  X     X\",\n            \"X XXX X X XXX X XXX X\",\n            \"X XXX X X     X XXX X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X     X XXXX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X X          \",\n            \"X XXXXX  XXX  XXXXX  \",\n            \"   XX  XX   XX  XXX X\",\n            \"   X  X XXX XXX  XXX \",\n            \" XX  X X  XXXX X XX  \",\n            \"XX XXXX X   X XX    X\",\n            \"        X    XXXXX   \",\n            \"XXXXXXX  XX XXXX  XX \",\n            \"X     X X X XX X XXX \",\n            \"X XXX X XX XXXX X  XX\",\n            \"X XXX X X X    XXX   \",\n            \"X XXX X XXXXX XX  X  \",\n            \"X     X   X XX  XXX  \",\n            \"XXXXXXX XX X  X X  X \"\n        };\n        private static readonly string[] Modules25 = {\n            \"XXXXXXX X  XX  XX  XX  XX XXXXXXX\",\n            \"X     X XXX XXX XXX XXX X X     X\",\n            \"X XXX X   XXX XXX XXX XXX X XXX X\",\n            \"X XXX X   X   X   X   X   X XXX X\",\n            \"X XXX X XXXX XXX XXX XXX  X XXX X\",\n            \"X     X X  X   X   X   X  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXX XXX XXX XXX        \",\n            \"XXX  XX XXX  XX  XX  XX  XXXX  XX\",\n            \"  X XX XXXX  XX  XX  XX  X   XX X\",\n            \" X XXXXXX  X   X   X   X    X   X\",\n            \"  XXX  X X   X   X   X    X      \",\n            \"X XXX XXXX XXX XXX XXX XX  XXX   \",\n            \"X  XXX X X  X   X   X   X  XXXX X\",\n            \"X     X X X XXX XXX XXX XXXX XX X\",\n            \" XXX X  XX XX XXX XXX XXXX XX    \",\n            \"  X XXX X X  XX  XX  XX  XXXXX   \",\n            \"XXX XX X     XX  XX  XX  X      X\",\n            \"   X  XX X X   X   X   X    XXX X\",\n            \" XXX X   XX  X   X   X    X  X X \",\n            \"XXXX  XXX XXXX XXX XXX XX  X    X\",\n            \"  XX   X X  X   X   X   X    X  X\",\n            \"XX XX X   X XXX XXX XXX XXXXX   X\",\n            \"  XXX      XX XXX XXX XXXX X X   \",\n            \"XX XX XXXXX  XX  XX  XX XXXXXX X \",\n            \"        X    XX  XX  XXXX   XXX  \",\n            \"XXXXXXX  X X   X   X   XX X X   X\",\n            \"X     X XX   X   X   X  X   XX X \",\n            \"X XXX X  XXXXX XXX XXX XXXXXX    \",\n            \"X XXX X   X X   X   X  X    X    \",\n            \"X XXX X XXX XXX XXX XXXXX X XX XX\",\n            \"X     X X  XX XXX XXX X  XX  X   \",\n            \"XXXXXXX X    XX  XX  XX  X   X  X\"\n        };\n        private static readonly string[] Modules26 = {\n            \"XXXXXXX   X XXXX X    X X XXXXXXX\",\n            \"X     X X X  XXXXX  X X   X     X\",\n            \"X XXX X     XX X XX     X X XXX X\",\n            \"X XXX X XXX X XX     XX X X XXX X\",\n            \"X XXX X  X     XX X XX    X XXX X\",\n            \"X     X XX XX     XX X XX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XXX  X X  XXXXX         \",\n            \"XXXXX XXXX X    X XXXX X X X X X \",\n            \"X XXXX XX X XXXX X    X XX X X  X\",\n            \"  XX  X   X  XXXXX  X X  XX  X X \",\n            \"X X X  X    XX X XX     X XX  X  \",\n            \"XX X XX  XX X XX     XX XXXX   XX\",\n            \"    XX X       XX X XX      XX  X\",\n            \"XXX XXXX   XX     XX X XX  XX XX \",\n            \"XXX  X  X  X  X X  XXXXX X  X X  \",\n            \" X    XX   X    X XXXX X   X   XX\",\n            \" XXXXX X X  XXXX X    X XX X  X X\",\n            \" XXXXXX XXX  XXXXX  X X  XX   XX \",\n            \"XXX  X    X XX X XX     X XX XXX \",\n            \"X  XXXX     X XX     XX XXXXXX X \",\n            \"X X    X       XX X XX     X XX X\",\n            \"X XX XXXX  XX     XX X XX  X X X \",\n            \"X X X    X X  X X  XXXXX X   XX  \",\n            \"X XX XX  X X    X XXXX XXXXXX   X\",\n            \"        XX  XXXX X    XXX   XX   \",\n            \"XXXXXXX XXX  XXXXX  X X X X XX X \",\n            \"X     X     XX X XX     X   XXXX \",\n            \"X XXX X XX  X XX     XX XXXXXX XX\",\n            \"X XXX X XXX    XX X XX XX  XX X  \",\n            \"X XXX X XX XX     XX X  XX       \",\n            \"X     X XX X  X X  XXXX XXXX XX  \",\n            \"XXXXXXX X XX    X XXXX X  X X  X \"\n        };\n        private static readonly string[] Modules27 = {\n            \"XXXXXXX     X XXXXXXX\",\n            \"X     X  X X  X     X\",\n            \"X XXX X X XXX X XXX X\",\n            \"X XXX X X     X XXX X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X     X XXXX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X X          \",\n            \"X XXXXX  XXX  XXXXX  \",\n            \"   XX  XX   XX  XXX X\",\n            \"   X  X XXX XXX  XXX \",\n            \" XX  X X  XXXX X XX  \",\n            \"XX XXXX X   X XX    X\",\n            \"        X    XXXXX   \",\n            \"XXXXXXX  XX XXXX  XX \",\n            \"X     X X X XX X XXX \",\n            \"X XXX X XX XXXX X  XX\",\n            \"X XXX X X X    XXX   \",\n            \"X XXX X XXXXX XX  X  \",\n            \"X     X   X XX  XXX  \",\n            \"XXXXXXX XX X  X X  X \"\n        };\n        private static readonly string[] Modules28 = {\n            \"XXXXXXX XX XXX XXX XXXXXX XXXXXXX\",\n            \"X     X X X  XX X XX      X     X\",\n            \"X XXX X X XX XXXX  X X  X X XXX X\",\n            \"X XXX X   XX  X X X X X X X XXX X\",\n            \"X XXX X XX  XX XX     XX  X XXX X\",\n            \"X     X    X XXXX  X X  X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"          XXX XXXXX  X X         \",\n            \"X  XXXXXX   XXX X    X XXX  X XXX\",\n            \" X  XX     XXXX  XX  XXXXX XXXXXX\",\n            \"  XX XX   XXXX     XX XXX XX  X X\",\n            \"X XXX  XXX X X X  XXXXXX X  X XX \",\n            \"X X X XXXXX  X   X   X X XXXXX XX\",\n            \" XXX X X    XXX   XXX   X XXXX X \",\n            \"X  X  X X XX  XX  XXXXX    X     \",\n            \"X      X  XX    X   X   XX X X  X\",\n            \"  X   X X X  XXXXXX  X XXXXXXXX  \",\n            \"X   X         X XX        X X    \",\n            \"X     XX    X  X XXX XXXX  XXXX  \",\n            \"     X XXXXXXX     XX X  X XXXXX \",\n            \" XX   XXX  X X XX XX XXXX X X   X\",\n            \"X    X XXXX   X  X   X    X X X X\",\n            \"X X   X X X        XX X XX    XXX\",\n            \"X   XX X    XXXX  XXXXX  XX XXXX \",\n            \"XXXX  X X XX XX XX  XX  XXXXX X  \",\n            \"        XX  X X XXXX X  X   XX  X\",\n            \"XXXXXXX X   XXX XX     XX X X XX \",\n            \"X     X XXX  X X XXX XXXX   XXXXX\",\n            \"X XXX X XX X    XX X XXXXXXXXX  X\",\n            \"X XXX X X XX  X XXX   XX X       \",\n            \"X XXX X  X  XXXX XXX XXXX  XXX XX\",\n            \"X     X  XX XX     XX XXXXXXXX XX\",\n            \"XXXXXXX X  XXX X  XXXXX X     X  \"\n        };\n        private static readonly string[] Modules29 = {\n            \"XXXXXXX  XX X XX     X  X XXXXXXX\",\n            \"X     X  XX    XX X XX    X     X\",\n            \"X XXX X X  X  XX     XX X X XXX X\",\n            \"X XXX X XX X   X  X  X  X X XXX X\",\n            \"X XXX X XX XXXXXXX  X X   X XXX X\",\n            \"X     X XXX  XX  X X  XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XXXXXX  XXXXX  X         \",\n            \"X XXXXX   X X X    X XXXX XXXXX  \",\n            \" XXX X  XXXXXX XXXX X  XXXX  XXX \",\n            \"   X  X X X XXX  X X  X X  X XX  \",\n            \"X X  X XX X  X  XXXXX    X X XXX \",\n            \"XX   XX  X X  X X  XXXX    X     \",\n            \"     X  XX  X  X  X  X  XX  XX  X\",\n            \"XX XX XXX  X XXXX X XX   X XX  X \",\n            \"X XXX  XXX X  XX     XX XXX XX   \",\n            \"     XX   XX X XX X XX  XX XX X X\",\n            \"X  X X   XXX  XX     XXX  XX X   \",\n            \"XXX XXX X XXXXXXX X XX  XXXX  XXX\",\n            \" XXX X    XXX XX     XX   X XXX X\",\n            \"  X X X X XX   X  X  X XXXX    XX\",\n            \"X XXXX X       XXX  X X    X  X  \",\n            \"X    XX   XX  X  X X  XXXXX  XXX \",\n            \"X  X   X XXXXXX XXXXX  X XXX  XX \",\n            \"X  XXXXX           X XXXXXXXXXXXX\",\n            \"        X   XX XXXX X   X   XX X \",\n            \"XXXXXXX   X X X  X X  XXX X X X  \",\n            \"X     X X    XX XXXXX  XX   XXXX \",\n            \"X XXX X XX    X X  XXXX XXXXX    \",\n            \"X XXX X XX    XX  X  X   X XXX   \",\n            \"X XXX X XXXXX  XX X XX  XXXX     \",\n            \"X     X   X X XX     XXXX   XX   \",\n            \"XXXXXXX X XXX  XX X XX  XX  X XX \"\n        };\n        private static readonly string[] Modules30 = {\n            \"XXXXXXX X    XX X XXXXXXX\",\n            \"X     X XX X X  X X     X\",\n            \"X XXX X X    X    X XXX X\",\n            \"X XXX X  X  XXX   X XXX X\",\n            \"X XXX X   XX XX X X XXX X\",\n            \"X     X X     X X X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        X   X X X        \",\n            \"  XXX X XXX XX XXXXX  XXX\",\n            \"X XXXX XX X XXX XX X  X  \",\n            \"X    XXX    X X   XXXX XX\",\n            \"  X      X X X  X  XX  XX\",\n            \"XXX X XX X  X XX XX XXXXX\",\n            \"XX X X   X     XX  X  X  \",\n            \"X X   X  XXXX X  X XXX XX\",\n            \"X XX   XX  X XX X XX    X\",\n            \"X   X XX XXX X  XXXXXXX  \",\n            \"        X XX   XX   X X X\",\n            \"XXXXXXX   XX XXXX X X XXX\",\n            \"X     X  XXX XXXX   XX XX\",\n            \"X XXX X XX XXXXXXXXXXXXX \",\n            \"X XXX X X X X    XXXX X X\",\n            \"X XXX X XXXX X X   X X  X\",\n            \"X     X  X  X  XXXX  X  X\",\n            \"XXXXXXX  X  XXXX  X  XXXX\"\n        };\n        private static readonly string[] Modules31 = {\n            \"XXXXXXX X          XX   X X   XXXXXXX\",\n            \"X     X   X  XXXXX  XX XX   X X     X\",\n            \"X XXX X XXXX XX  XX   XXX XX  X XXX X\",\n            \"X XXX X X   XX    X X  XXX  X X XXX X\",\n            \"X XXX X  X   XXX  X X   XX XX X XXX X\",\n            \"X     X X  X   XX  X X  XXXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X  XXXX XX   X X  XXX        \",\n            \" X X XXXXX  X  XX  X  XXX   XXXX XX X\",\n            \"X      XX  XXX  XX XX XXXXXXX  X  XX \",\n            \"X   X X   X XX  X X  XXXX  X X  X XX \",\n            \" X XX  XX XX XXX   XX  XXX  X  XX X X\",\n            \" X XXXXXXX XXX XXX XX  XXX XXXXXX XX \",\n            \"X   XX X  X  X   XX   X X  X XX  X   \",\n            \"XXX  XXXX  XX    XX  X XX  XXXXX  XXX\",\n            \"X XXXX XX X   XX X XX  XXXX X  X     \",\n            \" X   XX XXX    X X    XXXXXXX XXX X X\",\n            \"  XX   XX   X  X  X  X  X  X X    X  \",\n            \"XXXX  XXXX   XXXX   X XXXX   X     XX\",\n            \" X  XX   X   XXXXXX  X  XX XXXXXX    \",\n            \"X X   X  X      XXXXX X X X X   X X  \",\n            \" XX X  X X XX   X   X  XX    X   X   \",\n            \"X X XXX XXX   X XX XXXXXX    X XXX  X\",\n            \"   XX  XX XX     X XX  XX XXX X  X X \",\n            \"X  X  X  X XX XXXXXX   X   X X  XXX X\",\n            \"   XX  XX  XXX XXX  XXXX X XXX XXXX  \",\n            \"X  XX XX X X    X X   XX XX     XXXXX\",\n            \" X      XX XXXXX     XXX XXX  X XX   \",\n            \"XXXX  X  XXXXX X  XXX   X   XXXXXX  X\",\n            \"        X X    X  XXXXXXX   X   X    \",\n            \"XXXXXXX XX XXX  XXXX  X XX  X X XXXX \",\n            \"X     X XXX X XXX    X   X XX   X XXX\",\n            \"X XXX X  X X XXXXXX   XX  X XXXXX    \",\n            \"X XXX X XXXXXXX  XXXX XX X   X X X X \",\n            \"X XXX X  X  X X  XX XXX  XX      X  X\",\n            \"X     X XXXX XXXX        X X XXX X   \",\n            \"XXXXXXX  XX    X  XXX     XX   X XXXX\"\n        };\n        private static readonly string[] Modules32 = {\n            \"XXXXXXX XXX   XXX  X XX X  XX XXXXXXX\",\n            \"X     X    XXXXX  X XXX       X     X\",\n            \"X XXX X      XXXX X  X  X X X X XXX X\",\n            \"X XXX X    X     X XX       X X XXX X\",\n            \"X XXX X X         XX X  X X X X XXX X\",\n            \"X     X X  XXXXXX X XX     X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"          X  XX   X  XX X XX         \",\n            \" XXXXXXX  XXX    X X X  X  X   XX   X\",\n            \" X   X  X       X X X X   XXXXX   X X\",\n            \"XXXXX XXXXX X XXX XXX XXXXX  X X XXX \",\n            \"X XXX     XXX  X  X    X  X X X   X  \",\n            \" XX  XXX  XXXXX  X X XXXXXX  XXX X X \",\n            \"       X   XXX  X      X   XX    XXXX\",\n            \"XXXXX XXXXX X  XX X   X X     XX X  X\",\n            \" XXXX   X XXXXXX  X X     X XXX    XX\",\n            \"  XX XXX  X  XX  X XXXXXX   X X  XX X\",\n            \"XX X         XXX   XXX   XXX XXXX X X\",\n            \"XX  X XX  X  X       X XXXXXXX  XXXXX\",\n            \"XX       XXXXXXX     XXX X X   XX XXX\",\n            \"X XXXXX   XX   X  XXXX XX XX X  XX X \",\n            \"X X XX   X   X  XXXXX    X    XX X XX\",\n            \"XX XXXXX  X  X XXX    XXXXXX X      X\",\n            \"XXXXX     XXXXX  XX    X X XX  XXX XX\",\n            \"X X X X X XXX    XXXXXXX  X XX      X\",\n            \"X  X X XX X  X X  X XX  XX X  XXXX XX\",\n            \"X    XXX  X    X XX  X   XXXXX  X   X\",\n            \"X    X XXX    XX XXX XX X XX X XXX XX\",\n            \"X     XXX XXX X   X  X  XXXXXXXXX   X\",\n            \"        X X XXXX     XXX XX X   X   X\",\n            \"XXXXXXX X XXXXXX XXXXX  XXXXX X X  X \",\n            \"X     X XX X  XX XX  XXXXX XX   X    \",\n            \"X XXX X X X  XX   X  X    XXXXXXXXXX \",\n            \"X XXX X XXX   X     X X X     X  X  X\",\n            \"X XXX X X   XX X XXX  X    X   XX   X\",\n            \"X     X XXXXX  XX XXX   X XX X  XX  X\",\n            \"XXXXXXX       X X XX XX     X  XX  XX\"\n        };\n        private static readonly string[] Modules33 = {\n            \"XXXXXXX X    XX X XXXXXXX\",\n            \"X     X XX X X  X X     X\",\n            \"X XXX X X    X    X XXX X\",\n            \"X XXX X  X  XXX   X XXX X\",\n            \"X XXX X   XX XX X X XXX X\",\n            \"X     X X     X X X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        X   X X X        \",\n            \"  XXX X XXX XX XXXXX  XXX\",\n            \"X XXXX XX X XXX XX X  X  \",\n            \"X    XXX    X X   XXXX XX\",\n            \"  X      X X X  X  XX  XX\",\n            \"XXX X XX X  X XX XX XXXXX\",\n            \"XX X X   X     XX  X  X  \",\n            \"X X   X  XXXX X  X XXX XX\",\n            \"X XX   XX  X XX X XX    X\",\n            \"X   X XX XXX X  XXXXXXX  \",\n            \"        X XX   XX   X X X\",\n            \"XXXXXXX   XX XXXX X X XXX\",\n            \"X     X  XXX XXXX   XX XX\",\n            \"X XXX X XX XXXXXXXXXXXXX \",\n            \"X XXX X X X X    XXXX X X\",\n            \"X XXX X XXXX X X   X X  X\",\n            \"X     X  X  X  XXXX  X  X\",\n            \"XXXXXXX  X  XXXX  X  XXXX\"\n        };\n        private static readonly string[] Modules34 = {\n            \"XXXXXXX  X X  XXX X X X  XX X XXXXXXX\",\n            \"X     X XXX   X  X XXXX  XXX  X     X\",\n            \"X XXX X  X  XX XXX  XX    X   X XXX X\",\n            \"X XXX X    X XXX  X   XX      X XXX X\",\n            \"X XXX X  X X  X XXX X X XX XX X XXX X\",\n            \"X     X XX    XX X XXXX XXX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X X XX  X   XX XX XXX        \",\n            \"    XXXX X  X      XXX X XX   XX   X \",\n            \"    X    X    X  XXX  XX X  XXXXXXX X\",\n            \" XX X X  XXXX X  XXX   XXXX X XX X  X\",\n            \"   XX  X X  XX X   XXX X  X  X     XX\",\n            \"XXXX XXX  X XXX  XX   X    X XX X  X \",\n            \"X   XX  XX   XX  X XX XX XX X  XX X  \",\n            \"XXX X XX XX      XX    XX   XX X XX  \",\n            \"   XX  XXX X   X    X  X  X       XX \",\n            \"  X  XX   XX X   XXX X  XXXXX XXX XX \",\n            \"     X             X  XXX    XX  X  X\",\n            \" X    XX XXXXX   X XXX  XXXX  X XXX  \",\n            \" X   X X XX   X XXXXXXXXXX XXXXXXXX  \",\n            \"  X XXX   XX  X X XX  X XX   X X  XX \",\n            \"   X          XXX XX   X  XX  X X  XX\",\n            \" X XX XX XXXXX    XXXX  XXXXX X   XX \",\n            \" X X X X XX   X    XXXXXXX X XXXXXX  \",\n            \"  XX  X XXXX  X XXXX  XXXX XXX XXX  X\",\n            \"X   X  X      X XXXX      X   X    XX\",\n            \"      X X X  X X  X XXX  XXX  X X XX \",\n            \"  X X  XX XX  XX     XX X XXX XXXXX  \",\n            \"XX XX X X XX XX XXX XXXXX   XXXXXX  X\",\n            \"        X  X XX XX  X      XX   XX   \",\n            \"XXXXXXX X XXXX X  XX     XXXX X X X  \",\n            \"X     X X X  XXX    XX  XX XX   X XXX\",\n            \"X XXX X X XX    XXX   XX X  XXXXX X X\",\n            \"X XXX X  X    XX   X X  XXXX  XXX   X\",\n            \"X XXX X  XXX XXXXXX X  XX  XXXXXX XX \",\n            \"X     X     X  X  XXXX X  XXX X XXXX \",\n            \"XXXXXXX  X X X XX X   X  XXXX      XX\"\n        };\n        private static readonly string[] Modules35 = {\n            \"XXXXXXX X  X X  X XX XX    XX XXXXXXX\",\n            \"X     X X X  X X X    X       X     X\",\n            \"X XXX X XXXX X X  X XXXXX X X X XXX X\",\n            \"X XXX X   X XXXXXX      X   X X XXX X\",\n            \"X XXX X    X X XXXXX XX X X X X XXX X\",\n            \"X     X X    X   X    X X  X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X  X X   XX XXX   XX         \",\n            \"  XXX X X   XXXX       X   X XXX  XXX\",\n            \" XXXX  XX    X X XX XXXX  XXXXX   X X\",\n            \"XXX  XX  X    X X  X  X  XX  X X XXX \",\n            \"X  X X X XXX X XXXXXXXX X X X X   X  \",\n            \"X    XX XXX X  X XXXXXX  XX  XXX X X \",\n            \"XXXXXX X       X X   XXX   XX    XX  \",\n            \" XX  XXX X XX   X     X       XX X XX\",\n            \"X  X X XXXX X  XXXX X X X X XXX     X\",\n            \" X X XXXXXXX  XX XX X   X   X X  XXX \",\n            \" XXX X XXX   XXX    XXXXXXXX XXXX   X\",\n            \"XX  XXXX X   X  X XXXXXX XXXXX  XX XX\",\n            \"XX  X  X X XX X    XXX   X X   XXX XX\",\n            \" X XXXXXXXXX X XX X XXX X XX X  XXXX \",\n            \" XX    XXX   X  X X XX X X    XX X XX\",\n            \"XX X XXX X   X  XX XXXXX XXX X      X\",\n            \"XX XX  X X XX X XXXXXX   X XX  XXX XX\",\n            \" X    XX  XX X XXXX XXXXX X XX      X\",\n            \"XXXXX   XX   X XXXX XX   X X  XXXX XX\",\n            \"X   XXX X  XXX XXX  XX XXXXXXX  X   X\",\n            \"X X  X XX   X XXXXX  X X  XX X XXX XX\",\n            \"X X X XX XXX   XXXXX  XXXXXXXXXXX   X\",\n            \"        XX X   XXX X X   XX X   X    \",\n            \"XXXXXXX      X XXX X  XXXXXXX X X  XX\",\n            \"X     X    XXXXXXXX XXXX X XX   X    \",\n            \"X XXX X XXXX XXXXXXXXXXX  XXXXXXXXX X\",\n            \"X XXX X X    X      X   X     X  X  X\",\n            \"X XXX X XX  XXXX    X X    X   XX   X\",\n            \"X     X   XX   XXX XXXX X XX X  XX  X\",\n            \"XXXXXXX    X  X X XXXXX     X  XXX XX\"\n        };\n        private static readonly string[] Modules36 = {\n            \"XXXXXXX XX      XXXXX XXXXXXX\",\n            \"X     X       X  XX   X     X\",\n            \"X XXX X X  XXXX   XXX X XXX X\",\n            \"X XXX X XX X XX  X  X X XXX X\",\n            \"X XXX X XXXX X XXXXX  X XXX X\",\n            \"X     X  X  X   X  X  X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"         X X  X  X XX        \",\n            \"XXXX  X X     X XXX  X  XXX X\",\n            \"X X XX   X   XX    XXXXXX  XX\",\n            \"XXXX XXX      X X   XXXXX X  \",\n            \"  X X  X   XXXX   XX X     XX\",\n            \"XXXXX X  X X X X XX    X XX  \",\n            \" XX XX XXXXX  XXXX XXXX   X X\",\n            \" XX   XXX X XX  X  X XX X  XX\",\n            \"  X  X XX   X  X  X   X XX X \",\n            \" X XX X XXXX X X  XX X XXX  X\",\n            \"  X X       XX X X  X  X     \",\n            \"X  XX XX   XX XX X  X X XX   \",\n            \"     X  XXX X X XXXX  XX XX  \",\n            \" X    X X XXX X  XX XXXXXXXXX\",\n            \"        X   XX  X   X   X X  \",\n            \"XXXXXXX    XXX    XXX X XXXX \",\n            \"X     X      XX X   X   X  X \",\n            \"X XXX X   X XXXX X  XXXXX XXX\",\n            \"X XXX X X XXX XX X     XX X X\",\n            \"X XXX X XXXX  X X X       X X\",\n            \"X     X X  X  X     XX X X X \",\n            \"XXXXXXX X     X X XXX  XX  X \"\n        };\n        private static readonly string[] Modules37 = {\n            \"XXXXXXX  XXX X XXXX X XX X  XX XX XXXXXXX\",\n            \"X     X XXXXXXX  X X  X XXXX X  X X     X\",\n            \"X XXX X   XX X  XXXXX  XXX  XXXXX X XXX X\",\n            \"X XXX X XX    X X  XXXXX  XXX  XX X XXX X\",\n            \"X XXX X  X XX  X  X     X  X XX   X XXX X\",\n            \"X     X XXX    XX X XX    XXX X X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         X  X XX     XX X XX  X          \",\n            \"XXXXX XXX XX   XX X X    XXXXXX  X X X X \",\n            \" X X X X   X  XX     X X  X X XXXXXXXX X \",\n            \" XX X X XXX    XX X XX     XX X   X XX  X\",\n            \"X         XX  XX     XX X X X  XXXX X  XX\",\n            \"   X  XXXXX X  X  X  X  X     X   XXX X X\",\n            \"   XXX  XX   XXXXX  XXX   XXX   XX  X  XX\",\n            \"X   XXXX XXXXXX  X X X XXX    XX X XXX   \",\n            \"XXX  X X  XX X  XXXXXX X    X XXXXX X  X \",\n            \"XX XX XXX  XX X    X  XXXX   X X     X XX\",\n            \"XXX  X  XX   X XXXX X  X X  XXXXX X X    \",\n            \"X X XXX  XXXXXX  X X  X XXXX X   X X   X \",\n            \"  X XX   XXX X  XXXXX    X X XX      X   \",\n            \"      X X XX  X X  XXXXX  XXX   XX  XXXX \",\n            \" X  X   X X X  X  X  X  X  X XX    X XXXX\",\n            \"X X  XXXX X    XX X XXX    XXXX XX    X  \",\n            \"X XXXX X    X XX     X  X  X  X  XXX XXX \",\n            \"  X X XX       XX X X X XXXX X           \",\n            \"X X  X  X X X XX     X X  X    X XXXX  X \",\n            \"  XXX XX       XX X XX  X  XX X   XX X  X\",\n            \"XX     X  X X XX     XX X X    XXXX XX XX\",\n            \" X   XXXX   X  X  X  X  X  X  XX  XXXXX X\",\n            \"X   XX XXXX  XXXXX  X X   XXX   XX  X    \",\n            \"X XX XXXXXXXXXX  X X  XXX X    X  XXXX   \",\n            \"X  X   X X X X  XXXXXXXX    X  XX X X   X\",\n            \"X  X XXX   XX X    X  XXXXX XX XXXXXXX XX\",\n            \"        XXX  X XXXX X  XXX  XXX X   XX   \",\n            \"XXXXXXX X  XXXX  X X  X  XXX X XX X XX X \",\n            \"X     X  XXX X  XXXXX    X X XXXX   XX   \",\n            \"X XXX X X XX  X X  XXXX   XXX   XXXXX XX \",\n            \"X XXX X XXX X  X  X  X  XX X XXXX    XXXX\",\n            \"X XXX X XX     XX X X X    XX  X  XXX XX \",\n            \"X     X XXX X XX     XX X  X   X X XXXXX \",\n            \"XXXXXXX X      XX X  X  XXXXXX           \"\n        };\n        private static readonly string[] Modules38 = {\n            \"XXXXXXX XXXX X XXXX X XX X  XX XX XXXXXXX\",\n            \"X     X   X  X X  XXXXXX X    X   X     X\",\n            \"X XXX X XX XX  X X  XXXX   X X  X X XXX X\",\n            \"X XXX X XX    X X  XXXXX  XXX  XX X XXX X\",\n            \"X XXX X X     X  X  XX X  X     X X XXX X\",\n            \"X     X     XX     XX X XXX    XX X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"           X     XX X XX     X  X        \",\n            \"XXXX  X XX XXX     XXXX X X  X X X  XXX X\",\n            \" X X X X   X  XX     X X  X X XXXXXXXX X \",\n            \"XX XXXX   XXX X XX     XX X XX  XXXX XXXX\",\n            \" X XX  X X XXXX X XX     XXX  X X    X   \",\n            \"   X  XXXXX X  X  X  X  X     X   XXX X X\",\n            \"X X X      XXX  X X   XXX   XXX    X  X X\",\n            \" X X XX    X  XXXXX   XX   XX     XX   XX\",\n            \"XXX  X X  XX X  XXXXXX X    X XXXXX X  X \",\n            \" XX XXXX X     X XXXXXX  XXX  XXXX XXXX X\",\n            \"  XXXX XX X X    X XXXXXX  X X  XX   X XX\",\n            \"X X XXX  XXXXXX  X X  X XXXX X   X X   X \",\n            \"X  XX   X X XXXXX  X X XXXX     XX XXXXX \",\n            \"XX XX XXXX XXXXX  X X  XXXX   XXX X   X X\",\n            \" X  X   X X X  X  X  X  X  X XX    X XXXX\",\n            \"   X  XX XXXX X XX    XXX X X      XX  X \",\n            \" XX  X   XX  XX X XX  X  X  X  X   XX X X\",\n            \"  X X XX       XX X X X XXXX X           \",\n            \"   X     XXX     XX X   X  X XXXX X   X  \",\n            \"XXX   X  XX XX     XX X  X     X X XX  X \",\n            \"XX     X  X X XX     XX X X    XXXX XX XX\",\n            \"XXXX  XX X X  X  X  X  X  X  X XXXX  X XX\",\n            \" X X X  X   X X  XXXXX  XXX   XXX X  X XX\",\n            \"X XX XXXXXXXXXX  X X  XXX X    X  XXXX   \",\n            \"  X  X XX   XXXXX  X  X X XXXXXX XXX  XXX\",\n            \" X  XXX  XXX XXXX X  X X  XX XX XXXXX    \",\n            \"        XXX  X XXXX X  XXX  XXX X   XX   \",\n            \"XXXXXXX  X   X X  XXXXXXXX    XXX X XXX  \",\n            \"X     X    XX  X X  XXX X   XX  X   X  XX\",\n            \"X XXX X   XX  X X  XXXX   XXX   XXXXX XX \",\n            \"X XXX X X XX  X  X  X  X XX    X X XXX  X\",\n            \"X XXX X X X XX     XXX  XX    X  X X XX X\",\n            \"X     X XXX X XX     XX X  X   X X XXXXX \",\n            \"XXXXXXX XX XX X XX  X  X X  X X XX XX XX \"\n        };\n        private static readonly string[] Modules39 = {\n            \"XXXXXXX XXX  XX    XXXXX  XXXXXXX\",\n            \"X     X  X  X XX  X  X    X     X\",\n            \"X XXX X    XX XX   X XXX  X XXX X\",\n            \"X XXX X   XX   XX XX  XXX X XXX X\",\n            \"X XXX X X XX  X     XXXX  X XXX X\",\n            \"X     X X  XX  X   X  X X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X X X     XXXX          \",\n            \" XXXXXXX         X X  XXX  XX   X\",\n            \"X  X   XX    XXX XXXX  X  X     X\",\n            \" X  X X    X    XX      X     X  \",\n            \"XXX  X  XXXX XX  XX  X XX  XXXXXX\",\n            \" X X XX   XXX   X     X XX XX    \",\n            \"XX X   X XX XX  X X   XX XXX  X X\",\n            \" XX  XX X    X  X   X X X  XX XX \",\n            \"X X    X XXX XX  X XXX  XXXX XX  \",\n            \" XXXX XX X X  X X        X XX  X \",\n            \"XXX  X      XX   X X   X  X  XXXX\",\n            \"X     XX X X X    X  X  XX   XXX \",\n            \"XXXX     XX     X    XXXX     X  \",\n            \"   XXXX X X X  X  XX    XX  X    \",\n            \"XX  X    XX  XXXX XXXX XX X  X X \",\n            \"X X   XX X  X    X  XX    X  X X \",\n            \"X  XXX X  XX XX  XXXXX   XX  XXXX\",\n            \"X  XX XX  XX  XXX XXX X XXXXXX  X\",\n            \"        XXXXXX  X  XXX  X   X XXX\",\n            \"XXXXXXX X   X  X    XX XX X X XX \",\n            \"X     X XX    X X  XXX XX   XXXX \",\n            \"X XXX X X   XX X  XX  X XXXXXX XX\",\n            \"X XXX X XXX XXXXXX XXX  X   XXX X\",\n            \"X XXX X X X  X X XX   X X X      \",\n            \"X     X XXX  X   X  XX    X  XX  \",\n            \"XXXXXXX   X   X XX    XXX  X   X \"\n        };\n        private static readonly string[] Modules40 = {\n            \"XXXXXXX  XX X    XX X XX  XXXXXX    X XXXXXXX\",\n            \"X     X X    X XX X        X XX    X  X     X\",\n            \"X XXX X         X   X X XX  X X X  X  X XXX X\",\n            \"X XXX X  X   XXXX XXX  X XX X   XX XX X XXX X\",\n            \"X XXX X X   XX  X XXXXXXXX    X   XXX X XXX X\",\n            \"X     X   XX X X X XX   XX  X   X     X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X XX  X   XX   XX XX X  XXX         \",\n            \"X X X X  XXXX XXX XXXXXXX X X   XX  X   X  X \",\n            \"XXX  X      XXXX      XX   X  X  X  X      XX\",\n            \"  XXXXXX XX  X X XX X  X      X X    X  X XXX\",\n            \"X  X X XX XXX   X   X XXXX   X X X  X X    X \",\n            \"X XX  X  X XX XXXXX   XX XX XXXX  X   X X  XX\",\n            \"X XX    XXX XXXX  X XX   X   X XX  X     X   \",\n            \" X  X XX  XXX  XXX XXXX XXX XXXX   XX   XXX X\",\n            \" X   X X X   XX XXXX X    XX  X XX XXX X X   \",\n            \"XXX  XX   XX XX XX XXXX X  X   XXXX  XXX XX X\",\n            \"XX      X XXXXX  X X X X  XXXX  XX   X XX XX \",\n            \"    XXX  X X  XX  X XX X  XX   X XXX XXX   X \",\n            \"X   X    X X XX X   XX XXX    X   XX  XXX XXX\",\n            \" X  XXXXX X  XX X X XXXXXXX X   X   XXXXX XX \",\n            \"X XXX   XX  X X X   X   XX    X   XXX   XXX X\",\n            \"X  XX X XXXXX   XX XX X XXX X X X XXX X X XXX\",\n            \"X XXX   XX XX   XXX X   XXX XX X X  X   X  X \",\n            \"    XXXXX XXXX  XX XXXXXX  XXXXX  X XXXXX   X\",\n            \"    XX  XXX XXX XX  XXX X   XX XX   XXX  XX  \",\n            \"X X   XXXXX XX XX    X X X X XXX   X X  X XXX\",\n            \"X  X   XXXXXX X  XX XXX   XX  XX   X X X    X\",\n            \" XX XXXX  X  X  X  X X XX  X    X X  XXX     \",\n            \"X  XX   X   XX X   X X  X XXX X X  X      XX \",\n            \"X   X X  X XX X X X   XXX XX  XXX    XX X  X \",\n            \"X         X  XXXX XX   X X   X XX X XXXX  XXX\",\n            \"XXXX XXXXX  XX   X  X XXXXX X XXX   X X X XX \",\n            \"XXXXXX X  X       XXX  X X     XX X     XX   \",\n            \"    X XXX  XX  XX  XXX  XXX X   X XXXXX  XX X\",\n            \" XXXX  XXX X X X    XXX X XX X X X  X X XX   \",\n            \"X  XX X XX X  XX   XXXXXX  X XXX XX XXXXXXX X\",\n            \"        XXXX X   XX X   X XXXX XXX  X   X  XX\",\n            \"XXXXXXX   XX XXXX X X X X XX XXX XX X X XXX X\",\n            \"X     X  X X   XXX XX   X  XX X  X XX   XX XX\",\n            \"X XXX X X  X X  X   XXXXXXXXX   X  XXXXXX   X\",\n            \"X XXX X  XX XX X  X   XXX  XX X       X    XX\",\n            \"X XXX X XX  X XXXX  X XX   XX X XX  X   XXX X\",\n            \"X     X   X X   X  XXX   X   X XX X   X  X X \",\n            \"XXXXXXX X   X  XX XXX X XXX XXXXXX  X X X  XX\"\n        };\n        private static readonly string[] Modules41 = {\n            \"XXXXXXX X   X XXXXX  X X     XXXXX  X XXXXXXX\",\n            \"X     X XX    X X XXXX   XX  XXXXX X  X     X\",\n            \"X XXX X     XXX X XX  X   X X  X   X  X XXX X\",\n            \"X XXX X XX XX XXXX  X   X X XXXXXX XX X XXX X\",\n            \"X XXX X   XX X   X XXXXXXX  XX    XXX X XXX X\",\n            \"X     X  X   X  X  XX   XX X X  XX    X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  XXXX     X   X X X XXX XX         \",\n            \"X XX XXX XXX X XX   XXXXXX  X XX X    X  X XX\",\n            \"  X    X   X  XX XXX  X XX X X X X X X   XX X\",\n            \"X XX  XX X XXX XX   X X X   XX  X XXXX   X XX\",\n            \"X   X  XXX  X  X X  XX  XX XX  X  XXX XXXX X \",\n            \"X   X X X XXX    XX XX X X X XXXXX     X   X \",\n            \"XX     X  X X     XX      XX X   X X XXX X XX\",\n            \"X X X X X XX XXXXXX  XX     XX  X  X XX XX X \",\n            \"X        X XX X X    X XXXXX X XXX     X  XX \",\n            \" XX X X     XXX   XXXX X   XXXXXXX XXXXXX   X\",\n            \"XX XXX  XX  XXXXX  X  X   X     X XX X   XXX \",\n            \"  XX XX X XX    X X   XX    X  XX  X X  X  XX\",\n            \"XXXXX  XX  X   XX  X   XX XX  XXXXXX X  X X  \",\n            \"X X XXXXX X X   X  XXXXXX   X XX    XXXXX   X\",\n            \" XXXX   XX X XX XXXXX   X    X X  X X   X  XX\",\n            \"   XX X XX        XXX X XXX  X  X   X X XX XX\",\n            \"X X X   X X X  X  X X   XXXX   X  XXX   XX X \",\n            \"  XXXXXXXX XXXXX X XXXXXX X  XXXXX  XXXXX    \",\n            \" XXXXX X  X X  XXX X  X XXXXXX   X  X  X XXXX\",\n            \" X    X  XX   XXX XXXX XX XX X  X  XX X X    \",\n            \" X X X  XXX  XX    XXXXXXXXX X      X  X XXXX\",\n            \"XXX   XX   XXX   XXX XX    XXXX X  XXXXXXXX  \",\n            \"X    X  XXXXXX  XX X  XXX X  XX XXX    XXXXX \",\n            \"X XX  X X XXX  X  X XX XX   X XX XX  X X   XX\",\n            \"XXXX   XXXX     X X XX X  XX X   XX X     X  \",\n            \"   X XX  X    X  XXX  XX    X        X  X   X\",\n            \"  XXX     XXXX   X  X   X    XX X XXXX  X XX \",\n            \"    X XXX X    X XXXXXXX XX  XX X    XX X   X\",\n            \" XXXX  XX X  X  XX  X  XX X X  X  XXX XX     \",\n            \"X  XX X   XX    X  XXXXXX X XXXXX   XXXXXXX  \",\n            \"        X XX  XX XXXX   XX  XX      X   X    \",\n            \"XXXXXXX X XXX  XX  XX X XX X X  XXX X X XX X \",\n            \"X     X XX  XX XX X X   XX XXX X X  X   X X X\",\n            \"X XXX X   X XX   XX XXXXXXXX XX X X XXXXXXX X\",\n            \"X XXX X X  XXX  XXX  X  X    XX  XXX  XXXX XX\",\n            \"X XXX X X X X    X   X X  X   X   X X XX XX  \",\n            \"X     X  XX XXXXX         XX X   XX  X X X  X\",\n            \"XXXXXXX X    XXXX     X     XX   X   X  X X  \"\n        };\n        private static readonly string[] Modules42 = {\n            \"XXXXXXX XXX  XX    XXXXX  XXXXXXX\",\n            \"X     X  X  X XX  X  X    X     X\",\n            \"X XXX X    XX XX   X XXX  X XXX X\",\n            \"X XXX X   XX   XX XX  XXX X XXX X\",\n            \"X XXX X X XX  X     XXXX  X XXX X\",\n            \"X     X X  XX  X   X  X X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X X X     XXXX          \",\n            \" XXXXXXX         X X  XXX  XX   X\",\n            \"X  X   XX    XXX XXXX  X  X     X\",\n            \" X  X X    X    XX      X     X  \",\n            \"XXX  X  XXXX XX  XX  X XX  XXXXXX\",\n            \" X X XX   XXX   X     X XX XX    \",\n            \"XX X   X XX XX  X X   XX XXX  X X\",\n            \" XX  XX X    X  X   X X X  XX XX \",\n            \"X X    X XXX XX  X XXX  XXXX XX  \",\n            \" XXXX XX X X  X X        X XX  X \",\n            \"XXX  X      XX   X X   X  X  XXXX\",\n            \"X     XX X X X    X  X  XX   XXX \",\n            \"XXXX     XX     X    XXXX     X  \",\n            \"   XXXX X X X  X  XX    XX  X    \",\n            \"XX  X    XX  XXXX XXXX XX X  X X \",\n            \"X X   XX X  X    X  XX    X  X X \",\n            \"X  XXX X  XX XX  XXXXX   XX  XXXX\",\n            \"X  XX XX  XX  XXX XXX X XXXXXX  X\",\n            \"        XXXXXX  X  XXX  X   X XXX\",\n            \"XXXXXXX X   X  X    XX XX X X XX \",\n            \"X     X XX    X X  XXX XX   XXXX \",\n            \"X XXX X X   XX X  XX  X XXXXXX XX\",\n            \"X XXX X XXX XXXXXX XXX  X   XXX X\",\n            \"X XXX X X X  X X XX   X X X      \",\n            \"X     X XXX  X   X  XX    X  XX  \",\n            \"XXXXXXX   X   X XX    XXX  X   X \"\n        };\n        private static readonly string[] Modules43 = {\n            \"XXXXXXX X   X  X X XXX X   X XX     X XXXXXXX\",\n            \"X     X XX X    XXX   X X  XX   X  X  X     X\",\n            \"X XXX X   XX   XX XXXXX X    X X   X  X XXX X\",\n            \"X XXX X  XXXXXX    XXXXX XX XXX XX XX X XXX X\",\n            \"X XXX X     X  X XXXXXXXX    XXX XXXX X XXX X\",\n            \"X     X  X   XXX    X   XX   X        X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X  XXXXXXX X   XX  X X    X         \",\n            \" X    XXX X  X   X  XXXXX    XXXX    X     XX\",\n            \"X X XX XXX X X X   XX   XXX XXX   XXX XXXXX  \",\n            \" XXX  X X  X XXXX  X  XX  XX X XX   X X  X X \",\n            \" XXX X X X         XXXXXXXX XX X XX  X X  X X\",\n            \"X   X X  XX XXX      X X X  XX XXX X X XXXX X\",\n            \"XXXX   X  XXX X   XX XXX XX  X X XX XX X X  X\",\n            \" XXX  X X    X     XXXXX   X  X  X  X XX   X \",\n            \"   XXX XXX X X  XX X XXX  X   X  XX   X XX X \",\n            \" X X XXX  XXXXX X X X  XXX   XXX   X    X XX \",\n            \" XXXX  XXXXX   XX X    XX   X X  X XXX  X XX \",\n            \"XX   XX  X XXX  X X X  XX XXX X  X  X     X X\",\n            \"X XXX  XXXXXX   XXX   XX XX  X  X   XXXX  XXX\",\n            \"   XXXXXX X  X XXXXXXXXXX X X  X X XXXXXXXX X\",\n            \"XXX X   XXX X X X  XX   XX   X XXXX X   XXX X\",\n            \" X  X X X   X XXX XXX X X   X XX XX X X X XXX\",\n            \"X   X   X  XXX    XXX   X  X  X XX  X   XXX X\",\n            \" XX XXXXX X XX  XX XXXXXX  XXXX X X XXXXXX   \",\n            \"X  X     XXX X  X X X XX XXX XXXX   X X  X X \",\n            \"X XX XXX X X XX  X X X     X     XX XXX      \",\n            \"X   X   X XX  X  X    XX  X X X X X   X X XXX\",\n            \"X XXXXX XXX  XX XX X   X    X XXX  XX  XX    \",\n            \"X X XX   X    X   XX  XX X  XXX X  X X   XX X\",\n            \"   X  X XX     X  X X X  X        X  XXX  X X\",\n            \"   XX  XX XX X X   XX    XX X  X XX XX   XXXX\",\n            \"XXX XXXX XX XX X  XXXXXX XXX     XX  XXXXX XX\",\n            \" XXXXX     XX X  XX  XXX X XXXXXXX  X  XXX X \",\n            \"    X X X        X  X  X  XXXX   X  XXXX   X \",\n            \" XXXX   XXX   XX  X X X X X X X    X     X XX\",\n            \"X  XX X   X    X    XXXXXXXXX X   XXXXXXXXX  \",\n            \"        XX    XX  X X   X  XX X X   X   X XXX\",\n            \"XXXXXXX X X X X X XXX X X XX XXXX   X X XXXX \",\n            \"X     X    XXXX X  XX   X XX X     XX   X XX \",\n            \"X XXX X   X  X   X XXXXXX      X    XXXXXXXXX\",\n            \"X XXX X  XX XXXX XXXX     X XX   X X    XX  X\",\n            \"X XXX X  XX X  XX    XXX XXXXXXXXX  XXX XX XX\",\n            \"X     X X     XXXXXXX XXX  X  XXX XX X   X   \",\n            \"XXXXXXX  X X X    XXX  XX XX XXX XXX XXXX XX \"\n        };\n        private static readonly string[] Modules44 = {\n            \"XXXXXXX   XXXXXXX    XX  XXXX XXX   X XXXXXXX\",\n            \"X     X XX  X X X   X XX  XXXXX    X  X     X\",\n            \"X XXX X XX XXX      X    X XXXX  X X  X XXX X\",\n            \"X XXX X    XXX XX  X   X X X XX    XX X XXX X\",\n            \"X XXX X  X X  X    XXXXXX XX   XX XXX X XXX X\",\n            \"X     X  XX X XXX XXX   X   XXXX      X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X X X XX   X   XXX XX  X   X        \",\n            \" XXX XX  X  X  XXXXXXXXXXX XXX  XXX X     XX \",\n            \"X  X X X  XX XX X  X XX XX X XX XX XX    XX X\",\n            \"XX   XX  X  XX  XXXXXXX X     XX X X   X  XXX\",\n            \"X XXXX   XX XX  X X XX X  X  XX  X  X  XX  XX\",\n            \"XXX  XXXXX XX   XX XXXX   X      XX   XX  XX \",\n            \" X X X XX X      X XXXX XX    XXXXXX XXX  X  \",\n            \"X X X XXXXX X  XX X X  XXX  X  X  X  XX X X  \",\n            \"  X  X X  XX XXX X XX  X   XX X X      X X XX\",\n            \"XXX   XXXXX  X XXX   X   XXX   XXX  X XXXX XX\",\n            \"X XX    XX XXX X   X  XX X     X XXX         \",\n            \"X X X XXXXX X X  XXX  X XX X XXXXXXXXXX XXXX \",\n            \"   XXX X XX   X X   X X XX    X    X X X X X \",\n            \"XX  XXXXXX  X    X  XXXXXXXX  X   XXXXXXXX XX\",\n            \"XX XX   X   X  X   XX   XXXXXX X    X   XXX  \",\n            \"XXXXX X XX X    XX XX X X XXXX XX XXX X XX X \",\n            \" X  X   X XX    X   X   XX XX  XXXX X   XX XX\",\n            \"    XXXXX  XX X     XXXXXXXX  XX   XXXXXX  XX\",\n            \"  XX X  XXX XXX XX    X XX X   X   X      XXX\",\n            \" XX XXX   XXX XXXXX   X XX  X XX      XXX XX \",\n            \"X XX     X X   XXX  XX X   X  X  X     X  XX \",\n            \"    X X   XXXX XX XXXX  X XXXX X X    X XXX X\",\n            \" XX  X X XX XXX X      XX    X XX XXX   XX XX\",\n            \" XXXXXXX XXX XXXXXXX   X  X XX XX  X   XXXXX \",\n            \"X XXXX X  X XXXX XXX   XXX  XXXXXXXX XX    X \",\n            \"  XX XX         X   X  XX X X XX    X X  XX X\",\n            \" X   X  XXXXX  XXXX X  X XX  XXX  X X X  X XX\",\n            \"    X X  X XX XX  X  X  X   X X X  X X   XXXX\",\n            \" XXXX  XXX  XXXXX  XX    XX    X  XXXX  XXX X\",\n            \"X  XX XXX  X XXXXX XXXXXX  X XXXX   XXXXX XXX\",\n            \"        XX XX  X X  X   X XXXX     XX   XX X \",\n            \"XXXXXXX  X   XXX    X X XXX XX  XXX X X XX   \",\n            \"X     X XXXXXX X   XX   X   XX  XXXXX   X XXX\",\n            \"X XXX X  XXXXXXX  XXXXXXX XX XXXXX XXXXXX  X \",\n            \"X XXX X XX    XXXX  X X XXX  XXX XXXXX   XXXX\",\n            \"X XXX X XX XXXXX X XXX     X  X  XXXX        \",\n            \"X     X X  XX  XX  X  X   XX X X  X XXX   X X\",\n            \"XXXXXXX   XXX  XX   XXXX XX XX     XX X      \"\n        };\n        private static readonly string[] Modules45 = {\n            \"XXXXXXX    X  XX X X XX XX XX XXXXXXX\",\n            \"X     X X XX XX X XXX XX X  X X     X\",\n            \"X XXX X  X  XXX    X XXX  X   X XXX X\",\n            \"X XXX X  X  X X        XXXX X X XXX X\",\n            \"X XXX X  X X X    X  XX XX XX X XXX X\",\n            \"X     X XX XXX X    XXXXXX  X X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X       XX   X XX  XX        \",\n            \"    XXXX X X XXX XX  XX X  X  XX   X \",\n            \"XXX XX  X   X  X X   X  XXXXXX  XX   \",\n            \"  XXXXX X  X    X     XX X XXX X  X  \",\n            \"  X     X X XXXX  X X X X XXXX   XX  \",\n            \" XXXXXX X X  XXX      XX     XXX  XXX\",\n            \" X X X   XX     X X   X   XXXX XXX X \",\n            \"X XXX XX XX X X   X X XXX  XX XXXXX  \",\n            \"  XXXX     X    X  X         XX   XXX\",\n            \" X  XXX X XX  XXX X  X X  X   XX  X X\",\n            \"X XXXX  XX  XX    XX XX XXXXX   X  XX\",\n            \"X     XXX XX XXX       X X XXX XXX   \",\n            \" XX  X X  XXX  XX XXXX X     X X  X X\",\n            \"   X  X  XXX X   X   X X  X  XXX  X  \",\n            \" XX XX XX XXXX X   XXXX X XXX  XXXX  \",\n            \"XXXXXXX  XXX     XX   XX XXX XXX  X  \",\n            \"XXXX X   XX XX   XX X     XX XXX  XX \",\n            \" X XX X  X X        XX XX    XXX XX  \",\n            \"X X  X XXX X X XX   XXX   XX X  X  X \",\n            \"    X XXX  XX XX    XXX  X X X   XX  \",\n            \"  XXXX       XXX X  X   X XXX  XX XXX\",\n            \"XXX  XXXX X  XXXXX XXX XX XXXXXXX X  \",\n            \"        XX XX  XX X XX X XXXX   X X  \",\n            \"XXXXXXX X X X XXX  X  XX    X X XXX  \",\n            \"X     X X   XX    X   XXX   X   X XX \",\n            \"X XXX X X XX    X XX XX X   XXXXX X X\",\n            \"X XXX X  XX XXXXX X XX  XXXXXXX  XX  \",\n            \"X XXX X  X   XX X XXX XXX     XX   X \",\n            \"X     X      X    X  X  X  X X    XX \",\n            \"XXXXXXX  XX XX X XXX  X    X  XXXXXXX\"\n        };\n        private static readonly string[] Modules46 = {\n            \"XXXXXXX X  XXXXXXXXXXX X   XXXX XXX X   X XXXXXXX\",\n            \"X     X X   XXX  X   XX XX   X X   X XXXX X     X\",\n            \"X XXX X       XXX XX  X XX XXX X   X   XX X XXX X\",\n            \"X XXX X X  X XX  XX  XXX XXXX  XXXX  X X  X XXX X\",\n            \"X XXX X X   XXXXXX  X XXXXXXXXX  X  X     X XXX X\",\n            \"X     X XXXXX XX XXXXXX   XXXXX X X  XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"            XX     X  X   XX X  X  X XX X        \",\n            \"   X  X   X XXXXXXXXXXXXXXXX X X      X    XXX XX\",\n            \"X  XX  X XX  X X  XXX X X XXXX XX XXX X  X    XXX\",\n            \" X X  X    X X XX  X   X X XXX     X XX  XXXX XXX\",\n            \"    XX XX   X   X  XXX  X  XX     XX   X      XXX\",\n            \"XXXX  XXX X XX XX X      XX X       X    XXXX XX \",\n            \"   XX  XX  XXX   X   X XX    XX X    XX XX   XXXX\",\n            \"XX XX XXXX XX  XX   X X X X XX    XXX  XX X  XX X\",\n            \"X   XX     XX X     X X   XXX X XX   X    XXXX XX\",\n            \"  X  XX  XX   XXXXXX  XX XXX X X X  X X     XX XX\",\n            \"  X     X XX X XX       XXX   X  X X XX XXXX    X\",\n            \"X     XX X   X  XXXX    X XXXX X XX XXX   XXX XXX\",\n            \"X X XX XX   X  X   XX X XX  XXXX XX X X  X  X X X\",\n            \"  XXX X X   X X  X  XX  X XX   XX   XX XXXX     X\",\n            \" XXXXX X X XX XXXXX    XXX  XX X       X      X  \",\n            \"    XXXXXXX    XX  XX XXXXX X XXXXX XX XXXXXX XXX\",\n            \" X  X   XX X XXX      X   X  XXXXX XXX XX   XX XX\",\n            \"XX  X X XXX X   XXX X X X X  XXX X XX   X X X    \",\n            \"  X X   X X X XXXXX  XX   X XXX XXX  X XX   X XX \",\n            \"  XXXXXXX  XXX XXXX   XXXXXX X XX    XXXXXXXXXX  \",\n            \"  X X  XX X  XX X X  XXX  X   X  XXXXX X  X    XX\",\n            \"  XX  X X XXX  XXX X  X  XXX X XXX  XXX XX  XXXX \",\n            \"  X     X XX    X X  X  XX    X XX XX XX XXXX  X \",\n            \"  XXXXX  XXXX  X X XXXX X  X  X X       XXXXXX  X\",\n            \" XX  X  XXX XXXXX  XXXX  X    XX XX       X  XX  \",\n            \" X  XXXXXX  X XXX XX X    X  XX  XXXXX  X X   XXX\",\n            \"  XX   XXX X XX    X XX  X X  X  X   X X X  XX XX\",\n            \" X XX X X XXX    X    XX   XXXXXXX  X XX XXX X XX\",\n            \" XXX   X X X  XX XXX  XXXXX  X XXX   XX   X  X   \",\n            \" X X  XX XXXX X X     X X XXXXXX XXX XX XX  XXXXX\",\n            \"XX XX  X X   XXXXX     X    X   XXXXX  XXXXXX   X\",\n            \" X   XX  XXXX     X XXX XX   X XXXX  X X    X   X\",\n            \" XXX    XX  X    X XX   X X  XXX  XX  X XX  X X X\",\n            \"XXX   XXXXXX XXX XXXX XXXXX XX    XX X  XXXXX  X \",\n            \"        XX  XXXXXXXXX X   XXX  X  X X   X   XXXXX\",\n            \"XXXXXXX    XXX    X  XX X XXX  X  XX  X X X X XXX\",\n            \"X     X  XX  X X  XXXXX   XXX   XXXXX  XX   X X X\",\n            \"X XXX X  X X X X  XX XXXXXXX  XX    XXX XXXXX    \",\n            \"X XXX X XX XXXXX XX XXX X X X XX   X      XXXX XX\",\n            \"X XXX X  XX  X  X  XX  X  X X  XX XX X     XX   X\",\n            \"X     X   XXXXXX X  X     X   XX X  X X  XXX     \",\n            \"XXXXXXX      XX  XX XX  X  XX  XX XXXXX X X X  XX\"\n        };\n        private static readonly string[] Modules47 = {\n            \"XXXXXXX  XXXXX   XXX  XX  X  XX     X   X XXXXXXX\",\n            \"X     X  XX XX XXX  X   XXXXXX XXXXX XXXX X     X\",\n            \"X XXX X    XXXXXXX    XX   XX X     XX XX X XXX X\",\n            \"X XXX X     X X    X XX X XXXXX XXXXX  X  X XXX X\",\n            \"X XXX X X  X  XXX XXX XXXXXXX  X X X X    X XXX X\",\n            \"X     X    XX   XXXX  X   X  XX  X   XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XXX XXXXX  XXXX   X XX   XXX X X         \",\n            \"  XX  XXX XX  XXX   XXXXXXXX  X    XXXX  XX X    \",\n            \" X XXX   XXXX  X X  X XX XXXX X X X  XX   XX  X  \",\n            \"X  X XXX    X  XXXX     X  XX XX    X X     X X  \",\n            \"  XX X X XX X XX   X  X X X     XX X  X X   XX XX\",\n            \"XX  X XX X  XXX   X XXX  X X    XXX X XXXXXX X X \",\n            \"  X    X XXXXXXXXX  X XXX XXXXX  XX  X X X  X  XX\",\n            \"   XXXX XX   X XXXXXX XX XX X XX  X  X XXX X XXX \",\n            \" X  X  X     XX  XXXX XXXXXXXX XXX XX    X  XX   \",\n            \"XXX   XX XXXXXXXX     X X XX  X  X X XX  XXXXX   \",\n            \"   XX    X X XX     XXX XX XX X X XX X X XXXXXX X\",\n            \"X XXX XXX X  XXX XXXXXX X    X XX   XX XX XX X XX\",\n            \"X  X X X XX X X X  X X  XXXX XXXX   X  XXX   X  X\",\n            \"XXXXXXXXX  X XX   XXXX X XXX XX X  X   XX  X   X \",\n            \"X XXX    X   XXXX  X        X X    XXX X XXX  XXX\",\n            \"XX  XXXXXXXXXX XXXX X XXXXX XX  XXXX   XXXXXX X  \",\n            \" XXXX   X XX X  X   XXX   XXXXXX  XXXXX X   X XXX\",\n            \"XXXXX X X   X XX XX  XX X XXXXXXX XXX XXX X XXX  \",\n            \"   XX   XX  X    XX X X   XX XX      XX X   XX X \",\n            \"XXXXXXXXX      XX  X  XXXXXX  X X  XX XXXXXXXXXXX\",\n            \"XXX XX  X XXX X XX X XX XXX  X X XX    X X X     \",\n            \"XXXX XXXX X  X XX X   XXX XX  X XX X  X X XXXXX X\",\n            \"   XX    X X  XX  X X X XXXXX X   XXX   XXXX XXX \",\n            \"     XX X  XX X XX X    X X X X  XX   XX XXX  X X\",\n            \" X XXX      XX     X     XXXX XXX     XXX X X    \",\n            \"X   X X XX X XXXXX   X XXXX    X XX     XX X  X  \",\n            \"XXXX X  XX  X X  XX  XXXX  X X X X XX  X  XXXX   \",\n            \"X  XXXXXX X  X    XX  X XX XX   XX X XXX     X   \",\n            \" X  X  XX XX    XXXXXX XXX XXX X  X  X XX X X X  \",\n            \" XX X XXX  XX  X    XX  X    XXXX  X X X X     XX\",\n            \"XXX    XX X  X   X  XXXX  XX       XX X  XXX XX X\",\n            \" X   XXX XX  X   X XXXXX      X XXXXX  X XXXX  X \",\n            \" XXX   XXX X X    X X  X XX       X XXX X XXX XX \",\n            \"XXX   X XXX X XX    X XXXXX X XX  X X   XXXXX   X\",\n            \"        X X XX   XXX XX   X    XXX  X XXX   X  XX\",\n            \"XXXXXXX XXXXXXXXX X X X X X    XXX X   XX X XX XX\",\n            \"X     X      XX X XX  X   X        XX X X   XX  X\",\n            \"X XXX X  X  X  X X   XXXXXXX X     X  X XXXXX  XX\",\n            \"X XXX X XX    XX   XXXXX XX XX      XX   X  XX   \",\n            \"X XXX X XXXXX   XXX X   XXX XXX X X X    XX X  X \",\n            \"X     X  X XXX  XX   XX    XX XXX X X  XXXXXXXX  \",\n            \"XXXXXXX  XX  X XXXX   X X X    X X XXX X  X  XXXX\"\n        };\n        private static readonly string[] Modules48 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X X  X  X     X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X XXX X X XX  X XXX X\",\n            \"X XXX X X X X X XXX X\",\n            \"X     X X XX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"          XX         \",\n            \"  X  XXXX X XX XXXXX \",\n            \" X   X XX  X XX  X   \",\n            \" XXXX X  X X XX X X  \",\n            \"X  XX  X X X  XXXX  X\",\n            \"XXXX  X    XX  XX   X\",\n            \"        X     XXX  XX\",\n            \"XXXXXXX X  XX     X X\",\n            \"X     X XX X  X  XX  \",\n            \"X XXX X  XXXX   X X X\",\n            \"X XXX X  XXXXX X     \",\n            \"X XXX X XX XX XX XXXX\",\n            \"X     X  XX XXXX X X \",\n            \"XXXXXXX  XXXX X  X XX\"\n        };\n        private static readonly string[] Modules49 = {\n            \"XXXXXXX   X   X   X   X   XXXXXXX\",\n            \"X     X  X   X   X   X    X     X\",\n            \"X XXX X X  X   X   X   X  X XXX X\",\n            \"X XXX X  X  XX  XX  XX  X X XXX X\",\n            \"X XXX X  X  XX  XX  XX  X X XXX X\",\n            \"X     X   XXX XXX XXX XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X  X   X   X   X         \",\n            \"XXX XXXXX   X   X   X   XXX   X  \",\n            \" XXXXX X X XXX XXX XXX XXX  X XXX\",\n            \"XX X  XXX XXX XXX XXX XXX X  XXXX\",\n            \"X XX X XXXX XXX XXX XXX X   XXXX \",\n            \"X   XXXX  XX  XX  XX  XX  XXXXX X\",\n            \" X  XX   XXX  XX  XX  XX   X     \",\n            \" X XX XX     X   X   X   X XX XX \",\n            \"XX  XX    XX   X   X   X XXX  X  \",\n            \"X XXX X XXX X   X   X   XX  XX  X\",\n            \"X  X       XXX XXX XXX XXX  XX  X\",\n            \" XXX XX XX XX XXX XXX XXX X  X XX\",\n            \"XXX X   X X XXX XXX XXX X   X    \",\n            \"XXX X XX XXX  XX  XX  XX  XXX XXX\",\n            \"   X    X  X  XX  XX  XX   X X X \",\n            \"X  XXXXXX    X   X   X   X XX XX \",\n            \" X      XX X   X   X   X XXX X XX\",\n            \"X     X X X X   X   X   XXXXX XXX\",\n            \"        XX XXX XXX XXX XX   X X X\",\n            \"XXXXXXX X XXX XXX XXX X X X X  XX\",\n            \"X     X XXX XXX XXX XXX X   X XX \",\n            \"X XXX X XXXX  XX  XX  XXXXXXX XXX\",\n            \"X XXX X   XX  XX  XX  XXX XX X X \",\n            \"X XXX X XXX  X   X   X X  XX XX X\",\n            \"X     X XXXX   X   X     X XXX   \",\n            \"XXXXXXX X X X   X   X   XXXX XX X\"\n        };\n        private static readonly string[] Modules50 = {\n            \"XXXXXXX X    XX X XX      XXXXXXX\",\n            \"X     X X  XXXXX  X X  XX X     X\",\n            \"X XXX X XX  X X  XXXXX  X X XXX X\",\n            \"X XXX X XXX X    X XXXX X X XXX X\",\n            \"X XXX X  XX X    X XXXX X X XXX X\",\n            \"X     X XXX     XX X XX   X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"          XX X XX     XX         \",\n            \"XX  XXX   X XX     XX X X  X XXXX\",\n            \"XX  X  XX    XX X XX     XXXXX X \",\n            \" XX  XXX XX     XX X XX    X   X \",\n            \"XXXXXX  XX  X X  XXXXX  XX   XX  \",\n            \"XX   XX    X XXXX X    X XXX XXXX\",\n            \"XXXXX   X X X    X XXXX X X  XX X\",\n            \"XXX XXXXXX XXXXX  X X  XXXX XX XX\",\n            \"X    X X   X X XX     XX  XXX XX \",\n            \"XXXX  XXXX  XX     XX X X    X XX\",\n            \"  X  X  XX   XX X XX     XXXX X  \",\n            \"XX    X         XX X XX    X  XX \",\n            \"X X    XX   X X  XXXXX  XX     X \",\n            \"X X   X  X X XXXX X    X XXX  X X\",\n            \"X X  X   X  X    X XXXX X X   XXX\",\n            \"  X X XX X XXXXX  X X  XXXX XX XX\",\n            \"    X  XXXXX X XX     XX  XXXX  X\",\n            \"XX  X XXX   XX     XX X XXXXX X X\",\n            \"        X    XX X XX    X   XX   \",\n            \"XXXXXXX  XX     XX X XXXX X XXXX \",\n            \"X     X XX  X X  XXXXX  X   X X  \",\n            \"X XXX X XX X XXXX X    XXXXXX X X\",\n            \"X XXX X  XX X    X XXXX       XXX\",\n            \"X XXX X   XXXXXX  X X   X        \",\n            \"X     X XX X X XX     X    X X X \",\n            \"XXXXXXX X   XX     XX X X XXXXXXX\"\n        };\n        private static readonly string[] Modules51 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X X  X  X     X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X XXX X X XX  X XXX X\",\n            \"X XXX X X X X X XXX X\",\n            \"X     X X XX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"          XX         \",\n            \"  X  XXXX X XX XXXXX \",\n            \" X   X XX  X XX  X   \",\n            \" XXXX X  X X XX X X  \",\n            \"X  XX  X X X  XXXX  X\",\n            \"XXXX  X    XX  XX   X\",\n            \"        X     XXX  XX\",\n            \"XXXXXXX X  XX     X X\",\n            \"X     X XX X  X  XX  \",\n            \"X XXX X  XXXX   X X X\",\n            \"X XXX X  XXXXX X     \",\n            \"X XXX X XX XX XX XXXX\",\n            \"X     X  XX XXXX X X \",\n            \"XXXXXXX  XXXX X  X XX\"\n        };\n        private static readonly string[] Modules52 = {\n            \"XXXXXXX XXX   X XXXX X    XXXXXXX\",\n            \"X     X        X X  XXXXX X     X\",\n            \"X XXX X  XXXXX     XX X X X XXX X\",\n            \"X XXX X XX  X X  XXXXX  X X XXX X\",\n            \"X XXX X X  X XX   XXX   X X XXX X\",\n            \"X     X XX X XX X XX      X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X X   XXXXX  X X         \",\n            \"X   X XXXXXX XX X XX     XXXXX  X\",\n            \"XX X X     X X     XX X XXXX XXXX\",\n            \"    X X XXX    X X  XXXXXXX    XX\",\n            \"       XX   X XXXXX  X X  XXX   X\",\n            \"XXXX XX X  X XX   XXX   X  X X   \",\n            \"  X     X XXX   XX X XX  XX   XXX\",\n            \"XXXXX XXXX X  X X XX        X  XX\",\n            \" XXXXX  XXX XXX    XX X X  XXX  X\",\n            \"XXXX  X X      X    X XXXXXXXXX X\",\n            \"X XXX  X   X  X XXXX X   XXXX X X\",\n            \"  XX  XXXX   X  X XX       XX    \",\n            \"X   XX  XX X X     XX X XX  X XX \",\n            \"XX XXXX X  XXXXXX     XX XX  XXXX\",\n            \"XX X     X  X X   XXX   X XXXX   \",\n            \"  X XXXX       X X  XXXXXXXX XXX \",\n            \"  X XX   XX  X XXXX  X X  X   X  \",\n            \"XX XXXXX XXXXX  X XX    XXXXX X X\",\n            \"        X     X    XX XXX   X XXX\",\n            \"XXXXXXX XXX X  X X  XXXXX X XX XX\",\n            \"X     X   X  XXXXXX  X XX   X   X\",\n            \"X XXX X X  X      XXX   XXXXX    \",\n            \"X XXX X  X X X  XX X XXXX  X  XXX\",\n            \"X XXX X    XX   X XX   X   X     \",\n            \"X     X  X   X     XX XX XX XX X \",\n            \"XXXXXXX XX  X  X    X XX X XXXXXX\"\n        };\n        private static readonly string[] Modules53 = {\n            \"XXXXXXX XXX   X XXXX X    XXXXXXX\",\n            \"X     X        X X  XXXXX X     X\",\n            \"X XXX X  XXXXX     XX X X X XXX X\",\n            \"X XXX X XX  X X  XXXXX  X X XXX X\",\n            \"X XXX X X  X XX   XXX   X X XXX X\",\n            \"X     X XX X XX X XX      X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X X   XXXXX  X X         \",\n            \"X   X XXXXXX XX X XX     XXXXX  X\",\n            \"XX X X     X X     XX X XXXX XXXX\",\n            \"    X X XXX    X X  XXXXXXX    XX\",\n            \"       XX   X XXXXX  X X  XXX   X\",\n            \"XXXX XX X  X XX   XXX   X  X X   \",\n            \"  X     X XXX   XX X XX  XX   XXX\",\n            \"XXXXX XXXX X  X X XX        X  XX\",\n            \" XXXXX  XXX XXX    XX X X  XXX  X\",\n            \"XXXX  X X      X    X XXXXXXXXX X\",\n            \"X XXX  X   X  X XXXX X   XXXX X X\",\n            \"  XX  XXXX   X  X XX       XX    \",\n            \"X   XX  XX X X     XX X XX  X XX \",\n            \"XX XXXX X  XXXXXX     XX XX  XXXX\",\n            \"XX X     X  X X   XXX   X XXXX   \",\n            \"  X XXXX       X X  XXXXXXXX XXX \",\n            \"  X XX   XX  X XXXX  X X  X   X  \",\n            \"XX XXXXX XXXXX  X XX    XXXXX X X\",\n            \"        X     X    XX XXX   X XXX\",\n            \"XXXXXXX XXX X  X X  XXXXX X XX XX\",\n            \"X     X   X  XXXXXX  X XX   X   X\",\n            \"X XXX X X  X      XXX   XXXXX    \",\n            \"X XXX X  X X X  XX X XXXX  X  XXX\",\n            \"X XXX X    XX   X XX   X   X     \",\n            \"X     X  X   X     XX XX XX XX X \",\n            \"XXXXXXX XX  X  X    X XX X XXXXXX\"\n        };\n        private static readonly string[] Modules54 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X X  X  X     X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X XXX X X XX  X XXX X\",\n            \"X XXX X X X X X XXX X\",\n            \"X     X X XX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"          XX         \",\n            \"  X  XXXX X XX XXXXX \",\n            \" X   X XX  X XX  X   \",\n            \" XXXX X  X X XX X X  \",\n            \"X  XX  X X X  XXXX  X\",\n            \"XXXX  X    XX  XX   X\",\n            \"        X     XXX  XX\",\n            \"XXXXXXX X  XX     X X\",\n            \"X     X XX X  X  XX  \",\n            \"X XXX X  XXXX   X X X\",\n            \"X XXX X  XXXXX X     \",\n            \"X XXX X XX XX XX XXXX\",\n            \"X     X  XX XXXX X X \",\n            \"XXXXXXX  XXXX X  X XX\"\n        };\n        private static readonly string[] Modules55 = {\n            \"XXXXXXX X X XXXXXXX  XX   XXXXXXX\",\n            \"X     X X X    XX X   X   X     X\",\n            \"X XXX X XX X X XXXXX XXX  X XXX X\",\n            \"X XXX X X      X XX XXX X X XXX X\",\n            \"X XXX X XXX XXXX  X X X X X XXX X\",\n            \"X     X   XXX  XXX XXX XX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XX   X XXXXX XXX         \",\n            \" XX X XX XXXX   X X   X   X XXXXX\",\n            \"   X X XXXXX   XXXXX XXX X     X \",\n            \" XX  XXX  XXXXX   X   X  X X XXX \",\n            \"X XXX  X  X XX   XXX XXX XXX   XX\",\n            \"  X  XXX  XXX  X  X X X XX XXX X \",\n            \"  X     XX XX XXXXXXX XXXX X X X \",\n            \"XX  X X   X X  X XXXXX XX XXXXXX \",\n            \"   X     X X     XX X   XX X X XX\",\n            \" XX X XX XX  X  X  XX  XX XX XXXX\",\n            \"  X  X  X  XXXX  X XX  XXX  XX   \",\n            \"XX  XXXX  X      XXXXX XX X XXX X\",\n            \"XX     X X XXXX XX  X   X     X  \",\n            \"XXXXXXX X X XX XXXXX   X  X XXX X\",\n            \" X XX      X  X X  X X X    X X X\",\n            \"X  XXXXXXX XXX X      X  X     XX\",\n            \" XXX X XXX     X XXX XXX XX X XX \",\n            \"X XX  XXXXXX X  X X   X XXXXX XXX\",\n            \"        XXX XXXXXXXX XX X   XX X \",\n            \"XXXXXXX X    XXX X    X X X X XX \",\n            \"X     X  XX   X X  X XXXX   X  XX\",\n            \"X XXX X XX XX  X X  X X XXXXX  X \",\n            \"X XXX X    X X    XXX X   X  X X \",\n            \"X XXX X X X  XX XX XXX  X X  XX X\",\n            \"X     X X X   XX    X  X  X  X   \",\n            \"XXXXXXX  XXXXX     XX  X   X XX X\"\n        };\n        private static readonly string[] Modules56 = {\n            \"XXXXXXX     X XX XXX X    XXXXXXX\",\n            \"X     X  XXXX X XX  XXXXX X     X\",\n            \"X XXX X X   XXX X  XX X X X XXX X\",\n            \"X XXX X   X  X XXXXXXX  X X XXX X\",\n            \"X XXX X XX  X XXX XXX   X X XXX X\",\n            \"X     X XXX   X X XX      X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XX    X XX  X X         \",\n            \" X  X X XX XXX    XX     X XX X  \",\n            \"X X    X  X X X X  XX X XXXX XXXX\",\n            \"XX X  XXXXX  X X X  XXXXXXX    XX\",\n            \"XXXX        X   XXX  X X  XXX   X\",\n            \" XX XXX    XXX XX XXX   X  X X   \",\n            \"X  X X          X  X XX  XX   XXX\",\n            \" XXXXXX XXXX  X    X        X  XX\",\n            \" X XX  X XXX X  XXXXX X X  XXX  X\",\n            \"  X   X  X          X XXXXXXXXX X\",\n            \"X  X     X   X X  XX X   XXXX X X\",\n            \" XXXX XXXXXXX XX   X       XX    \",\n            \"X   X    XXXX X  X XX X XX  X XX \",\n            \"X XX XXXX   X  X XX   XX XX  XXXX\",\n            \"XXX XX  XX  X  XXXXXX   X XXXX   \",\n            \"  X X XX     XX  XX XXXXXXXX XXX \",\n            \"  XXXX  XXX  X XXXX  X X  X   X  \",\n            \"XXXXX X XX X      XX    XXXXX X X\",\n            \"        X XX X  X  XX XXX   X XXX\",\n            \"XXXXXXX  X XXX    X XXXXX X XX XX\",\n            \"X     X  X   XX      X XX   X   X\",\n            \"X XXX X XXXXXX XXX XX   XXXXX    \",\n            \"X XXX X  X  XXXX X X XXXX  X  XXX\",\n            \"X XXX X  XXXXX XX XX   X   X     \",\n            \"X     X X    XXXX  XX XX XX XX X \",\n            \"XXXXXXX  X XX   X   X XX X XXXXXX\"\n        };\n        private static readonly string[] Modules57 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X X  X  X     X\",\n            \"X XXX X XX  X X XXX X\",\n            \"X XXX X X XX  X XXX X\",\n            \"X XXX X X X X X XXX X\",\n            \"X     X X XX  X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"          XX         \",\n            \"  X  XXXX X XX XXXXX \",\n            \" X   X XX  X XX  X   \",\n            \" XXXX X  X X XX X X  \",\n            \"X  XX  X X X  XXXX  X\",\n            \"XXXX  X    XX  XX   X\",\n            \"        X     XXX  XX\",\n            \"XXXXXXX X  XX     X X\",\n            \"X     X XX X  X  XX  \",\n            \"X XXX X  XXXX   X X X\",\n            \"X XXX X  XXXXX X     \",\n            \"X XXX X XX XX XX XXXX\",\n            \"X     X  XX XXXX X X \",\n            \"XXXXXXX  XXXX X  X XX\"\n        };\n        private static readonly string[] Modules58 = {\n            \"XXXXXXX   X X  X          XXXXXXX\",\n            \"X     X   XX X     X XXXX X     X\",\n            \"X XXX X XX  XXX XXX   X   X XXX X\",\n            \"X XXX X XX X X XXXXXX     X XXX X\",\n            \"X XXX X   XX      X  X XX X XXX X\",\n            \"X     X  X X  X XXX X XX  X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X XXXXX  XXX X X        \",\n            \"   XX XX X XXX XXXXX XX X    XX  \",\n            \"X XX   X X   XXX X  XX   XXX  X X\",\n            \"XXX   XXX     XX X  X X X X   XX \",\n            \"X XX X  XXXX  X XX XXXX  X  XXX X\",\n            \"  X XXX X X XX  X XXXX   XXXX X  \",\n            \"X X X    X XXXXXX X X   X XXXX   \",\n            \"      X  XX X X  XX   X   XX     \",\n            \" XXX    XXXX  X X X X   X  X X  X\",\n            \" X   XX X  X  X XXX  XXX X   XXXX\",\n            \"  XX   X XX XXX   XXX XXX   X XX \",\n            \"     XXX X X XX X X XXX  XX XX XX\",\n            \"XXXXX   XXX  XXX X  X X   X  X  X\",\n            \"X X  XX X   XXX XXXX XXXXX XX XX \",\n            \"XXX X  X   XX  XX XX X   XXX  X X\",\n            \"X X XXX      X  XXX X X X XXX XX \",\n            \"X XXXX XX  X X  XX  XXX    X XX X\",\n            \"XX X  X  X      XX  XX  XXXXX X  \",\n            \"        X  XX XX X X   XX   XX XX\",\n            \"XXXXXXX XX  XX   XXXXXX X X X  X \",\n            \"X     X       XXXX X    X   XX  X\",\n            \"X XXX X X  X X XXXX  X XXXXXXXX X\",\n            \"X XXX X XXX X X XX XX   XX X XX  \",\n            \"X XXX X  XX X  X XX X XXXX  X XXX\",\n            \"X     X   XX  XXXX X XX X  X  X X\",\n            \"XXXXXXX   X  X  X   XX X XX XXXX \"\n        };\n        private static readonly string[] Modules59 = {\n            \"XXXXXXX  X XX   XX   XXX  XXXXXXX\",\n            \"X     X X XX X     X XXXX X     X\",\n            \"X XXX X  X X  X X  X  XXX X XXX X\",\n            \"X XXX X     XXX X  X X XX X XXX X\",\n            \"X XXX X  XX  X X XXX    X X XXX X\",\n            \"X     X XXX  X    XX      X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X X     XX   X X         \",\n            \"    XXXX  XXXXX  XXXX   X XX   X \",\n            \"XXXXX    XX   XXXX XXXX   XXX XXX\",\n            \" X  X XX  X X  XXXX         X  XX\",\n            \"  X  X  X XXX XXXXXXX X XX XXX  X\",\n            \"  XX  X XX XXX X XXXX XX XX  XX  \",\n            \"X X X    X XXXXXX X X   X XXXX   \",\n            \"XX   XXX XXX XX    X  XXXXXX XXX \",\n            \"XX   X    X X  XXX   X X  X   X  \",\n            \"   X  XXXX   XXXX XX  X    X  X X\",\n            \" X XXX  XX XX   XXX     XXX  XX X\",\n            \"XXX  XX XX XX   X  X XX X   XXX  \",\n            \"     X X   XX   X XX X XXX XX XX \",\n            \"X  XXXX  XX XX X XXXX  XXXX   XXX\",\n            \"X X       XXXX X  X  XX   XXX XXX\",\n            \"     XX X X XXX  X         X   XX\",\n            \"  X XX XXX XXX XXXX X X X    X  X\",\n            \"XX  XXX   XX   X    X XXXXXXXXX  \",\n            \"        X  XX XX X X   XX   XX XX\",\n            \"XXXXXXX XX X        XXXXX X XXX  \",\n            \"X     X XX XX   X XXXX XX   X X  \",\n            \"X XXX X XX      X XX    XXXXX XXX\",\n            \"X XXX X  X XXX        XXX XXX XXX\",\n            \"X XXX X  XX  XXX X X  XX  X X    \",\n            \"X     X  X  XX    X X  X XX XX X \",\n            \"XXXXXXX  X   XXX      XX X X XXXX\"\n        };\n        private static readonly string[] Modules60 = {\n            \"XXXXXXX X X  XXXX   X  XX X  XXX X    XX  X   XXXXXXX\",\n            \"X     X XXX  XX X XX X  XX X   X XX X  X XXX  X     X\",\n            \"X XXX X XX XX      X  XX   X   X  X X XXXX X  X XXX X\",\n            \"X XXX X XX XXX X   XXXXXXXXXXXXX   X    X X X X XXX X\",\n            \"X XXX X   XX X      XXXXXXXXXXXXX     XXX X   X XXX X\",\n            \"X     X XX X XXX X X XX X   XX XX XXXX X  X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXX X  X X   X X   XXXX  X X  XX  X         \",\n            \"XX  XXX   XXXXXX XXXXX XXXXXXX  XX XX XX  XX   X XXXX\",\n            \"   XX   XXXX  X  X  X XXX   XXXX X XXXX  XX XX  X X X\",\n            \"  X  XXX X XXXX XXXX  XXX X XX  XX   XXX  X X XXXX  X\",\n            \"XX XXX XXX     XX XXXXXX X XXXX XXX  X   XXX XXXX  X \",\n            \" XX XXX XX X XX   XX X         XX  XX X   XXXXXXXX XX\",\n            \" X XXX    X X  X    XX   XX XXXX X  X X  XX XX  X  X \",\n            \"XXXX  XX  XX XXXX  XXXX X   XXX X XX  XX X X X   X  X\",\n            \"    X   XX  X XXXXX  X   X   XXX  X X X XXX XXXXXX  X\",\n            \"  XX XX XXX X     XXX  X  XXX   XX  XXXX  X  X XXX  X\",\n            \"  X XX X X XXXXXXX  XXX X X XXXXXX XX X XXXXX    XX X\",\n            \"X   X XX XXX X X X   XXXXX XXX X   X    X      X    X\",\n            \"X      X XX X    X   XX  X    XX X   X  X     X  X XX\",\n            \"XXXXX XXXXX   XXXXXX X XX XX  X X  XXX X  XX X XXXXX \",\n            \"X XXXX XX X  XX  X  X  XX X  XXX X X XXX XX X  X  X X\",\n            \"  XX  XXX XX   XXX XX XXXX  X X    X  X  XX  X      X\",\n            \" X  XX  X   XX XXXXX  X    X  XXX XX  X     X XXXX   \",\n            \"X XXXXXXX  X XXX XXX X XXXXXX X X  XXX   X XXXXXX X X\",\n            \"  XXX   XXXX  X    XXXXXX   X XX X    X  XX X   X  XX\",\n            \"XX  X X XX XXX  X   X XXX X XXXX   X   XX   X X XXX X\",\n            \"  X X   XX X  XXX  X XXXX   XX X XXX   X XX X   X  X \",\n            \"X   XXXXXXX X XXXXXXX  XXXXXX   X  XXXXX  XXXXXXX  X \",\n            \"X  XXX  X   X    XX X XXX    XX XX XX X XXXX   XXX  X\",\n            \"XX X XXX   X XXXXXXXX XX    XXX XXXX X XXXX   X X X X\",\n            \"X  XX    XXX  XX X  X XX XX XX XX XXX  X XX X X  X X \",\n            \" XXX  X XXXX     XX  X X XXXX X XXXXXX   XXX    XXXX \",\n            \"XX  X  X  X  XXXX  XX XX X   XX X   X XXXXXX   XXX X \",\n            \"X XXXXX X X X  X XXX XXXXX     X        XXX  XXX    X\",\n            \"  XX    XXXXXXX  X   XX XXX X XX XXXXX X X  XX   X   \",\n            \"   X XX X   X XX XXXXX X  XXXXX X XXXX X XXXX XX X  X\",\n            \" XX    X XX X XX    XX X XX  XX  X    XXX XXXX XX  XX\",\n            \"XX  X XXX       X X  X X    XX X   XX    XX XXXX X  X\",\n            \" XX     XXX  X  XXXXX  X    X   XXXXXX     X   X X X \",\n            \"  XX  X  XX XXX  XXXX   X X XXX X  XX    X XX  X XXX \",\n            \"     X X  XXX X   X XXX  XX  XX X   X XXXXXXX   XXX X\",\n            \"XX XXXX XX X XXX  XXXXXXXX X XX XX X     XXXX X   X X\",\n            \" XX    XX X X  XXXX  XX X   X X XX  XX XXX X XX  X XX\",\n            \"   X  XX XXXXXXX XXX X XXXXXXXX XX XX XX  XXXXXXXX XX\",\n            \"        X  X   X    X  XX   XXX     X XXXXXXX   X X X\",\n            \"XXXXXXX    XXXXX XX XXX X X X      X  X  X  X X X   X\",\n            \"X     X XX    X XX   X XX   X X  XXXXX XX  XX   XX  X\",\n            \"X XXX X X XXX XX XXX X  XXXXX   X   XX X XX XXXXXXXX \",\n            \"X XXX X  X   XXX XX X   X XX XXX X  X X  XX      X X \",\n            \"X XXX X    X  X X X X    XX XX  X       XX   XXX  X  \",\n            \"X     X XXX XX XX   XXXX    X   X X X XX   XX XXXX XX\",\n            \"XXXXXXX X XX    XXX    XX  X  X XX XX XX XXXX   XX X \"\n        };\n        private static readonly string[] Modules61 = {\n            \"XXXXXXX  XX X     XXXX X    XXX  X XX     XX X XX      X  XXXXXXX\",\n            \"X     X XXX   XXX X XX     XXXXX    XX X XX     XX X    X X     X\",\n            \"X XXX X    XX X  XXXX  X X  X  X X  X  X       X   X  X X X XXX X\",\n            \"X XXX X XXX XXX X XX X X    X X  X X  X X XXXX XX    XXX  X XXX X\",\n            \"X XXX X    X  X  XXX   XXX    XXXXX  X XXXX X  X   XX   X X XXX X\",\n            \"X     X X XXX XXXXX XX  XXXX XX   XX    X XXXX X XXX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X  X XX XX   X   XX XX   X   XXX X X X X   X   X        \",\n            \"XXXXX XXXXX X XXX X XX XXX XX XXXXXXXX   X X  XXXXX   XX X X X X \",\n            \"X      X X X XXXXX X XXXX     XX X XXX X XX  X  XX XX X  X XX  X \",\n            \" X  XXX  X  XXX X  XXX XX X  XX  XXXX  XX  X  X XX   X X    X X  \",\n            \"XX XXX X  X X  XX  X X XX X   X   XX   XX XXX   X XXX     XX X  X\",\n            \"    XXX   X     X X     XX X XXXX X XX   XX  XXXX XX    X   XX XX\",\n            \"X X X  XX  XX      XXX X  X XX  X  X   X  XX X XXX X  XX   XX    \",\n            \"X    XXX XX  X  X X XX     XX  XXX XXX   XX   XXX X    X X XXX   \",\n            \"  XX X XX XX XXXXXXXX  X X  XX   X  XXXX X    X XXXX X X   X    X\",\n            \"XXX   X X X  XX   XX X XX     XX   X  X X  XXXXX  X X  X   XXX XX\",\n            \"X XXX  XXX      XXX     XX X   XXX   XXXXX  X X  XXXXX X    XX X \",\n            \"XXX  XX XX  XXX XX X  XXXXX    X   X    X XXXX X    X XX    X X X\",\n            \"  X X    X XX XXX    XX X XX XXXX XXX         X  X  X XX    XX XX\",\n            \" X    XXX XX  XX X X  XXXXX XXXX XX XX X      XXX XX XX X XXXXX X\",\n            \" X  XX       X  X XX X XX    XX X XXX    XX XX   X  X XX     X   \",\n            \"X     X  XX XXXXXXXX X  XX   XXX X  XXXX  X   XXX XXXX  XX   XX  \",\n            \"XXX  X X        X X XX  XX XXXX  X  XX X XXX XX  X X  X   X XX X \",\n            \" X    X X   X    XXXX  X X     XXX XXX   XXX X  XX    X  XXX  X  \",\n            \" X     XX  X  XX XXX X XX X  X  X   XX    XXX  XXX X  XXX X    X \",\n            \"  X X X   XXX     XXXX     X   XX X X      X XXXX X  X  XX X XX  \",\n            \"X       XX X  XX  X  XXX X X X X  XX XXXXX XXX     X  XXX  XXX X \",\n            \"   X  X     X    XXX   XXX    X   XXX X    X XXXXXX   XXXX XXX  X\",\n            \"   X X  XX    XX XX   X X  X  XX    XXXX X X   X X X XX     XXXXX\",\n            \"   XXXXXXXXXXXX  X X  XXXXX   XXXXXXX  X  XX XXXX  X  X XXXXX X  \",\n            \"  XXX   X XX X X     XX X XX XX   XXX     XX X XX     X X   XXXX \",\n            \"  XXX X X  XXX X X    X XXXX  X X X XX X XX     XX X XX X X X   X\",\n            \" X  X   X X XX  X XXXX X    X X   XXX     XX X XX     XXX   XX   \",\n            \"  X XXXXXX X XXXX X XX     XX XXXXX XX X XX     XX X XXXXXXXX  X \",\n            \" XXX X  XXX     XXXXX  X X  XX   XX XX X  XX    XX XXXX XX  XX   \",\n            \"XX    XX  XXXX XX XX X     XXXXXX XX X  X  X  XXX     X  XX   XX \",\n            \"X  X X X XXX     XXX    XX    X  XX  X XXXXX X XXX   XXXXX  X    \",\n            \"  X X X  XX XXXXX XXXX X     X    XX XX X X  XXX XX  XX    X XX  \",\n            \"   XXX      XX X  XX  XXXXX   X XX    X X X  X XXX  X XXXXX  X   \",\n            \"  X   X XXX XXXX XX X   XX XXX XXX  X  X  XX XXXX XX  X X  XX X X\",\n            \" X XX    X   X    XX X XXXXX  XX   XXX X  X    XXX X XXXXX XXX XX\",\n            \"XX X  X X  X  XX XXXXXX    X XXX X  X  XX  X XX  XX X X X   XXX  \",\n            \"XX XXX    XXX XX        XXX X XX   X   XX X  XX     XX    XXX  XX\",\n            \"X XX XXX  XX  XX XX  X  XX X  XX XXXXX X XXX X XXX X XX XX XX XX \",\n            \"  XXXX  X     X XX XX XX X  X    XXXX  X  X    XX  X XX     X    \",\n            \" XXX  X XX X   XX X XX     XX XX   XXX   XX XXX  XX X   XX XXX  X\",\n            \"X  XXX X   X  X XXXXX  X X  XX   X  XXXX X    X XXXX X XX   X  X \",\n            \" X X XX XXX XXX   XX X XX    X   X X  X X  XXXXX  X X    X X X X \",\n            \"XX  XX  XX  XX X XX     XX X XXXXXX  XXXXX  X X  XXXXX   XX XXXX \",\n            \"    XXXXX X   X  X X  XXXXX     X  X    X XXXX X    X X  X    X X\",\n            \"X X XX X XX X XX     XX X XX XXXXXXXX    XXX X  X X X  XXXXXXX XX\",\n            \"XX    XX   X XX XX  X XX XXX XXX X  X XX X X X XX    XX X X   X X\",\n            \"   XX  X  X XXX   XX X  X      X   XXX   XX  X  XX    X XXXXX  X \",\n            \"  XX XXX  XXX  X XXXX X    XX  X X  XXXX  X X X XX   X XX  XX X  \",\n            \"X  X   XX X X   X X   XXX X   XXX    X  X XXXXX  X XXXXXXXX XX   \",\n            \" XX X X XX X      XXX    X X  XXXXXXX  X  X  XXXX X  XX XXXXXXX X\",\n            \"        X     X    X X XX     X   X XX  XXXX   X X X  X X   X   X\",\n            \"XXXXXXX XXXX XXX   XX  X   XX X X X   XX  XX XX   XX    X X X  X \",\n            \"X     X  XX X  X   XX  X   XX X   X  XXX X X  XXXX X  X X   XX X \",\n            \"X XXX X XXXX     XXX   XXX   XXXXXXXX X    X XXXX X     XXXXX X X\",\n            \"X XXX X X X XX X     XX XX X XX X XXXXXXXX  X  X   X  X      XXX \",\n            \"X XXX X X X      X X  XXXXX  X X XXXX     XX X XX XX X XXX XX XX \",\n            \"X     X XX  XX X     XX X XX   X  XXX     XX X XX     X XX XXXXX \",\n            \"XXXXXXX X   X XX X    X XXXX X  XX  XX X XX     XX X XXXX XX     \"\n        };\n        private static readonly string[] Modules62 = {\n            \"XXXXXXX  X XXXX XXX  XX  XX   XXXXX XXX XXX XXX XXX XX X  XXXXXXX\",\n            \"X     X   X   X X X X       XXXX X  XX   XX  X  XX      X X     X\",\n            \"X XXX X    XX X  XXXX  X X  X  X X  X  X       X   X  X X X XXX X\",\n            \"X XXX X X   XX X  XXX XX  XX  X X XX   X  XX  XXX XXXXXX  X XXX X\",\n            \"X XXX X X  X  X  XXX   XXX    XXXXX  X XXXX X  X   XX   X X XXX X\",\n            \"X     X  XXXX X XXX X   XXX  XX   XX   XX XXX  X XX  XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"            X X  XX  XX   X  XX   X   X X X XXX X  XX   X        \",\n            \"XX   XXX XX X XXX X XX XXX XX XXXXXXXX   X X  XXXXX   XX    XX   \",\n            \"X XXX  XX XX X   X XX  XX XXX XXX XXXXX XXX X X XXX   X X XXX X X\",\n            \" X  XXX  X  XXX X  XXX XX X  XX  XXXX  XX  X  X XX   X X    X X  \",\n            \"XX  XX X XX X   X  X   XX XX  X  XXX    X XXXX  X X X    XXX X XX\",\n            \" XX   XXX  X XX  XXXX XXX XXX X    XX X X XXXX  XX XXX X  XXX XX \",\n            \"X XXX  XXX XX  X   XX  X  XXXX  XX X      XX   XXX    XX X XX  X \",\n            \"X    XXX XX  X  X X XX     XX  XXX XXX   XX   XXX X    X X XXX   \",\n            \"    XX X X X X   XXX XXX XXX X  X X XX  XX  XX  XX  XX XXXXX  XX \",\n            \"XXX   X X X  XX   XX X XX     XX   X  X X  XXXXX  X X  X   XXX XX\",\n            \"X X X  XX      XXXX  X  XX     XX    XX XX  XXX  XX XX X X  XX   \",\n            \"X   X XX XXXX       X   X   XX  X X  XX  XX  XX  XX  XX X XXXX   \",\n            \"  XXX      XX X X     X X X  XXXXXXXX  X     XX  X XX XX X  XX  X\",\n            \" X    XXX XX  XX X X  XXXXX XXXX XX XX X      XXX XX XX X XXXXX X\",\n            \" XXX X  XXX  XXX  XXX XXX XXXXX  X XX XXXXX   X  XXX  XXXXX  XXXX\",\n            \"X     X  XX XXXXXXXX X  XX   XXX X  XXXX  X   XXX XXXX  XX   XX  \",\n            \"XXXX X X X     XX X X   XX  XXX     XX   XXX  X  X    X  XX XX   \",\n            \"  X XXXX  XXXXX X X   X   X XX   XX X X X X XXXXX X XXXXXX   X  X\",\n            \" X X   XXX X  X  XXX   XX XX X  XX  XX X  XXXX XXX    XXXXX      \",\n            \"  X X X   XXX     XXXX     X   XX X X      X XXXX X  X  XX X XX  \",\n            \"X XXX     XX    X X X  X XX XX XXX X X   X X  X   X X XX XXXXXX X\",\n            \"   X  X     X    XXX   XXX    X   XXX X    X XXXXXX   XXXX XXX  X\",\n            \"     X  X     X  XX  XX X     XX X  XXX  X X X X X   XX  X  XXX X\",\n            \" XXXXXXXXX  X   X   X   X   XXXXXXX XXXXXXX XX  XXXXXXXXXXXXXX  X\",\n            \"  X X   XXXX X        X X X  XX   XXX  X  XX   XX  X  X X   XXX  \",\n            \"  XXX X X  XXX X X    X XXXX  X X X XX X XX     XX X XX X X X   X\",\n            \" XXXX   XX  XXXX  XX  XX  XX  X   XXX XXX XXX XXX XXX XXX   XXXXX\",\n            \"  X XXXXXX X XXXX X XX     XX XXXXX XX X XX     XX X XXXXXXXX  X \",\n            \" XX  X  X X    XXXXXXX X X XXX    X XX    XX X  XX  XXX X   XX X \",\n            \"X X XXX X   X XX XX XXXX XXX  X       X  X  X   XXX XXXXXX X X XX\",\n            \"X    X X  XX   X XXX X  XX X  X   X  X  XXXX   XXX X XXXX   X  X \",\n            \"  X X X  XX XXXXX XXXX X     X    XX XX X X  XXX XX  XX    X XX  \",\n            \"  X  X  XXX XXX X XXXX XXX XX X   X    X  X X XXXXXX  XX     XXXX\",\n            \"  X   X XXX XXXX XX X   XX XXX XXX  X  X  XX XXXX XX  X X  XX X X\",\n            \" X  X        X X  XX   XXXX   XX X XXX    X  X XXX   XXXX  XXX  X\",\n            \"X XXXXXX  X  X XX X  X X XXXX X XXXXXXXX X  XX X     XXX  XXX   X\",\n            \"XX  XX   XXXX X      X  XXXXX XX X X    X X   X    XXX   XXXX   X\",\n            \"X XX XXX  XX  XX XX  X  XX X  XX XXXXX X XXX X XXX X XX XX XX XX \",\n            \"     X   XX    X X X X X XXX    X  XX X X X XXXXX X XXX XXX X XXX\",\n            \" XXX  X XX X   XX X XX     XX XX   XXX   XX XXX  XX X   XX XXX  X\",\n            \"X   XX X X X  XXXXXXXX X X XXX      XXX  X   XX XXX  X XXX  X    \",\n            \"  XXX XX X XX   XXX XXX XXX X  XXXX  X   X   X   X   X XXXX   XXX\",\n            \"XX XXX  X   XX   XX  X  XX   XXXX X  XX XX  XXX  XX XX    X XXX  \",\n            \"    XXXXX X   X  X X  XXXXX     X  X    X XXXX X    X X  X    X X\",\n            \"X  X X XX   X   X   X   X   XXXX   XX XXXXXXX X X  X   X   XXXX  \",\n            \"XX    XX   X XX XX  X XX XXX XXX X  X XX X X X XX    XX X X   X X\",\n            \"    X  X XX XXXX  XX    X  X   X X XXX X XX     XX X  X X XXX    \",\n            \"  XX XX X   XXXXX X    X XXX X  XXXXX  XXXXX   XX X X     X XX  X\",\n            \"X  X   XXXX X  XX X  XXXX XX  XXXX   X XX XXX X  X  XXXXX X XX X \",\n            \" XX X X XX X      XXX    X X  XXXXXXX  X  X  XXXX X  XX XXXXXXX X\",\n            \"        XXX    XX  XX XXX XXX X   X XXXX XXXXXXX XX X X X   X XX \",\n            \"XXXXXXX XXXX XXX   XX  X   XX X X X   XX  XX XX   XX    X X X  X \",\n            \"X     X X X X      XXX X    X X   X  XX  X X XXXXX    X X   XX   \",\n            \"X XXX X  X   XX X X X X X X X XXXXX XX  XX  XX  XX  XX XXXXXXX   \",\n            \"X XXX X  XX XX        X XX   XX XXXXXXX XX  XX X      X  X   XX  \",\n            \"X XXX X   X      X X  XXXXX  X X XXXX     XX X XX XX X XXX XX XX \",\n            \"X     X X X XXX X   X   X   X  XXX XX XXX XXX XXX XXX X   XXXX  X\",\n            \"XXXXXXX X   X XX X    X XXXX X  XX  XX X XX     XX X XXXX XX     \"\n        };\n        private static readonly string[] Modules63 = {\n            \"XXXXXXX XXXXX X  XX  X    X    XXX    X XXX  X  X  XX XXXXXXX\",\n            \"X     X    XX  XXXXX XX XXXX     X  XX  XXX XXX  X XX X     X\",\n            \"X XXX X  X  X   XXXXX  XX  XX   XXX X   XX XXX  X XXX X XXX X\",\n            \"X XXX X XX X  X   X  X XXX   X XX XX X  X    XX  XX X X XXX X\",\n            \"X XXX X X   X XX X  XX X X XXXXXX  X XXXX X  X    XX  X XXX X\",\n            \"X     X XXXX   XXX  XX XX X X   XX  X XX XX  X XXXX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  X XXXXX  XXX  XXXX   X XXXX XXX    XXX   X        \",\n            \"X   X XXX XXX XXXXX       X XXXXX XXX  X  X X   XX   XXXXX  X\",\n            \"XXXX      X X            X    X XX X  X   XX X  XXXX XXXX X  \",\n            \" X XX X  X X  X  X  XXXX X XXX X  X   XXX X   X X X X X  XX  \",\n            \"X  XXX X XX      X XXX   X  X     X X  X  X XXX XX XXXX X XX \",\n            \"XX X XXX  XXXXXXX XX  XXX X   XXXX  X  X X XX   XXX X X X X  \",\n            \"X X    X XXXX     X X   XX     XX   X XX XXXXX XX XX  X XX   \",\n            \"  X   XX  XX X  XXXX  XXX XXXX X   X   X XXX  XX X XX XXX X  \",\n            \"X XX     X  XXXX  X     X   X  X X X X XXXX   XX XXXX     X  \",\n            \"XX  X X   XXX X XX      XXXXX X X  X XXXX X   XXXXXXXXX X XXX\",\n            \"X      X XXXXX  XX XXX  X   XXX X     X XXXX X   XXX XX   X  \",\n            \"X XXX XX XXX X XX  XXX   XXX   X    X X  XXXXX  XXXX XX      \",\n            \"XX  X  X       XX     XXX XXXX   XX  XX  XX XXX     XX    XX \",\n            \"  XXX X X X X X  X  X  XX    X XXXXXXXXX XX X  XX    XX XX X \",\n            \"X X    X X    X XXX XXX XXXX  XXXX  X X XXX  X  X XX  XX X X \",\n            \"   XX X  X   XXX    XXXXXX XX  X  X  XX X    XXX X XX XX  X  \",\n            \" XX X  XXXX X  XX X X  XX    X     X XXXX X  XXXXXX X  X  X  \",\n            \"XX    XXXX X  XXX    XX X X XXXX  XXXX X    XX XX     X XXXXX\",\n            \" X XX    XXXXXXXXXXX XXX X XX X XXX X    X XXX XX XX XX XXX X\",\n            \"XXXXX X      X X XXX X XX    XX  XXX    XX    X  XX X  X X   \",\n            \"X   X  X    X X  X X  X XXXXX  X X  XX X   XXX X     XX X X X\",\n            \" X XXXXXX     X  XXX  X   X XXXXX  XX X     XX XXXX XXXXX XXX\",\n            \"  XXX   X   XXX  XX XX XXX  X   XX X  XXXXX       XXX   XX XX\",\n            \"XXXXX X X  X X XX XX X   XX X X XXXX   XXXX    XXXX X X X X  \",\n            \"  X X   X  XX X X     X XXXXX   X XXXXX XX    X   XXX   X X  \",\n            \"   XXXXXX XX XXXXX     XX X XXXXX   X  X    XX XXX  XXXXX XXX\",\n            \"X X  X  X XX  X X   X  XXXXX  XXXX X  XXXXXXXX  X XX   XX XX \",\n            \"    X XXXXX X XXXXX   X  X X  XXX X     XX   X XXX  X        \",\n            \"X  XXX  X XXX X XXXXX X XX XXX    X     XX X X XXX  XX   XXXX\",\n            \" XX X XX X X XXXXXXX XX   X   XX X  X      XXXXXXXX X XX XX X\",\n            \"XX X   X XX  X  X X     XX  XX  XX XX XX XX XX  X X X X XX XX\",\n            \" X XX X X XXXXX  XXX XX X  XX    XXX  XXXXX  X XX  X X  XX  X\",\n            \"XX  X    XX    XXXXX   XXX X X X  X     XX  XXXXX     XXX XX \",\n            \"    XXXX   X  XX XXX  XXXXXX XX XXXXXX X    X X XXX X  X XX X\",\n            \"XXXX X    XX XXX  X XXX X X X  X   XX X  XX XX X  X XXX XX X \",\n            \" XXXXXX     XXX X XX  X    XX   XX  X XXX  X     X XX   XXXX \",\n            \"  XXXX     XXX   XX  XXX  X   X  XXXX    X  XXX  X X  X X XXX\",\n            \"  XX XXXX   X X  X X XX X X XXXXXX  X X  XXXX XXXX  XXX XXX X\",\n            \"XX  XX  XXX    XX   XXXXXXX   X X   XXXX  X X  X XX X   XXXX \",\n            \" XX  XXX X XXXX X  X   X   X  XXX XX X  X  X XXX XX XX    XX \",\n            \"  XX X X XXX  XXXX   X X  XXXXX   XXXX  X   XXXX X X XX   XX \",\n            \"XXX   XX X  XX XXXX       X XX  XX XXXXX  X X  XX       X X  \",\n            \"XX XX    X XX XXXX X X XX  XX XXXX X  XX XX XX X  X     XX X \",\n            \"  XXXXXX X X     XXXX  XXXXXX      X    X XX XXXX XX    XX   \",\n            \"XXX X  XXX X  XX  XX  XX XXX  XXXXX XXX X XXX  XX X  X X XXX \",\n            \"XXXX  XXX    XXX  X   X   X XXXXX   X  X   XX XXXX  XXXXX X X\",\n            \"        XXXX XXXX X XXXXXX  X   XX X  X  XXXXX    X X   X  X \",\n            \"XXXXXXX X   X XXX X X X   X X X XXX XXXX  XXXXXX  XXX X XX   \",\n            \"X     X  XX XX   XXXXX X  X X   XX X X XXXX  X XXX XX   X X  \",\n            \"X XXX X X   X  XX  X  XX XX XXXXX  X  XXX    X XXX  XXXXX  XX\",\n            \"X XXX X   X X XX     XX XX   XXX X   XX XXXX X    X      X  X\",\n            \"X XXX X     X  X  X XX   XXX X XXX  X X  XXXX XX XX X    XXX \",\n            \"X     X   X XXX X   XXXX  XX X  XXXX XXX XXXXX  XX XX  XX XX \",\n            \"XXXXXXX X    X  X    X  X  X    X  XX X    XXX  XX      X XXX\"\n        };\n        private static readonly string[] Modules64 = {\n            \"XXXXXXX  XXX X  XX X X  X XX  X XXXX XX XXX XX  X   X   X   XXX X XXXXXXX\",\n            \"X     X  XX   XX  X XXXXXX    X XXX   XXX  X XXX   XXX   XXX XX   X     X\",\n            \"X XXX X  X XXXXXX  X X X   X     X X XX          XX     XX X      X XXX X\",\n            \"X XXX X   XXXXXXXXX XX X     XX  XX  XX  XX  X XX X   X   X   XX  X XXX X\",\n            \"X XXX X  XX XX X  XXX X XXXXXX X XX X   XX XXXXXX XXXXX  X X   XX X XXX X\",\n            \"X     X XX  X   XX X  XXX   X   XX  XXXX   XX   XX  X X  XXX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"                X XX XXXX   XX XXXXX   XXX  X   X  X   X XXXX            \",\n            \"X  X XX X   XXX X  X X  XXXXX XX XX XX XX X XXXXX   XXX  XXXX X XX X     \",\n            \" X XX   X X   XXX  XX X  XXXXX XXX X X X X    XX X X X  XX X X XX  X X X \",\n            \"X     XX  XXXXX XX XX  X X  XXX XX XX X  XX X  XXX XX  X X   X    XXXX X \",\n            \"XXXXXX X  X X  XXXXXX XX   XXXXX  X X  X XXX   X XXXX XX X XXX X X   X  X\",\n            \"X  X  X  X XX   X   X X   X X   X  XX  XX  XX XXX   X X     XXX  XX  XXX \",\n            \"  X X  X      X  X XXX XXX XX XXX   XXXX  X    X  XXXX XXX      XX XX  XX\",\n            \"XX X  XXX X XXX XXXX    XX XXXX   X    X XXX  XX XX X X  X XX XX  XX    X\",\n            \"X   XX X XXXX XX       XX    X  XX XXX XXX XXX XX X XX XX   XX   XXX  X  \",\n            \"X    XX  XXX  XX XX XX  XXXXXXX XX  X XX XXX  X X X  X XX X XXXXXXX X  X \",\n            \"  XX X  X XXX  X XXXXX  X X     XX XXXX X    X  XX X  XXXX  XXXX   XX XXX\",\n            \"  XXXXXXXX   XXXXXXX XXX XXXXXXXXXXXXXXXXXXXXX  XXXXXX  XXX X  XX X   XXX\",\n            \"X    X      XX   XX X  XXXXX X   XXX X XXXX    X X   X  XX XX   XXXX  XX \",\n            \"X    XXXXXX   XX  XX  X XXX X XXX X  X X XXX XXX      X XXXXX XXX XX   XX\",\n            \" X X X    X X XX   XX XXX XXXX XXX XX  XX  X XX  XXX XX  XXX XXXX X  X   \",\n            \"X XX XXX  XXX    X  X  X  XX X   XXX XXXXXX    X X   XX  XX   XXXXX X XXX\",\n            \"X X X  X  X   XX XXX XX X XXX   XX X  X  XXX X XXXX XXX X  XXX X  X X  X \",\n            \"XX  XXXXXX  XX   XXXX XXXXXXX X X   XXX X XXXXXXXX    X   X X XXXXXXX X  \",\n            \" X  X   X XXX  XXXX XX XX   X  X  X  X  XX XX   X  XXXXXXX      X   X  X \",\n            \"X X X X X        XXX X  X X XXX   XXX X XX XX X XXXX X   XXXX X X X XX  X\",\n            \"  X X   XXXX XX XX  XXXXX   X  X   X   X   XX   XXX  XX X XXXXXXX   X   X\",\n            \" X  XXXXX X   X   X  X  XXXXX     XX  XXXXXXXXXXXXX XXXXX X X XXXXXXXXXX \",\n            \" X X   XXXXXXX  X XX X   XX XX X    XXXXXX X XX  X X    XXX XX XX X      \",\n            \" XXXXXXX  XX      X  XX  XXX   X X X   X XX X X    X X         XX X XXXXX\",\n            \"X X  X       XX X X X X X X    X  X  XX X      X  XXXX   XXX    X  XXXXXX\",\n            \"     XX XX XX    XXX X X  X   X  XXXXX  X X XX XX    XX X XX    XX     X \",\n            \"   X X  XX XX  X XXXXXXX   X                   XXXXX XXX XXX XX  X  XXX  \",\n            \"  XXX XXXX X    X X XXX X X X  XX X X X       XXXXX   XXX   XXX X X   XX \",\n            \"X X  X  XXX XX   X    X X X  X     XX XXX    X XX  XXXXX  X X    X       \",\n            \"XXX   XXXX X XX XX  XXX XXX  XXXX X X   X   X XX X XXX XXX XXX  XXXXX   X\",\n            \"X XXX     X  XXXXXXXX XX XX       X         XXX XX     XX X XX  XXXXXXX  \",\n            \"X  X XXXXX  X X  X XXX X     X   X  XXXXX X  XXXX XX X XX     X        XX\",\n            \" XX XX X   XXXXX  XXX   X XXXX   X X X XXX XX XXXX X X X X X X   X X X   \",\n            \"XXX  XXXX  XXXXX XX XX  X XX XX XX XX XX XXX X XXXX X XX     XXX X  XXX X\",\n            \"X XX    X   X XXX XX     XXXX  XXX XXXX X  X X  XX X  XXXXX  X  XXXX X   \",\n            \"   XXXXX   XX X XX XX XX XX XXX XXXXXXXX XX  X  X X X X   X X XXX  XXXXX \",\n            \"XX XXX  XXXXX  X    XXX X XX  X X   XXX   XX  XX XXX XXXXX   XXXX XXXXXXX\",\n            \"X XXXXXXX   XX X X X  X XXXXXX X   XX X XX XXXXXX X XXX X XXXX XXXXXXXX  \",\n            \" XX X   XXXX X XXX  X XXX   X X   XX  XX  XXX   XX  XXX XX  XX XX   X X  \",\n            \"XX  X X XX  XX X  X XXXXX X X X X  X XX   XXX X X XX XX XXX XX  X X X X X\",\n            \"XX  X   X  XXX XXXXX   XX   X   XX   XXXX   X   XX    X  XX XXXXX   X XX \",\n            \"XX XXXXXX X   X  XX  XXXXXXXXXXXXXXXXXXXXXX XXXXXX  X X     X X XXXXX X X\",\n            \"X XXXX X  XX X  XXX   X      X X XXXX   XX      X   XX X X X  XX X X XXX \",\n            \"  X X X  X X X  X  XX X  X    XX XXXXX XX X X XX XXXX    X X X XXXX XXX X\",\n            \"XXX  X X XXX  XXXXX  X X      XX  X X XXX X   XXXXXXXXX  XXXXXX X    X X \",\n            \" X XXXX X XX XX X X X XXXX  X   X X XX X    XX   XX XXXXXX   X XX XXXX  X\",\n            \"XX XX   XXX X  XXX X XX   XXXXXXX XXX    XX  X  XXXXX XXXX XXXXX X   XXXX\",\n            \"  X XXX XXX XX      X  XXX    X   XX  X   X X X  X   X  XX   XX  X   X XX\",\n            \" XXXX   XX XX XX XXX  X  X   XXX  X  X  X  X   X  X     XXXXX  XXXXXX X  \",\n            \"X  XXXXX X  X              XXX     XX   X  XXXXX  X XXX    XX X X  X XXX \",\n            \"XX   X XXX  XXXX  X X XXXX X X             XXXXX XX  X XXXXX X XXX X   XX\",\n            \" XXX XXX       XX X    X XXXX  XXX  XXX  XXX  X  X   XX  X   X   X  XXXXX\",\n            \"XX XXX  XXXXXXXXX   X X  X   XXXX X  XXX    XXX   XXX X  X XX X   XXX  XX\",\n            \"X XXX XXXX  X XX XXXXXX XX XX  X   X X X  X  XX XXX XXX X     X  XX X X  \",\n            \"  XX X X  XXXXX X  X    XXX   X X XXXX X   X   X    XX  XX XX   XXXXXXXX \",\n            \"XX X XX    X X  X XX    XXX XXXXXX   XXX  XX XXX XXX X   X XXXX XXX XX  X\",\n            \"   XX  X       XX XX  X   X  X   X   X   XXX XX  X XX X XX XXXX XX  X   X\",\n            \"X   X XXX  X XX XXXXX XXXXXXXXXXXXX XXX   X XXXXX X   XX XX  XX XXXXX X X\",\n            \"        X   X   X XX XX X   X   X  X  X    XX   XXXXX    X  XX XX   XX   \",\n            \"XXXXXXX  X XX XX XXX XXXX X XXX XXX X   XX  X X X X XX  XX XXXXXX X X XXX\",\n            \"X     X XX  X X  X    X X   X X   XX  XXX X X   XX X    X XXXXX X   X XX \",\n            \"X XXX X   XXXX X X X  X XXXXXX XX      X    XXXXXXXXX  X X  XXX XXXXX XX \",\n            \"X XXX X XX XXX    X     XXX   XXXX XXX XX  XXX  X   X   X   X  XX   XX X \",\n            \"X XXX X  XX  X      X  X X XX X   XX   XX X X  X X XX     XX X      XX  X\",\n            \"X     X   XX X XXX X  XXX          X XX      XX  XXX   XXX   XX XX  X    \",\n            \"XXXXXXX XX X        XX X    XXX X XXX XXXX X  X   X   X   X   X XXXXX XXX\"\n        };\n        private static readonly string[] Modules65 = {\n            \"XXXXXXX   X    XX      XXXX  XXXX X   XXX XXX  XXX XXX XXX XX X X XXXXXXX\",\n            \"X     X X  XX X XX  X    X XXX  X  XX X  XXX    X     X     XXX   X     X\",\n            \"X XXX X X X XXX  X X  X     XX    X  XXXXX   XXX XXXXX  X X       X XXX X\",\n            \"X XXX X XX         X  X XXXXX  XX  XX  XX  XX X  X XXX XXX XXXXX  X XXX X\",\n            \"X XXX X   X X X   X  XX XXXXXX  X X XXXXXX  XXXXXX  XXXXX  X X XX X XXX X\",\n            \"X     X      XXXXXX XXXXX   X XX          X X   X XXX  XX XXX X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XXXXX  X X X    X   X XXX   X     X X   X   XXXX       XX        \",\n            \"X     X XXXXXXXX X X  XXXXXXXXXX   XXX   XX XXXXX  X  X     X XX XX  XXX \",\n            \"X X  X X X XXX   XX  X XX     X   X X X X XXXX  X X X XX  X X X  XX X X X\",\n            \"XXXX  X XXXXX  XXX   X X  XXXXXX   XXX X XXX X XX X X   X     XX  X    X \",\n            \"    XX  XXX  XX XX   XXXXXX XX  XXX  XX  X  XX XX   X   X  X  X  XXXX    \",\n            \"XX   XXX    XX XXX XXXXX XXXXX XXX  XX  XX  XXX XX XXXXX X XX XX  XX  X  \",\n            \"X XX X X XXXX XXX XXX X  X   X XXXXX XX XX   XX X X   XXX XXX  X  XXXXX  \",\n            \"XX  XXXXXX XXXXX  XX XXXXX    X  X X    X XX X   XXX XX   X X X XXXX XXXX\",\n            \" XXX    X    X  XXXXXXX  XXXX XX  X   X   X   X  X X  X  XXX  XXX   XX XX\",\n            \"XXXX XXXX XX X   XXX    X   XXXX    XX   XX XXX XX X X   XX X   XXXX X X \",\n            \"XX   X X XXX XX  X       X X  XX   X   XX XXX     X               X  XXX \",\n            \" XX X X X  X  X X X   X   X X X X X X X X X X  XX X X  XX XXXX  XXXX XX X\",\n            \"   XX    XXX X XX   XXX  XX X X     XX       XX XX XX X X X    X   X X  X\",\n            \"X  XX XXX  X  X XXXX X XXXXX XXXXX X X  X XX       XXXX X   X X  XXX XX X\",\n            \"X X X  XXX X X  XXX  X   X    X   X  XX  XX X  XX   X  XX   X    X XX XXX\",\n            \"XX   XX XXXXXXXX X X X X X   X XX XX    XXXXXX X  XX XXXX X  X  XXXX XXXX\",\n            \" X XX   XXX XX   X  X X  X  X XX   XXX X X  X  X   XXX X X X  X    X X XX\",\n            \"X  XXXXXX  XX  X  X XXX XXXXXXXXXX XX XXXXX XXXXX  X XXX XXXXXX XXXXXXXX \",\n            \"XX XX   XX          X X X   XXXX X XXX X  XXX   X      XX XXX  XX   XXX X\",\n            \"X XXX X XXXX   XX XX  XXX X X X  X  X XX   XX X XXX X       X XXX X X XXX\",\n            \"XX XX   X   X  X  XX    X   XXX XXX XXX XXX X   X  XX  X X      X   XXXX \",\n            \"  XXXXXXXXX  X X  XXX   XXXXX  XXXXX X  XXX XXXXX  XXXX  XX XX  XXXXX XX \",\n            \"X X       XX  XXX   X   X  XXXX XX      XXX X X X X   XX  X   X X  XXX  X\",\n            \"  X X X  XX  X X XXX  XX  X  X       X    XXXXXX X     X X X X  XXXXX X X\",\n            \"  XXX    XXXXXXX X  XX X  XXXXXX X XXXXX XX  XX X X   X     X  X XXXX    \",\n            \"   XX X X X X  XX XX  X   XXXXX     XX X XX X X X  XX X XX     X     XX  \",\n            \"XXX X  X  X  XX X       XXX XXXXXXXXXXXXXXXXXXX     X   X   X  XX XX   XX\",\n            \" X  X X    X XXXX XX  X XX XX    XX XX X   XXXXXX  X  X  X  X  XX XXXXXX \",\n            \" X X X X  X   XX XXXXXX  X X XXXXX X X  X XXX  X XX XX  XXX  XXX XXXXX  X\",\n            \"X XX XX X     XXX  XX XXX XX  X XXXXXX XXX XXXX     X   X   X  XX X XX XX\",\n            \"  X  X   X XXXX    XXX  XXXXXXX  X XX  XXXX X  X X XXXXXXX X X X   XX  XX\",\n            \"X   X XXX XXX XXX  XX X    XX     XXXXX  XX     X X X  XXXXX  XXXX   XX X\",\n            \"X  X    XXX     XX   XXX X    XXX X X X   X  X    X X X X X X XXX X X XXX\",\n            \"X  X XX  X XX    XXX    XX   XXX   XXX   XX X  XX  XX X XX       X X  X X\",\n            \" X     X X   X  X   XX  X   X X    X   XX X X     X       X X XXXX  X   X\",\n            \" X  X X  X  XXXXX   XXX   XXX XXX X X X   XX   XXXXXXXXX XXXXXX XX  X X  \",\n            \" X      X       XXX X  X  X XX  XXXX XXXXX X X  XXX X  XX XXXXX  X XX    \",\n            \"X X XXXXXXXXXX  X  X X XXXXXX  X XX X XX   XXXXXX XX  X XX  XX  XXXXX  X \",\n            \"X  XX   X   X X   XX X  X   XX XXX  XX  XX  X   X XX   X  XX  X X   XX XX\",\n            \"X XXX X X   X X   XX  XXX X X XX X X   X  X X X XX   XXX  X X XXX X XXX X\",\n            \"  XXX   XX X  X XX  XX XX   X XX    X   X XXX   X XX   XX X     X   XXXXX\",\n            \"X   XXXXXXXX XXX  XX  X XXXXX X X X X X X XXXXXXX  XXXXX X XXXXXXXXXXXXXX\",\n            \"  X    X X  XX X     X XX  XX XX       X  X  XXX   X  XX  X X X X XX    X\",\n            \"  XX XX   X  X X X XXX X X XXXXX    XX   XX XX   XX  X    X  X    X X  XX\",\n            \"   XX   X   XX     XX X XXXXXX  XX X X   X XXX         XX      X XXXX X X\",\n            \"  X XXXX XXX   XX XX XXXX XXX  X XX X X    X       XXXX       X X X     X\",\n            \"  X X  X  X  XX XXX X X XX  XX   XXX XXX X XX       X      X     XXXX XX \",\n            \" XXXX XXX XXX  X X XXX  X  X XXX XX  XXX XXXXXXX   X   XX  X  XX   X    X\",\n            \"XXX  X  X X   X X  X X XXX XX  X X XXX X XXX XX X XXXXX X          XXX XX\",\n            \"X     XX  XXX  XXX   XXX         XX X  X X XX     XX  X  XX X XX X X     \",\n            \"  XXX     XX    XX X X    X X XXXXXXXXXXXXX     X  XX X     X X   X XXX  \",\n            \"     XX XX   XX X XXXX X    X       X  X XX XXX   XX XXXX     XX X X  XXX\",\n            \"  X XX X  XX    X XX XX X XX X   XX X     XX  X XX  X  XX  X X X     X X \",\n            \"XXX XXX X  XXXX   X X XXX   XX   X       XXX  XXX XXX XXXX X XXX  XXXXXX \",\n            \"X X X  X X   XXX XXX XXX XXXXX  XX   X  XXXX XX X  X  X X X    X   XX   X\",\n            \"XX X XX  XX  X X XXX XXXXXXX  XXX XX XX XXXX     XX X     X XXXX  X X XXX\",\n            \"   XX   XXXXXXX  X  XX XXX XX XXX XXX XXX   X  XX X  X X  X    X  XX XXX \",\n            \"X   X X  X X   XXXX  XXXXXXXXXX   X X  X  XXXXXXXX X  X X X    XXXXXXXX X\",\n            \"        XX   XXXX   X X X   X XX X XXX X  X X   X   X XXX     X X   X   X\",\n            \"XXXXXXX     XXX   X   X X X X XXX XXXX XX  XX X XXXXX  XX   X X X X XXX X\",\n            \"X     X   XX  XXX X  X XX   XX   X  X X  X  X   XX  XXX XX   XXXX   XX  X\",\n            \"X XXX X  X  XX  X  X X XXXXXX  XXXXX    XX  XXXXXXX  X X  XXXXXXXXXXXX   \",\n            \"X XXX X   X   XXXX XXXXX   XXX    X   X  XX   XX XXX XXX XXX XX  XXX  X X\",\n            \"X XXX X   X   XX   X X X  X X XXXXXX XX X XX X X  X X  XXXXX  XX   X    X\",\n            \"X     X  XXXX X XXX XXXX XXX  XXXX XX  X  XXX X X     X     X  XXXXX X  X\",\n            \"XXXXXXX X    X X X XX    X XX XXXXX XXX X    XXX XXX XXX XXX XXXX X XXX X\"\n        };\n        private static readonly string[] Modules66 = {\n            \"XXXXXXX  X X    X    XX XX  XX   XX   XX  X XX  X X   X X XXX XXXXXXX\",\n            \"X     X      XXX X  X    X X XX   XX  X  X XXXXXXXX  X  X     X     X\",\n            \"X XXX X X X XXXX X X XXXXXX        XX  X XX    XXX X  XXXXX   X XXX X\",\n            \"X XXX X      XXXX  X   XXX XXX  X XXXX XXX XX  X X  X X     X X XXX X\",\n            \"X XXX X XXX  X   X  XXX XX   X  XXXXXXX XXXX X X XXX XXXX X X X XXX X\",\n            \"X     X X   XX XXX   XXXX  XX   X   X X X X   XXXX X  XX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X XXXXXX XXX  XXX X   XX   XX  XX  X  XXX   X   XX          \",\n            \" X  X X X      XXXXX  X XXXX X XXXXXXX X  X X  XXXXX  X X XXXX XX X  \",\n            \"X XXX  XXX   X XX      XX XX XX X  X  X  XXXXX X  X XXXXXX XX X  XXXX\",\n            \" XXX  X X X  X  X        X X X   XX  XXXX X XXX   XXX    XXX   XXXXX \",\n            \" XX XX  XX XX X  X X    X X  XX X  XX  X   XX X  XXXX  X XXX X X    X\",\n            \"  XX  XXX  X X    XX XXXX  XXX  X X  XXX XX X   X XX X  XX   XXX X X \",\n            \" XX      XXXXX X  XX    XX   XX  XXXX XX XXXXX XX XX  XXX   X X  X   \",\n            \"  X   X  XXX  X X X    X  XXXXX X XXX   X    XXX X  XXX   X   XX  X  \",\n            \"X  XXX X  X     XX  XXXXXXXX X XXXXXX  X X X XX X  XXX     X   X     \",\n            \" X X XXXX X   X XXX X XX   X    XX   X X X  X  XXX X XX X X   XX  X  \",\n            \"  XX   X X X XXX X   X X  X XXX     XXX  XX X  X  X   XX X XX XXX X X\",\n            \"X   XXXX XXXX X  XXXX    X X X  XX     X XX XX  XXX X X  X X   XXX XX\",\n            \"XXX  X XXXXX   XX  X   X XX     X  X XXX    XX X   XX XX  XXXXX X    \",\n            \"XXX  XXXX    X X  XXX X  XXXX X XXX XX X XXXX  XXXXXX   X     XX X XX\",\n            \"XXX X   X    XXXXX  XX  X  X   XXXX X   XXXX X X  X XX   X XX X X  XX\",\n            \" XX X XXXXX X  XX XX XXXX XX  XXX       XXXX X   X   X X       X   XX\",\n            \"  XXXX  XXX  X XX X X XXX      X  X X XX XXXXXXXXXXXXXXX XX XX XX   X\",\n            \" XX X XXX XXX XXXXX  XXX  X  XXXX X    X  XXXXXXX XX    X     XX XX  \",\n            \"XXXXXX X  X  XXX X XXXXXXXX XXXXXX X   X  X  X XX X  XXXXX XX XXXXXX \",\n            \"X    XX    XX    XXX XXXX   XX X   X   XX X  X     XXX X X  X X X  X \",\n            \" XXX X  XX X  XXX X X XX X  X   X    XXXXX X  XX     XXX X     X   X \",\n            \" X  XXXXXXXX    X XXX X XX  XXX XXXX   X  X X  XX X  XXXX X X X   X  \",\n            \"X XX    X   XXXXXXXXXXXXXXX X    XXXX X  XX  X X XX XXX XX XXXX   XX \",\n            \"   X  X  XX XX XXX  XX  X X X  X XXXXXXXX        X  XXX  XX XX  XX X \",\n            \"XXX X  XX XXX  XXXX XXX XXXXX  X XX  X X X  X XXX  XXX    XXXX  X   X\",\n            \"X XXXXXXXX X XX X     X X  XXX  XXXXXX X    X X XX X XX XX  XXXXXX X \",\n            \"XXXXX   XX  XXXX     XXXX  X  XXX   X  X XX    XXXX   X    XX   XX   \",\n            \"X   X X XX    X XX X   X XXX XXXX X XXXX   X      XXX X    XX X XX X \",\n            \" X XX   XXX  XX  X XXX X XX XX XX   X X  XXXX   XX X   X  XXX   X  X \",\n            \" X  XXXXXXX X   X XX  X X   XX  XXXXXX    X X X XXXX XX X X XXXXXX X \",\n            \"  XXX     X  XX X XX   X X   XXXX X  X X  XX XX X X XXX  X   X X  XXX\",\n            \" X X XX XX XX     X     XXXXX  X  X    XX XXXXX X  XXXX   XX X   XXX \",\n            \"XX  X   XXXX  XX  X XXXX  X   XXX X X X   X XXXXXX  X   XXX XXXX X X \",\n            \" XXX  X  X XX  X  X   X XXXXXX    X        XX XXX XX  XXX X XXX  X X \",\n            \"X   XX   XXX  XX XX X   X XXX      XX  X XXXXX    XXX X  X X XXXX XX \",\n            \" X  X XX  XXX X X  X X XXXXX X   XX X XX X   X X  X XXXX X X   X   X \",\n            \"X XXXX XX  X X  X X X X XX  X XX X   XXXXX X XXX   XXX  XXX XXX  X XX\",\n            \"XX  X XX X   X X  X XX  XX        X X XXXXX X  XX  X  X X   X XXXXXX \",\n            \"X XX   X XX   X X XXXXXX X   X       X  X XX      X   X XX   X X X X \",\n            \"  X X XXX   XXXX X XXXX XXX   XX    X X    X   X XXXX XX XXX X  XX   \",\n            \"  XX X  X X XX X  XXX XX    X  X  XX  X X  X  X XXX X   X XXX   X  XX\",\n            \"XX X  XX  XX XXX   XXX  XXXX    X XX  XX  X XXXXXXXX  X X XXXX  X  X \",\n            \"X   X   XX  XXX XX  X   X    X XX   X X  XXXX  XXXX  XXX   X X X  XXX\",\n            \" XXX  XXXXXXX    XX XX X  X    X X  X XX    X    XXXXX  X   XX X X X \",\n            \"X  XX  XX XX  XX X  XXX    X  X   X  X X   X XX X  XX XX XX   XXX  XX\",\n            \"   XXXXXX XX X XXX XX XXX X  XXX X X  XX XXXX X XXXX X  X X  XX X XXX\",\n            \"    XX X XX X XX X  X   XX X  XXXX XXXXX XX XX X  X XXX XX XX  X  X  \",\n            \"X  X XX  XXXXXXX     X     XXXX  X XX X X X  XX X X  XXX  X XX X XXX \",\n            \"XX     XX  X   XX  XX X  XX  X  X XX   X XX XX  X    XXX X XXXXX   X \",\n            \"XXXXX X XXXX XX X X X X XXX XXX XXX  X      XXXXX  X  X X X       X X\",\n            \"XX  XX    XXXX  X   X      XX X XXXXX   XXXX X  X XX XXXXX   X X XXXX\",\n            \"X X XXX X X   X X        X XX X XXX  XXX X   XXX  X X XX X  XX XXX X \",\n            \"X      XXXXXXX X  X   XXX XX  XX  X XXXXXX XX XX  XX X  X  XX XX     \",\n            \"X  XX XX X  X X XX XXX     X  XXXXXXXX X X XX XX XXX  XXX X XXXXXXXX \",\n            \"        X  XX  X XX X XXX XX X  X   X   X XXXX   XXXXXXXXXXXX   XX XX\",\n            \"XXXXXXX    X X X  XXX    XXXXX XX X X   XXXX    XXX XXXXXXX X X X XX \",\n            \"X     X   X XXXX XX   XXXXX  X XX   XXXXXX X XXXX XXX   X  XX   X    \",\n            \"X XXX X XX XX    XX    XX  X XX XXXXX XX    X  XX XX    XX  XXXXXX XX\",\n            \"X XXX X  XXX   X  XXX XXX   XXX XX   X X XX  X   XXX  XXXX      XXXXX\",\n            \"X XXX X  X X   X XXXXXXXXX  X X XXX   X X XX XX  XX  XXX X   XXXX    \",\n            \"X     X X X XXX   XX  X XXXXX X X XXX X     X X XX  XX X X X    X    \",\n            \"XXXXXXX  X X  XX XXX X XXX X  XXXXX XXXX    XX  X X  XX X      X XX X\"\n        };\n        private static readonly string[] Modules67 = {\n            \"XXXXXXX  X  X  X XX   X     X XX X   X    X X   XX     X  X XXX   XX X    XXXXXXX\",\n            \"X     X  XXXX XXX X   XX   XX   XX XXXX  X XX X X XX X X    XX X X XXXXXX X     X\",\n            \"X XXX X XX X         X   X X X XXX X X     X XXX  XX X X   XX  X XXXXXX X X XXX X\",\n            \"X XXX X    XXXXXX  XXX     X X    XX X XXXXXXX       XX X      XXXX X X X X XXX X\",\n            \"X XXX X XXXXXX  XX  X XXXXXXXX    X  XXXXXX  X  XXXXX    X X XX   XX X    X XXX X\",\n            \"X     X XXXXXX    X XXX X   XX X XX  X      X   X   XX  X XX     XX X  X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          XXX XX  X XXXXX   X   X   X     X    XX   XX XXXXXX X     XXX X        \",\n            \" X  X X XXXXXXX X    X XXXXXXXXXX X  XX  X XX  XXXXXX XX    X    XX X   XX XX X  \",\n            \" X XX  X XXX  X XXXX XX   XX XXX  X XX X XXX X XX X   X   X XXXXX X   X  X XX X X\",\n            \" X X XX X XXXX XXX  XX  XXX X XXX X    X  XX XX   XX XX XXX  XX X XX XXX XXXXX XX\",\n            \"XXX     XXXXX XXX X XX XXX XX  XX   XXXXX XX   X  XX XX  X XX X  X  X  X         \",\n            \"XXX XXX X XXXX XX   X XX  X XXXXX        X XX  XXX X  XX    XX  XXX XXX  X  X XXX\",\n            \"   X X XXXX XX  XXX X  X X    XX  X XX  X  X   XX X   XXX X XX XX    X     XX XXX\",\n            \"X X X XXX X XX XXX XXXX XX XXXXXX     XXXX X   X   XX   XXXXXXXXX XXXX XXX  X  XX\",\n            \"XX XX   XXX  XXXXXXX XXXXX   XX  X XXXX XX XXXX  XXX XX  X  XX X X    X  X XXX  X\",\n            \" X X  XXXXX XX XX   X  X XX X    XX X  XXXXXXXX XX  X  X X  XXX    X XX  XXX X   \",\n            \"XXX    X XXXXXX XXXXXX X XX X    X   X X XX XX XXX     XX    XXX   XXX   XX    XX\",\n            \"X     X X   X  XXX  XX X X X X   X X  XX     X X XXXX     X  XX XXX  X  XX XXXXXX\",\n            \" XX  X XX X X  X XXX X  X X X X   XXX  X X XX    XX  XX XXXXXX    X XXXXX       X\",\n            \"  X   X    X XX   X XXXX  X  X   XX X X XXX  X  XX      X X       X X X  X  X X  \",\n            \"X   XX  X     XXX  X  X XX  X XX  XX XXX  X  X  X   X     X X X X        X XXXX X\",\n            \"XX  XXXX  X XX   X X XXX X X X  XX       XX X X X  XX XXXX X  XX XXXX   XX  X    \",\n            \"X X    X XX X   X X X  X  X XX XX XXXXXXXXXXXXXXX  X X   XX X  X  X  XXX   XX  X \",\n            \"XXX XXXXXXX  X     X X  XXXXX  X XX X X X XX   XXXXXXX X  X XXX X XX   XXXXXXXXXX\",\n            \" X XX   XXXX XX XX  XXXXX   XX X X   XX  X  XX XX   X XXX X XX XX  XX   X   XXXXX\",\n            \"    X X XX X X XX    XX X X XX XXXXX     XX  XX X X X          XXXX X XXX X X XXX\",\n            \"X  XX   X   X X   XX X  X   X XXX X X X XXXX  XXX   X X XX  XXXX X XXX XX   X   X\",\n            \"    XXXXXX X  X  X   XXXXXXXXX  X    X X XX  XX XXXXX   X X X      X XXXXXXXX    \",\n            \"X        XX    XXXXX  XXXXX   XXXXX XX XXXX X    XX       X X XX      XXX XX XX X\",\n            \"XXXX XX  XX  X   XXX  X X   XX XX XX XXX XXXXX X  XX XXX    X X X XXXX  XX XXXX  \",\n            \"XXXXXX XX  XXXX X X XX   X XXXX XXX XX  XXXX X X  XXXXX  XXXX  X   X XXX X X   X \",\n            \" X  X XXXX   XXX X XXXX  X XX  XX  XX XXX X   X   X    XX   XXXX XXXX X X    X XX\",\n            \"XXXX X  XXX XXXX XX   X X XX     XX XX XXX  XX XXXX X   X  X X XX XX     XX X XXX\",\n            \"X    XX  XXX   X  XXX X   XXX X  X  X  X XXXXX  X X X X XX XX   X   XX  X   XX X \",\n            \" X X X  XX X X X XXX X X XXXXXX XXXX    X X X   XXX   XX XXXX XX X  X    X  XX XX\",\n            \" X  X XX  XXX XX   XXXX  X     XX  XXXXX X  X X X XXXX XX X XXXX  XXXXX  XXX   XX\",\n            \"   X   X    XXX XX    X  XXXX    XXXXXX X X  XX  X   XX X X  X XX X X XXXXX  XXX \",\n            \" X   XX XX  X X   X  XXXX  X  X  X XXXXX X XXXXX X X XX  X XX     X  X XX XXX XX \",\n            \" XX XX XXX X  X XX   XXX XX    XXX  XX XX X XXXX XXXXX  XX XXXXXXXX X X  X X     \",\n            \" X XX XXX XXX X  XXX X   X  XXX   X XX X X  XX        XX X  XX  XX XXX XX  X  XXX\",\n            \"  XXXX   X  X X    XX X  XXX XXXX X    X  X     X X X  X    XX    X   X X XX     \",\n            \"X X  XX X X X  XXX XX  XX   X X  X X  XXXX  X X   X XX XX  XX XXX     XX X  X  X \",\n            \" XX X  XXXXX XX XXX X  X XX     X  XXXX X X X  XX     X XXX  X X  XXXXX  X X X  X\",\n            \" XX  XXX XXXX   XXXXX X   X XX  XX XX  XX X X X  XXXXX XX    XXX X XXXXX X X X XX\",\n            \" XXXXX  XX  XXX X    XXXX   X X XXXXXXXXX X  XX  X   XXXX X XX XXXXXX   XXX  XX  \",\n            \"  XX XX  XX   XXX  XXX X XX   XX  X     XXXXXXX    X XX   XX XX  XXX    XXXX XX  \",\n            \"X XXX     X X X XX X X X X XXX XXX  XXXXXX XXXXXXXXXXX  XXX X  XXX XXXX    XXX   \",\n            \" XXXXXXXXX X  XXXXX X XXXXXXX      XXX    XX X XXXXXX XXXX    X X XX  X XXXXXX X \",\n            \" X XX   XXXXX X     XXXXX   XX XX XX    X   X  XX   X  XX XX XX     X XXX   X XX \",\n            \"X  XX X X X  X XX XXXXXXX X XXX   X X X XXX   XXX X XX   X X  XXXX XXX  X X X    \",\n            \"XX XX   X  X    X X X  XX   X       X  XX X    XX   X XXXX XXX    XXXXXXX   XX X \",\n            \"XXX XXXXXXXXX XXX    XXXXXXXX XX X XXXXX X X  X XXXXXX XXX  XX   X XX   XXXXXX  X\",\n            \"X    X XXXX XXXX  XX X X X X XXX XXX X   X   XX      XX X    XXX XXXX      X X XX\",\n            \"   X  XXX    X X X X  XX XXX XX X X  XXX  XX XXXXX   XXXX  X X X XX XX X X XXXXX \",\n            \"XXX       X      X XX X X     XX  XXX XXXX XX     XX   X  XXX   XX XX    X XX X  \",\n            \"  XX  XXX X X XXX XXXX  XXX  X XX X    X  XXX X  XX XX XX XXXX    XX    X XX  X X\",\n            \" X  X  XX XXXXXXX    XX XX X XX XXXX     XX XXX XXX XXXXX XX X        XXXX X  XXX\",\n            \"X XXXXXXXX X   X XX  XXXX  XXXXX X XXX X  XX XXXX XX XXX     X   X XXX X       X \",\n            \"XX XXX   X XXXX    XX   XXXX  X X X  X       XX    XXX X XXXXXXX XX XX XXXXXXX XX\",\n            \"XX XX X XXXXXXXXXX XX XX X   XX   XXX    XX XX  X   XXXXX  XXX    XXX X   X XXXX \",\n            \"X XXX      X  X X    X  X  X  XX XX  XXX XXX   XX     XX  XX X      X  X X X X   \",\n            \"X  X XXX X XXX    X     X  X    XX XXX X  XXX XXXX  X X  X  XXXX X X   X X   XXX \",\n            \"  X XX    X   XXX  XXXXX    X X X X  X XX  XXXX   XX X  XX X X   XX XX  XX XX X X\",\n            \"XX X  XX   XXXX XX       X X XXXXX  XXXXXX   X  X XXXX XX       X  XXXX  XX X X  \",\n            \"X X     XX X XXXXX X X X X     XXX X       X    X         X XX    X     X     X  \",\n            \"X X XXX    XX   X XXXX  XX XXX X  X XX  X     XXXX X   XXXXX X  XXX    XX      X \",\n            \"   X     X XXX X XXX       X X  XX    X    X  X   XX X XX  XX XX  XXX XX   XXX   \",\n            \"XXX X X X XX   XXX        X  XXXXX  XXX  X XX X  XXXX  XXXXXXX  X XXXXX   X XXXXX\",\n            \"XX XXX     XX  X  XX XX X XX  XX   XXXXX X XXX  XXXX    XX X XX X X  X  XXXX  X  \",\n            \" XXX  XX  XXXX XX XXX XXXX XX  XX XXXX X  XXXX XX XX  X  X  XXXXXXX  X XXXX X  X \",\n            \" X   X   XX  X     XX  XXX    XXX   X XXXX   XX  X XXXX XXXX X  XXXXXXXX  XX X X \",\n            \" XXX  XXX XXXX  XX      XXXXXX XX      XX  X X XXXXXXXXXX     X X XXX   XXXXXXX X\",\n            \"        XXXXXXX XX X  X X   XXXX   XX       X XXX   X  X  X XXX X X   X X   XX   \",\n            \"XXXXXXX  XX X  XXXXXXXXXX X XXX   X XX  XXX XX  X X X X XXXX XXXX XXXXXXX X XX   \",\n            \"X     X   XX  X X XXX  XX   XXX XXX X XXXX    X X   XXXXX  XXX          X   X  X \",\n            \"X XXX X X X  X   XX X   XXXXX  XXX  XXX   X XX XXXXXX XXXXX X X  XXX XXXXXXXX  X \",\n            \"X XXX X  XXXXX X       XXX  XX  X    XX  X  X XXXX  X XXXX X XX    XXX       X XX\",\n            \"X XXX X  XXXXX XXX  X XX X X  XX X XXX X    X XXXXXXXXX  X   XX  XX XX  X   XX   \",\n            \"X     X X   X X X XX XX XX  XXX  XX X X   XX XX X  X X  X X  X   X   XX    XXX   \",\n            \"XXXXXXX   X XXX XXX X  XX XX  X   X XX     X     X    X XXX X X XXXX    X X XX  X\"\n        };\n        private static readonly string[] Modules68 = {\n            \"XXXXXXX X XXX   X X  X X   X XXX  XX X XXXX XXXXXX XXX X X XXXXXXXXX      XXXXXXX\",\n            \"X     X XXXXXX XX XXX XX XXXX  X X XX    X    X XX X X  X   X XX X   XXXX X     X\",\n            \"X XXX X  XX X   XXX  XXXXX XX XXXXX XX  XXXX X  X XXX XX  X    XX  XXXX X X XXX X\",\n            \"X XXX X  X   X  XXXX   XX X   X XXX XXX X  X   XX XX     X XX X X    XX X X XXX X\",\n            \"X XXX X   XXX XXXX X XXXXXXXXX XXXX     XXXXX   XXXXX  XX  X   X  X X     X XXX X\",\n            \"X     X  XXXX X   XX XX X   XX  XXX   X    X    X   XX X  XX XX  XXX   X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X    X XX  X   X   XXX XXXX   XXX   XX X   X XXX     XXXXX X  X         \",\n            \" X    XXX XXX  XX  XX  XXXXXXXX  XX    X X   X XXXXXX X XX  XXXX XXX X  XX     XX\",\n            \"   X     X X XX  XX  X   XXXXXX     X  XXXX  XXXXXX X XX    X XX  XX       X  XXX\",\n            \"XX XX X X    X X  X XXXX XX  X XX  XX  XXX X X XX XXX   XX XXXX  X X X  XXXX  XXX\",\n            \" XXXXX  X     X  X  X X  X   XXXXXXX XX  X X XX X X X     X   XXX X XXX X  XXXX  \",\n            \"XXXX  X XX  XX   X  XX    XX  XXXXXX   XX  XXXX XX  XXXX XXXXX X  X X  X X X XXXX\",\n            \" XXX X   XX X X XXXX   X  X   X X X X X X   X  XXX    X   X X XXX  XXX   XXXX X  \",\n            \"  X  XXXX  X X X  XXXX X X X   XX XXX XX  XX  X X  X XX XX   XXX X XXXX  X   XXXX\",\n            \" XX XX    XXXX  X  XX X  XXX    X    X XX XX  XXXX      X  X XX   X XXXXXXX X X  \",\n            \"  X   X   X X X X  X X X   XX  XX X XXX XXX   X X XXX   X   X  X    X X      X XX\",\n            \"X       XXXXX   XXX  X X    X  XXX    XX XXX X XX X            X     X           \",\n            \" XX   XX     XXXXXXX X XX XX XXXXX XXX X  XXXX XX  XX XXX X X   XX XXX    XXXX   \",\n            \"XXXXX  XXX X    X  X  XX  XX X   X      X XXXXXXXXXXX   X    X XXX  X      XXXX X\",\n            \" X X  XXXX X   X  XX  XX X X X XX X XX XXXXXX   X XX   X XX  XXX  XX XX   XXX XXX\",\n            \"XX   X XX X  XXX        X     X    X  XXX XX XX XX     X    XXX    X  X    X XXXX\",\n            \" X    XX   X X  X XX X  XX XX X XXXXX   X   X  X   X X XXXX X XXX  XX XX X   XX  \",\n            \"  XXXX X   X   X X  XXX X XX  XXXX   XX    XX       X X    X    XX      X    XXX \",\n            \"XXXXXXXXX  X X XXX X  XXXXXXXX X   XX XX XXX XX XXXXX  X X XXXXX XXX XX XXXXX XXX\",\n            \"  XXX   XXXX    XX X XXXX   XX  XX       X X X XX   X X   X X XXX       X   XXX  \",\n            \"X   X X XXX XX X XX  X XX X X XXXX  X   X    X XX X XXX   XXX  X    X   X X XX XX\",\n            \"  X X   XX X   X X XX  XX   XX X XXX   XX  XXXX X   XX     X X    XX    X   XXX  \",\n            \" XXXXXXXX  X X X X XX XXXXXXXX X X    X  XXXX X XXXXX  X XX XXXX    X XXXXXXX  XX\",\n            \"XXX    XXXX  XXXXXX X XXX     X  XX X XXXXXX           XX X XX X   XX XXXX X XXX \",\n            \"   X XXXXXX X X  X  X X  XX XXX   XXX  X X   X XXX X X  X    X  X    X    XXXX XX\",\n            \" XX    XXXX  XXX X  X XXXX      X  X X X   X  X X X             XXXX    XX  XXXX \",\n            \"  XXX X          X    X   X X    X XXX  X XXXXX  X X     X  X    XX  XX XXXX X   \",\n            \"X XXXX XXX  X XXXXXX    XXXXX  X X  X  X X XXXXXX X    XX XX   X  X   X   X   X X\",\n            \"    X X  X  X  XXX XX  XX XX X   XXX   XX  XXXXX  X  X  XXX      XX XXXX      XX \",\n            \"XX  X   X X XX  X  X  X XXX     X   X  X X  XXXX XXXXX X      X X X XXXXXX X  XXX\",\n            \" X X XXX X  X X XX XX  X X XXX XXXX XXX X   XX XX X    XXX XXXX XXXXX  X XX XX XX\",\n            \" XXX    X   X   XX XX X    XX  XXXXXX   X XXXXX   X  XXX  X   XXX XX  XXX    XX X\",\n            \"XX  X X XXXX  X XX   X     XXX   XX  XXXX XXXX  XX XX    XX     XX   XX   XX X X \",\n            \"XX XX  X    X  XX X X X XX X XXX   X XX XX    X XX  X X      X  X    XXXXXX  XX X\",\n            \"  X X X  XXXXX X XX X     XXXXXXXXX X X  X X     XXX  X X   X XXXX     XXXX   X  \",\n            \" X XXX XXX  XX        X    X XX   X  XXX  XXX   XX  X   X   X X   XXX X XX X   XX\",\n            \" X   XXX  X  XXXXXX    X XX X  XXX XXX XXXXX  X XX  XXX    X X XX XXX XXX X X X X\",\n            \"XXXX X XX   XXXX    XXX XXXXXXX XXX  XXX X  XXX    XXX  X  XXX  XX XX  XXX  X X X\",\n            \"   X XX X XXXXXXXXX  XX  X XXX X   XXXX X XX XX     XX   X       X    XX  X  X   \",\n            \"  XX X XXXX X X    X X XXX    XXXX XX XX  XX X      XXX X   X  X XX X X X X XXXX \",\n            \"X XXX X  X XX XX XXXXXX XXX XX X   XX      XXX XX  XX       XXX X  X  XX XXXX    \",\n            \"  X  X   X X  XX  XX  X XX    XXX XX XX   XXX    XX   X X  X      XXX  XX     X  \",\n            \" XX XXXXX X   X   X XX  XXXXXX   XX XX XXXXX  X XXXXXXXXX XX  XX XXX X XXXXXX  X \",\n            \"  XXX   XXXXXX     X XXXX   XX    XX XX X  X   XX   X     XX       X  XXX   X X X\",\n            \"   XX X X  XXX X X XXX  X X X      X  X         X X X X  XX X XX  XXXXXXX X XXX  \",\n            \" XX X   XX  X XXXX   X  X   XXX XX X  X XX  XX  X   XX X     XXX X X  X X   X XXX\",\n            \"X  XXXXXX XXXX  X  XX XXXXXXX X X  XX    X  XXX XXXXXX      X XX X   X  XXXXXX X \",\n            \"XXX  X   XX X  X  X XX X  XX XX XXXX  X  X XXXX  XX  XXX       X XX      XXX X   \",\n            \"XXXX  X     X XX XX X XXX  X X X  X X  X    XXXX  X  X     XX XX X X X XX XXXX  X\",\n            \" XXXXX   X XX  XX XXXX X   XXX X X    X   XXXXXXX X XXXX X     X  XXXXXXXX   X   \",\n            \" X    X  XX XX  X X     X  X X   XX  XX   X  XX    XXX   XXXX XX  X XX  XX    XX \",\n            \"        X  XX XX   X X  X  XXXXXXX X X  XXXXXX  X X  XX X  X    X  X   XX  XX X X\",\n            \"  XX  XXXXX X  XX    X     X   X XX  X XXX X X    XXX  X  XXXX  X XXXXX X   XXXX \",\n            \" X        X  XXXXXXXXXXX XX XX  XX XXX XXXX    XX     XX     XX X   X X  XX   XXX\",\n            \"XX   XX X   XXX    XXX   X XX X  X  X  XX X X XXX  X  XXXXX XX XXXXXXX X  XX  XX \",\n            \"XX XX  XX  X X  X  XXX  XXXX  X XXX    X XX X  XXXX   X X XX  X    X   X  XX X XX\",\n            \"   XX XX XX  X  XX    XX   XXXX XXX  X XXX XX    X   X   XXX XXXX XX  X XX  X  X \",\n            \"X  XX   XXXXX   XXXX  X X XXXX   XXXXXX XXXX  XXX     X     XXXX       X XX XX   \",\n            \"X X   X XX XX  XXX XXX    X  XX     X   XX XX   XX  XX   X   XXXX     X    XX XXX\",\n            \"XX     X X X   XXX  XX X  X      X X XX     X   XXX    XX X X X   XXX   XXX   XXX\",\n            \" X  XXXXX  X XX X    X    XXXXX X X   X X XXX XX  XX  X  XXXX X XX XX  X XX   X X\",\n            \"X   XX    X  X  X  X XXXX   X X X XXX XXXXXX X XX X X XXXXX   X XX XXX  X     X  \",\n            \"X  XX XX XXX XX XX XXX   X X XX     X  X X   XX     X     XXX XXX X   X  X XXXX  \",\n            \"X  X X X  XXXX XX X  X  XXXXX X   XXX XXXX  XXX X XXX  XXXXX  X   XX XX X XXX XX \",\n            \" XXX  XX     X X X XX    X X XXXX    X XXX XXXX   XXXX   XXX XXX     XX  XX  XXX \",\n            \" X   X     XXX XXXXXXXX  X XXX XXXXX  X   X    XXX      X   XX X   XX   X X X XX \",\n            \" XXX  XXXX  XX X     XXXXXXXX  XXXXX     X X  X XXXXX XXXXXX  XX XXXXXXXXXXXX X X\",\n            \"        XXXXX   XX  X X X   XXX X  XXXX    X  XXX   X   X X X   X XXX X X   XX XX\",\n            \"XXXXXXX XX X   X   XXX  X X X      X X      XXXXX X XX  XX  XXXX X XXX  X X X X  \",\n            \"X     X  XX X  XXX X X  X   X     XX    X X XXXXX   X  X X   XXX XX XX XX   XXXXX\",\n            \"X XXX X  XX   XX XXX X  XXXXX       X  X  XX   XXXXXX X   X XX X XX X XXXXXXX   X\",\n            \"X XXX X  XXXX XX   XX  XX X XX X         X X  XXX X X X  X X         X   XX  X   \",\n            \"X XXX X  XXX  XXXXXX  XXX XX    XX X  XX  XX  XX   XXX XXX  X    X X X   XX XXXXX\",\n            \"X     X XXXX  XX X X   X X X       X  XXXX X   X    X X XX XXX XX X    XX     X  \",\n            \"XXXXXXX  XX X  XXXXX X XXX    XXXXX X XX    XX    XX  XX  X XX XXXX XX  XX XXX X \"\n        };\n        private static readonly string[] Modules69 = {\n            \"XXXXXXX        X XX  XX  XXX X X    XXX  X   XX  XXX XX  XXX XX X     XXXXXXX\",\n            \"X     X X XX XX   XXXX X X XX   X   X X XXX X X XX X XX XX X  XXX X X X     X\",\n            \"X XXX X X XX    X XX  XXXX X   X X X X X   X X X  XX X X   X XX     X X XXX X\",\n            \"X XXX X X X XX XX X   X XX XX X XXX  X XX XX   X   X XX  XX XX      X X XXX X\",\n            \"X XXX X X  X XX  X   XX XXXXXXX XXXXX XX XXXXXXXXXXX X   XX XX X  XXX X XXX X\",\n            \"X     X XX XX   XXX XX XX   XX X X    X  X XX X   XX  X  XX XX   XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          X      XX X   X   X   X XXX XX XX  XX   XXXXX X   X   XX           \",\n            \"  X  XXXX  XXXX    X XXXXXXXXX X XX   XX   X XXXXXXX XXXX XXXXXXX XX X XXXXX \",\n            \"  X XX X  X   XXXX X X    XX X  XX   XX    X XX X X     X X    X           XX\",\n            \"  XX  X X XXX  XXX  X  XX  XX    X X XXXX   X  XXX   X   X XXX XX  XXXXX  X X\",\n            \"XX  XX XX X XXX XXX   X    X     XX  XX  X   X X X X   XX XX  XXXX XX X      \",\n            \"X X  XX X     XXX X X  XXXXX X X  XX X XX X XX  XXXXXX X X XXX X   X  X X  XX\",\n            \"  X X   X   X X XX  X X XXXXX   XX XXXXX  XX  XXXXX   XXX X   XXX   XX X     \",\n            \"X   X XXXX  X  X  X    X XX  X X    XXX   XX XX   XX    X XXXX X      XXXXX X\",\n            \"  X     XX XX X X  X  X    XX XX X  XXX  X XXX     XX   XXX X X X X X XX XXX \",\n            \"   XXXX XX X X  X   X    X X X X    X X XX XXXXXXX XXXXXXXXXXX XXXXX X XX X  \",\n            \"XXXXX   X  X XXX XXX  X      XXX XXX  XX   X  XXXX X   XX XXX   X    X     XX\",\n            \" XX X X  X  X      X XX X XXX    XX X     XXXX X    XX  XX XXX XXX XX X  XX X\",\n            \"X X XX X X X   X X XXXX XXXXXXXXXX   X X X X   XXX   XX X   X  XXX XXXXX X  X\",\n            \"X X  XXXX    XX X XX   X X  XXX  X  XX   XXXX  X X XX XXX  XX XXX X   XX   XX\",\n            \"XXX  X    X  XXX X XXX X     XX    XX X  XX XX XXX X   X  X X  XX X  X   X   \",\n            \"XX  XXX X  XX XX  XXXXX XXX X X    X            X XXX   XX XX     X   X  X  X\",\n            \"X X XX X X   X XX  X X  XX X  X X X X XX XX XX  XXX X  XX   X  XX     X  X  X\",\n            \"XXX XXXXX   XX    X XX  XXXXX  XXXX X  X XX X XXXXXX   XX  XXX X XXXXXXXXX  X\",\n            \" XX X   X X    X    XXXXX   X    X X  X  XX X X   XX  X       XXX  XX   X X X\",\n            \"X  XX X XX  X XX  XXX XXX X XXX  XXX X  X XXX X X XX X XX XX X  X  XX X XXXXX\",\n            \"   XX   XXX X XXXXXXXX XX   XXX   XXXXX XXXXXXX   XX   X  X XX XXX XX   XX X \",\n            \"X X XXXXX X X XXXXX X XXXXXXXX X XX X   X X  XXXXXXXX XX XXXXX X   XXXXXXXXXX\",\n            \"X XX X   X    XXXXX  XXXXX XX  X   XXX  XX  X XXXXX X  XX   X X X XXXX X    X\",\n            \"X  XXXXX X  X    X   XXXX XX X XX XX X X X  XXXXX  XXX XXX XXX  X XX XX X X X\",\n            \"XX X   XXXXX   X XXX  X X XXXX X X  XX  XXXX XXX   XXX  X XXX XX  X  X  X  XX\",\n            \"XXX XXX X X X XX  XXXX X          XX   X X XXX     XXXXXXXXXX XX  XX  X X  XX\",\n            \"X   X    XX XXXX XX  X X X XXX XX X   X XX   X  XX X       X  XXX X XX XXX  X\",\n            \" XXXXXXXX X  XXX X  XX XXX X X X  X  XX  X X XX    XXX XXX X X X  X X X  X  X\",\n            \"   XXX  XX XXXXXXXXX    X   XX XXX X  XX X XX X   X X X X XXX X XXXX X X X XX\",\n            \" X X XX  X  XX XXX XXX  X XX   XX XXXX   X XX XX  XXXX X X X  XX   X X  X  X \",\n            \"  XXX   XX  X      X  XX XXX  XX X XXX XXXXXXXXXX       X X X     X        XX\",\n            \" X XX X X  X   X    XXX X   XX  X XXX  XXXX XX X X X X  X  X X  X  X XX XX XX\",\n            \" X X X         X XXX XXXX  X  XX   XXXXXX  X XX  X  X   XX X  X XX X X XXX   \",\n            \"X X   X X   X XX X XX XX   X XX    X   X XXX X XX  XXX XXXXXXXXX  X  XX XXXX \",\n            \"   X       X X X  X X    XXX XX  XX XXXX    XXX        XX  XX         XX X  X\",\n            \"X  XXXXXXX X XX X XX     XXXXX XX    XX  XX X X XX XX X    XX  XX       X   X\",\n            \" X X X      X X   X   X    X  X  X XX X XXXX X    XXX  X X X   XX  X X XXX XX\",\n            \"      XXXX X XX XXXX  XXX X   X XX XXXX   XXXXX   XXXXXX  XXX XXX  XX X XX  X\",\n            \"X X XX  X    XX XX  X X XX XX X      X XX     X  X     X   X   X  X    X   XX\",\n            \" X XXXXXXXX     XX  XX XXXXXXXXX  X  XXX XXX  XXXXX   X  X    XX X XXXXXX   X\",\n            \"XXXXX   X  X X X XXXX  XX   XX  XXX        XXXX   X X XX X  X XX  X X   XX XX\",\n            \" XX X X X    XX XXXX   XX X XXX  X X  XXX  XXXX X XX X X X XX  XX X X X XX XX\",\n            \"XX  X   XX X  XXX  XXX XX   X  XXXXX   XXXXX  X   X     X         X X   X  XX\",\n            \" X  XXXXXX X  X XX  X  XXXXXX X XX  XX    XX XXXXXXXX  X  XX  X XX  XXXXXXX X\",\n            \"  XX    X X     XXX  XX XX XXXX  XX    X      X   XXXX XXXXX XXXX XXX XX   XX\",\n            \"  X   X   X XXXXX   X   XX   X XXX X X  X  XX     XXXXXXX  XXX XXXX X X    XX\",\n            \" XXXX  X XX  X    X   X XXX XXX X XXXX X      XXXX X  XXX X   X     X XX  XXX\",\n            \"   X XXXXXX  XXXX XX  XXX X  XX X X  XXX XX  XX   X    XX X X    X XXX XX X X\",\n            \"X XX X XX   X X X  XX X   XX  X  X   X XXXX X XX   XX  X  XXXX X       X X X \",\n            \"XX XX XXXX  X XX  X   XX X X X X XXX       X      XXXX X X XXXXXX  XX XX  X X\",\n            \"XX  XX X X  XX  X  XXX   X XXXX    X X   X   X XXXX X XXX     X X   XX X X   \",\n            \"   XXXX XXXX XXX X    X XX  X X  X   X  X XXXXXX  XX   XX X X X    XXXX   X X\",\n            \"  X X   XX    XXXX  XXX  XXXXX  X   X X X  X XXXX  XX  XX  XX XXX    X X    X\",\n            \" X   XXXX X    XXXX    X  X  XX    XX XX  X XXXX  XXX XXXXXXXX XXX XXXXX X XX\",\n            \"  XX X XXXX XX    XXXX X   X XXX XX X  X XX X X X   X X    X  X    X XXX   X \",\n            \"XXXX  XXX     XX X  X      X  XXXX  XX X  X XXX  XX     X    X XX  X XXXXXX X\",\n            \"    XX X XX XX X  XXXXX   XXXXXXX XX  XXXX XX X XX XXX  X XXX  X    X XXXX  X\",\n            \"X XXXXXX XX  XXXX XX X X X X      XX X  X    XXXXX XX XX X XX  XXXXXX XX XX X\",\n            \"       XX XXX X   XXX XX     X XX     X X  XX     X   X X XXX X X XXXXX  X XX\",\n            \" X  XXX  X  X    X  XXX X  XXXX  XXX X  X   X XX X  XX XX  XXX X  XX X X  XXX\",\n            \"    X  X   X   XXX   XX  XX   XX  X X  X     X X X X    XX XX   XXX   XX X   \",\n            \" XXXX XXX X  XX  XXXX   XXXXXX    XX X X XXXX XXXXXXXX XX  XX  X XXXXXXXXX XX\",\n            \"        X  XXX X  X   XXX   XX XX  X  X X   XXX   XXX X X X   X X XXX   X X X\",\n            \"XXXXXXX X  X XX   X   XXX X X   XXXXX  XX X  XX X XXXX XXX  X XXX  XX X X XXX\",\n            \"X     X X  XXXXX  XXX X X   XXXX  X X XX    XXX   XXX XXX   XXX XX XX   X   X\",\n            \"X XXX X  X    XXXXX XXXXXXXXX    XXXX X X  XX XXXXXXX  X  XXXX X  XXXXXXX  XX\",\n            \"X XXX X  X  X  XXXXX XXX  XXX XX  X XX  X X XX    X X   X      X     X XXXX  \",\n            \"X XXX X XXX  X X XXX XXXX  XXX   XX XXXXXX    X X  XX  XX  XX X  X  X XXX XXX\",\n            \"X     X  XXXX XXX    XX     XX XXX XXXXX  X X XX  XXX  XXX  X  XX        X   \",\n            \"XXXXXXX   XXX   XX   XX X XX    XX    X X X X XX XXXXX X X XXXXX X  XX X  X X\"\n        };\n        private static readonly string[] Modules70 = {\n            \"XXXXXXX X  XX XX XXXX XXXXXXX  X X X      XXX  X XXXX   X   X X X  XX XX   X XXXX XXXXXXX\",\n            \"X     X XX X XX  XXX XXXXXXXX X X  XX    X   XX     XX  XXXX  X XXX   XX X   X X  X     X\",\n            \"X XXX X   XXXXX X X X      XXXXXXXXX   XXXXXX  X XX XX  XX X XXX X XX XX XXXX     X XXX X\",\n            \"X XXX X X X  XXXXXXX XXXXXXX  XXXXX XXXXXXXXX  X    XXXXX X   XXX  XX  XXX X XX X X XXX X\",\n            \"X XXX X XX X X  XXXXXXX X X XXXXXXX  X  XXX    X X XX XXXXXX  X X XX     XX  X X  X XXX X\",\n            \"X     X XX   XX X X  XXX    X   XXXX  XX XX  XX XX X XX   XXXX X X XX X    X   X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXXXXX X     X  XXXX   XX  XXX  XX X   X   X X   XX      X XX  XX X XX X        \",\n            \"   X  X  XXX XX  XXXX  XXXX XXXXXX    X  XX XX  X XXXXXXXXXX    XXX    XX   XX X   XXX XX\",\n            \"XX  XX X XX  X X   X X XXX   XXXX X XXX    XX XXXX XXXX X  X XXX X  XX   X XXXXX   X X X \",\n            \"X XX XX X X X  XX  X X  X  X X   XX  XXXX  X X  X   XX X  X XXX XX XX X X  X XXX   X  XXX\",\n            \"X XX   XX X      X XX  XX XX  XX    XXX X  X    X      X X  X  XXX   XXX  XXXX    XX XXXX\",\n            \" X  X XX XXXX      XX   X   XX X   X    X   XX  X   X XXX XXXX   X  X X   X X X  X  XXXX \",\n            \"X  X      X X XXX    X X XX  XX XX XX X    X X  XX XX XX X  XX      XXXXX  XXX  XX      X\",\n            \"XXXX  XXXXXXX    X X   X XXXX       XX     X   X XX XX  X X X X  X  X  XXXX X X XX      X\",\n            \"X XXX    XXX  XXX   XX XXX  XX   X    X XXX XXX XXXXX  X  XX X  XX   X  X X X XXXX    X  \",\n            \"XX   XXXXX XX  XX XXX  X   X X XXX XXX    XXXX  XX XX  X    XXX X XX XX  X    XX      X  \",\n            \" X X     X XXXXX X XXX XXX    X      X XXX XX XX   X XX XX X X X  XX X XXX     XX  X XXX \",\n            \"X XXXXXX   X X X     X XX   XX XXXXX  X X     X   XXXX  X   X XXX X  XX X  X XX   XXX  X \",\n            \" XX X   X XXXXX X   X X   XXXXX   X XX X X XX XXX X X XXXXXXXXX X XX   XX   XXX   X  X X \",\n            \"  XXXXXXX XXX   XX XX  X XX X      X XX XX   X X XXX  XXXX XXXX      X X  X    XXX XX XX \",\n            \"XXX X  XXX XXX XX  X XX X XX XX  X   X      XXXX   XXXX X X    X   XX   XXXX XXX XXX XX  \",\n            \"XX XXXX XX  X XXX  X  XXX XXXX  XX  X   XX XX XXXX  X  XX    X  X     XXX    XXX XX   X  \",\n            \"    XX XXXX  XX  X XXX  X   X     XX X X  XXXXXXXX  XX  X   XXXXX    X  XXX  X XXX X  X  \",\n            \"X X XXX XX XX   X XX  X  XXX X     X  XXX XX XXXX XX XXX X  X X   X X X XX        X     X\",\n            \"XXXXXX XX X X       XXXX X X XXXXXXX    X   X   X     X  X X  X  XXX X       X    XX X XX\",\n            \"  X X XX X XXX X     X XX XXX  X  X XX  XX XX XX  X   XXXX X     XX   X  XX X   X XXX XX \",\n            \"X          XXX   X X   X XX XXX XX X XX XXXX   XXXX    X   XXXX X X X X X  XXXXXX      XX\",\n            \"   XXXXXX    XX    XX XXX   XXXXX  X XXX     XX       XXXXX XXX  X X XX X     XXXXXXXXXXX\",\n            \"    X   XX X X  XXXX XX     X   X      XXXXXXXXX  X XXX   XX XX XX  X  X  XX    X   XX XX\",\n            \"  X X X X X XXX  XXXX   XXX X X XX XX XXXX     XX    XX X X XX  X           XX  X X XXXXX\",\n            \"X X X   X X   X      XXXXXX X   XX   X  XXX  X  X XXXXX   X XXX XX  XXXXX    XX X   XX X \",\n            \"  X XXXXX  XXXX XXXXX X XX  XXXXXXX XXXX  XX XXXX  XX XXXXXXX    XX   XXX   XXX XXXXX X  \",\n            \"XXXX X X X  XX  XXXXXX     XXXX     XX  XXXXX X  X XXX   XX  X   XXX XX XXX XX    XX  X X\",\n            \"    XXXX     XX       X  X   X X X XX X X XX   XXX  X   XX XXX X  XX    XXXX      X X    \",\n            \"X X XX XX    X  X  X  XX X XXXXX XX    X X X  XXXX  XXXX  XXX   X X   X X  XXX  X X X X  \",\n            \" X X XX XXX  X XX XXX  X X  X    X  XXX X   X    X XX  XX    XX      X  XX XXX    XXX  XX\",\n            \"  X X  XXX   X  XX XX X XXX X XX XX X X X X XX   X XXXX X  XX    X  X XX X     X XX XX X \",\n            \"    XXXX  X XX XX XX X XXX X XX  X    XX   X X XX X  X     XX X XX  X  X  XX X   XXX    X\",\n            \" XX         X  XX X  X    X   XX XXX X    XX     XX   XXXX  XX XXX  XX XXX X X  XX XXX XX\",\n            \"XX   XXX XXXXXX XXX X     XXXXX  X   X XX   X   XXXX XXX  X  XX  X X    XXX X XX X XXX  X\",\n            \"X  X   X   X X X XX X X X X    XXX XX  X  X  X  XXX X     XX XX X  X XX XX X  X  XXX   X \",\n            \" X    XXX X XXX XX X X XX  XXX  X XX  XX  XX  X    XX  X XX XXXX X    X X X X XXXX X   XX\",\n            \"     X X X   XX  X   XXXX  X X X  XX   X XX X X X X   X     X   XX X   XXXXX  X   X  X  X\",\n            \"  XXX X XXXX X  X   X  XXXXX X     X  X     X X   XX X  XX X  X  XX  XX XXXXX  X XX X X X\",\n            \"X X XX  XX XX  X  XX X XXX XX  XXX XXXX   X XXXXX  X XXXX XXXXX XXXX X  X   X  X X X   X \",\n            \"X X XXXXX  X   X  X XXXX XXX X   XXX X X XXXX  X X  XX  XX       XXXX XX X XX  XXX  XX X \",\n            \"       XXXXXX XX   X X   XX X  XXXX X     XX XX   X  X  X X XXXXX XX X   XXX     X    X X\",\n            \"X   XXX  X  X X  XX  X XX   X        XX  X XX  X  X X XXX       X         X   X  X XX  X \",\n            \"  XX   X XX X   XX   X  X  X  XXXXX XXX XX XX XXX  XXX X  XXX XXXX  XXXX  XXXXXXX XXX  X \",\n            \"  XX  X  X XXXX  X    XX  XXX XXXXX X    XX       X XX  X  X X X   X XXXX   XXXX XXXX   X\",\n            \"XX X   X   X XX X XX XXX   XXXXXX  X  X X  X  XXX   X   X XXXXX XXXXX  XX XXX XX    XX   \",\n            \"  XXX X X XX X  XX  X  X     XXX XXXX X  X X X   X XXXX  XX XXX     X  XXX X X  X  XXX X \",\n            \"XXX X   X XXXX  X X XXXX X XXX   X   XXXXX  XX  X  X X X  X XXXXX X  X XXX  XX XXX X    X\",\n            \"  XXXXXXXX  X X X XX XXXX   XXXXXX     XXXX X XXX    XXXXXX  X  XX X   X X X    XXXXXX XX\",\n            \"   XX   XX X X    XX   XX  XX   XXXX X X   X    X X XXX   X X X XX   XXX X XXX  X   XX X \",\n            \"    X X XXX XXX XX  X XX X  X X X XXX X  XX  XX     XXX X XX X  X X X  X  X  XXXX X X XXX\",\n            \" X  X   XX   X   X X        X   XXXX X XX X XXX XX X XX   X  XX  XXX XXX X X XX X   XX XX\",\n            \"XX  XXXXX   X     X XX XX X XXXXX     XX XX  X    X  XXXXXX  X   X XXXX X X   XXXXXXX  X \",\n            \" X     X X    XX  X  X X  XX  XXXXX X     X X   XXX XXX X XXXX XX XX    XX XX X  X X  XX \",\n            \" X XXXX   XXXXXX XXX   X XXX      X XXX XXX  XX   XX  X X   X  XX XXX  XX X    X XX  XX  \",\n            \"X X XX X  XXXX X XX   X  X XX X X   XXX XX    XXX  XXX   XXX     XXXXXX X  X X   X X   XX\",\n            \"    X XX XXXX X  X X X  XX XXXX XX X  X XXX     X     XXXX XXXXX   XXXX  X X    XXXXX  XX\",\n            \" X X X XX X  X    XX XXXX  X XXX   XX  X  XXX   X X   X XX XXX X X X   X XX    X XX    X \",\n            \" XXX XX      XX     X    X X X  X   XXXXXX    XX X   XXXX   XXX X  X XX  X    XXXX    X  \",\n            \" XXX   XXX    XX XXX XXX   X   X XX  X     XXX XX XX    X  X XXX   XXXX  X X  X X XX  XX \",\n            \"X X X X   XX XX X    X XX XXXXX  X X    X XXX X  XX X X  X  X   X   XX   X XXXX XX X X XX\",\n            \"   XX   X X X  X X XXXX  XXXXXXXXXXX X XXX X X XX  XXXXX  XXX  X X  XX  XXX   XXXX   X X \",\n            \" XXXXXX    XXXXX X XXXX    X XX  X X  XXX X X  X X   X    X X  XXX X XXX X  X   XXX X   X\",\n            \"XX X X XX X XXX  XXX XX    X  X X    X XXXXX   XXXX X XX X  XX  XX  XXX XXX  XX   X  X X \",\n            \" X  XXXX X  XX  XX  XXXXXX X  XX X     XXX XX  XXXX   X   XX   XX    XXXXX  XXXXX   X  X \",\n            \" XX    XXXXX   XXXXXX X X  X   X XX      X X X XX XXXX   X     X X XXX X XXXX XX X  X XXX\",\n            \"  XXX X X  X      XXXX     XXXX X X X   X  X  XX XXX    XXX   X   X   X XXX XXX XXX   X  \",\n            \"  X  X   XXX XX X X XX     XX        XXX X    X X      X  XX  XXXX   XX   XXXX XXXX    XX\",\n            \"X X X X X X XX  X   X   X  XXX     XXXXXXXXX X X  XXX X X XXX X X    X    X XX   XXXXX XX\",\n            \" X XX  XXXX     XX  XXX X XXXXXX  XX  XX     X XX   X X    XXXXXXX  X  XX  XX    XX XX  X\",\n            \"X XXX XX X X X XX    XXXX X  XXX X X XXX  XX     XX X XXX XXX  X   XXX    X XXX  X  X XX \",\n            \" XX     XXX   X    XX  X XXXX  XX X    XXX XX  XX X XX XX XXXXX X X XX  XX  X   X  XX    \",\n            \"X  X  X  X    X    XX      X X X X   XXX  X XX X X XX  X XXX XXX X  XX XX   X   X      XX\",\n            \"XX  XX   X   X X          XXXXXXXX      X X XXX X XXX  XX  X XXXXX XX XXX  X XXXX X XXX  \",\n            \"X  X  X    X     XXX XXX X  XXXXX XX    XXXXX   XX XXXXXXXXX X    X X XXX     X XXXXX  XX\",\n            \"        XX X XX    XX     XXX   X XX XXXX XX   XXXX XXX   XX XXX XXXXX X X XXXX X   XX XX\",\n            \"XXXXXXX    XX X  XXX XX     X X X X X XX  X X XX XX X X X X X X  X    X XX   XXXX X X XX \",\n            \"X     X  XX  X  XXX  X XXXX X   X X  X X X  X XXXXX   X   X XX XX  X X XX XXX   X   XXX X\",\n            \"X XXX X  XXX  XX X XXX  X XXXXXXXXXX  XXXXX X   X X XXXXXXXXX X XX  X X   X XXX XXXXXXXXX\",\n            \"X XXX X XX X XX XXXX  XX X  X XX   X XXX  XX XXXX XXXX   X  X X  XXX XXXX  XXX X  X  XXXX\",\n            \"X XXX X  X X      X XXX  X    XXXX X   X   XX  XXXXX XXX  X   XX  X X  XXXX    XXXXXX X X\",\n            \"X     X  XX    XXX   X XX   X  XXXX  X     XX   XX  X  X  XX XX XX    XXX       XX    XX \",\n            \"XXXXXXX   X  XX XXXX   XXX X XX      XX    XXXX XXXX    X    XX X  X     XX   XXXXX XXXX \"\n        };\n        private static readonly string[] Modules71 = {\n            \"XXXXXXX XX  XXX   X XXX X X XX       X X XX XX    X XX XXX XXXXXXX  XXX  X    XXX XXXXXXX\",\n            \"X     X   X XXXXX  X     XX  X  XXX    XX X    XX  X  X X   X XX     X  XX XX  X  X     X\",\n            \"X XXX X XX  XXXX XX XXXX      XXX         XXXXX  XXX    X X  XX X  XXX   XX  X    X XXX X\",\n            \"X XXX X  X XX       X       XX     X         XX XXXX     X XXX   XX  XX   X X X X X XXX X\",\n            \"X XXX X X  X  XXXXX   X XX XXXXXX X   XXXXXXXX X  X X XXXXXX X XX X XX     X X X  X XXX X\",\n            \"X     X     X  XX  XX XXXXXXX   X XXXX   X XX X   X  XX   XX  X  XX  XX XXX    X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X    XXX XX  X XXXX X   X XX XXXX   XXXX   X XX   X X  XXX  X XX X  X   X        \",\n            \"     XX      XXXX XXXXX XXXXXXXXX XX  XXX X X XXX X   XXXXX    X  X  XX X  X   X  X X X X\",\n            \"  XX    X  XX X XXX X X   XXX    X X   XXXX  X    X    X XX X   X XX  XXX X     XXX X X X\",\n            \"XX   XXX XX XXX X   X   XXX  X XX X     X   X   XXXXXX  XXX X  XXX   XX XXX  XX XX X X  X\",\n            \" X       XX XXXX XX  X X X      XX     XX X XX   XXX  X X    XX XXXXX XXXX  XXXXXXXXX   X\",\n            \"   XXXX   X XX X X  XX XXX XX    X   X XXX XX  XXX XXXX XXX X  X   XXXXX XXXXXXX   XX X  \",\n            \"    XX   X X  X  XX   X XXXXX   X X   XXXXXX  XX X   X X  XX X XXXX X         X X XXX  X \",\n            \"XXX XXXXX   X  XX  X XX  XX  X   XXXXX XXX X XX  XXX    XX XX XXX   XXX XXXX XX X XX   X \",\n            \" X   X XX   XX   XXX  X   XX  XXX XXXX X   X   X     XX XX  X XX  XXX XX X X X    XXXX XX\",\n            \"X XX XX    XXXX X X  X X XX  X     XX XX  X     X X X   XX  X  XX X X X   XX  X XX   X X \",\n            \"X X    XX  X     XX    X  XX   XXX  X X XXX  XXXXXX  X X   XX X     X  X  XX  X  X XX    \",\n            \"XXX X X  X       X X    XX XX   X X  XXXXX X XXX XX X  XXX XXXX XXXX  XXXX    XX XX XX   \",\n            \"XXXX X  XX   XXX XX XX XX X      X X X  X XXXX    XX X XX    XXX X X XX    X     X XXX  X\",\n            \"  X   XXXX  X  X   XXXX  XXX X   XX  XXX      X  XX XXXXX X XXXXXX    X   XXXX XX X X X X\",\n            \"   X X    X   X  XX X  X X  X  XX XXX XXXXXX    XXX    X X XXXX XXX  XXX    X   X   X  XX\",\n            \"X X XXXX    XX  X   XXXXXX  XX X    XXXXXX   XXXX XXX    X    XXX  XXXXXXXXX XX X X  X X \",\n            \"XXXXXX    X X  X XX      XXXX XXXXXXX X       XX  XXXXXX X      X XXX      X XX    XXX X \",\n            \"XXXXX XXX   XX XXXX  XXX  X    X X   XX XXX   X XXX   X    XXXXX XXXXXXXX  X X X XXX X XX\",\n            \" XX    XXX X   XXXX X   XX  X  XX   X  X XX XXXX   XXX    X X XXX  X  XXX  XX X  X  XX   \",\n            \"  XX XXX  X XX  XX    X X X  X X X XXX X   XXX    XXXXXXX X    XX X  X X XXX X  XX  X X X\",\n            \" XXXXX XXXX   XXX X XXX X  X   X  X X  X    XXX    XXXX XXX    X X X X X XX      XXXXXX  \",\n            \" XX XXXXXX     X     XXXXXXXXXXXXX X       XX X  XXX  XXXXX X  X X  X X XXXX  X XXXXX   X\",\n            \"XXXXX   X  XX XXXX  X X XXXXX   XX  XXX XX    XXXX XXXX   XXX  XXXXX X XXX    XXX   X X X\",\n            \" XXXX X XXXXX XX  X XX XX XXX X X   XXX X  X X  XX X  X X XXX  XXX X X X X XX  XX X X X X\",\n            \"  XXX   XX XX XXXXX      XXXX   X XXXX X      XX  X   X   XX XXX  X X      XX   X   XX  X\",\n            \"  XXXXXXXXX XXXX  XXXX XXX XXXXXX  XXXX XXXX    X    XXXXXX X  XX X  X  X  X  X XXXXX XXX\",\n            \"    X   X XX  XX      XXXXX    XXXXX  XX     X XX X   XXX  XX XXX   X  X   X  XXXX  XX X \",\n            \" XXXXXX XX     X   XXXX   XX X  X  XXX XX X XX XX XXX  X   XX X   X XX  X      XXXX XXXX \",\n            \" X XXX   X  X XXX X XXXXX X XX  X X XXX  XX XXXX  XXXX  XXXX XXXX  XXXX  XX XXXX XX  X X \",\n            \"      XXX XX    XXX XX     XXX X   XX XXXX XXX X    XX  XX X  XX X X   XX   X  X XX XX  X\",\n            \"X XX X XX XXXX X  XXXX X XXX X X   X  XX X  X XXXX      XXX    XX X XX  XX XXXXX   X X  X\",\n            \"   X  XX X XXX   XXX  X XX  X X   XX  X XX X  X X XXX    XX X XX    XXX   X X          X \",\n            \"X  XXX XXXXX XX  X XX XXXX XXX  X   X XXXX  XXXXX  XXX    XX  X   XX  X   X X XX  X   X  \",\n            \"X XX XX X XXX  XXXXX X   X  XXXXX     X X  X X  X    XX XXX    X X  XX  X  XX X X  XX XXX\",\n            \" XX     XX XX X  X X XX  X X  X    X XX    XX      XX XXXXXXX  XX X X X   X    XX XXXXX  \",\n            \"   X XX XXXXX XXX       XX  X  XXXX  XX  XX  XXX X  XX    XXX X    X XXXXXXXXXX X    X  X\",\n            \"X  XX  X  XXXXXXX X         X XX X  X   X   XX X  XXXX   XXX   X  XX XX  XX XX   X XXX X \",\n            \"  X  XX X    X X X  XXX XXX X    XX   XXXX  XX X  X X   X X   XXX X    XXXX  X X   XX XX \",\n            \" X X   X  X  XX XX  X X   X  XX   X    XXX X     XX X    X     X    X XX XXX XX X X XXX X\",\n            \"XX XXXX  X X XX   XX  XX     X XX XX  X  XX  X X  XXXX X     XXX XX  XXX  X X       X X  \",\n            \"XXXX      XX X    X X   X  XX X   X  XXX    X X XX X XXX XX     X   X   X     XXX   XX XX\",\n            \"XX XX XX   XXXXX  XX    XX XXX X X X  XX    XX   XXXXXX XX X X XXX X X X XXX XXX    XX   \",\n            \"X X XX X   X   X  X   XX    XX XX  X XXX  XXXX        XX X    X   X X   X X    XXX      X\",\n            \"  X XXX   X XXXXX    X    X  XXXX  XX  XX X  XXX  XX    XXX  X  XX X    X  X  XX    X  X \",\n            \"  X XX  XXX X  X X  X   XXX      XX XX X XX XX   XXX XXX X     X     XX  X   X  XXXX  XXX\",\n            \" X  X XX XXX  XXXX X X X XXX XX X XXXX X X  X     X XXXXX X X  X   X X XX X  X X X XX X  \",\n            \"   XX  X XXX  XXX  X  XXX X XXXXX   X   XXXX     XX  XX XXX     X  XX  X  XXXXX    XXXXXX\",\n            \" XX XXXXX  XXXXXXXX   X XX XXXXXX  X X  X XXXXX XX X  XXXXXX   XX    X       X XXXXXX   X\",\n            \"X   X   X X XX XXX X XX     X   X   XX  XXXX XXX  XX  X   XX  XX  X     XX    X X   XX  X\",\n            \"   XX X X  XXXXX    XX   X XX X XX  X XXX X    X   X  X X X  X X XX XXX   XXX XXX X X X  \",\n            \"X XXX   X XXX XXX X XXXXXXXXX   X   X X  X X   X  X X X   XXX  XX   X   X X X  XX   X X  \",\n            \"X XXXXXXXX  XXXX  XX   XXX XXXXXXX   X   XXXX    X X XXXXXX   XX X    X XX X  X XXXXXXX  \",\n            \"X XX    X   XX     XX  XXX        X  XXX   X X     XXX X XXX  X X   XX    X X  XX  XXX   \",\n            \"    X XX XX X X   X  X    X  X X XXXX XXX XX  XX XX  XXXXX XXX  XXX XX  XXXX X    XX  XX \",\n            \"  XX   X X   X  X    X XXX   X  XXXX XXX  X  X        X     X  XX  XX  X    X X   X X    \",\n            \"   X XXX    X XXX  X  XXXX    X X X   XX  X  XXXX  XXXXXX X XXX XX XX  X X  XX  X   X    \",\n            \"X X X    X XX XXXX  X    XX X   XXX  XX XX   XXX X XXX X  X   X X X XXX X  XXXX X  XXXX X\",\n            \"     XXXXX     X   X X    X  X X X  X   XX XXXXX  XX XX  X  X  XX   X X   XX  X      X X \",\n            \"X           XX   X  X XXXXX   X X X X XX  X    X X    XX X XX     X   X X X    X XXXXX   \",\n            \"XXXXXXXX XX   XXXX X    XXX X XX     X XXXX XXXX  XXXXXX   XXX XXX XX  X    X XXX       X\",\n            \"X    X  XX X    X XXX  XXXX    XX   XX    XX  X        X X      X X X XX XXXXX XX XXXX  X\",\n            \" XX   X  XX XXX X  XX  X    X X   X   X  XX XXX  X XX    X XX      X     X X X  X  XX  X \",\n            \"  X X    X X   XX   X  XXXX XX X XXXX X     XXX    X X  X XX  XX  XX   X   XX  XXX XX X X\",\n            \"  XXXXX X   X XXXX X  XXX X   X X    XX XX   X XX  X  XXXXXX XX X  XX XXX XXXXX  X  XXX  \",\n            \"X  X      XXXXX XX   XX  XX   X X X XXXX XX X  X X  XXXXX   XXX  XX    XX   X   X    X  X\",\n            \" XX XXXXXX   X X XX X  X X  X XXXXXXXX XXX   XX   X  X XX XX XXX XXX XXXX XXX XXX XX XXX \",\n            \"X XXX       XXXX X  X XXX    XX  XXXXXX X X  X X   XXXXX X  X X   X    XX X   XXX  XX    \",\n            \"X XX XX XX XXX X X  XXXXX        XX XXX   XX  X   X  XX XX  X XX X    XX  XX        XX   \",\n            \"X X  X     XXXXX  XX   X X      XX  XX  XXXXX X  XXX X XXXX       XX XX  XX  XXXX  X  XX \",\n            \"XX  X X X  X  X X  XX XXXX X XX X  X      X XX     XX X  XXXXXX          X XXXXXX   XX   \",\n            \"X  X   X  X XX X  X  X XX   X X  XX XXX XXX  X X X XXXX  XXX   XX  X      XXX XX X X XXX \",\n            \"X  X  XX   X XXX X  XX X X         X  X  XXXX       XX    X   X    XX   XX XXX XXX X X  X\",\n            \"XX  XX    XXXX  XXX  XXXX X    XX XXX  X X  X  X  X  XXXXXX XXX   XXXX      X  XXX X XXXX\",\n            \"X  X  X  XX    XX XX     X XXXXXXX     X  XXXXXXXX    XXXXX  X XXXX XX  X  XXXX XXXXX    \",\n            \"        X X X  XXXX  XXXXX  X   XX  X    X  XXX    X  X   X X   X     X X X    XX   X X  \",\n            \"XXXXXXX  X XXX X XX X X  XXXX X XXX XX    XX XXX   XX X X X XX X X XXXX X XX XX X X XX   \",\n            \"X     X X X X XXXX XX  X   XX   XXX X X  XXX XXX   X  X   X   X X X X  X X  X XXX   X  XX\",\n            \"X XXX X   X  XX     X  XXXX XXXXX X  XX X XXXX XXXXXX XXXXX XXXXX  XXXXX XXXX XXXXXXX X X\",\n            \"X XXX X   X XXXX   X X  XX X X X XX XXX XX X      X   X   XX  XXX  X          XX X XXXX  \",\n            \"X XXX X   X    XXXX X  X X XXXXXX X     XX XXXX XXX X XX X X  X XXX XXX XXXXXX XX   X XX \",\n            \"X     X    XXXX   XXX X  XXX XX    XX XXXXX  XXX  XX XX XX  X  X  XXXX   XXXXXXX  XXXX  X\",\n            \"XXXXXXX  XX    XXXX XX XX X  XXXXX     X      X X      X X     XX   XX     X  X   X X    \"\n        };\n        private static readonly string[] Modules72 = {\n            \"XXXXXXX X  X XXXX XXXXXXX\",\n            \"X     X   X X   X X     X\",\n            \"X XXX X X X X XXX X XXX X\",\n            \"X XXX X X X XX XX X XXX X\",\n            \"X XXX X  X  X X   X XXX X\",\n            \"X     X X  XX   X X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        X  X X           \",\n            \" X X XXXX  XX XX XXX XX X\",\n            \"XXX X   XX   X X X  XXX  \",\n            \" X X  XXXX  XXXX  XXX    \",\n            \" X  X    XX XX X XXXXXXXX\",\n            \"   XXXXX X XX X       XX \",\n            \" X  XX X   X XX  XX  XX  \",\n            \"X XX XX XXX  X XXX    XX \",\n            \" X X X XX XXX XX    XX X \",\n            \"XX  X X X  XXXX XXXXX X X\",\n            \"        XX  XX XX   XX XX\",\n            \"XXXXXXX XXX  X XX X X XX \",\n            \"X     X X XX XXXX   X  XX\",\n            \"X XXX X  XXXX X XXXXX  XX\",\n            \"X XXX X X XX XX   XXXX   \",\n            \"X XXX X    XXX    XX  X X\",\n            \"X     X X  X  X X  X XX  \",\n            \"XXXXXXX  X   X   X  X XXX\"\n        };\n        private static readonly string[] Modules73 = {\n            \"XXXXXXX  X  XX  XX  XX  XX  X XXXXXXX\",\n            \"X     X   XXX XXX XXX XXX XXX X     X\",\n            \"X XXX X XXX XXX XXX XXX XXX X X XXX X\",\n            \"X XXX X  XXX XXX XXX XXX XXX  X XXX X\",\n            \"X XXX X   X   X   X   X   X   X XXX X\",\n            \"X     X  X   X   X   X   X    X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        XXX XXX XXX XXX XXX X        \",\n            \"XXX XXXXX XX  XX  XX  XX  XX XX   X  \",\n            \"XXX  X X  XX  XX  XX  XX  XX X X X XX\",\n            \"  XX XX X    X   X   X   X   X XX  X \",\n            \"XX   X XX XX   X   X   X   X XXXXXXX \",\n            \"XXXX  XX XX X   X   X   X   XX    X X\",\n            \" XX XX XXXXXXX XXX XXX XXX XXX XXX XX\",\n            \"X     XXX XXX XXX XXX XXX XXX X     X\",\n            \" XX  X X XX XXX XXX XXX XXX X  X XXX \",\n            \"X XXXXX   XX  XX  XX  XX  XX  XXX   X\",\n            \" XX XX   XXX  XX  XX  XX  XX   XX XX \",\n            \"XXXXXXXX  X  X   X   X   X   X X  X  \",\n            \" XX X    X X   X   X   X   X XX XX X \",\n            \"   X  XXX   X   X   X   X   XX XX    \",\n            \"XXXXX   X  XXX XXX XXX XXX XXX XXX   \",\n            \"   X XXX  XXX XXX XXX XXX XXX X X X  \",\n            \"X XXXX X XX XXX XXX XXX XXX X  X  X X\",\n            \"XXXX XX  X X  XX  XX  XX  XX  XX  XX \",\n            \"  X XX X  XX  XX  XX  XX  XX    XX   \",\n            \"X X   XXX X  X   X   X   X   X  XX   \",\n            \" X XX  XXX X   X   X   X   X XXX XXX \",\n            \"X   X XX XX X   X   X   X   XXXXX   X\",\n            \"        XX XXX XXX XXX XXX XX   XXX X\",\n            \"XXXXXXX XX XX XXX XXX XXX X X X XXXX \",\n            \"X     X XX  XXX XXX XXX XXX X   X XXX\",\n            \"X XXX X XX X  XX  XX  XX  XXXXXXX X X\",\n            \"X XXX X  XXX  XX  XX  XX  XXX XXXX   \",\n            \"X XXX X XX   X   X   X   X X  X XX  X\",\n            \"X     X X  X   X   X   X     X   XXX \",\n            \"XXXXXXX XXX X   X   X   X   XXX XX XX\"\n        };\n        private static readonly string[] Modules74 = {\n            \"XXXXXXX X  XX  XX  XX  XX  XX XXXXXXX\",\n            \"X     X  XX     XX X XX     X X     X\",\n            \"X XXX X   X X  XXXXX  X X  XX X XXX X\",\n            \"X XXX X     X   X   X   X   X X XXX X\",\n            \"X XXX X  X X  XXXXX  X X  XXX X XXX X\",\n            \"X     X   X X  XXXXX  X X  XX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X XX X XX     XX X XX        \",\n            \"XX XX X  XXX X    X XXXX X    X     X\",\n            \"   XX   XX  XX  XX  XX  XX  X X X X  \",\n            \"  X X X XXXX X XX     XX X XX  XXXX  \",\n            \"   XXX  XX XXX  X X  XXXXX  XX  X  XX\",\n            \"X X  XX   XXXX XXX XXX XXX XX  X XXXX\",\n            \"XX XX  X  X  XX X XX     XX X XX     \",\n            \"XXXX  X  XXXXX  X X  XXXXX  X XXXX  X\",\n            \"X  XX   X  X   X   X   X   X XX X   X\",\n            \"X X   X  X    X XXXX X    X XXXXXXXXX\",\n            \"X XX X X   XXXX X    X XXXX X X XX XX\",\n            \"X X X X  XXX   X   X   X   X     XXX \",\n            \"XX XXX  X   X X  XXXXX  X X         X\",\n            \" XX   X  X  XXXXX  X X  XXXXXX   X   \",\n            \"     X X XX   X   X   X   X   X   XXX\",\n            \"    X XX X  X X  XXXXX  X X  XX XX X \",\n            \" XX  X        XX X XX     XX  X  X   \",\n            \"X X   XX     XX  XX  XX  XX  XX  XX  \",\n            \"X  XX  XXXX X    X XXXX X    XX    XX\",\n            \"XX X  X  XX   XX X XX     XX X X     \",\n            \"X X  X    X XXX XXX XXX XXX X   X   X\",\n            \"X  X XXX   XX  X X  XXXXX  XXXXXXXXXX\",\n            \"        X XX     XX X XX    X   X    \",\n            \"XXXXXXX     XXX XXX XXX XXXXX X X X  \",\n            \"X     X    X X XX     XX X XX   XXX  \",\n            \"X XXX X X  X X    X XXXX X  XXXXXXX X\",\n            \"X XXX X X   XX  XX  XX  XX   X    XXX\",\n            \"X XXX X   XX X XX     XX X  XXX X XXX\",\n            \"X     X XXXXXX  X X  XXXXX XXXXX   XX\",\n            \"XXXXXXX X XXXX XXX XXX XXX XX XXX   X\"\n        };\n        private static readonly string[] Modules75 = {\n            \"XXXXXXX X  X XXXX XXXXXXX\",\n            \"X     X   X X   X X     X\",\n            \"X XXX X X X X XXX X XXX X\",\n            \"X XXX X X X XX XX X XXX X\",\n            \"X XXX X  X  X X   X XXX X\",\n            \"X     X X  XX   X X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        X  X X           \",\n            \" X X XXXX  XX XX XXX XX X\",\n            \"XXX X   XX   X X X  XXX  \",\n            \" X X  XXXX  XXXX  XXX    \",\n            \" X  X    XX XX X XXXXXXXX\",\n            \"   XXXXX X XX X       XX \",\n            \" X  XX X   X XX  XX  XX  \",\n            \"X XX XX XXX  X XXX    XX \",\n            \" X X X XX XXX XX    XX X \",\n            \"XX  X X X  XXXX XXXXX X X\",\n            \"        XX  XX XX   XX XX\",\n            \"XXXXXXX XXX  X XX X X XX \",\n            \"X     X X XX XXXX   X  XX\",\n            \"X XXX X  XXXX X XXXXX  XX\",\n            \"X XXX X X XX XX   XXXX   \",\n            \"X XXX X    XXX    XX  X X\",\n            \"X     X X  X  X X  X XX  \",\n            \"XXXXXXX  X   X   X  X XXX\"\n        };\n        private static readonly string[] Modules76 = {\n            \"XXXXXXX XX    X XX XX XX   XX XXXXXXX\",\n            \"X     X XX  X  XX XX XXXX   X X     X\",\n            \"X XXX X XX XX   X  X  XX  XXX X XXX X\",\n            \"X XXX X  X  XXXXX X X  X  X   X XXX X\",\n            \"X XXX X X X X XXX    X XXX X  X XXX X\",\n            \"X     X  XXXXXX    X  XX XXXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"           XX  X XX   X X X          \",\n            \"X  XXXXXX   X  X     XX  XXXXX  X XXX\",\n            \"  X XX  XX   X  XXX     X X   XX X XX\",\n            \" X    X  XXXX XXX  XXX X XX  XX  XXX \",\n            \"XX  X  XX X  X  X XXX  XXX X XXXXX   \",\n            \" XX   XX  XXX XXXX   XXXX X    X XX  \",\n            \" XX     XX  X X X XXXXX  XXXX XXX XXX\",\n            \"XX X XX  X X X  X XXX  XXX  X XX XX X\",\n            \"X XX X  XXX XXXX    XXXX    XXXX   XX\",\n            \"X X   XX   X XX  XX  XX X XXXXXXXX XX\",\n            \"XX  XX XX X  X   X   XXX XX X X   X X\",\n            \"X  XXXXX   X XX XXXX    XXXX XX X XX \",\n            \" X  XX  X     XXX  XXX X X   X XX   X\",\n            \"X   X X  X        XX X X X XX  XX X X\",\n            \"XXX XX X XXX  X XX    X XXXXX     X X\",\n            \"   X XX   X  XXXX  XXX X X XX    X   \",\n            \"  X X   XX X    X XXX  XXX  XX    XX \",\n            \"X X   X    XX XX X  XXXX X XX  XXX   \",\n            \"XX     XXX  XXX  XXX  X X X X X  XXX \",\n            \"XXX XXXX  X   XX X   XX   X X  XXX X \",\n            \"X  X X   X      XXXX    XXXX XXX X   \",\n            \"X X  XXX X XX  X X X X XX   XXXXXX XX\",\n            \"        XXX X X  XX  X X   XX   X X X\",\n            \"XXXXXXX XX  XXX XXXX    XXX X X XXXXX\",\n            \"X     X X X X  XX  XXX X X  X   XXXXX\",\n            \"X XXX X XX  XX  X XXXX XXX  XXXXXX  X\",\n            \"X XXX X X           XXX    X X  X XXX\",\n            \"X XXX X  X X X   XX   X X XX XX    XX\",\n            \"X     X    XXX X X   XX   XXXXX X XXX\",\n            \"XXXXXXX XX X XX  XXXXX   XXXX XXX X X\"\n        };\n        private static readonly string[] Modules77 = {\n            \"XXXXXXX XX    X XX XX XX   XX XXXXXXX\",\n            \"X     X XX  X  XX XX XXXX   X X     X\",\n            \"X XXX X XX XX   X  X  XX  XXX X XXX X\",\n            \"X XXX X  X  XXXXX X X  X  X   X XXX X\",\n            \"X XXX X X X X XXX    X XXX X  X XXX X\",\n            \"X     X  XXXXXX    X  XX XXXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"           XX  X XX   X X X          \",\n            \"X  XXXXXX   X  X     XX  XXXXX  X XXX\",\n            \"  X XX  XX   X  XXX     X X   XX X XX\",\n            \" X    X  XXXX XXX  XXX X XX  XX  XXX \",\n            \"XX  X  XX X  X  X XXX  XXX X XXXXX   \",\n            \" XX   XX  XXX XXXX   XXXX X    X XX  \",\n            \" XX     XX  X X X XXXXX  XXXX XXX XXX\",\n            \"XX X XX  X X X  X XXX  XXX  X XX XX X\",\n            \"X XX X  XXX XXXX    XXXX    XXXX   XX\",\n            \"X X   XX   X XX  XX  XX X XXXXXXXX XX\",\n            \"XX  XX XX X  X   X   XXX XX X X   X X\",\n            \"X  XXXXX   X XX XXXX    XXXX XX X XX \",\n            \" X  XX  X     XXX  XXX X X   X XX   X\",\n            \"X   X X  X        XX X X X XX  XX X X\",\n            \"XXX XX X XXX  X XX    X XXXXX     X X\",\n            \"   X XX   X  XXXX  XXX X X XX    X   \",\n            \"  X X   XX X    X XXX  XXX  XX    XX \",\n            \"X X   X    XX XX X  XXXX X XX  XXX   \",\n            \"XX     XXX  XXX  XXX  X X X X X  XXX \",\n            \"XXX XXXX  X   XX X   XX   X X  XXX X \",\n            \"X  X X   X      XXXX    XXXX XXX X   \",\n            \"X X  XXX X XX  X X X X XX   XXXXXX XX\",\n            \"        XXX X X  XX  X X   XX   X X X\",\n            \"XXXXXXX XX  XXX XXXX    XXX X X XXXXX\",\n            \"X     X X X X  XX  XXX X X  X   XXXXX\",\n            \"X XXX X XX  XX  X XXXX XXX  XXXXXX  X\",\n            \"X XXX X X           XXX    X X  X XXX\",\n            \"X XXX X  X X X   XX   X X XX XX    XX\",\n            \"X     X    XXX X X   XX   XXXXX X XXX\",\n            \"XXXXXXX XX X XX  XXXXX   XXXX XXX X X\"\n        };\n        private static readonly string[] Modules78 = {\n            \"XXXXXXX X  X XXXX XXXXXXX\",\n            \"X     X   X X   X X     X\",\n            \"X XXX X X X X XXX X XXX X\",\n            \"X XXX X X X XX XX X XXX X\",\n            \"X XXX X  X  X X   X XXX X\",\n            \"X     X X  XX   X X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        X  X X           \",\n            \" X X XXXX  XX XX XXX XX X\",\n            \"XXX X   XX   X X X  XXX  \",\n            \" X X  XXXX  XXXX  XXX    \",\n            \" X  X    XX XX X XXXXXXXX\",\n            \"   XXXXX X XX X       XX \",\n            \" X  XX X   X XX  XX  XX  \",\n            \"X XX XX XXX  X XXX    XX \",\n            \" X X X XX XXX XX    XX X \",\n            \"XX  X X X  XXXX XXXXX X X\",\n            \"        XX  XX XX   XX XX\",\n            \"XXXXXXX XXX  X XX X X XX \",\n            \"X     X X XX XXXX   X  XX\",\n            \"X XXX X  XXXX X XXXXX  XX\",\n            \"X XXX X X XX XX   XXXX   \",\n            \"X XXX X    XXX    XX  X X\",\n            \"X     X X  X  X X  X XX  \",\n            \"XXXXXXX  X   X   X  X XXX\"\n        };\n        private static readonly string[] Modules79 = {\n            \"XXXXXXX XXXX XXXX X X X  X  X XXXXXXX\",\n            \"X     X X  XXX   X XX     XXX X     X\",\n            \"X XXX X XX XXXX      X X XX X X XXX X\",\n            \"X XXX X X X  XXXXXX      XXX  X XXX X\",\n            \"X XXX X X XX X      XX   XXXX X XXX X\",\n            \"X     X   XXXX X  XXX X   X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        XX     XXXXXX   X            \",\n            \" XX X XX   XX  X XXX   X      X XXXXX\",\n            \"X XX   XX XX XXXX X XX X   X X  XX   \",\n            \"XX    XX X      X  XX X       X  XX X\",\n            \"X XX X  XXXXXXX  XXX XXX X X X  XX   \",\n            \"   XXXXXX XXX X   XXX X XXX   X XXX X\",\n            \"  XX   X  XXXX XX  X XXXX  X XX XX   \",\n            \"X     X XX X    X     XX X   X    X  \",\n            \" XXX X   XX XX   XXX XXX   X XX XXXX \",\n            \" X  XXX   XXX X X XX  XX    XX  XXX X\",\n            \"  XX   XXXXX  X    XXXXX X XXX X  X X\",\n            \"X XX  XX X    XXXXXX  X   XXX XXXX X \",\n            \"  XX    XXX  X    X XXXX XX X  XXXXXX\",\n            \"X  X  XX XX XXX  XXX XX   XXX X XXX X\",\n            \" XX X  XX XX   XX  XXX X XXX   XX XX \",\n            \"X X XXXX XX   XX  XX  X   XXX X X  X \",\n            \"  X  X  X    X      XXXX XX    XX XXX\",\n            \"X XX  XXX X XXX X  X  X X X X XXX XX \",\n            \" X     X X X X XX  XX XXXXXXX  X  XX \",\n            \"X   X X XX   X      XX XX XXX XXX  X \",\n            \" X XXX  XX  X XX  XXX   X   XX X  XXX\",\n            \"X XXXXX  X  X XXXX  X  XX  XXXXXX XX \",\n            \"        XXXXXX XX  XX    X XX   X X X\",\n            \"XXXXXXX XX  XX       X X  X X X XX X \",\n            \"X     X  X  XXXX  X X    XX X   XXXX \",\n            \"X XXX X XX     XXX      X XXXXXXXXX X\",\n            \"X XXX X  XX     XX X X XX XXX X  X   \",\n            \"X XXX X X   XX X X    XXXX X    X   X\",\n            \"X     X X X XX XXX X XX X    X   XXX \",\n            \"XXXXXXX  XXX XX  XX   XXX   XXX X  XX\"\n        };\n        private static readonly string[] Modules80 = {\n            \"XXXXXXX   X   X XXXXXXXX   XX XXXXXXX\",\n            \"X     X XX   XXX  XX X XX   X X     X\",\n            \"X XXX X    XX  X   XX  X   XX X XXX X\",\n            \"X XXX X XX XX      XXXXXX   X X XXX X\",\n            \"X XXX X XX   X XXX  X XX XX   X XXX X\",\n            \"X     X  X X    X   XX  XXXXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X  XX X X  X X X  XX         \",\n            \" X XXXX XX XXXX  XX XX X XXX XX XX X \",\n            \" X  XX   X  X    X X  X XXX X XX  XXX\",\n            \"XX XXXXX  XX   X X XXX X   XXXX    XX\",\n            \" XX XX XX  X  XXXX     XX   XXXXX X X\",\n            \" X  X X XXX XXXX XX XXXXX XX XXXX XXX\",\n            \"X    X XXXX  XX XXXXX X   X        XX\",\n            \"XXXX  XX   X XXXX  XXXXX  XX X XXXX  \",\n            \"X   X  XX  X  XXX   X   XXX X  X    X\",\n            \" X X  X  X  X XX XXX X     X    X  XX\",\n            \"XXX X   X  XXXXXX X X  XX    XX  X   \",\n            \"XXX  XX    X XX X X  XXX XX XXX X    \",\n            \"X    X    XXXXXX X    X XX XXXXX  X  \",\n            \"XXX   X X X X  X XX X X  X  X XX  X X\",\n            \"X  X X   X  XXX  XX   X X   XXX  X  X\",\n            \"X XX  XX   X  X XXXX X X  X  XX XXX  \",\n            \"XXXXXX XXXX X  XX XXX  XX XXX X XX X \",\n            \"XXX  XX XXXXX XXXX   XXXXXXXXXX XXX  \",\n            \"XXXX X XX   XXX XXXX XX  X  XXXXXXX X\",\n            \"XXXXX XX      XX   X   XXX  X X  X X \",\n            \"X X    X  XX X  XX   XXX XXX  X XX   \",\n            \"X X   X   XXX X     XXX X   XXXXXX   \",\n            \"        X  X      X XXX X   X   XX   \",\n            \"XXXXXXX    XX  X X X     XXXX X X    \",\n            \"X     X X  X X   X   X XXX XX   X X X\",\n            \"X XXX X X    XX XX XXX  XX  XXXXX X X\",\n            \"X XXX X X  XXXXX  X X X  X   X XX XXX\",\n            \"X XXX X  XXXXX  X    X  XX  XX  XXXXX\",\n            \"X     X XX       XX      X XXXXX   XX\",\n            \"XXXXXXX   X   XX  XX XX XX XX XXXX  X\"\n        };\n        private static readonly string[] Modules81 = {\n            \"XXXXXXX           XX  XXXXXXX\",\n            \"X     X      XX   X X X     X\",\n            \"X XXX X XX X  XX X  X X XXX X\",\n            \"X XXX X XX     X   XX X XXX X\",\n            \"X XXX X  XXXX X XXXXX X XXX X\",\n            \"X     X  X X XX XXXXX X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"            XX      X        \",\n            \"   XX XX   XXX  X XXX    XX  \",\n            \" X XX  X XXX  X     X X X XXX\",\n            \"X    XX X XX XXXXXX  X  X XXX\",\n            \"  XXXX XX XX   XXX     X XX X\",\n            \"X XX  XXXX   X XXX XXX X   XX\",\n            \"X  XXX  X   X X   XX   X    X\",\n            \" X X  XX   X X XX X     X XXX\",\n            \"X X     X XXX XX    X   X  XX\",\n            \"X XXXXXXX        XX X XX XXX \",\n            \"XX   X X  XXXXXXX X X XX   X \",\n            \"XXXX XXXX  XXXXX XX XXXX XX  \",\n            \"XX  X  XXXXX XX       X XX  X\",\n            \"XX X XX   X  X XXX  XXXXX  XX\",\n            \"        XX  XXXX  X X   X  X \",\n            \"XXXXXXX XXXXX X  X XX X X XXX\",\n            \"X     X      X X    X   X XX \",\n            \"X XXX X X   XXX   XXXXXXXXXXX\",\n            \"X XXX X XXXXXXXXXX XX X    X \",\n            \"X XXX X   XXX X XX  XX  X XXX\",\n            \"X     X   XXXXX  XXXX X X   X\",\n            \"XXXXXXX    XX  X X  X  XXXX  \"\n        };\n        private static readonly string[] Modules82 = {\n            \"XXXXXXX  X  X XXX  XXX   XXX   XX XXXXXXX\",\n            \"X     X XX  X  X XXX XXXX  X XX X X     X\",\n            \"X XXX X XXX X  XX X X X XX    XXX X XXX X\",\n            \"X XXX X XX  X  X    XX X   XX X   X XXX X\",\n            \"X XXX X X  XX X   X X X X  XXXXX  X XXX X\",\n            \"X     X XX XXX   X    X  XX X  X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX  XX  X X    X    X XX        \",\n            \"  X  XXXXXX   XXXX XXX  XX XXX  XX XXXXX \",\n            \"XX     X XX  XX X  XX X  X X   X X       \",\n            \"    XXX  X    X  XX    XX XX XXXX   XXX  \",\n            \" XX X    X   XXXXX   XX XX    X X X   X X\",\n            \" X  X XX X X XX XXX XXX XXXXXXX    XX X  \",\n            \"X   XX XXXXXX  XX   X XX    XXX    XXXXX \",\n            \"X  X  XX XXXXX  XXXXX  XX X X  X XXX   XX\",\n            \" XXX X   X X XX XX XXXX    XXX     XX XX \",\n            \"  XX  XX X XX   XXX   X X    X XX  X  XXX\",\n            \" X X      XX X XXXX  X XXXX     X X  XXX \",\n            \" X   XXX X X    XXXXXXXX XXX XX XXXXXX X \",\n            \"  XX X X X  XX XXX XXXXX      XXXX   XX  \",\n            \"XXXXX X X   X X  X X X    XXXXX  XX XXXXX\",\n            \"X  XX  XX X XXXXX   XX  X X X X  X     XX\",\n            \" XX X XXX X XX XXXXXXXXXXX  X XX    X X  \",\n            \"X    X  XXX  XXXX XXXX X   XXXX   X     X\",\n            \"XXX XXX XXX XX  X XX X  XX    XXX  XX XXX\",\n            \"X XX    XX  X     XXXXX XX X X X   XXXXX \",\n            \"XX  X XXX XX XXX   XX XXXX      XXXX   XX\",\n            \"  XXX  X   XXXXXXX XX  XX XX X X X XX XX \",\n            \"XXXXX XX XXX X   XXXX  X  XX X XXXXXX XXX\",\n            \" XXX X XXX   X XX XXX XXXX      XX       \",\n            \"XXXXXXX    XX X    XXX  X XX XX XXX XX   \",\n            \"  XX    X X  X  XX   X    X   XXX X X X X\",\n            \"XX    X  X X X  X        X XXXX XXXXXX   \",\n            \"        X   X XXXX XX    X  XXXXX   X  XX\",\n            \"XXXXXXX X  X  X X XXXXXXX X X  XX X X X  \",\n            \"X     X XXXX X   XXX X   XXXXX  X   X    \",\n            \"X XXX X  XX X      X XXXX X  X XXXXXX XXX\",\n            \"X XXX X  XX      XXX  X      X X  X  XXX \",\n            \"X XXX X X XX  X   X X  X   X XXXXXXX X XX\",\n            \"X     X  XXXX  X  XXX     X  XX  XX  XX  \",\n            \"XXXXXXX   XXXX  XX XX X X  XXX   X X XX X\"\n        };\n        private static readonly string[] Modules83 = {\n            \"XXXXXXX  X  X XXX  XXX   XXX   XX XXXXXXX\",\n            \"X     X  X   XXX X  XXXX XXX X X  X     X\",\n            \"X XXX X XXXXX XXXXX   XXXXX  XXX  X XXX X\",\n            \"X XXX X XXX   XXX X  XXXX XX    X X XXX X\",\n            \"X XXX X   XXXXX X XXX   XX X XX   X XXX X\",\n            \"X     X  XX  X  X X    XXXX  XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX X    XX X    XX  XX          \",\n            \"   XX XX XXX   XX  X X XXXXXX        XX  \",\n            \" XX X  XXX  XX    XX    XXXXX XXXXX X X X\",\n            \" X   XXX XX  XX XXXX  XXXXXXXXX X X X X X\",\n            \"XXX  X   XXXXXXX  X  X X X  XX  X  XX X  \",\n            \" X  X XX X X XX XXX XXX XXXXXXX    XX X  \",\n            \" XX XX   XXX XXXX XX  XXXXX XX XX  X   X \",\n            \"X XX XXXXXX XXX X XX    X   XX XXXX   XXX\",\n            \"XX XXX  XXXXXX   XXX X  X XX XX X XX   XX\",\n            \" XXXX X  XXXXX   XXX    XX  XX  X XX XXX \",\n            \"XX XXX      XX X     XX  XX XXX X  XXXXXX\",\n            \" X   XXX X X    XXXXXXXX XXX XX XXXXXX X \",\n            \"XX X X  XX    XXXXX  XXXXXX      X  X    \",\n            \"XX XXXX    XX      XXX X   XX X XXXXXX XX\",\n            \"  XX   X     X X  X  XX         XXX X XX \",\n            \"  X   X X   X  X XX XX XX     X   X XXX X\",\n            \"    X   XX XXXXX X XXXX X  X       XX    \",\n            \"XXX XXX XXX XX  X XX X  XX    XXX  XX XXX\",\n            \" X X   X X   XX      XX   XX XX X  X   X \",\n            \"XXX XXXX  X  X X X X  X XXX  X   XX   XXX\",\n            \"X  X   XX XX X X XXX  XX   XXXXXXXXX   XX\",\n            \"X XX  X  X X    XXX X XX XXXXX  XX XXXXX \",\n            \"XXXXX  XXXXXXX X X XX    X  XXX XXXXX   X\",\n            \"XXXXXXX    XX X    XXX  X XX XX XXX XX   \",\n            \"XX X   X  X X X XXXXXX  XX        X  X  X\",\n            \"XXX  XX XX   XX XX  X  X XXXX X XXXXXXX  \",\n            \"        X X    X XXX  X XXX  X XX   X XX \",\n            \"XXXXXXX X XX XX   X XX XXXX     X X XXX X\",\n            \"X     X  X  XX  X  X XXXXXXX  X X   X   X\",\n            \"X XXX X XXX X      X XXXX X  X XXXXXX XXX\",\n            \"X XXX X XXX XXX  X  X X XXX  XX X X X  X \",\n            \"X XXX X   X      XX       XX  XX XX  XXXX\",\n            \"X     X  X X  XXX  X  X X   XX  XX  XX  X\",\n            \"XXXXXXX    XX    X  X   XX X X X XXX  X  \"\n        };\n        private static readonly string[] Modules84 = {\n            \"XXXXXXX XXX XX X XXXX XXXXXXX\",\n            \"X     X      XXXXX  X X     X\",\n            \"X XXX X X XX X XX XXX X XXX X\",\n            \"X XXX X  XXX X X  X X X XXX X\",\n            \"X XXX X  XX   XX X X  X XXX X\",\n            \"X     X XX X X XX   X X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"          XXX XXX            \",\n            \"X X   XX X  XXX  X  X  X  X X\",\n            \" X      X XXXX XX X XXXXXX XX\",\n            \"   XX X  X  X  XXX X XX     X\",\n            \"  X X    X XXX X   XX X XX   \",\n            \"X  XX X    XXX XXXXXX   X    \",\n            \"  X  X    XXX   X    X    X  \",\n            \" XX XXX  XXX XXX XXX   X  XX \",\n            \"       X  XXX X     XXX  XXXX\",\n            \" X XXXXXXXX  XXXX XXXX XX   X\",\n            \"   X X X   X XXX  X  X X  XX \",\n            \"XX   XXXX   X       XX     XX\",\n            \"  X X    XXXXX  XX X XXX XX X\",\n            \"XXX XXX X X  X   XX XXXXX   X\",\n            \"        XX     XX X X   XX  X\",\n            \"XXXXXXX XXX XXXX X  X X XX X \",\n            \"X     X   X   XXX   X   X XXX\",\n            \"X XXX X  XXX XXXXX XXXXXXX X \",\n            \"X XXX X  XX X XX  X XX X  XX \",\n            \"X XXX X X  X X XXXXX  XXX  XX\",\n            \"X     X  XX X  X  X  X X  X X\",\n            \"XXXXXXX XXX XXXX X X XX X  XX\"\n        };\n        private static readonly string[] Modules85 = {\n            \"XXXXXXX XX   X     XX   XX  X XXX XXXXXXX\",\n            \"X     X XX  XXX X XX     XX   X X X     X\",\n            \"X XXX X X  XX XXXXX  X    XX XXX  X XXX X\",\n            \"X XXX X X      XXX   XX    XXX X  X XXX X\",\n            \"X XXX X   XX    XX X XX  X  X  X  X XXX X\",\n            \"X     X X X    X X  XXXXXXXX    X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"           XXX     XX X X X  XXXX        \",\n            \"XX  XXX  XX  X X    X XXXX XX X X  X XXXX\",\n            \"XXXXX  XX XXX X XXXX X XX    XX X  XX  X \",\n            \"X    XX XX XXXX X XX   XXXX X X  XX X  XX\",\n            \" XXX X X X XXX     XX X XX     X  X  X  X\",\n            \"X X  XX  X X X XX     X  X  X       X    \",\n            \" XX XX  X X XXX   XXX   XXX   XXXX X     \",\n            \" XX  XX XX XX  X X  XXXXXX X  X XXXXX XX \",\n            \"X X  X  XX X  XXXXX  X X   XXXX  X  XXX  \",\n            \" X X XXXX X  XX X XX      X X  XX  XXXXX \",\n            \" XXX    X X XX     XX X  XXX  XXXX  X X  \",\n            \"   XXXXX X XX  X X  XXX X  XXX X     XX  \",\n            \"X XX X X X X  XXXXX  X X  XXXXX XX   X X \",\n            \"  XXX XXX   XXX   XXX  XXXX   XXXXXXX  XX\",\n            \"X  X   XXXX     XX X XX  X  XX X    XXXX \",\n            \"X X   XX  X  XX X XX     XX XX X X   X XX\",\n            \"X X XX    X XX     XX X X X  XXXX  X   X \",\n            \"XXXXXXX  X XXX X    X XXX  X     XXX  XX \",\n            \"  XXXX XX     X XXXX X       X X XX  X X \",\n            \"XXXX XXX  X  XX X XX    XXXXX X XXX XX XX\",\n            \"X XXX       XX     XX X XX X   X  XXXXX X\",\n            \" X  XXXXXX X X XX     XX X  X       X    \",\n            \"XX  XX X  X XXX   XXX   X X   XXXX X    X\",\n            \"  X   XX X XX  X X  XXXXX XX X  XXXXX XX \",\n            \"   X   XX  X  XXXXX  X X XXXXXX  X  XXX  \",\n            \"XXX XXX X X  XX X XX      X X XXXXXXXXX X\",\n            \"        X X XX     XX XX XX X X X   XX   \",\n            \"XXXXXXX   XXX  X X  XXXX   XXX  X X XXX  \",\n            \"X     X X  X  XXXXX  X    XXXXX X   XXXX \",\n            \"X XXX X XX  XXX   XXX   XXX   X XXXXX  XX\",\n            \"X XXX X  XX     XX X XX  X  X    XX  XXX \",\n            \"X XXX X   X  XX X XX        X  XX XXXX XX\",\n            \"X     X XXX XX     XX X X X        XX  X \",\n            \"XXXXXXX X XXXX X    X XXXX XX     XXX X  \"\n        };\n        private static readonly string[] Modules86 = {\n            \"XXXXXXX  XX     X   X X X     X X XXXXXXX\",\n            \"X     X    X X XXX XXX XXX X X    X     X\",\n            \"X XXX X XX      X   X  XX      XX X XXX X\",\n            \"X XXX X   X  X X X X X   X X X    X XXX X\",\n            \"X XXX X    X X   X   X            X XXX X\",\n            \"X     X  XXXX X   X   X  X   XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X XXX   X   X   XXX XXX X        \",\n            \"XXX XXXXXX     XX  XX  XX  X  XXXXX   X  \",\n            \" X  XX X XX    XX  XX     XX     X    X  \",\n            \"  XX  X      X XXX XXX   X XXX  X XX  X X\",\n            \"  XXXX   XXXX   X   X   X   X            \",\n            \"XXX XXXX XXX   X   X           X  X XX  X\",\n            \"XX XX    XXX X X X X X X X X X X    X XX \",\n            \"XX X  X       X   X   X  XX  X    X      \",\n            \"XXX XX XXXXX XXX XXX XXX X X XXX XX X X X\",\n            \"   XXXX X     X   X   X  XX     X XXX XXX\",\n            \"XX   X   XXX XXX XXX XXXXX   X X   X   X \",\n            \"X X X XXX     X   X   XX  X X XXXX XXX X \",\n            \"XXXXXX   XXX XXX XXX XXX XXX XXXXXX    XX\",\n            \" XXX  X X X X X X X X XXX X X X XX XXX X \",\n            \"  X  X X  XXX XXX XXX XXXXXXX XXXX X X   \",\n            \"   X XXXXXXXXX XXX XXX XXX XX XXX  XXXX X\",\n            \"XXX  X X    X   X   X   XXX XXX X XX X XX\",\n            \"X XX XXX XXXX  XX  XX  XXX XX  X X X XXXX\",\n            \"X   X  X X XX  XX  XX  XX XX  XXX XXXXX  \",\n            \" X    XXXXXXXX XXX XXX X X  XX    XX XX X\",\n            \"XXXX   X  X X   X   X   X  XX      XX X  \",\n            \"     XX XXXX   X   X   X       X  X XX  X\",\n            \" XXXX  XXXXX X X X X X X   X X X    X XXX\",\n            \"X  X XXXX     X   X   X       X   X      \",\n            \" X XX   X XX XXX XXX XXX  XX XXX XX X X X\",\n            \"X X  XXXX     X   X   X  XX   X XXXXX X  \",\n            \"        XXXX XXX XXX XX XX XXX  X   XXXX \",\n            \"XXXXXXX XXX   X   X   X X X X X X X XX X \",\n            \"X     X X XX XXX XXX XX  XXX XXXX   X XXX\",\n            \"X XXX X XXX X X X X X X X X X XXXXXXXX X \",\n            \"X XXX X   XXX XXX XXX XXXXXXXXX X XXXX   \",\n            \"X XXX X XXXXXX XXX XXX XX XXXXXX XX  XX X\",\n            \"X     X XX  X   X   X   XXX X  X  XXXX XX\",\n            \"XXXXXXX X  XX  XX  XX  XX  X   X   XXXX X\"\n        };\n        private static readonly string[] Modules87 = {\n            \"XXXXXXX XXX XX X XXXX XXXXXXX\",\n            \"X     X      XXXXX  X X     X\",\n            \"X XXX X X XX X XX XXX X XXX X\",\n            \"X XXX X  XXX X X  X X X XXX X\",\n            \"X XXX X  XX   XX X X  X XXX X\",\n            \"X     X XX X X XX   X X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"          XXX XXX            \",\n            \"X X   XX X  XXX  X  X  X  X X\",\n            \" X      X XXXX XX X XXXXXX XX\",\n            \"   XX X  X  X  XXX X XX     X\",\n            \"  X X    X XXX X   XX X XX   \",\n            \"X  XX X    XXX XXXXXX   X    \",\n            \"  X  X    XXX   X    X    X  \",\n            \" XX XXX  XXX XXX XXX   X  XX \",\n            \"       X  XXX X     XXX  XXXX\",\n            \" X XXXXXXXX  XXXX XXXX XX   X\",\n            \"   X X X   X XXX  X  X X  XX \",\n            \"XX   XXXX   X       XX     XX\",\n            \"  X X    XXXXX  XX X XXX XX X\",\n            \"XXX XXX X X  X   XX XXXXX   X\",\n            \"        XX     XX X X   XX  X\",\n            \"XXXXXXX XXX XXXX X  X X XX X \",\n            \"X     X   X   XXX   X   X XXX\",\n            \"X XXX X  XXX XXXXX XXXXXXX X \",\n            \"X XXX X  XX X XX  X XX X  XX \",\n            \"X XXX X X  X X XXXXX  XXX  XX\",\n            \"X     X  XX X  X  X  X X  X X\",\n            \"XXXXXXX XXX XXXX X X XX X  XX\"\n        };\n        private static readonly string[] Modules88 = {\n            \"XXXXXXX XX XXXX XXXX   XXXXX   XX XXXXXXX\",\n            \"X     X X X  XX X X XXX  XXX X X  X     X\",\n            \"X XXX X XX  XX  X   X X XXX  XXX  X XXX X\",\n            \"X XXX X   XXXX X  XX    X XX    X X XXX X\",\n            \"X XXX X XX   X  XX  XX X X X XX   X XXX X\",\n            \"X     X  X XX X XXX X   XXX  X XX X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXXXXX X XXX XX                 \",\n            \"X  XXXXXXX X  X    XXXXXXX X  X XX  X XXX\",\n            \"  X  X     X  X  X    X XX   X XXXX XXX X\",\n            \"XX X  XXXXX X X    XXX  XX   XXX  X X   X\",\n            \"  XX X XX XX   XX XX    XX XX  X   XX    \",\n            \" X X  X XXXXX    X XXXX  X XXX        X  \",\n            \"  X       X XX XX XX XX XXX XX XX  XX XX \",\n            \" XXX XXX     X X  X      X  XX XXX X X XX\",\n            \" XXX   X  XXXXX    X XX X  X XX XXXXXXXXX\",\n            \"XX  XXXXX X X  X XXX XXXX X XX  X X  XXX \",\n            \" XX XX       XX       XX XX XXX XX  XXXXX\",\n            \"X X X X X  XX X X  X XX X  X XX X    X X \",\n            \"  XXX      X  XXXXXXX XX  X      X XX   X\",\n            \"X  XX X      X XX  X XXX XXXX X XX XXX  X\",\n            \"XX     XX X XXXX  X     XXX    X    X X  \",\n            \" X  XXXX XX  XXX X XX XX XX     X X XXXXX\",\n            \"  XXX   X X X XX XXXX  XX XX X X   XX  X \",\n            \" XX X XX   XXXXXXXX XX XXX   X XX  XX XX \",\n            \"  XXX   X X XX X  XXXX XXX XX X X  X  XX \",\n            \"  XXX XX XXXXX  X XXX   XX   X   XX   XXX\",\n            \"   XXX X X X XX X   XXXXX  XX  X XXX   XX\",\n            \" X XX XXX  XXXX  XX  XX X X X X XX X  XX \",\n            \"XXX  X  XX X    X     XX XX XXX XXXXX   X\",\n            \"XX  X X XX X   XX  X XX X  X XX XX X  X  \",\n            \"XXXX X     X X X XXXX XX  X      XX X X X\",\n            \"XX  XXXX  X X      X XXX XXXX X XXXXX    \",\n            \"        XXX XX X  X  X  X X  X XX   X XX \",\n            \"XXXXXXX XXX X   XXXXX XX  X     X X XXXX \",\n            \"X     X XXXXX XXXX XXXXXX XX  X X   X   X\",\n            \"X XXX X XX XX  XXXX  X XXXX XX XXXXXX XXX\",\n            \"X XXX X X XX X X   XXX   X    X XXXX   X \",\n            \"X XXX X  XX XXX  XXXXXXXXXXX XXX   XXXXXX\",\n            \"X     X  XX    X X  X  X XXXX X X X XX   \",\n            \"XXXXXXX XX  X X      XX X X XXXXX     XX \"\n        };\n        private static readonly string[] Modules89 = {\n            \"XXXXXXX     X XXX X  X  X X  X  X XXXXXXX\",\n            \"X     X XXXXXX XXX    XXXX    XXX X     X\",\n            \"X XXX X     X XXX  X XX X  X XX X X XXX X\",\n            \"X XXX X  X    X XX  XXXX X  XXXX  X XXX X\",\n            \"X XXX X X XX X X    X X  X  X X   X XXX X\",\n            \"X     X   XX XXX X XXXX   XXXXX X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"          X  X XXX X XX X XX XX X        \",\n            \"X X X X    X X X      XXX X   XX    X  X \",\n            \"XX XX  XXXX XX XX XXXX X  XXX X    X   X \",\n            \"XX  XXXXX  XX XXXX XX XXXX XX XX X XX  X \",\n            \"XXX XX  XX XXX       XX       X  XXX X XX\",\n            \"     XXXX X XX X    X XX    X  X X X XXX \",\n            \"X  X X  XXXX XX XX XX XX X XX XX X       \",\n            \"     XX XX    X   XXXX    XXXX     X  X X\",\n            \"X   XX  XX     XXXX X  X XX X  X         \",\n            \"XX X  XXXX XX   X XX    X XX    XX X XX X\",\n            \"X XX X X XX X XXX XX X XX XX X XX X   X  \",\n            \"XXXXXXXXXX  XXXXXX    XXXX    XXXX X     \",\n            \"X   XX  XX  X   X  X XX X  X XX X     XXX\",\n            \"XXX X XXXX    X X   X XX    X XX   XX XXX\",\n            \"  XXXX   X X    XX XXXXX   XXXX XXXX X XX\",\n            \" X X  XX   X XX X  XXX   XXXXX  XX XXXX  \",\n            \"XXX    XXX   XX XX  XXXX XX XXX  XXX X  X\",\n            \"  XXXXX  X  X X X XXX   X  X    XX  XXX  \",\n            \"X   XX   XXX XX  X X     XX XX   X  X    \",\n            \" X  X X X XXX XXX X  X  X XX X XX X  X  X\",\n            \"XXX     X X X  X XXX     XX  XX X   XXX  \",\n            \" X   XXXXXX XXXXX X    XX XX XX X X   X X\",\n            \"  XXXX XX XXXX X  XX X XX XX X XX  X X X \",\n            \"X  XXXXXX    X  XX    XXXX    XXX    XXX \",\n            \" X      XX  XXX    X XX X  X XX X XX   XX\",\n            \"X XXXXX XXX XXXX    X XX    X XXXXXXXXXX \",\n            \"        X  X  X XX XX XX X XX X X   XX  X\",\n            \"XXXXXXX    XX  X  XXXX    XXXX  X X XXX X\",\n            \"X     X    X XX  XX X  X XX X  XX   XX X \",\n            \"X XXX X X   XX  X XX    X XXX   XXXXXXX X\",\n            \"X XXX X  XX XXX  XXX   XXXXX X    X X X  \",\n            \"X XXX X X X X  X XX   XXX    XX XX XX   X\",\n            \"X     X    XXXX X XX XX X    X X X X  XXX\",\n            \"XXXXXXX X XXX XXXX     XX XX  XXXXXX  X X\"\n        };\n        private static readonly string[] Modules90 = {\n            \"XXXXXXX X    XXXXX        XXXXXXX\",\n            \"X     X XX X X X  XXX X   X     X\",\n            \"X XXX X XXX  XX  XX X  XX X XXX X\",\n            \"X XXX X XX  XXX XXX X  XX X XXX X\",\n            \"X XXX X XX XX   X X XXX   X XXX X\",\n            \"X     X  X X  X  X XX X X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X X  XX XXXX  XX         \",\n            \" XX X XX XX  X  X X X XX  X XXXXX\",\n            \" X   X XXXX XXX XX XX X XXXXX  X \",\n            \"XXX X X  XXX  X X X  XXX XX  X  X\",\n            \"  X X  X XX  X  XXX XXX   X  XXX \",\n            \"  X XXX XX X    X X X XXXXX   XXX\",\n            \" XX    X XX X X XXXXX  XX XX X   \",\n            \" X   XX XX  XXX X XXXXXX      X X\",\n            \"  X XX XX  X        XXX X XX X XX\",\n            \"  XX  X X X X   XX XX  X   X X XX\",\n            \"XXXXXX XXX    X  X X  XX  X X X  \",\n            \"X XXXXXXX XX XXXXX   X  XX X  XXX\",\n            \"X  XX   X XXXX  XXXXX      XX  X \",\n            \" X    X      XX X          XXX  X\",\n            \" XXX   XXXX XXXX  XX X  XXX    XX\",\n            \"X X X XXXX XX X   X     XXXXX    \",\n            \" XX XX   X XX  X XXX       X XX X\",\n            \"X     XX  X    X XX X X XXXXXXX  \",\n            \"        X  X    X  X X XX   X    \",\n            \"XXXXXXX X X X  XX XXX X X X XX X \",\n            \"X     X    XX XX  X  XX X   X  XX\",\n            \"X XXX X XXX  X     XX X XXXXXX  X\",\n            \"X XXX X  XX X  X   XX X XX  X    \",\n            \"X XXX X XX XXXXXX  XXXXXXXXX  X X\",\n            \"X     X X   XX XXXX XX X X     XX\",\n            \"XXXXXXX  XXXX XX   XXXXXXXX  XX X\"\n        };\n        private static readonly string[] Modules91 = {\n            \"XXXXXXX    X XXX XX X XXXXXX  X X   X XXXXXXX\",\n            \"X     X  X  X      XXXXX  X  XX XX X  X     X\",\n            \"X XXX X X XX XXXXX X X   XXXXX   X X  X XXX X\",\n            \"X XXX X     XX XXX  X XXX X  XXXXX XX X XXX X\",\n            \"X XXX X X  XX    X XXXXXX   XX X  XXX X XXX X\",\n            \"X     X XX   XXX X XX   XXXXXXX  X    X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          XX    XX  X   XXX X  X   X         \",\n            \" X  X X X  XX X X XXXXXXXX   X XX X XX XX X  \",\n            \"   XX   X XXXXX      XXX   X  X XXXXX X  X  X\",\n            \" XXX XXX  XXX X X  X X  X  XXXX  XX  XX  XXX \",\n            \"XXX X  X    XX X X X  X X    X   XXX  XXX X  \",\n            \" XX XXX XXX  XX   XXXXXXX X  XX  X  XX XX X X\",\n            \" XX  X   XXX X XXXX X   XXX   XX    XXX X X X\",\n            \"XXXXXXXXX X X  X   X    XX XX  XX X   X     X\",\n            \"  X X  X  XXX  XX    X   XX   XX X   X  XX XX\",\n            \"   XXXX    XX X XXXX  X  X XX    XXX     XX  \",\n            \"X  X    X XXX       X  X   XXX  XXXX  XX X X \",\n            \"  XXXXX X  XX XX X XXXX X  X X  X    XXXXXX X\",\n            \" XX    X X  X  XXX  X X X   XX    XXX  XX XXX\",\n            \"   XXXXXXX X  XXX  XXXXXX X  XXXXXX XXXXX XX \",\n            \" XX X   XXXXX XXX X X   XXXX  X XX  X   XXX X\",\n            \"    X X X XXXXX X  XX X XX XX    XX X X XXX  \",\n            \"    X   X XX   X   XX   X  XX  XXXX X   XX X \",\n            \"XX  XXXXXXX X   XXXXXXXXXXXXXX X  X XXXXXXXXX\",\n            \"XXX XX  XXXXXX     XX XXXXX XXX  X X  XXX  XX\",\n            \"XX X  XXX    XXX X XXXXX X   X  X   X  X  XXX\",\n            \"X XX X XXXX  X XXXXX      X XX X   X X      X\",\n            \"X X XXX X   X X  X    XXX     XXX X     XXX  \",\n            \"  X  X  XX X XXXXX X  X XX X XX XXX XX    X X\",\n            \"  XXX X   X  XX  X  X   X  XX    XXX XXX     \",\n            \"           X     XX XX     XXXX  XXXX  XX  X \",\n            \"XX  XXX XX X    XX  X  X X XXX   X XXXX  XXXX\",\n            \"XX XXX  XX   X  XXX X X XXX X XX   X  X X X X\",\n            \"    X X    X  X XX X XX  XX  X XX X    XX   X\",\n            \" XXXX    X   X  XXXXXX X   XX XX     X  XX  X\",\n            \"X  XX X  XX X XX    XXXXXXX    XX XXXXXXXXX X\",\n            \"        XXXXX   XXX X   XX   X  XXXXX   XX  X\",\n            \"XXXXXXX   XXX   X X X X X   XX   XXXX X XXXXX\",\n            \"X     X    XX   X  XX   X   XX    X X   X X X\",\n            \"X XXX X XX X   X  XXXXXXXX   XX   XXXXXXX XXX\",\n            \"X XXX X  X   XX  XX XXX   X X X   X X X   X X\",\n            \"X XXX X  XXX    X XXX X XX XX  XXX XXXXX     \",\n            \"X     X XX       X    XX   XX XX X XXX   X  X\",\n            \"XXXXXXX  XX  XXX XX X    XXXX   XX     X XXXX\"\n        };\n        private static readonly string[] Modules92 = {\n            \"XXXXXXX X XX  XXXXXXX  XX XXX XXX   X XXXXXXX\",\n            \"X     X X  X  XX XXX  X X  X       X  X     X\",\n            \"X XXX X XXX XX  X XXX  XXX  X X X  X  X XXX X\",\n            \"X XXX X X X X  X X XX  XXXX XXX XX XX X XXX X\",\n            \"X XXX X X XXXX  XX  XXXXXX   X    XXX X XXX X\",\n            \"X     X    XXX    XXX   XX  X   X     X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  X X   X XX   X X       XX         \",\n            \" XX X XX  XXXXX   X XXXXX   XX  X   X X XXXXX\",\n            \"X X XX   XX  X X XX X X X X  X    X    X  X  \",\n            \"XX    XXXXX    XXXXXX  X  X X   X XXXX X   XX\",\n            \"X X       X X  XXX      XX  XX X X X XXX  XX \",\n            \"  X  XXXXX    X X X XX XXXX XXXX XX X  X  XXX\",\n            \"XX X    X X XXX X    X X X X X XXX X X XXX   \",\n            \" X  X XX XXX  X  XXXXX X XX XXXX XXXX  X XX  \",\n            \" XX        XXX X   X XX   X X X  XX      X  X\",\n            \" X X XXX  XXXXX  XX        X   X X X X  XXXX \",\n            \"  X  X   XX   XX XX  X  X X X X   X X     XXX\",\n            \"X   X X  X        XX  XX  X   X  X XXX  X    \",\n            \"  X X    XX XX X X XX   XX   X X   XXX X  X X\",\n            \" X XXXXXXXXX XXX    XXXXXXX XXX XX  XXXXX X  \",\n            \"XX XX   X X     XX  X   XX   X     XX   X    \",\n            \"X XXX X XXX  X XXXXXX X XXX XXX X XXX X X   X\",\n            \" X  X   X  X X XX   X   XX X    XX  X   XX   \",\n            \"X   XXXXXX  XX   XX XXXXX XX X      XXXXXXX X\",\n            \" X XX     X  XXX XXX XX  X XX   X   X   XXXX \",\n            \" XX  XXX X XXX    XX  X XXXX  X  X X  X  X X \",\n            \"XXXXXX  XX     X XX   X  XX  X    XX    X  XX\",\n            \"XXX  XXXX X XXX XX X   XXX  X X X    X   XXX \",\n            \"X  X        XX  X XXXXXX XX       XX XXX X   \",\n            \"X   XXX XXXXXX X  X  X X  X XXX X X XX   XX X\",\n            \" X  X  X  XX X  XXXXXXX  X X XXX X XXX X     \",\n            \"X    XXXXXXX X   X XX XX   X X X XXXX X XXX X\",\n            \" XX X      XXXXXX    XXX X XXX XXX  X  XXX   \",\n            \"    X X XX  X  XX XXX XXXX X  XX XXXX X XXX  \",\n            \" XXXX  X XX      XX XXXX X X  X   X      X XX\",\n            \"X  XX XX X  XXXXX  XXXXXX X X   X  XXXXXXXXXX\",\n            \"        X X   XXX   X   XXXX  X   X X   X X  \",\n            \"XXXXXXX XXX   XXXX  X X X XXX X X X X X X  X \",\n            \"X     X   XXXX      X   XX   X X    X   X XXX\",\n            \"X XXX X XXXX X XX X XXXXX   XXXX   XXXXXX X X\",\n            \"X XXX X    XXX X      XXX  XXX  XXXX   X X   \",\n            \"X XXX X X X X XXXX X XXX XX XXXX     X   XX X\",\n            \"X     X XXX  X  XX X   X X X  X  XXXX   XX XX\",\n            \"XXXXXXX  X    XXXXXXX X   XX   XXXX  X XXXX X\"\n        };\n        private static readonly string[] Modules93 = {\n            \"XXXXXXX    X   XX   XX XXXXXX XXXXXXX\",\n            \"X     X XX  XX  XXX X XXX  X  X     X\",\n            \"X XXX X X XXX      X XXXXX  X X XXX X\",\n            \"X XXX X X XXX X    X   X  XX  X XXX X\",\n            \"X XXX X X  XX      XXX X    X X XXX X\",\n            \"X     X X XXX XXXXXXX XX XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"          X X X X   X    X XX        \",\n            \"  X  XXXX   XXXXX XX  X  X X X XXXXX \",\n            \" XX    XX  X   XX XX    XX    X      \",\n            \"  XXXXX XXXX X     X XX X XX  X  X XX\",\n            \"  X      XXXXX XXX XX   XXX  XXX X X \",\n            \"X XX XXXXXXX  XX XX   X   XX  XXX  XX\",\n            \"XXX X  X   X  XX  XXX     X XXX  X X \",\n            \" XX X XX X  XXXXXXX X  XXX XXX XXX XX\",\n            \"XX  XX  X X X  XXX   X  X X XXXX    X\",\n            \"X X XXXXXX X XXXXXX  X  XXXXX X X XXX\",\n            \"  X    XXX X X  XXX    X   X X  X X X\",\n            \" X XX XX X X XXX      X   XXXXX    X \",\n            \"X X XX        X   X X      X   XXXXXX\",\n            \" XXXXXXXXX X   XXX X  X X X  XX    X \",\n            \"XX X X   X X XXXX   X X    XXXXX     \",\n            \"XXX   XXXX  X  X   XX XXXXX  X XXX  X\",\n            \"XXX XX XXXX  XXX XXXX X X XX XXXXXXX \",\n            \"XXX X X    X  XXXX   XXX XX XXX X XXX\",\n            \"    XX XXX  XXX  X    X   X X  XXXXX \",\n            \"XX XX X  XXX X X      XX X  XX  X   X\",\n            \"  XX   XXXX     X  XX X   XXXX  XXXX \",\n            \"XXXXXXX X XXX XX X    XXXXX XXXXXXXX \",\n            \"        X  X X XXX XXXXX  XXX   XX   \",\n            \"XXXXXXX X  XX  X  XXX X    XX X X   X\",\n            \"X     X X X XX   X      X X X   X XXX\",\n            \"X XXX X  X X  X XXX   X XX  XXXXXXX X\",\n            \"X XXX X  XX X XXX  X  X X   XXXX   X \",\n            \"X XXX X XXX   X X X     X   X   XX XX\",\n            \"X     X    XXXX X XX   XX X  X   XX X\",\n            \"XXXXXXX   XXX XX  XXXX     X XXXX XXX\"\n        };\n        private static readonly string[] Modules94 = {\n            \"XXXXXXX XXX X  XX XXX X    X   X XX XX  X XXXXXXX\",\n            \"X     X    XX XX X  X XX   XX      X XXXX X     X\",\n            \"X XXX X  X    X  X XXX X   XXX  X   X  XX X XXX X\",\n            \"X XXX X XXXXX XXXXXX  X XX XX     X    X  X XXX X\",\n            \"X XXX X   XXXXX XXX  XXXXXXXXX  X XX X    X XXX X\",\n            \"X     X  X  XXX  XX   X   X XX   X    X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"           XX X  X X XX   XX     X   X X         \",\n            \"  X XXX X XX X XX XX  XXXXX X  X XX XXX XX   X  X\",\n            \" X   X  X X X    X   X   X X XXX X   X    XXXX   \",\n            \" XXX  X X  XXXXXXX  X  X  XXXX   XX XXXX  XX XX X\",\n            \"X XXXX X  X X   X   XXX X  XX  X X X X    X XX   \",\n            \"X X XXXX  X  X X  X    X  X X XX XXX XXX   XXXX X\",\n            \"X    X X XX  X XX X XX   X  X  X X XXX  X X X X  \",\n            \" X    X      XX XXXX X    X  X XXXXX XXX  XXX  XX\",\n            \"  XXX  X    XXXXX X X  XX X X     XX  XXXX XX XX \",\n            \"  X   X  XX X XXX X  XXXXXXXXXXX   X   XXXX X XXX\",\n            \" XX    XXX XXXX XX X XXX XX XX  X XXX XX X XX    \",\n            \"X   XXX XXX XX XXXX    X  X X  XX XX  XXXXX      \",\n            \" X     XX XXXXX     X  X X XX XX X XX  X    XX  X\",\n            \"XX XX X X   X  X X X X X X X XXXX   X   XX XXXXX \",\n            \" X XX     X  XXX  X XXXXX X XXXX X  XXX X  X XXXX\",\n            \"X X XXXXX  XX XX  X   XXXXX X  XXXXXX   XXXXXX   \",\n            \"XXX X   X XXX X XXX   X   X  XX      XX X   X   X\",\n            \" X  X X XX XX X     XXX X XXXX  X XX XXXX X XXX  \",\n            \"XXXXX   XX XXXXXX    XX   X  X   X XX   X   XX   \",\n            \"  XXXXXXXX   X XXX  X XXXXXX  X X X XXX XXXXXXX X\",\n            \"XXX  X   XXXXX X  XXXX X X   X X  X   XXX X X    \",\n            \"XXX  XXX X    XX  X  X X     XXX    XX XX   XXX X\",\n            \" XXXX  XX XXXXX X    XX  X     XX X   X XXX X XX \",\n            \"   X  XXX   XX XXX     X X X XXX  XXX XXX      X \",\n            \" X XXX XXX XX  XX XX XX XX  XX X  XX  XXXX  X XXX\",\n            \" XXXX XXXXX X XXX         XXX XX   X     X XX XX \",\n            \"X    X   XXXX X  X  XX XXXX XXXXX XXX XX   X  XX \",\n            \"  XXX X  XXXX  X X X XX X    X X  XX  X X  XX  X \",\n            \"  X XX XXX    XXX  XX      XXX    X   XX XXX  XXX\",\n            \" X XX X XX X   XXXX XXXX  XX  X X   X     XXX XX \",\n            \"  XXX  XXX XXXXXX  X XX   XX X    X   XXX  X X   \",\n            \" X   XXX X XXX   X    XXXXXXXXX X X X X   XXXXX  \",\n            \" XXX   XXX   X XX   X  XX    XX  X   X  X  X X XX\",\n            \"XXX   XXXXXXXXX X X  XXXXXXX XX XXX XXXXXXXXXXXXX\",\n            \"        XX     X   X  X   X XXX  X   X  X   X    \",\n            \"XXXXXXX   X XX        X X X  X  XXX XXX X X XX X \",\n            \"X     X X   XXX    XX X   X XXX  XX  XXXX   XXXXX\",\n            \"X XXX X XX   X XXXXX  XXXXXX    XX X X XXXXXX X X\",\n            \"X XXX X  XX X   XX      X         X  XXX X XX    \",\n            \"X XXX X XXX XXX XXX X XX XXX XX XX   X X XX X X X\",\n            \"X     X   XXX XX    XX     XX   XX X X XXX XXXXXX\",\n            \"XXXXXXX    XX   X XXXX XX XX XX X X XXXX XX X X X\"\n        };\n        private static readonly string[] Modules95 = {\n            \"XXXXXXX XXX X  XX XXX X    X   X XX XX  X XXXXXXX\",\n            \"X     X    XX XX X  X XX   XX      X XXXX X     X\",\n            \"X XXX X  X    X  X XXX X   XXX  X   X  XX X XXX X\",\n            \"X XXX X XXXXX XXXXXX  X XX XX     X    X  X XXX X\",\n            \"X XXX X   XXXXX XXX  XXXXXXXXX  X XX X    X XXX X\",\n            \"X     X  X  XXX  XX   X   X XX   X    X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"           XX X  X X XX   XX     X   X X         \",\n            \"  X XXX X XX X XX XX  XXXXX X  X XX XXX XX   X  X\",\n            \" X   X  X X X    X   X   X X XXX X   X    XXXX   \",\n            \" XXX  X X  XXXXXXX  X  X  XXXX   XX XXXX  XX XX X\",\n            \"X XXXX X  X X   X   XXX X  XX  X X X X    X XX   \",\n            \"X X XXXX  X  X X  X    X  X X XX XXX XXX   XXXX X\",\n            \"X    X X XX  X XX X XX   X  X  X X XXX  X X X X  \",\n            \" X    X      XX XXXX X    X  X XXXXX XXX  XXX  XX\",\n            \"  XXX  X    XXXXX X X  XX X X     XX  XXXX XX XX \",\n            \"  X   X  XX X XXX X  XXXXXXXXXXX   X   XXXX X XXX\",\n            \" XX    XXX XXXX XX X XXX XX XX  X XXX XX X XX    \",\n            \"X   XXX XXX XX XXXX    X  X X  XX XX  XXXXX      \",\n            \" X     XX XXXXX     X  X X XX XX X XX  X    XX  X\",\n            \"XX XX X X   X  X X X X X X X XXXX   X   XX XXXXX \",\n            \" X XX     X  XXX  X XXXXX X XXXX X  XXX X  X XXXX\",\n            \"X X XXXXX  XX XX  X   XXXXX X  XXXXXX   XXXXXX   \",\n            \"XXX X   X XXX X XXX   X   X  XX      XX X   X   X\",\n            \" X  X X XX XX X     XXX X XXXX  X XX XXXX X XXX  \",\n            \"XXXXX   XX XXXXXX    XX   X  X   X XX   X   XX   \",\n            \"  XXXXXXXX   X XXX  X XXXXXX  X X X XXX XXXXXXX X\",\n            \"XXX  X   XXXXX X  XXXX X X   X X  X   XXX X X    \",\n            \"XXX  XXX X    XX  X  X X     XXX    XX XX   XXX X\",\n            \" XXXX  XX XXXXX X    XX  X     XX X   X XXX X XX \",\n            \"   X  XXX   XX XXX     X X X XXX  XXX XXX      X \",\n            \" X XXX XXX XX  XX XX XX XX  XX X  XX  XXXX  X XXX\",\n            \" XXXX XXXXX X XXX         XXX XX   X     X XX XX \",\n            \"X    X   XXXX X  X  XX XXXX XXXXX XXX XX   X  XX \",\n            \"  XXX X  XXXX  X X X XX X    X X  XX  X X  XX  X \",\n            \"  X XX XXX    XXX  XX      XXX    X   XX XXX  XXX\",\n            \" X XX X XX X   XXXX XXXX  XX  X X   X     XXX XX \",\n            \"  XXX  XXX XXXXXX  X XX   XX X    X   XXX  X X   \",\n            \" X   XXX X XXX   X    XXXXXXXXX X X X X   XXXXX  \",\n            \" XXX   XXX   X XX   X  XX    XX  X   X  X  X X XX\",\n            \"XXX   XXXXXXXXX X X  XXXXXXX XX XXX XXXXXXXXXXXXX\",\n            \"        XX     X   X  X   X XXX  X   X  X   X    \",\n            \"XXXXXXX   X XX        X X X  X  XXX XXX X X XX X \",\n            \"X     X X   XXX    XX X   X XXX  XX  XXXX   XXXXX\",\n            \"X XXX X XX   X XXXXX  XXXXXX    XX X X XXXXXX X X\",\n            \"X XXX X  XX X   XX      X         X  XXX X XX    \",\n            \"X XXX X XXX XXX XXX X XX XXX XX XX   X X XX X X X\",\n            \"X     X   XXX XX    XX     XX   XX X X XXX XXXXXX\",\n            \"XXXXXXX    XX   X XXXX XX XX XX X X XXXX XX X X X\"\n        };\n        private static readonly string[] Modules96 = {\n            \"XXXXXXX       X  XX X XXXXXXX\",\n            \"X     X     X   XXXXX X     X\",\n            \"X XXX X  X  X XX  X X X XXX X\",\n            \"X XXX X  XX XX    XXX X XXX X\",\n            \"X XXX X   XX     XXXX X XXX X\",\n            \"X     X X X X  X XX   X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"         X   X X  XXX        \",\n            \"X  X XX X X X X   X  X X     \",\n            \"XX   X  XX X X    X X X  X XX\",\n            \"  X X XX  X XXXX    XX XX  XX\",\n            \"XX XXX X X   X  XX    X  X  X\",\n            \"XX XX XXXXX   XXX X  XX   X X\",\n            \"XX  X  XXXX XXXX X   X XX   X\",\n            \"X X  XX   X  XXX XXX  X X X  \",\n            \"X   XX XXXXX     XXX   X XX  \",\n            \"X    XX XXX XX  XXX  XX X X  \",\n            \"   XX  X X  XXX     XXX XXXX \",\n            \"X X X X XX    XXX XXX XX X   \",\n            \"  XXXX XXXX   X     X  X XX  \",\n            \"X X X XX  XXX  XXX  XXXXX X X\",\n            \"        XX XX XXX  XX   XX XX\",\n            \"XXXXXXX  XX X  X X  X X X  XX\",\n            \"X     X XX  X X  X  X   XX  X\",\n            \"X XXX X  XX X    XXXXXXXX X X\",\n            \"X XXX X X XXX   XXXX X XX  X \",\n            \"X XXX X   X X XXXXX   X  X  X\",\n            \"X     X  XX     X XX X  XXXX \",\n            \"XXXXXXX X XXXXXX   X     X X \"\n        };\n        private static readonly string[] Modules97 = {\n            \"XXXXXXX X   X X XXXX X     X X  X XXXXXXX\",\n            \"X     X X X X  X X  XXXXX  X X  X X     X\",\n            \"X XXX X X  X X     XX X XX      X X XXX X\",\n            \"X XXX X XXX X X  XXXXX  X X  XX X X XXX X\",\n            \"X XXX X    XXXX   XXX   XXX  XXXX X XXX X\",\n            \"X     X X    XX X XX     XX X XX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXX  XXXXX  X X XXXX            \",\n            \"XX  XXX   XXXXX X XX     X    XXX  X XXXX\",\n            \" XXX     XXX X     XX X XXX X        XX  \",\n            \"XX X XX XX  X  X X  XXXXX   XX XX   XXX  \",\n            \"  XXXX        XXXXX  X X  XXXXX  X X XXX \",\n            \" X    XX  X XXX   XXX   XXX   XXXXXXXX XX\",\n            \" XX  X X        XX X XX     X  X    XXXX \",\n            \"XX  X XX XX  XX X XX     XX X XX XX  X X \",\n            \"X X  X X XX XX     XX X XX     XX XX    X\",\n            \"  XXX X   XXXX X    X XXX XX X  X X   X  \",\n            \"X X  X        X XXXX X     X XXXX XX XXX \",\n            \"  XX  XXXX   XX X XX     XXX  XX XX XXXXX\",\n            \"X  X   XXX  XX     XX X XX XX     XXX X X\",\n            \" XXX  XX XXX X XX     XX X  X  X    XXX  \",\n            \"X XXX  X  X XXX   XXX   XXX   XXXX X     \",\n            \"XXX   XXX XXX  X X  XXXXXX X  X XXXXX XX \",\n            \"X XXX  X XXX  XXXXX  X X X XX X   X XXX  \",\n            \" X XX X X X  XX X XX    XX    XXXX   XX  \",\n            \"X XX X  XXX XX     XX X XXX    XXXX  XX  \",\n            \"X  X XX   XXX  X X  XXXX    XX XX     X  \",\n            \" XXXXX XX  X  XXXXX  X XX XX XXX X X  XX \",\n            \"  XX XX  X  XXX   XXX   XXXX  XXXXXXX XXX\",\n            \"XXXXXX   XX     XX X XX     X  X    XXX X\",\n            \"  XXXXXXX    XX X XX     XX XXXX  X  X   \",\n            \"   X   X XX XX     XX X XX    XXX  X     \",\n            \"XXX  XX    XXX X    X XX  XXX X XXXXX X  \",\n            \"        X     X XXXX X XX  X XXXX   XXXX \",\n            \"XXXXXXX   X  XX X XX     XX   XXX X XXXXX\",\n            \"X     X XX  XX     XX X XX     XX   XXX X\",\n            \"X XXX X XXXX X XX     XX X XX   XXXXXX   \",\n            \"X XXX X   X XXX   XXX   XXX  XX XX  X   X\",\n            \"X XXX X  X XX  X X  XXXXXX X XX  X XX XXX\",\n            \"X     X X XX  XXXXX  X X XXXX  X XX XXXXX\",\n            \"XXXXXXX X    XX X XX    XX   X XXX  XXXX \"\n        };\n        private static readonly string[] Modules98 = {\n            \"XXXXXXX XXXXX XX  XX  XX    X   X XXXXXXX\",\n            \"X     X X X  XXX XXX XXX XXX XXX  X     X\",\n            \"X XXX X    XX X   X   X   X   XX  X XXX X\",\n            \"X XXX X    XX XXX XXX XXX XXX X X X XXX X\",\n            \"X XXX X XXX XXXXXXXXXXXXXXXXX XXX X XXX X\",\n            \"X     X X   X   X   X   X   X   X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X     X   X   X  XX  X           \",\n            \"XXX  XX XX  XXXX XXX XXX X XXXXXXXXXX  XX\",\n            \"X  X   XXXXXX X   X   X     X XXX   X    \",\n            \"  XX XXX X   XXX XXX XXX XX XXX          \",\n            \"  X      XXX  X   X   X   X   X   X  XX X\",\n            \" X XXXXX X XXXXXXXXXXXXXXXXXXXXXX   XX   \",\n            \"X    X  X   XXX XXX XXX XXX X X X      X \",\n            \"  X X X XXX X   X   X   X   X   XXX X XX \",\n            \"X XXX  X   XXX XXX XXX XXX XXX XXX     X \",\n            \"  X  XX  X  XX  XX  XX  X X X   XX X  XXX\",\n            \" X   X XX   XX  XX  XX  XXXX X    XXX  X \",\n            \"XX X  X  X  X   X   X   X  X    XXX    XX\",\n            \"X   XX XX XXXX XXX XXX XXX   X   X  X XX \",\n            \" XX XXXX     X   X   X   X X X X XXXXXXXX\",\n            \" X XX   X X                      X XXXX  \",\n            \"      X   XX XXX XXX XXX  XX   X XXX X X \",\n            \"X X  X X      X   X   X  X   XX  X XXXXXX\",\n            \" X   XX XX X XXX XXX XXXXX XXXXXX XX XXXX\",\n            \" X X X X XX   X   X   X       X  XX X    \",\n            \" XXX XXXX XX XXX XXX XXXXXX XXX     XX   \",\n            \" XX    XXXX   X   X   X X X X XX  X   X X\",\n            \"  X X X   XXXXXXXXXXXXXXXXX XXXXX   X X  \",\n            \"   XXX XXXX XXX XXX XXX XXX X X X       X\",\n            \"XX XXXX     X   X   X   X   XX  X X X X  \",\n            \"    XX X   XXX XXX XXX XXX XXXXXXXX    XX\",\n            \"XXXXX X  XX XX  XX  XX    X  XX XXXXX XXX\",\n            \"        X   XX  XX  XX X XXX X  X   X  X \",\n            \"XXXXXXX   X X   X   X   X       X X X  XX\",\n            \"X     X X XXXX XXX XXX XXX XXX XX   XXXX \",\n            \"X XXX X      X   X   X   X   X  XXXXXX XX\",\n            \"X XXX X   X                  X X X   XX X\",\n            \"X XXX X XX X XXX XXX XXX  XX X XXX X X XX\",\n            \"X     X XX    X   X   X  XX  X X   XXXX  \",\n            \"XXXXXXX XXXX XXX XXX XXXXX XX  XX XXXXX X\"\n        };\n        private static readonly string[] Modules99 = {\n            \"XXXXXXX       X  XX X XXXXXXX\",\n            \"X     X     X   XXXXX X     X\",\n            \"X XXX X  X  X XX  X X X XXX X\",\n            \"X XXX X  XX XX    XXX X XXX X\",\n            \"X XXX X   XX     XXXX X XXX X\",\n            \"X     X X X X  X XX   X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"         X   X X  XXX        \",\n            \"X  X XX X X X X   X  X X     \",\n            \"XX   X  XX X X    X X X  X XX\",\n            \"  X X XX  X XXXX    XX XX  XX\",\n            \"XX XXX X X   X  XX    X  X  X\",\n            \"XX XX XXXXX   XXX X  XX   X X\",\n            \"XX  X  XXXX XXXX X   X XX   X\",\n            \"X X  XX   X  XXX XXX  X X X  \",\n            \"X   XX XXXXX     XXX   X XX  \",\n            \"X    XX XXX XX  XXX  XX X X  \",\n            \"   XX  X X  XXX     XXX XXXX \",\n            \"X X X X XX    XXX XXX XX X   \",\n            \"  XXXX XXXX   X     X  X XX  \",\n            \"X X X XX  XXX  XXX  XXXXX X X\",\n            \"        XX XX XXX  XX   XX XX\",\n            \"XXXXXXX  XX X  X X  X X X  XX\",\n            \"X     X XX  X X  X  X   XX  X\",\n            \"X XXX X  XX X    XXXXXXXX X X\",\n            \"X XXX X X XXX   XXXX X XX  X \",\n            \"X XXX X   X X XXXXX   X  X  X\",\n            \"X     X  XX     X XX X  XXXX \",\n            \"XXXXXXX X XXXXXX   X     X X \"\n        };\n        private static readonly string[] Modules100 = {\n            \"XXXXXXX     XXX XX   X   XXX  X X XXXXXXX\",\n            \"X     X  X   X X X  XX XXXXXX XX  X     X\",\n            \"X XXX X XXX   XX XX  XXX X X   XX X XXX X\",\n            \"X XXX X XX   X X     X X  XX  XX  X XXX X\",\n            \"X XXX X XXX XX  XXX X X X  XXX    X XXX X\",\n            \"X     X X    XX  X X X       XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        XXX  XX XX XX   XXX XX  X        \",\n            \"X XXXXX   XX     XXX X   XX  X    XXXXX  \",\n            \" XXXX  XXXX  XX    XX XXX   XXXX X X     \",\n            \" XXXXXXX X XX X X XX  XXX  XXX XXX   XXX \",\n            \"    X   XX  X  XX   X     X XXX    X  X  \",\n            \"X X  XXX XX X XX  XXXXX X  XX    X  X  X \",\n            \"X  XXX  XXXX X XXX   X   XXX  X X  X XXX \",\n            \" X X  X   X XX   X  XX XXXXXX XX X    X X\",\n            \"X    X XXX X X  XXX  XXX X X   XXXX X XXX\",\n            \"XXX   XXX X X  XX    X X  XX  XXXXX XXX X\",\n            \"   X   X X  X   X X X X X  XXX         X \",\n            \" X XX X X X    XX XX  X      X  X XX X  X\",\n            \"XX X   X X XXX XX  XX   X X XXX  XX X  X \",\n            \"     XXXX XX  XXX XXXXX X   X   XXX XX X \",\n            \" X  X  X  XXX X XX   X    XX  XX  XX XXXX\",\n            \" XXX  X   X XX XX   X XXXX XXXXX X    X X\",\n            \"  X  X XX X      XX    X XXX X XX  X XX X\",\n            \" XXXXXXX    X X   X   XXX  XX XX X XX  X \",\n            \"XXXXX  X  X X  XXXX  X X X  X X     X  X \",\n            \" XX X XXX X  XXXXX XXX X XXXX XXX XXXX  X\",\n            \"  X  X  XXXX X XXXX XXX XX X   X XX X XXX\",\n            \"     XX XXXXXXX X    X    XX  X X XX X  X\",\n            \"XX          XX  X X X X X  XXX   X       \",\n            \"X X  XXX XXXX X X XX  X      X  XX   X X \",\n            \"X   X  XX   X X    XX   X X XXX   XX XX  \",\n            \"X X X XX XX XXXX  XXXXX X   X   XXXXX  X \",\n            \"        X X   XX X   X   XXX  X X   XXXXX\",\n            \"XXXXXXX  XX  XXX X  XX XXXXXX X X X X XX \",\n            \"X     X XX X  X  XX  XXX X X   XX   XXX  \",\n            \"X XXX X X    X  X    X X  XX  XXXXXXX  X \",\n            \"X XXX X XX XX X  XX XXX X  XX   X X    XX\",\n            \"X XXX X X   X X    X  X       XXXXXX X X \",\n            \"X     X   XXXX XXXXXX X XX  XX   X X   X \",\n            \"XXXXXXX XXXXX  X  XXXX  X    XXXX X XX   \"\n        };\n        private static readonly string[] Modules101 = {\n            \"XXXXXXX X XXX      XXXXX   XXXXX  XXXXXXX\",\n            \"X     X     XX   XX X  X XX X  X  X     X\",\n            \"X XXX X XX X X XX XXXX    XXXX    X XXX X\",\n            \"X XXX X     XX    X    XX X    X  X XXX X\",\n            \"X XXX X  X XX X   XX   XXXXX   XX X XXX X\",\n            \"X     X XX  XXXX XXX    X  X X    X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"          X XXXXXXXXXX   XXXXXX X        \",\n            \"X X   XX     XX X X XXXX    X  XX  X  X X\",\n            \"XXX X  XX X XXXX  XXXXXX   XXX X   XX  X \",\n            \"   X  X XXX XX   XX X   XXXX     XXX   XX\",\n            \"X  XX   X       X X XX  X XXXX   X XX XX \",\n            \"XX  X X XX XXX XXXX  X XXXXX X XXXXXXXXXX\",\n            \"    XX  X XXXX  XXX     XXX     XX XXXX  \",\n            \"  XXXXXXX  XX X X  X XX X  X XX XXXX X   \",\n            \"   X X XX  XXX XXX    XXXX    XXX X   X X\",\n            \"X   XXX    XXXXX X XXXX  X XXXX  X XX    \",\n            \"X      X       XX   XXX     XXX  X  X    \",\n            \"  XX XXX   X XXX XX X  X XX X  X      X  \",\n            \" X     X   X X  X XXXX    XXXX    X      \",\n            \" XX X X      X X XX  X XXXX  X X X XX XXX\",\n            \"XX XX  X XXX  XXXXX     X X    X XXXXXX X\",\n            \"   XXXXXX  XX XX X X    X XX  X XXXX X   \",\n            \"X XX X XXXX X  X X   X XXXX  XXXXX XXXXXX\",\n            \"   X  X X XXXX  XXXXX   XXXX XX XXX XXXXX\",\n            \" XX X  X XX     XX     XXX XX    X       \",\n            \"     XX    X   X     XX    X XX     X X  \",\n            \"X XX X  X XXXX  XX  X X  X    XX  X   X X\",\n            \" XX X XX X  X    X XXXXX X XXXXX      X  \",\n            \" X X     X   X XX   XXX     XXX     X  X \",\n            \"XX  X X XX  XX   XX X  X XX X  X XXX  XXX\",\n            \"   XX  XXX    XX  XXXX    XXXX   XXXXXXX \",\n            \"XX   XX XX XX  XXXX  X XXXX  X XXXXXXXXXX\",\n            \"        XXX X X  XX     XXX     X   XXX X\",\n            \"XXXXXXX XX X   XX  X XX X  X XXXX X XX XX\",\n            \"X     X    XX XX X    XXXX    XXX   XXXX \",\n            \"X XXX X   XX  X  X XXXX  X XXXX XXXXXXXXX\",\n            \"X XXX X    X  XX X  X X     X X XXX X   X\",\n            \"X XXX X X XXXX  XX  X  X XX XXX  X    XXX\",\n            \"X     X  XXX X  XX XXXX  X XXXX    XX    \",\n            \"XXXXXXX XX  XXXXXXX  XXXXXX X X    XX X X\"\n        };\n        private static readonly string[] Modules102 = {\n            \"XXXXXXX  X    X  X XXXX   XXXXXXX\",\n            \"X     X X    X  X X       X     X\",\n            \"X XXX X  XX X  X    XX X  X XXX X\",\n            \"X XXX X X XX  XXX X X X X X XXX X\",\n            \"X XXX X X  XXXXXXX   XXX  X XXX X\",\n            \"X     X   XXXX XXX X  X X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X   X  XXX   XXX         \",\n            \" X XXXX XXX  X XX X    X XX XX X \",\n            \"     X  X XX  X  XXX XXX  X   X X\",\n            \"X XXXXX XXXX XXX   XX XX  X X X  \",\n            \"X X X  X X  XX    XXXXXXX X XX   \",\n            \" XXX  XX XX  X XXX X X XX     X  \",\n            \"X  XX  X X X   XXXXXX   XXX X XXX\",\n            \"X  X XX  XX XXXX  XXX X XX X XXXX\",\n            \"XXXX   X   X XXX  X XX   XXX  XX \",\n            \"  X  XX X  X  X XXX  X XX  XXX  X\",\n            \"XX X    XX  X X X     X X XX XXXX\",\n            \"      XXX  X        XXX        X \",\n            \"XXX     XX    XXXXXXX X XX   X   \",\n            \"   X  XXX   X   XX   XX  XXXX   X\",\n            \"XXX X  X XXXXX         XXX X  X  \",\n            \"X     XX XXX XXXX  XXX  X    XXX \",\n            \"X X    XXX  X      XXXX  XX X  XX\",\n            \"XXX X X X X X    XX  XX XXXXXXXXX\",\n            \"        X X   XX XX XX  X   X XX \",\n            \"XXXXXXX  X  XXX X       X X XX  X\",\n            \"X     X XX  X   XX   XX X   X   X\",\n            \"X XXX X XX X XX XXX  XX XXXXXXXX \",\n            \"X XXX X X XXX X   X   X  XXXX   X\",\n            \"X XXX X       XXXX X XXXXX X X XX\",\n            \"X     X XXX  X X XXXXXX XXX X  XX\",\n            \"XXXXXXX  X  X X X XX   X  XXXX   \"\n        };\n        private static readonly string[] Modules103 = {\n            \"XXXXXXX XX  XX XX   X X XX   X X X  X XXXXXXX\",\n            \"X     X XXX  X  XXXX  X  X  XXXXXX X  X     X\",\n            \"X XXX X XXXX  XX   X  X   XXXX XXX X  X XXX X\",\n            \"X XXX X XXXXX     X    XX  X X X   XX X XXX X\",\n            \"X XXX X X XX  XX XXXXXXXX XXXX XX XXX X XXX X\",\n            \"X     X    X  X XXXXX   X  X XXX X    X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X X   XXX XXX   XX X X X X  X        \",\n            \" XX X XX X   XXXXX  XXXXXXXX XXX XX X X XXXXX\",\n            \" X X   X  X X XX XX  X X X XXX XXX  X X XX  X\",\n            \"X   X X XXXX X  XXX   XX XXX XXX XXX    XXX  \",\n            \" XX  X     XX XXXX X XX   XXX X   XX X   X XX\",\n            \" X X XXX  XXXX XXXX X       X   X  XXXX XXXX \",\n            \"X X      XX     XX  XX  X X   X   XXX X   XXX\",\n            \"X     X  XX  XXX  X X XX  X X X X X X   X  X \",\n            \"X X X     X XX  XX X    XX  XX X X XXX X  X  \",\n            \"X X   XXXX    XX   XX  XXXXXXXXX X XX  X  X X\",\n            \" X X    X X X   XX   X X X   X XX XXX XXXX XX\",\n            \"XX  XXXX XXX  XXXXX  X X XX XXXX      XX XXX \",\n            \"  X X    X XXXXXX  X XX   XX  XX   X  X  X  X\",\n            \"XX  XXXXXXXXX    XXXXXXXX  X       XXXXXXXX X\",\n            \"X XXX   XXXX   X XX X   X XXX X   XXX   XX X \",\n            \" XX X X XX XXX    XXX X X XX  XXX   X X XX X \",\n            \"XX  X   X XXX  X X  X   X    X XX XXX   XXXXX\",\n            \"XXXXXXXXX X  XXX   XXXXXXXX XX     XXXXXX XX \",\n            \"X       X XXXX  XX XXXXXX X  XX  XXX XXX X   \",\n            \"X X XXXXX XXXX XX  XX XX  X X X XX  XX XXX  X\",\n            \" X XX  XX X  X XX X XX  X XX  XX X XXX X XX  \",\n            \"X    XX   X XX X   XXXX   XX X X XXXX XX  X X\",\n            \" X  X  X    XXXX  X  XXX XXXXXXXXX  X  XXX X \",\n            \" XX  XX  X   X XX XXXXXXXX X X X XXX  X  XXX \",\n            \"XX  XX   XXX    X   XXXX X    X   XX    X XXX\",\n            \"XX X XXX X  XXX XXXX  X  X  X   X    X  X XX \",\n            \"X       X X  X   XXXXXXX X    X   XX XXXX XX \",\n            \"    X X XXX  XX X X  XX  X  X X X X  X  X  X \",\n            \" XXXX   X XXXX XX  XX    X X X X X   X X  XX \",\n            \"X  XX X XXXX  X X  XXXXXX    XXX XXXXXXXX X X\",\n            \"        X  XXX XX XXX   X  X X XXX XX   XX XX\",\n            \"XXXXXXX XX  X X XX XX X XXXX XXX XXXX X XXXXX\",\n            \"X     X  XX  X   X XX   XX XX XX X  X   XX  X\",\n            \"X XXX X XX  X  XXXXXXXXXX X     XX XXXXXXXXXX\",\n            \"X XXX X   X   X    XX X  XX   XX XX XX    XXX\",\n            \"X XXX X X    XX XX X  X   X X XXX X  X      X\",\n            \"X     X X XXX X X    X   X   X     X XX   XX \",\n            \"XXXXXXX   X X XXX XX X XX   XXX  X XX X X XXX\"\n        };\n        private static readonly string[] Modules104 = {\n            \"XXXXXXX    XX   XX XXXXXX  X        X XXXXXXX\",\n            \"X     X   XX   XX X  XXX   XX X X  X  X     X\",\n            \"X XXX X   X  XX  X   XXX XX X   X  X  X XXX X\",\n            \"X XXX X X X XX X XXX X  XX       X XX X XXX X\",\n            \"X XXX X  XX  XX   X XXXXXXX X   XXXXX X XXX X\",\n            \"X     X XX   XXXX X X   XX    X       X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XXXX XX XXX X   X          XX        \",\n            \" XX   X    X  X X  XXXXXX X   X   XXX XX X   \",\n            \"     X   XXXXXX   XX        X   X  XXXXXX  XX\",\n            \"XX XXXXXX X    XX XX XX   X   X   X  X XX XX \",\n            \"  XX   X X  XXX X     XX XX XXXX XX    X    X\",\n            \"      X  XX X   X XXXX X X XXX XXX  X XXX X  \",\n            \"XXXX X X  XX X XX  XX  XXXXX XXX XX XXXX XX X\",\n            \"XX X XXX  XX  X  XXXXXX  XXXXXXXXXXXXX XXX   \",\n            \"XXXXXX X XXXX  XX    X XX  XX       X    XXX \",\n            \"XXXX XX X  X XX  X  XX  X X X X     XX   XXXX\",\n            \"     X XXXXXXX XX  X       X    XXX XXX X   X\",\n            \"X  XX X   X  XX X XX      XXX X  X X XX   X  \",\n            \" XXXXX X    X X XX    XX XX  XX  X   XXX   XX\",\n            \"X  XXXXXX X XX X  X XXXXXX   X X X  XXXXX XXX\",\n            \"XXX X   X X  X    XXX   XXX XXXX XX X   X    \",\n            \"  XXX X X   X  X XX X X XXX  XX XX XX X X    \",\n            \"X  XX   XXX XX     XX   XX X    XXX X   X X X\",\n            \"X X XXXXXXXX  X  X  XXXXX XXX  X X  XXXXXXX  \",\n            \"XX X X XXXX X  XX   X X XXXX  XX  X   X    X \",\n            \"XXXXX X XXX X   XX  XXX  XXXXXXXX  XX   X  XX\",\n            \"    XX  XXXX    XXXXX  XXXX  XX     X     XX \",\n            \"XX X  XX XXXX    X  X XX XX       X XXX  XXXX\",\n            \"   XXX   X XX X  XXX  X   X X X X  XXX  X    \",\n            \"  XX  XX   X    XXX X X X         X  XXX  X  \",\n            \"X  XX  X  X  X XXX XX X    X XXX XX  X XXXX X\",\n            \"X     X    XX XXX X  XXX   XXX XXX X   XXXX  \",\n            \"XX X X XXXXX   X  X X X    X XXX XX   X XXX  \",\n            \"    X XXX XX  XXXXXX  XX   XXXXXXXXX   XXX   \",\n            \" XXXX  XXXX X   XX  XX X           X     XX  \",\n            \"X  XX XXX X  XXXXX  XXXXXX X  X   X XXXXXXXXX\",\n            \"        XX  X   XXX X   XX      X   X   X   X\",\n            \"XXXXXXX    XXXXXX   X X X X   X   X X X X X X\",\n            \"X     X   XX   X    X   X   XXX    XX   X  XX\",\n            \"X XXX X    XXX  X X XXXXXXXX X XX   XXXXX X X\",\n            \"X XXX X  XXX XXX X  XXXX  XX XX   XXX  X XX X\",\n            \"X XXX X XX X  XXX    XXX XXXXXX XXXX   X X XX\",\n            \"X     X XXX XXXXXX X   X   X   X X    XX XX  \",\n            \"XXXXXXX  XXXXXX XXX     XX XX XX    XXXXXXX X\"\n        };\n        private static readonly string[] Modules105 = {\n            \"XXXXXXX  XXXXXX X X XXX XX  X XXXXXXX\",\n            \"X     X   X X X X  X XX XXXX  X     X\",\n            \"X XXX X XX XX   X  X X X  XX  X XXX X\",\n            \"X XXX X XXXXX XX XXX    X   X X XXX X\",\n            \"X XXX X   X X XXX  XXXX X XX  X XXX X\",\n            \"X     X  X X  X  XXXX      X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"            X  X X XXX XXX X         \",\n            \"   XX XX    XX XXXXX XXXXX XX    XX  \",\n            \"  XX       XX XX X XX X      XX XX  X\",\n            \"XXXX  XXX X  X   X XX XXX X  XXXXXXX \",\n            \" X X X  XX X  X     XXX XXXX        X\",\n            \"X X X XXXX  XX  XXX XXXX  X  X XX   X\",\n            \"    X  X      XXXXX XXXXX XX  XX     \",\n            \"   XXXX   X XX       X   X  X XX     \",\n            \"X  X X X     XX X  X X XXXXX X X   XX\",\n            \"XX X  X X   X XXX  X XX   X  X   X XX\",\n            \"X X  X XXX X X X     X XXXXX XXXX XX \",\n            \"X   XXX  X     XX X   XX     XX X X  \",\n            \"X X XX XX X XX  X X XX X  X  XXXXX X \",\n            \"X  XX X  XXXX    X XX X X  XX XXX   X\",\n            \" X XX  X  X  XX X   XX  XX X   X X  X\",\n            \"X XXXXX X  XXXX   XX  X XX  X  X X   \",\n            \"XX XXX X   XXX   X XXX   X XXX   X   \",\n            \"X  X  X XXX X X X  XX XXXX X   XXX XX\",\n            \"X   X   XX XX XXX X       X   X  X XX\",\n            \"XX  X X XX X    X    XXXX  X  XXXXX  \",\n            \"X XX X X XX      X XXXXX X  X  X  XX \",\n            \"X X   X X   X X X X   X  X XXXXXXX  X\",\n            \"        XXX  XX X X X X X   X   X XXX\",\n            \"XXXXXXX X   X   XXXX    X  XX X X XX \",\n            \"X     X  XXX    XX XXXXX  XXX   X XX \",\n            \"X XXX X XXX X  X X   XXX  X XXXXX X X\",\n            \"X XXX X XXX   XX   X    X X X  X XX  \",\n            \"X XXX X      XX X X  XXX XXX  X   XXX\",\n            \"X     X   XXXXX XX  X XXXX  XXXXXXXXX\",\n            \"XXXXXXX   XXX XX  X X XXXX X XX  X  X\"\n        };\n        private static readonly string[] Modules106 = {\n            \"XXXXXXX XXX X   X XX X X   XXXX X  X X  X XXXXXXX\",\n            \"X     X   X X  X     X  X   XX    X XXXXX X     X\",\n            \"X XXX X  X X       X  X XXXXX XXXX  XX XX X XXX X\",\n            \"X XXX X XX  XX    X XXX XXXXXXXXXXXXXX X  X XXX X\",\n            \"X XXX X  XXX XX    XX XXXXXX  XX X X X    X XXX X\",\n            \"X     X  XX X   X X  XX   XXXXX  X X  X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          XXX  X   X  X   XXX     XX  X X        \",\n            \"  X XXX X X  X XX XX XXXXXX X X    X     X   X  X\",\n            \"X  XXX XXXXXXX X  X X XX  X  X XX XXX X XX    XX \",\n            \"   X  XXX X          XX XX  XX X  XX  X  XX X  X \",\n            \"  X X  X    X X XX X XX  XXXX XXX X   X  X X  XXX\",\n            \"XXX   XX  X XX XX X   XXXX X XXXX   X    XXX  XX \",\n            \" XXX      XXX   XX X    XXX X   X X   X XX XXX  X\",\n            \"   XXXXX X  XXXXX X    XXXXX    X X X XX XX XXX  \",\n            \"  XXXX  X XXX     X XX  XXX  X XXX   X X  XXXX XX\",\n            \"  X XXXXX      X     XX  X XXX   XX XXX X  X XXX \",\n            \" XXX X X     X XXX  X XXXXXX     X   X  X X  X XX\",\n            \"XX X  X X     X XXXX   X XX  X X XX XXX   X XX X \",\n            \"XX      X   XX XXX  XX X  XX XX XX   X  XX XXXX  \",\n            \"  XXXXX   XX  X X X   XXX    X XXXX XX XXX X  X X\",\n            \"XX   X X  XX  X XX  XXX X XXXX   XX  XXX XX XX XX\",\n            \"X XXXXXXXXXXXX  X  X  XXXXX   XXX   X XXXXXXXX X \",\n            \"  X X   X X  XX  X X  X   X   XX  XXX  XX   XXX X\",\n            \"  XXX X XXXX  XX X  X X X X  XXX  XX X  X X X X X\",\n            \"XXX X   XX   X X     XX   X  XXXXXXX XXXX   XX X \",\n            \"X   XXXXX    X  XXXX  XXXXXX   X  XX XXXXXXXXXXX \",\n            \" XX XX  X   XX XX X XXXXX X  XX  X XX  X X X  XXX\",\n            \"X XX XXXX     X X         XXXX  XXXX  X  XXXX XX \",\n            \"X           XXXX  XX X XXXX  X   X  XX X X X X   \",\n            \"  XXXXX  XX    XXX XXXX X  X    XXX   X X  XXXX X\",\n            \"  X XX XXX XX XX   XXX     X X   X   X XX XX X   \",\n            \" XX  XXX X X   XXXX  X X   XX   XXX XXXX X  XXX X\",\n            \"  XXX  XXX   XX     XXX  X X XX  X   X   XX XX   \",\n            \"   XXXXXX    X XXX XX  X X  XXX XXX XXX      XX X\",\n            \" X XX  XXX X   X  XX XX XX XX  X X X X X  X XX   \",\n            \" X   XX  XXXX X X           XX X XXX XXXXX  XXX X\",\n            \"X    X XXXX   XX X X    X XXXXXXXX XXX X XX X XX \",\n            \" X   XX X   X X  XX   XXXX X XXX XXX XXX X     X \",\n            \" XXX   XX   XX    XXXXX   XX  XX  XX  XX X  X XX \",\n            \"XXX   X XX X X XX   X XXXXX X  X   X   XXXXXX X X\",\n            \"        X XXX  XX  X XX   X  XXXX XXX XXX   XX XX\",\n            \"XXXXXXX   XXXX    X  XX X X X XX  XX  XXX X XXXXX\",\n            \"X     X XXX  X XXXX X X   X    X X X X XX   XXX X\",\n            \"X XXX X X     XX      XXXXXXXXXX XXX XX XXXXXXXXX\",\n            \"X XXX X  XX XXXX  XX   X X    XXX  XXXX   X XX XX\",\n            \"X XXX X XXX XXXXXX  X   XXXX   X X X    X     X X\",\n            \"X     X  XXXXXX XX X   X     XXXXX X      XXXXXX \",\n            \"XXXXXXX     X XXX   XXXX  XXX   XXX  XX X XX  XXX\"\n        };\n        private static readonly string[] Modules107 = {\n            \"XXXXXXX   XXXX XXXX      X  X XXXX      X XXXXXXX\",\n            \"X     X XXXXXX   X X   XXX XX  X XXXX XXX X     X\",\n            \"X XXX X X    X X X   XXXX X XXX X  XX  XX X XXX X\",\n            \"X XXX X X  XX  X XXXX XXX X X X X X X  X  X XXX X\",\n            \"X XXX X X X   XX X  XXXXXXX  XX           X XXX X\",\n            \"X     X X XXXX XXXXX  X   X X XX     XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX XX   X   XX   X XX X XX  XXXX        \",\n            \"  X  XXXXXXX    XXX   XXXXXXXXXX X   X X X XXXXX \",\n            \"XX  X   X X X    XXXXXX  XXX    XXX XXXXX  X XX  \",\n            \" X   XX XXXX X X X X  XXX  XX    XX  XXX  XXXX   \",\n            \" XXXXX   X XXXXXX     XX  X XXX XXXX XXX     XX X\",\n            \"X XX XX  XXXX   XXXX XX X     X XX XXX X  X  XX  \",\n            \"  X  X X XX XX XX    X XX XXXX XXXXX XXXX   X  XX\",\n            \" X  X X    XX X XXXX X  X X  X XXXXXXXX   XXX XX \",\n            \" XX X  XXXX XX X XXXX  XX XX    X  X     XX X   X\",\n            \" XXXX X XX X X   X X  XX    X  X  XXX XXXX    X  \",\n            \"  X      X X    X  XXXX X X  X X   X   XXXXX    X\",\n            \"X    XXXXX X XXXX X  X    XX      XXX XX XXXX    \",\n            \"X  X X XXX XX   X  XX    XX   XXX  X   XX   X XX \",\n            \" XX X XX XX  XXXXXXX XX XX X    X XXX   X    XXXX\",\n            \"X  X     XX  XXXX  XX XXXXX X  X  XX  X   XXX   X\",\n            \"XXX XXXXX X X  XXX   XXXXXXX XX XX XXXX XXXXX    \",\n            \" XXXX   XXXX  XX     XX   XX XX  XX XX  X   X XXX\",\n            \" XX X X X X  XX    XXXX X XX  X  XX    XX X XXXXX\",\n            \"X XXX   X  X     X X  X   XX  X X X   X X   X    \",\n            \"XX XXXXXXX X   XX X  XXXXXX  X   XX   X XXXXX X  \",\n            \"  XXX  XXX XX   XXXXX X XXXX  XX    XX       XX X\",\n            \"XXX   X XX X XXXXX X X X XX X  XX X  XXX  X XXX  \",\n            \"XX X X X X XX X  XX     X XX   X   XX          X \",\n            \" XX X XX  XX X  X   X XXXX   X XX XX XXXXX  X XXX\",\n            \" XXXX   X   XXX  X  X  X X     X   X    XXX    X \",\n            \"  XX  X      X  X XX     X  XX XX XXX X    XX XXX\",\n            \" XX XX  X  X  XX X XX XX      XX   X   X  XXX  X \",\n            \" X  X X XX X    X   XX     XX XXX XXX XX X X  XXX\",\n            \"    XX  X    X   XX   XXX   XX           XXXX  X \",\n            \"   X  XX  X XXXXXX X X X X XX     X   X X  XX XXX\",\n            \"XX X    X XX XX      X XXXX X X X   X     XXXXX  \",\n            \" X   XXXXX XXXXX  XX XX X     X   X   X    X X   \",\n            \" XXX    XX XX  X XX X XX XX  XX  XX  XX    XXXX  \",\n            \"XXX   XXX       XX XXXXXXXXXXX   X   X  XXXXXXXXX\",\n            \"        XXX XX  XX    X   XX  X XXX XXX X   X   X\",\n            \"XXXXXXX XXX X  X XXX  X X XXXXX  XX  XX X X X X X\",\n            \"X     X X XX    X XXXXX   XX X          X   X XXX\",\n            \"X XXX X  X X XX  X X XXXXXX X X   X   XXXXXXX X X\",\n            \"X XXX X   XXX X  XX  X     X XX XX  X XX XXXX   X\",\n            \"X XXX X X XXX X X  XXX XX X  X       X XXX X XXXX\",\n            \"X     X   X X XXX    X   X X  X X    X X XX X X  \",\n            \"XXXXXXX  X XXXX XX XX X  XX XX XX XX  XXXXX  XX X\"\n        };\n        private static readonly string[] Modules108 = {\n            \"XXXXXXX  XXXXXXX  XX  X  XXXX       XX X XX X  XXX X X  XXXXX  XX X XX    X X XXXXXXX\",\n            \"X     X X  X   X X   XX X    X XXXX X XXXX   XX XXXX  X    XXXXX XX     X XX  X     X\",\n            \"X XXX X  X   XXX XXX X  XX XX  XXX     XX XXX  X X XX X    XXX  XXXX   XXXX   X XXX X\",\n            \"X XXX X X X X     X  X X  X XXXXX  XXXX    X X XXXX   XXX X XXXX X   X     X  X XXX X\",\n            \"X XXX X  XXX  XXX XX  X XXXXXXXXX   XX XXXX  X X X XXXXXXXXX  XXX   XX X XX   X XXX X\",\n            \"X     X XXXXX     X X       X   X X X X X    XX XXXXX   X X XXXXXX    X XX X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"             XX X XXXX  X   X   X  XXX X  XX  X XXXXX   XXXXXX  XXXX X X  XXX        \",\n            \"XXXXX XXXXX          X      XXXXX   X X X      X XXXXXXXXXX X  XX    X  XXX XX X X X \",\n            \" XX XX XX XX XXXXXXXX XXXXX X  X   XXX XX XX     X  XX  XX X   XX X  X XX XX  X  X   \",\n            \"X  X  XX XX XXX X  XX  X   X XXX XX X X X    XXX XX    X   XXXXX X XX   XXXX XXXX XXX\",\n            \"XX      XX XXXXXX  XXXXXX XXXX X X X X  XXX X X  X   XX  X XXX  X XXXX X   X   X   XX\",\n            \"  XX XXXX XXX X XX   X XX  X  X XX XXX   XXX X XXX    XXXX  XXXXXXX X X XXX XXXXXXX X\",\n            \"XXXXX  XX XXXXXX    X    XXX   X    XX X XXXX      XXX  XX     X     XXX   XXX   XX  \",\n            \"   XXXXXXX XXX X X   X XXX  XX  XXX XXXX X X XX X X       X XX   X X   XXX XXXX X  XX\",\n            \" XXX X X   X X X    XX  XXXX   X  X     XX XXX     X  XX X X X  X  XX  XX  XX  X    X\",\n            \"  XX  XX  XXXXXXXX XXXXX X X X X XXXXX     X   XX XXX XX X  X  XX X XX  X X XXX   XXX\",\n            \"XX X   XXX XXX X  X  X    XXX X   X X  X X X X  X  XXX  XX    X   X XXX    XX X   X  \",\n            \"  XXX XXX        XX   XX    X  X X X X X  XX    X X  XX X XXXXXX X    X XXXX XX XXX X\",\n            \"XXX XX X   XXX X X  X X X XXXXX   X   XXXXXXX  X  XX X  XX X X  X  XXXXX     X X   XX\",\n            \"X  X XX XX   X XX  XXXXXX  XXXX X XXXXX   XX X XX  XX XXXX  X  XX X  X  XXX XX X XXXX\",\n            \"XXXX   X XX  X  XXX      XXXX  X   X   X XXX   XXX XXX  XX  X X X X  X    XXX    X   \",\n            \"X XX  X  XX XX  XXX  X XXX  X X XXX X XX   X XXXX XX XXXX XXXXX XX    X XXX XXXXXX XX\",\n            \"X X  X  XX XX X XXX  XX XXXX X XXXXX   XXXX X    X X  XX XXX XX X  XXXXX    X  X   XX\",\n            \"  XX XX  X   XXX XXXXX X  XX  X X  XXX   XXX X XXXXX   X X     X  X XX   X  X     X  \",\n            \"X   XX XXX XX X   X   X  XXX   X    XX X XX    XXX XXX   X X   X  X XX  X XXX X      \",\n            \"XXX XXXX  XX   X X  XX XXX  XXXX XX X XX X   XXXX XX X X  XXXXXXXX  X X XXX XXXXXX XX\",\n            \"     X X   X  X            X X       XXXXXX XX X X XX    X X X  X XXXXXX       X    X\",\n            \"X   XXXXX XXXXXXX XXXXXX   XXXXXXX  XXX  XX  X XXXXXXXXXXXX  X X X  XXX X X XXXXXXX X\",\n            \"X XXX   XX   XXXX X   X XXXXX   X   XX   XX X  XXX XX   XXXX  XX  X XXXX    X   X X  \",\n            \"X XXX X XX  XXXX     X  XX XX X XXXXX XX X XX X   XXX X X XXXX X XX    XXX XX X XX XX\",\n            \"  XXX   XXXX X  XX   XX    XX   X   XX    X  X XXX  X   X  X    XXXXX  X X XX   X    \",\n            \"  XXXXXXX    X   X  XXX X X XXXXX  X X X  XXX   X  XXXXXXXX   XX     X  XXXXXXXXXXXX \",\n            \"XX     X  X   X  X X  X  XX   XXX    X   XX X  XX  XX X XX  X XX  X XX XX  XXXX     X\",\n            \" X XXXX XXX X  X   XXXX X  XX     XX XXX   XXXX X XX X      XX X XX   X XX XXXX    XX\",\n            \" X X    XX  X X XXXX X      XXXXXXX    XXXX X         X  X X    XXXXXX X   X XX XX  X\",\n            \"      XXX XX   XX XX X X  XX  X     X  X  XX   XX   X   X   X  XX X XX       X   XX X\",\n            \"X   XX   XX X X X X   X  XX X X X   X   XXX  X XXX X  XXXX     X     X  X     XX     \",\n            \"X  X XXXX  X X X  XXX X    XX  X XXXX X  X   XXXXXXX X    XXXXXXXXX   XXXXXXXXX XX XX\",\n            \"   X X X     XX XX X  X     X X XX   XXXX X X X  XX   X  X X  X X XXXX X      XXXX XX\",\n            \"X  X XXXXXXXX XXX XX   X  XXX X    XX XX XXX XX X X X         XX  X XXX X XXX  X XXXX\",\n            \"XXX XX X  XX  XXXX   XX X  X XXXXX X XXX  X   XXX  X  XXXXX   XX  XXXX X  XX  XX     \",\n            \"XX X  X X  XXX  X  X X  XXX  X X    X   XXX XX     XXX    X XXXX X     X X XXXX   XXX\",\n            \"X   X   X X  XX XX   X        XX   X XXXX  XX  X X X  X XX X  X X XX X X X   XX XX  X\",\n            \"XX XX X XXX  XX  X XXX X    XXX  XXXX  X  XX   XXX  XXX     XX X X  XXX X  X X   XX  \",\n            \" XXXX  XX    XX X X X X  XX   X  X     XXXX    X X X  XXXXX       X XX  X XXXXX XX   \",\n            \"X   XXXX  X    X XX     XX X XXXXXX X XX   X  XX XXX X  X X XXXX X    X XXXXXX XXX XX\",\n            \"X  X      XX    XX X X   XX  X  XX   X XXXX XXX    X   X   X     XXXXX X X   XX X    \",\n            \"XX  X X    XX     XX XXX   XX  XX X X  X  X    XXX   X   X    XXX X  X  X  X   X XX X\",\n            \"  XX         XX   X X X XXXX XX X  X   X  X      X XX  XXX X  X X    X  X  X XXXX    \",\n            \"XX  XXX X XX XXXX XX   XX X X  X  XX  X    XXXX XXXXXXX X XXXX   X    XXXXXXX XX    X\",\n            \" XX  X   X  XX  X X   X X X X XX XX  XXXX X XX    XXX XXXX X X    XXXX X      X X    \",\n            \"X X XXXXXX        XX XXXX XXXXXXX  XX X  X X X XXX  XXXXX X X XXX X XX     XXXXXXXXX \",\n            \"    X   X X XX    X   X  X  X   X    X XX XXX  X X  X   XXX X  X  XXXX  X  XX   XXX  \",\n            \"XXXXX X XXX  XX    X X X   XX X XXXX XXX   XXXX XXXXX X X X XX   X  X XXXXXXX X X  XX\",\n            \" XXXX   XXX X   XXXXXXX X XXX   XX XX  X XXX    X   X   XX X      XXXXXX   XX   X  X \",\n            \"    XXXXXX  X XXX X  X     XXXXXXX  X X X    X X   XXXXXXX  X  XX X XX     XXXXXXXXX \",\n            \"  X XX X  XXXXXX XX X XXXX    X X  XXX XXXXX     X   XX XX XX     X  XX X   X    X XX\",\n            \"  X X X XXX XX XX X  X X X X XX X X XXX X    XXX  X X  XX X XXX  X X  X XXXXXXX XX XX\",\n            \"X X X   X X   XX X    XXX   X  X X     XXXX XX X X   X  XX X    XXXXXXXX X  XXX      \",\n            \"X  XXXXXXX X     XXXXXXX  XX  X   XXX     X  X XX  XXX XXXX  XXX     X    XX XX XXX X\",\n            \" X  XX  XXX X XX    X X  XXX  X      X XXXX X  X X X  XX XX   XX    XXXXX X XX    XX \",\n            \" XX X X  X  X X   X XX  XXXXXXXXXXXX  X X  X XXX XXXX  X     XX  X  X  XXXXXX XX X XX\",\n            \" X X X  X    XX     XX XXXXX XXX  XX   XXX  XX X XX  X     X     XXXXX X       X X X \",\n            \"XX   XX X  XX   X  XXXXXXX XX X XXXXXX     X   XX XX XX XXX  X XX X  X     X XXXXXX X\",\n            \"XX   X XXXXX XX  XX XX  X XX  XXX X X    X   X XXXXX  X  X X  X      X  X   X  X X   \",\n            \"  X   XXXXX XX XXX  XXX  X X XXXXX  XX    X     X   X XX  XX X X X    XXX XX  X  X XX\",\n            \" X  X       X  X     XXXX   XX X X X    XXXXXX       X     X    X XXX XXXXXX  XXX   X\",\n            \"   XXXXX  X   XXX  XXX X  XX XXX X XX    XXX XXXX XX XXX X  X XX    X X  XXX XX XXXXX\",\n            \"X   X  X XX  XXX  X X X  XXX  XX   XXX  X XXXX  X  X  X XXX X XX   X XXXX   XXXX  XX \",\n            \"X XX XX X  XX XXXX X   X    XXX XXXXX X X    XX   XXX XXX X XXXX X  X   XXXXX XX X XX\",\n            \" XXX   XXXX X XXX   X X  XX X  X        X X X XX   X XX  XXX    XX XXX X    XX X   XX\",\n            \"X   XXX    XX  X XXXXXXX   XXX   X XX     X  XXXXXX  XX XXX X  X X  XXX X XX  X XXXXX\",\n            \"X    X   XX X X   X   X  XX     X    X   XXXX   X     X XXXXX  XX X XXX X X    X  X  \",\n            \"XXX X XXXXXX  X X XXX      X X X  XX  XXX  X XX X XXX  XX X XXXXXX    X XX XX  X XXXX\",\n            \" X X X XX XX X X  XXX X X   X X   X  X XX X XXXX X   XX X XXX   X  XXX X X XXXX X  XX\",\n            \"X     XX XX XX X XXX X X   XXXXXX XXX X   XX   XX   XXXXXX  XXXX  X  XX X  XXXXXXXX  \",\n            \"        X    X X XX X X XXX X   X  XXX X XX     XX  X   XX    X      XXX  XXX   XX   \",\n            \"XXXXXXX XXXXX XX  XXX XX XX X X XXX X XX     XX X XXX X X X  X X XX   XXXXX X X X XXX\",\n            \"X     X  X XXXX   XX X X   XX   XXX X X  XX    XXX XX   XXXX    X XXXXXX XXXX   X   X\",\n            \"X XXX X X   XX XXXX XX  X XXXXXXX  X X X XXXX   X  XXXXXX X XX X  X X   X XXXXXXXXX X\",\n            \"X XXX X XX   X X   X  X  X  XXXX X       XX XX XXX  X XXXX  X X X  XXXXXX XXXXX X X X\",\n            \"X XXX X XXX      XXXX   X    X   XXX  XX   XXXX X XX  XXX X  XX  X      XXXX      X X\",\n            \"X     X XX X  XXXX X X  XX  X X XXX    XX   X X    XX XXXX X X  X  XXX X    X X     X\",\n            \"XXXXXXX XX  XX XXXXXXX X  X X  X  XXXX   XXX  XXX XX X   X   XXXXXX  X        X   XXX\"\n        };\n        private static readonly string[] Modules109 = {\n            \"XXXXXXX   X  X      X X  XXXXX   XXXXX  X X  X XXX X XXXXX XX  XX X XXX X X   X  XX    XX XXXXXXX\",\n            \"X     X X   X X X   XX X      X  XX X X X  XXXXXX XX     XX  XXX X X  XXXXXX X    XXX   X X     X\",\n            \"X XXX X     XXXXXXXXXX  X  X  XXX   X XX XX  X  XX X  X  X  X  XX XXXX X  X X XXXX X   XX X XXX X\",\n            \"X XXX X XXXX      X XXXX  X    XX  X X  X XXXX X XX X  XXXXX  XX  X XXX    X     X  X   X X XXX X\",\n            \"X XXX X   X  XX     XX  X  XX X XXXXXX XX X X      XXXX XX  XXXXX   XXXXX  XX X  X  XX  X X XXX X\",\n            \"X     X X   XX  X X XXX   XX   XX   X X X  XXXXX  X X  XXXXXX   XX    X XXX  XXXXXX    X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX X  X XXXXX        XXX   X  X X   X  X XX       XX   XXXXX XX XX  XXXX XX XXX         \",\n            \"XXXXX XXXX  X XXX X  XXX  X X   XXXXXX  XX XX XX X  X XXX  XXXXXXX    X  XXX X    X  XX XX X X X \",\n            \"XX X     X X       X X  X  XX X  XX XX XXXX XX   X XXXX XX  XXXXXXX    X X  XXX     XX X XX   XX \",\n            \"XX  X X XX  XXX    XXXXX  X X  X  XX XX X  XXXXX  X X  XXXXX   X   X XXXX XX     XXXX X   X XXXXX\",\n            \" X  XX XXXX XX X X XXX X   XX X XXX XXXX XX  X  XX X XX      X XXXXX   X X  XXXXX  X X XXXXX  XX \",\n            \" XXX XXXXXX   X XX   XXX  X X  XX XX    X  XXX X    X XXX  X  X XX  X X XXXXXX  X X XXX X X XX  X\",\n            \" X  X     X X XX X XXX  X  X  XX X XXX XXXX X    X XXXX XX   XXXXXXX    XX X XX X   XX XXXXXX X  \",\n            \"XXX X XX X XXX   XXX  XX  X  X XX XXX X X  XXXXX  X X  XXXX X   X  X XXX  X      XX X XXX X XXXXX\",\n            \"    XX XX   X   XXXXX  X   X X   XXXX  XXXXXX  X   XX XXXX XX   X XX X X    X XX   X   XXXXX  X X\",\n            \" XXX  X  XXX  XX X XXX XX         X    X XXX X XX  X   X X      X X       XX  X XX  XX  X X  X XX\",\n            \" XX    X XX XX XX XX     XXXXX   X XXX X XX    XXX   XX       XX  XXXX  X X X XXXXXX   X  XXXX X \",\n            \"XXXXX XX  X   X XXXX X X  X X  XX X  XX  X    XXX X    X  X XX X X  X XX XXXXX XX XX XXX XX X  XX\",\n            \"  XXXX XX X XXX X X    XXX X XX  XXXX  XX XXXX     XX X XX  XXXX     X  XXXX  X     X  X X X   XX\",\n            \" X XX X  X     X  XXXXX   XXX  XX XXXX   XXX    XX   XXX X    X X X XXX  XXXX   XX    X X X  XXXX\",\n            \"X  X X XX X   XX X     XXXX  X X X  X   X X  X        X      XXX  X  XX X  X     X  X XXX X  X   \",\n            \"XXX X XXXX XX    XXX X X    X X XXXXXX X XX     XX X XX  XXXX X XX  X    XXXXX  X X  X   XX X X X\",\n            \"  X     XX X XXXXX     XX     XX    X  XX X XX X   XX X XX  XXXX XX     X XX     X  X  X X       \",\n            \"      X X X X XX XX XXX   XXX XXX  XXX   XXX   XXX   XXX      X  X  X      XX   X    XX XXX  XXX \",\n            \"XX X   XXXX  XXX XX   XXXXX  X X XX X   X XXXX XX  X  X  X   XXX     XX X  X     XX X XX X   X   \",\n            \"XX X XX    XXX  XX  X  X XX X   XX XXX X XX    XXX X XXX   XX  XXX      XXXX X  X   XXXX XX XX XX\",\n            \"  XX X    XXX X   XXXX XX X    X  X X  XX X XX     XX XXXX X X XXX XX  X X     XX  XX  XX        \",\n            \"  XX  X X   X XXXX X X     XX XXXX XXX   XXX    XX   XXX    X X X    X  X XX  X XXX  X X    XXXX \",\n            \"XX X     X X X XX X X XXXX   X X XX X  X  XX X  X  XX X  X X XXX  XX X  X  X     XX    XXXX  X  X\",\n            \"X   XXX X  XXX  XX  X  X X  X   X XXXX X XX    XXX  XXX    XXX X X    X XX  XX X  X XX X XX XXXXX\",\n            \"X XXX   X X X X   X XX X    X  X  X XX XX X XX   XXXX  XXX XXXXX  XXX  X X  X  X X X   XX       X\",\n            \"XX  XXXXX  X  X  X X X X  X X  XXXXXX X   X  X XXXXX XXX X XXXXXX   X X    XX X XX  X XXXXXXXXX X\",\n            \"XXXXX   XX XXX    X   X XXXXXXXXX   X  X XXXX   XX XXXX     X   X X XX  X XX   XXXX X XXX   XXXXX\",\n            \"X   X X XX XXX  X  X    XX X XXXX X X XX    XXX   XX X   XXXX X XXX X    X   XX   X XX XX X XX  X\",\n            \"  XXX   X   X XX   XX X  XX  X  X   X     XX XXXXXX  XXX X XX   XXXXX  X    X XX X XX   X   X  XX\",\n            \"XX  XXXXX  X  X   XX   X X   XXXXXXXXXXX  X     X  X XX  X XXXXXXX  XX  X  XX X     XXXXXXXXXXX X\",\n            \" XX  X X XXXX        XX   XX   X X   X   XXX   XX    XXX    XX  X XXXXX X  XX X  X X  XX XXX   XX\",\n            \"  X   XXX XXXX  X  X     X XXXX  XXXXXXX      X X XX      XXX XX XXX  X XXXX X    XXXXXXXXXX    X\",\n            \"    XX X XX XXXX X XX X XXXXXX X X X X   X X X XX    X X X   X XX XXXX X    X  X X X   X XX    XX\",\n            \"XX  X X   XX  XXX X    X X  XXXXX      X     X  XXXX X   X  XXXX  X  X     XX X XX  X      XXXX X\",\n            \"   XXX X    XXXX XXXXXX   XX   X     X   XXX   XXX   XXX X   X XX   XXXX  X X   XXX X XX X  XX X \",\n            \"   XX XXXX XXX X  X X  X X X XX  XX X XX X   XX XXXX X   XX X X   X  X XX     X  X  X   X XXX  XX\",\n            \"    XX   XXX XX XX XX XXXXXXXX    XXXX   XXX   XXX    X  X   X  X  XXXXX  X X  XXXXXX X  XX  X  X\",\n            \"X XXXXXX X XX X   X    X X  XXX XXX  X X XX  XX XX X XX  X  XXX   X XX  X  X  X  X       X XX   X\",\n            \"X  X    XX XXX XX XX XX   XXX  X   X X   XXX   XX    XX X      XX  XXXX   XX     XX   X  X  XX X \",\n            \"X     XXX XX X XXXXX X X   XX XXXXXXX XX X   XX X XX X XXXX XXX   XX X  X  XX X  X  X  XX  XX  XX\",\n            \"XX     XX XXXXX X X XXXXX XX     X     XX X X    XXXXX XX    X  X  XXXXX  X X  XX XX  X  X  XX  X\",\n            \"XX X  XX X X XX   X XXXX    X X X  X      X  X XXXX  X X X X     XX XXX XX X X    X X XX  XX    X\",\n            \"X   X  X  X   XXXXX   X XXXX X   X   X XX XXX  X X X XX     X X X  XXXX    X    XX X  XXXX X  X  \",\n            \"X  XX XX  XXX XX     XX     XXX X  XX X X  X XXXX X XX   XXXXXXX X X  X XXXX X    XXXXXXX  X X XX\",\n            \"XX  X   X   XX XXXX  XX     XX   X   XX XX  X XX XXXXX  XXX X XXXXX XX    XXX X XX     X X  X   X\",\n            \"XX   XXXX X X X X   XXX X XX    X   X X      XXXX X      X X      XX X XX X   XX X XX  X  XX XXXX\",\n            \"   XX      X  X  X  X X  XXXXX X X X XXX X    XXXXX  X      X X   XXXX X    X XXXXXX     XX      \",\n            \"XXX XXX  XXX   XX XXXX  X XX  X    XX  X  XXXX XX   X XX XX  XXXXX X  XXXXX  X X  XXXXXXXX     XX\",\n            \" X  XX  XX   XXX   XXX   X XXXX  X XXXX XX  X X  XX XX XX X X  XX X X      XX X XX   XX  XX XX XX\",\n            \"  X  XXXXX  X  X   X XX X XX   X    X X    X XXXX X    X XXX X X   X XXXX    XXX X XX        XX  \",\n            \"  X      XX XXX X    X   X XXX   X  XXXXXX    X  XXX X X  X X   X  XXX X  X X  XXX X   XXXXXXXX  \",\n            \"   X XX XX  X    X   XX X  X  XX   X   X  X  X  X  X  X XX   X X X XX  XXX   X X  XXXXXXX XX   XX\",\n            \"   XX  XX X  XX    XXX     XX     X  XX XX  X XX XXXXX  X X XX X  XXXX XX   X XXX XX   X XX X  X \",\n            \" X XXXXXXX    X  XXXXXX X  X   XXXXXX X    X XXXX X      XXXXXXXX    XX    X XX  X  X   XXXXX XX \",\n            \" XXXX   XX X XX XX   X   XXXXX  X   XXXX X    XXXXX  X XX XXX   X X  XXXX  XX  X XX     X   XXXXX\",\n            \"  XXX X XX  X X  XXXXXX X XX    X X X  X  X XX XX  XX X  X  X X XXX X  XXXXX XX   X XXXXX X X  XX\",\n            \"XX XX   X XX XX X    X  X XX  X X   X  XX X XX   XX X X XXXXX   X XXXX X X  X XXX  XX  XX   X    \",\n            \" XXXXXXXXX X  X  XXX XXXX X X XXXXXXX  X XXX XXXX X  X   X  XXXXX X XX  X XXX X     X  XXXXXXXX X\",\n            \" X XXX   X X XX XX X X  XXXXXX   XXX X X XX X   X    XX X    XXXX XXXX  X XX  XXXXXX   XXX      X\",\n            \"XXXXX X X   X X XXX X X   XX  X X   X X    XXXXXX X  X   XX   X XX X  XXXXXX X X  X XXX   X    X \",\n            \" X XXX    X     X XX  XXX  X  X  XXX X X X      X  X  X    XXXXX  XXXXXXXX  X XX X X X  XXXXXX   \",\n            \" XXX XX  X X X   XXX  XX  X X   XX      X  XXX X    XXXXX X X XX  X XXX    XXX   X       XXXXXXX \",\n            \"XX XX   XX X    XXXX X  X  XX X  X X X XXXX XX   X XXXX X  XX X   XX XXXX X X   XXXX   XX  X    X\",\n            \" X XX XXX X XX  XX  XXX X XX    X   XXX X  XXXXX  X X  XXXX   X  X  X X XXXX X    X XXX  X XXX X \",\n            \"X X XX XXXX X    XXX  XXX     XXXXXX  XX XX   X XX X XX    XXX X XXXX XX X  XXXXX  XXX  X  XX    \",\n            \"  X  XX   XX XX X  X X X  X          X  X  XX XX    XXXXX X X    X    X XXXX X    X XXX   X XXXX \",\n            \"XX      XX XX X   X XX     XX X   XX X XXXX X    X XXXX X   X  XXXX    XXX X XX      X  X  X  X  \",\n            \" X  XXXX XXX X XX    X XX XXX    X    X X  XX XX XX XX XX X X X X    XX   XX   XXXX X XX  XXXXX X\",\n            \"  X XX    X XXX    X  X X  X  XX XXXXX X  X     X  X    XXXX   X XXXX  X X   XXXX  X X X XX   X  \",\n            \"XX   XXXXX X XX  XX X  X  X X     XX X  X  XX  X    XXX  X    XXXX  X X XXXX X    X XXXXXXXX X X \",\n            \"   X   X XX     X    XX    X  X XXX XX XXXX X    X XX X X  X   XXXXXX   XX XXXX     XX  XX    X  \",\n            \"XX   XXXX XXXXXX X   XX XXX XX  X  X XX XX XXXXX  X X    XX X XX   X XX   XX    XXXXX XXX  X XX X\",\n            \"X X  X   XXX X  X XX XXXXXXX  X XXXXX XXX X XXX  X XXXX XXXX   XXXXXXX X X    XXXX X     XX   X  \",\n            \"X XX  XX XXX X  X XX   X  X X X     XX    XX   XX X  XX  X    XX  X  XX X  X      X  XXX  XX X  X\",\n            \"  X XX  XXX X X  X XX   XX XXX    X XX   XX X   X  XXXXX   X XXXX    X  X XXX    XX X X X    XX  \",\n            \"XXXX XXX  XXX X X XX  X X  X XX XX    XX   XXXX X XX   X XX   XX X  X    X XXX  X  X XXX  XX   XX\",\n            \"X   XX  X X XX  XX  X X X X  X XXXXXX  XX X XX     XX XXX  XXX XX    X  XX X     X  X  X XX    XX\",\n            \"X XXX X XXXXXX    XXX X    XX X X XX X X XXX   XXX   XXX    X  X    X    XXXX   XXX  X X  X XXX  \",\n            \"X X XX  XX XXX XXXX X XXXXX  X XXXXX      XX X  X  X  XXX   XX X     X  X XX     X  X X XXXX X   \",\n            \"      XXX   X XXXX   XXX    XX X  XX X XXXXX     X X XXXX XX  X XX  X X  X XXX  X    XXX  X  X XX\",\n            \"X X  X XX X XXX XX  X XXX     XX X XX   X X XX X   XX X XX XXXXXX    X  X  X  X  X  X   XXXX    X\",\n            \"XXXXX X XXXXXXX XX  XX     XX X XXXXXX   XX    XXX X XXX    XXXXXX  X X    XX   XXX     XXXXXXX X\",\n            \"        X XX XX  XXXXXXXXXX  X XX   X     X XX XX  X  XXXX XX   X    XX X  X     X  X XXX   X    \",\n            \"XXXXXXX XXX  X  X  XX  X    X XXX X XX   XX    XXX   XXX    X X XX      XXXXXXX   X  XX X X XX XX\",\n            \"X     X  X   X XXXXX XXXXXX   XXX   X  XX X XX X   XX XXXX  X   XXXX X X    X XXX  X XX X   XX  X\",\n            \"X XXX X XXX  X       XX   XXX X XXXXXX X XXX   XXX   XXX   XXXXXX   XX  X  XX X   X  XXXXXXXXXX X\",\n            \"X XXX X XXX    XXX XXXXXXXX  X    XXX   X X  X     X  XX X X XX   XX X X  XX  XX X  X X X XXX X X\",\n            \"X XXX X XXX XX  X   X XX    X XXXXXXXX  XXX     XX   XX     X XX XX   XXXXX  X    XXXXX  XXX XX X\",\n            \"X     X XX  XX XXXXXXXXXXX      X X   XXXX  XX X   XXXXXX   X   X XXXX X  X X  XX  X XX X X     X\",\n            \"XXXXXXX XXX XX  X   XXXXX X X XXXX XX      X   XX     XX    XXXX XX X X  X X    XX   XX  XX  XXXX\"\n        };\n        private static readonly string[] Modules110 = {\n            \"XXXXXXX   X  X      X X  XXXXX   XXXXX  X X  X XXX X XXXXX XX  XX X XXX X X   X  XX    XX XXXXXXX\",\n            \"X     X X   X X X   XX X      X  XX X X X  XXXXXX XX     XX  XXX X X  XXXXXX X    XXX   X X     X\",\n            \"X XXX X     XXXXXXXXXX  X  X  XXX   X XX XX  X  XX X  X  X  X  XX XXXX X  X X XXXX X   XX X XXX X\",\n            \"X XXX X XXXX      X XXXX  X    XX  X X  X XXXX X XX X  XXXXX  XX  X XXX    X     X  X   X X XXX X\",\n            \"X XXX X   X  XX     XX  X  XX X XXXXXX XX X X      XXXX XX  XXXXX   XXXXX  XX X  X  XX  X X XXX X\",\n            \"X     X X   XX  X X XXX   XX   XX   X X X  XXXXX  X X  XXXXXX   XX    X XXX  XXXXXX    X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX X  X XXXXX        XXX   X  X X   X  X XX       XX   XXXXX XX XX  XXXX XX XXX         \",\n            \"XXXXX XXXX  X XXX X  XXX  X X   XXXXXX  XX XX XX X  X XXX  XXXXXXX    X  XXX X    X  XX XX X X X \",\n            \"XX X     X X       X X  X  XX X  XX XX XXXX XX   X XXXX XX  XXXXXXX    X X  XXX     XX X XX   XX \",\n            \"XX  X X XX  XXX    XXXXX  X X  X  XX XX X  XXXXX  X X  XXXXX   X   X XXXX XX     XXXX X   X XXXXX\",\n            \" X  XX XXXX XX X X XXX X   XX X XXX XXXX XX  X  XX X XX      X XXXXX   X X  XXXXX  X X XXXXX  XX \",\n            \" XXX XXXXXX   X XX   XXX  X X  XX XX    X  XXX X    X XXX  X  X XX  X X XXXXXX  X X XXX X X XX  X\",\n            \" X  X     X X XX X XXX  X  X  XX X XXX XXXX X    X XXXX XX   XXXXXXX    XX X XX X   XX XXXXXX X  \",\n            \"XXX X XX X XXX   XXX  XX  X  X XX XXX X X  XXXXX  X X  XXXX X   X  X XXX  X      XX X XXX X XXXXX\",\n            \"    XX XX   X   XXXXX  X   X X   XXXX  XXXXXX  X   XX XXXX XX   X XX X X    X XX   X   XXXXX  X X\",\n            \" XXX  X  XXX  XX X XXX XX         X    X XXX X XX  X   X X      X X       XX  X XX  XX  X X  X XX\",\n            \" XX    X XX XX XX XX     XXXXX   X XXX X XX    XXX   XX       XX  XXXX  X X X XXXXXX   X  XXXX X \",\n            \"XXXXX XX  X   X XXXX X X  X X  XX X  XX  X    XXX X    X  X XX X X  X XX XXXXX XX XX XXX XX X  XX\",\n            \"  XXXX XX X XXX X X    XXX X XX  XXXX  XX XXXX     XX X XX  XXXX     X  XXXX  X     X  X X X   XX\",\n            \" X XX X  X     X  XXXXX   XXX  XX XXXX   XXX    XX   XXX X    X X X XXX  XXXX   XX    X X X  XXXX\",\n            \"X  X X XX X   XX X     XXXX  X X X  X   X X  X        X      XXX  X  XX X  X     X  X XXX X  X   \",\n            \"XXX X XXXX XX    XXX X X    X X XXXXXX X XX     XX X XX  XXXX X XX  X    XXXXX  X X  X   XX X X X\",\n            \"  X     XX X XXXXX     XX     XX    X  XX X XX X   XX X XX  XXXX XX     X XX     X  X  X X       \",\n            \"      X X X X XX XX XXX   XXX XXX  XXX   XXX   XXX   XXX      X  X  X      XX   X    XX XXX  XXX \",\n            \"XX X   XXXX  XXX XX   XXXXX  X X XX X   X XXXX XX  X  X  X   XXX     XX X  X     XX X XX X   X   \",\n            \"XX X XX    XXX  XX  X  X XX X   XX XXX X XX    XXX X XXX   XX  XXX      XXXX X  X   XXXX XX XX XX\",\n            \"  XX X    XXX X   XXXX XX X    X  X X  XX X XX     XX XXXX X X XXX XX  X X     XX  XX  XX        \",\n            \"  XX  X X   X XXXX X X     XX XXXX XXX   XXX    XX   XXX    X X X    X  X XX  X XXX  X X    XXXX \",\n            \"XX X     X X X XX X X XXXX   X X XX X  X  XX X  X  XX X  X X XXX  XX X  X  X     XX    XXXX  X  X\",\n            \"X   XXX X  XXX  XX  X  X X  X   X XXXX X XX    XXX  XXX    XXX X X    X XX  XX X  X XX X XX XXXXX\",\n            \"X XXX   X X X X   X XX X    X  X  X XX XX X XX   XXXX  XXX XXXXX  XXX  X X  X  X X X   XX       X\",\n            \"XX  XXXXX  X  X  X X X X  X X  XXXXXX X   X  X XXXXX XXX X XXXXXX   X X    XX X XX  X XXXXXXXXX X\",\n            \"XXXXX   XX XXX    X   X XXXXXXXXX   X  X XXXX   XX XXXX     X   X X XX  X XX   XXXX X XXX   XXXXX\",\n            \"X   X X XX XXX  X  X    XX X XXXX X X XX    XXX   XX X   XXXX X XXX X    X   XX   X XX XX X XX  X\",\n            \"  XXX   X   X XX   XX X  XX  X  X   X     XX XXXXXX  XXX X XX   XXXXX  X    X XX X XX   X   X  XX\",\n            \"XX  XXXXX  X  X   XX   X X   XXXXXXXXXXX  X     X  X XX  X XXXXXXX  XX  X  XX X     XXXXXXXXXXX X\",\n            \" XX  X X XXXX        XX   XX   X X   X   XXX   XX    XXX    XX  X XXXXX X  XX X  X X  XX XXX   XX\",\n            \"  X   XXX XXXX  X  X     X XXXX  XXXXXXX      X X XX      XXX XX XXX  X XXXX X    XXXXXXXXXX    X\",\n            \"    XX X XX XXXX X XX X XXXXXX X X X X   X X X XX    X X X   X XX XXXX X    X  X X X   X XX    XX\",\n            \"XX  X X   XX  XXX X    X X  XXXXX      X     X  XXXX X   X  XXXX  X  X     XX X XX  X      XXXX X\",\n            \"   XXX X    XXXX XXXXXX   XX   X     X   XXX   XXX   XXX X   X XX   XXXX  X X   XXX X XX X  XX X \",\n            \"   XX XXXX XXX X  X X  X X X XX  XX X XX X   XX XXXX X   XX X X   X  X XX     X  X  X   X XXX  XX\",\n            \"    XX   XXX XX XX XX XXXXXXXX    XXXX   XXX   XXX    X  X   X  X  XXXXX  X X  XXXXXX X  XX  X  X\",\n            \"X XXXXXX X XX X   X    X X  XXX XXX  X X XX  XX XX X XX  X  XXX   X XX  X  X  X  X       X XX   X\",\n            \"X  X    XX XXX XX XX XX   XXX  X   X X   XXX   XX    XX X      XX  XXXX   XX     XX   X  X  XX X \",\n            \"X     XXX XX X XXXXX X X   XX XXXXXXX XX X   XX X XX X XXXX XXX   XX X  X  XX X  X  X  XX  XX  XX\",\n            \"XX     XX XXXXX X X XXXXX XX     X     XX X X    XXXXX XX    X  X  XXXXX  X X  XX XX  X  X  XX  X\",\n            \"XX X  XX X X XX   X XXXX    X X X  X      X  X XXXX  X X X X     XX XXX XX X X    X X XX  XX    X\",\n            \"X   X  X  X   XXXXX   X XXXX X   X   X XX XXX  X X X XX     X X X  XXXX    X    XX X  XXXX X  X  \",\n            \"X  XX XX  XXX XX     XX     XXX X  XX X X  X XXXX X XX   XXXXXXX X X  X XXXX X    XXXXXXX  X X XX\",\n            \"XX  X   X   XX XXXX  XX     XX   X   XX XX  X XX XXXXX  XXX X XXXXX XX    XXX X XX     X X  X   X\",\n            \"XX   XXXX X X X X   XXX X XX    X   X X      XXXX X      X X      XX X XX X   XX X XX  X  XX XXXX\",\n            \"   XX      X  X  X  X X  XXXXX X X X XXX X    XXXXX  X      X X   XXXX X    X XXXXXX     XX      \",\n            \"XXX XXX  XXX   XX XXXX  X XX  X    XX  X  XXXX XX   X XX XX  XXXXX X  XXXXX  X X  XXXXXXXX     XX\",\n            \" X  XX  XX   XXX   XXX   X XXXX  X XXXX XX  X X  XX XX XX X X  XX X X      XX X XX   XX  XX XX XX\",\n            \"  X  XXXXX  X  X   X XX X XX   X    X X    X XXXX X    X XXX X X   X XXXX    XXX X XX        XX  \",\n            \"  X      XX XXX X    X   X XXX   X  XXXXXX    X  XXX X X  X X   X  XXX X  X X  XXX X   XXXXXXXX  \",\n            \"   X XX XX  X    X   XX X  X  XX   X   X  X  X  X  X  X XX   X X X XX  XXX   X X  XXXXXXX XX   XX\",\n            \"   XX  XX X  XX    XXX     XX     X  XX XX  X XX XXXXX  X X XX X  XXXX XX   X XXX XX   X XX X  X \",\n            \" X XXXXXXX    X  XXXXXX X  X   XXXXXX X    X XXXX X      XXXXXXXX    XX    X XX  X  X   XXXXX XX \",\n            \" XXXX   XX X XX XX   X   XXXXX  X   XXXX X    XXXXX  X XX XXX   X X  XXXX  XX  X XX     X   XXXXX\",\n            \"  XXX X XX  X X  XXXXXX X XX    X X X  X  X XX XX  XX X  X  X X XXX X  XXXXX XX   X XXXXX X X  XX\",\n            \"XX XX   X XX XX X    X  X XX  X X   X  XX X XX   XX X X XXXXX   X XXXX X X  X XXX  XX  XX   X    \",\n            \" XXXXXXXXX X  X  XXX XXXX X X XXXXXXX  X XXX XXXX X  X   X  XXXXX X XX  X XXX X     X  XXXXXXXX X\",\n            \" X XXX   X X XX XX X X  XXXXXX   XXX X X XX X   X    XX X    XXXX XXXX  X XX  XXXXXX   XXX      X\",\n            \"XXXXX X X   X X XXX X X   XX  X X   X X    XXXXXX X  X   XX   X XX X  XXXXXX X X  X XXX   X    X \",\n            \" X XXX    X     X XX  XXX  X  X  XXX X X X      X  X  X    XXXXX  XXXXXXXX  X XX X X X  XXXXXX   \",\n            \" XXX XX  X X X   XXX  XX  X X   XX      X  XXX X    XXXXX X X XX  X XXX    XXX   X       XXXXXXX \",\n            \"XX XX   XX X    XXXX X  X  XX X  X X X XXXX XX   X XXXX X  XX X   XX XXXX X X   XXXX   XX  X    X\",\n            \" X XX XXX X XX  XX  XXX X XX    X   XXX X  XXXXX  X X  XXXX   X  X  X X XXXX X    X XXX  X XXX X \",\n            \"X X XX XXXX X    XXX  XXX     XXXXXX  XX XX   X XX X XX    XXX X XXXX XX X  XXXXX  XXX  X  XX    \",\n            \"  X  XX   XX XX X  X X X  X          X  X  XX XX    XXXXX X X    X    X XXXX X    X XXX   X XXXX \",\n            \"XX      XX XX X   X XX     XX X   XX X XXXX X    X XXXX X   X  XXXX    XXX X XX      X  X  X  X  \",\n            \" X  XXXX XXX X XX    X XX XXX    X    X X  XX XX XX XX XX X X X X    XX   XX   XXXX X XX  XXXXX X\",\n            \"  X XX    X XXX    X  X X  X  XX XXXXX X  X     X  X    XXXX   X XXXX  X X   XXXX  X X X XX   X  \",\n            \"XX   XXXXX X XX  XX X  X  X X     XX X  X  XX  X    XXX  X    XXXX  X X XXXX X    X XXXXXXXX X X \",\n            \"   X   X XX     X    XX    X  X XXX XX XXXX X    X XX X X  X   XXXXXX   XX XXXX     XX  XX    X  \",\n            \"XX   XXXX XXXXXX X   XX XXX XX  X  X XX XX XXXXX  X X    XX X XX   X XX   XX    XXXXX XXX  X XX X\",\n            \"X X  X   XXX X  X XX XXXXXXX  X XXXXX XXX X XXX  X XXXX XXXX   XXXXXXX X X    XXXX X     XX   X  \",\n            \"X XX  XX XXX X  X XX   X  X X X     XX    XX   XX X  XX  X    XX  X  XX X  X      X  XXX  XX X  X\",\n            \"  X XX  XXX X X  X XX   XX XXX    X XX   XX X   X  XXXXX   X XXXX    X  X XXX    XX X X X    XX  \",\n            \"XXXX XXX  XXX X X XX  X X  X XX XX    XX   XXXX X XX   X XX   XX X  X    X XXX  X  X XXX  XX   XX\",\n            \"X   XX  X X XX  XX  X X X X  X XXXXXX  XX X XX     XX XXX  XXX XX    X  XX X     X  X  X XX    XX\",\n            \"X XXX X XXXXXX    XXX X    XX X X XX X X XXX   XXX   XXX    X  X    X    XXXX   XXX  X X  X XXX  \",\n            \"X X XX  XX XXX XXXX X XXXXX  X XXXXX      XX X  X  X  XXX   XX X     X  X XX     X  X X XXXX X   \",\n            \"      XXX   X XXXX   XXX    XX X  XX X XXXXX     X X XXXX XX  X XX  X X  X XXX  X    XXX  X  X XX\",\n            \"X X  X XX X XXX XX  X XXX     XX X XX   X X XX X   XX X XX XXXXXX    X  X  X  X  X  X   XXXX    X\",\n            \"XXXXX X XXXXXXX XX  XX     XX X XXXXXX   XX    XXX X XXX    XXXXXX  X X    XX   XXX     XXXXXXX X\",\n            \"        X XX XX  XXXXXXXXXX  X XX   X     X XX XX  X  XXXX XX   X    XX X  X     X  X XXX   X    \",\n            \"XXXXXXX XXX  X  X  XX  X    X XXX X XX   XX    XXX   XXX    X X XX      XXXXXXX   X  XX X X XX XX\",\n            \"X     X  X   X XXXXX XXXXXX   XXX   X  XX X XX X   XX XXXX  X   XXXX X X    X XXX  X XX X   XX  X\",\n            \"X XXX X XXX  X       XX   XXX X XXXXXX X XXX   XXX   XXX   XXXXXX   XX  X  XX X   X  XXXXXXXXXX X\",\n            \"X XXX X XXX    XXX XXXXXXXX  X    XXX   X X  X     X  XX X X XX   XX X X  XX  XX X  X X X XXX X X\",\n            \"X XXX X XXX XX  X   X XX    X XXXXXXXX  XXX     XX   XX     X XX XX   XXXXX  X    XXXXX  XXX XX X\",\n            \"X     X XX  XX XXXXXXXXXXX      X X   XXXX  XX X   XXXXXX   X   X XXXX X  X X  XX  X XX X X     X\",\n            \"XXXXXXX XXX XX  X   XXXXX X X XXXX XX      X   XX     XX    XXXX XX X X  X X    XX   XX  XX  XXXX\"\n        };\n        private static readonly string[] Modules111 = {\n            \"XXXXXXX        XX  XX XX X XXX XX XXXX X XXX X X    X XX    X X  XXXXXX X  XX X    X  XXXXXXX\",\n            \"X     X  XX X X X   XXX XXX   XX X  X XXXX X XX X XX XX  X XXXXX   X  XXXXXX X  XX XX X     X\",\n            \"X XXX X X X  X X XX X X XX  X   XXX X  XXXX XX X X XX X XXX X    XXXX  X    XXXXX   X X XXX X\",\n            \"X XXX X X XX XX XX XX  X X XX   XXXX   X XX  X  X  X  XX X X   XXX   X  XX XXX  XX X  X XXX X\",\n            \"X XXX X XX  X X X  X     XX XXXXXX  XX XXXXX   X X   XX XXXXX  XX XX X  X XX  X   XX  X XXX X\",\n            \"X     X XXX X X  X XX XXX XXX   X  X  X  X X XX X X  X  X   XXXX X    XXXXX  X     X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  XX X XX X   XX XXX   X      X  XXX  X   XX XXX   X     XX X X XX X XXXX  X        \",\n            \"X XXXXX    X XX  X XX   X   XXXXX   X   XXXX   XX  X    XXXXX  X XX  X  X  X       X  XXXXX  \",\n            \"X X X   X X X XX  XXXX  X  X  XX    XX XX XX   X X  XXXXX X X   X X XX  X XX  X  X     X XX X\",\n            \"XXX   X  XX  X    XX   X X XX XXXX    X XXXX XXX XXXX  X    XXX  XX   X XXXX X X  XX X XXX   \",\n            \"X   X    XX XXX X XX  X X   XXXX XX XX XXXX XX X  X XXX   XXX   XXXX X X    XXXX XX X X  XX  \",\n            \"XX X XX    X XXX XXX X      X  X X        XX X XXX   X   X X X X X   XX XX X X  XXXX   X     \",\n            \"XXX    XX   X XXX  XXX  XXXX  X XX XX  XX XX     X XXXX X X   XXX  XXX XX  XX    XX X  X    X\",\n            \"X X   XXX  X XX X X  XXXXXXXXX XXX    XX   X  XX  XX     XXX XXXXX X  X  X X XXX    XX XX XX \",\n            \" XXX    XXXX X X   X X  X XX XXXX X  XX XX  XXX    X  XX    X  X  XX X X     XXXXX  X X  XXX \",\n            \"XX XX XXXX  XX   XXX  X   X  XX X XX     X X   XX   X XX X     XX    X  X XX  X  X XX        \",\n            \"   XXX XXXXX X   X  X   XX  XX XX  XXX X XXX   XX  XXXXXX XXX  X    XXX X       XX     XX X X\",\n            \"XXX XXX XX  XXX    XX XX    XXX XXX   XX   X  XXX X XX X X X XXX X X X   XXX X    X XX XXX X \",\n            \"       XXXX   XX XX X XX  XX XXX XX    XX XX X    XXX X   XX    X  XX XX XX X  XXX XXXX  XX  \",\n            \" X  X XX    XX   X   X X     X  XX  XXX  XXX X XX        X X  XX  X   X    X  X  XXX  XX     \",\n            \" X XX  XX    XXXXX XX X X   X   XX XXX XXXX     XX X XX X X X     X  X    X   X XX   X  X X X\",\n            \" XXXXXX X    X XX X  X XXX XXX     XX XX     XX   XX X X    XXXX X X  X XX X X    X  X XXXXX \",\n            \"XXX  X  XX X  XX      X XXX    X X X   XXX XX X    XX  X  X X   X XXXX X   X   XXX  XXX  XX  \",\n            \"X X X X XX    X XXX  XX XXX XXXXX    X     X XXXX  X X   X X  XXX X        X     XXX    X    \",\n            \"        X   X XXXX X XXXXXX  X X  XXXX X XX   XXXX    X X     XX  X  XXX    X XXXX     X XX X\",\n            \"X XXX X XX X  XXX  X XXX XXX X  XXX XXXX    XX  XXX    X X  XXX XX    XXXXX XX X  XX X XXXXX \",\n            \"XXXXX     X X XX X XX  X  X X X  XX  X XXX  XXX     X XX X XX X XXXXX XX  XXX XX X XX X   XX \",\n            \"X X XXXXXXXXXX   X X   XXXX XXXXXX X X     X   XX X  X XXXXXX XXXX    X XXXX  X  XXXXXXXX   X\",\n            \"  XXX   XX   X   X   X XX XXX   X XXXX XX XX    XX  XXXXX   X X X    XX   XX  X XX XX   X XXX\",\n            \"  X X X XXX  X  X XX X  X   X X X    XX     X XXXXX X  XX X XXX  X       XXX X X    X X X XX \",\n            \"    X   X XX     X XX XXXXX X   X XX XXXXXX X XXX  XX  XX   X   XX X  XX X    XXXX  X   XXXX \",\n            \"X   XXXXXX  XXXXXX X XX     XXXXXXXX XX   XX XX X  X XXXXXXXXX X  X X    XXXX   XX  XXXXXX  X\",\n            \" XXXXX  X     XX  X XXX   XXX XXX  XXX X  XX   XXX   XX  X XX XX  X XXX XX  X X  XX      X X \",\n            \"XXX XXXX  X X X   XX  XXXXX X X XX XX XX    XXX X X    X  X XXX  X     XX XXXXXX  X  XX   XX \",\n            \"  X  X X    X XXX  X  XXXXXX    X  XXXX X X X     XXXXX  X   X  XXXX X X    X XX  XXXX XXXX X\",\n            \"X XXX XXX   XXX  X   XXX  XXX   XXX XXX  X X    XX    XXXXX X  X X  X     XXX X   X X X      \",\n            \"X XX X  X X XXX   XX  XXX     X  X XXX X XX  X X X X XX XXXX  XX   X X  X X     XXX  X  X X X\",\n            \" XX   X  X X XX X  XXX X XX XX XX   XXXX    XXX   XX   XX X XXXX X    XXXXXXXX    X  X  X XX \",\n            \"XXX      X   X    XX  X      XX X    X XXX  XX     XXXXXXXX XXX    XXX      XXXXX XXXX XXXXXX\",\n            \"   X XXX    XX X  XX XXX XXX   X  XXXXX   XX   XXX X  XXXX XXXXX  X  XXXX  XX X   XXXXX   X  \",\n            \"XX XX  XXXXX   XX   X   XXXXX XXXXX XX   XX    XX  X XX XX XXX    X  XXX         X  XXX  XX X\",\n            \" X X  XXXXX   XXXX  X XXX X XXXX XX X XX     XX XX      X X   XX X X  XX XXXXX    XX  XXX X  \",\n            \"X XX   XX  XX X XX  X    X XX XXXXX     XX  XX    XXX X     XX  X  XXXXX XX X XXX XXXX XXXX X\",\n            \"X XXX X X X  X X  XX  XX  X  X XX  XXX    XX  X XX    XX  XXXXXX  X  XX  XXXX X  XX   X  X XX\",\n            \"  X X  XXX  X X XX     X    XXXX X XXX    XX X  X  X XX  X X  XX  X  XX X X X XXXX X X   X  X\",\n            \"X X   X    X  X XX  XXXX       XXXXXX XXX  X XX   X  X X  X  X X X  X XXXX   X XX XX  X    X \",\n            \"  XXXX X XX XXX XX X XX   X  X XX X    XX X      XXXXXX XX X       XX XXX   X XXXX XX  XXXX  \",\n            \"X  XX X      X X XX XXX XXX   XX X XXX X   XX  XX  X  XXX X    X  X XX  XX X     X X  X    XX\",\n            \"X X  X X X XXX XX       X   XX XX X    X XX X   X   XXX  XXX    X X XXX X        X X X X XX X\",\n            \"X XX XX XXXXX  XXX X    XX   X X    XX  X  XXXXX  X     X X XXXX X    X XXXX X    X    X XXX \",\n            \" XXX   X   X X    XX X XXX XX X   X     X X X X     X    X X  X    XXX X    X  XXX  XX XXXXX \",\n            \" X X  X X    XX  XX XX  X XXX XX  XXX     XX  X X     XXXX XX  X  X XXX  X XXXX XX X  XX   XX\",\n            \"  XXX   X XXXX XX XXXX XXX XXX  X   XX X XXX X   X    X  XXX         XXXX XX     XXXXX  X  XX\",\n            \" X  XXXXXXXX  XX XXXXXXXXXX XXX X X XXXX X  XXX XXXX     X  XXXXXX XX   XXX XXXX     X X XXX \",\n            \" X   X   XXX   X  X   XX X   X X  X    XX X XX X    XX   XX XX  X X  X X XX XXXX X XX  XXXX  \",\n            \"XXX XXXXX   XXX  X XXX    XXXXXXXXX XX   X X X XX      XXXXXX  X  X XXX X  X  X XXXXXXXXXX   \",\n            \"X XXX   X  X X X    X X   XXX   XXXXXX X  XX   XXX   X  X   X XX     X  X  X  X  XXXX   XX  X\",\n            \"XX XX X XX X   X   XXX X XX X X XX   XXX    X X XXXX  X X X XXXX  X X   XXXX X X  X X X X  X \",\n            \" X  X   X X XX  XXXXX X  X  X   X XX X XX X X  X  XXXXX X   X X X   XX X    X XXX X X   XXXXX\",\n            \"  X XXXXX XXX X   XXXX X X XXXXXX  XXX   X X XXXXX      XXXXXX XXX   X  X XX X  X X XXXXX    \",\n            \"XXX        XXXXXXX X X     XX  XXX  XX  X X      X  XXXX XX X X      XX    X   XXX X  X  XXXX\",\n            \"X X  XXXX  XX XX    XXX XXX X   X X X X X   XXXX  XX     XXX XXX XX   X XXXX XX   X X X XX X \",\n            \" X      X  X   XXXX XXXXXXX    X X       X XXX   X XX XXX X     X XXXX XXXX  XXXX   XX   XX  \",\n            \"XX X  X X  XXX   XX XX  X X  X      X XX   X   XX    XX XXXX   XX X  X   XXXX X  X  XX XXX   \",\n            \"XX XXX   XX X X X  XXX X XX  XX    XXX   X XX   XX XXXXXXXXX  X X XXXXXX   XX X  XXX  XX  X X\",\n            \" XX XXXXX X   XX  X X XXXXX XX  X XXXXXX  X   X   X X  XXXXX X  XX X  X  XXXXX  X   XXXX XX  \",\n            \" X     XXX       X X  XXXXX XX X  X  XX X X X    XX X  X     X  XXXXXX X    X XXXX    X  XXX \",\n            \"X  XX XX  X XXXX   XX  X   XXX X X XX     XX X XXXX  XXX X XXXXX X  XXX    X  X  X  XX XXX X \",\n            \" XX  X X  XX X  X X X X   X   X   XX   X XXX   X X   XX XX    XX  X  XX    X  X XX X  XX XX X\",\n            \"  XXX X XXXX  X  X  XX X XX XX  X X X XX   X XXX  X     XX X XXX X X    XXXXXX XX X XXXX XXX \",\n            \" X X     XXX XX     XXXX X XXX X XX   XXXXX XX    X  XX   X  X XX XX   XX X X  XXXX X X   XXX\",\n            \"  X XXXX XX XX  X XX  X  XX X XX X  XX X   X  XXX  X X XXXXX XX  XX X X   XXXXX     XX XX  X \",\n            \"X X XX X  XXXX  X X X X XX  XX XXXX XX X  XXX    X   XXX XXXX X X X       XXX   XX XX XX X  X\",\n            \" X   XX X  XX   X  XXXXXXXX    X  X X X X  X XX X XX    XXXX XX  XXX XX  XXX XX   X   XX  X  \",\n            \"X X  X XX XX   X   X XX   X   X X  X  X XXX X    X  X XX  X X X XXXXX  X XX X XXX XX X   XX  \",\n            \" XX   XX XX   X   X X      XXX   XXXX     X    XXX   X  XXX    X X    X X XX  X  X   X XX  X \",\n            \"XXXXX  X X   X XX  X     X  X  X XXXXX X  XXX  X X X XX   X X X      X    XX  X  X X  XX   XX\",\n            \"XXXX  XXX   XX X X        XX    X  XX X    X  X XXXX    XX X XXX X    X XXXX X    X X X XX X \",\n            \"  X X   XX XXX XXX     X XX    X XX X  XXXX XX     XXX    X X X XX X X X      XXX   X    XXX \",\n            \"XXXXXXX  XXX XX  X  X  X   XX   XX X XXX X X   XX     X X   X XX X   XX   XX    X X  X XX  X \",\n            \"X  XXX XXX X  XXXX X  XXX XXXX  XX        XXXX  XX X  X   X    X   XXX X  X      XXX  X   X X\",\n            \"    X X XX XXX XX XX  X  X X    X XX  X    X    X XXX   XXX XXXX X X  XXXXXX X       X X  XX \",\n            \"XX XXX    X    XXXX   X X       XX      X X XX X X XX XX  X  X  X XX   X XX    X X X XX  XX X\",\n            \" XX   XXX  XX    XXXX       XXXXX   X X   XX XXXX    XXXXXXXX XXXXX X   X  XXX   X XXXXXX  X \",\n            \"        X    X X X X X   XX X   X    X X XX     XX  XXX X   X   X XX X  X  X  X XX  X   X X X\",\n            \"XXXXXXX   X XX XXX X XXX  XXX X X  X XXX     XX X X  X XX X XXXX XX     XXXX X    XXX X XX X \",\n            \"X     X XXX XX X X   XXXXXXXX   X    X XX X X   XX XXX XX   XX  X XXXX X    X XXXX XX   XXXXX\",\n            \"X XXX X X  XX XXXX X        XXXXX XXX XX  XX X X        XXXXXX XX   XX     X  X XXX XXXXXX   \",\n            \"X XXX X X X      XXX XX  X X X    X X  X XX  X   X X XXXXX  X X X  X X XX X X XX X X X XXX   \",\n            \"X XXX X X X  X  XX  X  X  X XX X  X   X X XX XXX  XXX    XX XXXX X  X X X   XX  X   X X  X   \",\n            \"X     X     X XX X X X  X XX  XX X   X XXX  XX   XXXXXX  XXXX      XXX X  X XX XXX   X   XX  \",\n            \"XXXXXXX X X XX X X X  XX     X  XX XXX X X X X XX XX XX X X X XX    XXX  XXXX X XXXXX  X X X \"\n        };\n        private static readonly string[] Modules112 = {\n            \"XXXXXXX X XXXX  X XXX X  XX XXX  XX   XXXX     XXXX  XXX X  XX XXXXXX XX  XX  XX    XX   X XX X   XXXXXXX\",\n            \"X     X  XX  XXXXXX XXX XXXX XXXX   XX   XXX   X  X XXXXX  XX     X XXXX  XXXXXX X   XX X X  XX   X     X\",\n            \"X XXX X  X  XXXXXX   XXXX XXXX   X X X XX XX X    X X XXX XX         XX  XX XXXX X    XXXXXX XXX  X XXX X\",\n            \"X XXX X X XXX XX X  X   XXXX  X XX XX XXXX   X     X X  XX   XXX X X      X X X  XX XX X X X    X X XXX X\",\n            \"X XXX X X XXXX  X XX   XXXXXX XX X  XXXX X X X  XXXXX X  X  XX XXXXXX XXXXXXXX  X XXXXX   X X  XX X XXX X\",\n            \"X     X XXX  XXXXXXX X  X   X    X  XXXXXXXX X XX   XXXXX  XX     XX XX X   XXXX      X XXX  X X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX  XXXXXX    XXX   X XX XXXXXXXXXXX   XX   XXXXXX X       X XXXX   X XX X    X XXXX   XX        \",\n            \"X   X XXX X  X  X X XXXXXXXXXX XXX  XX   X XX  XXXXXXXXX   XX X X XX XXXXXXXX X XX X  X  X  X  XXXXXXX  X\",\n            \"X XX   X   XXX  X XX    X X XXXXXX XXX X  XX XXXX XXX X  X  XX XXXXXX XXX  X  X  X X XX  X  X   X    XX  \",\n            \"X XX  XX  XXX  XX  XX X  X  XXX    XXXX  X  X XX   X X    X  X X X  X          XXXXXXX X    X XXX X    X \",\n            \"X  XXX X     XX  X X  XXX XX XXX XX   X XXXX X X X  XXXXXX X  X X    XXXX X XXXX X    XXX XX X XXXXX     \",\n            \"X XX XXX XX XX XX X XXXXX      XXX  XX   XXXXX X XXXX XX   XXX   XXXXXX  XXXXX  XX  X XXXXX  X XXXXXXX XX\",\n            \"X  X   XX    X XX X     X X  XX X X XX    XXXX XX XX  X     X    XX   XXX XXX   X   XXX  X   X XX    X X \",\n            \"X X X XXX  X       XX XXX  XX XXX X X X XX  X X    X      X X  X   XX  X X X    X XXX  X    XXXXX     XX \",\n            \"X   X  XXX    X XX XX X    X X XX X X  XXXXX X X X XXXXXXX    X X XX XX  XXXXXXX X X  X XXXX X XXX X     \",\n            \"X X X X X X XX X  XXXXXX XXX X X X  X      X     XXXXX X XXX XX   XXXXX   X X XX         X XX X XX XXX XX\",\n            \"X XX X XXXXX     X     X   X X X  X X  X XX    XX XX  X   XX    X  XXXXXXXXXXXXXX   XX   X  XX XX X  XXX \",\n            \"X  XX XX  X   XX  XXX XXXXXX XXXXXXXXX XX   X X X    X  X X XX     XXXX    X X  X XXXX X    XXX  XX  X X \",\n            \"X XXX  X   X   X  X X XX  XX  XX   X XXX  XX X  XX  XXXX X    X XXXX X    XXX  X   X  X X XX X XX  X     \",\n            \"X X XXXXXX XXXXX        X X XX   X  X  XXXX    XXXXX  XXX   XXXXX X X X  X XX X  XX  X    XXXXXXXX XXX XX\",\n            \"X X XX  XX    XXX XXX XXX    X X    X X XX XX   X XX X XX   X XXXX  X   XXXX XX   X X XX X X  X  X X X X \",\n            \"X  XXXXX   X  X  X X X XXXXX XX XXXX XX XX    X    X    X XXXX X    X XXXX  XX XX  XXX      XXX X   X  X \",\n            \"X X XX  X  XXXXX  XX XXXXX X  XX  X   X XXXXXX X X  XXXX X    X XXXX X X  XXX  X XX  XX XXXX X  XX XX    \",\n            \"X XXXXXXX   X X X  X    XXXXXX XXX X XX  XXX X XXXXXX XXX   XXX   X XX  XXXXX X XXX XXX  XX    XXXXXX   X\",\n            \"X  XX   XXX XX  X  X  XXX   XX XXX  X  X X      X   X X XX X XX   X X  XX   XXXX  X X X   X X   X   X XX \",\n            \"X  XX X XX  XX    XXX  XX X XXXX   XXX        XXX X X   X XXXX     XX X X X XX  X   X  X X X  XXX X XX X \",\n            \"X X X   XXXX X XXX  X XXX   X XX X  XX  XXXXXX XX   X XX X    X X XX   XX   X  X XX  X  XXX     X   XX  X\",\n            \" XX XXXXXXXXX XX XX   XXXXXXXX  XX X   XX XX   XXXXXX       XX   X XXX  XXXXX X  XXX XX  X  X   XXXXX    \",\n            \"XX X    XX  X X XXXXX XX X  XX  XX      XXX     X X   X  XX XXX  X XXXX XXXX XXXX X X X    XX X XX   XXX \",\n            \"XX XXXXX XX X  X    X XXX XXXXXX   X  X  X    XXX  XX   X X XX X   XX X    XXX  X  XX  XX XX  X XX X X X \",\n            \"   XXX     XX X XXX        X  X  X    X X  XXX X     XXX X   XX XXX  X  XX  X    XX  X   X   X XX   X    \",\n            \" XXXX XXXXX   X   XXX  X    XX   X X   XX XX     X X X       XX  X       X     X XXX XX XX  X  XX XX    X\",\n            \"X  X X  X   X   XX  X XX X  XX XXX      XXX   X XXXX  XX XX X  XXX XXX  XX X XXXX XXX XXX  XXX  XX   X  X\",\n            \"  XXX XX X X      X XX X X XXXX X  X  X  X   XXXX  XX   XXX XX  X   X X    XX   X      XX XX XXXX  X XXX \",\n            \"  XXXX XX X X X  X  XXX   XX  XX X    X X  XXX X X X XXX X    X X XX        XXXX XXX X   X    X     X X X\",\n            \" XX X XX XXX  X XX    X     X X XX X   XX XX XX  X        XXX    X XX    X    XX  XXXXX XX  X  X  X   XXX\",\n            \"XX X X X XXXX XXX XX  X  X  X X XX      XXX   X X X  XXXXX  XXX  X X   X X X  X  X  X XXX  XXX XX   XX  X\",\n            \"XX XX XX X  XXX  XXXXXXXXXXXXXX X  X  X  X     XXX XX   XXX X  X X  X XX X XX     X    XX XX XXXX  X XX  \",\n            \" XX XX XXXXXX     XXX   XXX XX X X    X X  XXXX XX X XXX X    X XXXX    XX  XXXXXX X X   X    X     X XX \",\n            \" X XX X  XX     X   XXX X XX    XXXX   XX XX XX  X X XX  XX X XXXXX XXX      XXX X XXXX XX  X  X  X   XXX\",\n            \"XX X X XX    X    XXX XX XX X   X       XXX   X   XXX  XXX  XX X X X XXXX XX XX     XX XX  XXX XX    X  X\",\n            \"  X X X X  X     X XXXX  XX X   X XX  X XX X   X    XX  X XX X X    X XXXX XXX    X  X XX XXXXXXX    XX  \",\n            \" XXXXX X XXX      X XX X XXXX  X  X   XXX  X XX      XX  X    XXXXX  X  XX X XXXXX X  X  X X  X  XX X XX \",\n            \" XXXX X X XXX X   X XXXXXXXXX X X XX X  X XXXXX  X X XX XX  X  XXXX     X  X  XX XXXXXX X X X  X  X   XXX\",\n            \"X    X XXXXXX XX  XXX      X  X XXX      XXXX X XXXX  X XX  X    XXXXX  X    X   XX X  XXXXX X XX    X  X\",\n            \"    X X XX  XXX X XX XX    X  X XXXX X  XX  X   XX  X   XXXXXX X    X XXX XXX     X  X X    XXXXXXXX XX  \",\n            \"XX  XX   X X XX X    XX XXXX  XX  X     X  X XX XX X XXX X X  X XXXX    XXXX  XXXX X  X X XX  X   X X XX \",\n            \"X XXXXXXX X XXXX  X X XXXXXXXX  X    XXX   X XX XXXXX X X     XX  X X   XXXXXX X   XX  XXXX XX XXXXXX XXX\",\n            \"XXX X   X X XX      XXX X   XXX XXXXX    XX   X X   X  X XXX  XX   X    X   X       X  X XXX X XX   X X X\",\n            \"X X X X XX XX   XX X X XX X XXXX   X XXXX   X  XX X X   X XXXX      X XXX X X     XXX  X    XXX X X XX   \",\n            \"X  XX   X X  X X XXXX XXX   XXX    X   X  XX XX X   X X       X XXXX X XX   X XXX  X XX X XX X XX   X  X \",\n            \"  XXXXXXXX  XXXXXXXX  XXXXXXXX X  XXXX XXXX XX  XXXXX XXX  XX X  XXXX   XXXXXX X    XX X X    XXXXXXX XXX\",\n            \"X  XXX X   X     XXX  X X X X XXXXXXX  X X XX X  X X XX XXX   X   XXXX   XXX X       XX XX  XX XX XX     \",\n            \" X  X X XXXX X X   XXX  X   XXXX   XX XX X  XXXX X XXX  X XXXX X    X X  XX X   X X XX X X XXXX   XX   X \",\n            \" X XX   XXXXXX XX X  XX X X  XX      X   XXX X   XXXX    X X  X X XX   X  XXXXXX X    X XXXX X X X X   X \",\n            \"XXX XXX XX  X X  X  XXXX XX  X  XXX   XXX  X X  X X X XXXXXXXXX X X   XXX   X X X   XXX  X XXX   XXX   X \",\n            \"X    X X X  XXXXX XX  X X XXXXX X     X  XX   X      XX   XXX  XX X X    XXX   X X  XXXXXX XXXX X XX X   \",\n            \"X     X XXXXX  X XXXXXXXX    XX  XX X XXX   X XX   X X  X  XXX        X  XXXX   XXXXXX      XXXX  XX  XX \",\n            \" XX  X  XXX XXXX XX  X XX XX XX    X X  XXX  X   XX X  X XX   X X XXXX X  X X X  X    X XXXX X    XX   X \",\n            \"  XX  X X  X X X XX X    XX XX  X X X   X XXXX   XX X X XXX XXX   XX X XX  XX   XXX    X  XXX     X  X  X\",\n            \"XXXX X X     X  XXXX    X XXXX X XXX XX XXX XX X X X XXXX X X X  XX  X XXXXX XX X X X  X   X   XX XXXX X \",\n            \"XXXX  X X X    X  XXX  XX  XX XX X   X  X  XX X     XX  X   X   X     XX XXXX   X X XX X    X X   XXX X  \",\n            \" XX  X  XXXXXX X X    XXX X        XX  X XXX X  XXX X    XX  X XXXXXX     XXXXXX      X XXX  X XX  X X X \",\n            \"X  X  X X  X   X XX X    XXX  X XX   XXX  XX X X  X   XXXXX  XXX X X    X   XXX  XXXXXX   XX      X    X \",\n            \"     X X   XXXX X XX  X X X   XXXXX   XX XX      X XXXX X X X X      XXXXXXX XX X XXXXX  X   XX X XXXX   \",\n            \"  XX XX X X  X X X XX  XX   X XXX X X X     XXX    X X  X  X    X X  XXX   XXX  XXXXXX     XX XX  X  XXX \",\n            \" XX  X  XXXXX  X XX   XXX XX   X X  X XXX XX X X       X XX XX XXX XXX     XXXXX X X  X XXXX     XX    XX\",\n            \"XX X  X X  X   X  X XX   XX      X XX   XXXXX   X X   XXXXX  XXX X X    X X XXXXXXXXXXXX  X XX   X X   XX\",\n            \"X      X   XXXX X  X X  X X X   X X X XXXXXX       XX   X XX  X      X XX  X XX XX   XXX  X XX XX X    X \",\n            \"X XX  X X X  X X   XX  XXXX  X X XX XX      X X    X   X   X    X X  XXX   X X  X X XX     XXXXX  XXX  X \",\n            \"X X  X XXXXXX  X  X  X XX X XXX  XX  X    XX    X    XX  XX XX XXX XX X      XXX X    X XXXX X XX  X    X\",\n            \"   XXXXXX  X   X  X XXX XXXXX  X  X X X      X XXXXXXX  X    XXX X X    XXXXX X X  X XXXX  XX   XXXXXX  X\",\n            \"X   X   X  XXXX X  XX XXX   X XXXX      XXX X   X   XX XX  X  X      X  X   X  XX  X  XXX XXX XXX   X XX \",\n            \" XXXX X X X  X  X  XXX  X X X  XXXX  X XX   X XXX X X  X  XX    X XXXXX X X X   X XXXX X   XX XXX X XX X \",\n            \"XXX X   XXXXX  XX X X  XX   X  XX X  X   XXX X  X   XXX     XX XXX X  XXX   X XX     XXXXXXX X XX   X    \",\n            \" X XXXXXXX X      XXXXX XXXXX    X XXX X  XXXXXXXXXXX X XXX   XX X XX   XXXXXXXXX  X X X XXXX XXXXXXX   X\",\n            \"XX  XX XX  XXXX X  X  X  XX XX X  X   X   XXXXX X X   XXX XX  X    XXX    X X XXX   XXXX  X XX X X X  XX \",\n            \"  XXXXXXX XX X XX  X X   XXX XXXX XX XXXX   X X X X    X  XX X X  X XXXX XX X   X XXXX   X  X XXXX XXXX  \",\n            \"XXX  X XX XXX  X  XXX  XX      XX   X XXXXX  X   X X  X  X  XXXXXX    XX     XXX   X  X XXXX X  X X X    \",\n            \" X XXXX X  X X    X  XXX  XX      XXX X   XXXXXX  XXX X X X     XXX    X X     X  X  XXX   X    XXX X   X\",\n            \"XXX  X   X  X XXX  X  X XXXXXX   X XXX XX X X   X X    XX  X XXXX XXXX   XX XX  X  XXXXX  XXX     XX  XX \",\n            \"  XXXXX X X XXX X  XXX XXXX XXX      XXXX   X XX XX    X  XXX  X X  XXXX  X XX  X X XX X   XX XX   X XX  \",\n            \"XXXX X  XXX  XXX  XX    XXXX X X   X  XX  XX X XXXXX  X  X    X XXX   X      XXX X    XXXXXX X  XX   X   \",\n            \" X XXXX XXX  XXXXX   XXXXXX  XX  XXXXX    X X  X XXXX X XX  XX XX X X  X X XXX XX  X  XXXXXXXXX XXX X   X\",\n            \"XX XX   X XX   X X X  X     X XXX X   XX X X X    X X XXXXXX XXX XX X    XX X  XX  X    XXXXX     XX XXX \",\n            \"      X   XXX X XXXX X XXXX X X XX  X X    XX XXXXXXXX  XXXXXX X   XX X   X X X X X X  X    XXXX    X    \",\n            \"XXXX         XXX XXX       X   XX     X X XX X X  X XXX  X X  X XXXX X XX  X X X X    X XXXX X  XX XX    \",\n            \" X X  X  XXXXX XXXXXX XX  X XXX   X XX X  XXXX X XX XXX X X   X XXX  X X X X X     XX X    XX   XXXX X  X\",\n            \"XX X       XXX  X X  X XX X  XXX          XXX   X X XXX XX X XX  XXXXX  X X X  XXX XXXX  X XX   X X   X  \",\n            \"    X XXXX   X  X X X XX   X   XX  XX X    X  XX  X XX  X XXXX X X  XXXX XX X X XXXXXX X   XX XX    X XX \",\n            \"XXX X  XX  X  X XX     XX XXX X X    XXXX X  X   XX XXXX      XXXXXX X X XXXXX X  XX  XXXXXX    XX XX   X\",\n            \"XX  XXX X  X    XXX XXXXX  XXXXX XXXX  XX   X XX X X XX XXX  X X  XX X X XXX X          X XXX   XXXX     \",\n            \"XX X   XXXX  X   XXXXXXX XXXXXXX X XX   X XXXX  X   XX  X   X XX    XXX XXX X  XXX   X    XXX   X X   XX \",\n            \"XXX   XXX  X    XXXX     XX X  X XX XX XX  X  XX    X   X XXXX X    X XXX X X X XXX XXXX      X     XX X \",\n            \"  X XX   XXX     X XX X       X X   XX   XX  X X XXXXXXX X X  XXXXX  X  XX XXX X  X    XX XXXX  XX XX    \",\n            \"   XX XXX X XX    XX XX XXXXXXX  XXX XX XX  X   XXXXXXXXX X   X  X     XXXXXXX X   XX  XX XX    XXXXX  XX\",\n            \"        XXX   XX XX  XXXX   XXX  X  X  XX  XXX XX   XXXXX  XXXXXX  XXX XX   X    X   X   XX   XXX   XXX  \",\n            \"XXXXXXX X  X  XX  X    XX X X  XXXX   XXX XX XX X X XX  X X X  X   XX XXX X X XXXXXXXXX XX    XXX X X  X \",\n            \"X     X     XXX XX   XX X   X XX   XXX   X   X XX   XXXX X    X X XX    X   XX X  X    XX  XXX XX   XX   \",\n            \"X XXX X X    XX XX XXX XXXXXXXX  XXX XX XX  XXXXXXXXXXX X  XX  X XXX X  XXXXXX  X  XX  X  XX XXXXXXXX   X\",\n            \"X XXX X  X X  X X  XXXXXX    XX  X  X  XX  XX XX X   XXXX  XX  X XX    XXXX     XX XXX   XX   X  X X  XXX\",\n            \"X XXX X  XXXX XXX XX     XXXX  XXXX   XXX XX XXX XXX   XX XXX  X    X XXXX X    XXXX XX XX       X XX    \",\n            \"X     X   X     X  XXX XXX    X    XXX   X   XX X   XXXX      XXXXXX X X  X XXXX  X X  XX  XXXXX X  XX   \",\n            \"XXXXXXX XX X  X X XX XXXXX X  X XXXX XX XX  X       XX XX   XXXXXXXXXX  XXXXXX X XX    X  XX XX XX   XX X\"\n        };\n        private static readonly string[] Modules113 = {\n            \"XXXXXXX  XXXX XXX X  XX    XXXXXX X  X  XX XXX XX  X XX X   X X XXX  XXX X    X XX  X XX X   XX   XXXXXXX\",\n            \"X     X   X     XXXX  X X    XX  X  X XX XX XX X X XXXX  X XXXXX  XX  XX X  XXX X      XX XXX X   X     X\",\n            \"X XXX X XXXX XXX  X  X    XX  X  XX XX X X X XXXX X  X XX   X   XXX  X XXXX    X XXXX XX   X XXX  X XXX X\",\n            \"X XXX X X     XXX X X XX XXXXX  XXX   XX  X  XXXX  XX X XXXXXXXXX XX  XXX X  X   X X X XX XX    X X XXX X\",\n            \"X XXX X XXXXX XXX X XX XXXXXX X X   X    X  X   XXXXX XXX   X X XXX  XXXXXXXXX X XXXX  X  XX X XX X XXX X\",\n            \"X     X X X     XXX X   X   X  XX   X   XXX X  XX   XXX  X XXXXX  X X X X   XXX XX   X XXXXXX  X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XXXX XXX  X     X   XX X X   XXX   X  X X   X  XXXX X   XXXX X  X   XX X XXXX X    X  X          \",\n            \"X XXXXX  XX   XXX XX  XXXXXXXX      X XX X   X XXXXXXXX XX XXX XX X X XXXXXXX XX   X X X X X X XX XXXXX  \",\n            \"XX      XX XX XXX X XX  XX XXXX    XX X   X X XXXX  X XXX   X X XXX  XXXXXX   XXX  X   X X X X  XXXX XXXX\",\n            \"  XXXXXX       X XXXX  XXX        X  XX X X X   X  XX X    XXX XX X X XXX   XXXXXX   X XXXX X     X XXXX \",\n            \"   X   X  XXXXX X XX      XXX  X X XX X    X XX XX     XXXX X X  XX  X    X    X XXXX XX X X XX  XXXXXX  \",\n            \"XX   XX X X X X X XX  XXXXXX        X XX XX    X    X X XX XX XX XX   X     XX X    XX  XXXXX  XX   XX   \",\n            \"XXX      X    X X XXXX  XX X XXX XX X XX  X    XXX    XXXX  XXXX XXXXXXXXX  X  X X  X  X X XX  XXXXX X  X\",\n            \"  X  XXXX X X   XXXXX      X X XX  X  X   X X  XX  XXXX    X   XXXXXX X XX XXXX X      XXXX XX      XX X \",\n            \"     X XXXXXX X   XXX  XX  XX XXX  X   X   X XX XX X   XXXXXX X  X X X XXXXX   X XX X X    X XX  X XXXX  \",\n            \"XX XX XX XX X X   X   XX     X  X   XXXX    XX      XX  X XX   X  X   X  X XX X XX   XXX X   XX X X XX   \",\n            \"XX   X    XX XXX X XXX X XX  X  XXX XXX  XXXXX XXX    XXXXXX XXXX     XXX   XXX  X  X XX X X   XXX X XX X\",\n            \"   X XXX   XX XXXX XX    XXXX  XXX   X X XX X  X    X X X  X X  XXXXXX XX  XX X X    X XXXX XX XXXX X XX \",\n            \"  XX X X  X X  XXX  X   X XXXX X  X XXXXXX X XXX X     X XXXX X    X XXXX XX XXX  X X X  X X XX    XXXX  \",\n            \"XX XXXX    XX      XXX  XX XXX XX   XXX XXXXXX XX     X  X  X   X XX XX   X X XXX X   XX  X   XXX X XX   \",\n            \"XX XXX X     X  X X  XXXXXXX X  XX  XX XXX   X  XX   X   X  XX  XX X X  X    XXXXXX XX   X  XXX   X  X  X\",\n            \"   X  XX  X X X X XX XX  XXXX   XX  XXX   X    XX  XXXX X    X XXXX X    X    XXX X  X  XXX XX X     XXX \",\n            \"  X     X X  XXXXX X X   X XXX X   XX X    XXXX XX     X XXXX X    X XX X XX XXX X XXXX    X XXX X X XX  \",\n            \"XX  XXXXXX  XX XX   XX  XXXXXX     X   X XX X  XXXXXX X  X  X  X  XX    XXXXX XX  X X  X XXXXX XXXXXX  X \",\n            \"XXX X   X X X XXX   XXXXX   XX      XXX  X XXX  X   X XX   X   X  XX X XX   XXX XXX XX X  XX X  X   X X X\",\n            \"   XX X XXXX X  XX XX X X X X  X  X  X  XXX     X X XXX X    X  XXXXX  XX X X X X XX   XX XX    X X X XX \",\n            \"  X X   XX  XX X  X X   X   XX X XXX X     XXXX X   XX X XXXX X  X X  X X   XXXX X XXX        XXX   X X X\",\n            \"   XXXXXX XXXX   XXXXXXXXXXXXX X   X XX X X XX XXXXXX  XXX  X XX X      XXXXX XXX XX   X X X X  XXXXX  XX\",\n            \"X X    X    XX XXXX  XXX  XXXX X     XXXXXXXXX  XX X  XXX X X  X X    X X    XX  XX XX X     XX X XX XX X\",\n            \" X X  XX X X   XXXX X     XX   X  X X X X X        X XX X  X X XXXXXX  XX  X  X X X    X X X   X X XX XX \",\n            \"X  X      X   X       XXX  XXX   XXXX X  XXXXXX X   X  X XXXXXX      XXX X   XX  X XXX  X X  XX      XX  \",\n            \"    X X   X  X X  X  X X XXXXX XX  X XX X X XX    X  X XXX     X X XXX    XX    X XX   XXX X X XXX     X \",\n            \"XXX  X X X  XXXXXX X XXX  XXXX       XXXXXXXXXX X     X X X XXX XX      X X  XX  XXXXX  X       X XX X X \",\n            \"X XX XXX XX X   XX  XXX XX X    X X X X X X  X     X XX XX X X   XX X  XX  X XX X XXX  X X X X     XX  X \",\n            \"X XX   XX  X  X X X XX XX XXXX X XXXX X  XXXXXX XX XX  X XXXX X  X X  XXX      X X  XX  X X    XX    X  X\",\n            \"   XX X X XX X XXX XXXX  XXXX XX   X XX X X X X   XX   XXXXXXXXX X   X    XX  X XXXXX  XXX X X X X X  X  \",\n            \"X X  X  X XXXX  X X XXX   XXX XX     XXXXXXXXXX XX X XX     X  X X  XX X  X   XXX   XX  X      XXXXXXX X \",\n            \" X X XXX XXX XX X  XXX   XXX    X X X X X X   X  X X XX XX X   XX X X   XX X XX    XX  X X X X     XX    \",\n            \"XXX    XXX      XX XX XX XX   XX XXXX X  XXXXX X X XX  X XXXX X    X  XX X     XXXX XX  X X    XX    X X \",\n            \"  X X XXX X  XXXX  X  X XX     X  XX XX X X X X   X  XXXX X XX  XXXX  X  XXX XX X  XX  XXX X X X X X  X  \",\n            \"X X  X   X    XX  X  XXX   XX  X X   XXXXXXXXXX  X  X       X X  X  X XXXX   XXXXX  X X X      XXXXX X X \",\n            \"X X  XX X X X   X XXXX XXXX  XX X   X X   XX  X X     X X   XX XXXX X    X X  X    XXX X X XXX      X    \",\n            \"XXXX   X X  X   XX  XXX XXXX XXX   XX XX XXX X XX   X    XXXX XX     XXX X XX  XXXX X X X XX   XXXX  X X \",\n            \"    X XX XXXXX X  XX  XXX   X XX XXX  XXX X   X   X  XXX    XXX XXXXXX  XXX   X X XXX  XX XX X X X X  X  \",\n            \"XXXX X    XXXX    X  X   XX   XX  X  XXX XX  XX X     XX    XXXX XX     XXXX X XX X XXX XXX X  XXXXX X X \",\n            \"X    XX XXXX XX  X X X XX  XXX  XX  XX    X X XX X   XX XX   X XXXX X     XX XX    XXX XXXX XX   XXXX    \",\n            \" X       XX XXX  XX  X X XXXXX X   XX    XXX X X X XX  X XX X X    X  XX XXXXX XXXX X X  X X   XX X  X X \",\n            \"XX  XXXXXXX X     XX XXXXXXXXX X X          X X XXXXX XX X   X    XX X  XXXXXX  XX XXXX XXXX   XXXXXX X  \",\n            \"X  XX   XXX X XX   X  X X   XXXX  XXXXXX XXXXXX X   X   X XX X      XX  X   X  XXX  XXX  XX X  XX   X XX \",\n            \"  X X X XXX       XX XX X X X  X  X XXXX XX X X X X XXX X    X  XXX X   X X XXX        XXXX XX XX X X X  \",\n            \"   XX   X  XXX XX  XX   X   X     X X  XXX X X XX   XX    XXX X    X XX X   XX XX X XXX  X X XX X   XXXX \",\n            \" X  XXXXX   X   XXX XXXXXXXXXX  XXXXX X XXXX    XXXXX X  X XXX X XX  X  XXXXXX  XX  X X  X XXXXXXXXXX X  \",\n            \"XXX XX  XX X XXX XX XXX XX XX X   XXXXX  X   XX   X  XXX  X  X X  X          X XXX     XXX X   XXX     XX\",\n            \"XX   XX XX  XX XXXXXXXXX       X  X   XXX X XX  XX X  X X    X XXXX X  XXXX  XX X  X X XX XXXX XX XXXXXX \",\n            \"XX X X  XX   X X X   X X  X X     XXXX  X  X XXXXXXX XX  XX X X  X X  X X XX   X XXXX X    X XX XX XXXXX \",\n            \"X  XXXXX    XX X X X  XX   X X X  X  X  X   X   XX XX X   XXX  XX XXXXXXXXXXX XX X  X  X X              X\",\n            \"XXXX X  X   X   X X XXX XX  XXXX X   X X XXXXXX  XXX XXXXXXXXXX X XX X          X   X   XX    X XX   X XX\",\n            \"    XXX XX     XX  XXX      X    X X  XX XX X   X  XX X X X  X  XXX    XXXXX XX XX   X  XXX XX  X XXXX X \",\n            \"XXX X   XX X XXXX    XX   XXX     X XX       XXXXXX  XXX X XX X  X XXXX X X  X   XXXX X    X XXXX XXXXXX \",\n            \" X    XX X X  X  XXX X     XXX X XX XXXXX X        XX XX  X X  X  X X  XXXX X  X  X  XX   X  X   X X X X \",\n            \"X    X  XX    XXXXX XX  XX  XX  X XX   XXXXX   X  X  XX  XX XX X XXXX  XX    XXX XX XXX     XX XXX  XX  X\",\n            \" XXXXXX X  XX  XXX XX X    X X X XXXXX   XXXX  XX     X X XX     XX     XXXX XX X  X X XXXX X  XX XX X   \",\n            \"XXX X   XX   X XX X       X XXX   X    XX  X XXX XX  XX  X XXX X   XX XXX XX   X  XXX X      XX    XX XX \",\n            \"XXX   XX X X XX  XXX X        XX          X X  X X X  X   X      X  XX  XXXXXXXXX XXX  X  X XX   X X    X\",\n            \" XXX X  XX XX  XX X XXX XX X  X   X  X   XXXXX    X XXXX XX XX X   XX XXX    XXX XXXX  X X XX X XX  XX XX\",\n            \"X XXX X X  XXX XX XXX X      X XX  X  X XXX XX XX  XX X X X X    X   X  X  X  X XX   X  XXXXX   X X X  X \",\n            \"XXX X   XX     XX         XXXXXX XXX  XX X X XX X   XXXX X X X X  XXXXXXX  X   X XX X X    X  XXXXX XXXXX\",\n            \"X X   XX X X XX   XX       X   XX  XXXXXXXX  X  XX X  X   X      X  XX  XX XXXX   XXX     XX      X      \",\n            \"XXXX    XX XX  XX   X   XX XX  X XX XX  XXX XX   XX X  X XXX X X   XX  XXXX  XXX          XX   XXX X    X\",\n            \"  XXXXX X  XXX XXXXXX X  XX X XX X X X  XXX X  XX  XXXXX  X X    X   X  X  XX X X  X X  XXXXXX  X XX XXX \",\n            \"  X X  XXX     XXX   XX   X      X XXX  XX X  XX    X    X X X X  XXX  XX   X  X XXXX X    X XX    XXXX X\",\n            \" XX XXXXXX X XX   XX  X XXXXX   XXX XX X   XX  XXXXXXX X X       X  XX  XXXXX XX X X    X    X  XXXXXX X \",\n            \"XXXXX   XX XX  XX    XXXX   X X      XXXXXXX X  X   XX   X X X X   XX   X   X    X X X  X X  XXXX   X X X\",\n            \"XXXXX X X  XXX   XXXXXXXX X XXXXXX XXX X XX X   X X XXXX    X    X XXX XX X XXX X    X XXXXXX   X X X XX \",\n            \" XX X   XX     X X  X X X   XXXXX  XXX  X  X XXXX   X     XX X X  XX    X   XX X  XXXXXX   X XX X   XXX  \",\n            \"  X XXXXX  X XXX  X   X XXXXX  XX  XX X   X   XXXXXXX XX  X  X   X   X  XXXXXXX  X X  X  XX  XXXXXXXX  X \",\n            \"X XXXX   X XX  XX   XXX    XXX  XXX  X X  X   X XX X  X  XXX X X         X XX X  X  X     XX   X  X   X X\",\n            \"X XX  XXX   XX X XXX XXXXXXXX  XX   XXXX XX X  X  X XXXX    XX XXX  XX  XXX  XX X    X  X X X    X X     \",\n            \" XX X  XX      XXX XX X     XXXXX XX  XX     XXXXX XXX   XXX XXX  X     X   X  X  X X X    X XXX  X  XX  \",\n            \"  X XXXX X X  XX  XXX XX X     XXXXXXX X  X   XX X  X XX XX  XXXXXXXXX X  XX    XXX         XX  X  XX  X \",\n            \"X  X X XX   XX  X   XXX X   XX XX  XX X X XX X  XX X     X X    X X        XXX X X XX     X  X   X    X X\",\n            \"X XX  X X  X XX  XXXXXX  XX       XXXXXX XX X   XXX XXXX       XX X XX  X X   X X  X X XXXXXX   X  XX    \",\n            \" XXXX   XX XXXXXXX X  XX XXXX XX  X X XXXX X XX  XXXXX   XXXX X        XX   X  X XXXX XX   X XXX X  X X  \",\n            \"  X XXXX  X     XX XX XXX  X XXXX XXX XX  XX X X    X XX    X X X XX X X  X XX   X X X  XXX   X X  XX  X \",\n            \"X X X  X XXX XX  X  XXX  XXXX X  XX  X   X  X    X XX X   XX     XXX X     XX    X X XXXXXX  X   X   XX X\",\n            \"X   XXX       X    X XX  XX  X  XXXX  X XXXXX    XXX  X XX   X XXXXXX  XX X  X  X  X   XXXX XX  X    XX  \",\n            \" XXXXX    XXXXXXX  X  XXX  XXXXXX XXX X  X X XX X X      XX X X    X XX    XX XX XXXX X    X XXX X X XX  \",\n            \"  X   XXX XXX X XXX  XXX X XXXXXXXX X X   X    X   XXXXX XX  X XXXXXX  X  X  X XXX XXX X     X  X    X X \",\n            \"X X    XXX XX XXX XXX  XXX X XX XX   XXX  X  X  XX XXXXX   X   X XX     XX XX      XX  X X   X  XX X  XXX\",\n            \"X    XXXXXXXXX   X  X   X  XXXXXX X   X XXXX    X X   X X    X XX X XX  XXX  X  XX   X XXXXXX   X    X X \",\n            \" XX  X XX X X X   X   X   XX X  X XXXXXX X   XXXXXX    X  XXX XX   X XX XXXX  XX    X XX   X  XX X X XX X\",\n            \"X XXXXXX X X XXXXXXX  XXXXX XXX X XXXXX X  X XXX  X  XXX  X   X   X X  X     X XXX   XXXX X  X  X      XX\",\n            \"X X       X   XX XX   XX    XXX X  XXXXXX X     XXXXXX X X  XX     X  X X  XX         XX  X  X  XX X  X X\",\n            \"XXX   XXX X X      X  XXXXX  XXX X X X X XXX    X    XX X    X XXXX X     X  X  XX X XXXXXX    XX     XX \",\n            \"  X XX   X  X   X XXX  XX   XX  X XX X  X    XX XXXX   X XX X XX     XXX X X  XX   XX  X X XXXXX X X XX  \",\n            \"   XX X  XX X XX  X X X XXXXXXXXX XX   XXX X X  XXXXXXX  XX  X X X XXX XXXXXXX  XX XXXX X X XX  XXXXX    \",\n            \"        X X  X   XXXX XXX   XXXXX   XXX X      XX   XXX  X XX   X      XX   X  XX     XX XXXXXXXX   XXXXX\",\n            \"XXXXXXX   X X XXXX    X X X XXXXXX XX XX X X X XX X X X X  X   XXXXXX   X X XX XXX   XX   X     X X XXXX \",\n            \"X     X X XX XX   X  X XX   XX X  X  X  X X  XX X   X  X XXXX X  X X  XXX   X XX   XX  X XXXXXX X   X X  \",\n            \"X XXX X XX     XXX     XXXXXXXXXX XX   XXX X  XXXXXXXXXX X XXXX  XX X   XXXXXX X X XXXX   X X XXXXXXX  X \",\n            \"X XXX X X  X X XX     XXXXXX XXXX   XXX X    XXX  XX XX  X XXXX  XXXXX XX  X   X   XX XX XXXXXX   X   X  \",\n            \"X XXX X XX    XX X X  XXXXXX XXXXX XX XX X X X  XXXXXXXXX      XXXX X    X XXXX XX  XXX   X   XXXX X XX  \",\n            \"X     X    XX    XXXXXX  X  XX    X  X  X X  X X       X  XXX XX   X XX X X    X   X   X XXXXX  XX    X  \",\n            \"XXXXXXX X  X X XX X X XXX X   XX  XX   XXX X X   XXXXX   X  X   XXX     X   XX  X X  XX   X X X X XX XXX \"\n        };\n        private static readonly string[] Modules114 = {\n            \"XXXXXXX       X XX XX   XXX XXX  XXXX XXX  X XX X  X   XXXXXX X XX  XX    XX  X X   XX XX XXXX XX   X XXXXXXX\",\n            \"X     X     XXX  XXXX X  XX XXX  XX     XX X  X XXX XXX  XXXX XXXXXX X  X XXX XX X X    XXXX X    X X X     X\",\n            \"X XXX X X   XXXX  XX   XXX  X  X X X  XXX   XX X X   XX     X X XXXX X  XXX XXXX X      XXX  X X XXXX X XXX X\",\n            \"X XXX X  XXXX XXXX  X X X XX XXXXXX XX XX      XX   XX X XX  X   X  XXXXX  XX  XX   X   XXX  X XXXXX  X XXX X\",\n            \"X XXX X X X X XX  XX  XXXX  XXXXX  X  X XX X XX XX  XXXXXXX X X   X    X XX XXXXX X X   X X XX  XXXXX X XXX X\",\n            \"X     X X   XXXXX X XX X    X   X  X XX XX  X  X XX X   X     X XXXX X    X X   XX   XXX XXX       X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X X  XXXXXX    XXX X   XX   XXXXX   XXXX  XX   XXX XXX X XX     X XX   XX    X XXXX X    XX         \",\n            \" X  X X XXXXXXX  X  XX X X  XXXXXXXX X      XXXX X  XXXXX X  XXX  XXXXXX   XXXXXX     X   X XX  X XX X XX X  \",\n            \" X XX  X  X X XXXX  XXX X XXXXXXXX X XX X  XX X     X  XX X X XX  X X X XX X XX X   XXX   X   X  XX X XX     \",\n            \"X X X XX X  X X X X XXX   X X      X XXXXX     XX       X X  X X   XXXXXX  XX     XXXX X   XXXXXX   XXX  X X \",\n            \" X      X  X      X XXXX  XXX X  X XX X   X  XX X    X X  X X X X XX X    X X XXXX    X XXXX X    XX    X X  \",\n            \"X   XXX    XXXX X   X X XXXX    XX      XXX XXX XXX XXX X XXX     X XX XX   X XX     XX   XXXX X  X      X   \",\n            \"  X XX  X  X     XXXXXX XX   XX XX  X    X  X XX  X    X X X    X XX XX XX X XX  XX X     XXXX  XX     X   X \",\n            \" XX X X X X X XX XX X XXX XX X X  X     XXX  X   XX    XXX XXX X    XXXXXXXXX   X XX X     XX X XX XX XX XX  \",\n            \"X  X X  X  XX  X  X  XXX  XXX  XXXXXXXXXX X    X         X X XX XXX  X X   XX XX    X X XXXX X    XX    X X  \",\n            \" X X  XX    XXXXX XXX  XX X X XX  XX  XXX XX  XXX X XXX      XXXX X     X  XXXXX       X X XXXX   X    XX X  \",\n            \"XX  XX XX X XXX XX  XXX X X X  XX X  X XXX XXX  XX  XXX  X XXXX  X  X  X X X XXXX  X   X   XXXX XX  XXX  XXX \",\n            \" XX X X  X X XX X X XX   X    XX XX  XXXXXXX   X    XXXXX   XX X X    XXXX XXX  X XXXX X  X X XXXX  XX X X   \",\n            \"XXXX   XX XXXX X X     XXX XXX  XX    XXXXXX XXXX XX XX   XX XX XXXXX  X  XXXXXX X X  X XX X X    XX   X  X X\",\n            \"  X  XX  XX   X XXX XXX X  XXXX XX X XX  X XXXX X XXXX XX X X X  XXX X  X   XXXXXX X XX XXXXX  X X      X X X\",\n            \"X  XXX     X     X XXX X XXXXXX XX X  XXXXX XXXX XXXX   XXXXX  X XX     X  X  X XX  XXX  X  X  XX X    X     \",\n            \"XXXX  X XX X X XXX  XX XX XXX   X X XX   XX X XXXX       X XXX X X XX X XX  XX  X XXXX X    X XXXX   X   X   \",\n            \"X X XX X X X XX X XXX  XX XXX X XX   X X   X X XXX  XX X XXX  XXXXXX X    X XXXX      X XXX    X  XX X  X X  \",\n            \" X  X XX XX XXXX   X XXXXX X XXXX X X XX   X XXX X X X  X X    X XX     XXX XXX     X XXX    XXXXXX    XX X  \",\n            \" XXXXX  X XX   XX  XXX    X XXX X   XXXXXXXX  X X X X X XX X   X  X  X  XXXX XXXXX    X XXXXX   XXXXX  X  XX \",\n            \"X  X  X X  XXX XXXX   XX XXX   XXXXXX   XX X XXXXX X     XX XX X X  X XXXX XX   X XXXX X X  X XXXX XXX    X  \",\n            \"  X    X X X X XX  X X   XX  XX  XX       XX XXXX XX X XXX  XXX XXXX      X X XX      X XXXX      XX      X X\",\n            \"  XXXXXXX X  XXXX XXX   X XXXXXXX X  X  XX XXX   XX XXXXXX XX X   XX XXXXX  XXXXXX XXXX   XXXXXX  X XXXXX XX \",\n            \"X   X   X X X X  X  X X   X X   X XX X  XX XXXX XXXXX   X XX  XX X XXXX X XXX   XXX X   X   X XXX   X   X    \",\n            \" X XX X XX  X  XX    X X XX X X X X   XXX  XX X     X X X XXX  X X  XXXXXX XX X XXXXXX   X XX X XX  X X XXX  \",\n            \"XXXXX   X XXX   XXX XX XXXXXX   X  XX   X X X  XX   X   X XXX X XXXX X    XXX   XX    X XXXX X    X X   X X  \",\n            \" X  XXXXXX  XXX X   XX X X XXXXXXXXXXX X   XX   X   XXXXX  X  X      XX X  XXXXXX   XX X XX XXXX  XXXXXXXXX X\",\n            \"X       XX XX       X  XX    XXXXXX    X  XXX X  XXXX X X  X XXX  X XXX    X  XX   XX XX  XXX XX  X        X \",\n            \" X X  XX X   X X  X XXXX X  XXXXX  XX XXX   X XXXX XX    XX X  XX   X X XX XX  XX X XX X X  X  XX    X  XXX  \",\n            \"XX X    XX  XXX  XXX XXXX  X  X X     XX X    XXX  X  XXXX XX X  XXX X   XX X  XX    XXXXXXX XX   XX   X  X X\",\n            \" XXX XXX   XXX XXXXX  XXX  X   XXX  X    X      XX X X X  X X X X X XX  XX      X   X  X X XXX  X  XXXX X X X\",\n            \" X XX   X XXX  X  X X   XX XX X  XX  XXX  XXXX XX  X  XXX X   XXX XXX   X XXX X  XX XX X X  XX  XX X   X X X \",\n            \" X    X  XXXXXXXX    X XX   X XXX X  X X XXX  XXXX  X XX  X  X X    X XXXX    XXXXXXXX X X  XXXXXX  X   XXX  \",\n            \"    XX X  XX   X   X X XX XX   XX X   XX   XXXX       XXX  X  XXXXXX X X  XX    X    XX X XX X    XX   X  X X\",\n            \"X  X XX   X XX    X X  X   XX X   XX  XXXXX X X XXXX  X    X XXX  XXXX XXXX     XX    XXX XX X  X X XXXXX X X\",\n            \"X X  X X  X  XX  X    XX  XX  XX  X X  X XXX XXX  XXX   X X X  X  XX XX  XX   XXXXXX   X  XXXX  X X XX XXX   \",\n            \" X XXXX    X  XXXX X XX  XXX      XXX X X   XXXX  X   X XX   X X   XX XXXX X X   XXXXX X    X XXXX   X  X X  \",\n            \"  X     X   X  X    X  X X XXX  X X X  X  X   X X  X  X    XX XXXXXX X   XX    XXX    X X XX      XXXX X  XX \",\n            \"X     X  X    X  XX   XX  XXX  X XXX X X  XXX  XX X XXXX X XX X   X    X XX X   XXX XX  X XX  X XXX  XX  XX  \",\n            \" XX  X  X  XX XX X  X XX XX X XXX    XX  X   X       XX X  XXXXX XXXX X XXXX XX X  XX            XX          \",\n            \" X X XXXX  XX  XX XX  X XX  XX   X X XXX X XX X  X       X   X X   XX XXXX XXX X XXXX  X X  X XXXX  X X XXX  \",\n            \" X XX  XX X X  X   XXXXX XXX  X X   XX   XX XX X  X X X  XX  XX XXXX X    X     XX X  X XXXX X X  XX XXX  XX \",\n            \"  X  XX XXX XX XX  X  X  X  XXX   XXXXX    XXXXXX   XXXX  X XXXX  XXX   X X     XXXXX XX XXXX  X XXX XX   XX \",\n            \"XX XXX  X  X  X  X X  X X XX X X XX XXXX X X    XXX X   XX  XXXX XXXX    XX      XX   X X XXXX X X XX  XXX   \",\n            \"XXXX XXX XX XX  X XXX  XX  XX X  XX XX XX   XX  X X       XX X X    X XXXX        XXXX   X XX XXX       X X  \",\n            \" XXXX   X X  XX   XX    XXXX XX     XX XXX  X  X X XX  X XX  XXXXXXX   X  X     X    XX XXXX X    XXX XX XXX \",\n            \" XX XXXXXX  XXXX   XX  XXXX XXXXXXXXXXXXXXX XX   XX XXXXX X       XXXX X XX XXXXX   X  XX X X   XX XXXXXX X X\",\n            \" XX X   XXXX   X XX XXX XXX X   XXX XXX X X     XXXXX   X XXXX X  XXXX X   XX   X      XXX  X   X X X   X XX \",\n            \"XXX X X XX XXXX    X XX X X X X XXX  XX X X  XX  XXXX X X           X X X  XX X X XXXX X   XX XXXX XX X X X  \",\n            \" X XX   XX X XXX     XXXXXX X   XX  XXX  XX   X X   X   XXXXX X XXXX      XXX   X     X XXXX X    XXX   X X  \",\n            \"    XXXXX XXXX  XX   XX X XXXXXXX X       X    X    XXXXX XXXXX     X XXX  XXXXXX X XX XXXX X   XXXXXXXXX X X\",\n            \"  X    X   X   XX X XXXXXXXX  XX XX X XX XX X  X X  XX  XX  XXX  XX    XX  XX  XX  X  XXX X XX  XXX   XXX    \",\n            \"  X   XX   XX     X XXX  X    XXX XXX XXXXXX XXX XXX     XXXXX X X  X XXXX  X     XXXX   X  X XXXX XXXX      \",\n            \"XX   X X    X X  X XX XXXXXXXX  X  XXXX   XX XX XX    X     XXX XXX  X   XX X XX X    X XXX  X   XX XXXXX XX \",\n            \"   XX XX XX X    X X X X      XX    XXX XXXX     X  XX XX XX XXX XX X  XX X   XX X    X  X XX X  X  X X X X X\",\n            \" X     XXX XX XXX  XXXX XXXX XXX X  X X XX   XX   X X XX  XX XXXXXX X  XXXX X   XXXX  X  X  X  XX XX XX X    \",\n            \"X     XX  XX   XX    XX     XX  XX X XXX         X X XXXX   XX X X  X X XX XXXX  XX XX X    X XXX  XXXX X    \",\n            \"   X X XXX    XXX    XX XXXX    XX X   XXX XXXX  X  X         X XXX  X   XXXX    X    X XXXX X    X   X XXXX \",\n            \"XX  X XXX  X       X   X       X   XX   XXX X    XXXX X      XX  X X  X XXXX XXX X   XXXX  XX  X   XXX  X XX \",\n            \"XXX  X      XX   XXXX   XX  XXX  X X X X  X  XXX XXXXX X      XXX  XXX  X   X   XXXX XXXX X X X XXXX XXX XX  \",\n            \" X X  XX X   XXXX X XX       XX X XX  XX X  XX XX X XX X XX X  X    XXXXXX XXX    XXXX X    X XX    XXX   X  \",\n            \"     X XXXXXX    XX X XXXX XX X X  XXXXXX X XX      X XXX  X X  XXXX X    XX     X X  X XXXX   X  X X X X X X\",\n            \" XX  XX X XXXXX  X XX X   X X   XX    X  X      XX  X  XX  XXXX X    X XXXX  XXX  X XXX  XXX      XXX   X X X\",\n            \"  X XX    XX XX    XXX  XXXX X X   X   X X    XX  X XXX XX   X XX XXXX   XX XX XXX XXX    X   XX XXX XX XX   \",\n            \"X  X XX  XX  XX XXX    X   XX  X  XXXX   X X X  XX X    XX  X  X   XXXXXXX  XX XX XXXX     XXXXXXX XXXX XXXX \",\n            \"  XX X  XX   X  XXX XXX  XXX  X X  X  X      XXXX  X    XX  X X XXXX X    XXXX XXX X XX XXXX X    XXX   XXXXX\",\n            \"    XXXXX  XX XXX X      XXX X      X X XX    X XXXX   X      X     X X  XX  XXX  X X X  XX X  XXXX XXX X XX \",\n            \"XX XXX     XX XXX X XXXX XX  XX X   XX XXXX  XX X XXX  XXXXX   X XX XX X XX X   XX X  X  XX XX   XXX XXX X X \",\n            \" XXXXXX    X X X   XXXX XX   X   X  X  X XXXXX    X XX X XX  X X   XX XXXX  X X   XXXX X   XX XXXX XX X   X  \",\n            \"X  XXX  X X X  XX  X X XX XXXX X  X X  X XXXXXXX  XXXX   XX X X X XX     XXXXX       XX X XX X    X X   X XX \",\n            \" X  XXXXX X    X X X  X X  XXXXXXXX  XXX X   X  X XXXXXXXX XX  XX XXXX X XX XXXXX X XX    XX     X  XXXXXXXXX\",\n            \" XXXX   X XX XX     XX  XXXXX   X X      X  X  X  X X   XXXX X   X X   XX X X   XX    X   XXX  X   XX   XX   \",\n            \"   XX X X XX   X XXX XX     X X XX   XXX XX   X  XXXX X XX          X X XX XX X X XXXX X   XX XXX   X X XXX  \",\n            \"X  XX   XX   X XX XXXX  X  XX   X   XXXXX X  X XX X X   X     X XXXX X   XX X   X     XXX XX X X  XXX   X X  \",\n            \" XXXXXXXX XXXX  XXX XX XX   XXXXXX X    X X X    XXXXXXXX  X  XXX XXX     XXXXXXX     X X  XX XX   XXXXXXXX X\",\n            \"   XX   XX  XXX   XXX    X       XX        X   X XX  XX X     XXXXXX   X  X  XX    XX X X XXXX XXXX   X XX   \",\n            \"      X  X X X    X  XXX X   XXX  XXX XXX  X X   X    XXX X  X X X XX XXXX   XXX  XXX  X   X  XXX   XX XX XX \",\n            \"X      X     X XX  X X XX       X   X  X  XX XX XXXXXXXX X X  XXX  X X X XXXXX     X  X XXX       X  XX   X  \",\n            \" XXXXXXXXXXX  X X X XX X XXXXX XX   XX X XXXXXXX  XX XXXX XXXXXX  XX      XX   XX   X X  XX X   XXX  X X XXXX\",\n            \"X XXXX X    X XXX X X XX  X  XXX X XX  X X  X   X  X X   X   XXX  X     XXX   XX X XXXX    XXXX XXX XX  X X  \",\n            \" X X  XX X XXX XXX   X XXXX XX     X  XXXX X XXXX X X XX  XXXX X   XX XXXX  XXX  XX XX      X X XX      X XX \",\n            \"   X    X  XXXX  XX X XX X X X XX    XX XXXX X XXXX  XX  XX X X X XX      XXXX    X  XX XXX  X    X  XXXX X  \",\n            \"X  XXXX XXX   XX   X  X  X  X XXXXX X XXXXX XXXX X  XXX X  XXXX  XXXX     XXXXX XX XX X  XX   XX XX  XXX  XXX\",\n            \"X X XX X XX XXX   XXX  XXXX XXX    XXXXX X XXXX   X   X   XXXXX   XXX XX XX   X  X   XX  X X X X XX  XX XX   \",\n            \"      XXX  XXXX X      X X  X XX X  X XX XX X XXX   X XX   XXX XX   X XXXX XXXXX  X XX      X XXX  XXX X  X  \",\n            \"X  X   X  X   XXX XX  XXXX   XXXX    XXXX        X X X XX XX XX X X  X    XXXX  XX    X XXX  X    X XXX   XX \",\n            \"  X X XXX XXXXXXX   XX X XX X X    XX  X XXXX   X X   X  X   XX      XXX X XX  XXX XX X   X X  X XX XX X  X  \",\n            \"   XXX     X  XXX  X  X XX XX   XX XXXX X   X XX X    X     X X   XXX  X XX XXXX X XX    XXX X X XX X  XX    \",\n            \"XXX XXX XXXXX  XXX   X X X X    XXX    X  X XX   XX   X  X X X      X XXX  XX XX  XXXX      X XXXX XX  XX    \",\n            \"XXX X  X  X X  X XXXX  XX    X X   X  X  X X X XXX  X    X  XXX XXX  X X  X      X    X XXXX   X  X   XX  XX \",\n            \"XXX   X X   X   X X    XX XXX X XXX XXXXX XX X         XX X  X   X        X  X X X X  XX  XXX   X X   XX  X X\",\n            \"XX X X  X  XXX   XX X XX X  X  XXX XX XX XX  X XX XX   X  XX XX  X   X XX X X XX   X  X   X X  XX    X  XX   \",\n            \" XXXX X XXX   XXXXXXX X      XX X XXX X  X X XXXXX    X   X XX X   XXXXXXX XXXXX  XXXX  X   X XXXX XX  XX X  \",\n            \"  XXXX   XXXX       XX   XX    XX X XX X  X   XXX    X X  X   X X XX  X  XXXXXX  X X XXXXXX      XX  XXX  X  \",\n            \"XXX X XX    XX XX X X  X X  XXXXXX   XX X      XXX XXXXXXXX  XX    XXXX  XXXXXXXX X  XXX XXX XXXX X XXXXX X  \",\n            \"        XXX  X    XX X  XX  X   XXX  X  XXX  X  X   X   X   XX   XX X XX   XX   X  XX X  X  X  XX X X   XX   \",\n            \"XXXXXXX  XX XXXX XX   XXX XXX X X    X  XXXXX XX   XX X X XXXX X    X X    XX X X X X       XXX XX XX X XXXX \",\n            \"X     X  XX  X X XXXX   XXXXX   X X X XX X XXX XX XXX   XX    X XXXX X X  X X   XX   X  XXXX X   XXXX   X X X\",\n            \"X XXX X X X  X XXX  X  XXXXXXXXXX  XX XXX X X  XXX  XXXXXXXX XXX XXXX  XXXX XXXXX  XXXXX XXXXXXX    XXXXX XX \",\n            \"X XXX X  XXXXXX   XX X XXXXX X  XX XX   X      X XXX   X   XXXX X XXXXX XX   XX XXX  XXX XX    X X  XX XX   X\",\n            \"X XXX X  XX   XXXX X  X XX  XX  X X XXX X      XX X  XX X   XX X   XX XXXX X    X X XX X X  XXXXXX  XXXX XXX \",\n            \"X     X X        X X X  X XX   X X X X     XXXX  XX   X X     X XXXX X    XXXXXX X    XXXXXX X X XXXX     XX \",\n            \"XXXXXXX  XX   XXXXXXX  XXX XX      X  X X  XX    X XXXX  XX XXX X XXX   XXXX XX XX XXX X  XXX   XXX    XX XXX\"\n        };\n        private static readonly string[] Modules115 = {\n            \"XXXXXXX X  XXX X  XXXX XXX  X X XXXX  XX XX  X       XX   X     X  X    X  XXXX X  XXX    X     XX   XXX X  X XX  XXXXXXX\",\n            \"X     X     X  X X  XX X X X  X X XX XX X  XXXX X XXX  XXX XX X XXXX X  XX  XXX X      XXXX XX   X XXXX X    XX X X     X\",\n            \"X XXX X   X X  X X X XX XX  XX X XX   X X XXXXX  XXXXX  X XX   XXX  X  X  X       XXX XX X     XXXX  X X XXXX  XX X XXX X\",\n            \"X XXX X    XX XX  XX XXX  XXXXXXX XXX XXX  XXXX   XX   XX   XXXX  X   X  XXX  XXX  X    XXXX X X  X XXXX XXX XXXX X XXX X\",\n            \"X XXX X XX  XX XX X X  X XXXXXXXXXX  XX  XX  XX  X X   XXXXXX   XX X XXX   X X XXX XXXXXXX  X   XX   X      X  X  X XXX X\",\n            \"X     X XX XX   XX X  X   XXX   X XX   XXXXXXXX  X   XXXX   X XXXX  X XXX  XX XXX   X   X X XX X   X XXXXX   XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXXXXX X XXX     X X   X    XXXXX XXX          X   XXX XXX  X  X X    X XX X   X  X   XX X X  X XXXXXXXX        \",\n            \" XXXXXXX    XX XXX X  XX  XXXXXXX    X X X   XX XXXX X  XXXXXX X   XX  XXX X X     XXXXXX X   XXXXXXXX      XXX    XX   X\",\n            \"  XXXX XXXXXX  X  XXX XXXXX X X  X    XX X   X     X  XX X XXXXXX   X X XX X X X   XX X X  X XX   X XX    X X XX XX XX  X\",\n            \" XXXX XX XXXXXX XX X  XX  X  X  X X   XXX XXXXX XX  XX    XX XXXX  X X  XX XXXX X   XX XXXX X XX X   XX X    XX    X    X\",\n            \"XXX X  XX X  X   X  XX X XXXX XX X    X  X XXXX   X   X     XXXX   X XXX XX  X X XX X X    X X XX XX   X XXXX  XX XXXX   \",\n            \"XXX X XX X  X     XXXX XX    X   X XX X  X   X    XXXX  XXXX  X X  XXX     X  XXX      XXXX  X  X X        X XXX   X   X \",\n            \"XXX X  X   XXX  X XX  XXX  XX X X   XXXX  XXXX     X XXX  X  X X X   X X   X   X X  XX  X  XX   XX X XXX XXXX X X X X X  \",\n            \"XXX XXXX X  XXX XX      X     XX XX XX XX X X X X XX     X    XX XX X  XXX  X X X  XXX  X X XX   X X XX XX   XXX X X XXXX\",\n            \"  X X  X   XX  XX XXXX  XX    X  XX X   X  XX    X   XX X X XX X XXXX X X X      XXXX X    X   XX X XX X XXXX  XXXX   X X\",\n            \"   XXXXXXXX XXX  X  X  X  XX XX XX     XX X XXX   XX        X  X    XX XXX    XX X    XX X  X XX   XXXXXXX X         X  X\",\n            \"X   XX XX  X XXXX X   XX   X  XX  X XXXX XXXX   XXXX    XX XXX   XX XX  XX    XX X XXX X   XXXX  XX X  X X X X    X XX   \",\n            \" XXXX XX XXXX    X X X X X   X X  XXX XXXX  X  XXX XXX    XXXX   XX X  XXX XXXX X    X  XXX X X  X   XX X  X   X   X   XX\",\n            \"XXXXX  XXX  X   XX X XXX XXXX X  X X X  X  XX XXX   XXXX          XX XX XXX  X X XXX  X    X X XX XX   X  XXXX  X X  X X \",\n            \"XX XX X XX    X X XXXXXXXXXXXX    XXXXXX X X X X     XXX X  XXXX XXXXX XXX  X XX  X  XX  XXXXX  X     X   XX XX        XX\",\n            \" X XX  X  XXXXXXX XX XXXX XX  X   XXXXXX XXX X  XXX XX X XXXX  XX XX    X   X X XXXXX XXXXX     X  X X X  XXX XX   XX X  \",\n            \"X   XXXXX  XX XXXX    X X     X  XX X    XXX  X  XX   X XX X  XXXX     X   XXXXXX X XX XXXX XX   X X  X X    XX   XX XXXX\",\n            \" XX       X XX X  XXX   XX  X X X     X X XXXXX  X  X XX XX X    XX   XXX X    X X   XX    X    XXX X  X  XXX  XXXXX  XX \",\n            \"X XXX X XXXXX  X XX XX X X  XXX X XXXXXX X   XXXXXX X X X  XXX      X XXX     XX  X       X   X X  XXXX X   X       XX  X\",\n            \" X XXX  X XX XXXXX X XXX  XXX XXX    XXX X XX  X X  X X XX XXX XX X  XXXX XXXXXX XXXX     XX XXXXX  XX   X  XX      XX X \",\n            \"XXXXXXXXXX    X       XX  XXXX  XX  XXXX X X XXXXXXXXXX XXX XXX  XX X    X X XX X X XX   XX X X  X   XX XX     XX XX   XX\",\n            \" XX        XX   X    X X  XX  X  X X XXXX XX  X  XXXXXX XX XX  XX  X XXXX X X  X X  XXXX X   X XXXXX   X XX XX XXXXX X XX\",\n            \"    XXXXX X  X XX  XX  XX X XXXXX  XXX   X        X  XX XXXXX    X  X      XX X XX  XXXXXX   X XX    XX  X  XXX XXXXX  XX\",\n            \" XX X   XX      X   X XXX  XX   XXXX     XXX X XXXXX   XX   X X X      X    X  XX  XX   XX X  X    X XX  X XX XXX   X X  \",\n            \"X   X X X    XX X  X XX X   X X X     X XXX   X      XXXX X XXXX   XX    X   XX XX XX X XXXXXX X X    XXX  X XXXX X XXXXX\",\n            \"X  XX   X X    X XXX  X X   X   XXXX X    X X    XX XX  X   XX  XXX  XX XX X X      X   XX X XXXX XX   X  XXX  XX   X X X\",\n            \" XX XXXXXX X   XXXX    X    XXXXX   XXXX X XXX X  X XX  XXXXX  X X XXX XXX   XXXX X XXXXX X  XXXX     X  X     XXXXXXX   \",\n            \" X XX  X X X     XX  XXX  X  X XXX XX  X X X   XX X X XXXX X   XX X  XX XXXX  X XXX X X  XX    XXXXX XX  X X X X   X X   \",\n            \" X  XXX   XXXXX  XX     XX    X      X XXX  X  X X XX    X      X XX X     X XX X XX   X  XXXX X X XXXX X         X XXXXX\",\n            \"XXX    X  XX     X  X X   XX  X  XXXX X X XXX     XXX X XXXXX XX   XXXXXX X X  X X X X X XXX XXXX XX X     XXX X XXX   X \",\n            \"   XX XX  XX  X   XXXXX  X  X XX  X  XX XX XXX   X      X XX XX   X XX XXX XXXXX X    X X XX XXXX  XX XX X  XXXXXXX     X\",\n            \"X  XXX X XXX    X X X XX X XXX  XX XX   XXXX  X X XX X  X XX   X  X  XX XXX XXX        XXXX XX XXX  XX X X  X   XX     X \",\n            \"XX  X XXXX X X X X XX XXXX XXX   XX  X  XXXX XX       XXXX  XXXX X  X    X    XXXX      X X X    X XXXX    X X  X   XX XX\",\n            \"XX  X    X XX XX  X    X      XXXXXX   XX XX  X XXX XX  XXX       XX  X X XX       X X   XXX XXXXXX    XX XXX XXX XX   XX\",\n            \" XXX XX X  X   XXX   XXX  X   X X   XXX XX XX X XXX XXX XXXXX X   XX X X     X XX X X XX X X  XXX XXXXX X XXXX XXXX XXXXX\",\n            \"XX XXX XX X X  XXX      XXX X  XXX XX XX X X        X XX  X  X XX XXXX XX  X  XXXXXX XX     XX X XXX XXXXXXXXXXXX  XXXX  \",\n            \"X   X XX  X XXXX XXXX  XXXX XX       XX XX X XX XXXXXXX XXXXX   XXXXX  X X X XX X XXXXXX X XXX X   XXXXX  X  X  XXXXX  XX\",\n            \" XXX X X       XX X XXXXXXXX X  X  XXX    XXX XX XXXX XX XXX X     X XXXXXX XX X X X X X  XX XXXX X  X   X XX XXX  X   XX\",\n            \"XX XXXX  XXX  XXX X X  X XXXX    XX  X X       XXXX      X  XXX XX  X   XX XX XXXX    X X X    X  X  X X  XXX X XXX   X  \",\n            \"  X XX      X   X   X    X XX X XX XX  X X X       X   X  X XX  X XXXX  X X X XXX   XX XXXX   XX     XX  XX  X        X  \",\n            \" X  XXXXX XXXX X   XX   XXXX XXXXXX    XX XXX X X X  XXXXX X  XX  XX X   X   XXXXX X    X X XX   X XXXX   XX X     XXXX X\",\n            \" XXX X XXX  X X  X X   X XX   XX   X  X   X X   XXXXXX XXX   X XXXX XXX X XX X X   X X   XXX XXXX X    XXX XX XXXXXX X  X\",\n            \"X   XXXXXXX    X X    X  XXXXXXXX   XX X XXXX X  X  XX XXXX    XX X X  XXX     XXXX   XX X  XX XX    X  XX  X X   X  XXX \",\n            \"   XX   X X X   XXXXXXXXX X XXXX XXXXX X X   X X  XX   X    X  XX XX       X XX    X         X X  XXXX XX   X  XX  X XX  \",\n            \"X    XX   XXXXXX XXXX  X  XXX XXX     X XX XXX  X    X   X X XX XXX XX X X    X X  XX  X X  X    X XXXXX X   X  XXX X   X\",\n            \"  X  X XX       XX  XX X    XXX X  XXX   X   X   XX XXX X XX  X    XXXXXXXXX     XXX   X  X   XXXXX  X     XX XXXXX    XX\",\n            \"XXXX  XX  X   XX X     XX    XXXXX     XX XXX XXX  XX X X XXX X XX  XX XXX   X      X X X XX XXX   X  XX  X    XX XXXXXXX\",\n            \"X  XXX   X  X   XX   X XXXXX    XXXXX XX    X XX XXX XXX  X  X  X X X   XX X   X     XXXXXXX X X XX X    XXX   X   XX    \",\n            \"      XXXXXXXX  X  XX   X XX  X  XXX X X    XX XXXX XXX   XX XXX  X    X X XXX  X   X   X X X    X XXXX   X  X    X     X\",\n            \"X XXX  X XX   XX XXXX X  X   X X X           XX X  X X X  X   XXXXX  XXXX X   XX XXXX  X XXX XXXX X    XXX  X XXXXXX X  X\",\n            \" X  XXXXXXXXX XX   XXXXX   XXXXXX X  XX XX    X  XXX   XXXXXX  XX X XX XX  X X  XXX XXXXXX XXX X      X XX XX  XXXXXXXXX \",\n            \"   XX   XX  X XX XXXXX  XXX X   XX X XX X X X XXX X    XX   XXXXX XX  XXXXXX   XX  XX   X    X  X     XXX  XX X X   XX   \",\n            \" X  X X X  XX  X  X XXXX  X X X XX  XXXX XXX X X  X    XX X X X XXXX X   X XXX     XX X XX XX  X X XXXXX X     XX X XX  X\",\n            \"XXX X   XXX   XX  XX  X     X   XXX   X XXX XXX X  XX   X   XXX      XXXXXX   XXX X X   X XX  XXX X        XX XXX   X    \",\n            \"XXXXXXXXX    XXXX XX X     XXXXXX       XX  X X X  XX XXXXXXX X XX X  XXX XX  X XX  XXXXX X   XX       X  X     XXXXXXXX \",\n            \"X  XX   X   X  X  X   XX    X  XXXX X X XX  X XX       X     XX X X X XXX  X XXXXX X  X X     XX XXX  X  XXX     XX  X X \",\n            \"XX   XXXX  XX XX X XX  XXX  X   XXX XX XXX X    XX   X X     XXX  X XX     XX XX   XX  XXXX XX   X XXXXX  XX X X      XXX\",\n            \"XXXX X X  X  X XX XX X     X XX  X XX   X   XX XXXX X XX   X   XXXXXXXXXX XX XX  XXX    X  X XX X X      X XX XX  XX    X\",\n            \" X  X X   XXXX   XX XX X  XX  XX  X  XX XXXXX X XXXX X X      XXX X  XX XXX  X X    XX XXXX     X  X  XX X XXX XX X  XX X\",\n            \" X X      X X   X XXX XXX XXXX XX X XXX XX XX XXX           XXXXXX X   XX XXX    X    X   X  X X     XX    XX  X XXX     \",\n            \"    X X X  XX  X  X  XX XXXX X     XXXXXXXXXX XX X   XXX  XXX XX   X     X XXX     XX   XXXXX    X XXXX XX   X   X   X XX\",\n            \"  X    X X   X  XX   XX X   XX X XXXX XXXXXXX   XXXXX X X   X    X X XXXX X   XXXXX XX X   X XX X X    X   XX X   X  X  X\",\n            \"X XXX X  XX    XXX XXX XX     X    X     X   XX X  XX X XX XX X XX  X XXXX X  X XXXXXX XX XX X  XX X  X XX XXX XX XXXXX X\",\n            \"   XXX  XXX XXX  X XXX      XX  XX  X X  X     XX  X   X XXX  XXXXXX X XX  X XXXXX    X    X X XXX  XXX   X      XX XX   \",\n            \"  XX  XXXX XX XX X X  X  XX X XXXXX XX XX X X  XX X XX X    X XX XXX     X XX XX   XX X X XXX  X X XXXX X   X  X   XXXXXX\",\n            \"  XXXX X XX  X  XXXX XXX X X  XXX  X    X XXXXXX X  X XX X   X   XX XXXXX X  XX  XXX       X XXXX XX   X XXX  XX XXX X  X\",\n            \"XX   XXX  XXXX  X  XXXXXX XX  X XXXX XX XX X XX    X X X XXXXXX XX X XX X    X X  XX X XX X    XX X  X  X    XXXXXX  XXX \",\n            \" X  XX    X XXX X X  XXXXX   XX XX X XX XXXXXX X X XX     XX X X  XX X  X  XX     X   X  XX   X X  XX    X X XX  XXX X   \",\n            \"  X XXXXX   X   X  XXX     XX    X XXXXXXX XXXX    XXXXX     X X         X XXX     XX  X XX XX   X XXX  XX XXX   X   X XX\",\n            \"X XXX    X   XXXXXX X X X  XXX  XX    XXX  XX XX  X X X X     X X  XXXXXX X   XXXXX XX     X XXXX X   XX XX X XX     X  X\",\n            \"XX XXXX  XXXX  XX  XX XX X X XX   X   X     X X  X XX X XXXXX XXX   X  X  XX  X XXX X  XXXX       XX X XX  XXXXXXXXXXXX X\",\n            \"XX     X XXX  XX  X X X X   XX  X X      XXX XXX   XX  X X   X   XXXX   XX   XXXX     XX  X    X XXX   X  X X X  XX X X  \",\n            \"  X XXX  X X      XXXX X  X X XX XX XX XXX   XX   X  X X X XXXX   XX   X X  X XX   XX   XXXX     X XXX XXX  XX  XX XX X X\",\n            \" X X   X XXXX XX XXXXXXX XXXXX X XXXX X XX  X  XX     XX   XXX XX X  XXXX X  XX  XX X         X X XX  XX XXX  XX   X    X\",\n            \"  X  XX   XX  XX XX  XX   XXXXX X   XX  X   XX X XX  X X XXXXXX X  X X XX X  X X    XX XX  X X X XXXX X  X      XXX  XXX \",\n            \"X   X     XXXX XXX   XX  X X X X  XXXXX XX XX XXX          XXX XXXX  X XX  XX    X   XX   X     X   XXX  X X X   XXX XXX \",\n            \"XX XX XX    XX XX   XX     X XXXXX   X XX XXX XX     XXX  XXXX XX       XX XXXXX    XX X XX      X XX X X  XX          XX\",\n            \"XX   X X X XX X X X XX  X   X  X   XXX XXX X   XX X X X XXXXX X XXXXXXXXX X       X XXXX   XX XXX X  XXX XX X XXX X    X \",\n            \"  XXXXXXXXX    X  X X XX X  XXXXXX    X     XXX     XX  XXXXX XX    XX  XXXX  XX X XXXXXX X X X XX X X X  XXX   XXXXXXXX \",\n            \" XX X   XXX   XX X XXX XX  XX   X  X  X  X   XXX XXXXXXXX   XX X X XX X X X X X  X  X   X XXXXXXXX X   X  X X   X   X XX \",\n            \"XX XX X XX  XX  X XX X XX X X X XXX    XXXXXX X X X X  XX X XXXXXXXX     XX XXXXX   X X XXXX        XX  X   X   X X X XXX\",\n            \"XXX X   XXXXX X XXX XX XXXX X   XXXXXX X XX X XXX X  X  X   XX        XXX      X XXXX   X     X X X   XX  XX  XXX   X  XX\",\n            \"  XXXXXXXXX XX   X X  XXX X XXXXX X X     X    XX X  XX XXXXXXXXXX X  XX XX XXX XXXXXXXXXXXX XXXX     XXX       XXXXX XXX\",\n            \"X  X X  XXXXXX X XX  X XXX XXX  XXXX X   XXXXXX X  XX XX  XX X XX       X XX  X  X   X XXXX    XXXX  XXX X X XX  XXXXX X \",\n            \"XXX X X X   X  XXX X XX X      X X   X        X  XX    X X X X XXX     X XXXXXX X  XX XX XX      X XX X X  XXX X  X X XXX\",\n            \"  X  X X XX  X  X  XXX  X   XXX  XX XXX    X  XX  XXXXXXXXX X X XXXXXXXXX        XX X      XXXXXX X  XXX  X X X  XXXX   X\",\n            \"    XXXX     XXX    X XXXX    XX X X  XXXX     X  XX X XXX  X XXX X X  XX  X XX    X      X X    XXX X    XXX  X  X  XX X\",\n            \" X      XXXX  XX X X  X    XX   X   XXX    X    X X       X  X  XXXXXX   X X    X   XX XX XXX  X  X      XX X  XXXXXXX X \",\n            \"XXXXXXXXX  X    XXXX XXX  X XXX XXXX XX     X  XX XX X  XXX XXXX XXX       XX X X  XXXX  XXX       XXX  X  XXX XX X XX XX\",\n            \"XXXXXX XX XX    XX XX  XXXX XXX  XX     XXXX X   XXXX   XXX XX  XXX  XX XX X   X XX XX X     XX X X   XX  X XXX XXXXX  XX\",\n            \"   XXXX XXX X      XXX     XX  X  X X   XX X  X XXX X  X X   X X  XX X X XXXX   XX X   X X X X X    X X  X XX  XXX XXXXXX\",\n            \"X  XXX  X XX XXX    XX X X XX  XXXXXX X   X X X     X X XXXXX X X    X  X XX   XX X  X XXX        X XXX XXX X X X  X X   \",\n            \"XX XX X X X X  XX   XXXXXXX    XXX   XXXXXXX X X  XXXXX    XXXXXXXXX     XX X X X  X  X  XX      X XX XXXX       X X X XX\",\n            \"  X XX X XXX  X X XX    X  XXX X XXX X       X       X XXX  XX X XX   XXX      X  X X XX   XXXXXX X  XXX XX X X   XX   X \",\n            \"  X   XXXX   XXX   X  X    X   XXX XXXX XXX X   X XXXX  XXXXX XX X X XX X  X XX  X   X    X XX  X  X  X  XXX   XX X XXX X\",\n            \" X  X  XXX     X X XX XXXXXX   X   XX X XX  XXX   X   XX X XX  X  X     XX X  X X XXXX XXX XXX  X  XX X  X  X   XXXX X   \",\n            \"XXXXXXXX XXXX   XXXXXXX XX   XXX XXXX XX  X X XXX XX X XX  XXX    X    X   XX XXXX X XX   X    X X  XXX X    X X  X  X XX\",\n            \"XXXXXX   X XXXX X    X XX X XX XXXX X X  X X  XXXXXX X X      XX X XX XXXX     X  XX X X   XX XXX X  X X XX XXX XXX X    \",\n            \"   XX X XXX XXX  X  X X  XXX  X   XXX XX  XX  XXXXXX  X      X XX X XX XXXXXX X  X  XX X XX XX   XXXXXX    XXX X X  XXXXX\",\n            \"X   X   XXXX XXX X  XX XXX XX  X XXXX XXXX  X X X  X  XX X   XX XX XXX XX X X XX XX    XX XXXXX X XX   X XXXX  XX  X X   \",\n            \"XX XX XXX    X X  X  XX X XX  X  X XX X XXXX  XXX X XX XX    XX X  X     XXXXXXXX   X XX XX XX X XXXXXX X      X X X X XX\",\n            \"    XX  X  X  XX  XXXXXXXX XXXXXXXX X X XX   XXX   XX X X     X XX     XX  X   X XX X      X XXXX  X   X XX X X X X X  X \",\n            \"X    XX  XX  X XX  XXXX   XX XXXXXXXX     X XXXXX XX  XX  XXX     XX XX X   XXXXXX   X    X   XXXXXX  X  X  X  X  X X XX \",\n            \"X X XX   X    X X  X XX X X XX X XX XXX XX  X X   XX  XX XXXXX X X    X XX   X XX  XX  XX XXXXX X X     XX X  XXXXX      \",\n            \"XX X XXXXX  X   XX    X X  XXX XXX    XX    XXX   XXXX X XX XXXXX X  X      X X X  X X X XX X  XXXXXXXXXX    X X  X  X XX\",\n            \"X XXXX X    X  XXX  XXX XX  XXX X  X   XXX X X   XXX X   X  X    XXXXXXXXX     X  XX   X X   XX X    X X  XXXXX XXX  X X \",\n            \" XXX  X X   X   X X X X XX XXXXXXXXX X XX  X   XXXXXXX  XXXXX XX XX XX X XX   X     XXXXX    X XX   X XXXX     XXXXXXXX X\",\n            \"        X  XX   XX X X XX  XX   X    X      X  X    XX  X   X  X X XXXXX  X    X XX X   XXXX X  XX   XXXXXXX   XX   XX X \",\n            \"XXXXXXX XXXXX X XXX XXX X XXX X XXX X  X  XX  XX  X  XXXX X X  XXX X X   X  XXXXX   X X XXXXX   X  XXXXXX    X XX X XXXXX\",\n            \"X     X X XX     XXXXXXXX XXX   X  XXXXXXX   XXX     X XX   X X X    XXXX X    X XXXX   X  X XXX X X   X XXXXXXXX   X   X\",\n            \"X XXX X X XXXXX X X XXXXXXXXXXXXXX XXXX X   XX XXXX XX XXXXXX  XX XX  X XX X X      XXXXX  XX X  XX X  X     XXXXXXXXXX X\",\n            \"X XXX X XXXX    XXX XXX  XX  X  XXX  XXX  X X XXXX XX XXXX   X X XX  XX   XXX       XX   XX   XX  X X X   X XXXXXX  XXX X\",\n            \"X XXX X XX X  XXX   X XXX  XXX     XX       XX XX   X  XX X  XX  XX   X     X X X   X  XXXX X  XXXXXXXXXX    X       X  X\",\n            \"X     X X    XXX XX XXX   X XX  X  X XXXX X XX X XX      XX   X    XXX  X X       XX X X   X XX X      X XX X X  X X    X\",\n            \"XXXXXXX    X X        X X  XXXXX  XXX  XX  XX    X XX   XXX X    XX X X    X  X      XXX XXX XXXX       X X  XXX  XX XXXX\"\n        };\n        private static readonly string[] Modules116 = {\n            \"XXXXXXX X  XXX X  XXXX XXX  X X XXXX  XX XX  X       XX   X     X  X    X  XXXX X  XXX    X     XX   XXX X  X XX  XXXXXXX\",\n            \"X     X     X  X X  XX X X X  X X XX XX X  XXXX X XXX  XXX XX X XXXX X  XX  XXX X      XXXX XX   X XXXX X    XX X X     X\",\n            \"X XXX X   X X  X X X XX XX  XX X XX   X X XXXXX  XXXXX  X XX   XXX  X  X  X       XXX XX X     XXXX  X X XXXX  XX X XXX X\",\n            \"X XXX X    XX XX  XX XXX  XXXXXXX XXX XXX  XXXX   XX   XX   XXXX  X   X  XXX  XXX  X    XXXX X X  X XXXX XXX XXXX X XXX X\",\n            \"X XXX X XX  XX XX X X  X XXXXXXXXXX  XX  XX  XX  X X   XXXXXX   XX X XXX   X X XXX XXXXXXX  X   XX   X      X  X  X XXX X\",\n            \"X     X XX XX   XX X  X   XXX   X XX   XXXXXXXX  X   XXXX   X XXXX  X XXX  XX XXX   X   X X XX X   X XXXXX   XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         XXXXXX X XXX     X X   X    XXXXX XXX          X   XXX XXX  X  X X    X XX X   X  X   XX X X  X XXXXXXXX        \",\n            \" XXXXXXX    XX XXX X  XX  XXXXXXX    X X X   XX XXXX X  XXXXXX X   XX  XXX X X     XXXXXX X   XXXXXXXX      XXX    XX   X\",\n            \"  XXXX XXXXXX  X  XXX XXXXX X X  X    XX X   X     X  XX X XXXXXX   X X XX X X X   XX X X  X XX   X XX    X X XX XX XX  X\",\n            \" XXXX XX XXXXXX XX X  XX  X  X  X X   XXX XXXXX XX  XX    XX XXXX  X X  XX XXXX X   XX XXXX X XX X   XX X    XX    X    X\",\n            \"XXX X  XX X  X   X  XX X XXXX XX X    X  X XXXX   X   X     XXXX   X XXX XX  X X XX X X    X X XX XX   X XXXX  XX XXXX   \",\n            \"XXX X XX X  X     XXXX XX    X   X XX X  X   X    XXXX  XXXX  X X  XXX     X  XXX      XXXX  X  X X        X XXX   X   X \",\n            \"XXX X  X   XXX  X XX  XXX  XX X X   XXXX  XXXX     X XXX  X  X X X   X X   X   X X  XX  X  XX   XX X XXX XXXX X X X X X  \",\n            \"XXX XXXX X  XXX XX      X     XX XX XX XX X X X X XX     X    XX XX X  XXX  X X X  XXX  X X XX   X X XX XX   XXX X X XXXX\",\n            \"  X X  X   XX  XX XXXX  XX    X  XX X   X  XX    X   XX X X XX X XXXX X X X      XXXX X    X   XX X XX X XXXX  XXXX   X X\",\n            \"   XXXXXXXX XXX  X  X  X  XX XX XX     XX X XXX   XX        X  X    XX XXX    XX X    XX X  X XX   XXXXXXX X         X  X\",\n            \"X   XX XX  X XXXX X   XX   X  XX  X XXXX XXXX   XXXX    XX XXX   XX XX  XX    XX X XXX X   XXXX  XX X  X X X X    X XX   \",\n            \" XXXX XX XXXX    X X X X X   X X  XXX XXXX  X  XXX XXX    XXXX   XX X  XXX XXXX X    X  XXX X X  X   XX X  X   X   X   XX\",\n            \"XXXXX  XXX  X   XX X XXX XXXX X  X X X  X  XX XXX   XXXX          XX XX XXX  X X XXX  X    X X XX XX   X  XXXX  X X  X X \",\n            \"XX XX X XX    X X XXXXXXXXXXXX    XXXXXX X X X X     XXX X  XXXX XXXXX XXX  X XX  X  XX  XXXXX  X     X   XX XX        XX\",\n            \" X XX  X  XXXXXXX XX XXXX XX  X   XXXXXX XXX X  XXX XX X XXXX  XX XX    X   X X XXXXX XXXXX     X  X X X  XXX XX   XX X  \",\n            \"X   XXXXX  XX XXXX    X X     X  XX X    XXX  X  XX   X XX X  XXXX     X   XXXXXX X XX XXXX XX   X X  X X    XX   XX XXXX\",\n            \" XX       X XX X  XXX   XX  X X X     X X XXXXX  X  X XX XX X    XX   XXX X    X X   XX    X    XXX X  X  XXX  XXXXX  XX \",\n            \"X XXX X XXXXX  X XX XX X X  XXX X XXXXXX X   XXXXXX X X X  XXX      X XXX     XX  X       X   X X  XXXX X   X       XX  X\",\n            \" X XXX  X XX XXXXX X XXX  XXX XXX    XXX X XX  X X  X X XX XXX XX X  XXXX XXXXXX XXXX     XX XXXXX  XX   X  XX      XX X \",\n            \"XXXXXXXXXX    X       XX  XXXX  XX  XXXX X X XXXXXXXXXX XXX XXX  XX X    X X XX X X XX   XX X X  X   XX XX     XX XX   XX\",\n            \" XX        XX   X    X X  XX  X  X X XXXX XX  X  XXXXXX XX XX  XX  X XXXX X X  X X  XXXX X   X XXXXX   X XX XX XXXXX X XX\",\n            \"    XXXXX X  X XX  XX  XX X XXXXX  XXX   X        X  XX XXXXX    X  X      XX X XX  XXXXXX   X XX    XX  X  XXX XXXXX  XX\",\n            \" XX X   XX      X   X XXX  XX   XXXX     XXX X XXXXX   XX   X X X      X    X  XX  XX   XX X  X    X XX  X XX XXX   X X  \",\n            \"X   X X X    XX X  X XX X   X X X     X XXX   X      XXXX X XXXX   XX    X   XX XX XX X XXXXXX X X    XXX  X XXXX X XXXXX\",\n            \"X  XX   X X    X XXX  X X   X   XXXX X    X X    XX XX  X   XX  XXX  XX XX X X      X   XX X XXXX XX   X  XXX  XX   X X X\",\n            \" XX XXXXXX X   XXXX    X    XXXXX   XXXX X XXX X  X XX  XXXXX  X X XXX XXX   XXXX X XXXXX X  XXXX     X  X     XXXXXXX   \",\n            \" X XX  X X X     XX  XXX  X  X XXX XX  X X X   XX X X XXXX X   XX X  XX XXXX  X XXX X X  XX    XXXXX XX  X X X X   X X   \",\n            \" X  XXX   XXXXX  XX     XX    X      X XXX  X  X X XX    X      X XX X     X XX X XX   X  XXXX X X XXXX X         X XXXXX\",\n            \"XXX    X  XX     X  X X   XX  X  XXXX X X XXX     XXX X XXXXX XX   XXXXXX X X  X X X X X XXX XXXX XX X     XXX X XXX   X \",\n            \"   XX XX  XX  X   XXXXX  X  X XX  X  XX XX XXX   X      X XX XX   X XX XXX XXXXX X    X X XX XXXX  XX XX X  XXXXXXX     X\",\n            \"X  XXX X XXX    X X X XX X XXX  XX XX   XXXX  X X XX X  X XX   X  X  XX XXX XXX        XXXX XX XXX  XX X X  X   XX     X \",\n            \"XX  X XXXX X X X X XX XXXX XXX   XX  X  XXXX XX       XXXX  XXXX X  X    X    XXXX      X X X    X XXXX    X X  X   XX XX\",\n            \"XX  X    X XX XX  X    X      XXXXXX   XX XX  X XXX XX  XXX       XX  X X XX       X X   XXX XXXXXX    XX XXX XXX XX   XX\",\n            \" XXX XX X  X   XXX   XXX  X   X X   XXX XX XX X XXX XXX XXXXX X   XX X X     X XX X X XX X X  XXX XXXXX X XXXX XXXX XXXXX\",\n            \"XX XXX XX X X  XXX      XXX X  XXX XX XX X X        X XX  X  X XX XXXX XX  X  XXXXXX XX     XX X XXX XXXXXXXXXXXX  XXXX  \",\n            \"X   X XX  X XXXX XXXX  XXXX XX       XX XX X XX XXXXXXX XXXXX   XXXXX  X X X XX X XXXXXX X XXX X   XXXXX  X  X  XXXXX  XX\",\n            \" XXX X X       XX X XXXXXXXX X  X  XXX    XXX XX XXXX XX XXX X     X XXXXXX XX X X X X X  XX XXXX X  X   X XX XXX  X   XX\",\n            \"XX XXXX  XXX  XXX X X  X XXXX    XX  X X       XXXX      X  XXX XX  X   XX XX XXXX    X X X    X  X  X X  XXX X XXX   X  \",\n            \"  X XX      X   X   X    X XX X XX XX  X X X       X   X  X XX  X XXXX  X X X XXX   XX XXXX   XX     XX  XX  X        X  \",\n            \" X  XXXXX XXXX X   XX   XXXX XXXXXX    XX XXX X X X  XXXXX X  XX  XX X   X   XXXXX X    X X XX   X XXXX   XX X     XXXX X\",\n            \" XXX X XXX  X X  X X   X XX   XX   X  X   X X   XXXXXX XXX   X XXXX XXX X XX X X   X X   XXX XXXX X    XXX XX XXXXXX X  X\",\n            \"X   XXXXXXX    X X    X  XXXXXXXX   XX X XXXX X  X  XX XXXX    XX X X  XXX     XXXX   XX X  XX XX    X  XX  X X   X  XXX \",\n            \"   XX   X X X   XXXXXXXXX X XXXX XXXXX X X   X X  XX   X    X  XX XX       X XX    X         X X  XXXX XX   X  XX  X XX  \",\n            \"X    XX   XXXXXX XXXX  X  XXX XXX     X XX XXX  X    X   X X XX XXX XX X X    X X  XX  X X  X    X XXXXX X   X  XXX X   X\",\n            \"  X  X XX       XX  XX X    XXX X  XXX   X   X   XX XXX X XX  X    XXXXXXXXX     XXX   X  X   XXXXX  X     XX XXXXX    XX\",\n            \"XXXX  XX  X   XX X     XX    XXXXX     XX XXX XXX  XX X X XXX X XX  XX XXX   X      X X X XX XXX   X  XX  X    XX XXXXXXX\",\n            \"X  XXX   X  X   XX   X XXXXX    XXXXX XX    X XX XXX XXX  X  X  X X X   XX X   X     XXXXXXX X X XX X    XXX   X   XX    \",\n            \"      XXXXXXXX  X  XX   X XX  X  XXX X X    XX XXXX XXX   XX XXX  X    X X XXX  X   X   X X X    X XXXX   X  X    X     X\",\n            \"X XXX  X XX   XX XXXX X  X   X X X           XX X  X X X  X   XXXXX  XXXX X   XX XXXX  X XXX XXXX X    XXX  X XXXXXX X  X\",\n            \" X  XXXXXXXXX XX   XXXXX   XXXXXX X  XX XX    X  XXX   XXXXXX  XX X XX XX  X X  XXX XXXXXX XXX X      X XX XX  XXXXXXXXX \",\n            \"   XX   XX  X XX XXXXX  XXX X   XX X XX X X X XXX X    XX   XXXXX XX  XXXXXX   XX  XX   X    X  X     XXX  XX X X   XX   \",\n            \" X  X X X  XX  X  X XXXX  X X X XX  XXXX XXX X X  X    XX X X X XXXX X   X XXX     XX X XX XX  X X XXXXX X     XX X XX  X\",\n            \"XXX X   XXX   XX  XX  X     X   XXX   X XXX XXX X  XX   X   XXX      XXXXXX   XXX X X   X XX  XXX X        XX XXX   X    \",\n            \"XXXXXXXXX    XXXX XX X     XXXXXX       XX  X X X  XX XXXXXXX X XX X  XXX XX  X XX  XXXXX X   XX       X  X     XXXXXXXX \",\n            \"X  XX   X   X  X  X   XX    X  XXXX X X XX  X XX       X     XX X X X XXX  X XXXXX X  X X     XX XXX  X  XXX     XX  X X \",\n            \"XX   XXXX  XX XX X XX  XXX  X   XXX XX XXX X    XX   X X     XXX  X XX     XX XX   XX  XXXX XX   X XXXXX  XX X X      XXX\",\n            \"XXXX X X  X  X XX XX X     X XX  X XX   X   XX XXXX X XX   X   XXXXXXXXXX XX XX  XXX    X  X XX X X      X XX XX  XX    X\",\n            \" X  X X   XXXX   XX XX X  XX  XX  X  XX XXXXX X XXXX X X      XXX X  XX XXX  X X    XX XXXX     X  X  XX X XXX XX X  XX X\",\n            \" X X      X X   X XXX XXX XXXX XX X XXX XX XX XXX           XXXXXX X   XX XXX    X    X   X  X X     XX    XX  X XXX     \",\n            \"    X X X  XX  X  X  XX XXXX X     XXXXXXXXXX XX X   XXX  XXX XX   X     X XXX     XX   XXXXX    X XXXX XX   X   X   X XX\",\n            \"  X    X X   X  XX   XX X   XX X XXXX XXXXXXX   XXXXX X X   X    X X XXXX X   XXXXX XX X   X XX X X    X   XX X   X  X  X\",\n            \"X XXX X  XX    XXX XXX XX     X    X     X   XX X  XX X XX XX X XX  X XXXX X  X XXXXXX XX XX X  XX X  X XX XXX XX XXXXX X\",\n            \"   XXX  XXX XXX  X XXX      XX  XX  X X  X     XX  X   X XXX  XXXXXX X XX  X XXXXX    X    X X XXX  XXX   X      XX XX   \",\n            \"  XX  XXXX XX XX X X  X  XX X XXXXX XX XX X X  XX X XX X    X XX XXX     X XX XX   XX X X XXX  X X XXXX X   X  X   XXXXXX\",\n            \"  XXXX X XX  X  XXXX XXX X X  XXX  X    X XXXXXX X  X XX X   X   XX XXXXX X  XX  XXX       X XXXX XX   X XXX  XX XXX X  X\",\n            \"XX   XXX  XXXX  X  XXXXXX XX  X XXXX XX XX X XX    X X X XXXXXX XX X XX X    X X  XX X XX X    XX X  X  X    XXXXXX  XXX \",\n            \" X  XX    X XXX X X  XXXXX   XX XX X XX XXXXXX X X XX     XX X X  XX X  X  XX     X   X  XX   X X  XX    X X XX  XXX X   \",\n            \"  X XXXXX   X   X  XXX     XX    X XXXXXXX XXXX    XXXXX     X X         X XXX     XX  X XX XX   X XXX  XX XXX   X   X XX\",\n            \"X XXX    X   XXXXXX X X X  XXX  XX    XXX  XX XX  X X X X     X X  XXXXXX X   XXXXX XX     X XXXX X   XX XX X XX     X  X\",\n            \"XX XXXX  XXXX  XX  XX XX X X XX   X   X     X X  X XX X XXXXX XXX   X  X  XX  X XXX X  XXXX       XX X XX  XXXXXXXXXXXX X\",\n            \"XX     X XXX  XX  X X X X   XX  X X      XXX XXX   XX  X X   X   XXXX   XX   XXXX     XX  X    X XXX   X  X X X  XX X X  \",\n            \"  X XXX  X X      XXXX X  X X XX XX XX XXX   XX   X  X X X XXXX   XX   X X  X XX   XX   XXXX     X XXX XXX  XX  XX XX X X\",\n            \" X X   X XXXX XX XXXXXXX XXXXX X XXXX X XX  X  XX     XX   XXX XX X  XXXX X  XX  XX X         X X XX  XX XXX  XX   X    X\",\n            \"  X  XX   XX  XX XX  XX   XXXXX X   XX  X   XX X XX  X X XXXXXX X  X X XX X  X X    XX XX  X X X XXXX X  X      XXX  XXX \",\n            \"X   X     XXXX XXX   XX  X X X X  XXXXX XX XX XXX          XXX XXXX  X XX  XX    X   XX   X     X   XXX  X X X   XXX XXX \",\n            \"XX XX XX    XX XX   XX     X XXXXX   X XX XXX XX     XXX  XXXX XX       XX XXXXX    XX X XX      X XX X X  XX          XX\",\n            \"XX   X X X XX X X X XX  X   X  X   XXX XXX X   XX X X X XXXXX X XXXXXXXXX X       X XXXX   XX XXX X  XXX XX X XXX X    X \",\n            \"  XXXXXXXXX    X  X X XX X  XXXXXX    X     XXX     XX  XXXXX XX    XX  XXXX  XX X XXXXXX X X X XX X X X  XXX   XXXXXXXX \",\n            \" XX X   XXX   XX X XXX XX  XX   X  X  X  X   XXX XXXXXXXX   XX X X XX X X X X X  X  X   X XXXXXXXX X   X  X X   X   X XX \",\n            \"XX XX X XX  XX  X XX X XX X X X XXX    XXXXXX X X X X  XX X XXXXXXXX     XX XXXXX   X X XXXX        XX  X   X   X X X XXX\",\n            \"XXX X   XXXXX X XXX XX XXXX X   XXXXXX X XX X XXX X  X  X   XX        XXX      X XXXX   X     X X X   XX  XX  XXX   X  XX\",\n            \"  XXXXXXXXX XX   X X  XXX X XXXXX X X     X    XX X  XX XXXXXXXXXX X  XX XX XXX XXXXXXXXXXXX XXXX     XXX       XXXXX XXX\",\n            \"X  X X  XXXXXX X XX  X XXX XXX  XXXX X   XXXXXX X  XX XX  XX X XX       X XX  X  X   X XXXX    XXXX  XXX X X XX  XXXXX X \",\n            \"XXX X X X   X  XXX X XX X      X X   X        X  XX    X X X X XXX     X XXXXXX X  XX XX XX      X XX X X  XXX X  X X XXX\",\n            \"  X  X X XX  X  X  XXX  X   XXX  XX XXX    X  XX  XXXXXXXXX X X XXXXXXXXX        XX X      XXXXXX X  XXX  X X X  XXXX   X\",\n            \"    XXXX     XXX    X XXXX    XX X X  XXXX     X  XX X XXX  X XXX X X  XX  X XX    X      X X    XXX X    XXX  X  X  XX X\",\n            \" X      XXXX  XX X X  X    XX   X   XXX    X    X X       X  X  XXXXXX   X X    X   XX XX XXX  X  X      XX X  XXXXXXX X \",\n            \"XXXXXXXXX  X    XXXX XXX  X XXX XXXX XX     X  XX XX X  XXX XXXX XXX       XX X X  XXXX  XXX       XXX  X  XXX XX X XX XX\",\n            \"XXXXXX XX XX    XX XX  XXXX XXX  XX     XXXX X   XXXX   XXX XX  XXX  XX XX X   X XX XX X     XX X X   XX  X XXX XXXXX  XX\",\n            \"   XXXX XXX X      XXX     XX  X  X X   XX X  X XXX X  X X   X X  XX X X XXXX   XX X   X X X X X    X X  X XX  XXX XXXXXX\",\n            \"X  XXX  X XX XXX    XX X X XX  XXXXXX X   X X X     X X XXXXX X X    X  X XX   XX X  X XXX        X XXX XXX X X X  X X   \",\n            \"XX XX X X X X  XX   XXXXXXX    XXX   XXXXXXX X X  XXXXX    XXXXXXXXX     XX X X X  X  X  XX      X XX XXXX       X X X XX\",\n            \"  X XX X XXX  X X XX    X  XXX X XXX X       X       X XXX  XX X XX   XXX      X  X X XX   XXXXXX X  XXX XX X X   XX   X \",\n            \"  X   XXXX   XXX   X  X    X   XXX XXXX XXX X   X XXXX  XXXXX XX X X XX X  X XX  X   X    X XX  X  X  X  XXX   XX X XXX X\",\n            \" X  X  XXX     X X XX XXXXXX   X   XX X XX  XXX   X   XX X XX  X  X     XX X  X X XXXX XXX XXX  X  XX X  X  X   XXXX X   \",\n            \"XXXXXXXX XXXX   XXXXXXX XX   XXX XXXX XX  X X XXX XX X XX  XXX    X    X   XX XXXX X XX   X    X X  XXX X    X X  X  X XX\",\n            \"XXXXXX   X XXXX X    X XX X XX XXXX X X  X X  XXXXXX X X      XX X XX XXXX     X  XX X X   XX XXX X  X X XX XXX XXX X    \",\n            \"   XX X XXX XXX  X  X X  XXX  X   XXX XX  XX  XXXXXX  X      X XX X XX XXXXXX X  X  XX X XX XX   XXXXXX    XXX X X  XXXXX\",\n            \"X   X   XXXX XXX X  XX XXX XX  X XXXX XXXX  X X X  X  XX X   XX XX XXX XX X X XX XX    XX XXXXX X XX   X XXXX  XX  X X   \",\n            \"XX XX XXX    X X  X  XX X XX  X  X XX X XXXX  XXX X XX XX    XX X  X     XXXXXXXX   X XX XX XX X XXXXXX X      X X X X XX\",\n            \"    XX  X  X  XX  XXXXXXXX XXXXXXXX X X XX   XXX   XX X X     X XX     XX  X   X XX X      X XXXX  X   X XX X X X X X  X \",\n            \"X    XX  XX  X XX  XXXX   XX XXXXXXXX     X XXXXX XX  XX  XXX     XX XX X   XXXXXX   X    X   XXXXXX  X  X  X  X  X X XX \",\n            \"X X XX   X    X X  X XX X X XX X XX XXX XX  X X   XX  XX XXXXX X X    X XX   X XX  XX  XX XXXXX X X     XX X  XXXXX      \",\n            \"XX X XXXXX  X   XX    X X  XXX XXX    XX    XXX   XXXX X XX XXXXX X  X      X X X  X X X XX X  XXXXXXXXXX    X X  X  X XX\",\n            \"X XXXX X    X  XXX  XXX XX  XXX X  X   XXX X X   XXX X   X  X    XXXXXXXXX     X  XX   X X   XX X    X X  XXXXX XXX  X X \",\n            \" XXX  X X   X   X X X X XX XXXXXXXXX X XX  X   XXXXXXX  XXXXX XX XX XX X XX   X     XXXXX    X XX   X XXXX     XXXXXXXX X\",\n            \"        X  XX   XX X X XX  XX   X    X      X  X    XX  X   X  X X XXXXX  X    X XX X   XXXX X  XX   XXXXXXX   XX   XX X \",\n            \"XXXXXXX XXXXX X XXX XXX X XXX X XXX X  X  XX  XX  X  XXXX X X  XXX X X   X  XXXXX   X X XXXXX   X  XXXXXX    X XX X XXXXX\",\n            \"X     X X XX     XXXXXXXX XXX   X  XXXXXXX   XXX     X XX   X X X    XXXX X    X XXXX   X  X XXX X X   X XXXXXXXX   X   X\",\n            \"X XXX X X XXXXX X X XXXXXXXXXXXXXX XXXX X   XX XXXX XX XXXXXX  XX XX  X XX X X      XXXXX  XX X  XX X  X     XXXXXXXXXX X\",\n            \"X XXX X XXXX    XXX XXX  XX  X  XXX  XXX  X X XXXX XX XXXX   X X XX  XX   XXX       XX   XX   XX  X X X   X XXXXXX  XXX X\",\n            \"X XXX X XX X  XXX   X XXX  XXX     XX       XX XX   X  XX X  XX  XX   X     X X X   X  XXXX X  XXXXXXXXXX    X       X  X\",\n            \"X     X X    XXX XX XXX   X XX  X  X XXXX X XX X XX      XX   X    XXX  X X       XX X X   X XX X      X XX X X  X X    X\",\n            \"XXXXXXX    X X        X X  XXXXX  XXX  XX  XX    X XX   XXX X    XX X X    X  X      XXX XXX XXXX       X X  XXX  XX XXXX\"\n        };\n        private static readonly string[] Modules117 = {\n            \"XXXXXXX X X XX X  XXX X XX X X X X  X   XXXX X  X XX   X  XX XXXXXX  XX  X     XXX  X XX  X    XX    XXX XX X XX  XXXXXXX\",\n            \"X     X X   XXX   X    XX X   X  XXXX X  XXXX   XX XX  X  X X  XXXX  XX  XX  XX      X XXXX XX     XXXXXX    XX X X     X\",\n            \"X XXX X XXX X      X XX X         X  XXXXX X   XXXXX    X XX X X X  XXXX  XX      XXX X      XX X X  X X XX X  XX X XXX X\",\n            \"X XXX X   XX       XX  X   XXX  X X   XXX X   XXX   X X X X   XXXXXXX  XXXXXXXX XX X   X  XXXXX       XX XXX XXXX X XXX X\",\n            \"X XXX X   X XXX    XXXX XXX XXXXX XXX X X XXXX X XX X XXXXXXXX        X XX X  XXXX XXXXXXX    XX   X  XX   XX  X  X XXX X\",\n            \"X     X XX XX  XX X      XXXX   X   X XX  X X  X  X    XX   XX  X XXX  XX     XXX   X   X X XX   X  XXX XX   XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        X      XXX       X  X   X X    X XX X  XXX  X XXX   XX X X XX X    X   X  XXX   X  X XXXX X  X   XXXXXXXX        \",\n            \"  XXX X X XX  X  XX  XX X X XXXXXX   X  X  XXX  X    X  XXXXX    X XX X  X X  X    XXXXXXXXX X  XXX   XX   XXXX  XXX  XXX\",\n            \"  XXXX     XXX  XXXXX   XX      X  X  X XX X  X   XX XXX  XXXXXX XX  XX  X  X     XXX  XXXX XXXXX X  XXX X   XX X X XX   \",\n            \"XX X XXX X   X XX     XXX   X XX XXX  X XXX XX    X   X X       X XX   XX X  XXXX    X XXXX X  X   XXXX X    X    XX   XX\",\n            \" X XXX XXXXX   X X   XXX X  XX X XX XXXX XX  XX   XX XX XXX X X XXX XX XX XXX  X XX XXX    X  XXX X  X X XXXX XXXXXXX   X\",\n            \"X   XXXXXX  X   XXX XX X  XX  XXXXXXX  XXXXXXX XXXXX X X X X XX  XX X XXXX  XX X X    X   X XX  X XX  X  X  XXX    XXXX  \",\n            \"XX XXX  XX   XXXX X XXXXX   XX  XXX  XXX   XX XX     X X XX XX XXXX   XX XXXX   XX XXX XX X     XX X XX XX X XX XX  XX X \",\n            \"XX   XXXX  X X XX XXXXX XXX X    XXX XXXXX  X XXX XXXXX X  XXXXXX      X  XX X  X  XXX XXXX X  X X XX X X       X      XX\",\n            \"X   XX XXX   X     XX  XX X   XXXXXXX X  XX  X XX X  XXXX  XX X X   XX  XXXXX XX XX  XX       XXXXXX   X XX X XXXXXXX  XX\",\n            \"X X  XX X XXX X XXXXXX X  X XXXX X  XXX XX  X  XX X XXX    X XX  X  X XX XXX XXX X       XXX   X     XX X   XX     X XXXX\",\n            \"  X       XX XXX  XXXXXXXXXX X    X   XXXX XXXXX XXX XX X XX XX X  XXX X X     X  XXXXXX XXX  XX  X  XXXXX   X  X XXX  X \",\n            \"XX XXXX X     XXXX X XXX XX   X X    X XX   XXXX  XXXX XXX  XXX  X   X  XXXX   XXX  XX XXXX X    X XXXX X  XXX     X X XX\",\n            \"     X  XXX X   XXXXX     XXXX XX X XXXXX  X  XX  XXXXX X  XXXX    XX  XX XX  XX  X XXX      XXXX X    X XXXXXXXX X      \",\n            \"  XX  XX XXXX XXX XX X X  X X   X  X X XX XX X  X X   XXXX  XXXXX    X  X XX XXX  X  XX  X XX   XXXX  X X   X        XX X\",\n            \"X X XX X XX   X  XX X X X XXXXX XXX X  X  XX XX  X XX X XX X      XXX X X    X  X XXX       XXX X     XXX X X   X X X    \",\n            \"    X X X  XX X   X XX   XX X   X   X X   X X XX X X  XXXX X  XX   XX X  X    X X   X  XXXX XX   X XXXX X    X  X XX XXXX\",\n            \"X  X     XX XX   XXX XXXXXX XXXXX XXXXXXX      X X        X     XX X  XXXXX X X  XXXX X    X XXXX X  X X XX X X XXX XX XX\",\n            \"X    XX  XXXXX XX  XX XX   XXXX  XXXXX  XXX  XXX XX   XX  X X XX X XX XX   X XX  X   XXX     X XX  XX    X  X      XXXXX \",\n            \"XX X   X XX  X X XX  X   X XXX X XX X XX    XXXX XX  XX X     X   X X    XX    X XXXX XX  XX X  XXX  XX XX X XX   X  X   \",\n            \"  X  XXXX XXXXX XX XX X  XXXX XXX    XX XXX       X  X X X XXX X  XXXXX XXX X   XX  XX XXXX X    X XXXXXX          X X XX\",\n            \"    XX    XX   XXXXXXX   X  XX  X      XXXXX  XX   X  X X  XXXXXX  XX X  XXX  XX XXXX X       XXXXX    X XXXX X XXX      \",\n            \"  X XXXXX   X   XXXX X X X  XXXXX  XX XXX X X XXX  X  XXXXXXXXX XX X X XX X  XXXX   XXXXX X  X     X X X XXX    XXXXX XXX\",\n            \"   XX   X X      XXXXX X  XXX   XX X X  XXX     XX XX X X   X X XXXXX   XXX XX XX  XX   X XX    XXXX   X  X    XX   XX   \",\n            \" X XX X X    X  X XX XXXX X X X X  XXXX  X X  X  X X X  X X XXXX  XX X XXX XX  XX  XX X XXXXX  X X  XXX XX X X  X X X X X\",\n            \"XXX X   X XX XX X   X  XX X X   X  X XX     X   X  X    X   XXX   X  XXXXX XXXXX XX X   X  X XXXX X    X XXXXXXXX   X   X\",\n            \" X XXXXXXX   XXX XX XX X  XXXXXXXXX XX   XX  X  X   XXX XXXXXXX  XXX X X XXX  X X X XXXXX X X XXX    XX  X  XX XXXXXXXXX \",\n            \"X XX   X XXXXXXX XX X XXXXX  X X      X  XXXX X X X XXXX XXXXX XX  X  X XXXXXX   X  XXXX X XXXXXX    X   X XXX  X     XX \",\n            \"X XX  XX X  X   XXX XX  XX XXXX  XX XX X      XXX  X   XX X X  XX XX     X  X X XX XX XX XX X    X XXXX         XXX XX XX\",\n            \" XXXX  XXXXX XXXXXXXXX    X      X  X XXXX     X  X  XX   XX      XXXXX X    X X XXX X XXX   XXXXXX    X  XXX XXXX     X \",\n            \"XX  X XXXX X XXXX  XX XXX    X  XX   XXXXX X X   XXX X X   X X   X   X XX  XXXX  XX   X  XXXXXX X  X     X  X  X XX X XX \",\n            \"X XXXX X X  X XXX X    X X X   XX  XXXXXX X   X   X    XX X   X  X XXXXX   X X  X  XX  X XXXXXX X  X  X  X   XXX   XXX   \",\n            \"XXX   X  XX  XX X X XX     XXXXXXX   X  X  XXXXX X XXXXX  X     X X  X  XXXX  X XX      X X XX   X XXXX X    X  X X XX XX\",\n            \"XX         X XXXX X  X XX XX X XXX    XX    X XX XXXXX X X X     X XXXX XXXX XXX XXX X  X  X XXXX XX     XXXX XXX XX   X \",\n            \"X X   XX X XXX X XX  X   X   XXX    XXXXXXX X XXXXXX  XX  XX  XX XX  X X XXXXX X      X   X XX      X XX X X X  XXXXX X X\",\n            \"XX XXX     XX  X X X X  X XX X  X  XX  XXXX X XXX  XXXXXXX XX  XX  XXXX  XX X XXXXXX   X   XX XXX   X X  X XX      X X   \",\n            \"XX X XXX  X      X     X   X  XXXXX X XX  XX X X XX X X     XX  XX  XX  X X   X X  XX  X XX X  X    XXX X       X X X   X\",\n            \" X XXX XX  X  X X X  X   X   X   X    X XX    X  X X X  XXXXXX XX    XX  XXXXX X XXX X XX  X XXXX X      XX X XXX      X \",\n            \"XX XXXXXXX X  XXX  X X X  X  XX XX    XX XXXXX  XXX   XXX   XX X XX  XX X X  XX  X  XXXX  XXX XX   X  X  X X   XXXXX XXXX\",\n            \"X  X X   XXX X XX XX X  X XXXX  X X  X  X  XXX    X  XXXXX X   XXX X  X X XX   X  X X     X  XXX   X X X  XXX  XX   XX   \",\n            \" X    X  X XX XX  XXXX XXXXXXX  XXXX  XX X  XX    X XXX X  XXX X XXXX  X X XXXXXX   XXXXX X X    X XXXX XX   X  X   XXX X\",\n            \" XX  X     XX X X  X X      XXXX XXXX   XXX XX  XXXX XXX   XXX XX X X    XX  XXX  XX X XX  X  XXX XX   X XXXX XX XXX     \",\n            \"X X XXXXX  XX XX XX  X   XX   XXXXX  X     X  XX  X  XXXX XX  XXXXX  X        X  X  XXX  XX  X X  X  XX  X  XXXX XXX    X\",\n            \"X XXXX X  X XXXXX X    X XX XXXX X    XXXX    X  X XXXXXX XX XX  XX   XX   X   X X   XX XXXX X  X    XX    X  XX    X X  \",\n            \"   XX X  X  XXX  XX XXXX   X  X  XXX XX X XXX       X X     XXX XXXX   X XXXX XXX       X X X    X XX XXX    X    X XXXXX\",\n            \"XXXX    XX  XX XXX   X X XX   X  XX  XX  XX X   X XX XXXXX  XX  XX   X  X  XXXXX  XX    X  X  XXX X    X  X X XXX XX    X\",\n            \" X    XX    X XXX X      XX XX XX XX XXXX XXXX XXXX XX X XXX XXXX    XXX XXX X X X  X X   X  XX X    XXXXX XX   XXX  XXXX\",\n            \"XX     XXX  XX   X    X        X  XX   X   X X   XX      XXX X   X X XXXX XX  XX X       X  X      XX XXXX     X X   XX  \",\n            \" X    XXXXXX X   X     X  XXX         XX   X  XXX X  XX  XXX XXX X  X X X  XXX  X   X    XX X    X  XXX X    X  X X X  XX\",\n            \" XX XX      XXX  X XX XXX X X  X XXXX X XXXX    XX XXXX X X  X  XXXXXXX XXX XXXX XXX X XXX X XXXX X    X XXXXXXXX XX X  X\",\n            \"X  XXXXXX  XX X    XXXXX X  XXXXXXXX   XX   XXXX X    XXXXXXX     X   XX         X  XXXXX X   XXX X  XX     XX  XXXXXXX  \",\n            \"    X   XX  XXX XX  X  X  X X   XXX   X  X   X XX XXXXXXX   X X XX  XXX XX  XX    X X   X    XX  X XX X XX X    X   X X  \",\n            \"   XX X X XXX  X X X XXXXXXXX X X   XX  XXXXXXX XXXXX  XX X XXXXXXX  XX  X X X  X  XX X XXX X      XX X XX   X  X X XXXXX\",\n            \"   XX   X X   X XX   X    X X   XXX XX XX  X   X      X X   X   X XXX  XX XX XXX XXXX   X    XXXX X    X XXXX XXX   X  X \",\n            \"   XXXXXXXX X XXXXXX   XX   XXXXXX XXX  XX XX  X XX   XXXXXXXXX  XX X XXXXXX      X XXXXXXXXX XX  XX    XX  XX  XXXXXXX X\",\n            \"X    X  XXXXX XXXXXX  XX XX X X   XXXXXX  X X XX  XXXXX X XX  XXX XXX XX    X X   X   XX XXX  XXX  XX X  X  XX X XX  X   \",\n            \"   X  X X  XX X XXX X   XXXXXX  X X X  XXXX XX X X     XX   XXX      X X X X    X  XXX X XX X  X X XXXX X    X XX    X XX\",\n            \"XXXXX   XX  XXX    X   X X  X X X  X X  X X  XX  XXX XXXXXXXXX  XXXX  X X  X XXX  XXXX   X X XXXX XX   X  XXXXX XXX X    \",\n            \"XX XX XX XX  X X  X XXX       XXX  X        X  X   XX XX     X X X   X    XXX    X XXX XX X XXXXXX  XXX     X  XXXX  XXX \",\n            \"XX   X   X XXX XXX XXXX   X XXXXX XX   X XXX  XXXX  XXXX XX  X X X   XX  XXX X XXX X XXX  XXX   XX   XX  XXXXXX  XX    X \",\n            \"    X XXXXX XX  XX X X  XXXXXX  XX  XX   XX XX  X XX X X      X   X XX  XX XX   X  XX  X XX X  X X XX X X  X X X    XX XX\",\n            \"XXX XX XX X XXX X   XXX XXXX XX XXX XXX XXXX X    X   XXXXXX   X   X X   XXXXX X XXXX   X  X  XXXXX    X XXXX XX X  XX XX\",\n            \"  XXX X  XX  XX X XXX  X    XXX XXXX XXX    X XXX X   X XXX     X   XX     XXXX   XXX  XX XXXX  XX XX XX X  X  XXX X XX X\",\n            \" X  X    XX X XXXX   X  X XX  X  X X X X  X  XXX XX     X    X X     XXXXX X X   XXX  X   X  X XX   XXXX  X XXX  XXX XXX \",\n            \" XX X XXXX XXXXXXX X X    X   XX X XX XX X  XXX        X XXXXX    XXX XXX XX   XX  XXX X XXXX    X  XXX X      X X  X  XX\",\n            \" X      XX  X  XXX     X XXXX   XX   X X XXXX   X    XX   X  XXXXX  X XXX XXX XX XXXXX     X  XXX X  X X XXXX X   X X   X\",\n            \"   X  X  XX   X X XX  X    X  X X XXX  X    X  XX     X  X X XXXXXX  X     XXX  XX XX  XXXX   XXXX X  XX XXXX  XXX X XXXX\",\n            \"XX X X XXX X    X X XXX   XX   X X X  XXXXXX   X  X X   X  X X   XXXXX  XX X X XX     X   X   X       X X  X X   XXXX XX \",\n            \"    X XX XX   X    X X X XXX XXXXX   XXX  X  X XX    X  X  X XXXXX X  X X XXXXX X  XXX X  XXX      XXXX X           X XXX\",\n            \"X X        XXX XX  X XX XX    X XXX X XXX X  XXXXXX   X        XXXXXXX X  XXXXX  XX  XX X  X XXXX X      XXXX XXX X X  XX\",\n            \"   XXXX  X     X  X X        XX XXX      XXX   X     XX  XXXX  X X  X    X   XXXX   X   X XX X X   X  XXXXX  X XXX    XXX\",\n            \" X X X XXXXXXX XX   XXX XX   XXX X  XXXX  XXX X X XXX X XXX  XXX  X  X XXXX XX XXX    X  X X  XX  X XX XX   X    XXX X   \",\n            \"     XXX X  XX   X  XXX XX  X  X  X    X   X    XX    XXXXXX XXXXXX  X X XX X  XX  XXX X XX X    X XXXX X  X X     X X  X\",\n            \"XX XXX X X   X   X X X X  X     XXXX XXX X X   X  X X  XX  X XXXX   X  XX     XX XX XXXX     XX X X    X XXXX XX XX X    \",\n            \"XXXXX X X   XXX X  XXX  XXX     X XX  XXXXX   X X X  XXXXXX XXX   XXX XXX   XX XXX XXX XX  XX  X X X XX  X  X  XX XX  X X\",\n            \"XX  X  XX    X XX  X   XXXXX  X   X  XXXX  XXXXX  X  XXXXXXXX X   XXXXXXX   XX XXXX  XX  XX     XXXX  X X X XXX  XX  X   \",\n            \"   X XX  XX X       XXXXX  X X    XXX XXXX  XXX   XX XX     X      X    X  X XXXX  XX  X XX X       X X X  X X X     X  X\",\n            \" XX XX XX    XXX  XX X X X X XX  XX     XX XXX XXX X XXXX   X X X  XXX XXX XXX X XX XXXXXX    XXX X    X XXXX XX X  X  XX\",\n            \"X   XXXXXXX   X XXX X   X   XXXXX   X X X XX X  X X XXXXXXXXXXXX  X  X X X  XXXX X XXXXXX  X    X   X    XX  XX XXXXXXXXX\",\n            \"X XXX   X X  X XXXX    XX  XX   XXX XX XX  XXX  XX    X X   X     X X X XX XXXX X X X   XX  XX  X  X  X XX X    X   XX   \",\n            \"   XX X XX XXXXX   X  XXXX XX X X XX X X   X   X  X X   X X X X    XXXXXXXXXXX  XX  X X X X X    X XXXX X    X  X X XX  X\",\n            \"X   X   X  XX XX   X  XX  X X   X   X X   X XX XX XX  XXX   XX   XXX   XX XXX  X XXXX   X  X XXXXXX    X XX X XXX   X   X\",\n            \"X XXXXXXX  XX     XX  X X X XXXXX XX  XXX X   X XXXX XXXXXXXXXXX X  XXX   XXXXX  X XXXXXX X  X X X  XXX  XX XXX XXXXX XXX\",\n            \" X XXX X    X   XX XXX     X X   XX XXX    XX   XX X  X X XXX       X XXX    XXX XX    XX X     XX   XX  X XX XX         \",\n            \" XXX  XXXXX  XX   X XXXX X  XX X  XX XX   X X    XXXX   X  X XXX X  XXXX X XX  XXX  X X  XXX     X  XXX X  X X    XX X XX\",\n            \"X X    XXXXXX  X XX  XX XX X XX  XXXXXXX     X X X      X X  XX XX   XXX    XXXX XX XXXX   X  XXX X    X XXXX X X   XX  X\",\n            \" X X XXX    X XXX XXX  XXXXXX X XX XXX XXX   XXXXXX X XX X    X XX XXX   X XXX X   XX XX X    X XX X  XX    X XX  X XXX X\",\n            \"  X     X  XX XX X     XX X     X   X XXXXXX  X X X XX  XXX  XX XXXXX    XX X XX  X  X XXX   XX X  X XXX     X X XXX     \",\n            \"XXX  XX X X   XX X  X  X X    XX XX  XX XX  XXX X XX X    X  XXXX  X XX  XXXXX  X    XX  XXXXX   X XXXXXX    X XXXXX   XX\",\n            \"XXX XX XX XXX    X XX     XX XX XX  XXXX XXXXXXXXXX XX X  X  XX XX XX  X  XX   X XX X   X  X XXXX XX   X XX XXX XX      X\",\n            \"  X XXX  X X  X X   X   X X   X   X X X XX  XXX         XX  X XXXX    XX     XXX   X XX XXX  X  XXXXX X   X    XX XXX X  \",\n            \"     X XXXX   XXX  X  X  XX X XXX X  XX XXX XX XX    XXXX   X XX X XXX  XX XXX       X  XXX    XX XX     X XX XXX  X     \",\n            \"XXX  XX XX XX   XXXX X      XX X XXX   X  X X X  X XXXX XX   XXXX   X XX XXX XX X  X  X   X X    X XX X XX   X X  XXXX XX\",\n            \" X XXX XX  XX X  X          XXXX X  X  XX X X  XX X  XXX  X XXXX    X  XX   X XX  X XX     X  X X X    X XXXXXX X  XX    \",\n            \"XX   XXXXXXX XX X  XXXXXXX      X  XXXXX X  XXX    X  X   XX X XXX  X  XX  XX XXX  X X   X    X    X   XX   X  XXXX XXXX \",\n            \"X   X       XX XXXXX       X   XX  X X XXXXXXXX   XXXXX  X XX X XXX XXXXXXX X    X   X XXX  X X X  X XX        X  XX     \",\n            \"XXX X X      X X XX  X XXX      XXX X X XX X  XXX X X  X   XX  X   XX    XX X XXX    XXX  XXX    X XXXXXX  X X   XX  X  X\",\n            \"  XXX   XX XXXX X XX XXX  X X XXX   X   X XX   X XXXXXXX   XX X  XX   X  X X   X XXXXX X   X  XXX XX   X XXXXXX X    X   \",\n            \"XX   XXXXX XX XX  X X XX X  X X X   XX XX    XX X   XXX X  XX XX  X X X XXX XXXXX  XXXXX   X   XXX    XXXX   X XX X XXX X\",\n            \"  X  X XX   X X XXXX   XX XXXX   X XX X  XX  X   X X  XX   X  XX  XXX X X  X  X     XX XXXXX X   XX   XXXX X  X X XX     \",\n            \"XXX   XX X  XX  XXX  X XX X   X XX  X X     X   XXX XX  XXXXX     XX XX  X  X XXX  X  XX XX XX X X XXXXXX      XXXXXX  XX\",\n            \"X XXXX   XXXXXX XX X  XX  X X  X X  X  X XXXXXXXX X XXXX XXX X  X XXXX XX    XXX  X XX X X X XXXX XX   X XX X X XX X X XX\",\n            \"X   X X  X XXX X XX    XX X X  XX    XXX   XX X   XXX    XX XXX  XX XXXXX  X X  XX XX   XXXX    X  X  X   XX   X    XXX  \",\n            \"X   X  X  X X X    X   XXX   X  X  XXXX X X      X X   XX X  XX XXXX XXXXXXXXX      X  XXX X    X     X   X X  X XXX  XX \",\n            \"XX X XXXXXX     XXX X  X XX XXXXXXX X XX XX          X  XXX X    XX  X   XXXX XXX  XX X   X X  X X XXXX X    X X XXX  XXX\",\n            \"X XXXX   XX  XX  X  XX XX  X    XXXX      X  XX   X XX X X  XX    XXX   XX    XX XX    X   X XX X XX   X  X XXX     X    \",\n            \" XXX  X  X    X     X XXX  XXXXXX   X X XXXXX XXXX    XXXXXXXX    XX XX  X  XX X   XXXXXX X XX X XX X XXX   XX XXXXXX X X\",\n            \"        X  XXXX XXXXXXXX XXXX   XXXXXXXXXXX    XXX X XX X   XXX X XXX  XX XX XXX X XX   X X    X XX  XXX   XX  XX   XXX  \",\n            \"XXXXXXX   XX XX  XXX   X X  X X XX  XX  XX    X X XXX  XX X X   X   X XX  XXXXX X   X X XXXXX    X XXXXXXX   X  X X XX XX\",\n            \"X     X  X X     X   X    XXX   XX X  X  X X  X XXX    XX   X X     X  X X XX  X XX X   XX X XXXX XX   X XX XXX X   X  XX\",\n            \"X XXX X XX X  X  XX X X X  XXXXXX    X XX X     XX   XX XXXXXXXX  X X   X           XXXXXXXX   XX          X X  XXXXXXX  \",\n            \"X XXX X XX X  XX XX XX  X  X   XXX X  XX    X  XXX XX X X XX  XX  XX XXXX XX X  X   XX XX   XX    X  XX  X  XX XX XX X  X\",\n            \"X XXX X XXXXXXX XXXXXX   X   XXX X X X XXX XXXXX X    XXXXXX X XXXXXX   X     X XX X X XXXX X       XXX X    X    XX X  X\",\n            \"X     X  XX X XXX  X X XX  X  X XXX XXX X X XXX XXXXXX X    X X X  X XX X X   XX XXXXXXX     XXXX X    X XXXXXX  XX     X\",\n            \"XXXXXXX       X X  X   X  X   X  XX  XXXX  X   X  X XX  X    X   X   X   XXXXX X X  X  X X X       XX XX XXX XXXXX   XXXX\"\n        };\n        private static readonly string[] Modules118 = {\n            \"XXXXXXX XX  X X XXX XX X  XXX  XX    X X XXXXX X X X XX X XX  X XX  X  XXXXXXX XX  X   X   XX X X  XXX XX XXX X  X   X   XXXX XXXXXXX\",\n            \"X     X X X XX XX    XX XXX     XX   XX    X  X XX XX  XXXX XX X     XX   XX X XX  X   XXXXX XXX      X       X X  XXXXX  XXX X     X\",\n            \"X XXX X XX X   X  XXXXXX  XXX  XXX X  XXXXX  XX X X   X   XX XX XX X XX XX  X     XXX XXXXXX  X    X   X XXXXXXX XX X X     X X XXX X\",\n            \"X XXX X  X  X  X XXXX   XX XXX X XXX XX X XXXX X  X     X  X   XX X  X XX X  XX  XX     X  X X X  XX X     X     XXX   X  X   X XXX X\",\n            \"X XXX X  X  XXXX XXXXX X   XXXXXXX X X X       XX XXXXXXX  X   XX   XX XX  XXXXXXXXXXX X  XXX X X   XXXXX XXX  XX X XX XX X X X XXX X\",\n            \"X     X XXX X XXXXX    X   XX   X     X XXX  X XX  XX   X XXXXXX  XXXXX  X XX   XX   XXXXX X XXX    X   X       X    XXX  XX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX X X XX  X XX XXXXX   XXXXXX   XXXXX     XX   XX  X  X XX X    X  X   XX        XXX X  X  X   XXXXXXXX X  X   XXX X        \",\n            \"  XXX X X   XXX  XX XX  X X XXXXXX   X  XXXXX  X X XXXXXXX XXX   XX X  X X XXXXXXX X  X X  X X X  XXXXXXXX X  XX     X  XX XXXXX  XXX\",\n            \"XXXX X  XXX X XXXXX    X    X  XX XX XX XXXXX XXXXX  XX X    X X X X X XXX XX XXX XXX XXX XXXX  X XX  XX  XXX XXX X XX  XXXXXXX      \",\n            \"X X XXXX    XXX XX XXXX   XXX  X X     XXXXXXX XX  XXX X  X X X       X  X   X XX XXXX XX XX XXX   X     XX     X X  X X   X  XX  XXX\",\n            \"  XX    XXXX X  XX    XX X  X   X    X X   X  X  X    X  X  XXXX  XX  XX X    X XX  XXXXXXX      X XX  X  XXXXXX X  X X  XX XXX    XX\",\n            \"  X X XXXXX X XX    XXX  X XXX X X      XXX X X XXXX XX XX XX X  XX XX X X XX    XX  X XX    XXX  X  X     X    XXX  X X X XX XX XXX \",\n            \"X   XX X  X X X  X   XX X X       XX        X    X  X   X XX XXXXXXXXX X XX       X   XXX XXX   X   XX XX XXX   XX  XXX XXXX XX      \",\n            \" X   XXX XX XX X   XXXXXX XX   X  XX   XX X X  X  X X X XX X  X   X    XXXX  XXXX X   X XX X X X   X     XX     X    XXX  X   XX    X\",\n            \"XXXXXX X   X XXX X   XXXX   X  XXX X   XXXXXX   XXX    XXX X X     XX XXX         XX X  X XX X   X  X X    XXXXX X  X    XX  XX  X   \",\n            \"X  XXXX X   X XXXXX X X XXXX X  XX  XXXX XXXXXX XXX X    X  X       XXXX  X   X  X   XXXX  X XXX  X  XX  X X X X  X     XX XX XX XXXX\",\n            \"X    X XX   X X XXX     X   X   X XXX  X  XXX  XXXX XXXX  XXX  XXX   XX   XX   XX X XX  XXX XX  X XX  XXXXXXX XX    X  X   X XX  X   \",\n            \"      XXX   X XX XXXXX XX XXX  X  XX  XXX    X       X  XXXXXXX X    XX X  X         X X XXX X X X       X     XX X  XX       XX    X\",\n            \"XX XXX XX XXX XX       XX X X  XXXX      X  XX    XX  XX  X X   XXXXXX  X X    X XX X  X XX X      XX X    XXXXX XX X X XXX XXX      \",\n            \"X  XXXXXXXX XX  X   XX  X  X X XXX X XXX   X   X XXXX     XXX  XX  X XXX XX XX XX   X XX   XX XX  X  X  XX X X X XX     XX X  X XXX X\",\n            \"    X     XXX XXXX   X   X  X  X XXXXXXXX X X  XX   XXXXXXXXXX  XX  XX  X    X    XX XXXX X XX    X XXXXXX XX  X  X XX  XXX XXXX   X \",\n            \"XXX  XX XX X    XXXXXXXX    X  X   XX  X   X X X X   X XXX  XXXX XX  XX X  X XX X  XX XXX XX X XX  X X   X X  X X X  XXX      X  X XX\",\n            \"       XXXXXX  XX X  X XX X X  X XXXXXXXXXX  X X XX XXXX XX X X X   XX  X   XXXX XX XXX XXX    X X XX     X XX X X  X X XXX X X     X\",\n            \" XX   X X  X XX XXX X X X X  X XXX XX  X   X  XXX    X  XXX  XX XX   XX      XXXX  X  X    X  X X XX X  XX  XX X  X     X XXXXX XXX X\",\n            \"  X  X XXXX X  XX    X X  X X  X  XX  XXXX XXXXX X  XX XX XXXXX X  X X   XXXXXX   XXXX X XX XX   X  XXXXXXX X XXX   XX   X X  XX   X \",\n            \"X X X XX    X  XXX XXX  X   X  XX X XXXX XXX  XXXXX    XX  X   X  X XXX X    XX X  XXX X XXX XXXXX XX X  X X    X    X X   X X X X XX\",\n            \"X X XX X X X  X  XX  XXXX   X X X   XX XX X    XX   X X XXX XX  X X  X X XX XX X XX XX XXXX X  XXX XX     X XXXXXXX X    X XX   X   X\",\n            \"XX  XXXXXXXXX   XX  X  X X  XXXXXX X X X XXXXX X XX XXXXX X  XXX  X  XXX X  XXXXX   XXX X    XX  XX XXXXXX     X XX  X X    XXXXXXX X\",\n            \"XX  X   X XX   X  X  XX  XXXX   X XXX XXXXX  XXX XXXX   XXX  X    X XX X X  X   X XX  X XX XX    X XX   X X  XX   X  X XX  XX   XX X \",\n            \"X XXX X XX  XX  X XXX  X XX X X XX   X X X X   X  XXX X X X X XX XXXXXX XX XX X X  XXXXX   X XXXX  XX X XX    X X X  X X  X X X X  XX\",\n            \"    X   X X  X   XX XX XX   X   X    XXXX    XX XX XX   XX  X XXXXXXXX X  XXX   XXXXX  X XXX    XX XX   X   XX X X    X  XX X   X  XX\",\n            \"  X XXXXX X X XXXXXXX XX X  XXXXX  X X X    XXX XXX XXXXX        X X XX  X  XXXXX  XXXX     XXXXX XXXXXXXX  X  X  XXXX X    XXXXXXX X\",\n            \" XXX X XXXX  XXXX X     X X X X XXXX   XX     XX X X X   X X XX  X  XX XX XXX  XX XX X X    XX   X   X    X  XXX  XX X  X  X XX X    \",\n            \"  XX  XX   XX X  X   XX XX  X XXXXXXX XX XXX  XX  XXXXX X     XXXXXX XXX  XXXX      X     X  X  X     XXXXXX  X X XXXX XX X X  X    X\",\n            \"XX XXX  XX X  X  X     X XXXX X XXXXXXXXXXXXXX XXX            XX  X XX XXX   X  XXX     XXXXX      X XX     XXXXXX    X XXXXX X X   X\",\n            \" XXX  XX   X  XX    X XXXX  XX X    XX X   XX   XXX XX XX  X    X    XXXX  XXX X       X     XXX  XX     X  XX  XX X   X X  X     XXX\",\n            \"XXXX    X X     X X  X  XX  X  X     X XXX XX XX X X XXXX  X XX  X   X    XX  XXX X    XX X XXX    XXX      X     X XX   XXX XX XXX  \",\n            \"X X XXX X  X   XX  X X X    XX XXX  XXXX X   XXX  XX X  XX    X XXX  XXXXX X       XXXX   X    XX X X  XXX X       XXXXX  X XX X   XX\",\n            \"     X       XX X  X   XX XXX XX XXXXXXXXXXX XXXXX  XX XX X   X  X   X   X      XXX X XXXXXXX   XX X XX      XXXXX    X  XXXXXX  X X \",\n            \"  X XXX    X  XX X XX XXX X XX  XX  XXXX     X  XXX    X   X   X X  XXX XX  XXXX   X X  X   XXXXX X   X  X  X   XX      X X X XX XXXX\",\n            \"    XX        X X    XXXXXX XXX XX X   XX  XX  X X  XXX  XXX XX  X X   XX X  X XX     X   X XX X X XXX X X XX X  X   XX XX X XX X XX \",\n            \"     XX  XX   XXX  XX  X    X  XX X  XXX     XXX  X     X     XXXX XX X  X XX      X  X XX X X XXXX X  XXX X      XX X X  X X  X XXXX\",\n            \"  XXX  XX X X  X  X  XXXX  XXX XX XX XXXX    X XXX        X   X          XX X   XXXXX  X XXX    X  XX     X XXXXXX  X X XX XXXXX  XXX\",\n            \"XXX  XXXXX  XXX X  X    X X XXX   X X   XX      XXXX XX   XX    X  XXX X X XXX X   X X XXX X XX X X      XX  XX XXX  XX XX  X X  X XX\",\n            \"XX      XX XX X X XX XXXX   XXX   X  X XXX  X  X X   XXXX  X XXX  X  XXX   XX  XX   X X XXX X XX   XXXXX XX XX XXX XXXX X  X XX X X  \",\n            \" XXX XX  XXXXX    XX X X X  XXX XX  X  XX   X XX  X X  XXX    X  X X X X XX  X    X X XX XXX  XXX   X XXXXXXX X X XXXX XX   X  X XXXX\",\n            \"XXX X    X  X XXX  X X X   XXXX   X XXX X  X X XXX XX  X XX   XX XXX XX  X XX X X XXX     XXX  X X XXX       XXXXX  X   XXXXXX  X XX \",\n            \" X X  XX X XXX    X X   XX X XXX XX  XX XX X    XXXXX X X XX   X    XX XX X  XXX    X  XX    XXX XXXX    X   X    X XX XXX  X XXXX  X\",\n            \"  X X  XX XX  XXXX X X X   X  X    XX X  X  X  X X   X XXXXX XXXXX   XXXXXX  XX   X     X X XX   X XXXX  XX   XX XX  X  XXXX  X X XX \",\n            \"XX    XX X X  XXXX   X      X X XX XX  XX  X  XX  XX XXXXX    XX  XX  X    X  X X X  XX X  X   XXX  X XXXXXX    X  XXX XX X X  X XXXX\",\n            \"  X XX       XX X   XX X  X X X   XX  X X      XXX  X XXX X   X XX X X XXX    X X XXX  X XX     XX X      X  X X X  X X XXXXX X   X  \",\n            \"X   XXXXXX X   XX  XX  X X XXXXXX  X  XX X  XXX XXXXXXXXX XX     X  XX      XXXXXX X  X X  X  X X XXXXXXXXXX   XXXX  XX     XXXXXX X \",\n            \" X XX   XXXXXX XX X   XXX   X   X XX    XX     X X XX   X  X  XXXXX   XXXX XX   XXXXXXX X X XX    XXX   XX XX  X X X    X X X   X X  \",\n            \"  XXX X XX XX   XXXX   XXXXXX X XXXX  X X      X  X X X X X  X XXX X    X X X X X  X    X XX X XXX XX X XX X  X X XXXX X  XXX X XXX X\",\n            \"X XXX   XXX X   X X XXXX X XX   X  XXX XX  X   XXXXXX   X X  X X   X  XXXXXXX   XXXXXX  X XX   XXX XX   X X XX XXXX X   XXX X   X XX \",\n            \"XXX XXXXX X XXX       X  XXXXXXXXX XX  XXX         XXXXXXXXXXX XXX  X  XX   XXXXX XX XX X   XXX XXX XXXXXX  XX X  XXX    X  XXXXXX  X\",\n            \" X  X  XX   XXX    X XXX XX   X   XXXXXXXX   XXXXX X  X XX XX   X X    X     X X XXX X   XX X         X  X  X  X  X X X    X  X   X  \",\n            \"   X  XXXXXX  XX  XX  XXXXXX   XXXX        XXXXX   XXX XX  X X   X X X XX X     XXX  X X XXX   XX  XXXX XX X  X X XXX  X   X XXXXXXXX\",\n            \"XXX XX  XXXXXXXXXXX  XXXXX    X X  XX X     XX    XX XX   XXX   X  X   XX  X X XX XXXX    XX     X X  XXX X  XXX X   XX XXX X  X  XX \",\n            \"XXXX  XXX X X  XXX XX XXXX XXX XXX   XX  X XX XX    X XXXXXX   X X  X  X   XX  X   X   X      X X XXX   XX   XXX  X     X   X XXXX XX\",\n            \"   X X  XX    XXXXXXXXXX  XXX XX  XX  XXXX   XX      X XXX   X XXXX    X  X   XXX X X X   X XX X XX       X XXXX  X   X XX XX XXX X  \",\n            \"X X  XX X  X X  X  X  X    XXX  XXX X  X   X XX  X  X XX X XX  XX XX X   XXXXX  XX X   X X X   XXXX  XX XX XX   X  X   X   XXXX XXXXX\",\n            \"XX  XX     X  X  XXX XX XXXX X XX      X     X X XX  X X XX X   XXXX     X X X X XX      XXXX  XXX    X   X XX XXXX  XX XX X   X  X X\",\n            \"  X   XXX XXX  XXXX X XX         X X X   X X X X X X  XX  XX X   XX XXXX  X X  XX   XXXX X    XXXXX X X XX     X  XXX       X XXXX XX\",\n            \" X XXX XXX  XXX XXX XXXXX      XX XX    XX XX   XXX X X XXXXX  XXX     X  XXXXXX X X      X XX        X  XXXX      X  X XXXX X   X   \",\n            \" XXX XX X X X X   XXX X    XX   XXXX XX  XXX   XX XXX XXXX XXXX  XXX  XX X X XX X   X XX  XX   XXX X X  XX X  X X XXX  XX X  XX XXXXX\",\n            \"XXXX X    XXXXXX     XX XX X       XX   X     X  XX X XX     XX XX X  X X XX  XX  XXXX   XXXX   X     X        X XX XXX  X X   X   X \",\n            \"  X  XXXXX  XX  X   X XXXXXX X XXX   XX   X    X  X  X  XXXX      X X XXXX  XXXX XXX X X XX  XX XX XXXX XX    XX  X         X       X\",\n            \"   XX  XX X  XX   XXXXXXX XX X  X X XX  XXX    X   X   X  XX X  X XXX  X XXXXXX XXXXXXX    XXX        X  X  X  X   XX X XX XXXX  XX  \",\n            \"XXXXXXX X XX     X    XXX    X XXXXXX X  X X X  X XXX XXXXX   X XX  XXXXX XX  XX  XX   X X X X XXX X XX XX X  X   XXX  X  XXXXXXX   X\",\n            \"X  X X   XX XXX   XXXXX  X  X XX     XXXXXXX  X      XX XX   X  X X     X  X X  X   X X   X           X   X X  X XX  XX XXXXX  X    X\",\n            \"XXXXXXXXX XX X XX  X  XXX    XX  X XXXXXX X     X XX X X      X XXX   X XXX X   XXXX X X      XXXX XX X X X X X XXX    X X  XXX  XXXX\",\n            \" XX X  XX  X XX    X XXX X XXXXXX X XX X    X    X       XX  X XX    XX X  XXXXXXX X X    X X  X      X   XXX   XX    XX XXXXXX      \",\n            \"XXXXX X XX X      X X X    X  XXXXX XXX       XX  X  X    XX XX XXXX    XX X  XXX   X XX  XX  XXXX X X  XXXX  X X  XX  X  XX XXXX  XX\",\n            \"X  X     XXXXXXX XX XXXX X  X      XXX XX X XX XXX XXXXX    XXXX XX  XXX X X  X XX XX    XXX X X   XX     X X  X X  XXX  XX  X X   XX\",\n            \"  X XXXXXX X X X   X  XXXX XXXXXXX  X X XXXX XXXXXXXXXXXX X  X XXX XXX      XXXXXX XX  X   X XXX X XXXXXX   X X  XX    X XX XXXXX X  \",\n            \" X XX   XXXX XXXX X  XXXX   X   X XX X  XXXXX X  XXXX   X X XXXX   XX XX  X X   XXXX  X  X X X      X   XXXXX  X X XX XXX XXX   X  X \",\n            \"XX XX X X X X    XXX  XXXXXXX X XXX   X     XX   XXXX X X   X X   XXXX    XXX X X   XXXX     X XXX XX X XX X  X X  XX  X   XX X XX XX\",\n            \"   XX   XX X XX XX   XX X X X   X  XXX  X X XX X    X   X XX  XX  X X X  XX X   XX  XXX  X X X X   XX   X X    X XX  XX  X XX   X  XX\",\n            \"   XXXXXXX   X   X XXX  XXX XXXXXXX X  XXXXX XXX   XXXXXXX  X XX  XX    X  XXXXXX XX XXX  X  XX XX  XXXXX  XX X   X     X  XXXXXX XXX\",\n            \" X XXX XXXXXXXXXX XXXXXX   XXX X X XX XXX X X XX  XXXX X    X     X XXXX  XX  X  X X     X X X     XXX  XX  X  XX    X  XXX  XXXXX   \",\n            \" X XXXXXXXX X   X    X  X   XX X    XXX X XXXXX XXXXXXX      XXX  XX XX  X XX  XXX  X XX     XXXXX XX    XXX  X X  XXXXXX  XXXX   X X\",\n            \" X X X  XXXXXXX XX     XXXX X X     X    XX   X  XX XX   X XXX  X     XX     X  XX       X X    X   XX  X X    X X    X XXX  XX X   X\",\n            \"XX XX X   XXXX XX    XXX X X X X  X XXX X  XXX     XXX  X X  XXXX   X X XXX    XXX XXX X  X  XX  X XX X  X  X XX    X  XXX  X  X  XXX\",\n            \"X  X   XX X  XXX  X XX XX    X  X     X       X  X XXX     X X XX X   XX XXX  XXXXX  XX XX X       XXXX XXXXX  X  X   X X X X   XXXX \",\n            \"XX X  XXXXX X   X X  XX   XX   XXX XXX  XX X X XXX XX  X XXX     XX  XXXX XXXX XX  XX        X XXX X     XXX  X   XX X X  X X XX  XXX\",\n            \"X  XX   X X XXX XXX XX   X XX XX XX   X   XXX  XX  X  XXX  X X X  X XXX X    X   X XXXXXXX X   XX   XX  X X    XXX    X XXX  XX XX  X\",\n            \"X  X  X  X X X  XX XX    XXX X XX XX XXX   X XXXXX     XXXX  X X   X  XXX X   XXXXXXXXXX  X  XX  X XX     X X XXX XX X X   XX    XX X\",\n            \"X  XX  XXX XXXX  X X   X XX  XX X XXXXX X X X XXXX X  X   X X     XX  XX   X  X XX  X XXXX X X      X X XX XX  X XX XXXX X X  XX     \",\n            \" X XXXXX XXXXX  XX XXXXX X XX X   X X  X  X  X XX XX XX   XX  XXXX    XXXXXX  XX XXX XX        XXX    X  X X  XXX  XXX X   XX X X XXX\",\n            \"   X X  XX    XXXXX  XXX XXXXXXXXXX X  XX  X  X  XXX XXXXXX X XXXXX   X X XX  X  XX XX X X X   X    XX  X X      XX X X XXX  XX XX  X\",\n            \"XX X XX X X  X XXX X X XX   XX X X  XXX XX X X X   XXX   XXX XX X  XX XX X X X XXX     X  X   XXXX XXXX    XX X X X  X  X XX     XX X\",\n            \"   XXX X X XX  X X    XX XX X  X X XX X X X X   X X X X X  XXX X      XXXXX  X   X    XXXX X  XX    X   X X X     X   X X XXXX   XX  \",\n            \"X  XXXXX  X  XX  XXXXX X XXX X X XX XXX  X   X XX XX XXXX XXXX  XX   XX   X  XXX             XXXX  X  X  X X   XX XX XXX  XXX  XXXX X\",\n            \"X  X X     XXXX X  XXXXXXX X X XX   XX XXXXXX X     XXX  XX XX  X X   XXX XXXXX  XXX XXXXX X X XXX   X    X XXX  X       XX  XX XX  X\",\n            \"   XXXXXX X XX XXXX XXX X  X  XX X X  X  XX X XXX    X   XX     XXX   XX XXXXX X     XXX  X  XX X XXX XXX  X  X X  XXX  XXX  X X XXXX\",\n            \"X  X   XX  X X X XX  X  XXXXX  XX  XXXXX X X  X X   X X XX  X   X  X  X XX XX XXX  XX XXXX X X X X      X X X X    X X XX   XXXX X   \",\n            \"X  XX XX   X     XX  X  XXX X  X XX   X X X  XXX  X  XX XXXX X X        XX  X XX XX   X        XXX X  XX X X   XX  XXX X   XXX X X  X\",\n            \" X XX  XX  XXXX XXXX  XXX X XX   X XXX   XX X XX  XXXXX   XX  XX   XXXXX      XX X   XX  X X   XXX XXX    X XXX  XX   X XXX  XX X  XX\",\n            \" X XXXXXX   XX XX  X XXX XX XXXXXXX X  XXXX   X XX  XXXXX   X X X  XXXX  XX XXXXX XX      X   XXXXX XXXXX   X   X X X      XXXXXX XXX\",\n            \"X  XX   XX   XXX XXX XX  X  X   X  XXX   X X      X X   X X XX        XX  X X   X X XXXXXX X  X  X XX   XX  X X  XX   XX   XX   XX X \",\n            \"X  XX X XX XXX   XXX  X  X  X X XX   XXX X XXXXX XX X X X  X X  X     X  X  X X XX            X X X X X XX X  XXX  XXX  X X X X XX  X\",\n            \" XX X   X X  XX X  X X XXX  X   XX  X XX X XXXX X  XX   X   XX XXX  XX XX  XX   X XXX XX X X   XX   X   X X  XX  X  X X  XXXX   X  X \",\n            \" XXXXXXXX XX   XX XXX XX    XXXXX XX  XXX XX X  XXX XXXXXXXXXXX X        XX XXXXXXXXXXXX  X   XXX X XXXXXX  XX  X XX X  X   XXXXXXXX \",\n            \"X X  X X XXX   X XXX XXXXXX X X X XX   X XXXXX  XX X X X X XX X X XX  X X XXX  X XX XXXXXX  X      X X X XX X        XX     X    XX  \",\n            \"X  X  X  X   XX   XX X   XXXX  XXX   XX     XXXX   XX X   X   XXXXX      X   XXXXXXXX    X   X  X X XX   XXX  XXX XXXX  X XX  X XX XX\",\n            \" XXX    XXXX    X X X   XX X   X  X X  XXX XXXX  XX  XXX X  X  XX X          XXXXXX X XX XXX X  X  XX X     XX   XX X X  XXXX X      \",\n            \" XXX  X X XXXX XX XXX XX XX XXX  XXX    X X XX XX   XXXXX     X XXX     XXXX  X  XXXXXXX   X XXX  X XX X X XX   X XX X  X  XXXX XXXX \",\n            \"X      X X   X X  X X  XXXXX XXX X X XXX X XXXX  XXX X  XX XXX    X  XXX  XX X  X X  XXXX X X      X  XXXXX X     X X     X X  X X   \",\n            \"X  X XX     XX     X XX  X X  XX X   X XX     X    X  X XX XXXX   XX  X  X  XX X XX       XX    X   XX  XXXXX  XX XXXXX X  XXX XXXXXX\",\n            \" XXXX  X XXX X  X  XXX  X    X   XX X    XXX X X  X XXXXXX  XX X    X      X X  X  X  XX XX X  XXX XX  XX X  XX  X  X X  XXXXX XX    \",\n            \" X  X XXXX     XX X    X   X XX   XX  XXXXX XX   X  XXX XX  XXXX X X  X  XXXXXXX  XX XX X  XXXXXX X XXX  XXXXXX XXX XX  X  X XXXXXXX \",\n            \"X X  X XXX XX XX XX  X XX X X     XX  XX XXX XXXXXX  X XXXX  XXX   XXX  X XX   X    XXX X   XX     X XXXXXX  XX  X  XX   XX XX   X X \",\n            \"X     XX XXXXXX  XXX  X  X    X        XXXX XXX XXXXX XXXXX  XX X   X X  X          X     X    XXX  X X XXXX  XXX XXXX  X  X XXXXX XX\",\n            \" XX    X XX X   X  XX   XXXXX X  X  X  X  X  XXX XXXXXX XX  XXXXX X  XX X     XX  X X XX XXX   X X XX XXX X  XX  X    X  X X  X    XX\",\n            \" XX X XXXX  XXX    X XXX  X  X   X X XX XX X       XXXX XXX XX      XX XXXXXXXX XX XXXXX   X XXXXXX XX   XX XX  X X     X  X XX XXX  \",\n            \"X  X X X  X   X  XXXXX XXX  XX     X   X   XX X X    X XX X XX XX  XXXX X X X XXXX   XXXX XXX    XXX XXXXX X XX   XX  X     X  X X X \",\n            \"X     X XXX  X XXX XXXX  X X   XX     X X XX   XXX    XXXX X  X X     XXXX XXX XX X X  X  XX X XXXX X X  X X    X XXXXX X  X X    XXX\",\n            \" X XXX  X X  X XX X XX  X XXXX XXX  X   X X XX  XX X  X XXX X  X  XXX X    X X  X X   X  XX    X   XX XXX X XXXXXX       XXX X   X XX\",\n            \"XXX X XX  XX     X  XX X    X  X XXX XXXX XX X  XX   X  XX  XXX X  XX X  XX  XX   X  XXXXX   XX X X XX X XXX X X     X  X XX XXXXXX  \",\n            \"X X XX  X X  X X   X  XXX X      XXX   X X XXXXX  XX X XXX     XX      XX XX   XXX X XXXXX  X  X X X  XXXX X XXX         X  XX X  X  \",\n            \"XX XXXXX XX XX X   X X    X X  XX X  X   XXX        XXXXXX  XX XX    X   X  X X    XX     XX   XXXX X X XXXX  X X XX XX X XX X X  XXX\",\n            \"XX   X  XX X X          X  X X   X  X XXX X X     XX X  X   X X X X XXX     X XXX   X X XXX  X  XX XX X   X XXXXXX    X  XXXXX  X    \",\n            \"XXX X X X   XXXX   XXXXX  X XXXXX  X    XX X XXX XX XXXXXXX XX  X  X     XX XXXXX    XX X   XXXXX X XXXXXXX X X X X X   XX  XXXXXXXXX\",\n            \"        X X    XXXXXX  XXXXXX   XXXX  XX   XXX XX X X   XXXXX XXX  XXX  X XXX   X XXX   XXXXXXX  X  X   XX  X XX     X   XXXX   XX   \",\n            \"XXXXXXX  X XXX  XX   XX  X XX X XX   X X   X XXXX  XX X X XXXXX X    X X  X X X X XX X    XX    XX XX X XXXXX   X  XXXXX    X X XX XX\",\n            \"X     X  X X    XXX XX  XXX X   XXX X XXX   X  X    X   X XXX     XXXXX X   X   XXX XX   XXX    XX XX   X   XX X X  X X  XX X   X  X \",\n            \"X XXX X XX  XX   X XXX XX X XXXXXXX  XXXXXXX  X XXX XXXXXXXXXXX X   X XXX   XXXXX XXX      X  XXXXX XXXXXX   X X     X   X XXXXXX XXX\",\n            \"X XXX X XX  X   X   XX X X X  X    X X     XX  XX   X   XXX    XX   XXXXX  X    X   XXXXXX  XX   XX  X XXXXXX  X XXX X  X  X  X X   X\",\n            \"X XXX X X    XXX XXXX XXXX X XX   XX XX XX X XXX X  XXXXX X XXXX       XXX XX   X XX X X  XX XXXXXX XX XXXXX       XXX XX XX   X    X\",\n            \"X     X      X XX  X X      X X   X  X X    X   X X X  XX XXX  XX XX  XXXXX X XX  XXXXXX  XX   X X        X XXXXXX    X  XX XX   X  X\",\n            \"XXXXXXX  XX XX XXX  X  XXX  XX X  XX  X XX X  X  XX     XXX XXXXX   X    X  XXX XX  X      X XXXX X X X  X        X  X XX X     XXXXX\"\n        };\n        private static readonly string[] Modules119 = {\n            \"XXXXXXX XX  X X XXX XX X  XXX  XX    X X XXXXX X X X XX X XX  X XX  X  XXXXXXX XX  X   X   XX X X  XXX XX XXX X  X   X   XXXX XXXXXXX\",\n            \"X     X X X XX XX    XX XXX     XX   XX    X  X XX XX  XXXX XX X     XX   XX X XX  X   XXXXX XXX      X       X X  XXXXX  XXX X     X\",\n            \"X XXX X XX X   X  XXXXXX  XXX  XXX X  XXXXX  XX X X   X   XX XX XX X XX XX  X     XXX XXXXXX  X    X   X XXXXXXX XX X X     X X XXX X\",\n            \"X XXX X  X  X  X XXXX   XX XXX X XXX XX X XXXX X  X     X  X   XX X  X XX X  XX  XX     X  X X X  XX X     X     XXX   X  X   X XXX X\",\n            \"X XXX X  X  XXXX XXXXX X   XXXXXXX X X X       XX XXXXXXX  X   XX   XX XX  XXXXXXXXXXX X  XXX X X   XXXXX XXX  XX X XX XX X X X XXX X\",\n            \"X     X XXX X XXXXX    X   XX   X     X XXX  X XX  XX   X XXXXXX  XXXXX  X XX   XX   XXXXX X XXX    X   X       X    XXX  XX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX X X XX  X XX XXXXX   XXXXXX   XXXXX     XX   XX  X  X XX X    X  X   XX        XXX X  X  X   XXXXXXXX X  X   XXX X        \",\n            \"  XXX X X   XXX  XX XX  X X XXXXXX   X  XXXXX  X X XXXXXXX XXX   XX X  X X XXXXXXX X  X X  X X X  XXXXXXXX X  XX     X  XX XXXXX  XXX\",\n            \"XXXX X  XXX X XXXXX    X    X  XX XX XX XXXXX XXXXX  XX X    X X X X X XXX XX XXX XXX XXX XXXX  X XX  XX  XXX XXX X XX  XXXXXXX      \",\n            \"X X XXXX    XXX XX XXXX   XXX  X X     XXXXXXX XX  XXX X  X X X       X  X   X XX XXXX XX XX XXX   X     XX     X X  X X   X  XX  XXX\",\n            \"  XX    XXXX X  XX    XX X  X   X    X X   X  X  X    X  X  XXXX  XX  XX X    X XX  XXXXXXX      X XX  X  XXXXXX X  X X  XX XXX    XX\",\n            \"  X X XXXXX X XX    XXX  X XXX X X      XXX X X XXXX XX XX XX X  XX XX X X XX    XX  X XX    XXX  X  X     X    XXX  X X X XX XX XXX \",\n            \"X   XX X  X X X  X   XX X X       XX        X    X  X   X XX XXXXXXXXX X XX       X   XXX XXX   X   XX XX XXX   XX  XXX XXXX XX      \",\n            \" X   XXX XX XX X   XXXXXX XX   X  XX   XX X X  X  X X X XX X  X   X    XXXX  XXXX X   X XX X X X   X     XX     X    XXX  X   XX    X\",\n            \"XXXXXX X   X XXX X   XXXX   X  XXX X   XXXXXX   XXX    XXX X X     XX XXX         XX X  X XX X   X  X X    XXXXX X  X    XX  XX  X   \",\n            \"X  XXXX X   X XXXXX X X XXXX X  XX  XXXX XXXXXX XXX X    X  X       XXXX  X   X  X   XXXX  X XXX  X  XX  X X X X  X     XX XX XX XXXX\",\n            \"X    X XX   X X XXX     X   X   X XXX  X  XXX  XXXX XXXX  XXX  XXX   XX   XX   XX X XX  XXX XX  X XX  XXXXXXX XX    X  X   X XX  X   \",\n            \"      XXX   X XX XXXXX XX XXX  X  XX  XXX    X       X  XXXXXXX X    XX X  X         X X XXX X X X       X     XX X  XX       XX    X\",\n            \"XX XXX XX XXX XX       XX X X  XXXX      X  XX    XX  XX  X X   XXXXXX  X X    X XX X  X XX X      XX X    XXXXX XX X X XXX XXX      \",\n            \"X  XXXXXXXX XX  X   XX  X  X X XXX X XXX   X   X XXXX     XXX  XX  X XXX XX XX XX   X XX   XX XX  X  X  XX X X X XX     XX X  X XXX X\",\n            \"    X     XXX XXXX   X   X  X  X XXXXXXXX X X  XX   XXXXXXXXXX  XX  XX  X    X    XX XXXX X XX    X XXXXXX XX  X  X XX  XXX XXXX   X \",\n            \"XXX  XX XX X    XXXXXXXX    X  X   XX  X   X X X X   X XXX  XXXX XX  XX X  X XX X  XX XXX XX X XX  X X   X X  X X X  XXX      X  X XX\",\n            \"       XXXXXX  XX X  X XX X X  X XXXXXXXXXX  X X XX XXXX XX X X X   XX  X   XXXX XX XXX XXX    X X XX     X XX X X  X X XXX X X     X\",\n            \" XX   X X  X XX XXX X X X X  X XXX XX  X   X  XXX    X  XXX  XX XX   XX      XXXX  X  X    X  X X XX X  XX  XX X  X     X XXXXX XXX X\",\n            \"  X  X XXXX X  XX    X X  X X  X  XX  XXXX XXXXX X  XX XX XXXXX X  X X   XXXXXX   XXXX X XX XX   X  XXXXXXX X XXX   XX   X X  XX   X \",\n            \"X X X XX    X  XXX XXX  X   X  XX X XXXX XXX  XXXXX    XX  X   X  X XXX X    XX X  XXX X XXX XXXXX XX X  X X    X    X X   X X X X XX\",\n            \"X X XX X X X  X  XX  XXXX   X X X   XX XX X    XX   X X XXX XX  X X  X X XX XX X XX XX XXXX X  XXX XX     X XXXXXXX X    X XX   X   X\",\n            \"XX  XXXXXXXXX   XX  X  X X  XXXXXX X X X XXXXX X XX XXXXX X  XXX  X  XXX X  XXXXX   XXX X    XX  XX XXXXXX     X XX  X X    XXXXXXX X\",\n            \"XX  X   X XX   X  X  XX  XXXX   X XXX XXXXX  XXX XXXX   XXX  X    X XX X X  X   X XX  X XX XX    X XX   X X  XX   X  X XX  XX   XX X \",\n            \"X XXX X XX  XX  X XXX  X XX X X XX   X X X X   X  XXX X X X X XX XXXXXX XX XX X X  XXXXX   X XXXX  XX X XX    X X X  X X  X X X X  XX\",\n            \"    X   X X  X   XX XX XX   X   X    XXXX    XX XX XX   XX  X XXXXXXXX X  XXX   XXXXX  X XXX    XX XX   X   XX X X    X  XX X   X  XX\",\n            \"  X XXXXX X X XXXXXXX XX X  XXXXX  X X X    XXX XXX XXXXX        X X XX  X  XXXXX  XXXX     XXXXX XXXXXXXX  X  X  XXXX X    XXXXXXX X\",\n            \" XXX X XXXX  XXXX X     X X X X XXXX   XX     XX X X X   X X XX  X  XX XX XXX  XX XX X X    XX   X   X    X  XXX  XX X  X  X XX X    \",\n            \"  XX  XX   XX X  X   XX XX  X XXXXXXX XX XXX  XX  XXXXX X     XXXXXX XXX  XXXX      X     X  X  X     XXXXXX  X X XXXX XX X X  X    X\",\n            \"XX XXX  XX X  X  X     X XXXX X XXXXXXXXXXXXXX XXX            XX  X XX XXX   X  XXX     XXXXX      X XX     XXXXXX    X XXXXX X X   X\",\n            \" XXX  XX   X  XX    X XXXX  XX X    XX X   XX   XXX XX XX  X    X    XXXX  XXX X       X     XXX  XX     X  XX  XX X   X X  X     XXX\",\n            \"XXXX    X X     X X  X  XX  X  X     X XXX XX XX X X XXXX  X XX  X   X    XX  XXX X    XX X XXX    XXX      X     X XX   XXX XX XXX  \",\n            \"X X XXX X  X   XX  X X X    XX XXX  XXXX X   XXX  XX X  XX    X XXX  XXXXX X       XXXX   X    XX X X  XXX X       XXXXX  X XX X   XX\",\n            \"     X       XX X  X   XX XXX XX XXXXXXXXXXX XXXXX  XX XX X   X  X   X   X      XXX X XXXXXXX   XX X XX      XXXXX    X  XXXXXX  X X \",\n            \"  X XXX    X  XX X XX XXX X XX  XX  XXXX     X  XXX    X   X   X X  XXX XX  XXXX   X X  X   XXXXX X   X  X  X   XX      X X X XX XXXX\",\n            \"    XX        X X    XXXXXX XXX XX X   XX  XX  X X  XXX  XXX XX  X X   XX X  X XX     X   X XX X X XXX X X XX X  X   XX XX X XX X XX \",\n            \"     XX  XX   XXX  XX  X    X  XX X  XXX     XXX  X     X     XXXX XX X  X XX      X  X XX X X XXXX X  XXX X      XX X X  X X  X XXXX\",\n            \"  XXX  XX X X  X  X  XXXX  XXX XX XX XXXX    X XXX        X   X          XX X   XXXXX  X XXX    X  XX     X XXXXXX  X X XX XXXXX  XXX\",\n            \"XXX  XXXXX  XXX X  X    X X XXX   X X   XX      XXXX XX   XX    X  XXX X X XXX X   X X XXX X XX X X      XX  XX XXX  XX XX  X X  X XX\",\n            \"XX      XX XX X X XX XXXX   XXX   X  X XXX  X  X X   XXXX  X XXX  X  XXX   XX  XX   X X XXX X XX   XXXXX XX XX XXX XXXX X  X XX X X  \",\n            \" XXX XX  XXXXX    XX X X X  XXX XX  X  XX   X XX  X X  XXX    X  X X X X XX  X    X X XX XXX  XXX   X XXXXXXX X X XXXX XX   X  X XXXX\",\n            \"XXX X    X  X XXX  X X X   XXXX   X XXX X  X X XXX XX  X XX   XX XXX XX  X XX X X XXX     XXX  X X XXX       XXXXX  X   XXXXXX  X XX \",\n            \" X X  XX X XXX    X X   XX X XXX XX  XX XX X    XXXXX X X XX   X    XX XX X  XXX    X  XX    XXX XXXX    X   X    X XX XXX  X XXXX  X\",\n            \"  X X  XX XX  XXXX X X X   X  X    XX X  X  X  X X   X XXXXX XXXXX   XXXXXX  XX   X     X X XX   X XXXX  XX   XX XX  X  XXXX  X X XX \",\n            \"XX    XX X X  XXXX   X      X X XX XX  XX  X  XX  XX XXXXX    XX  XX  X    X  X X X  XX X  X   XXX  X XXXXXX    X  XXX XX X X  X XXXX\",\n            \"  X XX       XX X   XX X  X X X   XX  X X      XXX  X XXX X   X XX X X XXX    X X XXX  X XX     XX X      X  X X X  X X XXXXX X   X  \",\n            \"X   XXXXXX X   XX  XX  X X XXXXXX  X  XX X  XXX XXXXXXXXX XX     X  XX      XXXXXX X  X X  X  X X XXXXXXXXXX   XXXX  XX     XXXXXX X \",\n            \" X XX   XXXXXX XX X   XXX   X   X XX    XX     X X XX   X  X  XXXXX   XXXX XX   XXXXXXX X X XX    XXX   XX XX  X X X    X X X   X X  \",\n            \"  XXX X XX XX   XXXX   XXXXXX X XXXX  X X      X  X X X X X  X XXX X    X X X X X  X    X XX X XXX XX X XX X  X X XXXX X  XXX X XXX X\",\n            \"X XXX   XXX X   X X XXXX X XX   X  XXX XX  X   XXXXXX   X X  X X   X  XXXXXXX   XXXXXX  X XX   XXX XX   X X XX XXXX X   XXX X   X XX \",\n            \"XXX XXXXX X XXX       X  XXXXXXXXX XX  XXX         XXXXXXXXXXX XXX  X  XX   XXXXX XX XX X   XXX XXX XXXXXX  XX X  XXX    X  XXXXXX  X\",\n            \" X  X  XX   XXX    X XXX XX   X   XXXXXXXX   XXXXX X  X XX XX   X X    X     X X XXX X   XX X         X  X  X  X  X X X    X  X   X  \",\n            \"   X  XXXXXX  XX  XX  XXXXXX   XXXX        XXXXX   XXX XX  X X   X X X XX X     XXX  X X XXX   XX  XXXX XX X  X X XXX  X   X XXXXXXXX\",\n            \"XXX XX  XXXXXXXXXXX  XXXXX    X X  XX X     XX    XX XX   XXX   X  X   XX  X X XX XXXX    XX     X X  XXX X  XXX X   XX XXX X  X  XX \",\n            \"XXXX  XXX X X  XXX XX XXXX XXX XXX   XX  X XX XX    X XXXXXX   X X  X  X   XX  X   X   X      X X XXX   XX   XXX  X     X   X XXXX XX\",\n            \"   X X  XX    XXXXXXXXXX  XXX XX  XX  XXXX   XX      X XXX   X XXXX    X  X   XXX X X X   X XX X XX       X XXXX  X   X XX XX XXX X  \",\n            \"X X  XX X  X X  X  X  X    XXX  XXX X  X   X XX  X  X XX X XX  XX XX X   XXXXX  XX X   X X X   XXXX  XX XX XX   X  X   X   XXXX XXXXX\",\n            \"XX  XX     X  X  XXX XX XXXX X XX      X     X X XX  X X XX X   XXXX     X X X X XX      XXXX  XXX    X   X XX XXXX  XX XX X   X  X X\",\n            \"  X   XXX XXX  XXXX X XX         X X X   X X X X X X  XX  XX X   XX XXXX  X X  XX   XXXX X    XXXXX X X XX     X  XXX       X XXXX XX\",\n            \" X XXX XXX  XXX XXX XXXXX      XX XX    XX XX   XXX X X XXXXX  XXX     X  XXXXXX X X      X XX        X  XXXX      X  X XXXX X   X   \",\n            \" XXX XX X X X X   XXX X    XX   XXXX XX  XXX   XX XXX XXXX XXXX  XXX  XX X X XX X   X XX  XX   XXX X X  XX X  X X XXX  XX X  XX XXXXX\",\n            \"XXXX X    XXXXXX     XX XX X       XX   X     X  XX X XX     XX XX X  X X XX  XX  XXXX   XXXX   X     X        X XX XXX  X X   X   X \",\n            \"  X  XXXXX  XX  X   X XXXXXX X XXX   XX   X    X  X  X  XXXX      X X XXXX  XXXX XXX X X XX  XX XX XXXX XX    XX  X         X       X\",\n            \"   XX  XX X  XX   XXXXXXX XX X  X X XX  XXX    X   X   X  XX X  X XXX  X XXXXXX XXXXXXX    XXX        X  X  X  X   XX X XX XXXX  XX  \",\n            \"XXXXXXX X XX     X    XXX    X XXXXXX X  X X X  X XXX XXXXX   X XX  XXXXX XX  XX  XX   X X X X XXX X XX XX X  X   XXX  X  XXXXXXX   X\",\n            \"X  X X   XX XXX   XXXXX  X  X XX     XXXXXXX  X      XX XX   X  X X     X  X X  X   X X   X           X   X X  X XX  XX XXXXX  X    X\",\n            \"XXXXXXXXX XX X XX  X  XXX    XX  X XXXXXX X     X XX X X      X XXX   X XXX X   XXXX X X      XXXX XX X X X X X XXX    X X  XXX  XXXX\",\n            \" XX X  XX  X XX    X XXX X XXXXXX X XX X    X    X       XX  X XX    XX X  XXXXXXX X X    X X  X      X   XXX   XX    XX XXXXXX      \",\n            \"XXXXX X XX X      X X X    X  XXXXX XXX       XX  X  X    XX XX XXXX    XX X  XXX   X XX  XX  XXXX X X  XXXX  X X  XX  X  XX XXXX  XX\",\n            \"X  X     XXXXXXX XX XXXX X  X      XXX XX X XX XXX XXXXX    XXXX XX  XXX X X  X XX XX    XXX X X   XX     X X  X X  XXX  XX  X X   XX\",\n            \"  X XXXXXX X X X   X  XXXX XXXXXXX  X X XXXX XXXXXXXXXXXX X  X XXX XXX      XXXXXX XX  X   X XXX X XXXXXX   X X  XX    X XX XXXXX X  \",\n            \" X XX   XXXX XXXX X  XXXX   X   X XX X  XXXXX X  XXXX   X X XXXX   XX XX  X X   XXXX  X  X X X      X   XXXXX  X X XX XXX XXX   X  X \",\n            \"XX XX X X X X    XXX  XXXXXXX X XXX   X     XX   XXXX X X   X X   XXXX    XXX X X   XXXX     X XXX XX X XX X  X X  XX  X   XX X XX XX\",\n            \"   XX   XX X XX XX   XX X X X   X  XXX  X X XX X    X   X XX  XX  X X X  XX X   XX  XXX  X X X X   XX   X X    X XX  XX  X XX   X  XX\",\n            \"   XXXXXXX   X   X XXX  XXX XXXXXXX X  XXXXX XXX   XXXXXXX  X XX  XX    X  XXXXXX XX XXX  X  XX XX  XXXXX  XX X   X     X  XXXXXX XXX\",\n            \" X XXX XXXXXXXXXX XXXXXX   XXX X X XX XXX X X XX  XXXX X    X     X XXXX  XX  X  X X     X X X     XXX  XX  X  XX    X  XXX  XXXXX   \",\n            \" X XXXXXXXX X   X    X  X   XX X    XXX X XXXXX XXXXXXX      XXX  XX XX  X XX  XXX  X XX     XXXXX XX    XXX  X X  XXXXXX  XXXX   X X\",\n            \" X X X  XXXXXXX XX     XXXX X X     X    XX   X  XX XX   X XXX  X     XX     X  XX       X X    X   XX  X X    X X    X XXX  XX X   X\",\n            \"XX XX X   XXXX XX    XXX X X X X  X XXX X  XXX     XXX  X X  XXXX   X X XXX    XXX XXX X  X  XX  X XX X  X  X XX    X  XXX  X  X  XXX\",\n            \"X  X   XX X  XXX  X XX XX    X  X     X       X  X XXX     X X XX X   XX XXX  XXXXX  XX XX X       XXXX XXXXX  X  X   X X X X   XXXX \",\n            \"XX X  XXXXX X   X X  XX   XX   XXX XXX  XX X X XXX XX  X XXX     XX  XXXX XXXX XX  XX        X XXX X     XXX  X   XX X X  X X XX  XXX\",\n            \"X  XX   X X XXX XXX XX   X XX XX XX   X   XXX  XX  X  XXX  X X X  X XXX X    X   X XXXXXXX X   XX   XX  X X    XXX    X XXX  XX XX  X\",\n            \"X  X  X  X X X  XX XX    XXX X XX XX XXX   X XXXXX     XXXX  X X   X  XXX X   XXXXXXXXXX  X  XX  X XX     X X XXX XX X X   XX    XX X\",\n            \"X  XX  XXX XXXX  X X   X XX  XX X XXXXX X X X XXXX X  X   X X     XX  XX   X  X XX  X XXXX X X      X X XX XX  X XX XXXX X X  XX     \",\n            \" X XXXXX XXXXX  XX XXXXX X XX X   X X  X  X  X XX XX XX   XX  XXXX    XXXXXX  XX XXX XX        XXX    X  X X  XXX  XXX X   XX X X XXX\",\n            \"   X X  XX    XXXXX  XXX XXXXXXXXXX X  XX  X  X  XXX XXXXXX X XXXXX   X X XX  X  XX XX X X X   X    XX  X X      XX X X XXX  XX XX  X\",\n            \"XX X XX X X  X XXX X X XX   XX X X  XXX XX X X X   XXX   XXX XX X  XX XX X X X XXX     X  X   XXXX XXXX    XX X X X  X  X XX     XX X\",\n            \"   XXX X X XX  X X    XX XX X  X X XX X X X X   X X X X X  XXX X      XXXXX  X   X    XXXX X  XX    X   X X X     X   X X XXXX   XX  \",\n            \"X  XXXXX  X  XX  XXXXX X XXX X X XX XXX  X   X XX XX XXXX XXXX  XX   XX   X  XXX             XXXX  X  X  X X   XX XX XXX  XXX  XXXX X\",\n            \"X  X X     XXXX X  XXXXXXX X X XX   XX XXXXXX X     XXX  XX XX  X X   XXX XXXXX  XXX XXXXX X X XXX   X    X XXX  X       XX  XX XX  X\",\n            \"   XXXXXX X XX XXXX XXX X  X  XX X X  X  XX X XXX    X   XX     XXX   XX XXXXX X     XXX  X  XX X XXX XXX  X  X X  XXX  XXX  X X XXXX\",\n            \"X  X   XX  X X X XX  X  XXXXX  XX  XXXXX X X  X X   X X XX  X   X  X  X XX XX XXX  XX XXXX X X X X      X X X X    X X XX   XXXX X   \",\n            \"X  XX XX   X     XX  X  XXX X  X XX   X X X  XXX  X  XX XXXX X X        XX  X XX XX   X        XXX X  XX X X   XX  XXX X   XXX X X  X\",\n            \" X XX  XX  XXXX XXXX  XXX X XX   X XXX   XX X XX  XXXXX   XX  XX   XXXXX      XX X   XX  X X   XXX XXX    X XXX  XX   X XXX  XX X  XX\",\n            \" X XXXXXX   XX XX  X XXX XX XXXXXXX X  XXXX   X XX  XXXXX   X X X  XXXX  XX XXXXX XX      X   XXXXX XXXXX   X   X X X      XXXXXX XXX\",\n            \"X  XX   XX   XXX XXX XX  X  X   X  XXX   X X      X X   X X XX        XX  X X   X X XXXXXX X  X  X XX   XX  X X  XX   XX   XX   XX X \",\n            \"X  XX X XX XXX   XXX  X  X  X X XX   XXX X XXXXX XX X X X  X X  X     X  X  X X XX            X X X X X XX X  XXX  XXX  X X X X XX  X\",\n            \" XX X   X X  XX X  X X XXX  X   XX  X XX X XXXX X  XX   X   XX XXX  XX XX  XX   X XXX XX X X   XX   X   X X  XX  X  X X  XXXX   X  X \",\n            \" XXXXXXXX XX   XX XXX XX    XXXXX XX  XXX XX X  XXX XXXXXXXXXXX X        XX XXXXXXXXXXXX  X   XXX X XXXXXX  XX  X XX X  X   XXXXXXXX \",\n            \"X X  X X XXX   X XXX XXXXXX X X X XX   X XXXXX  XX X X X X XX X X XX  X X XXX  X XX XXXXXX  X      X X X XX X        XX     X    XX  \",\n            \"X  X  X  X   XX   XX X   XXXX  XXX   XX     XXXX   XX X   X   XXXXX      X   XXXXXXXX    X   X  X X XX   XXX  XXX XXXX  X XX  X XX XX\",\n            \" XXX    XXXX    X X X   XX X   X  X X  XXX XXXX  XX  XXX X  X  XX X          XXXXXX X XX XXX X  X  XX X     XX   XX X X  XXXX X      \",\n            \" XXX  X X XXXX XX XXX XX XX XXX  XXX    X X XX XX   XXXXX     X XXX     XXXX  X  XXXXXXX   X XXX  X XX X X XX   X XX X  X  XXXX XXXX \",\n            \"X      X X   X X  X X  XXXXX XXX X X XXX X XXXX  XXX X  XX XXX    X  XXX  XX X  X X  XXXX X X      X  XXXXX X     X X     X X  X X   \",\n            \"X  X XX     XX     X XX  X X  XX X   X XX     X    X  X XX XXXX   XX  X  X  XX X XX       XX    X   XX  XXXXX  XX XXXXX X  XXX XXXXXX\",\n            \" XXXX  X XXX X  X  XXX  X    X   XX X    XXX X X  X XXXXXX  XX X    X      X X  X  X  XX XX X  XXX XX  XX X  XX  X  X X  XXXXX XX    \",\n            \" X  X XXXX     XX X    X   X XX   XX  XXXXX XX   X  XXX XX  XXXX X X  X  XXXXXXX  XX XX X  XXXXXX X XXX  XXXXXX XXX XX  X  X XXXXXXX \",\n            \"X X  X XXX XX XX XX  X XX X X     XX  XX XXX XXXXXX  X XXXX  XXX   XXX  X XX   X    XXX X   XX     X XXXXXX  XX  X  XX   XX XX   X X \",\n            \"X     XX XXXXXX  XXX  X  X    X        XXXX XXX XXXXX XXXXX  XX X   X X  X          X     X    XXX  X X XXXX  XXX XXXX  X  X XXXXX XX\",\n            \" XX    X XX X   X  XX   XXXXX X  X  X  X  X  XXX XXXXXX XX  XXXXX X  XX X     XX  X X XX XXX   X X XX XXX X  XX  X    X  X X  X    XX\",\n            \" XX X XXXX  XXX    X XXX  X  X   X X XX XX X       XXXX XXX XX      XX XXXXXXXX XX XXXXX   X XXXXXX XX   XX XX  X X     X  X XX XXX  \",\n            \"X  X X X  X   X  XXXXX XXX  XX     X   X   XX X X    X XX X XX XX  XXXX X X X XXXX   XXXX XXX    XXX XXXXX X XX   XX  X     X  X X X \",\n            \"X     X XXX  X XXX XXXX  X X   XX     X X XX   XXX    XXXX X  X X     XXXX XXX XX X X  X  XX X XXXX X X  X X    X XXXXX X  X X    XXX\",\n            \" X XXX  X X  X XX X XX  X XXXX XXX  X   X X XX  XX X  X XXX X  X  XXX X    X X  X X   X  XX    X   XX XXX X XXXXXX       XXX X   X XX\",\n            \"XXX X XX  XX     X  XX X    X  X XXX XXXX XX X  XX   X  XX  XXX X  XX X  XX  XX   X  XXXXX   XX X X XX X XXX X X     X  X XX XXXXXX  \",\n            \"X X XX  X X  X X   X  XXX X      XXX   X X XXXXX  XX X XXX     XX      XX XX   XXX X XXXXX  X  X X X  XXXX X XXX         X  XX X  X  \",\n            \"XX XXXXX XX XX X   X X    X X  XX X  X   XXX        XXXXXX  XX XX    X   X  X X    XX     XX   XXXX X X XXXX  X X XX XX X XX X X  XXX\",\n            \"XX   X  XX X X          X  X X   X  X XXX X X     XX X  X   X X X X XXX     X XXX   X X XXX  X  XX XX X   X XXXXXX    X  XXXXX  X    \",\n            \"XXX X X X   XXXX   XXXXX  X XXXXX  X    XX X XXX XX XXXXXXX XX  X  X     XX XXXXX    XX X   XXXXX X XXXXXXX X X X X X   XX  XXXXXXXXX\",\n            \"        X X    XXXXXX  XXXXXX   XXXX  XX   XXX XX X X   XXXXX XXX  XXX  X XXX   X XXX   XXXXXXX  X  X   XX  X XX     X   XXXX   XX   \",\n            \"XXXXXXX  X XXX  XX   XX  X XX X XX   X X   X XXXX  XX X X XXXXX X    X X  X X X X XX X    XX    XX XX X XXXXX   X  XXXXX    X X XX XX\",\n            \"X     X  X X    XXX XX  XXX X   XXX X XXX   X  X    X   X XXX     XXXXX X   X   XXX XX   XXX    XX XX   X   XX X X  X X  XX X   X  X \",\n            \"X XXX X XX  XX   X XXX XX X XXXXXXX  XXXXXXX  X XXX XXXXXXXXXXX X   X XXX   XXXXX XXX      X  XXXXX XXXXXX   X X     X   X XXXXXX XXX\",\n            \"X XXX X XX  X   X   XX X X X  X    X X     XX  XX   X   XXX    XX   XXXXX  X    X   XXXXXX  XX   XX  X XXXXXX  X XXX X  X  X  X X   X\",\n            \"X XXX X X    XXX XXXX XXXX X XX   XX XX XX X XXX X  XXXXX X XXXX       XXX XX   X XX X X  XX XXXXXX XX XXXXX       XXX XX XX   X    X\",\n            \"X     X      X XX  X X      X X   X  X X    X   X X X  XX XXX  XX XX  XXXXX X XX  XXXXXX  XX   X X        X XXXXXX    X  XX XX   X  X\",\n            \"XXXXXXX  XX XX XXX  X  XXX  XX X  XX  X XX X  X  XX     XXX XXXXX   X    X  XXX XX  X      X XXXX X X X  X        X  X XX X     XXXXX\"\n        };\n        private static readonly string[] Modules120 = {\n            \"XXXXXXX XXXX  X   XXXXXXX\",\n            \"X     X XX XXXX X X     X\",\n            \"X XXX X X    XX X X XXX X\",\n            \"X XXX X   X  XXXX X XXX X\",\n            \"X XXX X X  X XX X X XXX X\",\n            \"X     X      XX   X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"         XXX XX X        \",\n            \"X  XXXXXXXX   XX X  X XXX\",\n            \"  X  X XXXXXXXXX X XXXXX \",\n            \" XXXX X X X X XXX XX X  X\",\n            \"XX  X     XX  X X  X XXXX\",\n            \"XX   XXXXX        X     X\",\n            \"XX X X X  X X XXXX  X  X \",\n            \"XXX  XX  XX   XX XX XXXXX\",\n            \"X  X X XXXX X   XX X XX X\",\n            \"X XX  XXX  XXXXXXXXXX XX \",\n            \"        X  X X  X   X XX \",\n            \"XXXXXXX XXX X   X X X   X\",\n            \"X     X XX X X XX   X    \",\n            \"X XXX X X  X X XXXXXX  XX\",\n            \"X XXX X X X XXX   X    XX\",\n            \"X XXX X  X X X  XX  XXXXX\",\n            \"X     X    XXX     XX XXX\",\n            \"XXXXXXX XX XXX  XX   X  X\"\n        };\n        private static readonly string[] Modules121 = {\n            \"XXXXXXX X  XX  XX  XX  XX  XX XXXXXXX\",\n            \"X     X XXX XXX XXX XXX XXX X X     X\",\n            \"X XXX X   XXX XXX XXX XXX XXX X XXX X\",\n            \"X XXX X   X   X   X   X   X   X XXX X\",\n            \"X XXX X XXXX XXX XXX XXX XXX  X XXX X\",\n            \"X     X X  X   X   X   X   X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X XXX XXX XXX XXX XXX        \",\n            \"XXX  XX XXX  XX  XX  XX  XX  XXXX  XX\",\n            \" X X   XX X  XX  XX  XX  XX   X   XXX\",\n            \"X XX  X X XX   X   X   X   X    XX XX\",\n            \"X  XX  X X   X   X   X   X    X X  XX\",\n            \" X X  X X XXXX XXX XXX XXX XX XX X XX\",\n            \"  XXXX  X   X   X   X   X   X XX XXXX\",\n            \" XX  XXX    XXX XXX XXX XXX XX      X\",\n            \"   XXX  XXXXX XXX XXX XXX XXXX  X    \",\n            \"  X   XXX X  XX  XX  XX  XX   XX X XX\",\n            \"     X XXX   XX  XX  XX  XX   XX XXXX\",\n            \"XXXXX X XXXX   X   X   X   X    X   X\",\n            \"   X X   X   X   X   X   X   XXX X   \",\n            \" XXX  X    XXX XXX XXX XXX XXXX     X\",\n            \"  XXXX X    X   X   X   X   X XX X XX\",\n            \" XXXX XX X  XXX XXX XXX XXX X   X   X\",\n            \" XX XX XXX XX XXX XXX XXX XXXXX XX   \",\n            \"X   X XX     XX  XX  XX  XX  XX     X\",\n            \"        X X  XX  XX  XX  XX    X X XX\",\n            \"XX XXXXXXX X   X   X   X   X    X   X\",\n            \"    X  X X   X   X   X   X    X  X   \",\n            \"XXXXX XX   XXX XXX XXX XXX XXXXXX  X \",\n            \"        XXX X   X   X   X   X   XX  X\",\n            \"XXXXXXX   X XXX XXX XXX XXXXX X X   X\",\n            \"X     X XXXXX XXX XXX XXX XXX   X   X\",\n            \"X XXX X   X  XX  XX  XX  XX XXXXXX  X\",\n            \"X XXX X  X   XX  XX  XX  XX XXX XXXX \",\n            \"X XXX X X  X   X   X   X     XX XX XX\",\n            \"X     X X X  X   X   X   X X    XX   \",\n            \"XXXXXXX X  XXX XXX XXX XXX XX X  X  X\"\n        };\n        private static readonly string[] Modules122 = {\n            \"XXXXXXX X X XXXX X    X XXXX  XXXXXXX\",\n            \"X     X  XXXXX  X X  XXXXX  X X     X\",\n            \"X XXX X XXX     XX X XX     X X XXX X\",\n            \"X XXX X XXX X XX     XX X XX  X XXX X\",\n            \"X XXX X X  XX X XX     XX X X X XXX X\",\n            \"X     X   XX X XX     XX X XX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"          X X  XXXXX  X X  XX        \",\n            \"XXXX  X X XXXX X    X XXXX X X  XXX X\",\n            \"XX     XXXX XXXX X    X XXXX     XXX \",\n            \" XX X XXXX XXX  X X  XXXXX  X XXX XX \",\n            \"XX X     XX     XX X XX     X XXX XXX\",\n            \"  XXXXXX    X XX     XX X XX XX XXX X\",\n            \"   XX      XX X XX     XX X XXXXXXX X\",\n            \"XX X  XXXX X X XX     XX X XX X XX X \",\n            \"X   XX  X XX  X X  XXXXX  X XXX XX  X\",\n            \"XXXXX X XX  X XXXX X    X XXX     XX \",\n            \" X  XX  XXX   X XXXX X    X X X  X XX\",\n            \"X  X XXX X   XXXXX  X X  XXXXX X  XXX\",\n            \"  XX    XX X XX     XX X XX   XXXX X \",\n            \"XX   XX XX   XX X XX     XX X   XX X \",\n            \"X X XX X X     XX X XX     XX  X   X \",\n            \"X X   X   X   XX X XX     XX  XXXXX  \",\n            \"  X  X  XXXXXXXX  X X  XXXXX XXXXXX  \",\n            \"XXX  XX X XX    X XXXX X    X XXX XXX\",\n            \"  X  X    XX X    X XXXX X   X XXX  X\",\n            \" XX X XX    X X  XXXXX  X X  XX  X X \",\n            \"X  XX  X    XX X XX     XX X        X\",\n            \"  X   X  XXX     XX X XX    XXXXXXXXX\",\n            \"        XX  XX     XX X XX  X   XXX X\",\n            \"XXXXXXX    XX     XX X XX  XX X X XXX\",\n            \"X     X  XX X  XXXXX  X X  XX   X  XX\",\n            \"X XXX X  XXXXX X    X XXXX XXXXXX  X \",\n            \"X XXX X X   XXXX X    X XXXXXX  X XXX\",\n            \"X XXX X XXXXXX  X X  XXXXX XXX XX XX \",\n            \"X     X X       XX X XX    XX  XXXX  \",\n            \"XXXXXXX X X X XX     XX X XX XXXXXXXX\"\n        };\n        private static readonly string[] Modules123 = {\n            \"XXXXXXX XXXX  X   XXXXXXX\",\n            \"X     X XX XXXX X X     X\",\n            \"X XXX X X    XX X X XXX X\",\n            \"X XXX X   X  XXXX X XXX X\",\n            \"X XXX X X  X XX X X XXX X\",\n            \"X     X      XX   X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"         XXX XX X        \",\n            \"X  XXXXXXXX   XX X  X XXX\",\n            \"  X  X XXXXXXXXX X XXXXX \",\n            \" XXXX X X X X XXX XX X  X\",\n            \"XX  X     XX  X X  X XXXX\",\n            \"XX   XXXXX        X     X\",\n            \"XX X X X  X X XXXX  X  X \",\n            \"XXX  XX  XX   XX XX XXXXX\",\n            \"X  X X XXXX X   XX X XX X\",\n            \"X XX  XXX  XXXXXXXXXX XX \",\n            \"        X  X X  X   X XX \",\n            \"XXXXXXX XXX X   X X X   X\",\n            \"X     X XX X X XX   X    \",\n            \"X XXX X X  X X XXXXXX  XX\",\n            \"X XXX X X X XXX   X    XX\",\n            \"X XXX X  X X X  XX  XXXXX\",\n            \"X     X    XXX     XX XXX\",\n            \"XXXXXXX XX XXX  XX   X  X\"\n        };\n        private static readonly string[] Modules124 = {\n            \"XXXXXXX X     X XX XX XX X XX XXXXXXX\",\n            \"X     X X X X  XX XX XXXXX  X X     X\",\n            \"X XXX X X  XXXX X  X  XX XXXX X XXX X\",\n            \"X XXX X  XX X XX  X X  X X    X XXX X\",\n            \"X XXX X X XX  XXX    X XXXX X X XXX X\",\n            \"X     X  XXXXXX X  X  XX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"            X    XX   X X X          \",\n            \"X  XXXXXX  XX        XX  XX XX  X XXX\",\n            \"  X XX  X    X  XXX     XXX   XX X X \",\n            \"     XX   XXX  XX  XXX X XX   X  XX X\",\n            \"    X  XXX      X XXX  XX XX   XXX XX\",\n            \" XX   XX   X   XXX   XXXX     X  XX X\",\n            \"     X  XXX X X X XXXXX  XXXXX  XX XX\",\n            \"XXX  XX XX  XX  X XXX  XXX X  X XXX X\",\n            \"X XX X  XXXX XXX    XXXX    XXXX XXXX\",\n            \"X X   XX     XX  XX  XX X XXXXXXX XXX\",\n            \" X   X XXXX      X   XXX XX X X   X  \",\n            \" X X XXX XXX    XXXX    XXXX  X X X X\",\n            \"X   XX  XX    XXX  XXX X X   X XX   X\",\n            \"   XXXX      X    XX X XX  XXXXXX X  \",\n            \"XX XX  X XX X X XX    X XXXX X  X X X\",\n            \"  X  XXXX XXXXXXX  XXX X X X   X X   \",\n            \"   XX  X X X    X XXX    X X X XXXXX \",\n            \"X X   XX    X XX X  XXX  X  X  XX    \",\n            \"XX  X  XXX  X X  XXX  X X X X X  XX  \",\n            \"XXX XXXX       X X   XX   X XXXXXX XX\",\n            \"X  X X   XX   X XXXX    X XX X X X   \",\n            \"X X  XXX XXX   X X X X XXX  XXXXXX  X\",\n            \"        XX    X  XX  X  X   X   X X X\",\n            \"XXXXXXX XX X XX XXXX   X XX X X X  XX\",\n            \"X     X X XXX  XX  XXX X X XX   X  XX\",\n            \"X XXX X XX XXX  X XXXX XXX XXXXXX   X\",\n            \"X XXX X XX          XXX  X    X   XXX\",\n            \"X XXX X   XX     XX   X X X XX  X  XX\",\n            \"X     X   XXXX X X   XX   XXXXX X XXX\",\n            \"XXXXXXX XX X XX  XXXXX  X  XX XX  X X\"\n        };\n        private static readonly string[] Modules125 = {\n            \"XXXXXXX X XX X            XX  XXXXXXX\",\n            \"X     X X XX X XXX   XX     X X     X\",\n            \"X XXX X  X X XXXX XX XXXXXX X X XXX X\",\n            \"X XXX X X   X   X X  XXX XXXX X XXX X\",\n            \"X XXX X  XXXX X X X    X XXXX X XXX X\",\n            \"X     X  XX   X XXX   X X X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X  X X     X  XX XX          \",\n            \"X XX XXX X X   X  X   X XXXXX X  X XX\",\n            \"   X X   XX  XXX XX XXX XX XX XXX XX \",\n            \"X  X XX  XXX    X XXX  XXXXX      X  \",\n            \"XX  XX  XX XXX  XX  X    XXX XX XX   \",\n            \"    XXX X X  XXX   XXX  XXX XXXXXX XX\",\n            \"XX     XXXXX XX XX  XXXXX XXX XXXX   \",\n            \" XXX XX X    X XX  XXX X X      X X  \",\n            \"X   XX     X X  X      X  XX XXXX  XX\",\n            \"  XX  XX X  XXXX X    X   X XX XXXXX \",\n            \"X       XXXXXX    XX XX X X XX X  XXX\",\n            \"  XXX X XX   XX   X X XXX  XXXXX   XX\",\n            \" X  X  XXX XXXXXXXX XX  X     X X  X \",\n            \"X   XXX  X  XX X   X   X    XX XXXX X\",\n            \"XXX    XX   X  X X  XX  XX  XX   X  X\",\n            \"X XX XXXXXXX XX X XXX  XXX    XX    X\",\n            \"XX XXX   X  XX  XX  X  XX  X  X XXX X\",\n            \"XX  XXX X XXXX XX  X X X  X  X    XX \",\n            \"    XX  XX X XX       XX XX XX X XXXX\",\n            \" XXXXXXX X  X    XX   X X XXXX XX  X \",\n            \"X X XX  X      X XXXXXX X   XX XX X  \",\n            \"  XX XXX  XXX    XXX   X X XXXXXX    \",\n            \"        XX XXXX    X X X X  X   X XX \",\n            \"XXXXXXX XXX       X X X     X X X X X\",\n            \"X     X X X  X XXXX XX  X  XX   X    \",\n            \"X XXX X    X X XX  XX  X X  XXXXXX   \",\n            \"X XXX X X X   XXX        XXXX X XX XX\",\n            \"X XXX X XXXXX  X X   XX   XXXXX XX X \",\n            \"X     X   X    X  XX XXXXXXXX  XX X  \",\n            \"XXXXXXX XXX     X X  XXXXXXX XX X  XX\"\n        };\n        private static readonly string[] Modules126 = {\n            \"XXXXXXX  X  XXX X XX  XXXXXXX\",\n            \"X     X XXXXX XXXX  X X     X\",\n            \"X XXX X    XX XX XXXX X XXX X\",\n            \"X XXX X  X  X XX   XX X XXX X\",\n            \"X XXX X   XXX  X  X   X XXX X\",\n            \"X     X X X     X XX  X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"        X X X XXXXXXX        \",\n            \"    XXXX  X X X   XXX XX   X \",\n            \"X XXX  X X XX  X X XX X XXXXX\",\n            \"XX  XXXX X XX   X   XX   X  X\",\n            \" X   X  X  X X X X XXX XXX XX\",\n            \" X XX X XX XX X   X    X    X\",\n            \" XXXXX   X  XXXX XX   X X X X\",\n            \"   XX XX  XXXXXX    X   X   X\",\n            \"XX     X  X  X     XXX X X X \",\n            \" XXX XX XX    XX X XXX     XX\",\n            \"XXX XX  XX XX    XX X XXXX  X\",\n            \"  X XXXX     X      X   XX  X\",\n            \"  XXXX  X  X XX XX XX  XXX X \",\n            \"XXX XXXX  XXX  XX   XXXXX  X \",\n            \"        X  X  XX    X   X X X\",\n            \"XXXXXXX XXX XX   X XX X X   X\",\n            \"X     X XXXX X  X  XX   XX X \",\n            \"X XXX X XX     XXXXXXXXXX  XX\",\n            \"X XXX X  X  XX   XX    X  XX \",\n            \"X XXX X  X XX   XXXXXX   X XX\",\n            \"X     X    X   X XX XX X X XX\",\n            \"XXXXXXX  X  XXX  X  XX  XX X \"\n        };\n        private static readonly string[] Modules127 = {\n            \"XXXXXXX XX  X X X XXXXXX  X  X  X XXXXXXX\",\n            \"X     X X   X XX   XX XXXX    XXX X     X\",\n            \"X XXX X XX    XX  XX   XX  X XX X X XXX X\",\n            \"X XXX X X X X XX   X  X  X  XXXX  X XXX X\",\n            \"X XXX X X   X XX  XX XX X   X X   X XXX X\",\n            \"X     X   XXXXX X   X X XX XX X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X X XX     X XX  XXX XX X        \",\n            \" XX X XX XX X  XX X XX XXX  XX X  X XXXXX\",\n            \"XXXXXX X XXXX XXX XXXXX X X XXX X  X XXX \",\n            \"    X X X XX XX XXX     XX  X X  X XX XX \",\n            \" XXXX      X X X X  XX      XXX XXXX   XX\",\n            \"XXX  XXX  X X  XXXX  XXX   XX XX X  XX X \",\n            \"   X   X  X XX X   X   X X XX XX X  XXX  \",\n            \"X XX  X X XXXX XX X X X   XXXX    X  XX X\",\n            \"X X  X XXXX  XXXX  X XXX XX X  X  X X    \",\n            \"X   XXX X X XXX X XX X  X XX    X XX    X\",\n            \"XXXX X X     XX X XXX  XX XX X XX X   XXX\",\n            \"XX X  XX X X  X    X  XXXX    XXX X X  XX\",\n            \"XX  XX X  X XX X  X     X  X XX X  X  XXX\",\n            \"XXXX  XXX X  X     XXX X    X XX  XXX XX \",\n            \"  XX     XXXXX  XXX XX X   XXXXX   X X XX\",\n            \"XXX X X XXXXXXXXX X  X    XXXX   X XXXXXX\",\n            \" XXXXX   X   X XX  XXXXX XX XXXX XXX X XX\",\n            \" XX XXXX X  XXXX  X X   XX XXX  XX  XXXXX\",\n            \"X XX X  X  X      X  X  XXX X X  X  X    \",\n            \"      XXXX X XXXXX        X XX    X   X X\",\n            \"XXXXX      X X   XXXXX   XX X   X   X    \",\n            \" XX   X XX X X XX XXX  XX XX   XX X XX  X\",\n            \" X XXX   X  XXXX XXX X XX XX X XX  X  XX \",\n            \"X X XXX  X   X     XX  XXX    XXX  X X X \",\n            \" X  X  XX X X   XXXX    X  X XX XXX XX XX\",\n            \"X X XXX X XXXX XXX  X  X    X XXXXXXX  X \",\n            \"        XXX XX XXX     X X XX X X   XX XX\",\n            \"XXXXXXX X      XX X   X   XXXX  X X XXX X\",\n            \"X     X     X X    XXXXX XX X  XX   XX   \",\n            \"X XXX X XXXX    XX   XX X XX    XXXXXXX  \",\n            \"X XXX X  X  X   X XXXXXXXXXX X   X  X X  \",\n            \"X XXX X X   XX X   XX  XX    X  X  XX   X\",\n            \"X     X XXX  X X X X X  XXXX XXX  XX  XX \",\n            \"XXXXXXX  XXXX XX  X XXXXXX  XXXX   XX XXX\"\n        };\n        private static readonly string[] Modules128 = {\n            \"XXXXXXX   X X  X  XX   X   XXX    XXXXXXX\",\n            \"X     X XX  XX       XXXX XX  X   X     X\",\n            \"X XXX X XX  XX X    X  X XXX X X  X XXX X\",\n            \"X XXX X   XX XXX XX   XXX   X     X XXX X\",\n            \"X XXX X   XX  XXXX X X X     X    X XXX X\",\n            \"X     X  X  XXXX X  XX XXX   XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         XX X XX    X X      XXX         \",\n            \" XXX XX  XX  XXXX  X X X  X XXX X     XX \",\n            \"  XXX    XX  XXXXX  XXXX XX X  XX   X XX \",\n            \"X    XX X   XXX       XX X   X   XX   XXX\",\n            \" XX  X   XX  X  X   X XX   X  X X        \",\n            \"XX XXXXXXX  X X  XX X  X  X   XXX X XXX X\",\n            \" XX     XXX X X     XX X  X X X X   X  X \",\n            \" X X  XX  XX  XXX  X  X XX XXXXXX X X   X\",\n            \" XX     XXXXX XXXXX  XX X X XXX   XX X   \",\n            \"      X X  X XX  X X XXX  XXXXX X   X    \",\n            \"XXX X  X XXX XXX XXXXXX X X X  XXX X  X  \",\n            \"XXX X XXX XX   XX  XXX XXXXXX XX X  X X  \",\n            \"X XXXX  XXX X X   XXXX  XXX  XXX X X X  X\",\n            \"   X  X   X X X   X  X XXXX X   X XX X X \",\n            \"XXXX X X XX     X  XXX  XX XX       X  XX\",\n            \" XX  XX XX   XXX X   XXXX XX  X  XX  XXX \",\n            \" XX       XX X   X XX    XXX  XX     X   \",\n            \" X X XXXX X XX  X X  XX XXX  X    X XX   \",\n            \"XX   X X X X XXX  XXX   X  XX XXX   XXXX \",\n            \"XXX   X  X XX  XXXXXX   XX  XXXXX X XX  X\",\n            \"  XXXX X    X       XX XX X XXXXX  X X   \",\n            \"XXX XXX XXX XX X X XX X   XXXXXXX  X X   \",\n            \" X        XXXXX X XX  X X X X  XXXX   X X\",\n            \"X  X XX X X  XXXX  X XXXXXXXX XX XXX XX X\",\n            \"  XXX    XX XXXXXXX XX  XXX  XXX  X X X X\",\n            \" X  XXXX  XX  XXXXXX   XXXX X   XXXXXXXX \",\n            \"        XXXX   XX XX    X  XXX XX   X  XX\",\n            \"XXXXXXX   XXX  X X     XX XX  X X X XXX  \",\n            \"X     X XXXXX XXXX XX    XXX X XX   XX XX\",\n            \"X XXX X    X  XX X  X   X   X   XXXXXX XX\",\n            \"X XXX X X   XXXXX X   XXX    X XX   XX X \",\n            \"X XXX X X     XX  X    X XX  XXX   X XX X\",\n            \"X     X XXXXX  X  X  X X  XX      X XXXX \",\n            \"XXXXXXX  X    XXXX  XX   X     X  X   XX \"\n        };\n        private static readonly string[] Modules129 = {\n            \"XXXXXXX  X  XXX X XX  XXXXXXX\",\n            \"X     X XXXXX XXXX  X X     X\",\n            \"X XXX X    XX XX XXXX X XXX X\",\n            \"X XXX X  X  X XX   XX X XXX X\",\n            \"X XXX X   XXX  X  X   X XXX X\",\n            \"X     X X X     X XX  X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"        X X X XXXXXXX        \",\n            \"    XXXX  X X X   XXX XX   X \",\n            \"X XXX  X X XX  X X XX X XXXXX\",\n            \"XX  XXXX X XX   X   XX   X  X\",\n            \" X   X  X  X X X X XXX XXX XX\",\n            \" X XX X XX XX X   X    X    X\",\n            \" XXXXX   X  XXXX XX   X X X X\",\n            \"   XX XX  XXXXXX    X   X   X\",\n            \"XX     X  X  X     XXX X X X \",\n            \" XXX XX XX    XX X XXX     XX\",\n            \"XXX XX  XX XX    XX X XXXX  X\",\n            \"  X XXXX     X      X   XX  X\",\n            \"  XXXX  X  X XX XX XX  XXX X \",\n            \"XXX XXXX  XXX  XX   XXXXX  X \",\n            \"        X  X  XX    X   X X X\",\n            \"XXXXXXX XXX XX   X XX X X   X\",\n            \"X     X XXXX X  X  XX   XX X \",\n            \"X XXX X XX     XXXXXXXXXX  XX\",\n            \"X XXX X  X  XX   XX    X  XX \",\n            \"X XXX X  X XX   XXXXXX   X XX\",\n            \"X     X    X   X XX XX X X XX\",\n            \"XXXXXXX  X  XXX  X  XX  XX X \"\n        };\n        private static readonly string[] Modules130 = {\n            \"XXXXXXX  X  X XXX  XXX   XXX   XX XXXXXXX\",\n            \"X     X  X   XXX X  XXXX XXX X X  X     X\",\n            \"X XXX X XXXXX XXXXX   XXXXX  XXX  X XXX X\",\n            \"X XXX X XXX   XX  X XXXX  XX    X X XXX X\",\n            \"X XXX X   X  XX XXXX X X X X XX   X XXX X\",\n            \"X     X  X X X   XXX X XX X    X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"            X  XX         X              \",\n            \"   XX XX XX     X X  X XX  XXX  X    XX  \",\n            \" XX X  XX  XXXXXX X XXXX XXX   X XX X   X\",\n            \" X   XXX X  X     X X  XXX X XX   X X X X\",\n            \"XXX  X   X  XXX XXX  XXXXX X X XX  XXX   \",\n            \" X XX XXX X  XX X  XXX XXX  XXX    X     \",\n            \"XX X X X XXX X XX XX   XXXX XX XX  XX XX \",\n            \" X XXXXX XX XXX X XX    X   XX XXXX    XX\",\n            \"   X X X XXXXX   XXX X  X XX XX XX X XXXX\",\n            \"X X  XX  XXXXX   XXX    XX  XX  XX     X \",\n            \"  X XX  X   XX X     XX  XX XXX XX  XXXX \",\n            \"    XXXXXX X    XXXXXXXX XXX XX XX XXX  X\",\n            \"X  X    XX    XXXXX  XXXXXX      X  X  X \",\n            \" XXX  XX   X    X  X X X   XX X   XXXX X \",\n            \"  XX   X     X XX X   X X       X   X X  \",\n            \"  X   X XXX X X   X XX XXX        X XXX  \",\n            \"    X   X X X  X XXX     X X X XX  XX    \",\n            \"XXX XXX XXXX     XXXX X X   X   X  XX X X\",\n            \" X X   X     XX X     XXX XXXX  X  X  XX \",\n            \"XXX XXXX X  XXX XX    XX X XXX XXXX  X XX\",\n            \"X  X   XXX X   X       XX  X XXX XXX XXXX\",\n            \"X X   X    X X  X   X  X XX XX XXX X X X \",\n            \"XXXXX    XXXXX X XXXX    X  XXX XXXXX X X\",\n            \"XX XX XXX  XX X    XXX  X XX XX XX  X    \",\n            \"XXXXX  XX X X X XXXXXX  XX        X   X X\",\n            \"XX  X XX X   XX XX  X  X XXXX X XXXXXXX  \",\n            \"        X X    X XXX  X XXX  X XX   X XX \",\n            \"XXXXXXX X XX XX   X XX XXXX     X X XXX  \",\n            \"X     X  X  XX  X  X XXXXXXX  X X   X  XX\",\n            \"X XXX X XXX X      XXXXXX X  X XXXXXX XXX\",\n            \"X XXX X X X X X  X X XXXX X   X X  X   X \",\n            \"X XXX X  X XXX XX X X   X  X X X X XXXXXX\",\n            \"X     X    X   X XX X XX XX X    X  XX  X\",\n            \"XXXXXXX  X XXX  X XX  XXX XX  X X X X X  \"\n        };\n        private static readonly string[] Modules131 = {\n            \"XXXXXXX  XXXXX X X   XXX   XXX    XXXXXXX\",\n            \"X     X  X XX XX  XXXXX X XX  X   X     X\",\n            \"X XXX X   XX  X XX   XXX XXX X X  X XXX X\",\n            \"X XXX X         X X    X    X     X XXX X\",\n            \"X XXX X XXX XXXXXX X   XXX   X    X XXX X\",\n            \"X     X  X  X        X   XX  XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  X X XXXXX   XXXX  XXX         \",\n            \"  XX  XXX X X  XX      X    XXX XXX X    \",\n            \" X X   X XXXXX    X    X X  X  XX   X XX \",\n            \"XX X XXX       X    XX X X   X   XX   XXX\",\n            \"  X    X X X  X X  X XX    X  X X        \",\n            \"  XX XX    X     X   XX X X   XXX X  XX X\",\n            \"   X     XX X  XXX        X X X X    XXX \",\n            \"XX  XXXX  X  XXXX  X X     XXXXXX X X   X\",\n            \"  X XX XX  XXXXXXXXXX X X   XXX   XX X   \",\n            \"  XX XX   XX X X X X X   X XXXX X   X    \",\n            \"XXX X  XX  X   X XXX XXXX X X  XXX X  XX \",\n            \" XX   X  XX  XX   X  X     XX XX XX X X  \",\n            \" X X X XXX XXXXXX  X XX   X  XXX X X X X \",\n            \"XXX   XX X XX  XX XX   XX   X    XXX X   \",\n            \"    X  XXXX  XX   X XX  X XXX    XX X  XX\",\n            \"X XX  X X X   XX    X  X X X  X  XX  XXX \",\n            \"XX  XX XX XX X X       XX  X  X X    X   \",\n            \"X     XX X   XX X X    XXXX  X X  X XX   \",\n            \"X  X X     XX X XXXX  X  XXXX XXX   XXXX \",\n            \" XXXXXXX     XXXXXX  XXXXX  XXXXX X XX  X\",\n            \"X X X  X  XX  X X   XXXXX X XXXXX  X X   \",\n            \"  XX  X  X XXX XX X XX XXXXXXXXXX  XXX   \",\n            \"  XXXX X XX    X    X  XX   X  XXXX  XX X\",\n            \"X XX XX   X XX  XX   XXXXX XX XX XXXXXX X\",\n            \"  XXXX  X XX XX X   XX X     XXX  XXXXX X\",\n            \" X XX XX    XXXXXXX XX XXXX X   XXXXXXXX \",\n            \"        XX    X XXXXXX  XX XXX XX   X   X\",\n            \"XXXXXXX XXXXXXXX    X  X XXX  X X X XXXX \",\n            \"X     X  X X    XXX  XX   XX X XX   XX XX\",\n            \"X XXX X  X XXXX XX   X  XX  X   XXXXXX X \",\n            \"X XXX X X XX XX   X  XX  XX  X XX   XX X \",\n            \"X XXX X X  X X  X   XX       XXX   X XX X\",\n            \"X     X  XXX  X XXX  X X X X    X X XXXX \",\n            \"XXXXXXX    X X XX  X XXX  X     XXX   XX \"\n        };\n        private static readonly string[] Modules132 = {\n            \"XXXXXXX      X X    XXXXXX XX  X X  X XXXXXXX\",\n            \"X     X XX    X  X    X   XXX X  X X  X     X\",\n            \"X XXX X        X  X XXXX  X   X    X  X XXX X\",\n            \"X XXX X XX    XXX  XX X  X XX X XX XX X XXX X\",\n            \"X XXX X  XX X   X X XXXXX X XX    XXX X XXX X\",\n            \"X     X XX X XX X  XX   XXX     X     X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          X   XXX XXX   X XXXXX  XXXX        \",\n            \"XXXXX XXX X XXXX   XXXXXXXXXX   X    X X X X \",\n            \" X X X XX X     X XXXX XXXX  X     XX X X X X\",\n            \"X   X XX X   X XX   XX    XXX   X XX X   X XX\",\n            \" X     X XXX XX XXXXX    XXXXXX XXX   XX   X \",\n            \" XX XXX  X XX XX X   XXXX X XX  XX   XXXX XXX\",\n            \"X XX X XX XX  XXX  XXXX XXX X    XXX XXXXXX X\",\n            \" X XX XXXX XX  X    XX X  X XXX X  X  X  XXXX\",\n            \" X         XXX X  XXX XXX  X    XX X   XX  X \",\n            \"XXX   XXXXXXX    X XXXX  X  X XXXX   X XXXX X\",\n            \" X   X  X    X X   XX     X X      XXXX X X X\",\n            \"     XX X   X X  XXX X X XX   XXXXXXX X   X X\",\n            \"         XXXX XX    X   XX XX   X    X      X\",\n            \"XXXXXXXXX  XXXXX   XXXXXXXXXX  XXX  XXXXX XX \",\n            \"XXX X   XXXX  XXXXX X   X X X   X XXX   XX XX\",\n            \" XXXX X XXX  XX  XXXX X X X   XXXXX X X XX  X\",\n            \"  X X   X X   X  X XX   XX  X X    XX   X   X\",\n            \"X   XXXXXX XXXXX    XXXXXX   XX X   XXXXXX XX\",\n            \" X XXX X  X X   XXXX XX   XX         XXXX XXX\",\n            \"    XXX   XXXX XX   X    XX XX XXXXXX X  XX X\",\n            \" X     X  X XXX X X    XXX  XXXX   X XXXXX XX\",\n            \"X XX XX       XXX  XXXX XXXXX X X    XXXX  X \",\n            \"XXX XX X  X  X  X  X X  X XX X  XXXX XX X   X\",\n            \"  XX XXX XXXX  X XXX XX  X XX   XXX   XXX   X\",\n            \"XX X X  XX XXX X XX X     XX X XX  XXXX XX X \",\n            \"XXX   X X X X       XX XXXXXXXX XX XXX XX  X \",\n            \" XXX X  X XX X X     XXXXXX XXXXX   XXX XXX X\",\n            \"    X X XX   X   X XX XX   XX  XXXXX  XX XXXX\",\n            \" XXXX  XX XX   X X     XX  XXXX X     X X    \",\n            \"X  XX XX    X XX X XXXXXXX  XX  XX  XXXXX XXX\",\n            \"        X X  XXXX   X   XXXXX    XX X   XXX X\",\n            \"XXXXXXX XXXXXXXX   XX X X XX X  X   X X XX XX\",\n            \"X     X  XXXX XXXX XX   X XX    XXX X   X  XX\",\n            \"X XXX X X  XXXXX  XXXXXXXXX XXXXX  XXXXXXXXX \",\n            \"X XXX X XX  X   X X  XX X X X XX     XX XXX  \",\n            \"X XXX X XXXXX  XXXXX        X    XXX   XXXX X\",\n            \"X     X XXX XX  X X   X XX  XXX XXX X X      \",\n            \"XXXXXXX XXX  XX X  XXXX  X XX  XXXX    XX  X \"\n        };\n        private static readonly string[] Modules133 = {\n            \"XXXXXXX   X X X X X XXXXX    X   XX X XX X    XX  XXXXXXX\",\n            \"X     X X XX XXX XX   X XX X       XXXXXX  XXX X  X     X\",\n            \"X XXX X      X X   XXXXXXXX XX  XX X XX X X X XX  X XXX X\",\n            \"X XXX X X     XX   X  X X XXX   X     XXXXXX   X  X XXX X\",\n            \"X XXX X     XX  XXX  XXX XXXXXXX X XXXX X XXXX X  X XXX X\",\n            \"X     X X X XXXXX XX  X  XX   X X   X   XXX XXX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          X X X XXX  XXX  X   X   XXX  X X X X X         \",\n            \"XXXXX XXX XX XX   X   XXX XXXXXXXXX XX  X      X X X X X \",\n            \"   XX   XXX    X XXXXX  X XXXX  X XXX  XXX X X   XX  XX  \",\n            \" X   XXXX X X    X  XX XXXX   XXXX  XX  X X       XX X XX\",\n            \" XXX X XX  XXX X   XX   X XX  XX  X XXX      X X   XX   X\",\n            \" X    XXXXXX    XX  XX X    XXX    X   X XXXX  XXX  XX XX\",\n            \"  X XX  XXX XX XX XXX       X XX      X  XX X X    XX    \",\n            \"XXX XXX X      X     XXXX XXXXX  XXX   X X XXXXX X XX X X\",\n            \" X   X X   XXX   XX X    XX      XX  XXXX   XXXXXXX      \",\n            \" X XXXXX       X X XXX    XX    XXX     XXX X   X XX  X X\",\n            \"XXXXXX X X   X XX   XXXXXXX  XX   XXX XX   X  XX XX     X\",\n            \" XXXX X     XXXX   XX   X XX    XXXXX XXXXXX XX    X  XXX\",\n            \"X   XX  X X   XXXX XX X XXXX XX   X X  XXX  XX X X X X XX\",\n            \"X     X    X XX      XXXX   XX XXXX  X  X  X   XXXX X   X\",\n            \" X   X XX X    X X XXXX X  XX  XX X X    X X X  X XXX X X\",\n            \"X    XXXX XX  X  X  XX XXX  XXXX X   X X  X X  XXX  XXXXX\",\n            \"  X    X   X XXX   XX   X   X XX X  XXX   X   X XX  X X  \",\n            \" XXX  XX XXX XXX X X X  XX XXXX    X  XX XXXXXX  X XXXXXX\",\n            \"XX XXX X    X   X X    X  X X XX X   XX   X X X   XX XXX \",\n            \"  XXXXXXX X  X XX XX  X   XXXXX    X   X XXXXX XXXXXX    \",\n            \" X XX   XXXXXX  XXX  XXX  X   X  XXXXXXX  XX  X X   X  X \",\n            \"XXX X X X  XXXXXX X X XXX X X XXX   X   X X   XXX X X    \",\n            \"X X X   XXX X X XXX XX   XX   X XX XXXXXXXXX XX X   XXX X\",\n            \" X  XXXXX  XX  X XXX  XX XXXXXXXXXX X X X     X XXXXXX  X\",\n            \"X X  X  XX    X    X XXXXXX  XX XXX  XXXXXX  X XX        \",\n            \"XX XX X X     X X   X XXX   XX  XX X XXXX   X XX XX X   X\",\n            \"XXXXXX X   X XXXXXXXXX   X XX    XX XXX X  X XXX  XXXXX  \",\n            \"XXX XXXX  X X  X   XX  X X   X  XXXXX X   XX X   XX XX  X\",\n            \"X  X X  XX X  X   XXX X   X   XXXX   XXXX X X X X   X    \",\n            \"X X   X  X  XX X X X XX X  X   X   X  X  XXX XX    X XX  \",\n            \"   X X    X  XX X      X  X XX   X   XX   XXX X XX  XX   \",\n            \"X X XXXXXXX   XXX XX  X    XXX XX  XX  XXXXX X  X  XX   X\",\n            \"   XXX XXX  XXX XXX  XXX XX X     XXX  X X X X   X  XX   \",\n            \"   XX XX XXXX X   X   XXXXX    XXXX XX  X      XX XX  X  \",\n            \" X X X  X X    X XXXXX  XX X    X XXX  XXX X X X X X X   \",\n            \"  X XXXX  XX  X  X  XX XX X    XXX  XX  X X    XX X XXXXX\",\n            \"  X  X  XXX    X   XX   X  X  XX  X X X  XX   XX XXXXX  X\",\n            \"XX   XXX  X   X  X   X     XXX    XX   X XXXXX X X     XX\",\n            \"  X  X X   X  XXX X X  X    X  X  X   X  XX XXXX X XX   X\",\n            \"X X  XX XXXX XX    X XXX XXX X   X X   X   XXX  X X X  XX\",\n            \"XXXXX  XX X     X XX   X      X XXXXXX  X   XX X  X  X   \",\n            \"      XXXXX  XXXX   XXX XXXXXXXXXXX    XXX XXX XXXXXX  XX\",\n            \"        X XXXXX X      X XX   X XXX X X XX X XX X   XXX  \",\n            \"XXXXXXX X X XX  XXXX X XXXX X XXX    XX      X XX X XXX X\",\n            \"X     X  XX  XX XXX X    XX   X   X X  XXX X X XX   X  X \",\n            \"X XXX X XX X X        XXX XXXXX XXX  X     X   XXXXXX  X \",\n            \"X XXX X XXX X XX  XXXXX X X X XXX XXX  X X   X  X     X  \",\n            \"X XXX X XX       X  XX XXXXXXXX XX  XX    X X  X X XXXX  \",\n            \"X     X X XXX  X   XX   X X   XX X  XXX   X   X       X  \",\n            \"XXXXXXX XXXXX XX X X X  XXXX XX    X  XX XXXXXXX X   XXX \"\n        };\n        private static readonly string[] Modules134 = {\n            \"XXXXXXX XXX XX XX XX  XXXXXX X XX X XX   X XXXXX  XXXXXXX\",\n            \"X     X XXXX     XXXXXX X X    XXX XX   X      X  X     X\",\n            \"X XXX X X XXXX XXXXXXX   XX   X XXX XXX  X  X XX  X XXX X\",\n            \"X XXX X X XXX XXXXXX   X  XX XX X XXX XX   X   X  X XXX X\",\n            \"X XXX X  X  X XXXXXXX XX  XXXXX X  XX  XX X    X  X XXX X\",\n            \"X     X XXX X   X X XXX   X   XX X  XXXXXXXX  X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"           X  X      X  X X   X        XX XX XX X        \",\n            \"XX  XXX  XXX   X  XXXXXXXXXXXXX   X X XXX  XXX X   X XXXX\",\n            \" XX X  X  X  XX  XX     XX  XX X XXXXXX XX  X      X XXXX\",\n            \"XX  X XXX  X    X X XXX  XX XX XXXXX X   X    XXX XXX XXX\",\n            \"XXXXX  XX X  X XXXXXX XX  XXXX X   X XX XXX  XX X  X XX X\",\n            \"  XX  X   XX XXXXX X   X XXXXXXXXX X XX  XX  X XX XXXX   \",\n            \" X XXX X  X X X X X  X   XXXX X XX   X X XXX XX  XX X  XX\",\n            \" XX   X X XXX  XXXX  X    XX     X  X  XX XXXX  XX X X  X\",\n            \"XX  X  X  X  X  X   X XXXXX XXX  X XXXXX XX XX   XX XXX  \",\n            \"  X XXX XX   XX  X       X     X  X  XXXXXXX X  XX    XX \",\n            \"X   XX  X     X X  X  XXX  X XXXXXXXXX      XXXX   X   X \",\n            \"XXXX XX   XX XXXXXXXX XX  XXXXX XX    XX   X X XX  XXX XX\",\n            \"        X  XX XX  XXX  X XXXX      X   X  X XXX XX XX XXX\",\n            \"XXXX  XXXX X   X   XX XXXXXXXX    X   XXX   XX XX  XX  X \",\n            \"  XX X   XX  XX  X    X XXX X    XX XXXX X  X   XX  X XX \",\n            \"    X XXX   X X X X XXX  X     X XXXXX XXX  X X  X     XX\",\n            \"X X XX X  X XXXXXXXXX XX     X X XXX XX XX     X X   X   \",\n            \"      X X XX     X  X   X X XXXXXX X X   XX   X   X XXX  \",\n            \"X X XX  XX  XXXXX XXXX X X XX X X      X  XX XX  X   XX X\",\n            \"X XXXXXXX  XXX X X X   XX XXXXX   X X  XX  XXXX XXXXXXX  \",\n            \"XX XX   XX   X       X  X X   X  X   XXXXX X   XX   XXXX \",\n            \"X  XX X XX XX   X XX XXXXXX X X  X  XXXXX XXXXXXX X X  XX\",\n            \"XX XX   X X XX XXXXX      X   XX   XX   XXX X X X   XXXX \",\n            \"XX  XXXXX X    XX  X    XXXXXXXXXX X  X  XX    XXXXXX X X\",\n            \"  X X   XXXXX X XXXX X   XX X   XX XXXXX     XX     XXX  \",\n            \"X X X XX X   X XX  X XXXXXXXXX X   X    X  X XXX   XX  X \",\n            \"X   XX  XX X    XXX       X X  XX X X  XX   X XX X  XXXXX\",\n            \" XX   XX   X   XXXXXX X XX  X X XX    X XX X XXXXXX   X X\",\n            \"   XX   XXX X X XX XX  XX X XX XXXXXXXXX X  X  X     XX  \",\n            \"XX X  XXX   X X  X  X X XXX     XX X X X XX X X  XX  XXXX\",\n            \" XX  X XXXX    XX  XXX X X XXX XX      X  X  XX X XXXX XX\",\n            \"  X   XXXX XX XX X X   XX  X  XXX X    X   X XXX   X XX X\",\n            \"X  X   XXXXX XX      X  XXX  XX        XX XX XXXXX    X  \",\n            \" XX X X X XXXX X  XXXXXXX  X      X X XXX  XXX XXX    XXX\",\n            \"  X  X X XX  XX  XX     X X    X XXXXXX XX  X  X  X  X XX\",\n            \"X X   XX    X X X X XXX   X XXXXXXXX X   X    X   X    XX\",\n            \"X X X   XX XX  XXXXXX XX   XXX X   X  X X       XXXX  X X\",\n            \"X XX XX XXX  X X X XX    XX XX XXXXX XX  XX    X  XX     \",\n            \" X X X  XX X X  X XX X X XXXX   XXX  X X XXX  XX  X X  X \",\n            \"X X  XX XX  XXX XXXX X  XXXXX X  XX X  XXXXXXXXX  X  XXXX\",\n            \"XXXXX  XX  XX    X X  X X   XX  XX   X   XX XXX X X X X  \",\n            \"      X   X     X  X  X X XXXXX   X  XX XX     XXXXXX    \",\n            \"        XXXXX  XX  XXX X  X   XX  X XX XXX  X X X   XXXXX\",\n            \"XXXXXXX    X X     X XX  XX X XXX XXXXX XXX  XX X X X   X\",\n            \"X     X XX XXXX     X XXXXX   X    X   X  XX XX X   XXXX \",\n            \"X XXX X X  X  XX   XXXXXXXXXXXXX  X   XX    XX XXXXXX   X\",\n            \"X XXX X   X XX    X   X XX XX X  XXXXXX  X XX   XXXX  XXX\",\n            \"X XXX X  XXXX   X X XXX  XXX    XXXX X  XX  X X XX X     \",\n            \"X     X X      XXXXXX XX  X XX X XXX XX XX     XX   XX   \",\n            \"XXXXXXX X XXXX   X  X   X    XXXXX X X   XX   XX  XX XX X\"\n        };\n        private static readonly string[] Modules135 = {\n            \"XXXXXXX XX    XX X XXX  XXX XX XXX  X   X XXXXXXX\",\n            \"X     X XXX        X XX X X   XX X X  XXX X     X\",\n            \"X XXX X XX X  XXXX  X XXXXX XXX   X    XX X XXX X\",\n            \"X XXX X   X   X    XXX  X X   X  X     X  X XXX X\",\n            \"X XXX X XXX XX   X  X XXXXXXX X X    X    X XXX X\",\n            \"X     X  X X  XX  XX  X   X  X  X   X X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"         X X X  XX XXXX   X XXXX  X XX X         \",\n            \"X  XXXXXXXXX X     XXXXXXXX     X XX   X X  X XXX\",\n            \"XXX     X  X  XX   X XXXX   X  XX    X     X XX  \",\n            \"XXX X X XXX X   X     XXX XX  X       X  X XX XX \",\n            \"X           XXX XX     X X    X X   XXXXXX   X  X\",\n            \"XX X  X  X   X     XX X   X  XX XXX XXXX X X X X \",\n            \"X XXX   X XX  XX XX  XX XX   X  XXX X   XX   XXX \",\n            \" X XX X X  XXXX X  XXX  XX       X   XX X  X     \",\n            \" XXXX  XXX      X  X X  XX  X    XX X  XX  X X X \",\n            \"XXX   XXX   XX X XXX X X    XXX  X X  XXX    XX X\",\n            \" XXX   XXX X   X X  XX XXXX      X  XXXXX  X XXX \",\n            \"X XXXXX X XXXXXXX  X  XX X   X X X  XX XXXX XX X \",\n            \"XXX    X   XXXXXX   XX  X   X     XX  X   X   XX \",\n            \"X X X XXXX    XX   XXX   XXX XXXX X   XX  XXXX XX\",\n            \"X X    X XX  XX X  X    XX  XXX XXXX   X   X     \",\n            \"  XXXXXXX X X    XXXX XXXXXXXX XXXX XXXXXXXXXXXX \",\n            \"  X X   XX  X XX XX   X   X XX     X  XXX   XXX X\",\n            \"X XXX X XXX   X XX XX X X XX XXX  XXX   X X XX  X\",\n            \"X   X   XX X X XXX X XX   X    XX  XXX XX   XX  X\",\n            \"X  XXXXXXX XXX   XX X XXXXXX    XX     XXXXXX XX \",\n            \" XX X  XX XXXX  XX   XX   X XXX     X   X XX   X \",\n            \" XX  XXX X XXX XX  XX  XX XXX XXXX X XX X X  XX X\",\n            \"XX X    X   X X   X  XX  X  XX     XX X    XXXXX \",\n            \"XXX XXXXXXX XXX X   XXXX X   X XX     XXXX X     \",\n            \"XX  X      X XXXX  XX  X XX  XXX X    X  XX   X X\",\n            \" XX XXXXX XXXX XX   XXX XX XXX  XXXX XX  XXXX XX \",\n            \"  X X  XXX XX XXX X       XX    X   X    X X X X \",\n            \" X XXXXXXX XXX  X XX X XX  XX XX  XX XXXXX XX  X \",\n            \"XXXX X  XXXX X XXX X X X     XX X  X   X  X XX XX\",\n            \"   XXXXXXX  XXX  X   XXX X    X       XXXX   X X \",\n            \"X  XXX XXX X    XXXX  XX XX XX   X X     X X  X X\",\n            \" X   XX   X XXXX  XX  XX XXX    XX   XX          \",\n            \" XXX    X  XXXX XXXXX X    X X X X    XXX X XX XX\",\n            \"XXX   XXXX XX       X XXXXXXX     X X X XXXXXXX X\",\n            \"        XX  X  XXX XXXX   X X  XXX XXX XX   XX   \",\n            \"XXXXXXX X   XXX X X   X X X XX   X  XX XX X XX  X\",\n            \"X     X X XXXXX XXX  XX   XXXXX  XXX  X X   X X X\",\n            \"X XXX X X  X  X X  X XXXXXXX  X  XX  XX XXXXX  X \",\n            \"X XXX X X X  X  X XX XX   XX   XX  X      XXX   X\",\n            \"X XXX X    XXX   X       XX X X  XX   X X X    X \",\n            \"X     X  X X  XXXX XX XX      XX X    XXX  X   XX\",\n            \"XXXXXXX XXXX XXX   X    X XX  XX  XX   XXX  X   X\"\n        };\n        private static readonly string[] Modules136 = {\n            \"XXXXXXX X XX XX XX XX  X  X    XXXX     XX X XX  X XX XXXXXXX\",\n            \"X     X   XX X  X XX  XX X X XX    X XXXX X    X   XX X     X\",\n            \"X XXX X  X   X X X X XX XXXXXXX XXXXX  X X  XXXXX XXX X XXX X\",\n            \"X XXX X XXXXX  XX X X    XXXXXXXX X XX     XX X X X X X XXX X\",\n            \"X XXX X XX    X X X   XXXXXXXXXXX   XXX   X X  X XXX  X XXX X\",\n            \"X     X X X    XXXXX XXX   XX   XX X  X XXXXXX X  X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX  XX X X  X   X  XX   XX XX XX    X XXXX XX        \",\n            \"X   X XXXXXX  XX   X XX  X XXXXXXX X XXXX X  XXX     XXXXX  X\",\n            \"XXXX    XX X  X    XXX   X XX   X  XXX XXXXX X  XX XX X X    \",\n            \" XXXX XX  X XX  XXXXX XX XX X X  X X    XXX XX X  XX XX X X X\",\n            \"X   XX XXX XXX XXXXX XXX  XXX XX  XXXX X    X X  X   XXXXXXXX\",\n            \"XX  XXX XXXX XX XX  XX     X   XXX XX XXXX  XX XXX  X XX X   \",\n            \"X   X   XX    X XXXX X   XX    X  XXXX      X X XX XX    XX  \",\n            \" XXX XX X X XX  XXXXXX        X XXX X X    X XXXXX XXX XXX   \",\n            \"X X X  X      XXX  X    XX X X X X X X XX     XX X  X X    X \",\n            \" XXXXXXXXXXXX XX   XXX XXXX   X X  X  XXXXX  XXX    X       X\",\n            \"  X  X   X X   X  XX      X XX XX X  X  X  X  X  X XXX X X   \",\n            \"   XXXXX  X   X  X    XXXXX  XX XX  X    X XX X XXX XX XX   X\",\n            \"    XX X    XXXXX X  X  X XX  X XXX     XX X XX    X X X X X \",\n            \"X XXXXX  X  X  XX X  XX X  X  X XX  X X  XXXXX  X X XXXXXXXX \",\n            \"X X XX     X  XXXX X X  XXXX  XXX  XXXXX  X X  XXXXXX X XX XX\",\n            \"    XXX X   XX X XX XXX X XXX  XX XX X XX     XX X X     XXX \",\n            \"   XXX   XX   XX   X  X  XX  X XX    XX   XX   XXXX  XX X X  \",\n            \"   X XXXXX  X XX X  XXX XX  XXX X X  X  X  X  X  X     X  X X\",\n            \"  XX   X   XX X X X   XX XXXX   XXXXX  XXX   XXX   XXX XX X X\",\n            \"   XX XXXX   XX     X XXXXX XXX  XX X  X X X XX    X XX XXX X\",\n            \"   X    XX XXXXXX XXX X XXXXX  X   X   X XX XX X X    XX X XX\",\n            \"    XXXXX X   X   X X  XX  XXXXXXXX   X XXXX X     XXXXXX XX \",\n            \" XXXX   X  X X     X    XX  X   XXX XX X XX  X  XX  X   XXXXX\",\n            \"    X X XX    XXX XX  X    XX X XXXX    XXXX X XXX XX X XX XX\",\n            \"X   X   X      X XX  XXX X XX   X X XXXXX   XXXX  XXX   X  X \",\n            \" X  XXXXX    XXX X  X   XXX XXXXXX   X  X X X    XXXXXXXX  XX\",\n            \"X    X  X X XX X    X XX  X X  XX XXXX     XX X XX   X X   XX\",\n            \"X XXX X  X   X XX X  X XXXX X    X X XX   X  XX X XXX XX  XXX\",\n            \" XX    X X   XXX  X X   X X   XXXX   XX X  X X   X XXXX XXX X\",\n            \"XX X  X X     X  X  X X    X   X    X X  XXXXX  XX X  X XX   \",\n            \" X XX   X    XXXXX  XX X XXXXX    XXXX X    X XXXX X  XX X  X\",\n            \"XX    X X X XXX      X X    X XX XXX X XXXX    X XX X XX X XX\",\n            \"   X X X    XXX XX   X   X XXXX X  X XXXX X    X XXXXXXX X X \",\n            \" XX XXX   X  X XX XX XXXXXXXXX    XX X XX     XX X X  X X X X\",\n            \"XX  XX     XXX     XXX  X XX  X XXX     XX X XX     XXXXX X X\",\n            \"  XX XXX   X   XX  X XX   X  X X XX X    X XXXX X    X X  X X\",\n            \" X       XX  XXX   X   X   XX   XXX X   XX  XXX X   X    XXXX\",\n            \" X    XX X   XXXX   X   X X X X XX    X XXXX X    XXXX XX XX \",\n            \"  X X  XXX  XX    X X  X     XXX    XXX X X     XXX       XXX\",\n            \"XX  X XX X XX XXXX XXXXXXX X  XXX X  X  X  X  XXXX    X XX X \",\n            \" XXXXX  XX    XXX XXX   X  XXXXX X X X XXX   X  X  XXX XXX   \",\n            \"  XX  X X  X X    XXX  XXX   X XXXX  X  XXXX XX   X XXXX X  X\",\n            \"XX XX     XXXX  X X     X   X X   XX   X X XXX  X    X       \",\n            \"  XXXXX XXXX XXXX  XXXX  XX XXX  XXX  X XXX XX    XXXXX X XXX\",\n            \"XXX X    X X  XX XXXXXXX  X   XXX  X  X  X XXX  XXXX   XXXX  \",\n            \"XXXX  XX XX  X  XXX  X XX  XXXXXX     X XXX XXX    XXXXXXX XX\",\n            \"        X   XX XXXX XXX  XXXX   XXX X  XXX  XXXX    X   XXX X\",\n            \"XXXXXXX XX XX XX XXX   X   XX X XX XX X  XX XX  X X X X XX  X\",\n            \"X     X   XXXX  X X XXXXXX XX   XX X X XXXX    X    X   X    \",\n            \"X XXX X XX X XXX XXXXX   XX XXXXX  X XXXX X   XX X XXXXXX    \",\n            \"X XXX X  XX XXXX   X XXXX XX X X XX     XX X XX    X X XXXX X\",\n            \"X XXX X  X   X  X X XXXX XXXXXXXXX  X X  XXXXX  X XX  XXX XX \",\n            \"X     X  XX XX   X X   X  XX   X XX     XX X XX      XX X  X \",\n            \"XXXXXXX XXX X    X X    X   XX XXX  X X  XXXXX  X XX X    XXX\"\n        };\n        private static readonly string[] Modules137 = {\n            \"XXXXXXX X XX XX XX XX  X  X    XXXX     XX X XX  X XX XXXXXXX\",\n            \"X     X   XX X  X XX  XX X X XX    X XXXX X    X   XX X     X\",\n            \"X XXX X  X   X X X X XX XXXXXXX XXXXX  X X  XXXXX XXX X XXX X\",\n            \"X XXX X XXXXX  XX X X    XXXXXXXX X XX     XX X X X X X XXX X\",\n            \"X XXX X XX    X X X   XXXXXXXXXXX   XXX   X X  X XXX  X XXX X\",\n            \"X     X X X    XXXXX XXX   XX   XX X  X XXXXXX X  X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX  XX X X  X   X  XX   XX XX XX    X XXXX XX        \",\n            \"X   X XXXXXX  XX   X XX  X XXXXXXX X XXXX X  XXX     XXXXX  X\",\n            \"XXXX    XX X  X    XXX   X XX   X  XXX XXXXX X  XX XX X X    \",\n            \" XXXX XX  X XX  XXXXX XX XX X X  X X    XXX XX X  XX XX X X X\",\n            \"X   XX XXX XXX XXXXX XXX  XXX XX  XXXX X    X X  X   XXXXXXXX\",\n            \"XX  XXX XXXX XX XX  XX     X   XXX XX XXXX  XX XXX  X XX X   \",\n            \"X   X   XX    X XXXX X   XX    X  XXXX      X X XX XX    XX  \",\n            \" XXX XX X X XX  XXXXXX        X XXX X X    X XXXXX XXX XXX   \",\n            \"X X X  X      XXX  X    XX X X X X X X XX     XX X  X X    X \",\n            \" XXXXXXXXXXXX XX   XXX XXXX   X X  X  XXXXX  XXX    X       X\",\n            \"  X  X   X X   X  XX      X XX XX X  X  X  X  X  X XXX X X   \",\n            \"   XXXXX  X   X  X    XXXXX  XX XX  X    X XX X XXX XX XX   X\",\n            \"    XX X    XXXXX X  X  X XX  X XXX     XX X XX    X X X X X \",\n            \"X XXXXX  X  X  XX X  XX X  X  X XX  X X  XXXXX  X X XXXXXXXX \",\n            \"X X XX     X  XXXX X X  XXXX  XXX  XXXXX  X X  XXXXXX X XX XX\",\n            \"    XXX X   XX X XX XXX X XXX  XX XX X XX     XX X X     XXX \",\n            \"   XXX   XX   XX   X  X  XX  X XX    XX   XX   XXXX  XX X X  \",\n            \"   X XXXXX  X XX X  XXX XX  XXX X X  X  X  X  X  X     X  X X\",\n            \"  XX   X   XX X X X   XX XXXX   XXXXX  XXX   XXX   XXX XX X X\",\n            \"   XX XXXX   XX     X XXXXX XXX  XX X  X X X XX    X XX XXX X\",\n            \"   X    XX XXXXXX XXX X XXXXX  X   X   X XX XX X X    XX X XX\",\n            \"    XXXXX X   X   X X  XX  XXXXXXXX   X XXXX X     XXXXXX XX \",\n            \" XXXX   X  X X     X    XX  X   XXX XX X XX  X  XX  X   XXXXX\",\n            \"    X X XX    XXX XX  X    XX X XXXX    XXXX X XXX XX X XX XX\",\n            \"X   X   X      X XX  XXX X XX   X X XXXXX   XXXX  XXX   X  X \",\n            \" X  XXXXX    XXX X  X   XXX XXXXXX   X  X X X    XXXXXXXX  XX\",\n            \"X    X  X X XX X    X XX  X X  XX XXXX     XX X XX   X X   XX\",\n            \"X XXX X  X   X XX X  X XXXX X    X X XX   X  XX X XXX XX  XXX\",\n            \" XX    X X   XXX  X X   X X   XXXX   XX X  X X   X XXXX XXX X\",\n            \"XX X  X X     X  X  X X    X   X    X X  XXXXX  XX X  X XX   \",\n            \" X XX   X    XXXXX  XX X XXXXX    XXXX X    X XXXX X  XX X  X\",\n            \"XX    X X X XXX      X X    X XX XXX X XXXX    X XX X XX X XX\",\n            \"   X X X    XXX XX   X   X XXXX X  X XXXX X    X XXXXXXX X X \",\n            \" XX XXX   X  X XX XX XXXXXXXXX    XX X XX     XX X X  X X X X\",\n            \"XX  XX     XXX     XXX  X XX  X XXX     XX X XX     XXXXX X X\",\n            \"  XX XXX   X   XX  X XX   X  X X XX X    X XXXX X    X X  X X\",\n            \" X       XX  XXX   X   X   XX   XXX X   XX  XXX X   X    XXXX\",\n            \" X    XX X   XXXX   X   X X X X XX    X XXXX X    XXXX XX XX \",\n            \"  X X  XXX  XX    X X  X     XXX    XXX X X     XXX       XXX\",\n            \"XX  X XX X XX XXXX XXXXXXX X  XXX X  X  X  X  XXXX    X XX X \",\n            \" XXXXX  XX    XXX XXX   X  XXXXX X X X XXX   X  X  XXX XXX   \",\n            \"  XX  X X  X X    XXX  XXX   X XXXX  X  XXXX XX   X XXXX X  X\",\n            \"XX XX     XXXX  X X     X   X X   XX   X X XXX  X    X       \",\n            \"  XXXXX XXXX XXXX  XXXX  XX XXX  XXX  X XXX XX    XXXXX X XXX\",\n            \"XXX X    X X  XX XXXXXXX  X   XXX  X  X  X XXX  XXXX   XXXX  \",\n            \"XXXX  XX XX  X  XXX  X XX  XXXXXX     X XXX XXX    XXXXXXX XX\",\n            \"        X   XX XXXX XXX  XXXX   XXX X  XXX  XXXX    X   XXX X\",\n            \"XXXXXXX XX XX XX XXX   X   XX X XX XX X  XX XX  X X X X XX  X\",\n            \"X     X   XXXX  X X XXXXXX XX   XX X X XXXX    X    X   X    \",\n            \"X XXX X XX X XXX XXXXX   XX XXXXX  X XXXX X   XX X XXXXXX    \",\n            \"X XXX X  XX XXXX   X XXXX XX X X XX     XX X XX    X X XXXX X\",\n            \"X XXX X  X   X  X X XXXX XXXXXXXXX  X X  XXXXX  X XX  XXX XX \",\n            \"X     X  XX XX   X X   X  XX   X XX     XX X XX      XX X  X \",\n            \"XXXXXXX XXX X    X X    X   XX XXX  X X  XXXXX  X XX X    XXX\"\n        };\n        private static readonly string[] Modules138 = {\n            \"XXXXXXX XX XX  X X  X X    X XXXXX XX XX X   XXX  XXXXXXX\",\n            \"X     X    XXXX X XXXX    X XX XXXX    XX  XX  X  X     X\",\n            \"X XXX X  XXX   X X XX XX X X   X  XXX X    XX XX  X XXX X\",\n            \"X XXX X  XX X  XX X   X  XXX X  XXXXX  XX X XX X  X XXX X\",\n            \"X XXX X X X  X   XX XX  X XXXXXXX X XXX  XXX   X  X XXX X\",\n            \"X     X XXX  XX   XXX  XXXX   X  X    XXXX  X X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"                  XXXX XXXX   X X  XXXXXX X              \",\n            \" XXXXXXX XX X   XXX XX XX XXXXX X X X X X XXX X    XX   X\",\n            \"X X X       X  XX  XX     XXXX   XXXXXX XX  XXX  X   XX X\",\n            \"X   XXXXX   X  X   X X X X     XX   X  XX  XX  XX X  XXXX\",\n            \"XXXXX    XX X XX XXX     XX   XX         XXX  XXX XXX  XX\",\n            \"X XXX XX X X X XX X XX XX XX X  X XX X XXXX X X   XXX XXX\",\n            \"X  X X XX XX X XXXXX XX X  X XXX XX XXX X  XXXXX X XXX XX\",\n            \"  XX  X           XXX XXX X  XX XXX   XXX XX  XXX X   XX \",\n            \"X X XX   XXX    X XX XXX XXX XXXX   X XXX   XX    XXX    \",\n            \"    X XX  X  XXXXX     XXX X     X      X   X    X XX  XX\",\n            \" X XX  X   X X XXX  X X   X  XXX  X   XXX     X  XXX  X X\",\n            \"     XXXXXXXXXX XXXX XX X  X XXX XX      XX XXX X XXX  X \",\n            \" X XX  X X  X X  XX      X  X  X   X      X X    X XXX XX\",\n            \"X X XXXXX  X XX XX   XXX  XXX  XX      XXXXXX  X X XX   X\",\n            \"XX  XX X XX      X XXXX  X  X   XXXX X  XX X XX   X XX   \",\n            \"X X X X X     X   X   XX   X X X X XX X       XXX X  XX X\",\n            \"XX X X  XX  XXX X X  XXX X        X   X   X   X X X X    \",\n            \" XXX XXXXXX XXX X XXX XXXX  X  X XXX   X XX X X    XXXX  \",\n            \"X X X   X     XXX  XXX XX X       X   X   X   XXX XX X XX\",\n            \"    XXXXXXXX XXXX    XXX XXXXXX  X     X XX XXXXXXXXX X X\",\n            \"XXXXX   XX   XX  X  X X X X   XXX    X XXX   X  X   XX   \",\n            \"X  XX X XX  X XX  XXXX   XX X X X X X XXX   X X X X X  X \",\n            \" X XX   XXX   X  X X XXXXXX   X    XX X  X XXXXXX   X  XX\",\n            \"XXX XXXXXXX X  X X X X    XXXXX XXX         XX XXXXXXXX X\",\n            \" XX     X X XX  XX   XXX XXX X  X X    XX       XX   XX X\",\n            \"XXXX  X XXX XX X X X X X XX  X XX XXX  XX X XX X XXXXX X \",\n            \"X   X  X  XX X  X    XX   X X XXX XXXXXX     XX  XX XXXXX\",\n            \"X     X XXXXXXXX   X XXXXX    X  X X  XXX XXX   XXX XX  X\",\n            \"X XX X  XXX  XXXXXX XXXX  XXXXXXXXX XX XX XX  XX  X  X   \",\n            \" X X  XX XXX X  XXX X X  XXXX   X     X X X XXXXX XX  X X\",\n            \" XXX   XX  X   XX XX  X XXX  X  XXX X XX XXXX X X  XXX  X\",\n            \"X X X XX XX   X   XX XX X  XXX XX  X X  X  X XXX  XX X XX\",\n            \"X       X X  XXXX     XX X X XXXX   X  X XX     X   X  X \",\n            \"  XX  XX X XXX  X X XX  XX  X  X X X X XXXX    X XXXXX   \",\n            \"   X X  X X X X   X X XXXXXX    XXX    X   XXXXX X XXXX X\",\n            \"X X XXX XXX    XX  XX XX XXXXXXXX XX X X  X XXX XXX  XX  \",\n            \"        X XXXXXX  XXXX X X X   X XXX XXX XX XXXX  XXX  X \",\n            \"XXX  XXX XXXX XX       XXX   XXXXX   XX XXX XXXXXX XX   X\",\n            \"X   X    X  XXX XXX XXX  XX   XXX XX  X    XX X      X   \",\n            \"X X  XXX  X     X X X X X X  XX  XX  XXXX  X XX  X X X  X\",\n            \"XXXXX   XXX XXX XXX XX   XX X X    XX  X X  X XXX XX X XX\",\n            \"      X        XX       X XXXXXXX X  X XX  XX XXXXXXX   X\",\n            \"        X X  X  XX    X X X   X XXXX  X  X  XXX X   X   X\",\n            \"XXXXXXX X XX   X XX       X X XXX XXXXXX    X XXX X X XX \",\n            \"X     X XXX     X  X      X   X X X  X XXXX  XXXX   X  X \",\n            \"X XXX X X X X  XXXX XXXX  XXXXXXX  X   XXXX X XXXXXXXX  X\",\n            \"X XXX X X  XX XX X XX  XXX  X X  XXX X  X     XXX X XX   \",\n            \"X XXX X X XX XXX X   X X X  XXXX      X   X  X   XXXX X  \",\n            \"X     X XXX   XX  XXX  X X XXXXX X   X X X XX    XX XX   \",\n            \"XXXXXXX  X X   XXX    XX  X  X       XX X   XX XX X    X \"\n        };\n        private static readonly string[] Modules139 = {\n            \"XXXXXXX  X  XX   X   XXX  X XXX XX X   X  XXXXX X    X X XXXX XXXXXXX\",\n            \"X     X XX  XXXXX   XXXXX    X X XX  XXXXXXX  X  X  XXX XX    X     X\",\n            \"X XXX X  XXXXX X      X XX X  X     XX  XX X  XX XXXX XX XX   X XXX X\",\n            \"X XXX X X XX XX  X X   XX XXXXX  X XXXX XX X X       XX     X X XXX X\",\n            \"X XXX X XXXX       XXXX  XX XX  XXXXX X      XX X  X XX XXX X X XXX X\",\n            \"X     X   X   X X XXX X XX  X X X   XX  XXXXXXXXX     X XXX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX XX    XX X XXXX X X XX   XXX     X X   XX  XX XX X        \",\n            \" X XXXX XX  X XXX XXX X XXX X X XXXXX    XXX XXX   X XX XX  XXX XX X \",\n            \"XXXXX  X XXX     XXX X XX X  X X XXX  X   XXXX XX  X  X XX X   X     \",\n            \"X  XX X X  X X XXX XX   XXXX    XX  XXX XX  XXXXX XXX XX X X XX   X  \",\n            \"X XXXX  X XXXXX  XXX      X  XX    X XX X X  XX XXX X     X  XX    X \",\n            \"   XXXXXXXX   X XXX   XXXX XX  XXXXX X    X  X XXX X X X  XXXX   X X \",\n            \"X X X     X  X  X   XX XX X  X X XX     X  X  XXX  X X  X  X    XX   \",\n            \" X X  XX XXX  X X X X X XXXX X X XXXXX    X X   XX XX X   X  X X     \",\n            \"    X  X XX  X    XXX   XX XXXXXXXX X X  X XXXX XX    XX XXX X  X  XX\",\n            \"  X  XXX XXX X XX  X XXXX     X X X XXX X   XX      X XXX  XX  XX    \",\n            \"X  XXX   XXXX  X X    X X     XX XX     X  X   X XX  XX    X XXX  X  \",\n            \" X X XX      XXXX XX    XX X      X X XX X XX    XX   XX  X XXXXX XX \",\n            \"X  X   X X    X  XXXXXXX X XX XXX X    X XX X  XXXX  X XX  XXXX X  XX\",\n            \"XXXXXXXX  X X     XX X  X X  X  XX   XXX X X  X X      XX XXX  X   X \",\n            \"XXX    X  XXXX X XX  XXXX  X X XX X  X X   XX XXX X  X  XX    X XX  X\",\n            \"  XXXXX XXX    X X XXX XX   X     X X X  X  X  XXXX XXXX XXX XXXXX X \",\n            \"  X X  XXX   X X XX   XXXXX   X   XXXXXXXX  X XXXXXXX X X  X XX     X\",\n            \" X  XXX   X  XXXX X XX      X XX  X X XX XX   X  X XX      X X   X   \",\n            \"  X  X XX         X XXXXX   XXXX  XXXXX    XX      X   X XXX   XXXX X\",\n            \"XX    X X  XX   X  XXX X XXX     XXXXX X    X XX X XXXXXXXXXXX X XXX \",\n            \"  XXXX XXXX   XXX X        X XX  X X  X  X X X  X X XX XX   X X    XX\",\n            \"  XXXXX   X X X   X X XXXX  X  XXXXXX X XX   XX  XX XXX XX   XX  X  X\",\n            \" XXX X   X X     X XX X   XX X XXX  X XX     X X       X   X   XX    \",\n            \"XXXXX XX  X X  X  XXX  XXX   X XXXXXX   XXXX XX   X  X XXXXXX X XX   \",\n            \"  X XX  X  X  X XX XX  XX   X XXX   XXXXXX X      XX  XXXX XX XXXX X \",\n            \" X XXXXXXXXX X   XX  X  X XX XX XXXXX XX   XX XX  XXX X X XXXXXXX X X\",\n            \"   XX   XX  X XX  X X X XX   X XX   XX X X  X X X  XXXX    XX   X XXX\",\n            \"    X X X X X XXX XX XX  X XX XXX X XXX XXXX    X  X X X X XX X X X X\",\n            \"X  XX   X X X   X X        X X XX   X  X XX XX   X XXXXX X  X   XXXX \",\n            \"X XXXXXXXX X XXX X XX  XX  XXX  XXXXX X X X  X X X XXXXXXX  XXXXX XXX\",\n            \"  X  X  X X   XX       X   X X XX    X    X XXXX   X    XXX  X  XX  X\",\n            \"    XXX X XX      XXX    XXX  X X  XX X  XXX XXXXXXXX XX X  XXX    XX\",\n            \"X XXXX    XXX XX X  X X XXXXX X  XX  X   X XXX    X     XXXX   XXX X \",\n            \"XXXX  XX X   XX  X   XX        XXXX X X  X    XX  X X XX   X XXX XXXX\",\n            \"   X   XXXXXX XXX     X  XXX X   X X   XX  X     X  XX  X  XX  X XXXX\",\n            \"  XXX XX XX X   X XX XX XX X X X X X  XX XXX    XX X  X  X  X XX  XX \",\n            \" X     X  XXXXXX XX   XXXX   XX  X X XX   XX XX   XX  XXX  X X XX X X\",\n            \"XXX   XX X   X X    X  X XXXXXX X X X    XXX  XX  XX  X X XX X  XXXXX\",\n            \" XXXX   X    X X     X X X XXX  XXX  XX   XXXXX    X X    X  XX XX   \",\n            \"   XXXX   X  X XXXXXX    X X X X  X     X X  XXX     X X    X    XXX \",\n            \" XX    XXX  X   X  X X XXXX X X  XX XXXXX X  X X X  XX  X XX XX X    \",\n            \"XXXX XX X  XXXX XX XX  XX  XX X  X  XXXXX  X X  X  X      X X  XXX  X\",\n            \"XX XXX  XX XXX X X  XX XXX  XX  XXXXXX X XXXXXX XX  X  XX  X   XX XX \",\n            \"   X  XXXXX   X X XXXX XX XX  XXXX    XXX   XXXXX X XX XX XX  XX  XXX\",\n            \"  XXXX  XX  X XXXXX         XX X XXX    X  XXXX XXX  X   X  X  X XXXX\",\n            \"X X XXXXX   X XXX X XXX      X       X  X   XX X  X XX   XXX  X  X XX\",\n            \" X  XX XXXX  XXX XX  XX XX X  XX XX X    X X   XXXXX     X XX   XX   \",\n            \" X X XX X  X   X     X XX X   XXXX  XXX  XXXX  X X X XXX XXXXX  XX X \",\n            \"  X XX  XX   XX  XXX X  XX XX X X     XX X XX XXX    X X     XX  XXXX\",\n            \"XX    X X XX X XXX X    XXX    X X  XX XXX  XXX        XX XXXXXXX   X\",\n            \"X    X X X      X  XX X  XX   XX     XXXXX     X   XXX XX XX  X XXX X\",\n            \"X X XXXX X  X X XXX   X XX   X   XX XX X X X  X XXXXXXXXX       XX X \",\n            \"X       XX X XX  XX XXXX  X XXX X   X XXX XX  XXX   XXX XX XX X  X XX\",\n            \"X  XX X X X  XX XXXXXX X X XX XXXXXXXXXXX XXXX    XX  X  X XXXXXX X X\",\n            \"        XX   X   X XX    XX X  XX   XXXX    XXX  XX   XXXXXXX   X  X \",\n            \"XXXXXXX    XXXX     XXX   XXX X X X XXXXX  X X X   X XXX XX X X XXX  \",\n            \"X     X XXX X X XX       XXXXXXXX   XXX XXX XX XX XX X  XX  X   XX X \",\n            \"X XXX X X    XXXXXX  XXXXX   X  XXXXX XXXXXX   XXXXXXX    XXXXXXXX   \",\n            \"X XXX X XX XX  X  XX  XX X    X XX XXX  XX  X   X  XX  XX   X     X  \",\n            \"X XXX X  XX X  X X X  X XX  XX  XX  X  X      XXX XX XXX   XX XX XXXX\",\n            \"X     X X   X   XXX X X  X    XXXXX  X  XX XXXX X  X  X  XXXX  XX  XX\",\n            \"XXXXXXX  X  XX  XX X     XXX XXX    XX   X  XX X XXXXXXXX   XXX XXX  \"\n        };\n        private static readonly string[] Modules140 = {\n            \"XXXXXXX   XXXX XX         XX  X X X     XXXXX  XX  XX  X  XXX XXXXXXX\",\n            \"X     X  X  XXXXX   XXXXX    X X XX  XXXXXXX  X  X  XXX XX    X     X\",\n            \"X XXX X XXX    X XXX  XX   X X X   X    X X   X X XXXX   XX   X XXX X\",\n            \"X XXX X  XX XX X  XXXX      X   X    X XX XXX  XX XX    XX  X X XXX X\",\n            \"X XXX X X X  X X X  X XX  XXX  XXXXXXXXX X X  XXXX    XXX X X X XXX X\",\n            \"X     X X  X X   XX    XX X  XXXX   X X   X  X  XXX XXXX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"          X  XXXX  X X    X X X X   X  XXXXX X XXX  XX  X  X         \",\n            \" X  X X X X X     XX X  XX X  X XXXXX XXXXXXX  X  X XXX   X XX XX X  \",\n            \"X XX     X X X  XXX  XXXXXX XX   X X XX X X XXXXXX XX XXXXXX X XX  X \",\n            \"  XX  X   XXXXXX XXX  X  X XX X  XX  X   XX  X X   X   XXXXXXX  X   X\",\n            \"  X XX  XXXX XXX X X X  X XX X   X XXXXXX     X  XXXX X  XX XXXX  XX \",\n            \"      XXX  X  XX  X  X  XX   X XX    X XXXX   X XX  X  X X  XX XX  X \",\n            \"X X X     X  X  X   XX XX X  X X XX     X  X  XXX  X X  X  X    XX   \",\n            \"X  X XX  XX XXX XX XX XX  XX  X  XX      X XX  X   XXX X  XXX  X XXX \",\n            \"X XXXX XX XXXXXX X X X X XX X  X  XX   X  XX  XX XXX X XX X XXXXXXXX \",\n            \" XXX  X   X     XX    X XX X XXXXXXXX XXXX XX  X X XXXX XX  XX  XX X \",\n            \"XXXX   XXX  XXXXX  XX  XXXX XXX XX X XX  X  X X     X XXX X    XXXXXX\",\n            \"X XX XXXX   X  XX   X     XX  XXX X  X X XX     X       X X    XX   X\",\n            \" XX XX  X XXXX XX       X X  X   X XXXX X  X XX    XX X  XX    X XX  \",\n            \"XX   XXXXX  X XXX XXX X X  XXX    X  X  XX XXX  X XXX  X X XX X X  XX\",\n            \"X X X      XX  XXXXX X XXX XXX  X      XX   X  XXXX XX XXXX  XX  X XX\",\n            \"X  X XX  X  X XXXXXX XXX  X   X X       XXX   XX X   X XXX XXX X XXXX\",\n            \"X XXX  XX   XX   X   XXX XXX     XXX XX XXX XXXX XX X   XX XXXXX  X X\",\n            \" X X  X  X X XX  XX X XX   X XXX X XX X X X  X X X   X   XX  X XX    \",\n            \"  X  X XX         X XXXXX   XXXX  XXXXX    XX      X   X XXX   XXXX X\",\n            \"     XXXX    X  XXX XX  X XX XXX XX    X XXXX X X  XX   XXX    X     \",\n            \"X   X  X  XXX   XX  XX XX X     X   X  X  XXX  X   XX XX X X   X XXX \",\n            \" XX X XX XXXXXXX XXXXXX X  XXX  X X XXXXX  X  XX  XXX XXX  X  XX   XX\",\n            \"   XX  XXXX  XX X      X X XX    XXXXX XXX XXXX  XX XX  X X  XXX X XX\",\n            \"   XX X X X  XXX       X  X  XX  XXX XX XX  XXX XX   XX  XXX X  XXXXX\",\n            \"XX X   X XX XX X  X  XX  XXX X   XXX      X XXXXXX  XX    X  X    X X\",\n            \" XX XXXXX  X XXXXXX X X X   XXX XXXXX   X  X X X      X  X XXXXXX X  \",\n            \" X XX   XXX XXXXX XXX   X   XX  X   X  XXX XX   XX X XXX  XXX   X X X\",\n            \"X X X X X      X   XXX  XXXX   XX X XX   X XX X   XXXXXXXXXXX X X    \",\n            \"    X   XXX    XX    X  X    XXXX   X    X  X   XX  XX X    X   XX X \",\n            \"X X XXXXX X  XX X  XXXX X       XXXXX XX XX   X  X    XXX XXXXXXXXXXX\",\n            \"  X  X  X X   XX       X   X X XX    X    X XXXX   X    XXX  X  XX  X\",\n            \"XX  X XXX X XX   X  X  XX XX X XX    XX      XX   XXXX   X X  X  XX X\",\n            \"    X   XXX       X  XXX X  XX  X XXXXXX  XX   XX  X XX   X X X X XXX\",\n            \"X X  XX    X  XX   X  XX X X X  X XXXXXX   X XX  XXXXXX  X    X   X X\",\n            \" XXXXX   X  XX X X XX  X   XX  XXXX  XXX X  X XX  X    X  X XXXXX X  \",\n            \"XX XX X XXX  XX X   XXX   XX XX XX XXX X X  X     XX   XXX   X X    X\",\n            \"X XXXX  XX      X  XXX    XXX  XX X X  XXX  X  XXX  XX   XX X X  X X \",\n            \"XX XX XXX X  XX X    XXX X   XX  X  X XXXXXXXX X    X X  X X XXX XXX \",\n            \"  XX   XX X    XX  X XXX   X X XXX    X X X XX   X XXX X      X  X X \",\n            \"X XX XX X   XXXX X X  X XXXXXXXXX   X X     XX XX X XXXXX X   X XX XX\",\n            \"XXXX   XX      XX XX   X XXXX     X  XX X      XXX XXXX XXXXXXXXX X  \",\n            \"XXX X X XXX XXXX   XXXX X    XX   XXXXX  X X  XXX   XX   X XX       X\",\n            \"XX XXX  XX XXX X X  XX XXX  XX  XXXXXX X XXXXXX XX  X  XX  X   XX XX \",\n            \"XX X XX XXXXXXX XX  XX   XXX X  XX XXXXXXXXXXXX  XX X X X X XXXX X  X\",\n            \"X   X      X    X   XX XX XXX XXX X X XXXXXX  XX X X  X X  X  X    X \",\n            \"XXXXX X XX XXXX XXXXX XX X X   X X X   XXX XX    XXXX  X  X  XXX    X\",\n            \"  X      X X   XX XXXX XX XXXXX XX XXXX X   X X X  XXX XXXX XXX    XX\",\n            \"X XX XXX   XXXXX  XXXX X X       X       X     XX XX X  XXXX  X XXX X\",\n            \"XX X   X  XXX  XX   X XX  X  X X XXXXX  X X  X   XXXX X XXXXX  XX    \",\n            \"XXXXX X  X X XX  X XXXX XX XX  XX X XXX  X        XXX  X X XXX       \",\n            \"XX  XX   XX  X      X     X X X   X   XX X X  XX X X X  X  X XX  XXXX\",\n            \"X X XXXXXXX      X  X    XX XXX XX   XXXXXXXX    X X X X  X X X  XXXX\",\n            \"X       X  XXXXX X  X XXX XXXX  XX    X X  X XXX   XXX  X  X  XX XXXX\",\n            \"X  XX X XX X XXX  XXX X  X   XXXXXXXXXX  XXXX XX  X XXX   X XXXXXXX X\",\n            \"        XX   X   X XX    XX X  XX   XXXX    XXX  XX   XXXXXXX   X  X \",\n            \"XXXXXXX       X  XXXXXXXXXXXXX XX X X XXXXX  X  XX X     XXXX X X  X \",\n            \"X     X   XX   XX X XX XXX  X  XX   XX XX             X    XX   X XXX\",\n            \"X XXX X XX X  X X XX  X X  X   XXXXXXXX X X  X  X X X  X XX XXXXX  X \",\n            \"X XXX X  XX XXXXXXX X     X XXXX XX X X    X  XXXXXX X    XXXXX XXXXX\",\n            \"X XXX X  XX  XXX XX X X   X XXXX X   XXX  XXX XX X X X  X  X X X X   \",\n            \"X     X XXXX XXX   X X XX XXXX     XX XX  X    X XX XX XX    XX  XX  \",\n            \"XXXXXXX   X XXXX X XXXX  X  XXXXXXX XXXXXX    XX X   XXX XX XX X XX X\"\n        };\n        private static readonly string[] Modules141 = {\n            \"XXXXXXX  X X  XX X  X    X XX  XXXXX   X  XX XX XXXXX  X  XXXXXXX\",\n            \"X     X  XXX X  XX  XXX   X  X  X X   XXXX XXXXXX  XXX  X X     X\",\n            \"X XXX X   X XX   X X   XX X XX   X XX  XXXX   XXX XX XX X X XXX X\",\n            \"X XXX X  XXX  XX  XXX X  XXXX X    XX XX X  XX    XXXXXX  X XXX X\",\n            \"X XXX X X  XXXXX  X   XX  X  XXXXXXXXXX   X  XXXXX XX   X X XXX X\",\n            \"X     X     XXXXX XX  X  XX  XX   XXX X X X    XXXXXX X   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX     XXXX   X   X   X   X  X  X   X  XXX  XX XX        \",\n            \"  XX  XXXX     XXXXX X   XXXXXXXXXXXX  X X  XXXXXX   X XXXX X    \",\n            \"     X  XX X XX XXXX     X  XX   X XXXX X   X X XXX   XXXXXXX XXX\",\n            \" X X  XXXXXXX X X XXXX XX XXXX X   XXXXXXX X  XX   X   X  X  X XX\",\n            \"XX X   X XXXX X XXX  X      X  X  X X  X  XX    X X  X  XXX X X X\",\n            \"XX    X   X     XX X XX XXX X XX X  XXXXXX   X XX X XXX X  X  X X\",\n            \"XXXX   XXXXXXX X X  XXX  X    XXX  XXXXXXXXX XXX X XXXXX  XXX  XX\",\n            \"XX XX X X XX X XXXXXXX  X  X  X XX X   XX  XX  X X X X XX   X    \",\n            \"  XXXX   XXX    XXX XX  X   X  XXX X  X  XX XX X X X    XXXX    X\",\n            \"XX XX XXXX XXX    XX  X X    XXXXXX X    XXX X   X XX XXX  XX  XX\",\n            \" XX  X    XXX X XX X XXXXX   X XX XXX XX   X  X  XXXXX XX  XXXX X\",\n            \" X X  XX X    XX X XXX  XX   XX    XXXX X X X  X X XX  X  XX   XX\",\n            \"XX     X X X  X X       X X X X   X  X    X  X XXXX XX   X  X    \",\n            \"  XXXXXX X X  XXXX  XX X XX  XX   X XXXX    XX X    XX  XXX XX  X\",\n            \"X X X      XXXX XXXXXXXX X  XX  XXX X   X X  XXXXX      XXXXX  X \",\n            \" XXXXXX  X XXXX X XXX X XXX XXXX XXXX X X  XX XXX   X X X    XXXX\",\n            \"X  XXX X   XX  X XXX X  XX   X   XX X   XX    X X X   X   X   X  \",\n            \"X    XX X    XXX   XXX   XXX XX   X    XX X    X XX   X X     X X\",\n            \" XXX      X   X  XXXXX X   X  X  XX XXX  X XXXXXXX     X       X \",\n            \"XX XXXX X X XXXX X   X  X XXXX X X XXX XXX X   XXX  XXX  XX  X   \",\n            \"X   X  X   X  XX  X XX X XX      X  X  X  X X   X XXXXX X  XX XXX\",\n            \"XXX  XX  X X  XXXX X     XX X  XX    X XXX   XX XX XXXX X X  XXX \",\n            \" X XX  X X X   XXXX X  XX  X XX X     X  X   X  XXX   XXX      X \",\n            \"X X XXXXX XX X X  XXXXX  X X  XXXXXXX X X XX X X X XXXXXXXXXX XXX\",\n            \" XXXX   X   XX XX  XX XXXX   XX   XX  XXXX    XX XXX X XX   X  XX\",\n            \"X  XX X X   XXX  X      XX  X X X XX XXXXXXXXXX XX  XX XX X X XXX\",\n            \" XX X   XXX   XX XXXX X X XX  X   X  X XX  X X  X X  X XX   X X X\",\n            \"X XXXXXXXX X   X   X     X    XXXXX XX XX XXX XXXX   XX XXXXXX  X\",\n            \"  XX    X XX   X  X X  X X XX X  XXXXX  X  X XXX   XXX X    XXX X\",\n            \"      XXX  X X X XX X  X X XXX     X XX X   X    XXXX  X   X XX  \",\n            \"X X    XXXXX  X XX X     XXX X X XXX   X      X XX X XX XXXXX X  \",\n            \"  X X XX  XXXXX X X  X   X  X   X     X  XXXX XX XXX     XXXX    \",\n            \"X X    XX X XX  X  X   XX X     XXXX  X X X XXX XX  X  XXXXXX  X \",\n            \"XXX X XX      XX X  X XXXXX X XXXX   X  XX X X XXX  XX   X X XX  \",\n            \"X X      X X   XXX  XXXXXX X   X X XX  XXX  XX   XXXX XX   XX X  \",\n            \"XX X  X XX XXX  X XX  X XX X XX XXXX  XX X XXXX   XXX  X  X     X\",\n            \"XXXX X    XXX     X  XXXX  X  X   X X  XXX  XXXXX  X   X  X XX XX\",\n            \"  XXX XX  X XXXXX X XXXX  XXX X XXXXX X XX XX XXXX   XX X   XXX  \",\n            \" XXXXX XXXXX  X  X   X X  XXXX XXX X   X   XXXX X XXX   X XX XX  \",\n            \" XXXXXX   X    XX X X X XXX XX     XXX X X  X XXX   X  XXXXX  X X\",\n            \" X  X     X XXXX X    X XXX X  XX  X X  XXXX XX X    X XX X XXXXX\",\n            \" X  XXX         X  XXXX    XXXXXXXX XXX  XX X X  XX X XX  X    XX\",\n            \" XX  X  X   X    XX     XXX X   X X  XXXX X X X    XXXXX    X   X\",\n            \"  X   X XXX X  X  XX    X X  XXX XX   X  X X XXX XX  XX X   XX XX\",\n            \"XX     XXXXXX XXXX  X  X  XXXX X   X  XXX       X XX X   X  X XXX\",\n            \" X XXXX X X X   X  X XX  XXX  X XX X   X XXX X XX X XXXX X XX X X\",\n            \" XXX X   XXXXX XXX  XXX X  X X  X XXX X XX XX    XXXXXXXXX XXX  X\",\n            \"  XX XX       XX      X  X XXX  X X XX XX  XXX    X   XX XX XX XX\",\n            \"X  X   X X    XX XX  X  X  XX   X XX     XX  X XX X X XXXX       \",\n            \" XX X X   X   XX X X  X   X  XXXXXXX X  X XXXX X     XX XXXXX XX \",\n            \"        X   XX XXX XX XX  X  XX   X X XXXX X XX X  X   XX   XXXXX\",\n            \"XXXXXXX X  XXXXXXX  X  X  X X X X XX X    X  X X XX X XXX X XX XX\",\n            \"X     X  XX XX X X XX  X     XX   XXX  X  X XX   XX   X X   X XXX\",\n            \"X XXX X  XX  XX XXX  XXXX X  XXXXXX   XX X  XXX  X   XX XXXXX XX \",\n            \"X XXX X X XX   X XX       X XXX XX XXX XX  X XX X      XXXXX XX  \",\n            \"X XXX X X  X X   X X X XXX    X X   XXXX  X X X X X XXXXX X X X X\",\n            \"X     X   XX XXXXX   X XX X       X  XX  XXX     X XXX    XXX XX \",\n            \"XXXXXXX  X      X X XXXXX X XX   X XX X XX   XX   XX   XX X    X \"\n        };\n        private static readonly string[] Modules142 = {\n            \"XXXXXXX  X X X   X     XX   X   X XX  XX X XXX   X X X   XXX  X       XXXXXXX\",\n            \"X     X XXXXXXXX XXXX   X X   X        XXXX X X   XXXX  XX  XXXX  X X X     X\",\n            \"X XXX X  XXX  XXXX      X XXXX XX XX      X X     XX   XX       XX  X X XXX X\",\n            \"X XXX X  XXXX     X XX XX   X X X X XXXX   XX XXX X  X X XX X XX X  X X XXX X\",\n            \"X XXX X  X  X         X XXXXX X X  X X XXX  XXXXXXXXXXX  X       XXXX X XXX X\",\n            \"X     X XXXXX X X XXXXXXX   XXX  X  X         X   X XX  XX  X XX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX  XXXXXX X XX X   XXXXXXXXXXX    X XX   XX   XX XX                 \",\n            \"    XXXX  XX  X XX   X  XXXXXXX X X  X X  X  XXXXXXXXXX X  X     X X  XX   X \",\n            \" X X X X  X  XX  X     X X X X  X XX XXX X XX XXX X    XXX    XX X     XXXX  \",\n            \" X X  XXXX  XX  X    XX X  XXX XX X XXX    X X  XX  XX X  XXX   X XXXX XXX   \",\n            \"  X X  XX XX  XXXX       X  XX X   X XX   XX  XXXXX X  XXX X   XXX     XX  X \",\n            \"    XXX X X   XXXX XX XXXX XX XX   X    XXXXX XXX XX X   XXX X X  XXXXXX  XXX\",\n            \"XXX X       XX     X  XXXX  X XX  XX X XXX  XXX  X X XXXXX  X X  X  X XXXXXX \",\n            \"  X   X X X  X X   XX  X X XX  XX XX X XXXX   XXX XX XXX XX X   X X X      XX\",\n            \"   X   XXXX X  XXX XXXXX   XX XXXXXXXXX  XX  X   XXX X XXX    X    X XXXX X X\",\n            \"   X XXX X X XX XXXX X  X  X   XXXX  XXX   XX X XX X  X  XXX    X  XX  X XX  \",\n            \" XXX X X X    X  X  X  X X X  X XX X XXX  X X      X    XXX X XXXXX XX XX X  \",\n            \"  X   X   X X X XX  XXX XXXXXXXXX   X     X   XXXX X X X XXX X X  X XXX XXX  \",\n            \"XXX X  X XXX XXX  X    X X  X XX   X X  X   X XXXXXXX XXX   X XXXX X  XXX XX \",\n            \" XX XXXXX X   X XX X  XXXXXXXXXX X X XX XXXX    X X XX   XXXXX XX   XXX X XXX\",\n            \"  X X   X   XX    XX  X  X  X  X XXX X XX   X     X  XX  X X    XXX X XXXX X \",\n            \"  XX  X X X  XXXX       X  XXX XX XX X  X XX XX    XXXXX X X X XX XXX  X X XX\",\n            \"            XX X  XXX XXXXXXXX XX XXXXXXXXXX  XXX  X X  XXX XX X X   XXXXX  X\",\n            \"   XXXXXXX X X  XX XX XXXXXXXX XXX   XXX XX  XXXXXXX  X      XXX   XXXXXXX   \",\n            \"XX XX   X    X XX     XXX   X X XXXX   X    X X   XXX   X XXX XXXXX X   X    \",\n            \"X X X X XXX XXX  XXX X  X X X XXX   X     X   X X X  X XXXX       XXX X XXX  \",\n            \"XX  X   XXXX      X XXXXX   XXXX XX X    X    X   XXX XX    XX XXX  X   XXXX \",\n            \"   XXXXXXX   XX  XX XX XXXXXX XX X  XX     XXXXXXXX XX   XXXX   X X XXXXXXXXX\",\n            \" XX XX XXX X  X XXX  X XX  X XXX XXXX X XXX  XX  X   XXXXX XX X  X     XXXXX \",\n            \"X  X  X  X   X X XXXX  XXX  X  XXXX XXX  XXXX X X  XXXX  X    XXX XX  X    X \",\n            \"X  XX  X X    X X XXX XXXX XX XXX  XXXX  X  XXXX  XX X XXXXXX  X     XX  X  X\",\n            \"X     XXX X XX XX  X  XXXX X XXXXX X  XX XX XXX XXXX  XXX  XXXXX    XX   X XX\",\n            \"XX X X   XX  XX X    X  X XXXX  X    XXX   X X  X  XX  XX XX X XXXXXXXXX X XX\",\n            \"XXX  XXXX XX   XX  X XX X  XX  XXXX X  X  X   XXXXX  X  XXX X     X  X   X X \",\n            \"XX      X XXXXXXXX XX XXX    X XX  XXXXX X  X X  XXXX XX   X XXXX  XX    XX X\",\n            \"X  XX XXXXXXX    XX  X    XXXX  XXXXX XX    X XXXXX XX   XX     XX X     X  X\",\n            \" XX  X  XX X X  X  XXX X  X X XXXX XXX   X XX   X X  XXXXX  X X  XX      X   \",\n            \"XX X  X X XX  X      XX  X X X X     XX  XX XXXX   XX XX X X  XXXXXX  X   XX \",\n            \"   XX    X     XX XXX   XX  X  X XXXX XX  XXX   X  X X  XXXXX  X X   XXX XXXX\",\n            \"X   X XXXXXXX  X   XX XXXX XX X   XX         X  X XX    X  XXXXX  X XX X X  X\",\n            \" X XXX   XXX XX XXX XXX XX XX  X XXX XX   X X   X  XX     XX X XX  XXX XXXX X\",\n            \"  X X X XX  XXXXXX XXX   XX   XXX X  X  XX   XXX      XXXXX X    X     XXX X \",\n            \"    X   XX    XX      X  XXX XX XXX X  XXXXXX X  X XX    X X XXXX XXXX X XXXX\",\n            \"XX X XX X XXX  XXXX  X  XXXXXX X   XXX  XXX XX  X X X  X XX     XX X XX  X XX\",\n            \"  X    XXX XXXX X X  X X          XXX XX  XX XXXX X    XXXX X X  XX  XXX     \",\n            \"XX XXXXXXX  XXXXXX XX X XXXXXX XXX XX   X X  XXXXXXXX X  XXX  XXXXXXXXXXXXXX \",\n            \"   XX   X  XXXXX XX XXXXX   X  XXX  X  X   X XX   XX    X  XX   XX  X   XXXXX\",\n            \"X   X X XXXX X X   XXXX X X X X XXX X XX  XXX X X XX XX X  XXXXX  XXX X XX   \",\n            \" X XX   X  XX XX XX XX XX   X   XXXXXX X XX  XX   XXXX    XX X     XX   XXX X\",\n            \"  XXXXXXXX XX  XX   X  XXXXXX X XXXX XX  XX XXXXXXX  X XX   X   XX XXXXXX  X \",\n            \"   X X   X  X X XXX XXXXX    XXXX  XXX  X XX    XX XX      X XXXX X    XXXX  \",\n            \"XX XX X XX X   XXX X X X X XXX  XX XXXX X X XX  XX  XX X       XXX X  X  X X \",\n            \"  X     X X  X    XX  XXX XXX   X X  X XXX X  XX     X XXX  X   XXXXXXXX     \",\n            \"XXX   XXXXX XXX   XXXX  XXX  X XX  XX      XXXX  XXXX    XXX X X XXXX     XX \",\n            \"  X          X   X  XXXXX  X     X  XX    X X XX   X  X XXX XXX XX  X  X XXXX\",\n            \"X  X XXXXXXXX X  X  XXXX  X X X  XXX    X  X X XX XX  X X XXXXXXX X   X  X XX\",\n            \" X XX   X  XX X X  XX    XXXX    XX X X X XXX   X XXXXX  XX XX XX  XXXXX  XXX\",\n            \"  XX XXXXX XX X  XX    XXXX   X  XXX  XX  XXXXX  X   X XX X  XXXXX XX       X\",\n            \"   XXX XXX  XX    XX XXXXX   XXX   X XXXX  XXXX  X XXX      X   X XXXXXX XXXX\",\n            \"XXXXXXX  X  XX XXX XX   X X  X  XX XX    XXXXX  XX  XXXX   XXXXXX  XXX   X  X\",\n            \"  XX    X X XX XX XX   XXXXXX  XX X  XX X XX         X XX X X   XX XXXXX XX X\",\n            \"XXX X X  XXX XX X    X X   X X XX  X     X       XXXXX    X    X  XX X X X XX\",\n            \"  X    XX    X XX XX X  X    X X X  XX XXX XXX  X  X   X XX XX XX  X    X   X\",\n            \"X X XXX XXXX  XXX  XXX    X   XXXXX     XXX XXX   XX  X    XX XXX X   X X X X\",\n            \"XXXXX  XX   X X       X   X   X  XX   X X  XX X X XXXXXX X XX     XXXX X    X\",\n            \" X  XXXXXX  X X X XX   XXX   XXX XX X X   X  X  XX      XXXX XX XXXX X XX X X\",\n            \"    X   XX  XX X  X   XXX XX  XX   X XX X  XX  X X XX XX  X XX XX X  XX XXXXX\",\n            \" XXXX X  X   X X   XXXX XXXXX   XX XX   X  XX XXXXX X X  XXXX  XX   XXXXXXXX \",\n            \"        X XX X  XXXX XX X   X XXX XX XX X  X  X   X  XX XX XX X XXXXX   XXX X\",\n            \"XXXXXXX X X XXX   X  X  X X XXX X   X   X    XX X XXX  X  X   XX  XXX X XX X \",\n            \"X     X XX  XX    XX  XXX   X  XX   XX   X XXXX   XX X X X  X   X   X   X    \",\n            \"X XXX X X  X  X X  XXXX XXXXXXXXXXXXX   XXX X XXXXXX X   XXX XXX  X XXXXX XX \",\n            \"X XXX X   XX  X X        XXXXXX   X X XX   XXX XXX XXX   XXXX X XX  X XXX    \",\n            \"X XXX X  XX   X   XX  X   XX  X XX  X XXX X    X XX XX  X X  XXXX  X X X  XXX\",\n            \"X     X    XXX    X  XX  X  X     XX XX X  XXXX    XXXX   X X    X XX X  XXXX\",\n            \"XXXXXXX  XX  X X   XX XXX XX XX XX  X   X  XX XX   XX   XX X       X    XXXX \"\n        };\n        private static readonly string[] Modules143 = {\n            \"XXXXXXX  X X X   X     XX   X   X XX  XX X XXX   X X X   XXX  X       XXXXXXX\",\n            \"X     X XXXXXXXX XXXX   X X   X        XXXX X X   XXXX  XX  XXXX  X X X     X\",\n            \"X XXX X  XXX  XXXX      X XXXX XX XX      X X     XX   XX       XX  X X XXX X\",\n            \"X XXX X  XXXX     X XX XX   X X X X XXXX   XX XXX X  X X XX X XX X  X X XXX X\",\n            \"X XXX X  X  X         X XXXXX X X  X X XXX  XXXXXXXXXXX  X       XXXX X XXX X\",\n            \"X     X XXXXX X X XXXXXXX   XXX  X  X         X   X XX  XX  X XX XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXXXXXX\",\n            \"        XX  XXXXXX X XX X   XXXXXXXXXXX    X XX   XX   XX XX                 \",\n            \"    XXXX  XX  X XX   X  XXXXXXX X X  X X  X  XXXXXXXXXX X  X     X X  XX   X \",\n            \" X X X X  X  XX  X     X X X X  X XX XXX X XX XXX X    XXX    XX X     XXXX  \",\n            \" X X  XXXX  XX  X    XX X  XXX XX X XXX    X X  XX  XX X  XXX   X XXXX XXX   \",\n            \"  X X  XX XX  XXXX       X  XX X   X XX   XX  XXXXX X  XXX X   XXX     XX  X \",\n            \"    XXX X X   XXXX XX XXXX XX XX   X    XXXXX XXX XX X   XXX X X  XXXXXX  XXX\",\n            \"XXX X       XX     X  XXXX  X XX  XX X XXX  XXX  X X XXXXX  X X  X  X XXXXXX \",\n            \"  X   X X X  X X   XX  X X XX  XX XX X XXXX   XXX XX XXX XX X   X X X      XX\",\n            \"   X   XXXX X  XXX XXXXX   XX XXXXXXXXX  XX  X   XXX X XXX    X    X XXXX X X\",\n            \"   X XXX X X XX XXXX X  X  X   XXXX  XXX   XX X XX X  X  XXX    X  XX  X XX  \",\n            \" XXX X X X    X  X  X  X X X  X XX X XXX  X X      X    XXX X XXXXX XX XX X  \",\n            \"  X   X   X X X XX  XXX XXXXXXXXX   X     X   XXXX X X X XXX X X  X XXX XXX  \",\n            \"XXX X  X XXX XXX  X    X X  X XX   X X  X   X XXXXXXX XXX   X XXXX X  XXX XX \",\n            \" XX XXXXX X   X XX X  XXXXXXXXXX X X XX XXXX    X X XX   XXXXX XX   XXX X XXX\",\n            \"  X X   X   XX    XX  X  X  X  X XXX X XX   X     X  XX  X X    XXX X XXXX X \",\n            \"  XX  X X X  XXXX       X  XXX XX XX X  X XX XX    XXXXX X X X XX XXX  X X XX\",\n            \"            XX X  XXX XXXXXXXX XX XXXXXXXXXX  XXX  X X  XXX XX X X   XXXXX  X\",\n            \"   XXXXXXX X X  XX XX XXXXXXXX XXX   XXX XX  XXXXXXX  X      XXX   XXXXXXX   \",\n            \"XX XX   X    X XX     XXX   X X XXXX   X    X X   XXX   X XXX XXXXX X   X    \",\n            \"X X X X XXX XXX  XXX X  X X X XXX   X     X   X X X  X XXXX       XXX X XXX  \",\n            \"XX  X   XXXX      X XXXXX   XXXX XX X    X    X   XXX XX    XX XXX  X   XXXX \",\n            \"   XXXXXXX   XX  XX XX XXXXXX XX X  XX     XXXXXXXX XX   XXXX   X X XXXXXXXXX\",\n            \" XX XX XXX X  X XXX  X XX  X XXX XXXX X XXX  XX  X   XXXXX XX X  X     XXXXX \",\n            \"X  X  X  X   X X XXXX  XXX  X  XXXX XXX  XXXX X X  XXXX  X    XXX XX  X    X \",\n            \"X  XX  X X    X X XXX XXXX XX XXX  XXXX  X  XXXX  XX X XXXXXX  X     XX  X  X\",\n            \"X     XXX X XX XX  X  XXXX X XXXXX X  XX XX XXX XXXX  XXX  XXXXX    XX   X XX\",\n            \"XX X X   XX  XX X    X  X XXXX  X    XXX   X X  X  XX  XX XX X XXXXXXXXX X XX\",\n            \"XXX  XXXX XX   XX  X XX X  XX  XXXX X  X  X   XXXXX  X  XXX X     X  X   X X \",\n            \"XX      X XXXXXXXX XX XXX    X XX  XXXXX X  X X  XXXX XX   X XXXX  XX    XX X\",\n            \"X  XX XXXXXXX    XX  X    XXXX  XXXXX XX    X XXXXX XX   XX     XX X     X  X\",\n            \" XX  X  XX X X  X  XXX X  X X XXXX XXX   X XX   X X  XXXXX  X X  XX      X   \",\n            \"XX X  X X XX  X      XX  X X X X     XX  XX XXXX   XX XX X X  XXXXXX  X   XX \",\n            \"   XX    X     XX XXX   XX  X  X XXXX XX  XXX   X  X X  XXXXX  X X   XXX XXXX\",\n            \"X   X XXXXXXX  X   XX XXXX XX X   XX         X  X XX    X  XXXXX  X XX X X  X\",\n            \" X XXX   XXX XX XXX XXX XX XX  X XXX XX   X X   X  XX     XX X XX  XXX XXXX X\",\n            \"  X X X XX  XXXXXX XXX   XX   XXX X  X  XX   XXX      XXXXX X    X     XXX X \",\n            \"    X   XX    XX      X  XXX XX XXX X  XXXXXX X  X XX    X X XXXX XXXX X XXXX\",\n            \"XX X XX X XXX  XXXX  X  XXXXXX X   XXX  XXX XX  X X X  X XX     XX X XX  X XX\",\n            \"  X    XXX XXXX X X  X X          XXX XX  XX XXXX X    XXXX X X  XX  XXX     \",\n            \"XX XXXXXXX  XXXXXX XX X XXXXXX XXX XX   X X  XXXXXXXX X  XXX  XXXXXXXXXXXXXX \",\n            \"   XX   X  XXXXX XX XXXXX   X  XXX  X  X   X XX   XX    X  XX   XX  X   XXXXX\",\n            \"X   X X XXXX X X   XXXX X X X X XXX X XX  XXX X X XX XX X  XXXXX  XXX X XX   \",\n            \" X XX   X  XX XX XX XX XX   X   XXXXXX X XX  XX   XXXX    XX X     XX   XXX X\",\n            \"  XXXXXXXX XX  XX   X  XXXXXX X XXXX XX  XX XXXXXXX  X XX   X   XX XXXXXX  X \",\n            \"   X X   X  X X XXX XXXXX    XXXX  XXX  X XX    XX XX      X XXXX X    XXXX  \",\n            \"XX XX X XX X   XXX X X X X XXX  XX XXXX X X XX  XX  XX X       XXX X  X  X X \",\n            \"  X     X X  X    XX  XXX XXX   X X  X XXX X  XX     X XXX  X   XXXXXXXX     \",\n            \"XXX   XXXXX XXX   XXXX  XXX  X XX  XX      XXXX  XXXX    XXX X X XXXX     XX \",\n            \"  X          X   X  XXXXX  X     X  XX    X X XX   X  X XXX XXX XX  X  X XXXX\",\n            \"X  X XXXXXXXX X  X  XXXX  X X X  XXX    X  X X XX XX  X X XXXXXXX X   X  X XX\",\n            \" X XX   X  XX X X  XX    XXXX    XX X X X XXX   X XXXXX  XX XX XX  XXXXX  XXX\",\n            \"  XX XXXXX XX X  XX    XXXX   X  XXX  XX  XXXXX  X   X XX X  XXXXX XX       X\",\n            \"   XXX XXX  XX    XX XXXXX   XXX   X XXXX  XXXX  X XXX      X   X XXXXXX XXXX\",\n            \"XXXXXXX  X  XX XXX XX   X X  X  XX XX    XXXXX  XX  XXXX   XXXXXX  XXX   X  X\",\n            \"  XX    X X XX XX XX   XXXXXX  XX X  XX X XX         X XX X X   XX XXXXX XX X\",\n            \"XXX X X  XXX XX X    X X   X X XX  X     X       XXXXX    X    X  XX X X X XX\",\n            \"  X    XX    X XX XX X  X    X X X  XX XXX XXX  X  X   X XX XX XX  X    X   X\",\n            \"X X XXX XXXX  XXX  XXX    X   XXXXX     XXX XXX   XX  X    XX XXX X   X X X X\",\n            \"XXXXX  XX   X X       X   X   X  XX   X X  XX X X XXXXXX X XX     XXXX X    X\",\n            \" X  XXXXXX  X X X XX   XXX   XXX XX X X   X  X  XX      XXXX XX XXXX X XX X X\",\n            \"    X   XX  XX X  X   XXX XX  XX   X XX X  XX  X X XX XX  X XX XX X  XX XXXXX\",\n            \" XXXX X  X   X X   XXXX XXXXX   XX XX   X  XX XXXXX X X  XXXX  XX   XXXXXXXX \",\n            \"        X XX X  XXXX XX X   X XXX XX XX X  X  X   X  XX XX XX X XXXXX   XXX X\",\n            \"XXXXXXX X X XXX   X  X  X X XXX X   X   X    XX X XXX  X  X   XX  XXX X XX X \",\n            \"X     X XX  XX    XX  XXX   X  XX   XX   X XXXX   XX X X X  X   X   X   X    \",\n            \"X XXX X X  X  X X  XXXX XXXXXXXXXXXXX   XXX X XXXXXX X   XXX XXX  X XXXXX XX \",\n            \"X XXX X   XX  X X        XXXXXX   X X XX   XXX XXX XXX   XXXX X XX  X XXX    \",\n            \"X XXX X  XX   X   XX  X   XX  X XX  X XXX X    X XX XX  X X  XXXX  X X X  XXX\",\n            \"X     X    XXX    X  XX  X  X     XX XX X  XXXX    XXXX   X X    X XX X  XXXX\",\n            \"XXXXXXX  XX  X X   XX XXX XX XX XX  X   X  XX XX   XX   XX X       X    XXXX \"\n        };\n        private static readonly string[] Modules144 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   X   X XXX X\",\n            \"X XXX X X X   X XXX X\",\n            \"X     X  XX X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X XX         \",\n            \"  XX  XXX X XXX X    \",\n            \"  X X  XX X  XXX  X  \",\n            \"X X   XXXX  X XXXX  X\",\n            \"XXXXX    XX        X \",\n            \" X XX X XXX X X X X X\",\n            \"        X  X   X  X X\",\n            \"XXXXXXX X       X XX \",\n            \"X     X    XX X  X   \",\n            \"X XXX X  XXXXX   X  X\",\n            \"X XXX X X X XXX X  X \",\n            \"X XXX X XXXX  X XXX  \",\n            \"X     X       X XX XX\",\n            \"XXXXXXX    XXX X X X \"\n        };\n        private static readonly string[] Modules145 = {\n            \"XXXXXXX   X   X   X   X   XXXXXXX\",\n            \"X     X  X   X   X   X    X     X\",\n            \"X XXX X X  X   X   X   X  X XXX X\",\n            \"X XXX X  X  XX  XX  XX  X X XXX X\",\n            \"X XXX X  X  XX  XX  XX  X X XXX X\",\n            \"X     X   XXX XXX XXX XXX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X  X   X   X   X         \",\n            \"XXX XXXXX   X   X   X   XXX   X  \",\n            \"   X    XX XXX XXX XXX XXX  X X  \",\n            \"X  X XXX  XXX XXX XXX XXX X     X\",\n            \"X  XX   XXX XXX XXX XXX X   X X  \",\n            \"XXX   X   XX  XX  XX  XX  XXX X X\",\n            \" X XXX  XXXX  XX  XX  XX   X X X \",\n            \"XX XX XX X   X   X   X   X XXXXX \",\n            \"XX XX  X X X   X   X   X XXX X XX\",\n            \"  XXX XX  X X   X   X   XX  XXXX \",\n            \" X  XX XX  XXX XXX XXX XXX  X XX \",\n            \" XX XXX  XXXX XXX XXX XXX X     X\",\n            \"  XX      X XXX XXX XXX X   X XX \",\n            \"    X X  X X  XX  XX  XX  XXX X X\",\n            \"   X X XXXXX  XX  XX  XX   X X X \",\n            \"X  XX X X    X   X   X   X XXXX X\",\n            \" X XXX  X  X   X   X   X XXX X X \",\n            \"X XXX X X   X   X   X   XXXXXXX  \",\n            \"        XX XXX XXX XXX XX   X XX \",\n            \"XXXXXXX XX XX XXX XXX X X X X   X\",\n            \"X     X XX  XXX XXX XXX X   X XX \",\n            \"X XXX X XX X  XX  XX  XXXXXXX X X\",\n            \"X XXX X  XXX  XX  XX  XXX XX X X \",\n            \"X XXX X XX   X   X   X X  XX XX X\",\n            \"X     X XXXX   X   X     X XXX   \",\n            \"XXXXXXX XX  X   X   X   XXXX XX X\"\n        };\n        private static readonly string[] Modules146 = {\n            \"XXXXXXX  XXX XXX XXX XXX  XXXXXXX\",\n            \"X     X    XX  X  XX   XX X     X\",\n            \"X XXX X  XXX  X X  XXXXX  X XXX X\",\n            \"X XXX X X XX  XX  XX  XX  X XXX X\",\n            \"X XXX X X X XXXX X    X X X XXX X\",\n            \"X     X  XX  XX XX  XXX   X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         X  XX   XX  X  X        \",\n            \"XX   XXX XX X XX     XX X   XX   \",\n            \"XXX XX X  X   X   X   X   XX X XX\",\n            \"X X XXXXXX XX     XX X XX  XX    \",\n            \" X  XX XX XX  XXX  XX XX X XXX X \",\n            \"X XX XXX XX  XX  XX  XX  XX XXXXX\",\n            \"X   X  XX X XXX  X   XX XX    X  \",\n            \"XXX   XXX X  XXXXX  X X  XX  XXXX\",\n            \"  X  X  X X XXX XXX XXX X   X X  \",\n            \"      XXXX  X XX     XX XXXX XXXX\",\n            \"X  XX   XX      X X X      XXX   \",\n            \"  XXX XX  X XXX XXX XXX XXXX X XX\",\n            \"XXX  X X XXX  XXX  XX XX X XXX   \",\n            \"  XX  X X XX    X XXXX X      X  \",\n            \"XXX X       XX  XX  XX  XXX X X X\",\n            \"X X   X  XX  XXXXX  X X  XX  XX  \",\n            \"X   X  XXX  XX   XX  X  X X   X  \",\n            \"XXX XXXXXX XXX XXX XXX XXXXXX XX \",\n            \"        X       X X X   X   XX   \",\n            \"XXXXXXX X XXX     XX X  X X X    \",\n            \"X     X X XX   X   X   XX   XX  X\",\n            \"X XXX X   XX    X XXXX XXXXXX X  \",\n            \"X XXX X   X XXX  X   XX  XX   X  \",\n            \"X XXX X    X   X   X     XX   XXX\",\n            \"X     X X X XX   XX  X XX   X XX \",\n            \"XXXXXXX X X X XX     XX XX  XXX  \"\n        };\n        private static readonly string[] Modules147 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   X   X XXX X\",\n            \"X XXX X X X   X XXX X\",\n            \"X     X  XX X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X XX         \",\n            \"  XX  XXX X XXX X    \",\n            \"  X X  XX X  XXX  X  \",\n            \"X X   XXXX  X XXXX  X\",\n            \"XXXXX    XX        X \",\n            \" X XX X XXX X X X X X\",\n            \"        X  X   X  X X\",\n            \"XXXXXXX X       X XX \",\n            \"X     X    XX X  X   \",\n            \"X XXX X  XXXXX   X  X\",\n            \"X XXX X X X XXX X  X \",\n            \"X XXX X XXXX  X XXX  \",\n            \"X     X       X XX XX\",\n            \"XXXXXXX    XXX X X X \"\n        };\n        private static readonly string[] Modules148 = {\n            \"XXXXXXX  XX XXX  XX  XX   XXXXXXX\",\n            \"X     X XX XX X   X   X   X     X\",\n            \"X XXX X   X  XXX XXX XXX  X XXX X\",\n            \"X XXX X  XXXXXX XXX XXX X X XXX X\",\n            \"X XXX X X XX  X X X X X X X XXX X\",\n            \"X     X     XX XXX XXX XX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XX  XXX XXX XXX         \",\n            \"X X X X  X XX X   X   X     X  X \",\n            \" X   X  XXXX XXX XXX XXX X  XX X \",\n            \"X XXXXX X XXX X   X   X  X    XX \",\n            \" XXXX  XX XXXXXX XXX XXX XX XX XX\",\n            \"X XXXXX X X   X X X X X XX XX XX \",\n            \"X  XXX   XX   XXX XXX XXXX X X X \",\n            \"      XX XX XXXXXX XXX XX XXXXX X\",\n            \"XXXXX  XX   X X X   X   X  X X X \",\n            \"XXXXXXXXXXX    XX  XX  XX XXXXX  \",\n            \" XX X  X XXX   XX  XX  XX  X  X  \",\n            \"X XX XX X    XXXXX XXX XX XXX   X\",\n            \"XXXX X XXXX     X   X   X  X  X  \",\n            \"X XX XX X XXX XX   X   X  X X X X\",\n            \" XX XX  X  X   X X X X X    X XX \",\n            \"X  X XXXX XXXX    X   X  X      X\",\n            \" XX  X X XX  X X XXX XXX XX X XX \",\n            \"X  XXXX XXXX      X   X XXXXX X X\",\n            \"        XX XX XX XXX XX X   XX X \",\n            \"XXXXXXX   X   X   X   X X X XXXX \",\n            \"X     X       XX XXX XXXX   XX XX\",\n            \"X XXX X X X  X  X X X X XXXXXXXX \",\n            \"X XXX X  X  XXXXX XXX X   XX X X \",\n            \"X XXX X X    X XXX XXX  X XX XX X\",\n            \"X     X  XX   X X   X  X  XXXX   \",\n            \"XXXXXXX XX  X  XX  XX  X   X XX X\"\n        };\n        private static readonly string[] Modules149 = {\n            \"XXXXXXX   XXX XX  XX  XX  XXXXXXX\",\n            \"X     X X    XXX X X XXXX X     X\",\n            \"X XXX X XX   X  XXXXX  X  X XXX X\",\n            \"X XXX X X      X   X   X  X XXX X\",\n            \"X XXX X  X X   X  X  X  X X XXX X\",\n            \"X     X  X X    X X X     X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X XXX X       X X        \",\n            \"X     X X XXX  XX X XX   XX  XXX \",\n            \"X XXX  X    X   X   X   X XX  X X\",\n            \"X    XX  X XX  XX X XX   XXXX XXX\",\n            \"X X XX  XXX   X       X X XXX X X\",\n            \"XXX X XXXXXX XXXXXXXXXXXX   XXX  \",\n            \" X  X  X  XXXXX XX  XXX       X  \",\n            \"  XXX XXX   XX   X X  XXX    XX  \",\n            \"     X   XXX X X XXX XXX XX X X X\",\n            \"XX   XXX      X    X XXXX    XX X\",\n            \"X XXXX    X XX  XXX XX   X   X X \",\n            \"XXX   XXXX X  X X   X   XXX XX XX\",\n            \"  X     X XXXX XXXXXXX X X   X X \",\n            \"X   XXX  X XX   X  XXXXX   X  X  \",\n            \"X  X   X XX XXX X X X X XXXX X  X\",\n            \"X X XXXX X XXXXXX X XX   XXXX    \",\n            \"X XX      XXX         X X XXXX   \",\n            \"XX  X XXX X  X X XXX XXXXXXXXXXXX\",\n            \"        X    XX       XXX   X X  \",\n            \"XXXXXXX  X     XX X XX  X X XXXXX\",\n            \"X     X  XXXXX  X   X   X   X X  \",\n            \"X XXX X  X   XXX  X  X  XXXXXXXXX\",\n            \"X XXX X    X  X XX  XXXXXXX   X  \",\n            \"X XXX X  X X    X   X  XXXX   XXX\",\n            \"X     X   XXXXXXXXXXXX  XXX X XX \",\n            \"XXXXXXX X X X X    X XXX  X XXX  \"\n        };\n        private static readonly string[] Modules150 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   X   X XXX X\",\n            \"X XXX X X X   X XXX X\",\n            \"X     X  XX X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X XX         \",\n            \"  XX  XXX X XXX X    \",\n            \"  X X  XX X  XXX  X  \",\n            \"X X   XXXX  X XXXX  X\",\n            \"XXXXX    XX        X \",\n            \" X XX X XXX X X X X X\",\n            \"        X  X   X  X X\",\n            \"XXXXXXX X       X XX \",\n            \"X     X    XX X  X   \",\n            \"X XXX X  XXXXX   X  X\",\n            \"X XXX X X X XXX X  X \",\n            \"X XXX X XXXX  X XXX  \",\n            \"X     X       X XX XX\",\n            \"XXXXXXX    XXX X X X \"\n        };\n        private static readonly string[] Modules151 = {\n            \"XXXXXXX X X  X  XXX  XX   XXXXXXX\",\n            \"X     X X XX   XX X   X   X     X\",\n            \"X XXX X XX  XX X XXX XXX  X XXX X\",\n            \"X XXX X X  X   X XX XXX X X XXX X\",\n            \"X XXX X X X XXXX  X X X X X XXX X\",\n            \"X     X   XXX  XXX XXX XX X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        X X   XXXXXX XXX         \",\n            \" XX X XX XXX XX   X   X   X XXXXX\",\n            \" XX  X XXX XX XX XXX XXX X  XX X \",\n            \" X X XX   XXXXX   X   X  X    XX \",\n            \"X X X   X XX X X XXX XXX XX XX XX\",\n            \"     XX   XXX     X X X XX XX XX \",\n            \"X X X   X  XX XXXXXXX XXXX X X X \",\n            \"X   X X  X  X  X X XXX XX XXXXX X\",\n            \"   XXX     X X      X   X  X X X \",\n            \"X XX XXX    X X  X XX  XX XXXXX  \",\n            \" X X    X XXXX   XXXX  XX  X  X  \",\n            \"XXX XXX   X     XXXXXX XX XXX   X\",\n            \"XXX      X X XXXXX  X   X  X  X  \",\n            \"XXXXXXX X XXXX XXXXX   X  X X X X\",\n            \" X X       X XX XX X X X    X XX \",\n            \"X  XXXXXX XXX XX      X  X      X\",\n            \" XXX X XXX   X X X X XXX XX X XX \",\n            \"X XX XXXXX X XX   X   X XXXXX X X\",\n            \"        XXX XX  XX X XX X   XX X \",\n            \"XXXXXXX X  X XX  X    X X X XXXX \",\n            \"X     X  XX   X X  X XXXX   XX XX\",\n            \"X XXX X XX  X  X X  X X XXXXXXXX \",\n            \"X XXX X    X X    XXX X   XX X X \",\n            \"X XXX X X X   X XXXXXX  X XX XX X\",\n            \"X     X X      X X  X  X  XXXX   \",\n            \"XXXXXXX  XXX XX    XX  X   X XX X\"\n        };\n        private static readonly string[] Modules152 = {\n            \"XXXXXXX XXXX   XX XX  XX  XXXXXXX\",\n            \"X     X XXX XX  XX X XXXX X     X\",\n            \"X XXX X   X XXX XXXXX  X  X XXX X\",\n            \"X XXX X  XX XXX X  X   X  X XXX X\",\n            \"X XXX X  X  XX  X X  X  X X XXX X\",\n            \"X     X  XX  X  X X X     X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"         XXXXXX X     X X        \",\n            \" X    XXX  X X XX X XX   X     XX\",\n            \"X  XX     X  X  X   X   X XX  X X\",\n            \" XX XXX XX XXX XX X XX   XXXX XXX\",\n            \" XXXXX XXXX X         X X XXX X X\",\n            \" X X  XX XX XX X XXXXXXXX   XXX  \",\n            \" XXXXX XXX   XX X   XXX       X  \",\n            \"X XX  X X X X X XX X  XXX    XX  \",\n            \"XXX    XXXX X XXXXXX XXX XX X X X\",\n            \"X   XXXXXXX X  XXX X XXXX    XX X\",\n            \"X    X XXXX    X    XX   X   X X \",\n            \"X XXX XX XXX X XX X X   XXX XX XX\",\n            \"  XX X X    X X X XXXX X X   X X \",\n            \"XX   XX  X XXXX  XXXXXXX   X  X  \",\n            \"X X XX XXXX X  X  X X X XXXX X  X\",\n            \"X X  XXX X XX   X   XX   XXXX    \",\n            \"X X     X  XX     X   X X XXXX   \",\n            \"XXX   X X     XX XXX XXXXXXXXXXXX\",\n            \"        X XX   XX X   XXX   X X  \",\n            \"XXXXXXX XXXX X XXX  XX  X X XXXXX\",\n            \"X     X    XXX X XX X   X   X X  \",\n            \"X XXX X   X X X XX   X  XXXXXXXXX\",\n            \"X XXX X  X  X  X X  XXXXXXX   X  \",\n            \"X XXX X  XXX XXXX X X  XXXX   XXX\",\n            \"X     X XX XXX    XXXX  XXX X XX \",\n            \"XXXXXXX    X X XX  X XXX  X XXX  \"\n        };\n        private static readonly string[] Modules153 = {\n            \"XXXXXXX  X    XXXXXXX\",\n            \"X     X   XX  X     X\",\n            \"X XXX X   XXX X XXX X\",\n            \"X XXX X   X   X XXX X\",\n            \"X XXX X X X   X XXX X\",\n            \"X     X  XX X X     X\",\n            \"XXXXXXX X X X XXXXXXX\",\n            \"        X XX         \",\n            \"  XX  XXX X XXX X    \",\n            \"  X X  XX X  XXX  X  \",\n            \"X X   XXXX  X XXXX  X\",\n            \"XXXXX    XX        X \",\n            \" X XX X XXX X X X X X\",\n            \"        X  X   X  X X\",\n            \"XXXXXXX X       X XX \",\n            \"X     X    XX X  X   \",\n            \"X XXX X  XXXXX   X  X\",\n            \"X XXX X X X XXX X  X \",\n            \"X XXX X XXXX  X XXX  \",\n            \"X     X       X XX XX\",\n            \"XXXXXXX    XXX X X X \"\n        };\n        private static readonly string[] Modules154 = {\n            \"XXXXXXX XXXX X   XXX X  X XXXXXXX\",\n            \"X     X X XXX    XX X  XX X     X\",\n            \"X XXX X  XX   XX X  XXXXX X XXX X\",\n            \"X XXX X X   XXXX   X XXXX X XXX X\",\n            \"X XXX X XX   XXX XXX    X X XXX X\",\n            \"X     X X X XX X   X X  X X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"          X     XX   X X         \",\n            \"   X  X     X   X X   XXX  XXX XX\",\n            \"XXX X   X XXX   X XX  XXXX  XX X \",\n            \"  X X X XX X XX    XXXXXXXX XXX  \",\n            \" XXXX  X    XX X  X    XX X X  X \",\n            \"XXXX XX XXXX   XXXX X  X  X XXXX \",\n            \" X X X XX XXXX  XX  X XX X    X  \",\n            \" X X XXX X X XX X X XX X XX  X   \",\n            \"X   XX X X    X   XX   X XX X XX \",\n            \"   X  XXX XXX   X  XX X X  X  XXX\",\n            \"XX  XX  XX XX  XXXXX X  XXXX  X X\",\n            \" X X  X    X  XX XXXX XXX XXX X X\",\n            \"     X X X  X   X X XX  XX XXX X \",\n            \"XXXX  XX XXXXXXXXXXX  X X   XXX  \",\n            \"   X X  XX   XX  XX X XXX   XX X \",\n            \"XXXXXXX XX X   XX XXXXXXXXX XXX  \",\n            \" XX XX XXXX X XX  XX   XX X X  X \",\n            \"X   XXX    X X XX  XX  XXXXXXXXX \",\n            \"        XXX  X  X X XXX X   X XX \",\n            \"XXXXXXX    XX  X  X X XXX X XX   \",\n            \"X     X  XXXXX    X XXXXX   X X  \",\n            \"X XXX X  X  X     XXX   XXXXX XXX\",\n            \"X XXX X XX X X    X   XX XXX   XX\",\n            \"X XXX X  XXX   X XX XX  XXX XXX X\",\n            \"X     X   XXX  XX X X XX XXXXX X \",\n            \"XXXXXXX   X XXXX  XXX X   X X X  \"\n        };\n        private static readonly string[] Modules155 = {\n            \"XXXXXXX X X    X  X    XX XXXXXXX\",\n            \"X     X  X     XX   XXX   X     X\",\n            \"X XXX X X  X  X X   X   X X XXX X\",\n            \"X XXX X  XXX    XXX X     X XXX X\",\n            \"X XXX X X        XX XX  X X XXX X\",\n            \"X     X  XX   X   X X     X     X\",\n            \"XXXXXXX X X X X X X X X X XXXXXXX\",\n            \"        XX XX  X  X   X X        \",\n            \"     XX  XXXX  X XX  X  X X X X X\",\n            \"   X X X X   XXX X  XX    XX  X X\",\n            \" X XX XX   X   X      XXX  XXXXXX\",\n            \"X   X   XX    X    XXX X X XX X X\",\n            \"X X   XXX X  X  X XXXX   XXXX X  \",\n            \"XX  X  XXX   X X  X XX  XX XXX   \",\n            \" X  X XX  X  XXX XX X X  XXXX    \",\n            \" XXX    X XXXX XXX  XXX X  X X  X\",\n            \" XX   X  XXXXXXXX    XX XXX   X  \",\n            \"  XXXX X   X XX XX  X          X \",\n            \"     XXX X   XX   X XXX XXX XXXXX\",\n            \"X  XX  X  XX   X X  X XX X    XX \",\n            \"XXX XXXX    XXX   XX X XX  X  X  \",\n            \"XXX X  X  XXX  XX  X X   XXX  X X\",\n            \"X   XXXX   X XX X X   XXX  XXXXXX\",\n            \"X  XXX    X  X      XX X X XX X X\",\n            \"XX XX XX X      XX  XX  XXXXX X  \",\n            \"        X  XXX X X  X  XX   XX X \",\n            \"XXXXXXX  XX X   XXX XX  X X X    \",\n            \"X     X X     XXXX X    X   XX XX\",\n            \"X XXX X     XXXX  X  X  XXXXX X  \",\n            \"X XXX X    XX XX   XXXXXX     X  \",\n            \"X XXX X   X  X    XXX  XX XXX XXX\",\n            \"X     X  X       X  XX  XXX   XX \",\n            \"XXXXXXX  X XXXX XXXXXX X  XX XX  \"\n        };\n        private static readonly string[] Modules156 = {\n            \"XXXXXXX  XXX   X  XXXXXXX\",\n            \"X     X  X X  X   X     X\",\n            \"X XXX X X X X     X XXX X\",\n            \"X XXX X X   X  XX X XXX X\",\n            \"X XXX X XXX X XXX X XXX X\",\n            \"X     X XXX   XXX X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        XXXX   X         \",\n            \"X XXXXX  X    XX  XXXXX  \",\n            \" X  X  X  XXX X XXXX XXXX\",\n            \"  XX XX XXXX   X  X XXX X\",\n            \"  XX X XXX   X    XX    X\",\n            \"X XX  X   X X     X  X XX\",\n            \"XX  X  XXX   XX X X XX  X\",\n            \"X     XXX XXXX X  XX XX  \",\n            \"X  XX   XXXX X   X  XXXXX\",\n            \"X XXXXX XX XX   XXXXX  X \",\n            \"        X X X  XX   XXX X\",\n            \"XXXXXXX  XX X XXX X XX XX\",\n            \"X     X X X XX XX   XX X \",\n            \"X XXX X X   XXXXXXXXX  X \",\n            \"X XXX X XXX   X XXX XXX X\",\n            \"X XXX X XXX X X    XX   X\",\n            \"X     X  XX X  XX X  X  X\",\n            \"XXXXXXX X   X  XXXX  XX  \"\n        };\n        private static readonly string[] Modules157 = {\n            \"XXXXXXX XXXX XXX XXX XXX XXX  XXXXXXX\",\n            \"X     X X  X   X   X   X   X  X     X\",\n            \"X XXX X  X   X   X   X   X    X XXX X\",\n            \"X XXX X    XX  XX  XX  XX  XX X XXX X\",\n            \"X XXX X X  XX  XX  XX  XX  XX X XXX X\",\n            \"X     X XXX XXX XXX XXX XXX X X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        XX   X   X   X   X           \",\n            \"XXX  XX XX XXX XXX XXX XXX XXXXXX  XX\",\n            \"X X X  X    X   X   X   X   XX    XX \",\n            \"  X  XX     XXX XXX XXX XXX X XXX XXX\",\n            \"X  XXX XX XXX XXX XXX XXX XXX  X     \",\n            \" X XXXX X X  XX  XX  XX  XX   XXXX X \",\n            \" X X X X     XX  XX  XX  XX  X  X  X \",\n            \"  XX  X    X   X   X   X   X XXX XXX \",\n            \"X   X  XX    X   X   X   X       XX X\",\n            \"X  XXXX XX XXX XXX XXX XXX XXX  XX XX\",\n            \" X  X  XX X X   X   X   X   XX X  X  \",\n            \" XX  XX X X XXX XXX XXX XXX XX  X X X\",\n            \"X XXX  XX XXX XXX XXX XXX XXX X   X X\",\n            \"XXXX  X   X  XX  XX  XX  XX  X X XXX \",\n            \" X   X  XXX  XX  XX  XX  XX    X X X \",\n            \"XXXXXXXX  XX   X   X   X   X  XX X XX\",\n            \"XXX XX X     X   X   X   X      XX   \",\n            \"XX X  XX X XXX XXX XXX XXX XX  X  X X\",\n            \" XXX   X X  X   X   X   X   XXXX     \",\n            \"XXXXXXX  X  XXX XXX XXX XXX X XX XXX \",\n            \"   XXX XXX XX XXX XXX XXX XXX   X  X \",\n            \"XXXXXXXXXXX  XX  XX  XX  XX XXXXXXX  \",\n            \"        X X  XX  XX  XX  XX X   X    \",\n            \"XXXXXXX    X   X   X   X   XX X X   X\",\n            \"X     X XX   X   X   X   X  X   XX XX\",\n            \"X XXX X   XXXX XXX XXX XXX XXXXXXX   \",\n            \"X XXX X     X   X   X   X            \",\n            \"X XXX X X X XXX XXX XXX XXXXXXXXX XXX\",\n            \"X     X XX XX XXX XXX XXX X    XX X  \",\n            \"XXXXXXX X    XX  XX  XX  XX XXX XX X \"\n        };\n        private static readonly string[] Modules158 = {\n            \"XXXXXXX XXXX XXX XXX XXX XXX  XXXXXXX\",\n            \"X     X    XXXXX  X X  XXXXX  X     X\",\n            \"X XXX X  X X XX     XX X XX   X XXX X\",\n            \"X XXX X   XX  XX  XX  XX  XX  X XXX X\",\n            \"X XXX X   XXXX X    X XXXX X  X XXX X\",\n            \"X     X  X X XX     XX X XX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        XX  X X  XXXXX  X X          \",\n            \"XX XX X  X  XXXXX  X X  XXXXX X     X\",\n            \"       XX X   X   X   X   X  XX X  XX\",\n            \" XX XXXX  X X X  XXXXX  X X   X X  XX\",\n            \"   X   XX     XX X XX     XX XXX  XXX\",\n            \" X XXXX X X  XX  XX  XX  XX   XXXX X \",\n            \"X XX X  X   X    X XXXX X    XXX   XX\",\n            \"   X XX X     XX X XX     XX  XXXXX  \",\n            \"  X    X  X XXX XXX XXX XXX X X XX   \",\n            \"XX X XXXXXXXX  X X  XXXXX  X X XXXXXX\",\n            \"XX   X XX  X     XX X XX      XX   XX\",\n            \" XX  XX X X XXX XXX XXX XXX XX  X X X\",\n            \" X XX     XX X XX     XX X XX  XX X  \",\n            \"XX X XX X XX X    X XXXX X     XXXX  \",\n            \"XXX XX   X  XX  XX  XX  XX  X XXXXXXX\",\n            \"X XX XX    X X XX     XX X XX X  XXXX\",\n            \" XX    X  XXXX  X X  XXXXX  XXX XXXXX\",\n            \"XX X  XX X XXX XXX XXX XXX XX  X  X X\",\n            \"X  X    XX   XX X XX     XX XX  X   X\",\n            \"XX XX X XX XXX  X X  XXXXX  XXXXXXX  \",\n            \"X XX X X XXX   X   X   X   X  X   XXX\",\n            \"X XX XX XX    X XXXX X    X XXXXXX   \",\n            \"        X  XXXX X    X XXXX X   X XXX\",\n            \"XXXXXXX    X   X   X   X   XX X X   X\",\n            \"X     X  X  X X  XXXXX  X X X   XX X \",\n            \"X XXX X X X XXXXX  X X  XXXXXXXXXX X \",\n            \"X XXX X X X   X   X   X   X X X X X X\",\n            \"X XXX X     X X  XXXXX  X XX XX X  XX\",\n            \"X     X XXX   XX X XX     X XXXXX  XX\",\n            \"XXXXXXX X    XX  XX  XX  XX XXX XX X \"\n        };\n        private static readonly string[] Modules159 = {\n            \"XXXXXXX  XXX   X  XXXXXXX\",\n            \"X     X  X X  X   X     X\",\n            \"X XXX X X X X     X XXX X\",\n            \"X XXX X X   X  XX X XXX X\",\n            \"X XXX X XXX X XXX X XXX X\",\n            \"X     X XXX   XXX X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        XXXX   X         \",\n            \"X XXXXX  X    XX  XXXXX  \",\n            \" X  X  X  XXX X XXXX XXXX\",\n            \"  XX XX XXXX   X  X XXX X\",\n            \"  XX X XXX   X    XX    X\",\n            \"X XX  X   X X     X  X XX\",\n            \"XX  X  XXX   XX X X XX  X\",\n            \"X     XXX XXXX X  XX XX  \",\n            \"X  XX   XXXX X   X  XXXXX\",\n            \"X XXXXX XX XX   XXXXX  X \",\n            \"        X X X  XX   XXX X\",\n            \"XXXXXXX  XX X XXX X XX XX\",\n            \"X     X X X XX XX   XX X \",\n            \"X XXX X X   XXXXXXXXX  X \",\n            \"X XXX X XXX   X XXX XXX X\",\n            \"X XXX X XXX X X    XX   X\",\n            \"X     X  XX X  XX X  X  X\",\n            \"XXXXXXX X   X  XXXX  XX  \"\n        };\n        private static readonly string[] Modules160 = {\n            \"XXXXXXX XXXXXXX XXXX  X XXX X XXXXXXX\",\n            \"X     X  X X XX  X  X    XXX  X     X\",\n            \"X XXX X  X XX X    XXXXX  X   X XXX X\",\n            \"X XXX X XXX   XXXXXXXXXX  X X X XXX X\",\n            \"X XXX X XX  X     XXXX   X XX X XXX X\",\n            \"X     X XX   XX X XX XX XXX   X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X     X  XX   XX  X X        \",\n            \"X   X XXXXXX XXX  XX  X XXXXXXXXXX  X\",\n            \"XXXX X X    X X X  XXX   X   XXXX  XX\",\n            \"X X  XXXX  XXX  XX  X    X X   X  XX \",\n            \"XX     X XXXXX   XX   X XX XXXX  XXX \",\n            \"   X XXX X XX XXX XXX XXXXX  XXXXX XX\",\n            \"XXXXX   XXX   X  X X    X XXXXXX  X X\",\n            \" XX XXXXX    XXX  XX XXX XXXX XX X  X\",\n            \"XXXXX  XXXX X XXX  XXX XXX  XXX X XXX\",\n            \"   X XX XXXXXX  X   X    X X X XX  X \",\n            \" XX    X     X   XXX  X XXX X X  XX X\",\n            \"XX X XX X  XX  X  XX XXXX X XX  XX XX\",\n            \"XX XX    X   XXXX  XXX X     X XX    \",\n            \"XXXXX X   XX X           XXX  XX   X \",\n            \"   XXX X  XX    X XXXXXX X    X    XX\",\n            \"X X  XX XXXXX   XX  X      X X   X X \",\n            \" XXX X     X XX  XX   XXX X      X   \",\n            \" X    X X  XX XX  XX  X XXX X X XX  X\",\n            \"X      XX  X  X X  XXX   X   XXXX   X\",\n            \"     XX  X    X XX  X     XX X X  X  \",\n            \"  XX X X XXX     XX   X X  XX X  XX X\",\n            \"XX X  XXXXX    XX XXX XXXX  XXXXXX X \",\n            \"        XXX XX   X X    X   X   X X X\",\n            \"XXXXXXX X  X  XX  XX XX  XX X X XXX X\",\n            \"X     X   XX  XXX  XXX   X XX   XXXXX\",\n            \"X XXX X X  XXXX X   X  X X XXXXXXX X \",\n            \"X XXX X  XX  XX  XXX  X XXXX XXX XX X\",\n            \"X XXX X   XXX XX  XX XXXX  XXXX  X X \",\n            \"X     X   X X XXX  XXX X X XX XX   X \",\n            \"XXXXXXX XX XX            XXXX  X     \"\n        };\n        private static readonly string[] Modules161 = {\n            \"XXXXXXX X   XXXX  XX X XXXXX  XXXXXXX\",\n            \"X     X XX X XX  X  X    XXX  X     X\",\n            \"X XXX X XX   XX  XX XXX XXX   X XXX X\",\n            \"X XXX X   XXX   X  X  X X  XX X XXX X\",\n            \"X XXX X X  XXX X XX X  X    X X XXX X\",\n            \"X     X  XXX     XX XX XX   X X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"         XXXXX XX  XXX  XX X         \",\n            \"X  XXXXXX  X X  X XXXX  XX   X  X XXX\",\n            \"X XXXX    X XXX     XXX     XXX X XXX\",\n            \"    XXXX  XX XX  XX   X XXXXX XXX  XX\",\n            \" X X   X  XX X X X   XX  X  XX    XXX\",\n            \"    X XX  X X X  XXXXX  XXXXX XXX X X\",\n            \"XXXXX   XXX   X  X X    X XXXXXX  X X\",\n            \"X X X X X  XX XX X   XX X XXXX   X X \",\n            \" X  XX X  XX    XXXX     XXXX    XX  \",\n            \" X    XXX X X  XXX XXX X        XX   \",\n            \"    XX  X XX  X X X X  XX    XXXXX XX\",\n            \"  XX XXX   X XXX    XXXX X  XXXX X X \",\n            \"  X  X XX XXX    XX   X XXXXX X  XXXX\",\n            \"XX    X XX X XXXX   XXX  X  X XXXXXX \",\n            \" X X X     X X    X XX X    X XX  XXX\",\n            \"    XXX  X X  X  XX   X X XXXXX XXXXX\",\n            \"XXX  X   X XXXXX X   XXX  XX  X     X\",\n            \" X XXXX XXX X X XXXX X XXXXX XX X XXX\",\n            \"X      XX  X  X X  XXX   X   XXXX   X\",\n            \"XX    XX X XXXX X XXX  XXXXX  X   XXX\",\n            \"X      XX X X XX    XXXX  X XX  X XX \",\n            \"X    XX X XX X  XXX XXX X  XXXXXX    \",\n            \"        XX XX X X   X XXXXX X   X  XX\",\n            \"XXXXXXX X  XXX X    XXX X   X X XXX  \",\n            \"X     X XX  XX   XX   XXX X X   X    \",\n            \"X XXX X XXXXXX X     XXX XX XXXXX XX \",\n            \"X XXX X XX    X XXX     X XXXXX  X  X\",\n            \"X XXX X    X   XX  XXX X  XX X  XXXXX\",\n            \"X     X  XX   X X XXX  XXX  X  X X XX\",\n            \"XXXXXXX X X X  XXX   XXX XX  X X XXX \"\n        };\n        private static readonly string[] Modules162 = {\n            \"XXXXXXX  XXX XX  XXXX XXXXXXX\",\n            \"X     X XX  XX XXX    X     X\",\n            \"X XXX X X X  X XXX X  X XXX X\",\n            \"X XXX X X X  XXX XX   X XXX X\",\n            \"X XXX X X  X  X  XXXX X XXX X\",\n            \"X     X X XXX  X      X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"          X   X X            \",\n            \"  X  XXXXXXX  XX X X X XXXXX \",\n            \"XX   X      XX     XXX    X  \",\n            \"   X  X X XXX  XX X XX XXX X \",\n            \" X XX  XX    XXX X  XX X X X \",\n            \"XXXX  X X XX  X   XX XX XX   \",\n            \"X X X  X XX    XXX  X X  X   \",\n            \"  XXX X XX X XX    XX XXXXXXX\",\n            \"  X X    XXXXX X   XX   X  XX\",\n            \"XXX X X  XX XXX   XXX XXX X X\",\n            \"   XX  XX X XX XXXX  X  X X  \",\n            \"XX X  X     XX X XX XXXX X  X\",\n            \"  X XX   X X X XX  X     X XX\",\n            \"XXXX XX X  XX   X X XXXXXX   \",\n            \"        X X XX  XXX X   X X X\",\n            \"XXXXXXX XXX X X  X XX X XX X \",\n            \"X     X X XX X X XX X   XX X \",\n            \"X XXX X  XXXX XX X  XXXXXXXXX\",\n            \"X XXX X    X X XX XX XXX     \",\n            \"X XXX X XX X   X XXX X X  XXX\",\n            \"X     X   X  X  X  X    XX   \",\n            \"XXXXXXX  XX X X X  X XXXX XX \"\n        };\n        private static readonly string[] Modules163 = {\n            \"XXXXXXX  XXX XXXX X XX X      XX  XXXXXXX\",\n            \"X     X   XX     X XXX      X X X X     X\",\n            \"X XXX X X        XXX X  XX XXXXXX X XXX X\",\n            \"X XXX X  XX    X        X XXXX XX X XXX X\",\n            \"X XXX X X XXX X  XX X     X X  XX X XXX X\",\n            \"X     X X XXX XXXXX   XX  XX X X  X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         X XXX  X XXX   X    X           \",\n            \" X  X X X     X  XXX X XX  X   XXX XX X  \",\n            \"X XXXX   X XX  X  X XXX  XX  X XX  X   X \",\n            \"X  X XXXX    XX X XXXXX    X  XXXXXXXX XX\",\n            \"X XXXX   X  XXX X   X X X X       X X X X\",\n            \" X X  X XXXXX XX  XX  X XXX X   X   XXX  \",\n            \"XXX    X X XXX XXX X XX       XX X  XXX  \",\n            \"X X XXX     X  X XXXXXX  XXX X X X X     \",\n            \" X  X   X   X  XX XX  X XX XXXXXXXX   XX \",\n            \" X XXXXXX   X        XXX X    X    XX XXX\",\n            \"X   X   XXXX XX  X XXX  XXX XX XXX   XXX \",\n            \"XX XXXX XXX  XX XX   XXXX   X X XXXXXX  X\",\n            \"XXXXXX   X    XX     X X  X      XXX   XX\",\n            \"X X X XX    X X   X XXX XXXXX  XXX  X XX \",\n            \" X   X     X X XXX X          XX   X     \",\n            \"X XX XXX X   XX  X  X X  X X X X XXXX X X\",\n            \"X XX   X  X    X X  X X X  XXX XX X XXX  \",\n            \"  XXX XXXXXXX XXX X X XXX     X X  XXXXXX\",\n            \"XX      X      X XX   X X XX  X  X  X X  \",\n            \" X XXXX    X     XX   X  XX  X X         \",\n            \"  XX X X  XXXXXXXXXXX    X XXXX  X X   X \",\n            \"  X  XX   XXXXX   X XX   X    XX XXX  XXX\",\n            \"X X     X  X X  X X XXX XXX XX XX  X X X \",\n            \"  XXX X  X XX X XX  XXXXX   X X XX X  XXX\",\n            \"    X  X  X XXX X   XX X  X       X   X X\",\n            \"XXX   XXXX X X   X XXX  XXXXX  XXXXXXXX  \",\n            \"        X  X XX    XX X       XXX   X  X \",\n            \"XXXXXXX    XXXXX XXX X   XXX X  X X X XXX\",\n            \"X     X     XX   XX   X XX XXXXXX   XXXXX\",\n            \"X XXX X X  XX  X X X  XX X    X XXXXXXXX \",\n            \"X XXX X  XXXX X  XX XX  XXX X  X    XXX  \",\n            \"X XXX X      XX X   XX XX   X  XXX   X XX\",\n            \"X     X XX  XX   XX    X  X  XX  XXXX  XX\",\n            \"XXXXXXX     X X  XXXX    X X X XX     X X\"\n        };\n        private static readonly string[] Modules164 = {\n            \"XXXXXXX      XX  XX X X    XXXXX  XXXXXXX\",\n            \"X     X X XX     X XXX      X X X X     X\",\n            \"X XXX X    XXX       X X   XX   X X XXX X\",\n            \"X XXX X X XXX X  XX XX X    X XX  X XXX X\",\n            \"X XXX X XXX XXXX  XXXX X XXXXX  X X XXX X\",\n            \"X     X     XX X  XXX    X XX   X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X X   XX X   XXX XXXX XXX        \",\n            \" X XXXX XXX    XXXXXX XXX X X  X XX XX X \",\n            \"XXXX X X XXXXX XX XXXX    X XX  X XX X XX\",\n            \"  XXXXXX  X XX     X X  X XXX  X X X XXX \",\n            \"  X XX       XXXX X XXX   XX  X  XX   XXX\",\n            \" X  XXX X   X X XXXX X XXXXX X  XXXXXXXXX\",\n            \"XXX    X X XXX XXX X XX       XX X  XXX  \",\n            \" XX X XX   X X X    XXXXX XX  X  X  XX   \",\n            \"XXXXXX   X X  X XX XXXXX XX X  X  XXX    \",\n            \"    X X XX XXX X X X  X    X XXX X  XXX X\",\n            \"XXX  X X X      X    XXXX        XXX   XX\",\n            \"  XXXXXX XX X   XXXXXXXX XX X  X XXX  X X\",\n            \"       XX XXXX  XXXXX X XX XXXXXX   XXX  \",\n            \"X  X  XXXXX X  XX X     XX     X  X X   X\",\n            \"    XX X  XX   X X    X  X  X X   XX X  X\",\n            \"   XXXXXXXX XX  XXX     XXXXXXXXXX X     \",\n            \"  X    X XX X    XX XXX     XXXXXXX  XXX \",\n            \"  X  XXXX   X X  XX XX  X  XXXX XXX XXX  \",\n            \"XX      X      X XX   X X XX  X  X  X X  \",\n            \"X  XX XX    XX     X  XXX X   X    XXX   \",\n            \"X      XXXX  X  X  X X XXXX X   X   X X  \",\n            \" XXX  XX XX X XX XXXX  X   X XX   X  XX X\",\n            \"XX  XX X  X   X  XXX X XX         X   XXX\",\n            \"XX XX XXXX X X  XXXX XXX XX X  X X XXX XX\",\n            \"XXXX X  XX X   X XXX  X XX XXXXXXX XXX X \",\n            \"XX XX XX  XX XXXXX X  X XX     XXXXXXX XX\",\n            \"        X XX  X X   X    X  X X X   XX XX\",\n            \"XXXXXXX   XX X XXX XXXX XX XXXX X X X  X \",\n            \"X     X XX   X X X   XX  X  XX XX   XXX X\",\n            \"X XXX X XXX X   X  X X   X XXXX XXXXXXX X\",\n            \"X XXX X XXXXX X  XX XX  XXX X  X    XXX  \",\n            \"X XXX X    XX X XXXXXX   X  XXX XX XX  XX\",\n            \"X     X X  X XXX    XX  X  X    X X   X X\",\n            \"XXXXXXX  X XXXXX  X XX X        XX X XXXX\"\n        };\n        private static readonly string[] Modules165 = {\n            \"XXXXXXX  XXX XX  XXXX XXXXXXX\",\n            \"X     X XX  XX XXX    X     X\",\n            \"X XXX X X X  X XXX X  X XXX X\",\n            \"X XXX X X X  XXX XX   X XXX X\",\n            \"X XXX X X  X  X  XXXX X XXX X\",\n            \"X     X X XXX  X      X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"          X   X X            \",\n            \"  X  XXXXXXX  XX X X X XXXXX \",\n            \"XX   X      XX     XXX    X  \",\n            \"   X  X X XXX  XX X XX XXX X \",\n            \" X XX  XX    XXX X  XX X X X \",\n            \"XXXX  X X XX  X   XX XX XX   \",\n            \"X X X  X XX    XXX  X X  X   \",\n            \"  XXX X XX X XX    XX XXXXXXX\",\n            \"  X X    XXXXX X   XX   X  XX\",\n            \"XXX X X  XX XXX   XXX XXX X X\",\n            \"   XX  XX X XX XXXX  X  X X  \",\n            \"XX X  X     XX X XX XXXX X  X\",\n            \"  X XX   X X X XX  X     X XX\",\n            \"XXXX XX X  XX   X X XXXXXX   \",\n            \"        X X XX  XXX X   X X X\",\n            \"XXXXXXX XXX X X  X XX X XX X \",\n            \"X     X X XX X X XX X   XX X \",\n            \"X XXX X  XXXX XX X  XXXXXXXXX\",\n            \"X XXX X    X X XX XX XXX     \",\n            \"X XXX X XX X   X XXX X X  XXX\",\n            \"X     X   X  X  X  X    XX   \",\n            \"XXXXXXX  XX X X X  X XXXX XX \"\n        };\n        private static readonly string[] Modules166 = {\n            \"XXXXXXX X  XXXX X X XXXXXX  X X   XXXXXXX\",\n            \"X     X X XX       X  X  XXX X X  X     X\",\n            \"X XXX X     XX  X XXXX   X  XX XX X XXX X\",\n            \"X XXX X X  X X  XX    XXXXXX X    X XXX X\",\n            \"X XXX X X XX  XX     XXX XX X  XX X XXX X\",\n            \"X     X X  X XXXXX  XXX      XXXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"         X X  X XX X X XX    X  X        \",\n            \"   X  X  X XX XX  XXXX X XXXXX     XXX XX\",\n            \"XXXX   XXX XXXX   XX  XXXX X XXX X  X X  \",\n            \" XXX  X XX      X X    X  X X X       X  \",\n            \"X   XX XX  X  XXXXXX X XX   X  XX  XXX   \",\n            \"X  X  X XX XXX  XX X X  X      XX XXX X X\",\n            \"XX   X   X   X    X     XXXXXX  X X    XX\",\n            \"  X X X    X XXXXXX   XX     XXX   XXX X \",\n            \"XXXX   XX  XX   X   X X  X X XX XX     XX\",\n            \" X XXXXXXXXX  XX   XX XXX X   X    XX XXX\",\n            \"X X  X  X XXXX  X  X X X X XXXXXX   XXXXX\",\n            \"   X XX   X X  XX X XX  XXXXXX    X  XXXX\",\n            \"  X XX XX X  XXX   XX  X         XXX   X \",\n            \"X XX  X    XXXXX XXXXXX  XXX X  X  XXX   \",\n            \"X X    XX X X  XXXX XX X XXX X  X   X XX \",\n            \"XX X XXXX  X X  X X      X  X X X    X X \",\n            \" X  X   XXXX    XXX  X X X X   X   XX   X\",\n            \"X X XXX X  XX X      XXX XX X X X XXX XX \",\n            \"XX     XX X XX XXXXXX  XXX  XX XX XX X XX\",\n            \"   XX X      X XXXX X  X XXX XXX X  X  X \",\n            \"XX X   XXXXXX  XX X   X    X X X XXX X XX\",\n            \"XXXX  X XXXX X    XX XXX X    XX XXXX XXX\",\n            \" XXXX  XXX  XXX XX   XX    XXX XXX   XX  \",\n            \"X XX  XXXX   XXXXXX X X XXXXXX      X   X\",\n            \"  X XX XX    X XX XX  XX XX       X   X X\",\n            \"X  X XXX  X  XXX      XX X X X  XXXXX   X\",\n            \"        X XX    XXX XXX X  X X XX   X XXX\",\n            \"XXXXXXX  XX X XXXX XX XXX X X XXX X XX X \",\n            \"X     X  XX   XXXX XX    X X  X X   X  XX\",\n            \"X XXX X        X X X X XX   X XXXXXXX X  \",\n            \"X XXX X X X  XX     X XXXX X XX XXXX   XX\",\n            \"X XXX X    X X X X  X X X XXX XXX   XX  X\",\n            \"X     X  X XXXXXXXXXXXXX  X XXXX XXXXX X \",\n            \"XXXXXXX     X  X   X XXXX  X X X  X   X X\"\n        };\n        private static readonly string[] Modules167 = {\n            \"XXXXXXX  X  X XXXXXXX X X  XXXXX  XXXXXXX\",\n            \"X     X  X  XXXXXXX XX XX   X X X X     X\",\n            \"X XXX X XX XX  XXXX X  X   XX   X X XXX X\",\n            \"X XXX X XXX X XX  XXXX      X XXX X XXX X\",\n            \"X XXX X  XX  XX  X X  X   XXXX  X X XXX X\",\n            \"X     X  XX X     XX   XXXXXX     X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"          X XX X  X X X  XXXX XX         \",\n            \"   XX XX    XXX  XX X     X X  X     XX  \",\n            \"    XX    X    XXX  XX    X X   X XX X XX\",\n            \"  X  XXXX  X X XXXXX X   XXXXXXX X X XXX \",\n            \" XXX     XX XX      X X  XXX XX  XX   XXX\",\n            \"XX   XXXX   X  XX      XXX X X  XXX XXXXX\",\n            \"  XXX  XX XXX XXXX XXXXX      XX X XXXX  \",\n            \" XXXXXXX X    X X XX XX  X X  X  X  X    \",\n            \"    XX   XX  XXX XXX X XX X X  X  XXXXX  \",\n            \"    X X X X  XX  X  XXX XXXX XXX X  XXX X\",\n            \" X XX  X X    XX XX X X X X      XXX     \",\n            \" X    XX XXXXX  XXXXX  XX X X  X XXX  X X\",\n            \"XX X     X XX   XXX  XX XXXXXXXXX   XXX X\",\n            \"XXX  XXX X  X X   X X XX  X    XXX  X  X \",\n            \" X XXX   X X XX    X  X X   X XX XXX X  X\",\n            \"X     X XX     XXXXX X X   XXXXXXX X     \",\n            \"X XX X X    XXXX   XX X X X XXX XXX  XXX \",\n            \"XXXXX XXXX  XXXX X X  X   XXXXXXXXX XXX  \",\n            \"  XXXX   X X  X      XX   XX  X  X  X X  \",\n            \" X  XXXX X X    X XXXX    X   X    XXX   \",\n            \"  X XX       XX  X XXX XXXX X X X   X X  \",\n            \"X X  XXXX X    X XX   X    X XX   X XXX X\",\n            \"X    X    XX   X  XXX  XXXX   X   XXX  XX\",\n            \"XXX  XX X  X  X X XXXXXXX X X  X X XXX XX\",\n            \"XX X     XXXX X  X  XX  X  XXXXXXX XXX X \",\n            \"XX    X  XXX  X  X X XX        XXXXXXX XX\",\n            \"        XX  XXXX   X   X XX X X X   XX   \",\n            \"XXXXXXX X XXXXX X   XXX XXXXXXX X X X    \",\n            \"X     X    XXX    X  XXXX X XX XX   XXX  \",\n            \"X XXX X XX X X          XX XXXX XXXXXXXX \",\n            \"X XXX X XX XX  XXXXX X    X X  X    XXX  \",\n            \"X XXX X  X         XXXXXXXX XXX XX XX  XX\",\n            \"X     X   X             XX X    X     X X\",\n            \"XXXXXXX  X XXX   X    X XX       XXX XXXX\"\n        };\n        private static readonly string[] Modules168 = {\n            \"XXXXXXX X X XX X  XXXXXXX\",\n            \"X     X XXXX XX   X     X\",\n            \"X XXX X X X XXX X X XXX X\",\n            \"X XXX X X XX  X X X XXX X\",\n            \"X XXX X X   XX    X XXX X\",\n            \"X     X     XXX   X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        XXX  X  X        \",\n            \" XX X XX      X   X XXXXX\",\n            \"XXXX    X X    XXXXX XXXX\",\n            \"X XX  X XX X X XX X X X  \",\n            \" X XXX     X   XXXX X X X\",\n            \" XX XXX   X      X X    X\",\n            \" X X X XX X  X XXX X XXXX\",\n            \"X X XXXX   X X XX X X    \",\n            \" X   X    XX XX  XX  X XX\",\n            \"X  X  X X  X XXXXXXXX XX \",\n            \"        X     XXX   XX X \",\n            \"XXXXXXX X X X   X X X    \",\n            \"X     X     X XXX   XX XX\",\n            \"X XXX X XX X XX XXXXX X X\",\n            \"X XXX X  XX   XX  X    X \",\n            \"X XXX X X X XXX    X  X X\",\n            \"X     X X X    X XXX XX  \",\n            \"XXXXXXX   XX  X   XX XX X\"\n        };\n        private static readonly string[] Modules169 = {\n            \"XXXXXXX XXXX XXX XXX XXX XXX  XXXXXXX\",\n            \"X     X X  X   X   X   X   X  X     X\",\n            \"X XXX X  X   X   X   X   X    X XXX X\",\n            \"X XXX X    XX  XX  XX  XX  XX X XXX X\",\n            \"X XXX X X  XX  XX  XX  XX  XX X XXX X\",\n            \"X     X XXX XXX XXX XXX XXX X X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        XX   X   X   X   X           \",\n            \"XXX  XX XX XXX XXX XXX XXX XXXXXX  XX\",\n            \"       X X  X   X   X   X   XXXXXX   \",\n            \" X X  X X X XXX XXX XXX XXX X  XXXXXX\",\n            \" X  X  XX XXX XXX XXX XXX XXX  XX X X\",\n            \" X X XX X X  XX  XX  XX  XX  XX   XXX\",\n            \"  X  X   XX  XX  XX  XX  XX    XXXX  \",\n            \"XXX X XX  XX   X   X   X   X   XXXXXX\",\n            \"  X XX X X   X   X   X   X    X XXX X\",\n            \" XX  XX X XXXX XXX XXX XXX XX   X XX \",\n            \"  XX X X X  X   X   X   X   X  XXX  X\",\n            \"X X X XXXXX XXX XXX XXX XXX XXXX XX  \",\n            \"    XX X  XXX XXX XXX XXX XXXX X     \",\n            \"X X XXXXX X  XX  XX  XX  XX  XX X  X \",\n            \" XXX   XX X  XX  XX  XX  XX  X XXXX X\",\n            \" XXXX XXXXXX   X   X   X   X   XXXXX \",\n            \"  X XX  X X  X   X   X   X    XX   XX\",\n            \"X   X X XX XXX XXX XXX XXX XX   XX XX\",\n            \" X  X  XXX  X   X   X   X   X  XX   X\",\n            \"XX  X XX    XXX XXX XXX XXX XXXX X X \",\n            \"  X  X X   XX XXX XXX XXX XXXX  XXX X\",\n            \"XXX  XX XX   XX  XX  XX  XX XXXXXXX  \",\n            \"        X    XX  XX  XX  XXXX   X    \",\n            \"XXXXXXX  X X   X   X   X   XX X XX X \",\n            \"X     X X X  X   X   X   X  X   XXX X\",\n            \"X XXX X   XXXX XXX XXX XXX XXXXXXX XX\",\n            \"X XXX X   X X   X   X   X  X      X  \",\n            \"X XXX X XX  XXX XXX XXX XXXXX XXXXXXX\",\n            \"X     X X XXX XXX XXX XXX X  XX   XX \",\n            \"XXXXXXX XXX  XX  XX  XX  XX  X X XXXX\"\n        };\n        private static readonly string[] Modules170 = {\n            \"XXXXXXX   X   X   X   X   X   XXXXXXX\",\n            \"X     X  X   X   X   X   X    X     X\",\n            \"X XXX X X  X   X   X   X   X  X XXX X\",\n            \"X XXX X  X  XX  XX  XX  XX  X X XXX X\",\n            \"X XXX X  X  XX  XX  XX  XX  X X XXX X\",\n            \"X     X   XXX XXX XXX XXX XXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X  X   X   X   X   X         \",\n            \"XXX XXXXX   X   X   X   X   XXX   X  \",\n            \" X X X     XXX XXX XXX XXX XX X X  X \",\n            \"     XXXXXXXX XXX XXX XXX XXXX  X X X\",\n            \"   XXX  XXX XXX XXX XXX XXX XX  XXXXX\",\n            \"      XXXXXX  XX  XX  XX  XX  XX XX X\",\n            \" XXX   X  XX  XX  XX  XX  XX X  X XX \",\n            \"X XXXXX  XX  X   X   X   X   X  X X X\",\n            \" XXXX      X   X   X   X   X XXXX XXX\",\n            \"  XX  XXXXX X   X   X   X   XX XXXX  \",\n            \" XX        XXX XXX XXX XXX XXX  X  XX\",\n            \"XXXXXXX X XXX XXX XXX XXX XXX X   XX \",\n            \" X XX    XX XXX XXX XXX XXX X    X X \",\n            \"XXXXX X XXXX  XX  XX  XX  XX  XXXX   \",\n            \"  X  X  XXXX  XX  XX  XX  XX    X XXX\",\n            \"  X XXX X X  X   X   X   X   X  X X  \",\n            \" XXXX  XXXXX   X   X   X   X XX  X  X\",\n            \"XX XXXXXX   X   X   X   X   XX XX   X\",\n            \"   XXX  X  XXX XXX XXX XXX XXX  XX XX\",\n            \"X  XXXX  X XX XXX XXX XXX XXX X      \",\n            \" XXX     X  XXX XXX XXX XXX X  XX XXX\",\n            \"X XX  XXX  X  XX  XX  XX  XXXXXXX XX \",\n            \"        XX X  XX  XX  XX  X X   XX X \",\n            \"XXXXXXX X    X   X   X   X  X X X    \",\n            \"X     X XXXX   X   X   X   XX   X XXX\",\n            \"X XXX X XXX X   X   X   X   XXXXX   X\",\n            \"X XXX X  XXXXX XXX XXX XXX   X X XXX \",\n            \"X XXX X X  XX XXX XXX XXX X XXX X X X\",\n            \"X     X XXX XXX XXX XXX XXXX  XX XX  \",\n            \"XXXXXXX X XX  XX  XX  XX  XX      X X\"\n        };\n        private static readonly string[] Modules171 = {\n            \"XXXXXXX X X XX X  XXXXXXX\",\n            \"X     X XXXX XX   X     X\",\n            \"X XXX X X X XXX X X XXX X\",\n            \"X XXX X X XX  X X X XXX X\",\n            \"X XXX X X   XX    X XXX X\",\n            \"X     X     XXX   X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        XXX  X  X        \",\n            \" XX X XX      X   X XXXXX\",\n            \"XXXX    X X    XXXXX XXXX\",\n            \"X XX  X XX X X XX X X X  \",\n            \" X XXX     X   XXXX X X X\",\n            \" XX XXX   X      X X    X\",\n            \" X X X XX X  X XXX X XXXX\",\n            \"X X XXXX   X X XX X X    \",\n            \" X   X    XX XX  XX  X XX\",\n            \"X  X  X X  X XXXXXXXX XX \",\n            \"        X     XXX   XX X \",\n            \"XXXXXXX X X X   X X X    \",\n            \"X     X     X XXX   XX XX\",\n            \"X XXX X XX X XX XXXXX X X\",\n            \"X XXX X  XX   XX  X    X \",\n            \"X XXX X X X XXX    X  X X\",\n            \"X     X X X    X XXX XX  \",\n            \"XXXXXXX   XX  X   XX XX X\"\n        };\n        private static readonly string[] Modules172 = {\n            \"XXXXXXX XXXXX X XXXX  X XXX X XXXXXXX\",\n            \"X     X  X X     X  X      X  X     X\",\n            \"X XXX X   XXXX     XXX X X    X XXX X\",\n            \"X XXX X X X  X X XXXXXXX  X   X XXX X\",\n            \"X XXX X XX X    X XXXXX  X  X X XXX X\",\n            \"X     X XX XXXX   XX XXXXXXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X     X XXX   X X XX         \",\n            \"X   X XXXXXX XXX  XX  XXXXX XXXXXX  X\",\n            \"XXXXXX X X  X X X  XXX       XXXX    \",\n            \"X X   XXX XXXX  XX  X      X  XX  XXX\",\n            \"     X X  XXXXX  XX   X XX XXX   XX X\",\n            \"X  XXXXXXXXXX  XX XXX XX    X X  X  X\",\n            \"X  XXX  XXXX     X X    X   X  XX X X\",\n            \" XXXXXX X   XXXX  XX XXXXXX X X  XX X\",\n            \"XX  X    XX   XXX  XXX X X  XXXX   XX\",\n            \"   X XXXXXX XX  X   X    X X X XX XX \",\n            \"XXX    X         XXX  X X X X X  XX  \",\n            \"   X  X XX XX  X  XX XXXX X XX  XX XX\",\n            \"XX XXX       X XX  XXX X X   XXXX  XX\",\n            \" XXXX X  XXX X          X  X X  X  X \",\n            \"  X X   X   X X X XXXXX  X    X   XXX\",\n            \"X X  XX  XXXX   XX  X      XXX   X X \",\n            \" X X X  X   XXX  XX   X X XXX  XXXX  \",\n            \" XX   XXX  XX XX  XX  XXXXXXX X X   X\",\n            \"X      XXX X  X X  XXX       XXXX   X\",\n            \"     XX  X      XX  X     XX X X  XXX\",\n            \"  XX X X   X X   XX   X X  XXXX  XXXX\",\n            \"XX   XXXX X  XXXX XXX XX XX XXXXXX  X\",\n            \"        XXXXXX   X X    X X X   X   X\",\n            \"XXXXXXX X   X XX  XX XXXXXXXX X XX  X\",\n            \"X     X   X   XXX  XXX X X XX   XXXXX\",\n            \"X XXX X X  XXXX X   X    X XXXXXX  X \",\n            \"X XXX X  XX  XX  XXX  X X X  X  XXX X\",\n            \"X XXX X  X XXXXX  XX XXXXXXX XX XX X \",\n            \"X     X   X X  XX  XXX X X XX X      \",\n            \"XXXXXXX X  X XX         XX XX   X   X\"\n        };\n        private static readonly string[] Modules173 = {\n            \"XXXXXXX  X XXXX  XX     X X   XXXXXXX\",\n            \"X     X X   X XX  X  X XX X   X     X\",\n            \"X XXX X  XX  XXX XXX    XXXX  X XXX X\",\n            \"X XXX X        XXXX XX X XX X X XXX X\",\n            \"X XXX X XXXX X    X XX        X XXX X\",\n            \"X     X      X X X XX X  X    X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"          X  XX  XXX    XXXXX        \",\n            \"X X X X  X X  XXX X    XX X     X  X \",\n            \" X  X  XX  X   XXXXX   XX XX   X X XX\",\n            \"   X XXX XX  XXXX X  X XX X  X XXXX  \",\n            \" X  XX     XX X XXXX    X  X X X X  X\",\n            \"XX X XX XX XXX X  X X  X X    XX XX X\",\n            \"  X X     X X XX  XXXX X  XXXXXX XXX \",\n            \"XX  X X  X X X   X XX X  X XXX  X XX \",\n            \"X      X X   XXX    XXXX     XX   XXX\",\n            \" X XXXX XX  X      XX X    XXX  X  X \",\n            \" X X X XXX XX XX   XXXXX   XXX  X XXX\",\n            \"X X  XX       X  X XX X    XX X      \",\n            \"X  X X X  X    X    XXXX    XXX X XXX\",\n            \"  XX  XX X X    X  X  X XX XXX XX XX \",\n            \"X  XXX   X X   XXX X  XXXXXX X  XXX  \",\n            \"   X  X X X   XXX X  X XX X X X X   X\",\n            \"   XXX XX X X X XXXX    XXXX    XX   \",\n            \"  X X X X XXXXXXX X    XX XX  XXX X X\",\n            \"  XX X X    X  XXXXX   XX XX   X X X \",\n            \"X XX  X X  XX XXX X  X XX     XXXXX  \",\n            \" XXXXX    XX    XXXX    XX X XXX X XX\",\n            \"X   XXX X     XX  X X  X  X XXXXXXX X\",\n            \"        X X  XXX  XXXX X   XX   XX X \",\n            \"XXXXXXX  X X     X XX X  X  X X X  X \",\n            \"X     X      XXX    XXXX   XX   XX XX\",\n            \"X XXX X X XXX X    XX X    XXXXXX XX \",\n            \"X XXX X   XXXX X   XXXXX   X  X   XX \",\n            \"X XXX X X    X   X XX X  X          X\",\n            \"X     X     XX X    XXXX   X  XX  X  \",\n            \"XXXXXXX X XX  X X  X  X X  X   XX X X\"\n        };\n        private static readonly string[] Modules174 = {\n            \"XXXXXXX X X XX X  XXXXXXX\",\n            \"X     X XXXX XX   X     X\",\n            \"X XXX X X X XXX X X XXX X\",\n            \"X XXX X X XX  X X X XXX X\",\n            \"X XXX X X   XX    X XXX X\",\n            \"X     X     XXX   X     X\",\n            \"XXXXXXX X X X X X XXXXXXX\",\n            \"        XXX  X  X        \",\n            \" XX X XX      X   X XXXXX\",\n            \"XXXX    X X    XXXXX XXXX\",\n            \"X XX  X XX X X XX X X X  \",\n            \" X XXX     X   XXXX X X X\",\n            \" XX XXX   X      X X    X\",\n            \" X X X XX X  X XXX X XXXX\",\n            \"X X XXXX   X X XX X X    \",\n            \" X   X    XX XX  XX  X XX\",\n            \"X  X  X X  X XXXXXXXX XX \",\n            \"        X     XXX   XX X \",\n            \"XXXXXXX X X X   X X X    \",\n            \"X     X     X XXX   XX XX\",\n            \"X XXX X XX X XX XXXXX X X\",\n            \"X XXX X  XX   XX  X    X \",\n            \"X XXX X X X XXX    X  X X\",\n            \"X     X X X    X XXX XX  \",\n            \"XXXXXXX   XX  X   XX XX X\"\n        };\n        private static readonly string[] Modules175 = {\n            \"XXXXXXX   X  X XX   XXX XXX X XXXXXXX\",\n            \"X     X  X XX    X X     XXX  X     X\",\n            \"X XXX X X  XXXX XX    XX  X   X XXX X\",\n            \"X XXX X   X X   X  XXXXXX     X XXX X\",\n            \"X XXX X XXX  XXXX   X   XX  X X XXX X\",\n            \"X     X XXXXX   X  X     XXX  X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"           XXXX   X  X X  XX         \",\n            \" X  X X XXXXXXX         XXXX X XX X  \",\n            \"  XX X XXXXXXXXXX XX XX  X  XXXXXXX X\",\n            \"XXXX XXX X     X X  X     X XXXX X  X\",\n            \"X XX X XX     XXXX    X X    XX    XX\",\n            \"X  X XXX XXXX  X X X  XXX XX  X X  X \",\n            \"  XX     X XXX XX   XX X X  X XXXXXXX\",\n            \"  XX XX  X X XXX X XX       X XX X  X\",\n            \"X XX X  X   XX XXX X  X   X  X   X X \",\n            \"XX   XXXXXX   XX X    X XXXXX X   XXX\",\n            \"X XXX  XXX       X   X        X  X  X\",\n            \" XX XXXX XXXXX X X   XX  XXX  X  X XX\",\n            \" X   X   X   XXXX X  XX XX XXXXXX  XX\",\n            \"XXXXX XXXXXX XX XX     XXX  XX X X  X\",\n            \"XX X   XXXX   X X X  X    X   X    XX\",\n            \" XXXXXXX   XXX   XX      XX X X   XX \",\n            \" X   X   XX  XXXX X   X XX X XX XXX  \",\n            \"XX XXXXX X X XX  XX   XX X  XX XXX  X\",\n            \"XXX    X X    X    XX   X X   X    XX\",\n            \"    X X     XX XX  X XXXX XX X  X XX \",\n            \"    X  XXXXX X XX  XXX X   XXXXXXXX  \",\n            \"XXXX  X XXXXX XX  XXX   X X XXXXXX  X\",\n            \"        XXXXX X       X   XXX   X  XX\",\n            \"XXXXXXX    X  XXX  XXXX  XXXX X X   X\",\n            \"X     X  XXXX XXX  XXX   X XX   XX XX\",\n            \"X XXX X XXX   XXX X X    X  XXXXX X  \",\n            \"X XXX X   X  XX  X X XX XXXX  XXX X X\",\n            \"X XXX X  XXX X  X XX   XX  XXX XXXXX \",\n            \"X     X XX       XXXX XX  XXX X X    \",\n            \"XXXXXXX   X  X X  X X X  XXXX    XX X\"\n        };\n        private static readonly string[] Modules176 = {\n            \"XXXXXXX X      X   XXX  X X   XXXXXXX\",\n            \"X     X X     XX  XXXX XXX    X     X\",\n            \"X XXX X XX   X XX X XXX X  X  X XXX X\",\n            \"X XXX X X   XX      XX XXX  X X XXX X\",\n            \"X XXX X XX    XX   XX X X     X XXX X\",\n            \"X     X   X   XXXXXXXX XXX    X     X\",\n            \"XXXXXXX X X X X X X X X X X X XXXXXXX\",\n            \"        X XXX X X XX XXX XXXX        \",\n            \" XX X XX X XX X X  X  X X XXX X XXXXX\",\n            \"X      X  X  X  XX XX XXXXXXX  X  XX \",\n            \" X    XXX  XX X   X  X XX  XX  XX  X \",\n            \"XXXXXX  X X  XXX X X    XX  XXXX  XXX\",\n            \"XX XXXX  X XXX XXX     XXXXXX XXX XX \",\n            \"X    X  X    XX XXX     XXXXXX X  X  \",\n            \"X     X X   XX    XX X XX XXXX XX  X \",\n            \"XXXXXX XX X X  X X       XX XX X XXX \",\n            \"X   XXX XX   XXXXX X    X XX  XX   XX\",\n            \"    XX X   XX XX  X X  XX XX X  X  X \",\n            \"XX XX XXX X  XX   X X XXXX   X  X    \",\n            \"    XX X XX   XX  XX X  X  X XX X XXX\",\n            \"X XX  X XX X  X  X X  XXX    X   XX X\",\n            \" XX  X X  XXX  XXX  X  XX  X X  XX   \",\n            \"XX  X XXXX   XXX    XX XXX XXX  XXX X\",\n            \"    XX X X    XX  XX    X  XXXXXXX   \",\n            \"X  X XX  XXX  X XXXX   X     X  XXX X\",\n            \" X X X XX  XX  X XXX X X   X X  XX   \",\n            \"X XXXXX XX X XX XXXXX X       X  XX X\",\n            \" X      XX X   X    XXXX X X XX XX   \",\n            \"X XXX XXXX XXXXXX X X X XXX XXXXXXX X\",\n            \"        X X    X XX XXXXX   X   XX   \",\n            \"XXXXXXX XX  X   XXXX  XXXX  X X XX X \",\n            \"X     X  X XXXXX    XXX    XX   XXXXX\",\n            \"X XXX X XX   XXX  XXX X     XXXXX    \",\n            \"X XXX X  XXXXX X  XXX XX X   X X XXX \",\n            \"X XXX X X X XXXXXX XXX    X X XX  X X\",\n            \"X     X XXX  X  XXX X  X XXX  XXX X  \",\n            \"XXXXXXX        XX XXX     XX   X X  X\"\n        };\n        private static readonly string[] Modules177 = {\n            \"XXXXXXX X  X X        XXXXXXX\",\n            \"X     X X  XXXX  XX X X     X\",\n            \"X XXX X X XXXXXX XX   X XXX X\",\n            \"X XXX X  XX  X X X    X XXX X\",\n            \"X XXX X   XXX XXXXX X X XXX X\",\n            \"X     X XX XXX X X X  X     X\",\n            \"XXXXXXX X X X X X X X XXXXXXX\",\n            \"        XX   XXXXXXX         \",\n            \"  XXX X X X XX X     XXX  XXX\",\n            \"XX X X XXX XX    XX X XX  XXX\",\n            \"  XX XX XXX   XXXX X    X XXX\",\n            \"XX  XX X  XX X   X XXX X XXXX\",\n            \"XXX X XX    XX   XXX XX XX  X\",\n            \"XXX XX X X XX X   XX    X  X \",\n            \"     XX X  X X  X     X  XXX \",\n            \"  XXXX XXX X    XXX XX  X XX \",\n            \"XX XX XX XXXXXXXX  XXX X  XXX\",\n            \"XX   X XX XXXX XXXX  X X X X \",\n            \"X  X XXXX  XX  XXX  X X X  XX\",\n            \"X  X    X   XX X     X   XXXX\",\n            \"X X XXX X XXXXXXXXX XXXXXX X \",\n            \"        X  XX  X XXXX   X XX \",\n            \"XXXXXXX  X   X X  XXX X X  XX\",\n            \"X     X   XX   X XX X   XXXX \",\n            \"X XXX X X  X X X  X XXXXX XXX\",\n            \"X XXX X XX  XXX  X    X XX X \",\n            \"X XXX X XXX  XXXXXXX    X XX \",\n            \"X     X  XX XXXX  X   X  XX  \",\n            \"XXXXXXX    XX X X XXXXX  X X \"\n        };\n        private static readonly string[] Modules178 = {\n            \"XXXXXXX XXXXXX X  X    XXXXX  X X XXXXXXX\",\n            \"X     X X   X   XXXX   XXXXXX XX  X     X\",\n            \"X XXX X XXXXXX X XXXX XX X X   XX X XXX X\",\n            \"X XXX X         X XXX X X XX  XXX X XXX X\",\n            \"X XXX X  XX XX  X   X X    XXX    X XXX X\",\n            \"X     X XXX  XXXX XX XX         X X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"        X  XX X   X  X XXXX X X          \",\n            \"  XXX X X X   XXXXX  X XX    XX XXXX  XXX\",\n            \"  XX X  XXX X  X  X XX    XX XXX X X XX  \",\n            \"      XX  X X  XX X   X X XX X   X    XX \",\n            \" XX XX     XX  XX  XX X  X X XX X  X  X  \",\n            \"X X X X XXX X XX  X X X XXX X    X  X XX \",\n            \" X  X  X XXXXX  XXX   XX XXX  X X   XX X \",\n            \" X X XXXXXX  XX   X  X     XX XX X  X X X\",\n            \"   XXX  X    X  XXXXX XXX  X   XXXXX XXXX\",\n            \"   X  X X XX X       XXXXX X  XXXX  XX  X\",\n            \" X X      XX  X X X XX XX XXXX   X  X    \",\n            \" XX X XXXX  X X   X   X XX   X  X X  X  X\",\n            \"X  X X X   XXXXXXXXXX X X   XXX  XX    X \",\n            \"  X X X  XX  XX   XXX  X XX X     X XX   \",\n            \" XX  X  XXX         X   X XX  X XX X XXX \",\n            \"X X  XX   XX  XXXX X     X XXXXX X    XXX\",\n            \"X X X  X X    X X      X X X XXXX  X XXXX\",\n            \"X  X XX  X   X  XXX XXX X XX   XXX XX  X \",\n            \" X  XX XX  XXX XXX XXXX  XXX  X X   X  X \",\n            \"     XX  X X XXXX XX  XXXX    XX  XXXXX X\",\n            \"   X X  XX X     X  XXXXX XX    XXX X XXX\",\n            \"X     XXXXXX X X   XXXX   X   XXX XX  X X\",\n            \"X        X    X XX XXX  XXXXXX   X X  X  \",\n            \"X X  XX X X  X   XX  X  XX   X  X   X  X \",\n            \"X XX X XX XXXX X X X    XXX XXX  X X XX  \",\n            \"X    XXX X X XX XX   X   X  X   XXXXXXXX \",\n            \"        X X XX  X  XXXXX X X  X X   XXX  \",\n            \"XXXXXXX   X XX  XX   XXXXX XX X X X X X X\",\n            \"X     X  XX XX XXXX     X XX   XX   XXXXX\",\n            \"X XXX X XXX   X  X X  XXX XX  XXXXXXX  XX\",\n            \"X XXX X X  X XXXXXX  X X   XX   XXX    X \",\n            \"X XXX X XXX      X X   XXXX  XXXX  X X X \",\n            \"X     X  XXXXXXX X XX  X X  XXXX X  X    \",\n            \"XXXXXXX       X XX X X XXX   X       X X \"\n        };\n        private static readonly string[] Modules179 = {\n            \"XXXXXXX X  XXXX X X XXXXXX  X X   XXXXXXX\",\n            \"X     X    X X  X         XXXX    X     X\",\n            \"X XXX X    XXXX XXXX X X XX X  X  X XXX X\",\n            \"X XXX X X  XXX  XX  X XX XXX X  X X XXX X\",\n            \"X XXX X     XXXX     X    X  X  X X XXX X\",\n            \"X     X  XXXX XXXX   XXXXX   XXXX X     X\",\n            \"XXXXXXX X X X X X X X X X X X X X XXXXXXX\",\n            \"             XX  X X X    X XX X         \",\n            \"  X XXX XX       XX X XXX XXXXX  X   X  X\",\n            \"XXXX   XXXXX X X X XXX XXXXX     X  X X  \",\n            \"  XXX XXXX  X X   X XX  X   XX  X X     X\",\n            \"X X X  X     X XXXX X XXX  X   XX   XXX  \",\n            \"X  X  X     X   X X  X  XX X    X X X   X\",\n            \"X   XX   XX     X  X  X X XX X XX  X   X \",\n            \" XX XXXX     X XX X X X   X   XXX X X  X \",\n            \"XX XX  XX  XX   X   X X  X X XX XXX X XXX\",\n            \"  X X X  X X XXXX   X  XXXX X XX  X XXXX \",\n            \"X  X X X  X XXX XX XXX   XXXX XX X X X   \",\n            \" X X  XX  X X  XX X XX  XXXXXX   X   XXX \",\n            \" X X          XXX   X XX X  X  X XXXXX X \",\n            \"   X  X X    X XX XX XXX X X    XX  XXXXX\",\n            \"X X    XXXXXXX   XXXX  X XXX X XXX  X XX \",\n            \"X  XXXX XX X     X XXXX  XX  XXXX X      \",\n            \" XX XX   X XXXX XXXX    X  X    X   X XXX\",\n            \"X X XXX X X  XXX XX     X   X  X  XXX X X\",\n            \"X   X   X      XX X XXXXX XX X XX  X X X \",\n            \"  XXXXX X XX X    XXXX XXXXXX XXXX XXX X \",\n            \"XX X   XXX  XX    XXXXX  XXX XXXXXXX XXXX\",\n            \"X XXX XX   X XX X  X       XX XX X X   X \",\n            \" X   X X X XXXX X X XX X  XXX XX X  XXX  \",\n            \"X  XXXX  X   XXXXXX X X XXXXXX   XX X X X\",\n            \" XXX    X X    X  X    X  X X  X X  X X  \",\n            \"X XXXXXXX XX X X X  X X  XXX    XXXXXX  X\",\n            \"        X XX    XXX XXX X  X X XX   X X  \",\n            \"XXXXXXX  X  XXXX X  X  XXXX   X X X X  X \",\n            \"X     X XXXX   XX  X   X XXX XX X   X XXX\",\n            \"X XXX X X      XXX XXX XX   X XXXXXXX X  \",\n            \"X XXX X     X XXX  X X  XX XXXXXXXXXXX X \",\n            \"X XXX X X     XXXX XXXXXXX XXXXX XXX XX X\",\n            \"X     X  XX   XX  X X   X   X    X X X   \",\n            \"XXXXXXX  XX    X X XX XXXXXXXX  XXX  XX X\"\n        };\n        private static readonly QrCodeTestCase[] TestCases = new QrCodeTestCase[] {\n            new QrCodeTestCase(0, Segment0, Modules0, Ecc.Low, 1, 40, -1, true, Ecc.High, 1, 6),\n            new QrCodeTestCase(1, Segment0, Modules1, Ecc.Low, 4, 4, -1, false, Ecc.Low, 4, 1),\n            new QrCodeTestCase(2, Segment0, Modules2, Ecc.Low, 4, 4, 0, false, Ecc.Low, 4, 0),\n            new QrCodeTestCase(3, Segment0, Modules3, Ecc.Medium, 1, 40, -1, true, Ecc.High, 1, 6),\n            new QrCodeTestCase(4, Segment0, Modules4, Ecc.Medium, 4, 4, -1, false, Ecc.Medium, 4, 2),\n            new QrCodeTestCase(5, Segment0, Modules5, Ecc.Medium, 4, 4, 0, false, Ecc.Medium, 4, 0),\n            new QrCodeTestCase(6, Segment0, Modules6, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 1, 6),\n            new QrCodeTestCase(7, Segment0, Modules7, Ecc.Quartile, 4, 4, -1, false, Ecc.Quartile, 4, 4),\n            new QrCodeTestCase(8, Segment0, Modules8, Ecc.Quartile, 4, 4, 0, false, Ecc.Quartile, 4, 0),\n            new QrCodeTestCase(9, Segment0, Modules9, Ecc.High, 1, 40, -1, true, Ecc.High, 1, 6),\n            new QrCodeTestCase(10, Segment0, Modules10, Ecc.High, 4, 4, -1, false, Ecc.High, 4, 4),\n            new QrCodeTestCase(11, Segment0, Modules11, Ecc.High, 4, 4, 0, false, Ecc.High, 4, 0),\n            new QrCodeTestCase(12, Segment1, Modules12, Ecc.Low, 1, 40, -1, true, Ecc.High, 1, 4),\n            new QrCodeTestCase(13, Segment1, Modules13, Ecc.Low, 4, 4, -1, false, Ecc.Low, 4, 0),\n            new QrCodeTestCase(14, Segment1, Modules14, Ecc.Low, 4, 4, 1, false, Ecc.Low, 4, 1),\n            new QrCodeTestCase(15, Segment1, Modules15, Ecc.Medium, 1, 40, -1, true, Ecc.High, 1, 4),\n            new QrCodeTestCase(16, Segment1, Modules16, Ecc.Medium, 4, 4, -1, false, Ecc.Medium, 4, 2),\n            new QrCodeTestCase(17, Segment1, Modules17, Ecc.Medium, 4, 4, 1, false, Ecc.Medium, 4, 1),\n            new QrCodeTestCase(18, Segment1, Modules18, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 1, 4),\n            new QrCodeTestCase(19, Segment1, Modules19, Ecc.Quartile, 4, 4, -1, false, Ecc.Quartile, 4, 2),\n            new QrCodeTestCase(20, Segment1, Modules20, Ecc.Quartile, 4, 4, 1, false, Ecc.Quartile, 4, 1),\n            new QrCodeTestCase(21, Segment1, Modules21, Ecc.High, 1, 40, -1, true, Ecc.High, 1, 4),\n            new QrCodeTestCase(22, Segment1, Modules22, Ecc.High, 4, 4, -1, false, Ecc.High, 4, 6),\n            new QrCodeTestCase(23, Segment1, Modules23, Ecc.High, 4, 4, 1, false, Ecc.High, 4, 1),\n            new QrCodeTestCase(24, Segment2, Modules24, Ecc.Low, 1, 40, -1, true, Ecc.Medium, 1, 2),\n            new QrCodeTestCase(25, Segment2, Modules25, Ecc.Low, 4, 4, -1, false, Ecc.Low, 4, 1),\n            new QrCodeTestCase(26, Segment2, Modules26, Ecc.Low, 4, 4, 2, false, Ecc.Low, 4, 2),\n            new QrCodeTestCase(27, Segment2, Modules27, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 1, 2),\n            new QrCodeTestCase(28, Segment2, Modules28, Ecc.Medium, 4, 4, -1, false, Ecc.Medium, 4, 6),\n            new QrCodeTestCase(29, Segment2, Modules29, Ecc.Medium, 4, 4, 2, false, Ecc.Medium, 4, 2),\n            new QrCodeTestCase(30, Segment2, Modules30, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 2, 2),\n            new QrCodeTestCase(31, Segment2, Modules31, Ecc.Quartile, 5, 5, -1, false, Ecc.Quartile, 5, 7),\n            new QrCodeTestCase(32, Segment2, Modules32, Ecc.Quartile, 5, 5, 2, false, Ecc.Quartile, 5, 2),\n            new QrCodeTestCase(33, Segment2, Modules33, Ecc.High, 1, 40, -1, true, Ecc.High, 2, 2),\n            new QrCodeTestCase(34, Segment2, Modules34, Ecc.High, 5, 5, -1, false, Ecc.High, 5, 4),\n            new QrCodeTestCase(35, Segment2, Modules35, Ecc.High, 5, 5, 2, false, Ecc.High, 5, 2),\n            new QrCodeTestCase(36, Segment3, Modules36, Ecc.Low, 1, 40, -1, true, Ecc.Low, 3, 3),\n            new QrCodeTestCase(37, Segment3, Modules37, Ecc.Low, 6, 6, -1, false, Ecc.Low, 6, 2),\n            new QrCodeTestCase(38, Segment3, Modules38, Ecc.Low, 6, 6, 3, false, Ecc.Low, 6, 3),\n            new QrCodeTestCase(39, Segment3, Modules39, Ecc.Medium, 1, 40, -1, true, Ecc.Quartile, 4, 2),\n            new QrCodeTestCase(40, Segment3, Modules40, Ecc.Medium, 7, 7, -1, false, Ecc.Medium, 7, 0),\n            new QrCodeTestCase(41, Segment3, Modules41, Ecc.Medium, 7, 7, 3, false, Ecc.Medium, 7, 3),\n            new QrCodeTestCase(42, Segment3, Modules42, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 4, 2),\n            new QrCodeTestCase(43, Segment3, Modules43, Ecc.Quartile, 7, 7, -1, false, Ecc.Quartile, 7, 5),\n            new QrCodeTestCase(44, Segment3, Modules44, Ecc.Quartile, 7, 7, 3, false, Ecc.Quartile, 7, 3),\n            new QrCodeTestCase(45, Segment3, Modules45, Ecc.High, 1, 40, -1, true, Ecc.High, 5, 4),\n            new QrCodeTestCase(46, Segment3, Modules46, Ecc.High, 8, 8, -1, false, Ecc.High, 8, 7),\n            new QrCodeTestCase(47, Segment3, Modules47, Ecc.High, 8, 8, 3, false, Ecc.High, 8, 3),\n            new QrCodeTestCase(48, Segment4, Modules48, Ecc.Low, 1, 40, -1, true, Ecc.High, 1, 1),\n            new QrCodeTestCase(49, Segment4, Modules49, Ecc.Low, 4, 4, -1, false, Ecc.Low, 4, 0),\n            new QrCodeTestCase(50, Segment4, Modules50, Ecc.Low, 4, 4, 4, false, Ecc.Low, 4, 4),\n            new QrCodeTestCase(51, Segment4, Modules51, Ecc.Medium, 1, 40, -1, true, Ecc.High, 1, 1),\n            new QrCodeTestCase(52, Segment4, Modules52, Ecc.Medium, 4, 4, -1, false, Ecc.Medium, 4, 4),\n            new QrCodeTestCase(53, Segment4, Modules53, Ecc.Medium, 4, 4, 4, false, Ecc.Medium, 4, 4),\n            new QrCodeTestCase(54, Segment4, Modules54, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 1, 1),\n            new QrCodeTestCase(55, Segment4, Modules55, Ecc.Quartile, 4, 4, -1, false, Ecc.Quartile, 4, 0),\n            new QrCodeTestCase(56, Segment4, Modules56, Ecc.Quartile, 4, 4, 4, false, Ecc.Quartile, 4, 4),\n            new QrCodeTestCase(57, Segment4, Modules57, Ecc.High, 1, 40, -1, true, Ecc.High, 1, 1),\n            new QrCodeTestCase(58, Segment4, Modules58, Ecc.High, 4, 4, -1, false, Ecc.High, 4, 6),\n            new QrCodeTestCase(59, Segment4, Modules59, Ecc.High, 4, 4, 4, false, Ecc.High, 4, 4),\n            new QrCodeTestCase(60, Segment5, Modules60, Ecc.Low, 1, 40, -1, true, Ecc.Low, 9, 4),\n            new QrCodeTestCase(61, Segment5, Modules61, Ecc.Low, 12, 12, -1, false, Ecc.Low, 12, 2),\n            new QrCodeTestCase(62, Segment5, Modules62, Ecc.Low, 12, 12, 5, false, Ecc.Low, 12, 5),\n            new QrCodeTestCase(63, Segment5, Modules63, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 11, 4),\n            new QrCodeTestCase(64, Segment5, Modules64, Ecc.Medium, 14, 14, -1, false, Ecc.Medium, 14, 7),\n            new QrCodeTestCase(65, Segment5, Modules65, Ecc.Medium, 14, 14, 5, false, Ecc.Medium, 14, 5),\n            new QrCodeTestCase(66, Segment5, Modules66, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 13, 4),\n            new QrCodeTestCase(67, Segment5, Modules67, Ecc.Quartile, 16, 16, -1, false, Ecc.Quartile, 16, 4),\n            new QrCodeTestCase(68, Segment5, Modules68, Ecc.Quartile, 16, 16, 5, false, Ecc.Quartile, 16, 5),\n            new QrCodeTestCase(69, Segment5, Modules69, Ecc.High, 1, 40, -1, true, Ecc.High, 15, 1),\n            new QrCodeTestCase(70, Segment5, Modules70, Ecc.High, 18, 18, -1, false, Ecc.High, 18, 7),\n            new QrCodeTestCase(71, Segment5, Modules71, Ecc.High, 18, 18, 5, false, Ecc.High, 18, 5),\n            new QrCodeTestCase(72, Segment6, Modules72, Ecc.Low, 1, 40, -1, true, Ecc.Quartile, 2, 7),\n            new QrCodeTestCase(73, Segment6, Modules73, Ecc.Low, 5, 5, -1, false, Ecc.Low, 5, 0),\n            new QrCodeTestCase(74, Segment6, Modules74, Ecc.Low, 5, 5, 6, false, Ecc.Low, 5, 6),\n            new QrCodeTestCase(75, Segment6, Modules75, Ecc.Medium, 1, 40, -1, true, Ecc.Quartile, 2, 7),\n            new QrCodeTestCase(76, Segment6, Modules76, Ecc.Medium, 5, 5, -1, false, Ecc.Medium, 5, 6),\n            new QrCodeTestCase(77, Segment6, Modules77, Ecc.Medium, 5, 5, 6, false, Ecc.Medium, 5, 6),\n            new QrCodeTestCase(78, Segment6, Modules78, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 2, 7),\n            new QrCodeTestCase(79, Segment6, Modules79, Ecc.Quartile, 5, 5, -1, false, Ecc.Quartile, 5, 0),\n            new QrCodeTestCase(80, Segment6, Modules80, Ecc.Quartile, 5, 5, 6, false, Ecc.Quartile, 5, 6),\n            new QrCodeTestCase(81, Segment6, Modules81, Ecc.High, 1, 40, -1, true, Ecc.High, 3, 6),\n            new QrCodeTestCase(82, Segment6, Modules82, Ecc.High, 6, 6, -1, false, Ecc.High, 6, 1),\n            new QrCodeTestCase(83, Segment6, Modules83, Ecc.High, 6, 6, 6, false, Ecc.High, 6, 6),\n            new QrCodeTestCase(84, Segment7, Modules84, Ecc.Low, 1, 40, -1, true, Ecc.Medium, 3, 1),\n            new QrCodeTestCase(85, Segment7, Modules85, Ecc.Low, 6, 6, -1, false, Ecc.Low, 6, 4),\n            new QrCodeTestCase(86, Segment7, Modules86, Ecc.Low, 6, 6, 0, false, Ecc.Low, 6, 0),\n            new QrCodeTestCase(87, Segment7, Modules87, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 3, 1),\n            new QrCodeTestCase(88, Segment7, Modules88, Ecc.Medium, 6, 6, -1, false, Ecc.Medium, 6, 6),\n            new QrCodeTestCase(89, Segment7, Modules89, Ecc.Medium, 6, 6, 0, false, Ecc.Medium, 6, 0),\n            new QrCodeTestCase(90, Segment7, Modules90, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 4, 0),\n            new QrCodeTestCase(91, Segment7, Modules91, Ecc.Quartile, 7, 7, -1, false, Ecc.Quartile, 7, 4),\n            new QrCodeTestCase(92, Segment7, Modules92, Ecc.Quartile, 7, 7, 0, false, Ecc.Quartile, 7, 0),\n            new QrCodeTestCase(93, Segment7, Modules93, Ecc.High, 1, 40, -1, true, Ecc.High, 5, 1),\n            new QrCodeTestCase(94, Segment7, Modules94, Ecc.High, 8, 8, -1, false, Ecc.High, 8, 0),\n            new QrCodeTestCase(95, Segment7, Modules95, Ecc.High, 8, 8, 0, false, Ecc.High, 8, 0),\n            new QrCodeTestCase(96, Segment8, Modules96, Ecc.Low, 1, 40, -1, true, Ecc.Medium, 3, 7),\n            new QrCodeTestCase(97, Segment8, Modules97, Ecc.Low, 6, 6, -1, false, Ecc.Low, 6, 4),\n            new QrCodeTestCase(98, Segment8, Modules98, Ecc.Low, 6, 6, 1, false, Ecc.Low, 6, 1),\n            new QrCodeTestCase(99, Segment8, Modules99, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 3, 7),\n            new QrCodeTestCase(100, Segment8, Modules100, Ecc.Medium, 6, 6, -1, false, Ecc.Medium, 6, 2),\n            new QrCodeTestCase(101, Segment8, Modules101, Ecc.Medium, 6, 6, 1, false, Ecc.Medium, 6, 1),\n            new QrCodeTestCase(102, Segment8, Modules102, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 4, 6),\n            new QrCodeTestCase(103, Segment8, Modules103, Ecc.Quartile, 7, 7, -1, false, Ecc.Quartile, 7, 0),\n            new QrCodeTestCase(104, Segment8, Modules104, Ecc.Quartile, 7, 7, 1, false, Ecc.Quartile, 7, 1),\n            new QrCodeTestCase(105, Segment8, Modules105, Ecc.High, 1, 40, -1, true, Ecc.High, 5, 6),\n            new QrCodeTestCase(106, Segment8, Modules106, Ecc.High, 8, 8, -1, false, Ecc.High, 8, 0),\n            new QrCodeTestCase(107, Segment8, Modules107, Ecc.High, 8, 8, 1, false, Ecc.High, 8, 1),\n            new QrCodeTestCase(108, Segment9, Modules108, Ecc.Low, 1, 40, -1, true, Ecc.Low, 17, 2),\n            new QrCodeTestCase(109, Segment9, Modules109, Ecc.Low, 20, 20, -1, false, Ecc.Low, 20, 2),\n            new QrCodeTestCase(110, Segment9, Modules110, Ecc.Low, 20, 20, 2, false, Ecc.Low, 20, 2),\n            new QrCodeTestCase(111, Segment9, Modules111, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 19, 2),\n            new QrCodeTestCase(112, Segment9, Modules112, Ecc.Medium, 22, 22, -1, false, Ecc.Medium, 22, 4),\n            new QrCodeTestCase(113, Segment9, Modules113, Ecc.Medium, 22, 22, 2, false, Ecc.Medium, 22, 2),\n            new QrCodeTestCase(114, Segment9, Modules114, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 23, 4),\n            new QrCodeTestCase(115, Segment9, Modules115, Ecc.Quartile, 26, 26, -1, false, Ecc.Quartile, 26, 2),\n            new QrCodeTestCase(116, Segment9, Modules116, Ecc.Quartile, 26, 26, 2, false, Ecc.Quartile, 26, 2),\n            new QrCodeTestCase(117, Segment9, Modules117, Ecc.High, 1, 40, -1, true, Ecc.High, 26, 2),\n            new QrCodeTestCase(118, Segment9, Modules118, Ecc.High, 29, 29, -1, false, Ecc.High, 29, 2),\n            new QrCodeTestCase(119, Segment9, Modules119, Ecc.High, 29, 29, 2, false, Ecc.High, 29, 2),\n            new QrCodeTestCase(120, Segment10, Modules120, Ecc.Low, 1, 40, -1, true, Ecc.Medium, 2, 6),\n            new QrCodeTestCase(121, Segment10, Modules121, Ecc.Low, 5, 5, -1, false, Ecc.Low, 5, 1),\n            new QrCodeTestCase(122, Segment10, Modules122, Ecc.Low, 5, 5, 3, false, Ecc.Low, 5, 3),\n            new QrCodeTestCase(123, Segment10, Modules123, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 2, 6),\n            new QrCodeTestCase(124, Segment10, Modules124, Ecc.Medium, 5, 5, -1, false, Ecc.Medium, 5, 6),\n            new QrCodeTestCase(125, Segment10, Modules125, Ecc.Medium, 5, 5, 3, false, Ecc.Medium, 5, 3),\n            new QrCodeTestCase(126, Segment10, Modules126, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 3, 4),\n            new QrCodeTestCase(127, Segment10, Modules127, Ecc.Quartile, 6, 6, -1, false, Ecc.Quartile, 6, 0),\n            new QrCodeTestCase(128, Segment10, Modules128, Ecc.Quartile, 6, 6, 3, false, Ecc.Quartile, 6, 3),\n            new QrCodeTestCase(129, Segment10, Modules129, Ecc.High, 1, 40, -1, true, Ecc.High, 3, 4),\n            new QrCodeTestCase(130, Segment10, Modules130, Ecc.High, 6, 6, -1, false, Ecc.High, 6, 6),\n            new QrCodeTestCase(131, Segment10, Modules131, Ecc.High, 6, 6, 3, false, Ecc.High, 6, 3),\n            new QrCodeTestCase(132, Segment11, Modules132, Ecc.Low, 1, 40, -1, true, Ecc.Low, 7, 2),\n            new QrCodeTestCase(133, Segment11, Modules133, Ecc.Low, 10, 10, -1, false, Ecc.Low, 10, 2),\n            new QrCodeTestCase(134, Segment11, Modules134, Ecc.Low, 10, 10, 4, false, Ecc.Low, 10, 4),\n            new QrCodeTestCase(135, Segment11, Modules135, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 8, 6),\n            new QrCodeTestCase(136, Segment11, Modules136, Ecc.Medium, 11, 11, -1, false, Ecc.Medium, 11, 4),\n            new QrCodeTestCase(137, Segment11, Modules137, Ecc.Medium, 11, 11, 4, false, Ecc.Medium, 11, 4),\n            new QrCodeTestCase(138, Segment11, Modules138, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 10, 2),\n            new QrCodeTestCase(139, Segment11, Modules139, Ecc.Quartile, 13, 13, -1, false, Ecc.Quartile, 13, 6),\n            new QrCodeTestCase(140, Segment11, Modules140, Ecc.Quartile, 13, 13, 4, false, Ecc.Quartile, 13, 4),\n            new QrCodeTestCase(141, Segment11, Modules141, Ecc.High, 1, 40, -1, true, Ecc.High, 12, 3),\n            new QrCodeTestCase(142, Segment11, Modules142, Ecc.High, 15, 15, -1, false, Ecc.High, 15, 4),\n            new QrCodeTestCase(143, Segment11, Modules143, Ecc.High, 15, 15, 4, false, Ecc.High, 15, 4),\n            new QrCodeTestCase(144, Segment12, Modules144, Ecc.Low, 1, 40, -1, true, Ecc.High, 1, 3),\n            new QrCodeTestCase(145, Segment12, Modules145, Ecc.Low, 4, 4, -1, false, Ecc.Low, 4, 0),\n            new QrCodeTestCase(146, Segment12, Modules146, Ecc.Low, 4, 4, 5, false, Ecc.Low, 4, 5),\n            new QrCodeTestCase(147, Segment12, Modules147, Ecc.Medium, 1, 40, -1, true, Ecc.High, 1, 3),\n            new QrCodeTestCase(148, Segment12, Modules148, Ecc.Medium, 4, 4, -1, false, Ecc.Medium, 4, 0),\n            new QrCodeTestCase(149, Segment12, Modules149, Ecc.Medium, 4, 4, 5, false, Ecc.Medium, 4, 5),\n            new QrCodeTestCase(150, Segment12, Modules150, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 1, 3),\n            new QrCodeTestCase(151, Segment12, Modules151, Ecc.Quartile, 4, 4, -1, false, Ecc.Quartile, 4, 0),\n            new QrCodeTestCase(152, Segment12, Modules152, Ecc.Quartile, 4, 4, 5, false, Ecc.Quartile, 4, 5),\n            new QrCodeTestCase(153, Segment12, Modules153, Ecc.High, 1, 40, -1, true, Ecc.High, 1, 3),\n            new QrCodeTestCase(154, Segment12, Modules154, Ecc.High, 4, 4, -1, false, Ecc.High, 4, 7),\n            new QrCodeTestCase(155, Segment12, Modules155, Ecc.High, 4, 4, 5, false, Ecc.High, 4, 5),\n            new QrCodeTestCase(156, Segment13, Modules156, Ecc.Low, 1, 40, -1, true, Ecc.Medium, 2, 2),\n            new QrCodeTestCase(157, Segment13, Modules157, Ecc.Low, 5, 5, -1, false, Ecc.Low, 5, 1),\n            new QrCodeTestCase(158, Segment13, Modules158, Ecc.Low, 5, 5, 6, false, Ecc.Low, 5, 6),\n            new QrCodeTestCase(159, Segment13, Modules159, Ecc.Medium, 1, 40, -1, true, Ecc.Medium, 2, 2),\n            new QrCodeTestCase(160, Segment13, Modules160, Ecc.Medium, 5, 5, -1, false, Ecc.Medium, 5, 4),\n            new QrCodeTestCase(161, Segment13, Modules161, Ecc.Medium, 5, 5, 6, false, Ecc.Medium, 5, 6),\n            new QrCodeTestCase(162, Segment13, Modules162, Ecc.Quartile, 1, 40, -1, true, Ecc.High, 3, 1),\n            new QrCodeTestCase(163, Segment13, Modules163, Ecc.Quartile, 6, 6, -1, false, Ecc.Quartile, 6, 4),\n            new QrCodeTestCase(164, Segment13, Modules164, Ecc.Quartile, 6, 6, 6, false, Ecc.Quartile, 6, 6),\n            new QrCodeTestCase(165, Segment13, Modules165, Ecc.High, 1, 40, -1, true, Ecc.High, 3, 1),\n            new QrCodeTestCase(166, Segment13, Modules166, Ecc.High, 6, 6, -1, false, Ecc.High, 6, 7),\n            new QrCodeTestCase(167, Segment13, Modules167, Ecc.High, 6, 6, 6, false, Ecc.High, 6, 6),\n            new QrCodeTestCase(168, Segment14, Modules168, Ecc.Low, 1, 40, -1, true, Ecc.Quartile, 2, 0),\n            new QrCodeTestCase(169, Segment14, Modules169, Ecc.Low, 5, 5, -1, false, Ecc.Low, 5, 1),\n            new QrCodeTestCase(170, Segment14, Modules170, Ecc.Low, 5, 5, 0, false, Ecc.Low, 5, 0),\n            new QrCodeTestCase(171, Segment14, Modules171, Ecc.Medium, 1, 40, -1, true, Ecc.Quartile, 2, 0),\n            new QrCodeTestCase(172, Segment14, Modules172, Ecc.Medium, 5, 5, -1, false, Ecc.Medium, 5, 4),\n            new QrCodeTestCase(173, Segment14, Modules173, Ecc.Medium, 5, 5, 0, false, Ecc.Medium, 5, 0),\n            new QrCodeTestCase(174, Segment14, Modules174, Ecc.Quartile, 1, 40, -1, true, Ecc.Quartile, 2, 0),\n            new QrCodeTestCase(175, Segment14, Modules175, Ecc.Quartile, 5, 5, -1, false, Ecc.Quartile, 5, 4),\n            new QrCodeTestCase(176, Segment14, Modules176, Ecc.Quartile, 5, 5, 0, false, Ecc.Quartile, 5, 0),\n            new QrCodeTestCase(177, Segment14, Modules177, Ecc.High, 1, 40, -1, true, Ecc.High, 3, 2),\n            new QrCodeTestCase(178, Segment14, Modules178, Ecc.High, 6, 6, -1, false, Ecc.High, 6, 2),\n            new QrCodeTestCase(179, Segment14, Modules179, Ecc.High, 6, 6, 0, false, Ecc.High, 6, 0)\n        };\n\n\n        public IEnumerator<object[]> GetEnumerator()\n        {\n            foreach (var testCase in TestCases)\n            {\n                yield return new object[] { testCase };\n            }\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrCodeGeneratorTest.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net6.0;net8.0</TargetFrameworks>\n    <TargetFrameworks Condition=\"$([MSBuild]::IsOSPlatform('Windows'))\">net481;$(TargetFrameworks)</TargetFrameworks>\n    <RootNamespace>Net.Codecrete.QrCodeGenerator.Test</RootNamespace>\n    <SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>\n    <TestResultsFile>$([System.IO.Path]::Combine($(MSBuildThisFileDirectory),'..','TestResults-$(MSBuildProjectName)-$(TargetFramework).html'))</TestResultsFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <VSTestLogger Include=\"html%3BLogFileName=$([System.IO.Path]::GetFullPath($(TestResultsFile)))\" Visible=\"false\" />\n  </ItemGroup>\n\n  <PropertyGroup>\n    <VSTestLogger>@(VSTestLogger)</VSTestLogger>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.13.0\" />\n    <PackageReference Include=\"Verify.ImageMagick\" Version=\"3.8.1\" />\n    <PackageReference Include=\"Verify.Xunit\" Version=\"31.9.2\" />\n    <PackageReference Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"3.0.2\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\QrCodeGenerator\\QrCodeGenerator.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrCodeTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing Xunit;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class QrCodeTest\n    {\n        [Theory]\n        [ClassData(typeof(QrCodeDataProvider))]\n        public void TestQrCode(QrCodeTestCase testCase)\n        {\n            var qrCode = EncodeSegments(testCase.Segments, testCase.RequestedEcc, testCase.MinVersion, testCase.MaxVersion, testCase.RequestedMask, testCase.BoostEcl);\n            Assert.Equal(testCase.ExpectedModules.Length, qrCode.Size);\n            Assert.Equal(testCase.EffectiveEcc, qrCode.ErrorCorrectionLevel);\n            Assert.Equal(testCase.EffectiveMask, qrCode.Mask);\n            Assert.Equal(testCase.ExpectedModules, TestHelper.ToStringArray(qrCode));\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrCodeTestCase.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System.Collections.Generic;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class QrCodeTestCase\n    {\n        public int Index { get; set; }\n        public List<QrSegment> Segments { get; set; }\n        public string[] ExpectedModules { get; set; }\n        public Ecc RequestedEcc { get; set; }\n        public int MinVersion { get; set; }\n        public int MaxVersion { get; set; }\n        public int RequestedMask { get; set; }\n        public bool BoostEcl { get; set; }\n        public Ecc EffectiveEcc { get; set; }\n        public int EffectiveVersion { get; set; }\n        public int EffectiveMask { get; set; }\n\n        public QrCodeTestCase(int index, List<QrSegment> segments, string[] expectedModules,\n            Ecc requestedEcc, int minVersion, int maxVersion, int requestedMask, bool boostEcl,\n            Ecc effectiveEcc, int effectiveVersion,  int effectiveMask)\n        {\n            Index = index;\n            Segments = segments;\n            ExpectedModules = expectedModules;\n            RequestedEcc = requestedEcc;\n            MinVersion = minVersion;\n            MaxVersion = maxVersion;\n            RequestedMask = requestedMask;\n            BoostEcl = boostEcl;\n            EffectiveEcc = effectiveEcc;\n            EffectiveVersion = effectiveVersion;\n            EffectiveMask = effectiveMask;\n        }\n\n        public override string ToString()\n        {\n            return $\"Case {Index}\";\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrSegmentEncodingTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System;\nusing System.Collections;\nusing System.Text;\nusing Xunit;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class QrSegmentEncodingTest\n    {\n        private const string TextNumeric = \"83930\";\n\n        private const int BitLengthNumeric = 17;\n\n        private static readonly byte[] BitsNumeric = { 139, 243, 0 };\n\n        private const string TextAlphanumeric = \"$%*+-./ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n        private const int BitLengthAlphanumeric = 242;\n\n        private static readonly byte[] BitsAlphanumeric = {\n            43, 63,240, 245, 223, 12, 64, 232,\n            162, 147, 168, 116,228, 172,  40, 21,\n            170, 67, 243, 58, 211, 175, 81, 76,\n            109, 33, 107, 218, 193, 225, 2\n        };\n\n        private const string TextUtf8 = \"😐ö€\";\n\n        private const int BitLengthUtf8 = 72;\n\n        private static readonly byte[] BitsUtf8 = { 15, 249, 25, 9, 195, 109, 71, 65, 53 };\n\n        [Fact]\n        public void NumericEncoding()\n        {\n            var segment = QrSegment.MakeNumeric(TextNumeric);\n            Assert.Equal(segment.EncodingMode, QrSegment.Mode.Numeric);\n            Assert.Equal(TextNumeric.Length, segment.NumChars);\n\n            var data = segment.GetData();\n            Assert.Equal(BitLengthNumeric, data.Length);\n\n            Assert.Equal(BitsNumeric, BitArrayToByteArray(data));\n            Assert.Equal(TextNumeric, segment.GetText());\n        }\n\n        [Fact]\n        public void RejectNonNumeric()\n        {\n            Assert.Throws<ArgumentOutOfRangeException>(() => QrSegment.MakeNumeric(\"abc\"));\n        }\n\n        [Fact]\n        public void AlphanumericEncoding()\n        {\n            var segment = QrSegment.MakeAlphanumeric(TextAlphanumeric);\n            Assert.Equal(segment.EncodingMode, QrSegment.Mode.Alphanumeric);\n            Assert.Equal(TextAlphanumeric.Length, segment.NumChars);\n\n            var data = segment.GetData();\n            Assert.Equal(BitLengthAlphanumeric, data.Length);\n\n            Assert.Equal(BitsAlphanumeric, BitArrayToByteArray(data));\n            Assert.Equal(TextAlphanumeric, segment.GetText());\n        }\n\n        [Fact]\n        public void RejectNonAlphanumeric()\n        {\n            Assert.Throws<ArgumentOutOfRangeException>(() => QrSegment.MakeAlphanumeric(\"abc,def\"));\n        }\n\n        [Fact]\n        public void AutoNumericEncoding()\n        {\n            var segments = QrSegment.MakeSegments(TextNumeric);\n            Assert.Single(segments);\n\n            var segment = segments[0];\n            Assert.Equal(segment.EncodingMode, QrSegment.Mode.Numeric);\n            Assert.Equal(TextNumeric.Length, segment.NumChars);\n\n            var data = segment.GetData();\n            Assert.Equal(BitLengthNumeric, data.Length);\n\n            Assert.Equal(BitsNumeric, BitArrayToByteArray(data));\n            Assert.Equal(TextNumeric, segment.GetText());\n        }\n\n        [Fact]\n        public void AutoAlphanumericEncoding()\n        {\n            var segments = QrSegment.MakeSegments(TextAlphanumeric);\n            Assert.Single(segments);\n\n            var segment = segments[0];\n            Assert.Equal(segment.EncodingMode, QrSegment.Mode.Alphanumeric);\n            Assert.Equal(TextAlphanumeric.Length, segment.NumChars);\n\n            var data = segment.GetData();\n            Assert.Equal(BitLengthAlphanumeric, data.Length);\n\n            Assert.Equal(BitsAlphanumeric, BitArrayToByteArray(data));\n            Assert.Equal(TextAlphanumeric, segment.GetText());\n        }\n\n        [Fact]\n        public void Utf8Encoding()\n        {\n            var segments = QrSegment.MakeSegments(TextUtf8);\n            Assert.Single(segments);\n            var segment = segments[0];\n            Assert.Equal(segment.EncodingMode, QrSegment.Mode.Byte);\n            Assert.Equal(Encoding.UTF8.GetBytes(TextUtf8).Length, segment.NumChars);\n\n            var data = segment.GetData();\n            Assert.Equal(BitLengthUtf8, data.Length);\n\n            Assert.Equal(BitsUtf8, BitArrayToByteArray(data));\n            Assert.Equal(TextUtf8, segment.GetText());\n        }\n\n        [Fact]\n        public void EmptyTest()\n        {\n            var segments = QrSegment.MakeSegments(\"\");\n            Assert.Empty(segments);\n            Assert.Equal(\"\", QrSegment.GetJoinedText(segments));\n        }\n\n        private static byte[] BitArrayToByteArray(BitArray buffer)\n        {\n            var len = buffer.Length;\n            var result = new byte[(len + 7) / 8];\n            buffer.CopyTo(result, 0);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/QrSegmentRegexTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing Xunit;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class QrSegmentRegexTest\n    {\n        [Fact]\n        public void IsNumeric()\n        {\n            Assert.True(QrSegment.IsNumeric(\"1234\"));\n        }\n\n        [Fact]\n        public void EmptyIsNumeric()\n        {\n            Assert.True(QrSegment.IsNumeric(\"\"));\n        }\n\n        [Fact]\n        public void TextIsNotNumeric()\n        {\n            Assert.False(QrSegment.IsNumeric(\"123a\"));\n        }\n\n        [Fact]\n        public void WhitespaceIsNotNumeric()\n        {\n            Assert.False(QrSegment.IsNumeric(\"123\\n345\"));\n        }\n\n        [Fact]\n        public void ValidAlphanumeric()\n        {\n            Assert.True(QrSegment.IsAlphanumeric(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./\"));\n        }\n\n        [Fact]\n        public void EmptyIsAlphanumeric()\n        {\n            Assert.True(QrSegment.IsAlphanumeric(\"\"));\n        }\n\n        [Fact]\n        public void InvalidAlphanumeric()\n        {\n            Assert.False(QrSegment.IsAlphanumeric(\",\"));\n            Assert.False(QrSegment.IsAlphanumeric(\"^\"));\n            Assert.False(QrSegment.IsAlphanumeric(\"(\"));\n            Assert.False(QrSegment.IsAlphanumeric(\"a\"));\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/RandomData.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * \n */\n\nusing System;\nusing System.Text;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    internal static class RandomData\n    {\n        internal const string AlphanumericCharset = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n\n        internal static string MakeAlphanumericString(int length, int seed)\n        {\n            var random = new Random(seed);\n            var charsetLength = AlphanumericCharset.Length;\n            var chars = new char[length];\n            for (int i = 0; i < length; i++)\n            {\n                chars[i] = AlphanumericCharset[random.Next(charsetLength)];\n            }\n            return new string(chars);\n        }\n\n\n        internal static string MakeString(int length, int seed)\n        {\n            // create batches of characters from similar alphabets\n            var random = new Random(seed);\n            var result = new StringBuilder(length);\n\n            int n = 0;\n            while (n < length)\n            {\n                var alphabet = random.Next(4);\n                var batchSize = Math.Min(length - n, random.Next(1, alphabet == 0 ? 20 : 3));\n                for (var i = 0; i < batchSize; i++)\n                {\n                    switch (alphabet)\n                    {\n                        case 0: // Alphanumeric\n                            result.Append(AlphanumericCharset[random.Next(AlphanumericCharset.Length)]);\n                            break;\n                        case 1: // Basic Latin\n                            result.Append((char)random.Next(0x20, 0x7e));\n                            break;\n                        case 2: // Latin-1 Supplement (subset)\n                            result.Append((char)random.Next(0xc0, 0xcf));\n                            break;\n                        case 3: // Emoticons\n                            int codePoint = random.Next(0x1f600, 0x1f608);\n                            result.Append(char.ConvertFromUtf32(codePoint));\n                            break;\n                    }\n                }\n                n += batchSize;\n\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/StructuredAppendTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * \n */\n\nusing Xunit;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class StructuredAppendTest\n    {\n        [Fact]\n        public void EncodeAlphanumericStringInMultipleCodes()\n        {\n            var text = RandomData.MakeAlphanumericString(3000, seed: 1001);\n            var segments = QrSegmentAdvanced.MakeSegmentsForMultipleCodes(text, QrCode.Ecc.Medium, version: 29);\n            Assert.Equal(2, segments.Count);\n            Assert.Equal(text, QrSegment.GetJoinedText(segments));\n        }\n\n        [Fact]\n        public void EncodeStringInMultipleCodes()\n        {\n            var text = RandomData.MakeString(3003, seed: 2003);\n            var segments = QrSegmentAdvanced.MakeSegmentsForMultipleCodes(text, QrCode.Ecc.Medium, version: 31);\n            Assert.Equal(3, segments.Count);\n            Assert.Equal(text, QrSegment.GetJoinedText(segments));\n        }\n\n        [Fact]\n        public void EncodeVeryLongStringInMultipleCodes()\n        {\n            var text = RandomData.MakeString(35006, seed: 9117);\n            var segments = QrSegmentAdvanced.MakeSegmentsForMultipleCodes(text, QrCode.Ecc.Low, version: 40);\n            Assert.Equal(16, segments.Count);\n            Assert.Equal(text, QrSegment.GetJoinedText(segments));\n        }\n\n        [Fact]\n        public void RejectTooLongString()\n        {\n            var text = RandomData.MakeString(10017, seed: 7543);\n            var exception = Assert.Throws<DataTooLongException>(() => QrSegmentAdvanced.MakeSegmentsForMultipleCodes(text, QrCode.Ecc.High, version: 19));\n            Assert.Equal(\"The text is too long to fit into 16 QR codes\", exception.Message);\n        }\n\n        [Fact]\n        public void CreateMultipleQrCodes()\n        {\n            var text = RandomData.MakeString(2117, seed: 8172);\n            var qrCodes = QrCode.EncodeTextInMultipleCodes(text, QrCode.Ecc.Medium, version: 33);\n            Assert.Equal(2, qrCodes.Count);\n        }\n\n        [Fact]\n        public void CreateSingleQrCode()\n        {\n            var text = RandomData.MakeAlphanumericString(2632, seed: 3200);\n            var qrCodes = QrCode.EncodeTextInMultipleCodes(text, QrCode.Ecc.Medium, version: 35);\n            Assert.Single(qrCodes);\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/SvgTest.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\nusing Xunit;\nusing static Net.Codecrete.QrCodeGenerator.QrCode;\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    public class SvgTest\n    {\n        private const string CodeText = \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.\";\n\n        [Fact]\n        public void SvgImage()\n        {\n            var qrCode = EncodeText(CodeText, Ecc.Medium);\n            var svg = qrCode.ToSvgString(0);\n\n            Assert.StartsWith(\"<?xml\", svg);\n            Assert.Contains(\"\\\"0 0 69 69\\\"\", svg); // view box\n\n            File.WriteAllText(\"qrcode.svg\", svg, Encoding.UTF8);\n        }\n\n        [Fact]\n        public void SvgImageWithColor()\n        {\n            var qrCode = EncodeText(CodeText, Ecc.Medium);\n            var svg = qrCode.ToSvgString(0, \"#FF0000\", \"#000000\");\n\n            Assert.Contains(\"#000000\", svg);\n            Assert.Contains(\"#FF0000\", svg);\n\n            Assert.DoesNotContain(\"#FFFFFF\", svg);\n        }\n\n        [Fact]\n        public void SvgPath()\n        {\n            var qrCode = EncodeText(CodeText, Ecc.Medium);\n            var path = qrCode.ToGraphicsPath(3);\n\n            Assert.StartsWith(\"M3,3h\", path);\n            Assert.EndsWith(\"h1v1h-1z\", path);\n        }\n\n        [Theory]\n        [InlineData(\"en-US\")]\n        [InlineData(\"en-GB\")]\n        [InlineData(\"de-DE\")]\n        [InlineData(\"fr-FR\")]\n        [InlineData(\"nb-NO\")]\n        [InlineData(\"tr-TR\")]\n        [InlineData(\"zh-CN\")]\n        public void SvgLocale(string locale)\n        {\n            CultureInfo savedCurrentCulture = CultureInfo.CurrentCulture;\n            CultureInfo savedCurrentUiCulture = CultureInfo.CurrentUICulture;\n\n            CultureInfo culture = CultureInfo.CreateSpecificCulture(locale);\n\n            try\n            {\n                CultureInfo.CurrentCulture = culture;\n                CultureInfo.CurrentUICulture = culture;\n\n                var qrCode = EncodeText(\"A\", Ecc.Medium);\n                var svg = qrCode.ToSvgString(0);\n                Assert.Contains(\"d=\\\"M0,0h7v1h-7z\", svg);\n            }\n            finally\n            {\n                CultureInfo.CurrentCulture = savedCurrentCulture;\n                CultureInfo.CurrentUICulture = savedCurrentUiCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "QrCodeGeneratorTest/TestHelper.cs",
    "content": "﻿/* \n * QR code generator library (.NET)\n *\n * Copyright (c) Manuel Bleichenbacher (MIT License)\n * https://github.com/manuelbl/QrCodeGenerator\n * Copyright (c) Project Nayuki (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nnamespace Net.Codecrete.QrCodeGenerator.Test\n{\n    internal static class TestHelper\n    {\n        internal static string[] ToStringArray(QrCode qrCode)\n        {\n            var size = qrCode.Size;\n            var result = new string[size];\n\n            for (var y = 0; y < size; y++)\n            {\n                var row = new char[size];\n                for (var x = 0; x < size; x++)\n                {\n                    row[x] = qrCode.GetModule(x, y) ? 'X' : ' ';\n                }\n                result[y] = new string(row);\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "README.md",
    "content": "# QR Code Generator for .NET\n\nOpen-source library for generating QR codes from text strings and byte arrays.\n\nThe library is built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.) including .NET 6 on all platforms.\n\nIt is mostly a translation of project Nayuki's Java version of the QR code generator. The project provides implementations for\nmany more programming languages, and the [Project Nayuki web site](https://www.nayuki.io/page/qr-code-generator-library) has additional information about the implementation.\n\n\n## Features\n\nCore features:\n\n * Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard\n * Output formats: Raw modules/pixels of the QR symbol, SVG, XAML path, PNG and BMP files. For other raster bitmap formats, see [below](#raster-images--bitmaps).\n * Encodes numeric and special-alphanumeric text in less space than general text\n * Open source code under the permissive *MIT License*\n * Built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.).\n * Available as a [NuGet package](https://www.nuget.org/packages/Net.Codecrete.QrCodeGenerator/) (named *Net.Codecrete.QrCodeGenerator*)\n * Example code for WinForms, WPF, ASP.NET, ImageSharp, SkiaSharp and many more\n\nManual parameters:\n\n * You can specify the minimum and maximum *version number* allowed, and the library will automatically choose the smallest version in the range that fits the data.\n * You can specify the *mask pattern* manually, otherwise library will automatically evaluate all 8 masks and select the optimal one.\n * You can specify an *error correction level*, or optionally allow the library to boost it if it doesn't increase the size (version).\n * You can create a list of *data segments* manually and add *ECI segments*.\n\nOptional advanced features:\n\n * Long text can be split into multiple linked QR codes (aka Structured Append)\n * Encodes Japanese Unicode text in *Kanji mode* to save space compared to UTF-8 bytes\n * Computes *optimal segment mode* switching for text with mixed numeric/alphanumeric/general/kanji parts\n\n\n\n## Getting started\n\n1. Create a new Visual Studio project for .NET Core 3.1 (or higher) (*File > New > Project...* / *Visual C# > .NET Core > Console App (.NET Core)*)\n\n2. Add the library via NuGet:\n\n   Either via *Project > Manage NuGet Packages...* / *Browse* / search for *qrcodegenerator* / *Install*\n   \n   Or by running a command in the Package Manager Console\n\n```\nInstall-Package Net.Codecrete.QrCodeGenerator -Version 2.1.0\n```\n3. Add the code from the example below\n\n4. Run it\n\n\n## API Documention\n\nSee [API Documentation](https://codecrete.net/QrCodeGenerator/api/index.html)\n\n\n## Examples\n\n**Simple operation**\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class SimpleOperation\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            string svg = qr.ToSvgString(4);\n            File.WriteAllText(\"hello-world-qr.svg\", svg, Encoding.UTF8);\n        }\n    }\n}\n```\n\n**Manual operation**\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class ManualOperation\n    {\n        static void Main()\n        {\n            var segments = QrSegment.MakeSegments(\"3141592653589793238462643383\");\n            var qr = QrCode.EncodeSegments(segments, QrCode.Ecc.High, 5, 5, 2, false);\n            for (int y = 0; y < qr.Size; y++)\n            {\n                for (int x = 0; x < qr.Size; x++)\n                {\n                    ... paint qr.GetModule(x,y) ...\n                }\n            }\n        }\n    }\n}\n```\n\n\n## Requirements\n\nQR Code Generator for .NET requires a .NET implementation compatible with .NET Standard 2.0 or higher, i.e. any of:\n\n- .NET Core 2.0 or higher\n- .NET Framework 4.6.1 or higher\n- Mono 5.4 or higher\n- Universal Windows Platform 10.0.16299 or higher\n- Xamarin\n\n### Raster Images / Bitmaps\n\nStarting with .NET 6, *System.Drawing* is only supported on Windows operating system and thus cannot be used for multi-platform libraries like this one. Therefore, `ToBitmap()` has been removed.\n\nTwo raster bitmap formats are supported with the need for additional libraries:\n\n- *PNG*: See `QrCode.ToPngBitmap()`\n- *BMP*: See `QrCode.ToBmpBitmap()`\n\nThese methods are limited, e.g. with regards to the size of the generated image.\nFor more advanced and more efficient ways to generate different raster image formats:\n\n- Select one of the imaging libraries below\n- Add the NuGet dependencies to your project\n- Copy the appropriate `QrCodeBitmapExtensions.cs` file to your project\n\n| Imaging library | Recommendation | NuGet dependencies | Extension file |\n| ------- | -------------- | ------------------ | -------------- |\n| **System.Drawing** | For Windows only projects | `System.Drawing.Common` | [QrCodeBitmapExtensions.cs](Demo-System-Drawing/QrCodeBitmapExtensions.cs) |\n| **SkiaSharp** | For macOS, Linux, iOS, Android and multi-platform projects | `SkiaSharp` and `SkiaSharp.NativeAssets.Linux` (for Linux only) | [QrCodeBitmapExtensions.cs](Demo-SkiaSharp/QrCodeBitmapExtensions.cs) |\n| **ImageSharp** | Alternative for multi-platform projects. Might require a commercial license. | `SixLabors.ImageSharp.Drawing` | [QrCodeBitmapExtensions.cs](Demo-ImageSharp/QrCodeBitmapExtensions.cs) |\n\nUsing these extension methods, generating PNG images is straight-forward:\n\n```cslang\nusing Net.Codecrete.QrCodeGenerator;\n\nnamespace Examples\n{\n    class PngImage\n    {\n        static void Main()\n        {\n            var qr = QrCode.EncodeText(\"Hello, world!\", QrCode.Ecc.Medium);\n            qr.SaveAsPng(\"hello-world-qr.png\", 10, 3);\n        }\n    }\n}\n```\n\n## Examples\n\nSeveral example projects demonstrate how to generate QR code with different frameworks and libraries:\n\n- [Demo-QRCode-Variety](Demo-QRCode-Variety): Demonstrates how QR codes with different encodings, error correction and masks can be generated. All QR codes are saved as SVG files.\n\n- [Demo-WinUI](Demo-WinUI): Demonstrates how QR codes can be used in WinUI 3 applications and/or using [Win2D](https://github.com/microsoft/Win2D) (incl. copying to the clipboard).\n\n- [Demo-WindowsPresentationFoundation](Demo-WindowsPresentationFoundation): Demonstrates how QR codes can be used in WPF applications (incl. copying to the clipboard).\n\n- [Demo-WinForms](Demo-WinForms): Demonstrates how QR codes can be used in Windows Forms applications (incl. copying to the clipboard).\n\n- [Demo-ASP.NET-Core](Demo-ASP.NET-Core): Demonstrates how to create QR codes in a web application implemented using ASP.NET Core.\n\n- [Demo-VCard](Demo-VCard): Demonstrates how contact data (similar to business cards) can be saved in a QR Code using the VCard standard.\n\n- [Demo-System-Drawing](Demo-System-Drawing): Demonstrates how a QR code can be saved a PNG file, using the *System.Drawing* classes, which have become a Windows only technology starting with .NET 6.\n\n- [Demo-SkiaSharp](Demo-SkiaSharp): Demonstrates how a QR code can be saved a PNG file, using the SkiaSharp multi-platform raster image library.\n\n- [Demo-ImageSharp](Demo-ImageSharp): Demonstrates how a QR code can be saved a PNG file, using the ImageSharp raster image library. Additionally, a QR code with an image in the center is created.\n\n- [Demo-ImageMagick](Demo-ImageMagick): Demonstrates how a QR code can be saved a PNG file, using the Magick.NET image manipulation library (based on ImageMagick).\n"
  }
]