B4A Library [B4X] QRGenerator - Cross platform QR code generator (Amended to accommodate more QR Code Versions)

Johan Schoeman

Expert
Licensed User
This is based on @Erel's posting here:


Have added all the required generator polynomial factors that are required for Version 1 to Version 40 QR Codes
Changed the names of the array holding the generator polynomial factors to:
B4X:
    '7, 10, 13, 15, 16, 17, 18, 20, 22, 24, 26, 28, and 30
    Private Generator7() As Int = Array As Int(1, 127, 122, 154, 164, 11, 68, 117)
    Private Generator10() As Int = Array As Int(1, 216, 194, 159, 111, 199, 94, 95, 113, 157, 193)
    Private Generator13() As Int = Array As Int(1, 137, 73, 227, 17, 177, 17, 52, 13, 46, 43, 83, 132, 120)
    Private Generator15() As Int = Array As Int(1, 29, 196, 111, 163, 112, 74, 10, 105, 105, 139, 132, 151, 32, 134, 26)
    Private Generator16() As Int = Array As Int(1, 59, 13, 104, 189, 68, 209, 30, 8, 163, 65, 41, 229, 98, 50, 36, 59)
    Private Generator17() As Int = Array As Int(1, 119, 66, 83, 120, 119, 22, 197, 83, 249, 41, 143, 134, 85, 53, 125, 99, 79)
    Private Generator18() As Int = Array As Int(1, 239, 251, 183, 113, 149, 175, 199, 215, 240, 220, 73, 82, 173, 75, 32, 67, 217, 146)
    Private Generator20() As Int = Array As Int(1, 152, 185, 240, 5, 111, 99, 6, 220, 112, 150, 69, 36, 187, 22, 228, 198, 121, 121, 165, 174)
    Private Generator22() As Int = Array As Int(1, 89, 179, 131, 176, 182, 244, 19, 189, 69, 40, 28, 137, 29, 123, 67, 253, 86, 218, 230, 26, 145, 245)
    Private Generator24() As Int = Array As Int(1, 122, 118, 169, 70, 178, 237, 216, 102, 115, 150, 229, 73, 130, 72, 61, 43, 206, 1, 237, 247, 127, 217, 144, 117)
    Private Generator26() As Int = Array As Int(1, 246, 51, 183, 4, 136, 98, 199, 152, 77, 56, 206, 24, 145, 40, 209, 117, 233, 42, 135, 68, 70, 144, 146, 77, 43, 94)
    Private Generator28() As Int = Array As Int(1, 252, 9, 28, 13, 18, 251, 208, 150, 103, 174, 100, 41, 167, 12, 247, 56, 117, 119, 233, 127, 181, 100, 121, 147, 176, 74, 58, 197)
    Private Generator30() As Int = Array As Int(1, 212, 246, 77, 73, 195, 192, 75, 98, 5, 70, 103, 177, 22, 217, 138, 51, 181, 246, 72, 25, 18, 46, 228, 74, 216, 195, 11, 106, 130, 150)
Have added additional "setup code" in Sub Initialize(....) so that it can support Version 1 to Version 10 QR Codes for all 4 error correction levels (i.e Levels L, M, Q, H)

As it stands at present it supports:
1. Version 1 to 10 QR Code (error correction level L, M, Q, H)
2. Version 23H
3. Version 40H
4. Version 40L

