|
- <%
- '==============================================================================
- ' USPS Intelligent Mail Barcode (IMB) Encoder/Decoder Class
- ' Based on USPS-B-3200 Specification
- '==============================================================================
-
- Class IMBCodec
- ' Lookup tables
- Private Table5of13(1286)
- Private Table2of13(77)
- Private BarCharMap(64, 3)
- Private CharToCodeword
- Private IsInitialized
-
- '============================================================================
- ' Constructor
- '============================================================================
- Private Sub Class_Initialize()
- Set CharToCodeword = CreateObject("Scripting.Dictionary")
- IsInitialized = False
- End Sub
-
- Private Sub Class_Terminate()
- Set CharToCodeword = Nothing
- End Sub
-
- '============================================================================
- ' Public Methods
- '============================================================================
-
- ' Encode tracking and routing codes to IMB barcode string
- Public Function Encode(ByVal trackingCode, ByVal routingCode)
- If Not IsInitialized Then Call InitializeTables()
-
- Dim binaryData, crc, codewords(9), characters(9), i
-
- ' Step 1: Convert to binary
- binaryData = ConvertToBinary(trackingCode, routingCode)
-
- ' Step 2: Generate CRC
- crc = GenerateCRC(binaryData)
-
- ' Step 3: Convert binary to codewords
- Call BinaryToCodewords(binaryData, codewords)
-
- ' Step 4: Insert additional information
- Call InsertAdditionalInfo(codewords, crc)
-
- ' Step 5: Convert codewords to characters
- Call CodewordsToCharacters(codewords, characters, crc)
-
- ' Step 6: Convert characters to barcode
- Encode = CharactersToBarcode(characters)
- End Function
-
- ' Encode combined IMB digits (20-digit tracking + 0/5/9/11-digit routing) to barcode string
- Public Function EncodeDigits(ByVal imbDigits)
- Dim tracking, routing
- imbDigits = Trim(imbDigits)
- tracking = Left(imbDigits, 20)
- routing = Mid(imbDigits, 21)
- EncodeDigits = Encode(tracking, routing)
- End Function
-
- ' Decode IMB barcode string to tracking and routing codes
- Public Function Decode(ByVal barcode, ByRef trackingCode, ByRef routingCode, ByRef errMsg)
- If Not IsInitialized Then Call InitializeTables()
-
- Decode = False
- trackingCode = ""
- routingCode = ""
- errMsg = ""
-
- ' Validate barcode
- If Len(barcode) <> 65 Then
- errMsg = "Invalid length (expected 65, got " & Len(barcode) & ")"
- Exit Function
- End If
-
- Dim i, ch
- For i = 1 To 65
- ch = Mid(barcode, i, 1)
- If ch <> "A" And ch <> "D" And ch <> "T" And ch <> "F" Then
- errMsg = "Invalid character at pos " & i & ": " & ch
- Exit Function
- End If
- Next
-
- On Error Resume Next
- Call DecodeInternal(barcode, trackingCode, routingCode, errMsg)
- If Err.Number <> 0 Then
- errMsg = "Decode error (" & Err.Number & "): " & Err.Description
- Err.Clear
- On Error GoTo 0
- Exit Function
- End If
- On Error GoTo 0
-
- If Len(trackingCode) = 0 And Len(routingCode) = 0 Then
- If Len(errMsg) = 0 Then errMsg = "Decode failed"
- Exit Function
- End If
-
- Decode = True
- End Function
-
- '============================================================================
- ' Private Encoding Methods
- '============================================================================
-
- Private Function ConvertToBinary(tracking, routing)
- Dim routingArr, i, digit
- Dim binaryData(12)
-
- For i = 0 To 12
- binaryData(i) = 0
- Next
-
- routingArr = ConvertRoutingCode(routing)
- For i = 0 To 12
- binaryData(i) = routingArr(i)
- Next
-
- For i = 0 To Len(tracking) - 1
- digit = CLng(Mid(tracking, i + 1, 1))
- If i = 0 Then
- Call MultiplyAndAdd(binaryData, 10, digit)
- ElseIf i = 1 Then
- Call MultiplyAndAdd(binaryData, 5, digit)
- Else
- Call MultiplyAndAdd(binaryData, 10, digit)
- End If
- Next
-
- ConvertToBinary = binaryData
- End Function
-
- Private Function ConvertRoutingCode(routing)
- Dim result(12), i
- For i = 0 To 12
- result(i) = 0
- Next
-
- Select Case Len(routing)
- Case 0
- ' result already 0
- Case 5
- Call AddStringToArray(result, routing)
- Call AddValueToArray(result, 1)
- Case 9
- Call AddStringToArray(result, routing)
- Call AddValueToArray(result, 100001)
- Case 11
- Call AddStringToArray(result, routing)
- Call AddValueToArray(result, 1)
- Call AddValueToArray(result, 1000000000)
- Call AddValueToArray(result, 100000)
- End Select
-
- ConvertRoutingCode = result
- End Function
-
- Private Sub AddStringToArray(ByRef arr, numStr)
- Dim i, digit
- For i = 1 To Len(numStr)
- digit = CLng(Mid(numStr, i, 1))
- Call MultiplyAndAdd(arr, 10, digit)
- Next
- End Sub
-
- Private Sub AddValueToArray(ByRef arr, value)
- Dim i, carry, temp
- carry = value
-
- For i = 12 To 0 Step -1
- If carry = 0 Then Exit For
- temp = arr(i) + (carry Mod 256)
- arr(i) = temp Mod 256
- carry = Int(carry / 256) + Int(temp / 256)
- Next
- End Sub
-
- Private Sub MultiplyAndAdd(ByRef arr, mult, add)
- Dim i, carry, temp
- carry = add
-
- For i = 12 To 0 Step -1
- temp = CLng(arr(i)) * mult + carry
- arr(i) = temp And &HFF
- carry = Int(temp / 256)
- Next
- End Sub
-
- Private Function GenerateCRC(binaryData)
- Dim fcs, data, bit, i, byteIdx, genPoly
-
- genPoly = &HF35
- fcs = &H7FF
-
- data = (binaryData(0) And &H3F) * 32
- For bit = 2 To 7
- If ((fcs Xor data) And &H400) <> 0 Then
- fcs = ((fcs * 2) Xor genPoly) And &H7FF
- Else
- fcs = (fcs * 2) And &H7FF
- End If
- data = (data * 2) And &H7FF
- Next
-
- For byteIdx = 1 To 12
- data = binaryData(byteIdx) * 8
- For bit = 0 To 7
- If ((fcs Xor data) And &H400) <> 0 Then
- fcs = ((fcs * 2) Xor genPoly) And &H7FF
- Else
- fcs = (fcs * 2) And &H7FF
- End If
- data = (data * 2) And &H7FF
- Next
- Next
-
- GenerateCRC = fcs
- End Function
-
- Private Sub BinaryToCodewords(binaryData, ByRef codewords)
- Dim quotient(12), i
-
- For i = 0 To 12
- quotient(i) = binaryData(i)
- Next
-
- codewords(9) = DivideArray(quotient, 636)
- codewords(8) = DivideArray(quotient, 1365)
- codewords(7) = DivideArray(quotient, 1365)
- codewords(6) = DivideArray(quotient, 1365)
- codewords(5) = DivideArray(quotient, 1365)
- codewords(4) = DivideArray(quotient, 1365)
- codewords(3) = DivideArray(quotient, 1365)
- codewords(2) = DivideArray(quotient, 1365)
- codewords(1) = DivideArray(quotient, 1365)
- codewords(0) = ArrayToInt(quotient)
- End Sub
-
- Private Function DivideArray(ByRef arr, divisor)
- Dim i, temp, remainder
- remainder = 0
-
- For i = 0 To 12
- temp = CLng(remainder) * 256 + CLng(arr(i))
- arr(i) = Int(temp / divisor)
- remainder = temp Mod divisor
- Next
-
- DivideArray = remainder
- End Function
-
- Private Function ArrayToInt(arr)
- Dim val, i
- val = 0
- For i = 0 To 12
- If arr(i) <> 0 OR val <> 0 Then
- val = val * 256 + arr(i)
- End If
- Next
- ArrayToInt = val
- End Function
-
- Private Sub InsertAdditionalInfo(ByRef codewords, crc)
- codewords(9) = codewords(9) * 2
- If (crc And &H400) <> 0 Then
- codewords(0) = codewords(0) + 659
- End If
- End Sub
-
- Private Sub CodewordsToCharacters(codewords, ByRef characters, crc)
- Dim i, cw, ch
-
- For i = 0 To 9
- cw = codewords(i)
-
- If cw <= 1286 Then
- ch = Table5of13(cw)
- Else
- ch = Table2of13(cw - 1287)
- End If
-
- If (crc And (2 ^ i)) <> 0 Then
- ch = ch Xor &H1FFF
- End If
-
- characters(i) = ch
- Next
- End Sub
-
- Private Function CharactersToBarcode(characters)
- Dim bars(64), i, ascCharIdx, ascBitIdx, descCharIdx, descBitIdx
- Dim ascVal, descVal, barcode
-
- For i = 0 To 64
- ascCharIdx = BarCharMap(i, 2)
- ascBitIdx = BarCharMap(i, 3)
- ascVal = (characters(ascCharIdx) And (2 ^ ascBitIdx)) <> 0
-
- descCharIdx = BarCharMap(i, 0)
- descBitIdx = BarCharMap(i, 1)
- descVal = (characters(descCharIdx) And (2 ^ descBitIdx)) <> 0
-
- If ascVal And descVal Then
- bars(i) = "F"
- ElseIf ascVal And Not descVal Then
- bars(i) = "A"
- ElseIf descVal And Not ascVal Then
- bars(i) = "D"
- Else
- bars(i) = "T"
- End If
- Next
-
- barcode = ""
- For i = 0 To 64
- barcode = barcode & bars(i)
- Next
-
- CharactersToBarcode = barcode
- End Function
-
- '============================================================================
- ' Private Decoding Methods
- '============================================================================
-
- Private Sub DecodeInternal(barcode, ByRef trackingCode, ByRef routingCode, ByRef errMsg)
- Dim characters(9), codewords(9), binaryData, fcs
-
- errMsg = ""
- trackingCode = ""
- routingCode = ""
-
- Call BarcodeToCharacters(barcode, characters)
- fcs = CharactersToCodewords(characters, codewords, errMsg)
- If fcs = -1 Then Exit Sub
-
- Call ExtractAdditionalInfo(codewords, fcs)
- binaryData = CodewordsToBinary(codewords)
- Call BinaryToFields(binaryData, trackingCode, routingCode)
- End Sub
-
- Private Sub BarcodeToCharacters(barcode, ByRef characters)
- Dim i, charIdx, bitIdx, bar
-
- For i = 0 To 9
- characters(i) = 0
- Next
-
- For i = 0 To 64
- bar = Mid(barcode, i + 1, 1)
-
- charIdx = BarCharMap(i, 2)
- bitIdx = BarCharMap(i, 3)
- If bar = "A" Or bar = "F" Then
- characters(charIdx) = characters(charIdx) Or (2 ^ bitIdx)
- End If
-
- charIdx = BarCharMap(i, 0)
- bitIdx = BarCharMap(i, 1)
- If bar = "D" Or bar = "F" Then
- characters(charIdx) = characters(charIdx) Or (2 ^ bitIdx)
- End If
- Next
- End Sub
-
- Private Function CharactersToCodewords(ByRef characters, ByRef codewords, ByRef errMsg)
- Dim fcs, i, ch, cw, comp
- fcs = 0
- errMsg = ""
-
- For i = 0 To 9
- ch = characters(i) And &H1FFF
-
- cw = FindCodeword(ch)
- If cw <> -1 Then
- codewords(i) = cw
- Else
- comp = ch Xor &H1FFF
- cw = FindCodeword(comp)
- If cw = -1 Then
- errMsg = "Invalid IMB character idx=" & i & " value=0x" & Hex(ch)
- CharactersToCodewords = -1
- Exit Function
- End If
- fcs = fcs Or CLng(2 ^ i)
- codewords(i) = cw
- End If
- Next
-
- CharactersToCodewords = fcs
- End Function
-
- Private Function FindCodeword(character)
- Dim key
- key = CStr(character And &H1FFF)
-
- If CharToCodeword.Exists(key) Then
- FindCodeword = CLng(CharToCodeword(key))
- Else
- FindCodeword = -1
- End If
- End Function
-
- Private Sub ExtractAdditionalInfo(ByRef codewords, ByRef fcs)
- If codewords(0) >= 659 Then
- codewords(0) = codewords(0) - 659
- fcs = fcs Or &H400
- End If
- codewords(9) = codewords(9) \ 2
- End Sub
-
- Private Function CodewordsToBinary(ByRef codewords)
- Dim binaryData(12), i
-
- For i = 0 To 12
- binaryData(i) = 0
- Next
-
- Call IntToArray(binaryData, codewords(0))
-
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(1))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(2))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(3))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(4))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(5))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(6))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(7))
- Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(8))
- Call MultiplyArrayByValue(binaryData, 636) : Call AddValueToArray(binaryData, codewords(9))
-
- CodewordsToBinary = binaryData
- End Function
-
- Private Sub MultiplyArrayByValue(ByRef arr, mult)
- Dim i, carry, temp
- carry = 0
- For i = 12 To 0 Step -1
- temp = CLng(arr(i)) * mult + carry
- arr(i) = temp And &HFF
- carry = Int(temp / 256)
- Next
- End Sub
-
- Private Sub IntToArray(ByRef arr, value)
- Dim i
- For i = 12 To 0 Step -1
- arr(i) = value And &HFF
- value = Int(value / 256)
- Next
- End Sub
-
- Private Sub BinaryToFields(binaryData, ByRef trackingCode, ByRef routingCode)
- Dim workData(12), i, trackDigits(19), routingValue
-
- For i = 0 To 12
- workData(i) = binaryData(i)
- Next
-
- For i = 19 To 2 Step -1
- trackDigits(i) = DivideArray(workData, 10)
- Next
-
- trackDigits(1) = DivideArray(workData, 5)
- trackDigits(0) = DivideArray(workData, 10)
-
- routingValue = ArrayToDouble(workData)
-
- trackingCode = ""
- For i = 0 To 19
- trackingCode = trackingCode & trackDigits(i)
- Next
-
- If routingValue = 0 Then
- routingCode = ""
- ElseIf routingValue <= 100000 Then
- routingValue = routingValue - 1
- routingCode = Right("00000" & CLng(routingValue), 5)
- ElseIf routingValue <= 1000100000 Then
- routingValue = routingValue - 100001
- routingCode = Right("000000000" & CStr(CLng(routingValue)), 9)
- Else
- routingCode = BuildRoutingString(workData)
- End If
- End Sub
-
- Private Function BuildRoutingString(arr)
- Dim tempArr(12), i, digits(10), j, result
-
- For i = 0 To 12
- tempArr(i) = arr(i)
- Next
-
- Call SubtractValue(tempArr, 1000100001)
-
- For j = 10 To 0 Step -1
- digits(j) = DivideArray(tempArr, 10)
- Next
-
- result = ""
- For j = 0 To 10
- result = result & digits(j)
- Next
-
- BuildRoutingString = result
- End Function
-
- Private Sub SubtractValue(ByRef arr, value)
- Dim i, borrow, temp
- borrow = value
-
- For i = 12 To 0 Step -1
- If borrow = 0 Then Exit Sub
- temp = CLng(arr(i)) - (borrow And &HFF)
- If temp < 0 Then
- arr(i) = temp + 256
- borrow = Int(borrow / 256) + 1
- Else
- arr(i) = temp
- borrow = Int(borrow / 256)
- End If
- Next
- End Sub
-
- Private Function ArrayToDouble(arr)
- Dim result, i
- result = CDbl(0)
- For i = 0 To 12
- If arr(i) <> 0 Or result <> 0 Then
- result = result * 256 + CDbl(arr(i))
- End If
- Next
- ArrayToDouble = result
- End Function
-
- '============================================================================
- ' Initialize Lookup Tables
- '============================================================================
- Private Sub InitializeTables()
- Dim i
-
- ' Table 19: 5 of 13 Characters (1287 entries) - abbreviated for space
- Table5of13(0)=31:Table5of13(1)=7936:Table5of13(2)=47:Table5of13(3)=7808:Table5of13(4)=55
- Table5of13(5)=7552:Table5of13(6)=59:Table5of13(7)=7040:Table5of13(8)=61:Table5of13(9)=6016
- Table5of13(10)=62:Table5of13(11)=3968:Table5of13(12)=79:Table5of13(13)=7744:Table5of13(14)=87
- Table5of13(15)=7488:Table5of13(16)=91:Table5of13(17)=6976:Table5of13(18)=93:Table5of13(19)=5952
- Table5of13(20)=94:Table5of13(21)=3904:Table5of13(22)=103:Table5of13(23)=7360:Table5of13(24)=107
- Table5of13(25)=6848:Table5of13(26)=109:Table5of13(27)=5824:Table5of13(28)=110:Table5of13(29)=3776
- Table5of13(30)=115:Table5of13(31)=6592:Table5of13(32)=117:Table5of13(33)=5568:Table5of13(34)=118
- Table5of13(35)=3520:Table5of13(36)=121:Table5of13(37)=5056:Table5of13(38)=122:Table5of13(39)=3008
- Table5of13(40)=124:Table5of13(41)=1984:Table5of13(42)=143:Table5of13(43)=7712:Table5of13(44)=151
- Table5of13(45)=7456:Table5of13(46)=155:Table5of13(47)=6944:Table5of13(48)=157:Table5of13(49)=5920
- Table5of13(50)=158:Table5of13(51)=3872:Table5of13(52)=167:Table5of13(53)=7328:Table5of13(54)=171
- Table5of13(55)=6816:Table5of13(56)=173:Table5of13(57)=5792:Table5of13(58)=174:Table5of13(59)=3744
- Table5of13(60)=179:Table5of13(61)=6560:Table5of13(62)=181:Table5of13(63)=5536:Table5of13(64)=182
- Table5of13(65)=3488:Table5of13(66)=185:Table5of13(67)=5024:Table5of13(68)=186:Table5of13(69)=2976
- Table5of13(70)=188:Table5of13(71)=1952:Table5of13(72)=199:Table5of13(73)=7264:Table5of13(74)=203
- Table5of13(75)=6752:Table5of13(76)=205:Table5of13(77)=5728:Table5of13(78)=206:Table5of13(79)=3680
- Table5of13(80)=211:Table5of13(81)=6496:Table5of13(82)=213:Table5of13(83)=5472:Table5of13(84)=214
- Table5of13(85)=3424:Table5of13(86)=217:Table5of13(87)=4960:Table5of13(88)=218:Table5of13(89)=2912
- Table5of13(90)=220:Table5of13(91)=1888:Table5of13(92)=227:Table5of13(93)=6368:Table5of13(94)=229
- Table5of13(95)=5344:Table5of13(96)=230:Table5of13(97)=3296:Table5of13(98)=233:Table5of13(99)=4832
- Table5of13(100)=234:Table5of13(101)=2784:Table5of13(102)=236:Table5of13(103)=1760:Table5of13(104)=241
- Table5of13(105)=4576:Table5of13(106)=242:Table5of13(107)=2528:Table5of13(108)=244:Table5of13(109)=1504
- Table5of13(110)=248:Table5of13(111)=992:Table5of13(112)=271:Table5of13(113)=7696:Table5of13(114)=279
- Table5of13(115)=7440:Table5of13(116)=283:Table5of13(117)=6928:Table5of13(118)=285:Table5of13(119)=5904
- Table5of13(120)=286:Table5of13(121)=3856:Table5of13(122)=295:Table5of13(123)=7312:Table5of13(124)=299
- Table5of13(125)=6800:Table5of13(126)=301:Table5of13(127)=5776:Table5of13(128)=302:Table5of13(129)=3728
- Table5of13(130)=307:Table5of13(131)=6544:Table5of13(132)=309:Table5of13(133)=5520:Table5of13(134)=310
- Table5of13(135)=3472:Table5of13(136)=313:Table5of13(137)=5008:Table5of13(138)=314:Table5of13(139)=2960
- Table5of13(140)=316:Table5of13(141)=1936:Table5of13(142)=327:Table5of13(143)=7248:Table5of13(144)=331
- Table5of13(145)=6736:Table5of13(146)=333:Table5of13(147)=5712:Table5of13(148)=334:Table5of13(149)=3664
- Table5of13(150)=339:Table5of13(151)=6480:Table5of13(152)=341:Table5of13(153)=5456:Table5of13(154)=342
- Table5of13(155)=3408:Table5of13(156)=345:Table5of13(157)=4944:Table5of13(158)=346:Table5of13(159)=2896
- Table5of13(160)=348:Table5of13(161)=1872:Table5of13(162)=355:Table5of13(163)=6352:Table5of13(164)=357
- Table5of13(165)=5328:Table5of13(166)=358:Table5of13(167)=3280:Table5of13(168)=361:Table5of13(169)=4816
- Table5of13(170)=362:Table5of13(171)=2768:Table5of13(172)=364:Table5of13(173)=1744:Table5of13(174)=369
- Table5of13(175)=4560:Table5of13(176)=370:Table5of13(177)=2512:Table5of13(178)=372:Table5of13(179)=1488
- Table5of13(180)=376:Table5of13(181)=976:Table5of13(182)=391:Table5of13(183)=7216:Table5of13(184)=395
- Table5of13(185)=6704:Table5of13(186)=397:Table5of13(187)=5680:Table5of13(188)=398:Table5of13(189)=3632
- Table5of13(190)=403:Table5of13(191)=6448:Table5of13(192)=405:Table5of13(193)=5424:Table5of13(194)=406
- Table5of13(195)=3376:Table5of13(196)=409:Table5of13(197)=4912:Table5of13(198)=410:Table5of13(199)=2864
- Table5of13(200)=412:Table5of13(201)=1840:Table5of13(202)=419:Table5of13(203)=6320:Table5of13(204)=421
- Table5of13(205)=5296:Table5of13(206)=422:Table5of13(207)=3248:Table5of13(208)=425:Table5of13(209)=4784
- Table5of13(210)=426:Table5of13(211)=2736:Table5of13(212)=428:Table5of13(213)=1712:Table5of13(214)=433
- Table5of13(215)=4528:Table5of13(216)=434:Table5of13(217)=2480:Table5of13(218)=436:Table5of13(219)=1456
- Table5of13(220)=440:Table5of13(221)=944:Table5of13(222)=451:Table5of13(223)=6256:Table5of13(224)=453
- Table5of13(225)=5232:Table5of13(226)=454:Table5of13(227)=3184:Table5of13(228)=457:Table5of13(229)=4720
- Table5of13(230)=458:Table5of13(231)=2672:Table5of13(232)=460:Table5of13(233)=1648:Table5of13(234)=465
- Table5of13(235)=4464:Table5of13(236)=466:Table5of13(237)=2416:Table5of13(238)=468:Table5of13(239)=1392
- Table5of13(240)=472:Table5of13(241)=880:Table5of13(242)=481:Table5of13(243)=4336:Table5of13(244)=482
- Table5of13(245)=2288:Table5of13(246)=484:Table5of13(247)=1264:Table5of13(248)=488:Table5of13(249)=752
- Table5of13(250)=527:Table5of13(251)=7688:Table5of13(252)=535:Table5of13(253)=7432:Table5of13(254)=539
- Table5of13(255)=6920:Table5of13(256)=541:Table5of13(257)=5896:Table5of13(258)=542:Table5of13(259)=3848
- Table5of13(260)=551:Table5of13(261)=7304:Table5of13(262)=555:Table5of13(263)=6792:Table5of13(264)=557
- Table5of13(265)=5768:Table5of13(266)=558:Table5of13(267)=3720:Table5of13(268)=563:Table5of13(269)=6536
- Table5of13(270)=565:Table5of13(271)=5512:Table5of13(272)=566:Table5of13(273)=3464:Table5of13(274)=569
- Table5of13(275)=5000:Table5of13(276)=570:Table5of13(277)=2952:Table5of13(278)=572:Table5of13(279)=1928
- Table5of13(280)=583:Table5of13(281)=7240:Table5of13(282)=587:Table5of13(283)=6728:Table5of13(284)=589
- Table5of13(285)=5704:Table5of13(286)=590:Table5of13(287)=3656:Table5of13(288)=595:Table5of13(289)=6472
- Table5of13(290)=597:Table5of13(291)=5448:Table5of13(292)=598:Table5of13(293)=3400:Table5of13(294)=601
- Table5of13(295)=4936:Table5of13(296)=602:Table5of13(297)=2888:Table5of13(298)=604:Table5of13(299)=1864
- Table5of13(300)=611:Table5of13(301)=6344:Table5of13(302)=613:Table5of13(303)=5320:Table5of13(304)=614
- Table5of13(305)=3272:Table5of13(306)=617:Table5of13(307)=4808:Table5of13(308)=618:Table5of13(309)=2760
- Table5of13(310)=620:Table5of13(311)=1736:Table5of13(312)=625:Table5of13(313)=4552:Table5of13(314)=626
- Table5of13(315)=2504:Table5of13(316)=628:Table5of13(317)=1480:Table5of13(318)=632:Table5of13(319)=968
- Table5of13(320)=647:Table5of13(321)=7208:Table5of13(322)=651:Table5of13(323)=6696:Table5of13(324)=653
- Table5of13(325)=5672:Table5of13(326)=654:Table5of13(327)=3624:Table5of13(328)=659:Table5of13(329)=6440
- Table5of13(330)=661:Table5of13(331)=5416:Table5of13(332)=662:Table5of13(333)=3368:Table5of13(334)=665
- Table5of13(335)=4904:Table5of13(336)=666:Table5of13(337)=2856:Table5of13(338)=668:Table5of13(339)=1832
- Table5of13(340)=675:Table5of13(341)=6312:Table5of13(342)=677:Table5of13(343)=5288:Table5of13(344)=678
- Table5of13(345)=3240:Table5of13(346)=681:Table5of13(347)=4776:Table5of13(348)=682:Table5of13(349)=2728
- Table5of13(350)=684:Table5of13(351)=1704:Table5of13(352)=689:Table5of13(353)=4520:Table5of13(354)=690
- Table5of13(355)=2472:Table5of13(356)=692:Table5of13(357)=1448:Table5of13(358)=696:Table5of13(359)=936
- Table5of13(360)=707:Table5of13(361)=6248:Table5of13(362)=709:Table5of13(363)=5224:Table5of13(364)=710
- Table5of13(365)=3176:Table5of13(366)=713:Table5of13(367)=4712:Table5of13(368)=714:Table5of13(369)=2664
- Table5of13(370)=716:Table5of13(371)=1640:Table5of13(372)=721:Table5of13(373)=4456:Table5of13(374)=722
- Table5of13(375)=2408:Table5of13(376)=724:Table5of13(377)=1384:Table5of13(378)=728:Table5of13(379)=872
- Table5of13(380)=737:Table5of13(381)=4328:Table5of13(382)=738:Table5of13(383)=2280:Table5of13(384)=740
- Table5of13(385)=1256:Table5of13(386)=775:Table5of13(387)=7192:Table5of13(388)=779:Table5of13(389)=6680
- Table5of13(390)=781:Table5of13(391)=5656:Table5of13(392)=782:Table5of13(393)=3608:Table5of13(394)=787
- Table5of13(395)=6424:Table5of13(396)=789:Table5of13(397)=5400:Table5of13(398)=790:Table5of13(399)=3352
- Table5of13(400)=793:Table5of13(401)=4888:Table5of13(402)=794:Table5of13(403)=2840:Table5of13(404)=796
- Table5of13(405)=1816:Table5of13(406)=803:Table5of13(407)=6296:Table5of13(408)=805:Table5of13(409)=5272
- Table5of13(410)=806:Table5of13(411)=3224:Table5of13(412)=809:Table5of13(413)=4760:Table5of13(414)=810
- Table5of13(415)=2712:Table5of13(416)=812:Table5of13(417)=1688:Table5of13(418)=817:Table5of13(419)=4504
- Table5of13(420)=818:Table5of13(421)=2456:Table5of13(422)=820:Table5of13(423)=1432:Table5of13(424)=824
- Table5of13(425)=920:Table5of13(426)=835:Table5of13(427)=6232:Table5of13(428)=837:Table5of13(429)=5208
- Table5of13(430)=838:Table5of13(431)=3160:Table5of13(432)=841:Table5of13(433)=4696:Table5of13(434)=842
- Table5of13(435)=2648:Table5of13(436)=844:Table5of13(437)=1624:Table5of13(438)=849:Table5of13(439)=4440
- Table5of13(440)=850:Table5of13(441)=2392:Table5of13(442)=852:Table5of13(443)=1368:Table5of13(444)=865
- Table5of13(445)=4312:Table5of13(446)=866:Table5of13(447)=2264:Table5of13(448)=868:Table5of13(449)=1240
- Table5of13(450)=899:Table5of13(451)=6200:Table5of13(452)=901:Table5of13(453)=5176:Table5of13(454)=902
- Table5of13(455)=3128:Table5of13(456)=905:Table5of13(457)=4664:Table5of13(458)=906:Table5of13(459)=2616
- Table5of13(460)=908:Table5of13(461)=1592:Table5of13(462)=913:Table5of13(463)=4408:Table5of13(464)=914
- Table5of13(465)=2360:Table5of13(466)=916:Table5of13(467)=1336:Table5of13(468)=929:Table5of13(469)=4280
- Table5of13(470)=930:Table5of13(471)=2232:Table5of13(472)=932:Table5of13(473)=1208:Table5of13(474)=961
- Table5of13(475)=4216:Table5of13(476)=962:Table5of13(477)=2168:Table5of13(478)=964:Table5of13(479)=1144
- Table5of13(480)=1039:Table5of13(481)=7684:Table5of13(482)=1047:Table5of13(483)=7428:Table5of13(484)=1051
- Table5of13(485)=6916:Table5of13(486)=1053:Table5of13(487)=5892:Table5of13(488)=1054:Table5of13(489)=3844
- Table5of13(490)=1063:Table5of13(491)=7300:Table5of13(492)=1067:Table5of13(493)=6788:Table5of13(494)=1069
- Table5of13(495)=5764:Table5of13(496)=1070:Table5of13(497)=3716:Table5of13(498)=1075:Table5of13(499)=6532
- Table5of13(500)=1077:Table5of13(501)=5508:Table5of13(502)=1078:Table5of13(503)=3460:Table5of13(504)=1081
- Table5of13(505)=4996:Table5of13(506)=1082:Table5of13(507)=2948:Table5of13(508)=1084:Table5of13(509)=1924
- Table5of13(510)=1095:Table5of13(511)=7236:Table5of13(512)=1099:Table5of13(513)=6724:Table5of13(514)=1101
- Table5of13(515)=5700:Table5of13(516)=1102:Table5of13(517)=3652:Table5of13(518)=1107:Table5of13(519)=6468
- Table5of13(520)=1109:Table5of13(521)=5444:Table5of13(522)=1110:Table5of13(523)=3396:Table5of13(524)=1113
- Table5of13(525)=4932:Table5of13(526)=1114:Table5of13(527)=2884:Table5of13(528)=1116:Table5of13(529)=1860
- Table5of13(530)=1123:Table5of13(531)=6340:Table5of13(532)=1125:Table5of13(533)=5316:Table5of13(534)=1126
- Table5of13(535)=3268:Table5of13(536)=1129:Table5of13(537)=4804:Table5of13(538)=1130:Table5of13(539)=2756
- Table5of13(540)=1132:Table5of13(541)=1732:Table5of13(542)=1137:Table5of13(543)=4548:Table5of13(544)=1138
- Table5of13(545)=2500:Table5of13(546)=1140:Table5of13(547)=1476:Table5of13(548)=1159:Table5of13(549)=7204
- Table5of13(550)=1163:Table5of13(551)=6692:Table5of13(552)=1165:Table5of13(553)=5668:Table5of13(554)=1166
- Table5of13(555)=3620:Table5of13(556)=1171:Table5of13(557)=6436:Table5of13(558)=1173:Table5of13(559)=5412
- Table5of13(560)=1174:Table5of13(561)=3364:Table5of13(562)=1177:Table5of13(563)=4900:Table5of13(564)=1178
- Table5of13(565)=2852:Table5of13(566)=1180:Table5of13(567)=1828:Table5of13(568)=1187:Table5of13(569)=6308
- Table5of13(570)=1189:Table5of13(571)=5284:Table5of13(572)=1190:Table5of13(573)=3236:Table5of13(574)=1193
- Table5of13(575)=4772:Table5of13(576)=1194:Table5of13(577)=2724:Table5of13(578)=1196:Table5of13(579)=1700
- Table5of13(580)=1201:Table5of13(581)=4516:Table5of13(582)=1202:Table5of13(583)=2468:Table5of13(584)=1204
- Table5of13(585)=1444:Table5of13(586)=1219:Table5of13(587)=6244:Table5of13(588)=1221:Table5of13(589)=5220
- Table5of13(590)=1222:Table5of13(591)=3172:Table5of13(592)=1225:Table5of13(593)=4708:Table5of13(594)=1226
- Table5of13(595)=2660:Table5of13(596)=1228:Table5of13(597)=1636:Table5of13(598)=1233:Table5of13(599)=4452
- Table5of13(600)=1234:Table5of13(601)=2404:Table5of13(602)=1236:Table5of13(603)=1380:Table5of13(604)=1249
- Table5of13(605)=4324:Table5of13(606)=1250:Table5of13(607)=2276:Table5of13(608)=1287:Table5of13(609)=7188
- Table5of13(610)=1291:Table5of13(611)=6676:Table5of13(612)=1293:Table5of13(613)=5652:Table5of13(614)=1294
- Table5of13(615)=3604:Table5of13(616)=1299:Table5of13(617)=6420:Table5of13(618)=1301:Table5of13(619)=5396
- Table5of13(620)=1302:Table5of13(621)=3348:Table5of13(622)=1305:Table5of13(623)=4884:Table5of13(624)=1306
- Table5of13(625)=2836:Table5of13(626)=1308:Table5of13(627)=1812:Table5of13(628)=1315:Table5of13(629)=6292
- Table5of13(630)=1317:Table5of13(631)=5268:Table5of13(632)=1318:Table5of13(633)=3220:Table5of13(634)=1321
- Table5of13(635)=4756:Table5of13(636)=1322:Table5of13(637)=2708:Table5of13(638)=1324:Table5of13(639)=1684
- Table5of13(640)=1329:Table5of13(641)=4500:Table5of13(642)=1330:Table5of13(643)=2452:Table5of13(644)=1332
- Table5of13(645)=1428:Table5of13(646)=1347:Table5of13(647)=6228:Table5of13(648)=1349:Table5of13(649)=5204
- Table5of13(650)=1350:Table5of13(651)=3156:Table5of13(652)=1353:Table5of13(653)=4692:Table5of13(654)=1354
- Table5of13(655)=2644:Table5of13(656)=1356:Table5of13(657)=1620:Table5of13(658)=1361:Table5of13(659)=4436
- Table5of13(660)=1362:Table5of13(661)=2388:Table5of13(662)=1377:Table5of13(663)=4308:Table5of13(664)=1378
- Table5of13(665)=2260:Table5of13(666)=1411:Table5of13(667)=6196:Table5of13(668)=1413:Table5of13(669)=5172
- Table5of13(670)=1414:Table5of13(671)=3124:Table5of13(672)=1417:Table5of13(673)=4660:Table5of13(674)=1418
- Table5of13(675)=2612:Table5of13(676)=1420:Table5of13(677)=1588:Table5of13(678)=1425:Table5of13(679)=4404
- Table5of13(680)=1426:Table5of13(681)=2356:Table5of13(682)=1441:Table5of13(683)=4276:Table5of13(684)=1442
- Table5of13(685)=2228:Table5of13(686)=1473:Table5of13(687)=4212:Table5of13(688)=1474:Table5of13(689)=2164
- Table5of13(690)=1543:Table5of13(691)=7180:Table5of13(692)=1547:Table5of13(693)=6668:Table5of13(694)=1549
- Table5of13(695)=5644:Table5of13(696)=1550:Table5of13(697)=3596:Table5of13(698)=1555:Table5of13(699)=6412
- Table5of13(700)=1557:Table5of13(701)=5388:Table5of13(702)=1558:Table5of13(703)=3340:Table5of13(704)=1561
- Table5of13(705)=4876:Table5of13(706)=1562:Table5of13(707)=2828:Table5of13(708)=1564:Table5of13(709)=1804
- Table5of13(710)=1571:Table5of13(711)=6284:Table5of13(712)=1573:Table5of13(713)=5260:Table5of13(714)=1574
- Table5of13(715)=3212:Table5of13(716)=1577:Table5of13(717)=4748:Table5of13(718)=1578:Table5of13(719)=2700
- Table5of13(720)=1580:Table5of13(721)=1676:Table5of13(722)=1585:Table5of13(723)=4492:Table5of13(724)=1586
- Table5of13(725)=2444:Table5of13(726)=1603:Table5of13(727)=6220:Table5of13(728)=1605:Table5of13(729)=5196
- Table5of13(730)=1606:Table5of13(731)=3148:Table5of13(732)=1609:Table5of13(733)=4684:Table5of13(734)=1610
- Table5of13(735)=2636:Table5of13(736)=1617:Table5of13(737)=4428:Table5of13(738)=1618:Table5of13(739)=2380
- Table5of13(740)=1633:Table5of13(741)=4300:Table5of13(742)=1634:Table5of13(743)=2252:Table5of13(744)=1667
- Table5of13(745)=6188:Table5of13(746)=1669:Table5of13(747)=5164:Table5of13(748)=1670:Table5of13(749)=3116
- Table5of13(750)=1673:Table5of13(751)=4652:Table5of13(752)=1674:Table5of13(753)=2604:Table5of13(754)=1681
- Table5of13(755)=4396:Table5of13(756)=1682:Table5of13(757)=2348:Table5of13(758)=1697:Table5of13(759)=4268
- Table5of13(760)=1698:Table5of13(761)=2220:Table5of13(762)=1729:Table5of13(763)=4204:Table5of13(764)=1730
- Table5of13(765)=2156:Table5of13(766)=1795:Table5of13(767)=6172:Table5of13(768)=1797:Table5of13(769)=5148
- Table5of13(770)=1798:Table5of13(771)=3100:Table5of13(772)=1801:Table5of13(773)=4636:Table5of13(774)=1802
- Table5of13(775)=2588:Table5of13(776)=1809:Table5of13(777)=4380:Table5of13(778)=1810:Table5of13(779)=2332
- Table5of13(780)=1825:Table5of13(781)=4252:Table5of13(782)=1826:Table5of13(783)=2204:Table5of13(784)=1857
- Table5of13(785)=4188:Table5of13(786)=1858:Table5of13(787)=2140:Table5of13(788)=1921:Table5of13(789)=4156
- Table5of13(790)=1922:Table5of13(791)=2108:Table5of13(792)=2063:Table5of13(793)=7682:Table5of13(794)=2071
- Table5of13(795)=7426:Table5of13(796)=2075:Table5of13(797)=6914:Table5of13(798)=2077:Table5of13(799)=5890
- Table5of13(800)=2078:Table5of13(801)=3842:Table5of13(802)=2087:Table5of13(803)=7298:Table5of13(804)=2091
- Table5of13(805)=6786:Table5of13(806)=2093:Table5of13(807)=5762:Table5of13(808)=2094:Table5of13(809)=3714
- Table5of13(810)=2099:Table5of13(811)=6530:Table5of13(812)=2101:Table5of13(813)=5506:Table5of13(814)=2102
- Table5of13(815)=3458:Table5of13(816)=2105:Table5of13(817)=4994:Table5of13(818)=2106:Table5of13(819)=2946
- Table5of13(820)=2119:Table5of13(821)=7234:Table5of13(822)=2123:Table5of13(823)=6722:Table5of13(824)=2125
- Table5of13(825)=5698:Table5of13(826)=2126:Table5of13(827)=3650:Table5of13(828)=2131:Table5of13(829)=6466
- Table5of13(830)=2133:Table5of13(831)=5442:Table5of13(832)=2134:Table5of13(833)=3394:Table5of13(834)=2137
- Table5of13(835)=4930:Table5of13(836)=2138:Table5of13(837)=2882:Table5of13(838)=2147:Table5of13(839)=6338
- Table5of13(840)=2149:Table5of13(841)=5314:Table5of13(842)=2150:Table5of13(843)=3266:Table5of13(844)=2153
- Table5of13(845)=4802:Table5of13(846)=2154:Table5of13(847)=2754:Table5of13(848)=2161:Table5of13(849)=4546
- Table5of13(850)=2162:Table5of13(851)=2498:Table5of13(852)=2183:Table5of13(853)=7202:Table5of13(854)=2187
- Table5of13(855)=6690:Table5of13(856)=2189:Table5of13(857)=5666:Table5of13(858)=2190:Table5of13(859)=3618
- Table5of13(860)=2195:Table5of13(861)=6434:Table5of13(862)=2197:Table5of13(863)=5410:Table5of13(864)=2198
- Table5of13(865)=3362:Table5of13(866)=2201:Table5of13(867)=4898:Table5of13(868)=2202:Table5of13(869)=2850
- Table5of13(870)=2211:Table5of13(871)=6306:Table5of13(872)=2213:Table5of13(873)=5282:Table5of13(874)=2214
- Table5of13(875)=3234:Table5of13(876)=2217:Table5of13(877)=4770:Table5of13(878)=2218:Table5of13(879)=2722
- Table5of13(880)=2225:Table5of13(881)=4514:Table5of13(882)=2226:Table5of13(883)=2466:Table5of13(884)=2243
- Table5of13(885)=6242:Table5of13(886)=2245:Table5of13(887)=5218:Table5of13(888)=2246:Table5of13(889)=3170
- Table5of13(890)=2249:Table5of13(891)=4706:Table5of13(892)=2250:Table5of13(893)=2658:Table5of13(894)=2257
- Table5of13(895)=4450:Table5of13(896)=2258:Table5of13(897)=2402:Table5of13(898)=2273:Table5of13(899)=4322
- Table5of13(900)=2311:Table5of13(901)=7186:Table5of13(902)=2315:Table5of13(903)=6674:Table5of13(904)=2317
- Table5of13(905)=5650:Table5of13(906)=2318:Table5of13(907)=3602:Table5of13(908)=2323:Table5of13(909)=6418
- Table5of13(910)=2325:Table5of13(911)=5394:Table5of13(912)=2326:Table5of13(913)=3346:Table5of13(914)=2329
- Table5of13(915)=4882:Table5of13(916)=2330:Table5of13(917)=2834:Table5of13(918)=2339:Table5of13(919)=6290
- Table5of13(920)=2341:Table5of13(921)=5266:Table5of13(922)=2342:Table5of13(923)=3218:Table5of13(924)=2345
- Table5of13(925)=4754:Table5of13(926)=2346:Table5of13(927)=2706:Table5of13(928)=2353:Table5of13(929)=4498
- Table5of13(930)=2354:Table5of13(931)=2450:Table5of13(932)=2371:Table5of13(933)=6226:Table5of13(934)=2373
- Table5of13(935)=5202:Table5of13(936)=2374:Table5of13(937)=3154:Table5of13(938)=2377:Table5of13(939)=4690
- Table5of13(940)=2378:Table5of13(941)=2642:Table5of13(942)=2385:Table5of13(943)=4434:Table5of13(944)=2401
- Table5of13(945)=4306:Table5of13(946)=2435:Table5of13(947)=6194:Table5of13(948)=2437:Table5of13(949)=5170
- Table5of13(950)=2438:Table5of13(951)=3122:Table5of13(952)=2441:Table5of13(953)=4658:Table5of13(954)=2442
- Table5of13(955)=2610:Table5of13(956)=2449:Table5of13(957)=4402:Table5of13(958)=2465:Table5of13(959)=4274
- Table5of13(960)=2497:Table5of13(961)=4210:Table5of13(962)=2567:Table5of13(963)=7178:Table5of13(964)=2571
- Table5of13(965)=6666:Table5of13(966)=2573:Table5of13(967)=5642:Table5of13(968)=2574:Table5of13(969)=3594
- Table5of13(970)=2579:Table5of13(971)=6410:Table5of13(972)=2581:Table5of13(973)=5386:Table5of13(974)=2582
- Table5of13(975)=3338:Table5of13(976)=2585:Table5of13(977)=4874:Table5of13(978)=2586:Table5of13(979)=2826
- Table5of13(980)=2595:Table5of13(981)=6282:Table5of13(982)=2597:Table5of13(983)=5258:Table5of13(984)=2598
- Table5of13(985)=3210:Table5of13(986)=2601:Table5of13(987)=4746:Table5of13(988)=2602:Table5of13(989)=2698
- Table5of13(990)=2609:Table5of13(991)=4490:Table5of13(992)=2627:Table5of13(993)=6218:Table5of13(994)=2629
- Table5of13(995)=5194:Table5of13(996)=2630:Table5of13(997)=3146:Table5of13(998)=2633:Table5of13(999)=4682
- Table5of13(1000)=2641:Table5of13(1001)=4426:Table5of13(1002)=2657:Table5of13(1003)=4298:Table5of13(1004)=2691
- Table5of13(1005)=6186:Table5of13(1006)=2693:Table5of13(1007)=5162:Table5of13(1008)=2694:Table5of13(1009)=3114
- Table5of13(1010)=2697:Table5of13(1011)=4650:Table5of13(1012)=2705:Table5of13(1013)=4394:Table5of13(1014)=2721
- Table5of13(1015)=4266:Table5of13(1016)=2753:Table5of13(1017)=4202:Table5of13(1018)=2819:Table5of13(1019)=6170
- Table5of13(1020)=2821:Table5of13(1021)=5146:Table5of13(1022)=2822:Table5of13(1023)=3098:Table5of13(1024)=2825
- Table5of13(1025)=4634:Table5of13(1026)=2833:Table5of13(1027)=4378:Table5of13(1028)=2849:Table5of13(1029)=4250
- Table5of13(1030)=2881:Table5of13(1031)=4186:Table5of13(1032)=2945:Table5of13(1033)=4154:Table5of13(1034)=3079
- Table5of13(1035)=7174:Table5of13(1036)=3083:Table5of13(1037)=6662:Table5of13(1038)=3085:Table5of13(1039)=5638
- Table5of13(1040)=3086:Table5of13(1041)=3590:Table5of13(1042)=3091:Table5of13(1043)=6406:Table5of13(1044)=3093
- Table5of13(1045)=5382:Table5of13(1046)=3094:Table5of13(1047)=3334:Table5of13(1048)=3097:Table5of13(1049)=4870
- Table5of13(1050)=3107:Table5of13(1051)=6278:Table5of13(1052)=3109:Table5of13(1053)=5254:Table5of13(1054)=3110
- Table5of13(1055)=3206:Table5of13(1056)=3113:Table5of13(1057)=4742:Table5of13(1058)=3121:Table5of13(1059)=4486
- Table5of13(1060)=3139:Table5of13(1061)=6214:Table5of13(1062)=3141:Table5of13(1063)=5190:Table5of13(1064)=3145
- Table5of13(1065)=4678:Table5of13(1066)=3153:Table5of13(1067)=4422:Table5of13(1068)=3169:Table5of13(1069)=4294
- Table5of13(1070)=3203:Table5of13(1071)=6182:Table5of13(1072)=3205:Table5of13(1073)=5158:Table5of13(1074)=3209
- Table5of13(1075)=4646:Table5of13(1076)=3217:Table5of13(1077)=4390:Table5of13(1078)=3233:Table5of13(1079)=4262
- Table5of13(1080)=3265:Table5of13(1081)=4198:Table5of13(1082)=3331:Table5of13(1083)=6166:Table5of13(1084)=3333
- Table5of13(1085)=5142:Table5of13(1086)=3337:Table5of13(1087)=4630:Table5of13(1088)=3345:Table5of13(1089)=4374
- Table5of13(1090)=3361:Table5of13(1091)=4246:Table5of13(1092)=3393:Table5of13(1093)=4182:Table5of13(1094)=3457
- Table5of13(1095)=4150:Table5of13(1096)=3587:Table5of13(1097)=6158:Table5of13(1098)=3589:Table5of13(1099)=5134
- Table5of13(1100)=3593:Table5of13(1101)=4622:Table5of13(1102)=3601:Table5of13(1103)=4366:Table5of13(1104)=3617
- Table5of13(1105)=4238:Table5of13(1106)=3649:Table5of13(1107)=4174:Table5of13(1108)=3713:Table5of13(1109)=4142
- Table5of13(1110)=3841:Table5of13(1111)=4126:Table5of13(1112)=4111:Table5of13(1113)=7681:Table5of13(1114)=4119
- Table5of13(1115)=7425:Table5of13(1116)=4123:Table5of13(1117)=6913:Table5of13(1118)=4125:Table5of13(1119)=5889
- Table5of13(1120)=4135:Table5of13(1121)=7297:Table5of13(1122)=4139:Table5of13(1123)=6785:Table5of13(1124)=4141
- Table5of13(1125)=5761:Table5of13(1126)=4147:Table5of13(1127)=6529:Table5of13(1128)=4149:Table5of13(1129)=5505
- Table5of13(1130)=4153:Table5of13(1131)=4993:Table5of13(1132)=4167:Table5of13(1133)=7233:Table5of13(1134)=4171
- Table5of13(1135)=6721:Table5of13(1136)=4173:Table5of13(1137)=5697:Table5of13(1138)=4179:Table5of13(1139)=6465
- Table5of13(1140)=4181:Table5of13(1141)=5441:Table5of13(1142)=4185:Table5of13(1143)=4929:Table5of13(1144)=4195
- Table5of13(1145)=6337:Table5of13(1146)=4197:Table5of13(1147)=5313:Table5of13(1148)=4201:Table5of13(1149)=4801
- Table5of13(1150)=4209:Table5of13(1151)=4545:Table5of13(1152)=4231:Table5of13(1153)=7201:Table5of13(1154)=4235
- Table5of13(1155)=6689:Table5of13(1156)=4237:Table5of13(1157)=5665:Table5of13(1158)=4243:Table5of13(1159)=6433
- Table5of13(1160)=4245:Table5of13(1161)=5409:Table5of13(1162)=4249:Table5of13(1163)=4897:Table5of13(1164)=4259
- Table5of13(1165)=6305:Table5of13(1166)=4261:Table5of13(1167)=5281:Table5of13(1168)=4265:Table5of13(1169)=4769
- Table5of13(1170)=4273:Table5of13(1171)=4513:Table5of13(1172)=4291:Table5of13(1173)=6241:Table5of13(1174)=4293
- Table5of13(1175)=5217:Table5of13(1176)=4297:Table5of13(1177)=4705:Table5of13(1178)=4305:Table5of13(1179)=4449
- Table5of13(1180)=4359:Table5of13(1181)=7185:Table5of13(1182)=4363:Table5of13(1183)=6673:Table5of13(1184)=4365
- Table5of13(1185)=5649:Table5of13(1186)=4371:Table5of13(1187)=6417:Table5of13(1188)=4373:Table5of13(1189)=5393
- Table5of13(1190)=4377:Table5of13(1191)=4881:Table5of13(1192)=4387:Table5of13(1193)=6289:Table5of13(1194)=4389
- Table5of13(1195)=5265:Table5of13(1196)=4393:Table5of13(1197)=4753:Table5of13(1198)=4401:Table5of13(1199)=4497
- Table5of13(1200)=4419:Table5of13(1201)=6225:Table5of13(1202)=4421:Table5of13(1203)=5201:Table5of13(1204)=4425
- Table5of13(1205)=4689:Table5of13(1206)=4483:Table5of13(1207)=6193:Table5of13(1208)=4485:Table5of13(1209)=5169
- Table5of13(1210)=4489:Table5of13(1211)=4657:Table5of13(1212)=4615:Table5of13(1213)=7177:Table5of13(1214)=4619
- Table5of13(1215)=6665:Table5of13(1216)=4621:Table5of13(1217)=5641:Table5of13(1218)=4627:Table5of13(1219)=6409
- Table5of13(1220)=4629:Table5of13(1221)=5385:Table5of13(1222)=4633:Table5of13(1223)=4873:Table5of13(1224)=4643
- Table5of13(1225)=6281:Table5of13(1226)=4645:Table5of13(1227)=5257:Table5of13(1228)=4649:Table5of13(1229)=4745
- Table5of13(1230)=4675:Table5of13(1231)=6217:Table5of13(1232)=4677:Table5of13(1233)=5193:Table5of13(1234)=4739
- Table5of13(1235)=6185:Table5of13(1236)=4741:Table5of13(1237)=5161:Table5of13(1238)=4867:Table5of13(1239)=6169
- Table5of13(1240)=4869:Table5of13(1241)=5145:Table5of13(1242)=5127:Table5of13(1243)=7173:Table5of13(1244)=5131
- Table5of13(1245)=6661:Table5of13(1246)=5133:Table5of13(1247)=5637:Table5of13(1248)=5139:Table5of13(1249)=6405
- Table5of13(1250)=5141:Table5of13(1251)=5381:Table5of13(1252)=5155:Table5of13(1253)=6277:Table5of13(1254)=5157
- Table5of13(1255)=5253:Table5of13(1256)=5187:Table5of13(1257)=6213:Table5of13(1258)=5251:Table5of13(1259)=6181
- Table5of13(1260)=5379:Table5of13(1261)=6165:Table5of13(1262)=5635:Table5of13(1263)=6157:Table5of13(1264)=6151
- Table5of13(1265)=7171:Table5of13(1266)=6155:Table5of13(1267)=6659:Table5of13(1268)=6163:Table5of13(1269)=6403
- Table5of13(1270)=6179:Table5of13(1271)=6275:Table5of13(1272)=6211:Table5of13(1273)=5189:Table5of13(1274)=4681
- Table5of13(1275)=4433:Table5of13(1276)=4321:Table5of13(1277)=3142:Table5of13(1278)=2634:Table5of13(1279)=2386
- Table5of13(1280)=2274:Table5of13(1281)=1612:Table5of13(1282)=1364:Table5of13(1283)=1252:Table5of13(1284)=856
- Table5of13(1285)=744:Table5of13(1286)=496
-
-
- ' Table 20: 2 of 13 Characters (78 entries)
- Table2of13(0)=3:Table2of13(1)=6144:Table2of13(2)=5:Table2of13(3)=5120:Table2of13(4)=6
- Table2of13(5)=3072:Table2of13(6)=9:Table2of13(7)=4608:Table2of13(8)=10:Table2of13(9)=2560
- Table2of13(10)=12:Table2of13(11)=1536:Table2of13(12)=17:Table2of13(13)=4352:Table2of13(14)=18
- Table2of13(15)=2304:Table2of13(16)=20:Table2of13(17)=1280:Table2of13(18)=24:Table2of13(19)=768
- Table2of13(20)=33:Table2of13(21)=4224:Table2of13(22)=34:Table2of13(23)=2176:Table2of13(24)=36
- Table2of13(25)=1152:Table2of13(26)=40:Table2of13(27)=640:Table2of13(28)=48:Table2of13(29)=384
- Table2of13(30)=65:Table2of13(31)=4160:Table2of13(32)=66:Table2of13(33)=2112:Table2of13(34)=68
- Table2of13(35)=1088:Table2of13(36)=72:Table2of13(37)=576:Table2of13(38)=80:Table2of13(39)=320
- Table2of13(40)=96:Table2of13(41)=192:Table2of13(42)=129:Table2of13(43)=4128:Table2of13(44)=130
- Table2of13(45)=2080:Table2of13(46)=132:Table2of13(47)=1056:Table2of13(48)=136:Table2of13(49)=544
- Table2of13(50)=144:Table2of13(51)=288:Table2of13(52)=257:Table2of13(53)=4112:Table2of13(54)=258
- Table2of13(55)=2064:Table2of13(56)=260:Table2of13(57)=1040:Table2of13(58)=264:Table2of13(59)=528
- Table2of13(60)=513:Table2of13(61)=4104:Table2of13(62)=514:Table2of13(63)=2056:Table2of13(64)=516
- Table2of13(65)=1032:Table2of13(66)=1025:Table2of13(67)=4100:Table2of13(68)=1026:Table2of13(69)=2052
- Table2of13(70)=2049:Table2of13(71)=4098:Table2of13(72)=4097:Table2of13(73)=2050:Table2of13(74)=1028
- Table2of13(75)=520:Table2of13(76)=272:Table2of13(77)=160
-
- ' Table 22: Bar to Character Mapping
- BarCharMap(0,0)=7:BarCharMap(0,1)=2:BarCharMap(0,2)=4:BarCharMap(0,3)=3
- BarCharMap(1,0)=1:BarCharMap(1,1)=10:BarCharMap(1,2)=0:BarCharMap(1,3)=0
- BarCharMap(2,0)=9:BarCharMap(2,1)=12:BarCharMap(2,2)=2:BarCharMap(2,3)=8
- BarCharMap(3,0)=5:BarCharMap(3,1)=5:BarCharMap(3,2)=6:BarCharMap(3,3)=11
- BarCharMap(4,0)=8:BarCharMap(4,1)=9:BarCharMap(4,2)=3:BarCharMap(4,3)=1
- BarCharMap(5,0)=0:BarCharMap(5,1)=1:BarCharMap(5,2)=5:BarCharMap(5,3)=12
- BarCharMap(6,0)=2:BarCharMap(6,1)=5:BarCharMap(6,2)=1:BarCharMap(6,3)=8
- BarCharMap(7,0)=4:BarCharMap(7,1)=4:BarCharMap(7,2)=9:BarCharMap(7,3)=11
- BarCharMap(8,0)=6:BarCharMap(8,1)=3:BarCharMap(8,2)=8:BarCharMap(8,3)=10
- BarCharMap(9,0)=3:BarCharMap(9,1)=9:BarCharMap(9,2)=7:BarCharMap(9,3)=6
- BarCharMap(10,0)=5:BarCharMap(10,1)=11:BarCharMap(10,2)=1:BarCharMap(10,3)=4
- BarCharMap(11,0)=8:BarCharMap(11,1)=5:BarCharMap(11,2)=2:BarCharMap(11,3)=12
- BarCharMap(12,0)=9:BarCharMap(12,1)=10:BarCharMap(12,2)=0:BarCharMap(12,3)=2
- BarCharMap(13,0)=7:BarCharMap(13,1)=1:BarCharMap(13,2)=6:BarCharMap(13,3)=7
- BarCharMap(14,0)=3:BarCharMap(14,1)=6:BarCharMap(14,2)=4:BarCharMap(14,3)=9
- BarCharMap(15,0)=0:BarCharMap(15,1)=3:BarCharMap(15,2)=8:BarCharMap(15,3)=6
- BarCharMap(16,0)=6:BarCharMap(16,1)=4:BarCharMap(16,2)=2:BarCharMap(16,3)=7
- BarCharMap(17,0)=1:BarCharMap(17,1)=1:BarCharMap(17,2)=9:BarCharMap(17,3)=9
- BarCharMap(18,0)=7:BarCharMap(18,1)=10:BarCharMap(18,2)=5:BarCharMap(18,3)=2
- BarCharMap(19,0)=4:BarCharMap(19,1)=0:BarCharMap(19,2)=3:BarCharMap(19,3)=8
- BarCharMap(20,0)=6:BarCharMap(20,1)=2:BarCharMap(20,2)=0:BarCharMap(20,3)=4
- BarCharMap(21,0)=8:BarCharMap(21,1)=11:BarCharMap(21,2)=1:BarCharMap(21,3)=0
- BarCharMap(22,0)=9:BarCharMap(22,1)=8:BarCharMap(22,2)=3:BarCharMap(22,3)=12
- BarCharMap(23,0)=2:BarCharMap(23,1)=6:BarCharMap(23,2)=7:BarCharMap(23,3)=7
- BarCharMap(24,0)=5:BarCharMap(24,1)=1:BarCharMap(24,2)=4:BarCharMap(24,3)=10
- BarCharMap(25,0)=1:BarCharMap(25,1)=12:BarCharMap(25,2)=6:BarCharMap(25,3)=9
- BarCharMap(26,0)=7:BarCharMap(26,1)=3:BarCharMap(26,2)=8:BarCharMap(26,3)=0
- BarCharMap(27,0)=5:BarCharMap(27,1)=8:BarCharMap(27,2)=9:BarCharMap(27,3)=7
- BarCharMap(28,0)=4:BarCharMap(28,1)=6:BarCharMap(28,2)=2:BarCharMap(28,3)=10
- BarCharMap(29,0)=3:BarCharMap(29,1)=4:BarCharMap(29,2)=0:BarCharMap(29,3)=5
- BarCharMap(30,0)=8:BarCharMap(30,1)=4:BarCharMap(30,2)=5:BarCharMap(30,3)=7
- BarCharMap(31,0)=7:BarCharMap(31,1)=11:BarCharMap(31,2)=1:BarCharMap(31,3)=9
- BarCharMap(32,0)=6:BarCharMap(32,1)=0:BarCharMap(32,2)=9:BarCharMap(32,3)=6
- BarCharMap(33,0)=0:BarCharMap(33,1)=6:BarCharMap(33,2)=4:BarCharMap(33,3)=8
- BarCharMap(34,0)=2:BarCharMap(34,1)=1:BarCharMap(34,2)=3:BarCharMap(34,3)=2
- BarCharMap(35,0)=5:BarCharMap(35,1)=9:BarCharMap(35,2)=8:BarCharMap(35,3)=12
- BarCharMap(36,0)=4:BarCharMap(36,1)=11:BarCharMap(36,2)=6:BarCharMap(36,3)=1
- BarCharMap(37,0)=9:BarCharMap(37,1)=5:BarCharMap(37,2)=7:BarCharMap(37,3)=4
- BarCharMap(38,0)=3:BarCharMap(38,1)=3:BarCharMap(38,2)=1:BarCharMap(38,3)=2
- BarCharMap(39,0)=0:BarCharMap(39,1)=7:BarCharMap(39,2)=2:BarCharMap(39,3)=0
- BarCharMap(40,0)=1:BarCharMap(40,1)=3:BarCharMap(40,2)=4:BarCharMap(40,3)=1
- BarCharMap(41,0)=6:BarCharMap(41,1)=10:BarCharMap(41,2)=3:BarCharMap(41,3)=5
- BarCharMap(42,0)=8:BarCharMap(42,1)=7:BarCharMap(42,2)=9:BarCharMap(42,3)=4
- BarCharMap(43,0)=2:BarCharMap(43,1)=11:BarCharMap(43,2)=5:BarCharMap(43,3)=6
- BarCharMap(44,0)=0:BarCharMap(44,1)=8:BarCharMap(44,2)=7:BarCharMap(44,3)=12
- BarCharMap(45,0)=4:BarCharMap(45,1)=2:BarCharMap(45,2)=8:BarCharMap(45,3)=1
- BarCharMap(46,0)=5:BarCharMap(46,1)=10:BarCharMap(46,2)=3:BarCharMap(46,3)=0
- BarCharMap(47,0)=9:BarCharMap(47,1)=3:BarCharMap(47,2)=0:BarCharMap(47,3)=9
- BarCharMap(48,0)=6:BarCharMap(48,1)=5:BarCharMap(48,2)=2:BarCharMap(48,3)=4
- BarCharMap(49,0)=7:BarCharMap(49,1)=8:BarCharMap(49,2)=1:BarCharMap(49,3)=7
- BarCharMap(50,0)=5:BarCharMap(50,1)=0:BarCharMap(50,2)=4:BarCharMap(50,3)=5
- BarCharMap(51,0)=2:BarCharMap(51,1)=3:BarCharMap(51,2)=0:BarCharMap(51,3)=10
- BarCharMap(52,0)=6:BarCharMap(52,1)=12:BarCharMap(52,2)=9:BarCharMap(52,3)=2
- BarCharMap(53,0)=3:BarCharMap(53,1)=11:BarCharMap(53,2)=1:BarCharMap(53,3)=6
- BarCharMap(54,0)=8:BarCharMap(54,1)=8:BarCharMap(54,2)=7:BarCharMap(54,3)=9
- BarCharMap(55,0)=5:BarCharMap(55,1)=4:BarCharMap(55,2)=0:BarCharMap(55,3)=11
- BarCharMap(56,0)=1:BarCharMap(56,1)=5:BarCharMap(56,2)=2:BarCharMap(56,3)=2
- BarCharMap(57,0)=9:BarCharMap(57,1)=1:BarCharMap(57,2)=4:BarCharMap(57,3)=12
- BarCharMap(58,0)=8:BarCharMap(58,1)=3:BarCharMap(58,2)=6:BarCharMap(58,3)=6
- BarCharMap(59,0)=7:BarCharMap(59,1)=0:BarCharMap(59,2)=3:BarCharMap(59,3)=7
- BarCharMap(60,0)=4:BarCharMap(60,1)=7:BarCharMap(60,2)=7:BarCharMap(60,3)=5
- BarCharMap(61,0)=0:BarCharMap(61,1)=12:BarCharMap(61,2)=1:BarCharMap(61,3)=11
- BarCharMap(62,0)=2:BarCharMap(62,1)=9:BarCharMap(62,2)=9:BarCharMap(62,3)=0
- BarCharMap(63,0)=6:BarCharMap(63,1)=8:BarCharMap(63,2)=5:BarCharMap(63,3)=3
- BarCharMap(64,0)=3:BarCharMap(64,1)=10:BarCharMap(64,2)=8:BarCharMap(64,3)=2
-
- ' Build reverse lookup
- CharToCodeword.RemoveAll
- For i = 0 To 1286
- CharToCodeword(CStr(Table5of13(i) And &H1FFF)) = CLng(i)
- Next
- For i = 0 To 77
- CharToCodeword(CStr(Table2of13(i) And &H1FFF)) = CLng(1287 + i)
- Next
-
- IsInitialized = True
- End Sub
- End Class
-
- '==============================================================================
- ' Singleton Instance Function
- '==============================================================================
- Dim g_IMBCodecInstance
-
- Function GetIMBCodec()
- If IsEmpty(g_IMBCodecInstance) Or IsNull(g_IMBCodecInstance) Then
- Set g_IMBCodecInstance = New IMBCodec
- End If
- Set GetIMBCodec = g_IMBCodecInstance
- End Function
-
- %>
|