25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

917 satır
49KB

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

Powered by TurnKey Linux.