Sample code that I have added/amended/changed:
B4X:
'version 1.60
Sub Class_Globals
    Private xui As XUI
    Public cvs As B4XCanvas
    Private ModuleSize As Int
    Private GFSize As Int = 256
    Private ExpTable(GFSize) As Int
    Private LogTable(GFSize) As Int
    Private PolyZero() As Int = Array As Int(0)
    '7, 10, 13, 15, 16, 17, 18, 20, 22, 24, 26, 28, and 30
    Private Generator7() As Int = Array As Int(1, 127, 122, 154, 164, 11, 68, 117)
    Private Generator10() As Int = Array As Int(1, 216, 194, 159, 111, 199, 94, 95, 113, 157, 193)
    Private Generator13() As Int = Array As Int(1, 137, 73, 227, 17, 177, 17, 52, 13, 46, 43, 83, 132, 120)
    Private Generator15() As Int = Array As Int(1, 29, 196, 111, 163, 112, 74, 10, 105, 105, 139, 132, 151, 32, 134, 26)
    Private Generator16() As Int = Array As Int(1, 59, 13, 104, 189, 68, 209, 30, 8, 163, 65, 41, 229, 98, 50, 36, 59)
    Private Generator17() As Int = Array As Int(1, 119, 66, 83, 120, 119, 22, 197, 83, 249, 41, 143, 134, 85, 53, 125, 99, 79)
    Private Generator18() As Int = Array As Int(1, 239, 251, 183, 113, 149, 175, 199, 215, 240, 220, 73, 82, 173, 75, 32, 67, 217, 146)
    Private Generator20() As Int = Array As Int(1, 152, 185, 240, 5, 111, 99, 6, 220, 112, 150, 69, 36, 187, 22, 228, 198, 121, 121, 165, 174)
    Private Generator22() As Int = Array As Int(1, 89, 179, 131, 176, 182, 244, 19, 189, 69, 40, 28, 137, 29, 123, 67, 253, 86, 218, 230, 26, 145, 245)
    Private Generator24() As Int = Array As Int(1, 122, 118, 169, 70, 178, 237, 216, 102, 115, 150, 229, 73, 130, 72, 61, 43, 206, 1, 237, 247, 127, 217, 144, 117)
    Private Generator26() As Int = Array As Int(1, 246, 51, 183, 4, 136, 98, 199, 152, 77, 56, 206, 24, 145, 40, 209, 117, 233, 42, 135, 68, 70, 144, 146, 77, 43, 94)
    Private Generator28() As Int = Array As Int(1, 252, 9, 28, 13, 18, 251, 208, 150, 103, 174, 100, 41, 167, 12, 247, 56, 117, 119, 233, 127, 181, 100, 121, 147, 176, 74, 58, 197)
    Private Generator30() As Int = Array As Int(1, 212, 246, 77, 73, 195, 192, 75, 98, 5, 70, 103, 177, 22, 217, 138, 51, 181, 246, 72, 25, 18, 46, 228, 74, 216, 195, 11, 106, 130, 150)


    Private TempBB As B4XBytesBuilder
    Private Matrix(0, 0) As Boolean
    Private Reserved(0, 0) As Boolean
    Private NumberOfModules As Int
    Private mBitmapSize As Int
    Type QRVersionData (Format() As Byte, Generator() As Int, MaxSize As Int, Version As Int, MaxUsableSize As Int, Alignments() As Int, _
        Group1Size As Int, Group2Size As Int, Block1Size As Int, Block2Size As Int, VersionName As String, VersionInformation() As Byte)
    Private versions As List
End Sub


Public Sub Initialize (BitmapSize As Int)
    TempBB.Initialize
    mBitmapSize = BitmapSize
    PrepareTables
    versions.Initialize
    'format information for masking pattern 0
    Dim L0() As Byte = Array As Byte(1,1,1,0,1,1,1,1,1,0,0,0,1,0,0)     'ECC Level L
    Dim M0() As Byte = Array As Byte(1,0,1,0,1,0,0,0,0,0,1,0,0,1,0)     'ECC Level M
    Dim Q0() As Byte = Array As Byte(0,1,1,0,1,0,1,0,1,0,1,1,1,1,1)     'ECC Level Q
    Dim H0() As Byte = Array As Byte(0,0,1,0,1,1,0,1,0,0,0,1,0,0,1)     'ECC Level H
    
    versions.Add(CreateVersionData(1, "1L", Generator7,  L0, 19 * 8, 17, Array As Int(), 1, 0, 19, 0, Null))
    versions.Add(CreateVersionData(1, "1M", Generator10, M0, 16 * 8, 14, Array As Int(), 1, 0, 16, 0, Null))
    versions.Add(CreateVersionData(1, "1Q", Generator13, Q0, 13 * 8, 11, Array As Int(), 1, 0, 13, 0, Null))
    versions.Add(CreateVersionData(1, "1H", Generator17, H0,  9 * 8,  7, Array As Int(), 1, 0,  9, 0, Null))
    
    versions.Add(CreateVersionData(2, "2L", Generator10, L0, 34 * 8, 32, Array As Int(6, 18), 1, 0, 34, 0, Null))
    versions.Add(CreateVersionData(2, "2M", Generator16, M0, 28 * 8, 26, Array As Int(6, 18), 1, 0, 28, 0, Null))
    versions.Add(CreateVersionData(2, "2Q", Generator22, Q0, 22 * 8, 20, Array As Int(6, 18), 1, 0, 22, 0, Null))
    versions.Add(CreateVersionData(2, "2H", Generator28, H0, 16 * 8, 14, Array As Int(6, 18), 1, 0, 16, 0, Null))

    versions.Add(CreateVersionData(3, "3L", Generator15, L0, 55 * 8, 53, Array As Int(6, 22), 1, 0, 55, 0, Null))
    versions.Add(CreateVersionData(3, "3M", Generator26, M0, 44 * 8, 42, Array As Int(6, 22), 1, 0, 44, 0, Null))
    versions.Add(CreateVersionData(3, "3Q", Generator18, Q0, 34 * 8, 32, Array As Int(6, 22), 2, 0, 17, 0, Null))
    versions.Add(CreateVersionData(3, "3H", Generator22, H0, 26 * 8, 24, Array As Int(6, 22), 2, 0, 13, 0, Null))
    
    versions.Add(CreateVersionData(4, "4L", Generator20, L0 , 80 * 8, 78, Array As Int(6, 26), 1, 0, 80, 0, Null))
    versions.Add(CreateVersionData(4, "4M", Generator18, M0 , 64 * 8, 62, Array As Int(6, 26), 2, 0, 32, 0, Null))
    versions.Add(CreateVersionData(4, "4Q", Generator26, Q0 , 48 * 8, 46, Array As Int(6, 26), 2, 0, 24, 0, Null))
    versions.Add(CreateVersionData(4, "4H", Generator16, H0 , 36 * 8, 34, Array As Int(6, 26), 4, 0,  9, 0, Null))
    
    versions.Add(CreateVersionData(5, "5L", Generator26, L0 , 108 * 8, 106, Array As Int(6, 30), 1, 0, 108,  0, Null))
    versions.Add(CreateVersionData(5, "5M", Generator24, M0 ,  86 * 8,  84, Array As Int(6, 30), 2, 0,  43,  0, Null))
    versions.Add(CreateVersionData(5, "5Q", Generator18, Q0 ,  62 * 8,  60, Array As Int(6, 30), 2, 2,  15, 16, Null))
    versions.Add(CreateVersionData(5, "5H", Generator22, H0 ,  46 * 8,  44, Array As Int(6, 30), 2, 2,  11, 12, Null))

    versions.Add(CreateVersionData(6, "6L", Generator18, L0 , 136 * 8, 134, Array As Int(6, 34), 2, 0, 68, 0, Null))
    versions.Add(CreateVersionData(6, "6M", Generator16, M0 , 108 * 8, 106, Array As Int(6, 34), 4, 0, 27, 0, Null))
    versions.Add(CreateVersionData(6, "6Q", Generator24, Q0 ,  76 * 8,  74, Array As Int(6, 34), 4, 0, 19, 0, Null))
    versions.Add(CreateVersionData(6, "6H", Generator28, H0 ,  60 * 8,  58, Array As Int(6, 34), 4, 0, 15, 0, Null))
    
    versions.Add(CreateVersionData(7, "7L", Generator20, L0 , 156 * 8, 154, Array As Int(6, 22, 38), 2, 0, 78,  0, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7M", Generator18, M0 , 124 * 8, 122, Array As Int(6, 22, 38), 4, 0, 31,  0, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7Q", Generator18, Q0 ,  88 * 8,  86, Array As Int(6, 22, 38), 2, 4, 14, 15, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7H", Generator26, H0 ,  66 * 8,  64, Array As Int(6, 22, 38), 4, 1, 13, 14, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    
    versions.Add(CreateVersionData(8, "8L", Generator24, L0 , 194 * 8, 192, Array As Int(6, 24, 42), 2, 0, 97,  0, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8M", Generator22, M0 , 154 * 8, 152, Array As Int(6, 24, 42), 2, 2, 38, 39, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8Q", Generator22, Q0 , 110 * 8, 108, Array As Int(6, 24, 42), 4, 2, 18, 19, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8H", Generator26, H0 ,  86 * 8,  84, Array As Int(6, 24, 42), 4, 2, 14, 15, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
        
    versions.Add(CreateVersionData(9, "9L", Generator30, L0,  232 * 8, 230, Array As Int(6, 26, 46), 2, 0, 116, 0, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9M", Generator22, M0 , 182 * 8, 180, Array As Int(6, 26, 46), 3, 2, 36, 37, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9Q", Generator20, Q0 , 132 * 8, 130, Array As Int(6, 26, 46), 4, 4, 16, 17, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9H", Generator24, H0 , 100 * 8,  98, Array As Int(6, 26, 46), 4, 4, 12, 13, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    
    versions.Add(CreateVersionData(10, "10L", Generator18, L0,  274 * 8, 271, Array As Int(6, 28, 50), 2, 2, 68, 69, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10M", Generator26, M0 , 216 * 8, 213, Array As Int(6, 28, 50), 4, 1, 43, 44, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10Q", Generator24, Q0 , 154 * 8, 151, Array As Int(6, 28, 50), 6, 2, 19, 20, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10H", Generator28, H0 , 122 * 8, 119, Array As Int(6, 28, 50), 6, 2, 15, 16, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    
    versions.Add(CreateVersionData(23, "23H", Generator30, H0, 464 * 8, 461, Array As Int(6, 30, 54, 78, 102), 16, 14, 15, 16, _
        Array As Byte(0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0)))
        
    versions.Add(CreateVersionData(40, "40H", Generator30, H0, 1276 * 8, 1273, Array As Int(6, 30, 58, 86, 114, 142, 170), 20, 61, 15, 16, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
        
    versions.Add(CreateVersionData(40, "40L", Generator30, L0, 2956 * 8, 2953, Array As Int(6, 30, 58, 86, 114, 142, 170), 19, 6, 118, 119, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
        
End Sub

1587909393482.png
 

Attachments

Johan Schoeman

Expert
Licensed User
Add this to the code module (QRGenerator.bas) to allow for Version 15 QR Codes (error correction levels L, M, Q, H)
B4X:
    versions.Add(CreateVersionData(15, "15L", Generator22, L0,  523 * 8, 520, Array As Int(6, 26, 48, 70),  5, 1, 87, 88, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15M", Generator24, M0 , 415 * 8, 412, Array As Int(6, 26, 48, 70),  5, 5, 41, 42, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15Q", Generator30, Q0 , 295 * 8, 292, Array As Int(6, 26, 48, 70),  5, 7, 24, 25, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15H", Generator24, H0 , 223 * 8, 220, Array As Int(6, 26, 48, 70), 11, 7, 12, 13, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
Tested and working ;)
 

Johan Schoeman

Expert
Licensed User
Add this to the code module (QRGenerator.bas) to allow for Version 13 QR Codes (error correction levels L, M, Q, H)

B4X:
    versions.Add(CreateVersionData(13, "13L", Generator26, L0,  428 * 8, 425, Array As Int(6, 34, 62),  4, 0, 107, 0, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13M", Generator22, M0 , 334 * 8, 331, Array As Int(6, 34, 62),  8, 1, 37, 38, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13Q", Generator24, Q0 , 244 * 8, 241, Array As Int(6, 34, 62),  8, 4, 20, 21, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13H", Generator22, H0 , 180 * 8, 177, Array As Int(6, 34, 62), 12, 4, 11, 12, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
Tested and working ;)
 

Johan Schoeman

Expert
Licensed User
Add this to the code module (QRGenerator.bas) to allow for Version 19 QR Codes (error correction levels L, M, Q, H)

B4X:
    versions.Add(CreateVersionData(19, "19L", Generator28, L0,  795 * 8, 792, Array As Int(6, 30, 58, 86),  3,  4, 113, 114, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19M", Generator26, M0 , 627 * 8, 624, Array As Int(6, 30, 58, 86),  3, 11,  44,  45, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19Q", Generator26, Q0 , 445 * 8, 442, Array As Int(6, 30, 58, 86), 17,  4,  21,  22, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19H", Generator26, H0 , 341 * 8, 338, Array As Int(6, 30, 58, 86),  9, 16,  13,  14, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
Tested and working ;)

1587916444255.png
 

Johan Schoeman

Expert
Licensed User
Add this to the code module (QRGenerator.bas) to allow for Version 39 QR Codes (error correction levels L, M, Q, H)

B4X:
    versions.Add(CreateVersionData(39, "39L", Generator30, L0,  2812 * 8, 2809, Array As Int(6, 26, 54, 82, 110, 138, 166),  20,   4, 117, 118, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39M", Generator28, M0 , 2216 * 8, 2213, Array As Int(6, 26, 54, 82, 110, 138, 166),  40,   7,  47,  48, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39Q", Generator30, Q0 , 1582 * 8, 1579, Array As Int(6, 26, 54, 82, 110, 138, 166),  43,  22,  24,  25, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39H", Generator30, H0 , 1222 * 8, 1219, Array As Int(6, 26, 54, 82, 110, 138, 166),  10,  67,  15,  16, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
1587919491020.png


Done with this for now unless someone has a requirement for a QR Code version other than what is in the project at present.

Enjoy! 🇿🇦
 

Attachments

Johan Schoeman

Expert
Licensed User
My final update for this - it will do QR Codes for:
1. Version 1 to 20 (ECC Levels L, M, Q, H)
2. Version 23 (ECC Levels L, M, Q, H)
3. Version 39 (ECC Levels L, M, Q, H)
4. Version 40 (ECC Levels L, M, Q, H)

There should hardly ever be a need to have a QR Code larger than Version 20. Most scanners support somewhere between Versions 10 and 20.

B4X:
Public Sub Initialize (BitmapSize As Int)
    TempBB.Initialize
    mBitmapSize = BitmapSize
    PrepareTables
    versions.Initialize
    'format information for masking pattern 0
    Dim L0() As Byte = Array As Byte(1,1,1,0,1,1,1,1,1,0,0,0,1,0,0)     'ECC Level L
    Dim M0() As Byte = Array As Byte(1,0,1,0,1,0,0,0,0,0,1,0,0,1,0)     'ECC Level M
    Dim Q0() As Byte = Array As Byte(0,1,1,0,1,0,1,0,1,0,1,1,1,1,1)     'ECC Level Q
    Dim H0() As Byte = Array As Byte(0,0,1,0,1,1,0,1,0,0,0,1,0,0,1)     'ECC Level H
    
    versions.Add(CreateVersionData(1, "1L", Generator7,  L0, 19 * 8, 17, Array As Int(), 1, 0, 19, 0, Null))
    versions.Add(CreateVersionData(1, "1M", Generator10, M0, 16 * 8, 14, Array As Int(), 1, 0, 16, 0, Null))
    versions.Add(CreateVersionData(1, "1Q", Generator13, Q0, 13 * 8, 11, Array As Int(), 1, 0, 13, 0, Null))
    versions.Add(CreateVersionData(1, "1H", Generator17, H0,  9 * 8,  7, Array As Int(), 1, 0,  9, 0, Null))
    
    versions.Add(CreateVersionData(2, "2L", Generator10, L0, 34 * 8, 32, Array As Int(6, 18), 1, 0, 34, 0, Null))
    versions.Add(CreateVersionData(2, "2M", Generator16, M0, 28 * 8, 26, Array As Int(6, 18), 1, 0, 28, 0, Null))
    versions.Add(CreateVersionData(2, "2Q", Generator22, Q0, 22 * 8, 20, Array As Int(6, 18), 1, 0, 22, 0, Null))
    versions.Add(CreateVersionData(2, "2H", Generator28, H0, 16 * 8, 14, Array As Int(6, 18), 1, 0, 16, 0, Null))

    versions.Add(CreateVersionData(3, "3L", Generator15, L0, 55 * 8, 53, Array As Int(6, 22), 1, 0, 55, 0, Null))
    versions.Add(CreateVersionData(3, "3M", Generator26, M0, 44 * 8, 42, Array As Int(6, 22), 1, 0, 44, 0, Null))
    versions.Add(CreateVersionData(3, "3Q", Generator18, Q0, 34 * 8, 32, Array As Int(6, 22), 2, 0, 17, 0, Null))
    versions.Add(CreateVersionData(3, "3H", Generator22, H0, 26 * 8, 24, Array As Int(6, 22), 2, 0, 13, 0, Null))
    
    versions.Add(CreateVersionData(4, "4L", Generator20, L0 , 80 * 8, 78, Array As Int(6, 26), 1, 0, 80, 0, Null))
    versions.Add(CreateVersionData(4, "4M", Generator18, M0 , 64 * 8, 62, Array As Int(6, 26), 2, 0, 32, 0, Null))
    versions.Add(CreateVersionData(4, "4Q", Generator26, Q0 , 48 * 8, 46, Array As Int(6, 26), 2, 0, 24, 0, Null))
    versions.Add(CreateVersionData(4, "4H", Generator16, H0 , 36 * 8, 34, Array As Int(6, 26), 4, 0,  9, 0, Null))
    
    versions.Add(CreateVersionData(5, "5L", Generator26, L0 , 108 * 8, 106, Array As Int(6, 30), 1, 0, 108,  0, Null))
    versions.Add(CreateVersionData(5, "5M", Generator24, M0 ,  86 * 8,  84, Array As Int(6, 30), 2, 0,  43,  0, Null))
    versions.Add(CreateVersionData(5, "5Q", Generator18, Q0 ,  62 * 8,  60, Array As Int(6, 30), 2, 2,  15, 16, Null))
    versions.Add(CreateVersionData(5, "5H", Generator22, H0 ,  46 * 8,  44, Array As Int(6, 30), 2, 2,  11, 12, Null))

    versions.Add(CreateVersionData(6, "6L", Generator18, L0 , 136 * 8, 134, Array As Int(6, 34), 2, 0, 68, 0, Null))
    versions.Add(CreateVersionData(6, "6M", Generator16, M0 , 108 * 8, 106, Array As Int(6, 34), 4, 0, 27, 0, Null))
    versions.Add(CreateVersionData(6, "6Q", Generator24, Q0 ,  76 * 8,  74, Array As Int(6, 34), 4, 0, 19, 0, Null))
    versions.Add(CreateVersionData(6, "6H", Generator28, H0 ,  60 * 8,  58, Array As Int(6, 34), 4, 0, 15, 0, Null))
    
    versions.Add(CreateVersionData(7, "7L", Generator20, L0 , 156 * 8, 154, Array As Int(6, 22, 38), 2, 0, 78,  0, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7M", Generator18, M0 , 124 * 8, 122, Array As Int(6, 22, 38), 4, 0, 31,  0, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7Q", Generator18, Q0 ,  88 * 8,  86, Array As Int(6, 22, 38), 2, 4, 14, 15, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    versions.Add(CreateVersionData(7, "7H", Generator26, H0 ,  66 * 8,  64, Array As Int(6, 22, 38), 4, 1, 13, 14, Array As Byte(0,0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0)))
    
    versions.Add(CreateVersionData(8, "8L", Generator24, L0 , 194 * 8, 192, Array As Int(6, 24, 42), 2, 0, 97,  0, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8M", Generator22, M0 , 154 * 8, 152, Array As Int(6, 24, 42), 2, 2, 38, 39, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8Q", Generator22, Q0 , 110 * 8, 108, Array As Int(6, 24, 42), 4, 2, 18, 19, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
    versions.Add(CreateVersionData(8, "8H", Generator26, H0 ,  86 * 8,  84, Array As Int(6, 24, 42), 4, 2, 14, 15, Array As Byte(0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0)))
        
    versions.Add(CreateVersionData(9, "9L", Generator30, L0,  232 * 8, 230, Array As Int(6, 26, 46), 2, 0, 116, 0, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9M", Generator22, M0 , 182 * 8, 180, Array As Int(6, 26, 46), 3, 2, 36, 37, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9Q", Generator20, Q0 , 132 * 8, 130, Array As Int(6, 26, 46), 4, 4, 16, 17, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    versions.Add(CreateVersionData(9, "9H", Generator24, H0 , 100 * 8,  98, Array As Int(6, 26, 46), 4, 4, 12, 13, Array As Byte(0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1)))
    
    versions.Add(CreateVersionData(10, "10L", Generator18, L0,  274 * 8, 271, Array As Int(6, 28, 50), 2, 2, 68, 69, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10M", Generator26, M0 , 216 * 8, 213, Array As Int(6, 28, 50), 4, 1, 43, 44, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10Q", Generator24, Q0 , 154 * 8, 151, Array As Int(6, 28, 50), 6, 2, 19, 20, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))
    versions.Add(CreateVersionData(10, "10H", Generator28, H0 , 122 * 8, 119, Array As Int(6, 28, 50), 6, 2, 15, 16, Array As Byte(0,0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1)))

    versions.Add(CreateVersionData(11, "11L", Generator20, L0,  324 * 8, 321, Array As Int(6, 30, 54), 4, 0, 81,  0, Array As Byte(0,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0)))
    versions.Add(CreateVersionData(11, "11M", Generator30, M0 , 254 * 8, 251, Array As Int(6, 30, 54), 1, 4, 50, 51, Array As Byte(0,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0)))
    versions.Add(CreateVersionData(11, "11Q", Generator28, Q0 , 180 * 8, 177, Array As Int(6, 30, 54), 4, 4, 22, 23, Array As Byte(0,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0)))
    versions.Add(CreateVersionData(11, "11H", Generator24, H0 , 140 * 8, 137, Array As Int(6, 30, 54), 3, 8, 12, 13, Array As Byte(0,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0)))

    versions.Add(CreateVersionData(12, "12L", Generator24, L0,  370 * 8, 367, Array As Int(6, 32, 58), 2, 2, 92, 93, Array As Byte(0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0)))
    versions.Add(CreateVersionData(12, "12M", Generator22, M0 , 290 * 8, 287, Array As Int(6, 32, 58), 6, 2, 36, 37, Array As Byte(0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0)))
    versions.Add(CreateVersionData(12, "12Q", Generator26, Q0 , 206 * 8, 203, Array As Int(6, 32, 58), 4, 6, 20, 21, Array As Byte(0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0)))
    versions.Add(CreateVersionData(12, "12H", Generator28, H0 , 158 * 8, 155, Array As Int(6, 32, 58), 7, 4, 14, 15, Array As Byte(0,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,1,0)))

    versions.Add(CreateVersionData(13, "13L", Generator26, L0,  428 * 8, 425, Array As Int(6, 34, 62),  4, 0, 107, 0, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13M", Generator22, M0 , 334 * 8, 331, Array As Int(6, 34, 62),  8, 1, 37, 38, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13Q", Generator24, Q0 , 244 * 8, 241, Array As Int(6, 34, 62),  8, 4, 20, 21, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))
    versions.Add(CreateVersionData(13, "13H", Generator22, H0 , 180 * 8, 177, Array As Int(6, 34, 62), 12, 4, 11, 12, Array As Byte(0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1)))

    versions.Add(CreateVersionData(14, "14L", Generator30, L0,  461 * 8, 458, Array As Int(6, 26, 46, 66),  3, 1, 115, 116, Array As Byte(0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1)))
    versions.Add(CreateVersionData(14, "14M", Generator24, M0 , 365 * 8, 362, Array As Int(6, 26, 46, 66),  4, 5,  40,  41, Array As Byte(0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1)))
    versions.Add(CreateVersionData(14, "14Q", Generator20, Q0 , 261 * 8, 258, Array As Int(6, 26, 46, 66), 11, 5,  16,  17, Array As Byte(0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1)))
    versions.Add(CreateVersionData(14, "14H", Generator24, H0 , 197 * 8, 194, Array As Int(6, 26, 46, 66), 11, 5,  12,  13, Array As Byte(0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1)))

    versions.Add(CreateVersionData(15, "15L", Generator22, L0,  523 * 8, 520, Array As Int(6, 26, 48, 70),  5, 1, 87, 88, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15M", Generator24, M0 , 415 * 8, 412, Array As Int(6, 26, 48, 70),  5, 5, 41, 42, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15Q", Generator30, Q0 , 295 * 8, 292, Array As Int(6, 26, 48, 70),  5, 7, 24, 25, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))
    versions.Add(CreateVersionData(15, "15H", Generator24, H0 , 223 * 8, 220, Array As Int(6, 26, 48, 70), 11, 7, 12, 13, Array As Byte(0,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0)))

    versions.Add(CreateVersionData(16, "16L", Generator24, L0,  589 * 8, 586, Array As Int(6, 26, 50, 74),  5,  1, 98, 99, Array As Byte(0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0)))
    versions.Add(CreateVersionData(16, "16M", Generator28, M0 , 453 * 8, 450, Array As Int(6, 26, 50, 74),  7,  3, 45, 46, Array As Byte(0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0)))
    versions.Add(CreateVersionData(16, "16Q", Generator24, Q0 , 325 * 8, 322, Array As Int(6, 26, 50, 74), 15,  2, 19, 20, Array As Byte(0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0)))
    versions.Add(CreateVersionData(16, "16H", Generator30, H0 , 253 * 8, 250, Array As Int(6, 26, 50, 74),  3, 13, 15, 16, Array As Byte(0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0)))
    
    versions.Add(CreateVersionData(17, "17L", Generator28, L0,  647 * 8, 644, Array As Int(6, 30, 54, 78),   1,  5, 107, 108, Array As Byte(0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1)))
    versions.Add(CreateVersionData(17, "17M", Generator28, M0 , 507 * 8, 504, Array As Int(6, 30, 54, 78),  10,  1,  46,  47, Array As Byte(0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1)))
    versions.Add(CreateVersionData(17, "17Q", Generator28, Q0 , 367 * 8, 364, Array As Int(6, 30, 54, 78),   1, 15,  22,  23, Array As Byte(0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1)))
    versions.Add(CreateVersionData(17, "17H", Generator28, H0 , 283 * 8, 280, Array As Int(6, 30, 54, 78),   2, 17,  14,  15, Array As Byte(0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1)))

    versions.Add(CreateVersionData(18, "18L", Generator30, L0,  721 * 8, 718, Array As Int(6, 30, 56, 82),   5,  1, 120, 121, Array As Byte(0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1)))
    versions.Add(CreateVersionData(18, "18M", Generator26, M0 , 563 * 8, 560, Array As Int(6, 30, 56, 82),   9,  4,  43,  44, Array As Byte(0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1)))
    versions.Add(CreateVersionData(18, "18Q", Generator28, Q0 , 397 * 8, 394, Array As Int(6, 30, 56, 82),  17,  1,  22,  23, Array As Byte(0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1)))
    versions.Add(CreateVersionData(18, "18H", Generator28, H0 , 313 * 8, 310, Array As Int(6, 30, 56, 82),   2, 19,  14,  15, Array As Byte(0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1)))

    versions.Add(CreateVersionData(19, "19L", Generator28, L0,  795 * 8, 792, Array As Int(6, 30, 58, 86),  3,  4, 113, 114, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19M", Generator26, M0 , 627 * 8, 624, Array As Int(6, 30, 58, 86),  3, 11,  44,  45, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19Q", Generator26, Q0 , 445 * 8, 442, Array As Int(6, 30, 58, 86), 17,  4,  21,  22, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))
    versions.Add(CreateVersionData(19, "19H", Generator26, H0 , 341 * 8, 338, Array As Int(6, 30, 58, 86),  9, 16,  13,  14, Array As Byte(0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,0,1,0)))

    versions.Add(CreateVersionData(20, "20L", Generator28, L0,  861 * 8, 858, Array As Int(6, 34, 62, 90),  3,  5, 107, 108, Array As Byte(0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0)))
    versions.Add(CreateVersionData(20, "20M", Generator26, M0 , 669 * 8, 666, Array As Int(6, 34, 62, 90),  3, 13,  41,  42, Array As Byte(0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0)))
    versions.Add(CreateVersionData(20, "20Q", Generator30, Q0 , 485 * 8, 482, Array As Int(6, 34, 62, 90), 15,  5,  24,  25, Array As Byte(0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0)))
    versions.Add(CreateVersionData(20, "20H", Generator28, H0 , 385 * 8, 382, Array As Int(6, 34, 62, 90), 15, 10,  15,  16, Array As Byte(0,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0)))

    versions.Add(CreateVersionData(23, "23L", Generator30, L0, 1094 * 8, 1091, Array As Int(6, 30, 54, 78, 102), 4, 5, 121, 122, _
        Array As Byte(0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0)))
    versions.Add(CreateVersionData(23, "23M", Generator28, M0, 860 * 8, 857, Array As Int(6, 30, 54, 78, 102), 4, 14, 47, 48, _
        Array As Byte(0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0)))   
    versions.Add(CreateVersionData(23, "23Q", Generator30, Q0, 614 * 8, 611, Array As Int(6, 30, 54, 78, 102), 11, 14, 24, 25, _
        Array As Byte(0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0)))
    versions.Add(CreateVersionData(23, "23H", Generator30, H0, 464 * 8, 461, Array As Int(6, 30, 54, 78, 102), 16, 14, 15, 16, _
        Array As Byte(0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,0)))

    versions.Add(CreateVersionData(39, "39L", Generator30, L0,  2812 * 8, 2809, Array As Int(6, 26, 54, 82, 110, 138, 166),  20,   4, 117, 118, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39M", Generator28, M0 , 2216 * 8, 2213, Array As Int(6, 26, 54, 82, 110, 138, 166),  40,   7,  47,  48, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39Q", Generator30, Q0 , 1582 * 8, 1579, Array As Int(6, 26, 54, 82, 110, 138, 166),  43,  22,  24,  25, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))
    versions.Add(CreateVersionData(39, "39H", Generator30, H0 , 1222 * 8, 1219, Array As Int(6, 26, 54, 82, 110, 138, 166),  10,  67,  15,  16, Array As Byte(1,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,1)))

    versions.Add(CreateVersionData(40, "40L", Generator30, L0, 2956 * 8, 2953, Array As Int(6, 30, 58, 86, 114, 142, 170), 19, 6, 118, 119, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
    versions.Add(CreateVersionData(40, "40M", Generator28, M0, 2334 * 8, 2331, Array As Int(6, 30, 58, 86, 114, 142, 170), 18, 31, 47, 48, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
    versions.Add(CreateVersionData(40, "40Q", Generator30, Q0, 1666 * 8, 1663, Array As Int(6, 30, 58, 86, 114, 142, 170), 34, 34, 24, 25, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
    versions.Add(CreateVersionData(40, "40H", Generator30, H0, 1276 * 8, 1273, Array As Int(6, 30, 58, 86, 114, 142, 170), 20, 61, 15, 16, _
        Array As Byte(1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,1)))
    
        
End Sub
 

Attachments

Last edited:
Top