From ebb6f98e627bb4ca1c3f8b8f328c107f4ba198e8 Mon Sep 17 00:00:00 2001 From: Miraty Date: Wed, 14 Aug 2019 17:09:37 +0200 Subject: [PATCH] Suppression des fichiers inutiles --- README.md.backup | 49 - favicons/defaut-128.png | Bin 1538 -> 0 bytes favicons/defaut-16.png | Bin 1241 -> 0 bytes favicons/defaut-192.png | Bin 1707 -> 0 bytes favicons/defaut-256.png | Bin 1951 -> 0 bytes favicons/defaut-32.png | Bin 1285 -> 0 bytes favicons/defaut-384.png | Bin 2470 -> 0 bytes favicons/defaut-48.png | Bin 1318 -> 0 bytes favicons/defaut-512.png | Bin 3124 -> 0 bytes favicons/defaut-64.png | Bin 1367 -> 0 bytes favicons/defaut-96.png | Bin 1446 -> 0 bytes favicons/parinux-128.png | Bin 1515 -> 0 bytes favicons/parinux-16.png | Bin 1229 -> 0 bytes favicons/parinux-192.png | Bin 1684 -> 0 bytes favicons/parinux-256.png | Bin 1929 -> 0 bytes favicons/parinux-32.png | Bin 1260 -> 0 bytes favicons/parinux-384.png | Bin 2446 -> 0 bytes favicons/parinux-48.png | Bin 1294 -> 0 bytes favicons/parinux-512.png | Bin 3102 -> 0 bytes favicons/parinux-64.png | Bin 1343 -> 0 bytes favicons/parinux-96.png | Bin 1422 -> 0 bytes locale/fr_FR/LC_MESSAGES/messages.mo | Bin 468 -> 0 bytes locale/fr_FR/LC_MESSAGES/messages.po | 26 - parinux.png | Bin 9813 -> 0 bytes phpqrcode/.gitignore | 2 - phpqrcode/CHANGELOG | 38 - phpqrcode/INSTALL | 67 - phpqrcode/LICENSE | 165 -- phpqrcode/README | 61 - phpqrcode/VERSION | 2 - phpqrcode/bindings/tcpdf/qrcode.php | 2875 -------------------- phpqrcode/cache/frame_1.dat | 2 - phpqrcode/cache/frame_1.png | Bin 126 -> 0 bytes phpqrcode/cache/frame_10.dat | Bin 204 -> 0 bytes phpqrcode/cache/frame_10.png | Bin 202 -> 0 bytes phpqrcode/cache/frame_11.dat | Bin 210 -> 0 bytes phpqrcode/cache/frame_11.png | Bin 205 -> 0 bytes phpqrcode/cache/frame_12.dat | Bin 222 -> 0 bytes phpqrcode/cache/frame_12.png | Bin 216 -> 0 bytes phpqrcode/cache/frame_13.dat | Bin 223 -> 0 bytes phpqrcode/cache/frame_13.png | Bin 210 -> 0 bytes phpqrcode/cache/frame_14.dat | Bin 227 -> 0 bytes phpqrcode/cache/frame_14.png | Bin 213 -> 0 bytes phpqrcode/cache/frame_15.dat | Bin 242 -> 0 bytes phpqrcode/cache/frame_15.png | Bin 219 -> 0 bytes phpqrcode/cache/frame_16.dat | 1 - phpqrcode/cache/frame_16.png | Bin 211 -> 0 bytes phpqrcode/cache/frame_17.dat | Bin 237 -> 0 bytes phpqrcode/cache/frame_17.png | Bin 211 -> 0 bytes phpqrcode/cache/frame_18.dat | 2 - phpqrcode/cache/frame_18.png | Bin 228 -> 0 bytes phpqrcode/cache/frame_19.dat | 3 - phpqrcode/cache/frame_19.png | Bin 225 -> 0 bytes phpqrcode/cache/frame_2.dat | 1 - phpqrcode/cache/frame_2.png | Bin 144 -> 0 bytes phpqrcode/cache/frame_20.dat | Bin 250 -> 0 bytes phpqrcode/cache/frame_20.png | Bin 225 -> 0 bytes phpqrcode/cache/frame_21.dat | 1 - phpqrcode/cache/frame_21.png | Bin 235 -> 0 bytes phpqrcode/cache/frame_22.dat | 3 - phpqrcode/cache/frame_22.png | Bin 226 -> 0 bytes phpqrcode/cache/frame_23.dat | 3 - phpqrcode/cache/frame_23.png | Bin 220 -> 0 bytes phpqrcode/cache/frame_24.dat | 1 - phpqrcode/cache/frame_24.png | Bin 242 -> 0 bytes phpqrcode/cache/frame_25.dat | 3 - phpqrcode/cache/frame_25.png | Bin 242 -> 0 bytes phpqrcode/cache/frame_26.dat | 2 - phpqrcode/cache/frame_26.png | Bin 244 -> 0 bytes phpqrcode/cache/frame_27.dat | Bin 284 -> 0 bytes phpqrcode/cache/frame_27.png | Bin 237 -> 0 bytes phpqrcode/cache/frame_28.dat | Bin 318 -> 0 bytes phpqrcode/cache/frame_28.png | Bin 234 -> 0 bytes phpqrcode/cache/frame_29.dat | 2 - phpqrcode/cache/frame_29.png | Bin 232 -> 0 bytes phpqrcode/cache/frame_3.dat | 1 - phpqrcode/cache/frame_3.png | Bin 147 -> 0 bytes phpqrcode/cache/frame_30.dat | Bin 324 -> 0 bytes phpqrcode/cache/frame_30.png | Bin 255 -> 0 bytes phpqrcode/cache/frame_31.dat | 1 - phpqrcode/cache/frame_31.png | Bin 260 -> 0 bytes phpqrcode/cache/frame_32.dat | 2 - phpqrcode/cache/frame_32.png | Bin 262 -> 0 bytes phpqrcode/cache/frame_33.dat | 14 - phpqrcode/cache/frame_33.png | Bin 253 -> 0 bytes phpqrcode/cache/frame_34.dat | Bin 331 -> 0 bytes phpqrcode/cache/frame_34.png | Bin 256 -> 0 bytes phpqrcode/cache/frame_35.dat | Bin 342 -> 0 bytes phpqrcode/cache/frame_35.png | Bin 243 -> 0 bytes phpqrcode/cache/frame_36.dat | Bin 370 -> 0 bytes phpqrcode/cache/frame_36.png | Bin 272 -> 0 bytes phpqrcode/cache/frame_37.dat | Bin 376 -> 0 bytes phpqrcode/cache/frame_37.png | Bin 279 -> 0 bytes phpqrcode/cache/frame_38.dat | 1 - phpqrcode/cache/frame_38.png | Bin 279 -> 0 bytes phpqrcode/cache/frame_39.dat | Bin 404 -> 0 bytes phpqrcode/cache/frame_39.png | Bin 264 -> 0 bytes phpqrcode/cache/frame_4.dat | 1 - phpqrcode/cache/frame_4.png | Bin 149 -> 0 bytes phpqrcode/cache/frame_40.dat | 2 - phpqrcode/cache/frame_40.png | Bin 267 -> 0 bytes phpqrcode/cache/frame_5.dat | 1 - phpqrcode/cache/frame_5.png | Bin 150 -> 0 bytes phpqrcode/cache/frame_6.dat | Bin 132 -> 0 bytes phpqrcode/cache/frame_6.png | Bin 151 -> 0 bytes phpqrcode/cache/frame_7.dat | Bin 196 -> 0 bytes phpqrcode/cache/frame_7.png | Bin 189 -> 0 bytes phpqrcode/cache/frame_8.dat | Bin 201 -> 0 bytes phpqrcode/cache/frame_8.png | Bin 204 -> 0 bytes phpqrcode/cache/frame_9.dat | Bin 206 -> 0 bytes phpqrcode/cache/frame_9.png | Bin 199 -> 0 bytes phpqrcode/cache/mask_0/mask_101_0.dat | Bin 157 -> 0 bytes phpqrcode/cache/mask_0/mask_105_0.dat | Bin 162 -> 0 bytes phpqrcode/cache/mask_0/mask_109_0.dat | 2 - phpqrcode/cache/mask_0/mask_113_0.dat | 2 - phpqrcode/cache/mask_0/mask_117_0.dat | 2 - phpqrcode/cache/mask_0/mask_121_0.dat | 1 - phpqrcode/cache/mask_0/mask_125_0.dat | 2 - phpqrcode/cache/mask_0/mask_129_0.dat | 2 - phpqrcode/cache/mask_0/mask_133_0.dat | 2 - phpqrcode/cache/mask_0/mask_137_0.dat | 1 - phpqrcode/cache/mask_0/mask_141_0.dat | 2 - phpqrcode/cache/mask_0/mask_145_0.dat | 2 - phpqrcode/cache/mask_0/mask_149_0.dat | 3 - phpqrcode/cache/mask_0/mask_153_0.dat | 1 - phpqrcode/cache/mask_0/mask_157_0.dat | 2 - phpqrcode/cache/mask_0/mask_161_0.dat | Bin 241 -> 0 bytes phpqrcode/cache/mask_0/mask_165_0.dat | 2 - phpqrcode/cache/mask_0/mask_169_0.dat | 2 - phpqrcode/cache/mask_0/mask_173_0.dat | 1 - phpqrcode/cache/mask_0/mask_177_0.dat | 2 - phpqrcode/cache/mask_0/mask_21_0.dat | Bin 48 -> 0 bytes phpqrcode/cache/mask_0/mask_25_0.dat | Bin 57 -> 0 bytes phpqrcode/cache/mask_0/mask_29_0.dat | Bin 59 -> 0 bytes phpqrcode/cache/mask_0/mask_33_0.dat | Bin 62 -> 0 bytes phpqrcode/cache/mask_0/mask_37_0.dat | Bin 65 -> 0 bytes phpqrcode/cache/mask_0/mask_41_0.dat | Bin 68 -> 0 bytes phpqrcode/cache/mask_0/mask_45_0.dat | Bin 106 -> 0 bytes phpqrcode/cache/mask_0/mask_49_0.dat | 2 - phpqrcode/cache/mask_0/mask_53_0.dat | 2 - phpqrcode/cache/mask_0/mask_57_0.dat | 4 - phpqrcode/cache/mask_0/mask_61_0.dat | Bin 119 -> 0 bytes phpqrcode/cache/mask_0/mask_65_0.dat | Bin 123 -> 0 bytes phpqrcode/cache/mask_0/mask_69_0.dat | 1 - phpqrcode/cache/mask_0/mask_73_0.dat | 1 - phpqrcode/cache/mask_0/mask_77_0.dat | 2 - phpqrcode/cache/mask_0/mask_81_0.dat | 2 - phpqrcode/cache/mask_0/mask_85_0.dat | 2 - phpqrcode/cache/mask_0/mask_89_0.dat | 1 - phpqrcode/cache/mask_0/mask_93_0.dat | 3 - phpqrcode/cache/mask_0/mask_97_0.dat | Bin 150 -> 0 bytes phpqrcode/cache/mask_1/mask_101_1.dat | 2 - phpqrcode/cache/mask_1/mask_105_1.dat | 1 - phpqrcode/cache/mask_1/mask_109_1.dat | 1 - phpqrcode/cache/mask_1/mask_113_1.dat | 1 - phpqrcode/cache/mask_1/mask_117_1.dat | 2 - phpqrcode/cache/mask_1/mask_121_1.dat | 2 - phpqrcode/cache/mask_1/mask_125_1.dat | 2 - phpqrcode/cache/mask_1/mask_129_1.dat | Bin 164 -> 0 bytes phpqrcode/cache/mask_1/mask_133_1.dat | 1 - phpqrcode/cache/mask_1/mask_137_1.dat | 3 - phpqrcode/cache/mask_1/mask_141_1.dat | 2 - phpqrcode/cache/mask_1/mask_145_1.dat | 1 - phpqrcode/cache/mask_1/mask_149_1.dat | 1 - phpqrcode/cache/mask_1/mask_153_1.dat | 2 - phpqrcode/cache/mask_1/mask_157_1.dat | 2 - phpqrcode/cache/mask_1/mask_161_1.dat | 1 - phpqrcode/cache/mask_1/mask_165_1.dat | 1 - phpqrcode/cache/mask_1/mask_169_1.dat | 1 - phpqrcode/cache/mask_1/mask_173_1.dat | 1 - phpqrcode/cache/mask_1/mask_177_1.dat | 1 - phpqrcode/cache/mask_1/mask_21_1.dat | Bin 42 -> 0 bytes phpqrcode/cache/mask_1/mask_25_1.dat | Bin 48 -> 0 bytes phpqrcode/cache/mask_1/mask_29_1.dat | Bin 50 -> 0 bytes phpqrcode/cache/mask_1/mask_33_1.dat | Bin 53 -> 0 bytes phpqrcode/cache/mask_1/mask_37_1.dat | Bin 56 -> 0 bytes phpqrcode/cache/mask_1/mask_41_1.dat | Bin 58 -> 0 bytes phpqrcode/cache/mask_1/mask_45_1.dat | Bin 82 -> 0 bytes phpqrcode/cache/mask_1/mask_49_1.dat | Bin 84 -> 0 bytes phpqrcode/cache/mask_1/mask_53_1.dat | Bin 87 -> 0 bytes phpqrcode/cache/mask_1/mask_57_1.dat | Bin 92 -> 0 bytes phpqrcode/cache/mask_1/mask_61_1.dat | 1 - phpqrcode/cache/mask_1/mask_65_1.dat | Bin 99 -> 0 bytes phpqrcode/cache/mask_1/mask_69_1.dat | Bin 102 -> 0 bytes phpqrcode/cache/mask_1/mask_73_1.dat | Bin 104 -> 0 bytes phpqrcode/cache/mask_1/mask_77_1.dat | Bin 110 -> 0 bytes phpqrcode/cache/mask_1/mask_81_1.dat | Bin 114 -> 0 bytes phpqrcode/cache/mask_1/mask_85_1.dat | 2 - phpqrcode/cache/mask_1/mask_89_1.dat | 1 - phpqrcode/cache/mask_1/mask_93_1.dat | 2 - phpqrcode/cache/mask_1/mask_97_1.dat | 2 - phpqrcode/cache/mask_2/mask_101_2.dat | 3 - phpqrcode/cache/mask_2/mask_105_2.dat | 1 - phpqrcode/cache/mask_2/mask_109_2.dat | 2 - phpqrcode/cache/mask_2/mask_113_2.dat | 1 - phpqrcode/cache/mask_2/mask_117_2.dat | 2 - phpqrcode/cache/mask_2/mask_121_2.dat | Bin 127 -> 0 bytes phpqrcode/cache/mask_2/mask_125_2.dat | 1 - phpqrcode/cache/mask_2/mask_129_2.dat | 2 - phpqrcode/cache/mask_2/mask_133_2.dat | 10 - phpqrcode/cache/mask_2/mask_137_2.dat | 2 - phpqrcode/cache/mask_2/mask_141_2.dat | 2 - phpqrcode/cache/mask_2/mask_145_2.dat | 4 - phpqrcode/cache/mask_2/mask_149_2.dat | 1 - phpqrcode/cache/mask_2/mask_153_2.dat | 2 - phpqrcode/cache/mask_2/mask_157_2.dat | 3 - phpqrcode/cache/mask_2/mask_161_2.dat | Bin 190 -> 0 bytes phpqrcode/cache/mask_2/mask_165_2.dat | 2 - phpqrcode/cache/mask_2/mask_169_2.dat | Bin 196 -> 0 bytes phpqrcode/cache/mask_2/mask_173_2.dat | 1 - phpqrcode/cache/mask_2/mask_177_2.dat | 2 - phpqrcode/cache/mask_2/mask_21_2.dat | Bin 35 -> 0 bytes phpqrcode/cache/mask_2/mask_25_2.dat | Bin 41 -> 0 bytes phpqrcode/cache/mask_2/mask_29_2.dat | Bin 45 -> 0 bytes phpqrcode/cache/mask_2/mask_33_2.dat | Bin 47 -> 0 bytes phpqrcode/cache/mask_2/mask_37_2.dat | Bin 47 -> 0 bytes phpqrcode/cache/mask_2/mask_41_2.dat | 1 - phpqrcode/cache/mask_2/mask_45_2.dat | Bin 68 -> 0 bytes phpqrcode/cache/mask_2/mask_49_2.dat | Bin 70 -> 0 bytes phpqrcode/cache/mask_2/mask_53_2.dat | Bin 73 -> 0 bytes phpqrcode/cache/mask_2/mask_57_2.dat | Bin 76 -> 0 bytes phpqrcode/cache/mask_2/mask_61_2.dat | Bin 78 -> 0 bytes phpqrcode/cache/mask_2/mask_65_2.dat | Bin 89 -> 0 bytes phpqrcode/cache/mask_2/mask_69_2.dat | Bin 88 -> 0 bytes phpqrcode/cache/mask_2/mask_73_2.dat | Bin 94 -> 0 bytes phpqrcode/cache/mask_2/mask_77_2.dat | 1 - phpqrcode/cache/mask_2/mask_81_2.dat | 2 - phpqrcode/cache/mask_2/mask_85_2.dat | 2 - phpqrcode/cache/mask_2/mask_89_2.dat | 1 - phpqrcode/cache/mask_2/mask_93_2.dat | Bin 103 -> 0 bytes phpqrcode/cache/mask_2/mask_97_2.dat | 2 - phpqrcode/cache/mask_3/mask_101_3.dat | 1 - phpqrcode/cache/mask_3/mask_105_3.dat | 1 - phpqrcode/cache/mask_3/mask_109_3.dat | 1 - phpqrcode/cache/mask_3/mask_113_3.dat | 2 - phpqrcode/cache/mask_3/mask_117_3.dat | 4 - phpqrcode/cache/mask_3/mask_121_3.dat | Bin 212 -> 0 bytes phpqrcode/cache/mask_3/mask_125_3.dat | 2 - phpqrcode/cache/mask_3/mask_129_3.dat | 8 - phpqrcode/cache/mask_3/mask_133_3.dat | Bin 216 -> 0 bytes phpqrcode/cache/mask_3/mask_137_3.dat | 2 - phpqrcode/cache/mask_3/mask_141_3.dat | 2 - phpqrcode/cache/mask_3/mask_145_3.dat | 3 - phpqrcode/cache/mask_3/mask_149_3.dat | 1 - phpqrcode/cache/mask_3/mask_153_3.dat | 2 - phpqrcode/cache/mask_3/mask_157_3.dat | Bin 248 -> 0 bytes phpqrcode/cache/mask_3/mask_161_3.dat | 3 - phpqrcode/cache/mask_3/mask_165_3.dat | 2 - phpqrcode/cache/mask_3/mask_169_3.dat | 1 - phpqrcode/cache/mask_3/mask_173_3.dat | 1 - phpqrcode/cache/mask_3/mask_177_3.dat | Bin 312 -> 0 bytes phpqrcode/cache/mask_3/mask_21_3.dat | Bin 60 -> 0 bytes phpqrcode/cache/mask_3/mask_25_3.dat | Bin 75 -> 0 bytes phpqrcode/cache/mask_3/mask_29_3.dat | Bin 75 -> 0 bytes phpqrcode/cache/mask_3/mask_33_3.dat | Bin 79 -> 0 bytes phpqrcode/cache/mask_3/mask_37_3.dat | Bin 83 -> 0 bytes phpqrcode/cache/mask_3/mask_41_3.dat | Bin 85 -> 0 bytes phpqrcode/cache/mask_3/mask_45_3.dat | 2 - phpqrcode/cache/mask_3/mask_49_3.dat | Bin 127 -> 0 bytes phpqrcode/cache/mask_3/mask_53_3.dat | 2 - phpqrcode/cache/mask_3/mask_57_3.dat | Bin 126 -> 0 bytes phpqrcode/cache/mask_3/mask_61_3.dat | 2 - phpqrcode/cache/mask_3/mask_65_3.dat | 2 - phpqrcode/cache/mask_3/mask_69_3.dat | 2 - phpqrcode/cache/mask_3/mask_73_3.dat | 2 - phpqrcode/cache/mask_3/mask_77_3.dat | 2 - phpqrcode/cache/mask_3/mask_81_3.dat | 2 - phpqrcode/cache/mask_3/mask_85_3.dat | Bin 160 -> 0 bytes phpqrcode/cache/mask_3/mask_89_3.dat | 2 - phpqrcode/cache/mask_3/mask_93_3.dat | 2 - phpqrcode/cache/mask_3/mask_97_3.dat | Bin 175 -> 0 bytes phpqrcode/cache/mask_4/mask_101_4.dat | 2 - phpqrcode/cache/mask_4/mask_105_4.dat | 2 - phpqrcode/cache/mask_4/mask_109_4.dat | Bin 182 -> 0 bytes phpqrcode/cache/mask_4/mask_113_4.dat | 2 - phpqrcode/cache/mask_4/mask_117_4.dat | 2 - phpqrcode/cache/mask_4/mask_121_4.dat | Bin 208 -> 0 bytes phpqrcode/cache/mask_4/mask_125_4.dat | Bin 213 -> 0 bytes phpqrcode/cache/mask_4/mask_129_4.dat | Bin 220 -> 0 bytes phpqrcode/cache/mask_4/mask_133_4.dat | 3 - phpqrcode/cache/mask_4/mask_137_4.dat | Bin 248 -> 0 bytes phpqrcode/cache/mask_4/mask_141_4.dat | Bin 254 -> 0 bytes phpqrcode/cache/mask_4/mask_145_4.dat | Bin 255 -> 0 bytes phpqrcode/cache/mask_4/mask_149_4.dat | 2 - phpqrcode/cache/mask_4/mask_153_4.dat | 2 - phpqrcode/cache/mask_4/mask_157_4.dat | 1 - phpqrcode/cache/mask_4/mask_161_4.dat | 1 - phpqrcode/cache/mask_4/mask_165_4.dat | 3 - phpqrcode/cache/mask_4/mask_169_4.dat | Bin 297 -> 0 bytes phpqrcode/cache/mask_4/mask_173_4.dat | 2 - phpqrcode/cache/mask_4/mask_177_4.dat | 2 - phpqrcode/cache/mask_4/mask_21_4.dat | Bin 57 -> 0 bytes phpqrcode/cache/mask_4/mask_25_4.dat | Bin 76 -> 0 bytes phpqrcode/cache/mask_4/mask_29_4.dat | Bin 78 -> 0 bytes phpqrcode/cache/mask_4/mask_33_4.dat | Bin 89 -> 0 bytes phpqrcode/cache/mask_4/mask_37_4.dat | Bin 86 -> 0 bytes phpqrcode/cache/mask_4/mask_41_4.dat | Bin 89 -> 0 bytes phpqrcode/cache/mask_4/mask_45_4.dat | Bin 120 -> 0 bytes phpqrcode/cache/mask_4/mask_49_4.dat | Bin 124 -> 0 bytes phpqrcode/cache/mask_4/mask_53_4.dat | Bin 128 -> 0 bytes phpqrcode/cache/mask_4/mask_57_4.dat | Bin 130 -> 0 bytes phpqrcode/cache/mask_4/mask_61_4.dat | Bin 132 -> 0 bytes phpqrcode/cache/mask_4/mask_65_4.dat | 2 - phpqrcode/cache/mask_4/mask_69_4.dat | 1 - phpqrcode/cache/mask_4/mask_73_4.dat | 3 - phpqrcode/cache/mask_4/mask_77_4.dat | 2 - phpqrcode/cache/mask_4/mask_81_4.dat | 3 - phpqrcode/cache/mask_4/mask_85_4.dat | Bin 154 -> 0 bytes phpqrcode/cache/mask_4/mask_89_4.dat | 2 - phpqrcode/cache/mask_4/mask_93_4.dat | 2 - phpqrcode/cache/mask_4/mask_97_4.dat | Bin 176 -> 0 bytes phpqrcode/cache/mask_5/mask_101_5.dat | 2 - phpqrcode/cache/mask_5/mask_105_5.dat | Bin 224 -> 0 bytes phpqrcode/cache/mask_5/mask_109_5.dat | Bin 211 -> 0 bytes phpqrcode/cache/mask_5/mask_113_5.dat | 9 - phpqrcode/cache/mask_5/mask_117_5.dat | 1 - phpqrcode/cache/mask_5/mask_121_5.dat | Bin 256 -> 0 bytes phpqrcode/cache/mask_5/mask_125_5.dat | 2 - phpqrcode/cache/mask_5/mask_129_5.dat | Bin 259 -> 0 bytes phpqrcode/cache/mask_5/mask_133_5.dat | 2 - phpqrcode/cache/mask_5/mask_137_5.dat | 3 - phpqrcode/cache/mask_5/mask_141_5.dat | Bin 297 -> 0 bytes phpqrcode/cache/mask_5/mask_145_5.dat | Bin 300 -> 0 bytes phpqrcode/cache/mask_5/mask_149_5.dat | 3 - phpqrcode/cache/mask_5/mask_153_5.dat | 2 - phpqrcode/cache/mask_5/mask_157_5.dat | 1 - phpqrcode/cache/mask_5/mask_161_5.dat | 2 - phpqrcode/cache/mask_5/mask_165_5.dat | Bin 332 -> 0 bytes phpqrcode/cache/mask_5/mask_169_5.dat | 1 - phpqrcode/cache/mask_5/mask_173_5.dat | 4 - phpqrcode/cache/mask_5/mask_177_5.dat | 11 - phpqrcode/cache/mask_5/mask_21_5.dat | Bin 74 -> 0 bytes phpqrcode/cache/mask_5/mask_25_5.dat | 2 - phpqrcode/cache/mask_5/mask_29_5.dat | 2 - phpqrcode/cache/mask_5/mask_33_5.dat | Bin 106 -> 0 bytes phpqrcode/cache/mask_5/mask_37_5.dat | Bin 103 -> 0 bytes phpqrcode/cache/mask_5/mask_41_5.dat | 2 - phpqrcode/cache/mask_5/mask_45_5.dat | 1 - phpqrcode/cache/mask_5/mask_49_5.dat | Bin 146 -> 0 bytes phpqrcode/cache/mask_5/mask_53_5.dat | 1 - phpqrcode/cache/mask_5/mask_57_5.dat | 2 - phpqrcode/cache/mask_5/mask_61_5.dat | 1 - phpqrcode/cache/mask_5/mask_65_5.dat | Bin 163 -> 0 bytes phpqrcode/cache/mask_5/mask_69_5.dat | Bin 167 -> 0 bytes phpqrcode/cache/mask_5/mask_73_5.dat | Bin 184 -> 0 bytes phpqrcode/cache/mask_5/mask_77_5.dat | 1 - phpqrcode/cache/mask_5/mask_81_5.dat | 3 - phpqrcode/cache/mask_5/mask_85_5.dat | Bin 186 -> 0 bytes phpqrcode/cache/mask_5/mask_89_5.dat | 2 - phpqrcode/cache/mask_5/mask_93_5.dat | 2 - phpqrcode/cache/mask_5/mask_97_5.dat | 1 - phpqrcode/cache/mask_6/mask_101_6.dat | 2 - phpqrcode/cache/mask_6/mask_105_6.dat | 3 - phpqrcode/cache/mask_6/mask_109_6.dat | 1 - phpqrcode/cache/mask_6/mask_113_6.dat | 3 - phpqrcode/cache/mask_6/mask_117_6.dat | 1 - phpqrcode/cache/mask_6/mask_121_6.dat | Bin 309 -> 0 bytes phpqrcode/cache/mask_6/mask_125_6.dat | 1 - phpqrcode/cache/mask_6/mask_129_6.dat | Bin 310 -> 0 bytes phpqrcode/cache/mask_6/mask_133_6.dat | Bin 296 -> 0 bytes phpqrcode/cache/mask_6/mask_137_6.dat | 2 - phpqrcode/cache/mask_6/mask_141_6.dat | 10 - phpqrcode/cache/mask_6/mask_145_6.dat | Bin 357 -> 0 bytes phpqrcode/cache/mask_6/mask_149_6.dat | 2 - phpqrcode/cache/mask_6/mask_153_6.dat | Bin 367 -> 0 bytes phpqrcode/cache/mask_6/mask_157_6.dat | 1 - phpqrcode/cache/mask_6/mask_161_6.dat | Bin 399 -> 0 bytes phpqrcode/cache/mask_6/mask_165_6.dat | Bin 400 -> 0 bytes phpqrcode/cache/mask_6/mask_169_6.dat | 1 - phpqrcode/cache/mask_6/mask_173_6.dat | 1 - phpqrcode/cache/mask_6/mask_177_6.dat | 14 - phpqrcode/cache/mask_6/mask_21_6.dat | 1 - phpqrcode/cache/mask_6/mask_25_6.dat | 1 - phpqrcode/cache/mask_6/mask_29_6.dat | 3 - phpqrcode/cache/mask_6/mask_33_6.dat | Bin 124 -> 0 bytes phpqrcode/cache/mask_6/mask_37_6.dat | 1 - phpqrcode/cache/mask_6/mask_41_6.dat | Bin 132 -> 0 bytes phpqrcode/cache/mask_6/mask_45_6.dat | Bin 189 -> 0 bytes phpqrcode/cache/mask_6/mask_49_6.dat | 2 - phpqrcode/cache/mask_6/mask_53_6.dat | Bin 195 -> 0 bytes phpqrcode/cache/mask_6/mask_57_6.dat | 2 - phpqrcode/cache/mask_6/mask_61_6.dat | 2 - phpqrcode/cache/mask_6/mask_65_6.dat | 1 - phpqrcode/cache/mask_6/mask_69_6.dat | 1 - phpqrcode/cache/mask_6/mask_73_6.dat | Bin 230 -> 0 bytes phpqrcode/cache/mask_6/mask_77_6.dat | 1 - phpqrcode/cache/mask_6/mask_81_6.dat | 3 - phpqrcode/cache/mask_6/mask_85_6.dat | Bin 229 -> 0 bytes phpqrcode/cache/mask_6/mask_89_6.dat | Bin 263 -> 0 bytes phpqrcode/cache/mask_6/mask_93_6.dat | Bin 276 -> 0 bytes phpqrcode/cache/mask_6/mask_97_6.dat | 2 - phpqrcode/cache/mask_7/mask_101_7.dat | 1 - phpqrcode/cache/mask_7/mask_105_7.dat | 2 - phpqrcode/cache/mask_7/mask_109_7.dat | 2 - phpqrcode/cache/mask_7/mask_113_7.dat | 11 - phpqrcode/cache/mask_7/mask_117_7.dat | 2 - phpqrcode/cache/mask_7/mask_121_7.dat | 2 - phpqrcode/cache/mask_7/mask_125_7.dat | Bin 288 -> 0 bytes phpqrcode/cache/mask_7/mask_129_7.dat | Bin 282 -> 0 bytes phpqrcode/cache/mask_7/mask_133_7.dat | Bin 281 -> 0 bytes phpqrcode/cache/mask_7/mask_137_7.dat | 5 - phpqrcode/cache/mask_7/mask_141_7.dat | 1 - phpqrcode/cache/mask_7/mask_145_7.dat | 2 - phpqrcode/cache/mask_7/mask_149_7.dat | 1 - phpqrcode/cache/mask_7/mask_153_7.dat | 2 - phpqrcode/cache/mask_7/mask_157_7.dat | 2 - phpqrcode/cache/mask_7/mask_161_7.dat | 1 - phpqrcode/cache/mask_7/mask_165_7.dat | 1 - phpqrcode/cache/mask_7/mask_169_7.dat | Bin 383 -> 0 bytes phpqrcode/cache/mask_7/mask_173_7.dat | 1 - phpqrcode/cache/mask_7/mask_177_7.dat | Bin 407 -> 0 bytes phpqrcode/cache/mask_7/mask_21_7.dat | 4 - phpqrcode/cache/mask_7/mask_25_7.dat | 1 - phpqrcode/cache/mask_7/mask_29_7.dat | 2 - phpqrcode/cache/mask_7/mask_33_7.dat | 1 - phpqrcode/cache/mask_7/mask_37_7.dat | Bin 122 -> 0 bytes phpqrcode/cache/mask_7/mask_41_7.dat | 1 - phpqrcode/cache/mask_7/mask_45_7.dat | Bin 173 -> 0 bytes phpqrcode/cache/mask_7/mask_49_7.dat | 1 - phpqrcode/cache/mask_7/mask_53_7.dat | 1 - phpqrcode/cache/mask_7/mask_57_7.dat | 1 - phpqrcode/cache/mask_7/mask_61_7.dat | 2 - phpqrcode/cache/mask_7/mask_65_7.dat | 1 - phpqrcode/cache/mask_7/mask_69_7.dat | Bin 202 -> 0 bytes phpqrcode/cache/mask_7/mask_73_7.dat | Bin 221 -> 0 bytes phpqrcode/cache/mask_7/mask_77_7.dat | Bin 226 -> 0 bytes phpqrcode/cache/mask_7/mask_81_7.dat | 1 - phpqrcode/cache/mask_7/mask_85_7.dat | Bin 213 -> 0 bytes phpqrcode/cache/mask_7/mask_89_7.dat | Bin 244 -> 0 bytes phpqrcode/cache/mask_7/mask_93_7.dat | Bin 248 -> 0 bytes phpqrcode/cache/mask_7/mask_97_7.dat | 2 - phpqrcode/phpqrcode.php | 3625 ------------------------- phpqrcode/qrbitstream.php | 180 -- phpqrcode/qrconfig.php | 17 - phpqrcode/qrconst.php | 54 - phpqrcode/qrencode.php | 569 ---- phpqrcode/qrimage.php | 107 - phpqrcode/qrinput.php | 726 ----- phpqrcode/qrlib.php | 44 - phpqrcode/qrmask.php | 328 --- phpqrcode/qrrscode.php | 210 -- phpqrcode/qrspec.php | 592 ---- phpqrcode/qrsplit.php | 311 --- phpqrcode/qrtools.php | 185 -- phpqrcode/qrvect.php | 214 -- phpqrcode/temp/tempfolder | 0 phpqrcode/tools/merge.bat | 2 - phpqrcode/tools/merge.php | 71 - phpqrcode/tools/merge.sh | 2 - phpqrcode/tools/merged_config.php | 17 - phpqrcode/tools/merged_header.php | 37 - ubuntu-dl.ttf | Bin 353824 -> 0 bytes 452 files changed, 11034 deletions(-) delete mode 100755 README.md.backup delete mode 100755 favicons/defaut-128.png delete mode 100755 favicons/defaut-16.png delete mode 100755 favicons/defaut-192.png delete mode 100755 favicons/defaut-256.png delete mode 100755 favicons/defaut-32.png delete mode 100755 favicons/defaut-384.png delete mode 100755 favicons/defaut-48.png delete mode 100755 favicons/defaut-512.png delete mode 100755 favicons/defaut-64.png delete mode 100755 favicons/defaut-96.png delete mode 100755 favicons/parinux-128.png delete mode 100755 favicons/parinux-16.png delete mode 100755 favicons/parinux-192.png delete mode 100755 favicons/parinux-256.png delete mode 100755 favicons/parinux-32.png delete mode 100755 favicons/parinux-384.png delete mode 100755 favicons/parinux-48.png delete mode 100755 favicons/parinux-512.png delete mode 100755 favicons/parinux-64.png delete mode 100755 favicons/parinux-96.png delete mode 100644 locale/fr_FR/LC_MESSAGES/messages.mo delete mode 100644 locale/fr_FR/LC_MESSAGES/messages.po delete mode 100755 parinux.png delete mode 100755 phpqrcode/.gitignore delete mode 100755 phpqrcode/CHANGELOG delete mode 100755 phpqrcode/INSTALL delete mode 100755 phpqrcode/LICENSE delete mode 100755 phpqrcode/README delete mode 100755 phpqrcode/VERSION delete mode 100755 phpqrcode/bindings/tcpdf/qrcode.php delete mode 100755 phpqrcode/cache/frame_1.dat delete mode 100755 phpqrcode/cache/frame_1.png delete mode 100755 phpqrcode/cache/frame_10.dat delete mode 100755 phpqrcode/cache/frame_10.png delete mode 100755 phpqrcode/cache/frame_11.dat delete mode 100755 phpqrcode/cache/frame_11.png delete mode 100755 phpqrcode/cache/frame_12.dat delete mode 100755 phpqrcode/cache/frame_12.png delete mode 100755 phpqrcode/cache/frame_13.dat delete mode 100755 phpqrcode/cache/frame_13.png delete mode 100755 phpqrcode/cache/frame_14.dat delete mode 100755 phpqrcode/cache/frame_14.png delete mode 100755 phpqrcode/cache/frame_15.dat delete mode 100755 phpqrcode/cache/frame_15.png delete mode 100755 phpqrcode/cache/frame_16.dat delete mode 100755 phpqrcode/cache/frame_16.png delete mode 100755 phpqrcode/cache/frame_17.dat delete mode 100755 phpqrcode/cache/frame_17.png delete mode 100755 phpqrcode/cache/frame_18.dat delete mode 100755 phpqrcode/cache/frame_18.png delete mode 100755 phpqrcode/cache/frame_19.dat delete mode 100755 phpqrcode/cache/frame_19.png delete mode 100755 phpqrcode/cache/frame_2.dat delete mode 100755 phpqrcode/cache/frame_2.png delete mode 100755 phpqrcode/cache/frame_20.dat delete mode 100755 phpqrcode/cache/frame_20.png delete mode 100755 phpqrcode/cache/frame_21.dat delete mode 100755 phpqrcode/cache/frame_21.png delete mode 100755 phpqrcode/cache/frame_22.dat delete mode 100755 phpqrcode/cache/frame_22.png delete mode 100755 phpqrcode/cache/frame_23.dat delete mode 100755 phpqrcode/cache/frame_23.png delete mode 100755 phpqrcode/cache/frame_24.dat delete mode 100755 phpqrcode/cache/frame_24.png delete mode 100755 phpqrcode/cache/frame_25.dat delete mode 100755 phpqrcode/cache/frame_25.png delete mode 100755 phpqrcode/cache/frame_26.dat delete mode 100755 phpqrcode/cache/frame_26.png delete mode 100755 phpqrcode/cache/frame_27.dat delete mode 100755 phpqrcode/cache/frame_27.png delete mode 100755 phpqrcode/cache/frame_28.dat delete mode 100755 phpqrcode/cache/frame_28.png delete mode 100755 phpqrcode/cache/frame_29.dat delete mode 100755 phpqrcode/cache/frame_29.png delete mode 100755 phpqrcode/cache/frame_3.dat delete mode 100755 phpqrcode/cache/frame_3.png delete mode 100755 phpqrcode/cache/frame_30.dat delete mode 100755 phpqrcode/cache/frame_30.png delete mode 100755 phpqrcode/cache/frame_31.dat delete mode 100755 phpqrcode/cache/frame_31.png delete mode 100755 phpqrcode/cache/frame_32.dat delete mode 100755 phpqrcode/cache/frame_32.png delete mode 100755 phpqrcode/cache/frame_33.dat delete mode 100755 phpqrcode/cache/frame_33.png delete mode 100755 phpqrcode/cache/frame_34.dat delete mode 100755 phpqrcode/cache/frame_34.png delete mode 100755 phpqrcode/cache/frame_35.dat delete mode 100755 phpqrcode/cache/frame_35.png delete mode 100755 phpqrcode/cache/frame_36.dat delete mode 100755 phpqrcode/cache/frame_36.png delete mode 100755 phpqrcode/cache/frame_37.dat delete mode 100755 phpqrcode/cache/frame_37.png delete mode 100755 phpqrcode/cache/frame_38.dat delete mode 100755 phpqrcode/cache/frame_38.png delete mode 100755 phpqrcode/cache/frame_39.dat delete mode 100755 phpqrcode/cache/frame_39.png delete mode 100755 phpqrcode/cache/frame_4.dat delete mode 100755 phpqrcode/cache/frame_4.png delete mode 100755 phpqrcode/cache/frame_40.dat delete mode 100755 phpqrcode/cache/frame_40.png delete mode 100755 phpqrcode/cache/frame_5.dat delete mode 100755 phpqrcode/cache/frame_5.png delete mode 100755 phpqrcode/cache/frame_6.dat delete mode 100755 phpqrcode/cache/frame_6.png delete mode 100755 phpqrcode/cache/frame_7.dat delete mode 100755 phpqrcode/cache/frame_7.png delete mode 100755 phpqrcode/cache/frame_8.dat delete mode 100755 phpqrcode/cache/frame_8.png delete mode 100755 phpqrcode/cache/frame_9.dat delete mode 100755 phpqrcode/cache/frame_9.png delete mode 100755 phpqrcode/cache/mask_0/mask_101_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_105_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_109_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_113_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_117_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_121_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_125_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_129_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_133_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_137_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_141_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_145_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_149_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_153_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_157_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_161_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_165_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_169_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_173_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_177_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_21_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_25_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_29_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_33_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_37_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_41_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_45_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_49_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_53_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_57_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_61_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_65_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_69_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_73_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_77_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_81_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_85_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_89_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_93_0.dat delete mode 100755 phpqrcode/cache/mask_0/mask_97_0.dat delete mode 100755 phpqrcode/cache/mask_1/mask_101_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_105_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_109_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_113_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_117_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_121_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_125_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_129_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_133_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_137_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_141_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_145_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_149_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_153_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_157_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_161_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_165_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_169_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_173_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_177_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_21_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_25_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_29_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_33_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_37_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_41_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_45_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_49_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_53_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_57_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_61_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_65_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_69_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_73_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_77_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_81_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_85_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_89_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_93_1.dat delete mode 100755 phpqrcode/cache/mask_1/mask_97_1.dat delete mode 100755 phpqrcode/cache/mask_2/mask_101_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_105_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_109_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_113_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_117_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_121_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_125_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_129_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_133_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_137_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_141_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_145_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_149_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_153_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_157_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_161_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_165_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_169_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_173_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_177_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_21_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_25_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_29_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_33_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_37_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_41_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_45_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_49_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_53_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_57_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_61_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_65_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_69_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_73_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_77_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_81_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_85_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_89_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_93_2.dat delete mode 100755 phpqrcode/cache/mask_2/mask_97_2.dat delete mode 100755 phpqrcode/cache/mask_3/mask_101_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_105_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_109_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_113_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_117_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_121_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_125_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_129_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_133_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_137_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_141_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_145_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_149_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_153_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_157_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_161_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_165_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_169_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_173_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_177_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_21_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_25_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_29_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_33_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_37_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_41_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_45_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_49_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_53_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_57_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_61_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_65_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_69_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_73_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_77_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_81_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_85_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_89_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_93_3.dat delete mode 100755 phpqrcode/cache/mask_3/mask_97_3.dat delete mode 100755 phpqrcode/cache/mask_4/mask_101_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_105_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_109_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_113_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_117_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_121_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_125_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_129_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_133_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_137_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_141_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_145_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_149_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_153_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_157_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_161_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_165_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_169_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_173_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_177_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_21_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_25_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_29_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_33_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_37_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_41_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_45_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_49_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_53_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_57_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_61_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_65_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_69_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_73_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_77_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_81_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_85_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_89_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_93_4.dat delete mode 100755 phpqrcode/cache/mask_4/mask_97_4.dat delete mode 100755 phpqrcode/cache/mask_5/mask_101_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_105_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_109_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_113_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_117_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_121_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_125_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_129_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_133_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_137_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_141_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_145_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_149_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_153_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_157_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_161_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_165_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_169_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_173_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_177_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_21_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_25_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_29_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_33_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_37_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_41_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_45_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_49_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_53_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_57_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_61_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_65_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_69_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_73_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_77_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_81_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_85_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_89_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_93_5.dat delete mode 100755 phpqrcode/cache/mask_5/mask_97_5.dat delete mode 100755 phpqrcode/cache/mask_6/mask_101_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_105_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_109_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_113_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_117_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_121_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_125_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_129_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_133_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_137_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_141_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_145_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_149_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_153_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_157_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_161_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_165_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_169_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_173_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_177_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_21_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_25_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_29_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_33_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_37_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_41_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_45_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_49_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_53_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_57_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_61_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_65_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_69_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_73_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_77_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_81_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_85_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_89_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_93_6.dat delete mode 100755 phpqrcode/cache/mask_6/mask_97_6.dat delete mode 100755 phpqrcode/cache/mask_7/mask_101_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_105_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_109_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_113_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_117_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_121_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_125_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_129_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_133_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_137_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_141_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_145_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_149_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_153_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_157_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_161_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_165_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_169_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_173_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_177_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_21_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_25_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_29_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_33_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_37_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_41_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_45_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_49_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_53_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_57_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_61_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_65_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_69_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_73_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_77_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_81_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_85_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_89_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_93_7.dat delete mode 100755 phpqrcode/cache/mask_7/mask_97_7.dat delete mode 100755 phpqrcode/phpqrcode.php delete mode 100755 phpqrcode/qrbitstream.php delete mode 100755 phpqrcode/qrconfig.php delete mode 100755 phpqrcode/qrconst.php delete mode 100755 phpqrcode/qrencode.php delete mode 100755 phpqrcode/qrimage.php delete mode 100755 phpqrcode/qrinput.php delete mode 100755 phpqrcode/qrlib.php delete mode 100755 phpqrcode/qrmask.php delete mode 100755 phpqrcode/qrrscode.php delete mode 100755 phpqrcode/qrspec.php delete mode 100755 phpqrcode/qrsplit.php delete mode 100755 phpqrcode/qrtools.php delete mode 100755 phpqrcode/qrvect.php delete mode 100755 phpqrcode/temp/tempfolder delete mode 100755 phpqrcode/tools/merge.bat delete mode 100755 phpqrcode/tools/merge.php delete mode 100755 phpqrcode/tools/merge.sh delete mode 100755 phpqrcode/tools/merged_config.php delete mode 100755 phpqrcode/tools/merged_header.php delete mode 100755 ubuntu-dl.ttf diff --git a/README.md.backup b/README.md.backup deleted file mode 100755 index 3329095..0000000 --- a/README.md.backup +++ /dev/null @@ -1,49 +0,0 @@ -# ![Logo](favicons/defaut-32.png) Générateur de codes QR - -## Présentation - -Une interface Web pour générer des codes QR en PHP. - -## Démo - -Une instance de ce service est disponible à l'adresse [https://qr.antopie.org](https://qr.antopie.org). - -## Installation - -Je développe directement dans master, donc en production téléchargez plutôt une version stable dans [l'onglet Versions](https://code.antopie.org/miraty/qr/releases) ou avec le tag. - -Placez ce code source dans un serveur Web avec PHP, tout simplement. - -## Thèmes - -### Changer de thème - -Dans options.inc.php, donnez à $theme le nom du thème voulu. - -Par défaut, deux thèmes sont proposés : -* defaut, le thème par défaut, sombre. Il est utilisé ici : -* parinux, un thème bleu, créé pour [Bastet](https://bastet.parinux.org/), le chaton de [Parinux](https://parinux.org/). Il est utilisé ici : - -### Créer un thème - -* Copiez themes/defaut vers themes/[nom de votre thème] -* Depuis ce nouveau dossier, créez les icônes dans favicons/[longueur du côté de l'icone].png -* Complétez theme.php en fonctions des favicons créees précédemment et des couleurs CSS voulues dans l'interface - -## Bibliothèques tierces - -Ce code source inclus : - -* [phpqrcode](https://github.com/t0k4rt/phpqrcode) pour générer les codes QR -* [La police Ubuntu packagée pour le Web](https://github.com/earaujoassis/ubuntu-fontface) -* [lessphp](http://leafo.net/lessphp) pour compiler le [Less](http://lesscss.org/) - -## Licence - -[AGPLv3+](https://code.antopie.org/miraty/qr/src/branch/master/LICENSE) - -Ce générateur de codes QR est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. - -Ce générateur de codes QR est diffusé dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d’ADÉQUATION À UN USAGE PARTICULIER. Voyez la GNU Affero General Public License pour plus de détails. - -Vous devriez avoir reçu une copie de la GNU Affero General Public License avec ce code. Sinon, consultez diff --git a/favicons/defaut-128.png b/favicons/defaut-128.png deleted file mode 100755 index d2fcc044f943815bf57c0af73939aa16768e4096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1538 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 diff --git a/favicons/defaut-256.png b/favicons/defaut-256.png deleted file mode 100755 index cb413d8575d612434e7b8f9bcfb9cc378b6d294e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1951 zcma)6dpOg382_2M`E~Q4%l1s5RvNDXOh%%cqJ^j&nPPga#e4p?8yzleApZEKDFL_>`&dLhf3IG5o zySg}f1Avr7lmg^sB~K8xG7pQiZJYyc5>~N7sp0#n{qq3|P70=&x#A;tg zb991C?-*!hN7u&i2kYM+3$i7eVKY|C(47+MG;oA{T3FF;`S^$D_uAyplnp!`3QNfL zti2GWu_kNffWcR`Sw3YMgVVJZf<56)0})5xi&-+@3iwojUVuqpcGMKbKOIxtU0Y}o zU*xfP=JsI*wW4~2aR2eEEp@lbVO$<~8B(z&3R%F;eZtWf2Yh^;(`{HPswoVnP-_me zf>U*i-u-Iz{`o`A{TuF1OnJ>lOVu4%x6?g(O`tJskA1SeQG1?DPyAFpcI*LvTv4Nb zJiG)SLdsoFi_SLKBK;Tt^ab$9wQ&7tb+2mGN4*-l{HxTEm$@ZIVOJ6PN#u{5ahDGs zN3{>#Ae&a_G5y=jCTx_ge!C-XHwIo>hF#ZhuIMpM=vrMRW50fX!E=n|qsRlh#hoU< zTL*Uea64kJw3T~G%dZ*OV|@<-&X1x@4T6hW^R0Kzbj}1-70ZDA{op>*Ix)x*$B7t+ zO*5rN@C%wm2;Pey2WYFSVryz7}`$&Ud|4V66%)v#UWn_MA8gomAsoB5T$Eg;Mhg3-WVJ!vmD-W%A{tAWO=RGn`?!A z)|c+hZ+}s$fvdD%clRE6fti;Y2{SCPw@m@LL{D_>3g?lE`CYrz)N>Rnsj1c_zniP3 z7@e}j(S&+wou~WQqlQthDl3Gjj@`~youbZZ{Jw6kBURe#)?HnnFde&Cj{)N~Vs(b+ z+h@#D7BZ9a;i;TKxMoR=X8Y`EGWAsdCZRePga9cFkeKY6SOneavYW-HQSEc2@|H9xmk5b z2bQT>4F$8j`Eiurw5z%uiiS62sfR?) z(<^u#!?XHAhZbFAW*MSoJv*g(4*l#3(|xXi+^C>&a;C+Hk|&m71-zIx%ZIp023q!j zyR##(ymBtl$;A@QszjH7WB@SLU%680S5T=ErCf@uhm#x^1X&AOUF!c(TCxKUxH{VV zrVmZC8{^s$s!ly6<*DF}ldXxPCkUE1J>oHh^b?Fh8!|pPGgomdtY$s$FbZG9u?49D z+gH{J82Gw?_nYpAe)uSUr>@9B*;OouW@h#Ct#C9hLkTdJ`i`T-bgqVM2BSlp;dCOB zP8|L)fy8wIt!m#u`Wy=raCAYZv>B?qg7E*G{*&j(#u}6gW)UZz6p>rd2}`9?00@u= zU;rNYhA`v1WQ(5=_B3V@?J{-S=H7%XpxJN^c!xFGw zG^$WiVw}bIiIa4XSoKpgOkID&(<3pMbF=b4(`~GzkU9ns`GaIYfbnaMzT-KJrK)YU Qk^ux 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 diff --git a/favicons/defaut-512.png b/favicons/defaut-512.png deleted file mode 100755 index bf6abd0a48c04e0f240a7cd420e0941b4cce6ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3124 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 AbpQYW diff --git a/favicons/parinux-128.png b/favicons/parinux-128.png deleted file mode 100755 index 014b9b870c44c83f4e9c7c564d3dc12e15a61a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmZ8g2{hDO82`^0OO~N0*^((~Qr5`Q%UB|09h@*?MnzME#@G#0DPhDT!@(d+ma-%~ zhLOIH&jSJ>UJ#`Q7h#zu)gW=O#KiSV@Q~hynm0VPkFK z%+JK_5E0^^od} zXm!=qnZZf1-pv@*vVNjz2{SZWoG_@BHX3QpYKdtkyF6{7)GLk%$BKVrsW%O?`vR?f zGgh|jA`9Gpyuz(6me)Z?>m|P2LFk|Psqkt>R-Dxw&b4^ zM^~Z*2Bn8nTe>MHS}xYOm}!0&{c_Z*C2xLhtV*6rx=+uq5sJd~dUFpeI^)mMecCK4ort}$udylnA%O#PcOoK1*`72nG z2en6&g1g&vWk9bZdum#%9*BRF@8Y@AqE9VX3`!JvfSFdgI)qN&c;BV{pUeq`w zf2{G8VdFU944J%#aW`uhe5fZJhCFgoC3R1X=wVrQ9TCX2xvYRGRsi7LtQ4c)+`M## zy9`l4haMK95CCicYr@H-7yi*n=ai%0esxq`fGT$BrMZYsk8Y(!3IZjr^Lk&1x=n^7 z**reQ%5N%I95cDwZXhFJEtU$?f`4 zDNFwdd$9ZlLT7Xx)s>Q_!w$kh`|9odG@q@V?6&vQ6w|-Er~H|{VG3MFibZ)PR4_#8 zR>G;Q1l`QAn!*-w#Bh4O^HU4WT=S|-c1qES!e+6n4ixBt0AuUp>m+xp3vL7OwLr%L zhgRJZCDUoHb8_RB9XcAD8>K7wBO|-IXRMsYh=0&}z$mh@o{K7z(ZvdT&-L3S;vnG=^+hK|vs-ys9=tupB3=_j;Rrd%YFdsAqZ%U}%m zAx3;sC+g9zzYromPab+imm9AkwoTUN>JyqC{>or2_|G7xSQ`aT=JMO3b14nX2EtZr z*`heJU3uD$C(x{(MWL!lVJbyLlE%PXC+HywDJ10K*{f;k9s}C> zr&hdU!ZCCG)nRm#{@Kk4W$YYtp9lbg0T3b}1yFiyO_r$WdkEsny!r@9fnVlA|7F96z=gn36G_VUnZZr;o99B9$ZqzFcIXOIxn6SIqA?IOEP0gyIHa)F$9 Uu*ovU8{jV+O9zW;bIk3(0Z^2k2mk;8 diff --git a/favicons/parinux-16.png b/favicons/parinux-16.png deleted file mode 100755 index dc32f1ea8bdaded9906a388c2c380c7a62f66a45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmV;;1Ty=HP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3x9)x#(ZMgOacDFI2Wf7GVR1^=wx{s)Ztk$n0j#oxY?w$)|pktt7eQKzM>BPb%BR@Z4BE#T|SFg;pA zi&$a-u?m_CS|Ls>$aZJTl{0s4YhSn^L@P}KdXXZ!%Ay8IQdTH-H0~0Br;mvqH}qOJ>^|9O^WH6v4McFsvY8JgZ~RCWr)P zDQ7s% zFr6_wLnG%!7G3P(7QcigE@{aH%NB`d+Pa2ZBo6Z#yfJy)Ob=G#O$gUF4Q0n;belxapDFu5EIKF9tHsv zvjSb9>hSRQuUO%P3Sk{*8FC*ALrC({ii0FyYgYu-$ z`8?L5_U>kSkth0oQ@pXXZ+iN*7~kA$FX-);_GV@dBc=8yhltrK`)LKeI2WHCBOgq= zkCi@S^V}$X63bC+bi5Vci{_`j_UssWQ~h}c>GR{`)zZG&Vb9*QKU5NZdEnn6q3;;o zuYi8vu$wl0xs*HO^yzEoS>*KnpR3!RetVl;wCKHk{<^2%3~0w6=0yJkSFD$b(i9YC z00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru;{p~F z4K5_E_5=U`0H#SqK~y-)rBlHT#2^d{6)Uh$$GIm9^wlBgI9=iy-0n~ zIKhccNV&NE5z)--+&^7n-43g{bvuTb$OYK27SAvXc2u`;FeWP6c;*7eSjxq}KbK$4 zjW8(}4^LFUMe=eR749fwllp&Ak|BVV;AJ)=Ad}hlF&|PcK9UbvD5i~!$|Pz8zHDkF rbfjX@H5l1e6?RUXJt#GfRN+lrM$f5XpRGtE00000NkvXXu0mjf^))*? diff --git a/favicons/parinux-192.png b/favicons/parinux-192.png deleted file mode 100755 index 8abffa4e68cfc0bc91eba7c4e796388a12c0ff6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 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 uhBe9h3L@h7Gp5BG+t+_N87P1wFDr@; zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vZmcu9vMgO&mUILOBmxCG3=^ga)`+=#96=y1w z1X~D6=n5Qa|NYzPA6%kF$hr`H^4{RG$tKCTiDtj{o{gQq^O7}$=PNm#1_UBSulu8K zOFu*I&J%)N^6gqqp)5Ob8CnBB26cEI-j-fmhE#SruV+eYUbYv@S>Ik{4!dn1x_!0* z$*2zYR7jdKa@8~rFNz2>Y1VO{@fF#n8FD)%{Cn=`bbFJ$)7?$(OkQ%mP6Zji6#Pw& zmYm)1xtkffjEK*kuLfE)!CYRKx$8Cd-uBgH>yar>Yf(Q-nRie`I<3xW9xdSO%rHG# zLW@{p0kI028(JYwEXa0e%at>CZnH035TcbP0li2;mWM2AkR)Y7v7>R906dj6fA;geEjv8%r(Z>*DOfe@(iX+S=p8}T94HYpS_%Ln$@eT=Olo z*iy?Kwbr%U?z-=x$DVpVQCn26sqqcDV`{vp4Pticg)=pXL-;Yl<2Z4H8HkBx5D$X@ z3R(s;6WLlB`d}4PdcgT&LeT$nsB1Z$=Uy!4LZjrm^ z_6xO|=Nm;Qps@=_PK|aPY|Tr|`1DYEQj_PCdAFxeC*B#-1|Z{pD_LuMrmxM{UA;O5 z{F9ij%-pEG9d|zjeYli6y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jc=3 z6Al%=h)m-E006{EL_t(o!`+v=4S+BZLjkb@`!EhA3s7YU7>CWENsLE6wy%i%umi_fq6@gaaBM1<1F@A}D30Diz42KhYCjQR1? z06W9ttM)XSw|NXq5_xU{k_w&5Z^LxL~8}-X}8yTsEQUCxM z+bvd(0EiH0ri8fAlU{wh8~{iLVJG^Co81dO15!lUSVS>NK&)reMEABTRawRut$)mCB&n7}OXMW;l`%*94(GJB4=oJ# zee*6)HvT$j%Lpqp;BR9-?G4(b?422UU#7`zsT#8oeHOhgksK{bja}8IZi=dFz4e5# z@0OhDI>)3aseubfl-*8kB{T7(j`y6x)6TE3j<(;Hfc6`=Z^Bj{N?w_$eMR-&=0SXg zZll^?RM>YEtL1u&;WE~<#Pj!{6vGW_60usMuaJ8~@p1hyPZv9lJCCGw})*Q-ee^&>xyt(`hiH=r%C`r*{ zwD6!3O;?icYJ!oD@XOVXN(+~cA8{Q@+k}z9?H_)BbKN?{xWvlt%f@3{*ZBnnd!@;IUL03+~${#5xJHLpF-U=y!deDbaospl zbu&9QopZ9|V!I|nP9Tq9X+a?!*jQ5dVXcum9?WxH147EdJZ-+scJ*T>t(a6QFUPAl z$~l?cPBXj|+Fv7wfEc_>h+`D)8gI97{^MqDWqD+GeI1Fle0$fU+VhlMdrV?_E0&e= z2U}N^(uN5Ord{`V-n+*wz*KfQ7Kr5xT1$451i1Mqy6v94P^=x#%!3F~eOI>wd6L51ig<`8`NDnU-6 zW~BbHfdNl1+6HgF{RDDZWer3iDS655Ln&nR?*3gq#*B;0IsLs}2lf1o1)RRHQ~XZ% zU8@6g8n6xhmqp$Ulh#)X?l>o0hGUohENonH*R3{IKrk~>%V-p#N78T0?f?LEwPvPB z;5D;S+#4_m9vI|Es~7N*ZhxC(KH54ti`<+Kf~D@yag zBBOl1cFS6yNMyZgD(rYF7F{%D34xvQM3zc=dO{uN6%M-;tyu;DmfTnX#~n+{3mrI51K>|MPOcRoh2B zW^LdqTMLM&IOmXoNw;jv2HMDYa07elz37iB_bK|vl_;6j7Ix_&2rY;!nVzEF9BRYP z^^;Q!fnq7wumI;5)rASy95P zem*FaBBL(n!QRs@g4aFlNw(?SRahY8fO^xplxb%W0qx<0Y)EnWue~X3kS~1n@!1f>HJdzSRutAr9~pb=^FerX)57Q!g*mX>rK3_=M!l)I(KrPar&&H4!kWd{ zEZG0?G|c)t3axsr(P)=P)>95x7Xf4EFh`Dk5SYz5QO}NH&RTKs?+%!C{%7cX!K6Mz Ys11`BUm`5<0>aN0x!o$;V&92B0cy?zcmMzZ diff --git a/favicons/parinux-48.png b/favicons/parinux-48.png deleted file mode 100755 index 5b48f00d07832c579bb8c115d8e61980c33cda5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 zcmV+p1@ZccP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vZmcu9vMgO&mUILOBmxCG3=^ga)`+=#96=y1w z1X~D6=n5Qa|NYzPA6%kF$hr`H^4{RG$tKCTiDtj{o{gQq^U^hh=PNm#1_UBKYx=hI zGvw|(A=o9~uH_WUvJ;n~HSl9lhiAdf(u>QG$}Z>iOli%__F_5f+l$O$x9vl>&o&?# z)xn+$NmE9yn#SQp5rHPnI_@*RBD*w0Zt<&{e$O49Zf}xzy1U7p$xE)+sUYK*g1^bp zlC%3gcQZqm5%Jmc)j*3Tn9J)jcfH2m+rGMNJu>BKE$U|}^A3tgr`0*lqXm4O8Ky@| zXc0>+AXY(hLo39I1=;RwxpL;tZT5u=LbTE(pcg5kQx-Kyk}{##(YQ+ho=O@)rGT13 zET>p_`c2bc;Rw%_p(zYwJZRoF`c3#rI~nSIlrFQ0r(7W}88wYC2D$MIEdb%Za_VM& zXQPX{F&AJJ1l>$?!~(O~b`zW9b8YG5tk84DlG(Qghq??PMeywq3@Zp2&+6E-2_k_R zd5qwb5xJ<94FuRZsZ1SgR6XEC8NM+m@YEG2yBJ3cKsfapfCd`~u&i~cpI{?uC_8nQ zoO9j<7hQ7MtGC{H?}Hy_R1O+!aKVQVVn`uJjW)XIV~8=Pn3E*M5$2Llfl^E<`4(Di zspXDZ>)LI1-S^OAPd%TgEvnbl_=emuHD1&PF+26bnHt0){FvZzoVdXZ#Kba)hd}@Z zErXefY^@A(gPBQ!P2mL8*bO+92Qd(|jm337u{)DH2;sSM(H)R=cDu&%i5FuVFb6M^ewF?5j`+^P@eQY zpWn5py}Fs6!Y~j7&;+Fg`k@?-G{A`>pd31bs}Hd>ld)k(n!P1T zY(;+BkFuU`&(C5Ur^P(%KVWMw-jD0yg)aBk?)`Sn_L)(8g-|I%2nmE-kIjs|LZ~bu zg@h99ULj;bh-IS`EOxIDDocnxdL(=FXeoVB2>m3)vBx@yk^ycKJtUJ(1-E@&Wz$0RR91007*qoM6N<$ Ef~(CR9 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 BeMtZS diff --git a/favicons/parinux-96.png b/favicons/parinux-96.png deleted file mode 100755 index 63d624413c70230e83a4dd06c4d0887d80abaf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1422 zcmV;91#$X`P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3w`mBT0uhTm1imVhL#XurKn-hOwNJCmneZ&N`#27i~M zDQEY4?nZ{LBjStan}HflFxS_0?pleh)opdzdSuGeT-47}#vK%qPOD>@M+^8m(@po5 z&?1(&f>;5~1#KlxEXa0a%Y`#HuA^UhMTl0a1oR@S=#WJXl4KoFY;W8o08b%}AhCj) zLM(eMJp88NZ{-Njg`p`7W87)pH~LL@rtOAW>!r(V;+`wSCB3E*Mkm*Qp#>n^W=`G6 z?`U*YH|7egf}k5|j#ywe%VuJ6e5oxRoE3V`STftz;83OkqzJwpf?)*#<5AM=*#wcm zj66p0$%tIk$^ruHoD`-8HmV+QqIBPw6L{!~lTD1H1t6Sy4M2kp1X$KO)K9PxHI$t? zOU^m(f{QM>?A2TEy!XNPGb#rSHn`wJ2r;CPqedHD^fAO3Q_M+{;s|rer$8yDlyZjC z4AU92GcOuhaR@&qxF093GXpWP4C0{^ zKtW4qW+GcFom^*Tl3-If0X23VPT@`r1Z`z;jdykza);c=*^ju%Gji0?{RKJd=q9;G zZog0~dAw0{0P4H2=hSG!!B)M*j86+|OKS3XGN1NzcH)B}tpL*Rmo;mtuk^M0vZ)uR zfWM3B#>}1CCr;?d%aM~;OFNF~z$Lx!^Vlf8r}lc3{$g2MvQI{EKT6-ydJ)kRqX*?l zpY!=$i|V_Z=|!IC{HAzgX=i%+wiw^sYcJ^CFYV3D97am@PYw~YRrb>gdT}m3J4Qa3 z_82RD#^$+E`XrX4*ywmGz8B3`d+pgV@}~Op4ASSv$E&5C+F{S$v|m&bojmX#kkC0s zk1L?>H|(ZOCztYIoIZW+Jd2#p|GB#D>ASbtMT_3s=dXME&VV-jVNUcvEsU3y+3sX? z00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru;{p~F z4;`sU^^gDn0cS}>K~#9!?cLD{0znK#Q59RTAItI62K=%JEyvEZf)xS@nJnl2Dmvrk zg~vLs$IJcoJ)n(~kAMIIKmY;g;k@<0=Xq;c(Dm^SJ%4MRTd%X)z9hg1A^-#sfYn-1 zR!hlhS<$vLWnU6t1Q7rN2*8vU)YVeDsNRI-kK>z>% diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo deleted file mode 100644 index 6567dba49f158484bfcbebbbbe13e80b5effa198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmYL_-%i3X6vpenn9LjFwHLi7#SOW@iiW`oE^dsBL84a{D5GR_q%8&?#HaBUdpM>*1-BEfU?IDZMjCE~v1p*nrI=b0&d6A3BTGf`!0$Z!J%-0D9fnEYNyWOrqVXr}N>lL@=x*#N}c!!z)x)=YnK{uPBcE zes8pk+>D}DA*-d%4;qT++KI!M9bV{FU8hqjD-;a;SVM9vw)SRSaH;O`biuU|_F^n3|R|sd9=N6KNf^6e~z0HcIUOSD@(zoZ)YO0mnvsiU0rr diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po deleted file mode 100644 index 98df283..0000000 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ /dev/null @@ -1,26 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-08-11 18:34+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: index.php:56 -msgid "thisisatest" -msgstr "cuntest" - -#: index.php:64 -msgid "ieatbanana" -msgstr "jemangeunebanane" diff --git a/parinux.png b/parinux.png deleted file mode 100755 index bed292919a2315c6c36efda5009afeea3e622cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9813 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 diff --git a/phpqrcode/.gitignore b/phpqrcode/.gitignore deleted file mode 100755 index 5f26dcb..0000000 --- a/phpqrcode/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea/ -temp/*.png \ No newline at end of file diff --git a/phpqrcode/CHANGELOG b/phpqrcode/CHANGELOG deleted file mode 100755 index 1088530..0000000 --- a/phpqrcode/CHANGELOG +++ /dev/null @@ -1,38 +0,0 @@ -* 1.0.0 build 2010031920 - - - first public release - - help in readme, install - - cleanup ans separation of QRtools and QRspec - - now TCPDF binding requires minimal changes in TCPDF, having most of job - done in QRtools tcpdfBarcodeArray - - nicer QRtools::timeBenchmark output - - license and copyright notices in files - - indent cleanup - from tab to 4spc, keep it that way please :) - - sf project, repository, wiki - - simple code generator in index.php - -* 1.1.0 build 2010032113 - - - added merge tool wich generate merged version of code - located in phpqrcode.php - - splited qrconst.php from qrlib.php - -* 1.1.1 build 2010032405 - - - patch by Rick Seymour allowing saving PNG and displaying it at the same time - - added version info in VERSION file - - modified merge tool to include version info into generated file - - fixed e-mail in almost all head comments - -* 1.1.2 build 2010032722 - - - full integration with TCPDF thanks to Nicola Asuni, it's author - - fixed bug with alphanumeric encoding detection - -* 1.1.3 build 2010081807 - - - short opening tags replaced with standard ones - -* 1.1.4 build 2010100721 - - - added missing static keyword QRinput::check (found by Luke Brookhart, Onjax LLC) diff --git a/phpqrcode/INSTALL b/phpqrcode/INSTALL deleted file mode 100755 index c918425..0000000 --- a/phpqrcode/INSTALL +++ /dev/null @@ -1,67 +0,0 @@ -== REQUIREMENTS == - - * PHP5 - * PHP GD2 extension with JPEG and PNG support - -== INSTALLATION == - -If you want to recreate cache by yourself make sure cache directory is -writable and you have permisions to write into it. Also make sure you are -able to read files in it if you have cache option enabled - -== CONFIGURATION == - -Feel free to modify config constants in qrconfig.php file. Read about it in -provided comments and project wiki page (links in README file) - -== QUICK START == - -Notice: probably you should'nt use all of this in same script :) - -encode('PHP QR Code :)'); -QRspec::debug($tab, true); - -== TCPDF INTEGRATION == - -Inside bindings/tcpdf you will find slightly modified 2dbarcodes.php. -Instal phpqrcode liblaty inside tcpdf folder, then overwrite (or merge) -2dbarcodes.php - -Then use similar as example #50 from TCPDF examples: - - true, - 'padding' => 4, - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) -); - -//code name: QR, specify error correction level after semicolon (L,M,Q,H) -$pdf->write2DBarcode('PHP QR Code :)', 'QR,L', '', '', 30, 30, $style, 'N'); diff --git a/phpqrcode/LICENSE b/phpqrcode/LICENSE deleted file mode 100755 index 1883303..0000000 --- a/phpqrcode/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/phpqrcode/README b/phpqrcode/README deleted file mode 100755 index e5cf608..0000000 --- a/phpqrcode/README +++ /dev/null @@ -1,61 +0,0 @@ -This is PHP implementation of QR Code 2-D barcode generator. It is pure-php -LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi. - -== UPDATE == -Added support for eps export -Usage : QRcode::eps('arguments'); - -Added support for SVG export -Usage : QRcode::svg('arguments'); - -Added support for color export : -example : -$back_color = 0xFFFF00; -$fore_color = 0xFF00FF; -QRcode::png('some othertext 1234', false, 'h', 20, 1, false, $back_color, $fore_color); - - -Copyright (C) 2012 by Alexandre Assouad - -== LICENSING == - -Copyright (C) 2010 by Dominik Dzienia - -This library is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free -Software Foundation; either version 3 of the License, or any later version. - -This library is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU Lesser General Public License (LICENSE file) -for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this library; if not, write to the Free Software Foundation, Inc., 51 -Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -== INSTALATION AND USAGE == - - * INSTALL file - * http://sourceforge.net/apps/mediawiki/phpqrcode/index.php?title=Main_Page - -== CONTACT == - -Fell free to contact me via e-mail (deltalab at poczta dot fm) or using -folowing project pages: - - * http://sourceforge.net/projects/phpqrcode/ - * http://phpqrcode.sourceforge.net/ - -== ACKNOWLEDGMENTS == - -Based on C libqrencode library (ver. 3.1.1) -Copyright (C) 2006-2010 by Kentaro Fukuchi -http://megaui.net/fukuchi/works/qrencode/index.en.html - -QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other -countries. - -Reed-Solomon code encoder is written by Phil Karn, KA9Q. -Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q - diff --git a/phpqrcode/VERSION b/phpqrcode/VERSION deleted file mode 100755 index 9f99279..0000000 --- a/phpqrcode/VERSION +++ /dev/null @@ -1,2 +0,0 @@ -1.1.4 -2010100721 \ No newline at end of file diff --git a/phpqrcode/bindings/tcpdf/qrcode.php b/phpqrcode/bindings/tcpdf/qrcode.php deleted file mode 100755 index 7995460..0000000 --- a/phpqrcode/bindings/tcpdf/qrcode.php +++ /dev/null @@ -1,2875 +0,0 @@ - -// http://phpqrcode.sourceforge.net/ -// https://sourceforge.net/projects/phpqrcode/ -// -// The "PHP QR Code encoder" is based on -// "C libqrencode library" (ver. 3.1.1) -// License: GNU-LGPL 2.1 -// Copyright (C) 2006-2010 by Kentaro Fukuchi -// http://megaui.net/fukuchi/works/qrencode/index.en.html -// -// Reed-Solomon code encoder is written by Phil Karn, KA9Q. -// Copyright (C) 2002-2006 Phil Karn, KA9Q -// -// QR Code is registered trademark of DENSO WAVE INCORPORATED -// http://www.denso-wave.com/qrcode/index-e.html -// --------------------------------------------------------- -// -// Author: Nicola Asuni -// -// (c) Copyright 2010: -// Nicola Asuni -// Tecnick.com S.r.l. -// Via della Pace, 11 -// 09044 Quartucciu (CA) -// ITALY -// www.tecnick.com -// info@tecnick.com -//============================================================+ - -/** - * Class to create QR-code arrays for TCPDF class. - * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. - * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. - * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. - * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. - * - * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). - * Please read comments on this class source file for full copyright and license information. - * - * @package com.tecnick.tcpdf - * @abstract Class for generating QR-code array for TCPDF. - * @author Nicola Asuni - * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com - * @link http://www.tcpdf.org - * @license http://www.gnu.org/copyleft/lesser.html LGPL - * @version 1.0.002 - */ - -// definitions -if (!defined('QRCODEDEFS')) { - - /** - * Indicate that definitions for this class are set - */ - define('QRCODEDEFS', true); - - // ----------------------------------------------------- - - // Encoding modes (characters which can be encoded in QRcode) - - /** - * Encoding mode - */ - define('QR_MODE_NL', -1); - - /** - * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode. - */ - define('QR_MODE_NM', 0); - - /** - * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode. - */ - define('QR_MODE_AN', 1); - - /** - * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode. - */ - define('QR_MODE_8B', 2); - - /** - * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode. - */ - define('QR_MODE_KJ', 3); - - /** - * Encoding mode STRUCTURED (currently unsupported) - */ - define('QR_MODE_ST', 4); - - // ----------------------------------------------------- - - // Levels of error correction. - // QRcode has a function of an error correcting for miss reading that white is black. - // Error correcting is defined in 4 level as below. - - /** - * Error correction level L : About 7% or less errors can be corrected. - */ - define('QR_ECLEVEL_L', 0); - - /** - * Error correction level M : About 15% or less errors can be corrected. - */ - define('QR_ECLEVEL_M', 1); - - /** - * Error correction level Q : About 25% or less errors can be corrected. - */ - define('QR_ECLEVEL_Q', 2); - - /** - * Error correction level H : About 30% or less errors can be corrected. - */ - define('QR_ECLEVEL_H', 3); - - // ----------------------------------------------------- - - // Version. Size of QRcode is defined as version. - // Version is from 1 to 40. - // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. - // So version 40 is 177*177 matrix. - - /** - * Maximum QR Code version. - */ - define('QRSPEC_VERSION_MAX', 40); - - /** - * Maximum matrix size for maximum version (version 40 is 177*177 matrix). - */ - define('QRSPEC_WIDTH_MAX', 177); - - // ----------------------------------------------------- - - /** - * Matrix index to get width from $capacity array. - */ - define('QRCAP_WIDTH', 0); - - /** - * Matrix index to get number of words from $capacity array. - */ - define('QRCAP_WORDS', 1); - - /** - * Matrix index to get remainder from $capacity array. - */ - define('QRCAP_REMINDER', 2); - - /** - * Matrix index to get error correction level from $capacity array. - */ - define('QRCAP_EC', 3); - - // ----------------------------------------------------- - - // Structure (currently usupported) - - /** - * Number of header bits for structured mode - */ - define('STRUCTURE_HEADER_BITS', 20); - - /** - * Max number of symbols for structured mode - */ - define('MAX_STRUCTURED_SYMBOLS', 16); - - // ----------------------------------------------------- - - // Masks - - /** - * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column) - */ - define('N1', 3); - - /** - * Down point base value for case 2 mask pattern (module block of same color) - */ - define('N2', 3); - - /** - * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column) - */ - define('N3', 40); - - /** - * Down point base value for case 4 mask pattern (ration of dark modules in whole) - */ - define('N4', 10); - - // ----------------------------------------------------- - - // Optimization settings - - /** - * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code - */ - define('QR_FIND_BEST_MASK', true); - - /** - * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly - */ - define('QR_FIND_FROM_RANDOM', 2); - - /** - * when QR_FIND_BEST_MASK === false - */ - define('QR_DEFAULT_MASK', 2); - - // ----------------------------------------------------- - -} // end of definitions - -// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# - -if (!class_exists('QRcode', false)) { - - // for compaibility with PHP4 - if (!function_exists('str_split')) { - /** - * Convert a string to an array (needed for PHP4 compatibility) - * @param string $string The input string. - * @param int $split_length Maximum length of the chunk. - * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element. - */ - function str_split($string, $split_length=1) { - if ((strlen($string) > $split_length) OR (!$split_length)) { - do { - $c = strlen($string); - $parts[] = substr($string, 0, $split_length); - $string = substr($string, $split_length); - } while ($string !== false); - } else { - $parts = array($string); - } - return $parts; - } - } - - // ##################################################### - - /** - * Class to create QR-code arrays for TCPDF class. - * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. - * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. - * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. - * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. - * - * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). - * Please read comments on this class source file for full copyright and license information. - * - * @name QRcode - * @package com.tecnick.tcpdf - * @abstract Class for generating QR-code array for TCPDF. - * @author Nicola Asuni - * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com - * @link http://www.tcpdf.org - * @license http://www.gnu.org/copyleft/lesser.html LGPL - * @version 1.0.002 - */ - class QRcode { - - /** - * @var barcode array to be returned which is readable by TCPDF - * @access protected - */ - protected $barcode_array = array(); - - /** - * @var QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix. - * @access protected - */ - protected $version = 0; - - /** - * @var Levels of error correction. See definitions for possible values. - * @access protected - */ - protected $level = QR_ECLEVEL_L; - - /** - * @var Encoding mode - * @access protected - */ - protected $hint = QR_MODE_8B; - - /** - * @var if true the input string will be converted to uppercase - * @access protected - */ - protected $casesensitive = true; - - /** - * @var structured QR code (not supported yet) - * @access protected - */ - protected $structured = 0; - - /** - * @var mask data - * @access protected - */ - protected $data; - - // FrameFiller - - /** - * @var width - * @access protected - */ - protected $width; - - /** - * @var frame - * @access protected - */ - protected $frame; - - /** - * @var X position of bit - * @access protected - */ - protected $x; - - /** - * @var Y position of bit - * @access protected - */ - protected $y; - - /** - * @var direction - * @access protected - */ - protected $dir; - - /** - * @var single bit - * @access protected - */ - protected $bit; - - // ---- QRrawcode ---- - - /** - * @var data code - * @access protected - */ - protected $datacode = array(); - - /** - * @var error correction code - * @access protected - */ - protected $ecccode = array(); - - /** - * @var blocks - * @access protected - */ - protected $blocks; - - /** - * @var Reed-Solomon blocks - * @access protected - */ - protected $rsblocks = array(); //of RSblock - - /** - * @var counter - * @access protected - */ - protected $count; - - /** - * @var data length - * @access protected - */ - protected $dataLength; - - /** - * @var error correction length - * @access protected - */ - protected $eccLength; - - /** - * @var b1 - * @access protected - */ - protected $b1; - - // ---- QRmask ---- - - /** - * @var run length - * @access protected - */ - protected $runLength = array(); - - // ---- QRsplit ---- - - /** - * @var input data string - * @access protected - */ - protected $dataStr = ''; - - /** - * @var input items - * @access protected - */ - protected $items; - - // Reed-Solomon items - - /** - * @var Reed-Solomon items - * @access protected - */ - protected $rsitems = array(); - - /** - * @var array of frames - * @access protected - */ - protected $frames = array(); - - /** - * @var alphabet-numeric convesion table - * @access protected - */ - protected $anTable = array( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, // - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, // - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, // - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // - ); - - /** - * @var array Table of the capacity of symbols - * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. - * @access protected - */ - protected $capacity = array( - array( 0, 0, 0, array( 0, 0, 0, 0)), // - array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 - array( 25, 44, 7, array( 10, 16, 22, 28)), // - array( 29, 70, 7, array( 15, 26, 36, 44)), // - array( 33, 100, 7, array( 20, 36, 52, 64)), // - array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 - array( 41, 172, 7, array( 36, 64, 96, 112)), // - array( 45, 196, 0, array( 40, 72, 108, 130)), // - array( 49, 242, 0, array( 48, 88, 132, 156)), // - array( 53, 292, 0, array( 60, 110, 160, 192)), // - array( 57, 346, 0, array( 72, 130, 192, 224)), // 10 - array( 61, 404, 0, array( 80, 150, 224, 264)), // - array( 65, 466, 0, array( 96, 176, 260, 308)), // - array( 69, 532, 0, array( 104, 198, 288, 352)), // - array( 73, 581, 3, array( 120, 216, 320, 384)), // - array( 77, 655, 3, array( 132, 240, 360, 432)), // 15 - array( 81, 733, 3, array( 144, 280, 408, 480)), // - array( 85, 815, 3, array( 168, 308, 448, 532)), // - array( 89, 901, 3, array( 180, 338, 504, 588)), // - array( 93, 991, 3, array( 196, 364, 546, 650)), // - array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20 - array(101, 1156, 4, array( 224, 442, 644, 750)), // - array(105, 1258, 4, array( 252, 476, 690, 816)), // - array(109, 1364, 4, array( 270, 504, 750, 900)), // - array(113, 1474, 4, array( 300, 560, 810, 960)), // - array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25 - array(121, 1706, 4, array( 336, 644, 952, 1110)), // - array(125, 1828, 4, array( 360, 700, 1020, 1200)), // - array(129, 1921, 3, array( 390, 728, 1050, 1260)), // - array(133, 2051, 3, array( 420, 784, 1140, 1350)), // - array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30 - array(141, 2323, 3, array( 480, 868, 1290, 1530)), // - array(145, 2465, 3, array( 510, 924, 1350, 1620)), // - array(149, 2611, 3, array( 540, 980, 1440, 1710)), // - array(153, 2761, 3, array( 570, 1036, 1530, 1800)), // - array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35 - array(161, 3034, 0, array( 600, 1120, 1680, 1980)), // - array(165, 3196, 0, array( 630, 1204, 1770, 2100)), // - array(169, 3362, 0, array( 660, 1260, 1860, 2220)), // - array(173, 3532, 0, array( 720, 1316, 1950, 2310)), // - array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40 - ); - - /** - * @var array Length indicator - * @access protected - */ - protected $lengthTableBits = array( - array(10, 12, 14), - array( 9, 11, 13), - array( 8, 16, 16), - array( 8, 10, 12) - ); - - /** - * @var array Table of the error correction code (Reed-Solomon block) - * See Table 12-16 (pp.30-36), JIS X0510:2004. - * @access protected - */ - protected $eccTable = array( - array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), // - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // - array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), // - array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), // - array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 - array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), // - array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), // - array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), // - array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), // - array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10 - array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), // - array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), // - array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), // - array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), // - array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15 - array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), // - array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), // - array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), // - array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), // - array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20 - array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), // - array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), // - array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), // - array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), // - array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25 - array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), // - array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), // - array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), // - array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), // - array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30 - array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), // - array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), // - array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), // - array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), // - array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35 - array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), // - array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), // - array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), // - array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), // - array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40 - ); - - /** - * @var array Positions of alignment patterns. - * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. - * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. - * @access protected - */ - protected $alignmentPattern = array( - array( 0, 0), - array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 - array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 - array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15 - array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20 - array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25 - array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30 - array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35 - array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40 - ); - - /** - * @var array Version information pattern (BCH coded). - * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. - * size: [QRSPEC_VERSION_MAX - 6] - * @access protected - */ - protected $versionPattern = array( - 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, // - 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, // - 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, // - 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, // - 0x27541, 0x28c69 - ); - - /** - * @var array Format information - * @access protected - */ - protected $formatInfo = array( - array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), // - array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), // - array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), // - array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) // - ); - - - // ------------------------------------------------- - // ------------------------------------------------- - - - /** - * This is the class constructor. - * Creates a QRcode object - * @param string $code code to represent using QRcode - * @param string $eclevel error level:
  • L : About 7% or less errors can be corrected.
  • M : About 15% or less errors can be corrected.
  • Q : About 25% or less errors can be corrected.
  • H : About 30% or less errors can be corrected.
- * @access public - * @since 1.0.000 - */ - public function __construct($code, $eclevel = 'L') { - $barcode_array = array(); - if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { - return false; - } - // set error correction level - $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H')); - if ($this->level === false) { - $this->level = QR_ECLEVEL_L; - } - if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) { - return false; - } - if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) { - return false; - } - $this->items = array(); - $this->encodeString($code); - $qrTab = $this->binarize($this->data); - $size = count($qrTab); - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach (str_split($line) as $char) { - $arrAdd[] = ($char=='1')?1:0; - } - $barcode_array['bcode'][] = $arrAdd; - } - $this->barcode_array = $barcode_array; - } - - /** - * Returns a barcode array which is readable by TCPDF - * @return array barcode array readable by TCPDF; - * @access public - */ - public function getBarcodeArray() { - return $this->barcode_array; - } - - /** - * Convert the frame in binary form - * @param array $frame array to binarize - * @return array frame in binary form - */ - protected function binarize($frame) { - $len = count($frame); - // the frame is square (width = height) - foreach ($frame as &$frameLine) { - for ($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - return $frame; - } - - /** - * Encode the input string to QR code - * @param string $string input string to encode - */ - protected function encodeString($string) { - $this->dataStr = $string; - if (!$this->casesensitive) { - $this->toUpper(); - } - $ret = $this->splitString(); - if ($ret < 0) { - return NULL; - } - $this->encodeMask(-1); - } - - /** - * Encode mask - * @param int $mask masking mode - */ - protected function encodeMask($mask) { - $spec = array(0, 0, 0, 0, 0); - $this->datacode = $this->getByteStream($this->items); - if (is_null($this->datacode)) { - return NULL; - } - $spec = $this->getEccSpec($this->version, $this->level, $spec); - $this->b1 = $this->rsBlockNum1($spec); - $this->dataLength = $this->rsDataLength($spec); - $this->eccLength = $this->rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = $this->rsBlockNum($spec); - $ret = $this->init($spec); - if ($ret < 0) { - return NULL; - } - $this->count = 0; - $this->width = $this->getWidth($this->version); - $this->frame = $this->newFrame($this->version); - $this->x = $this->width - 1; - $this->y = $this->width - 1; - $this->dir = -1; - $this->bit = -1; - // inteleaved data and ecc codes - for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) { - $code = $this->getCode(); - $bit = 0x80; - for ($j=0; $j<8; $j++) { - $addr = $this->getNextPosition(); - $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - // remainder bits - $j = $this->getRemainder($this->version); - for ($i=0; $i<$j; $i++) { - $addr = $this->getNextPosition(); - $this->setFrameAt($addr, 0x02); - } - // masking - $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); - if ($mask < 0) { - if (QR_FIND_BEST_MASK) { - $masked = $this->mask($this->width, $this->frame, $this->level); - } else { - $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level); - } - } else { - $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level); - } - if ($masked == NULL) { - return NULL; - } - $this->data = $masked; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // FrameFiller - - /** - * Set frame value at specified position - * @param array $at x,y position - * @param int $val value of the character to set - */ - protected function setFrameAt($at, $val) { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - /** - * Get frame value at specified position - * @param array $at x,y position - * @return value at specified position - */ - protected function getFrameAt($at) { - return ord($this->frame[$at['y']][$at['x']]); - } - - /** - * Return the next frame position - * @return array of x,y coordinates - */ - protected function getNextPosition() { - do { - if ($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - $x = $this->x; - $y = $this->y; - $w = $this->width; - if ($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - if ($this->dir < 0) { - if ($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if ($x == 6) { - $x--; - $y = 9; - } - } - } else { - if ($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if ($x == 6) { - $x--; - $y -= 8; - } - } - } - if (($x < 0) OR ($y < 0)) { - return NULL; - } - $this->x = $x; - $this->y = $y; - } while(ord($this->frame[$y][$x]) & 0x80); - return array('x'=>$x, 'y'=>$y); - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRrawcode - - /** - * Initialize code. - * @param array $spec array of ECC specification - * @return 0 in case of success, -1 in case of error - */ - protected function init($spec) { - $dl = $this->rsDataCodes1($spec); - $el = $this->rsEccCodes1($spec); - $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - $endfor = $this->rsBlockNum1($spec); - for ($i=0; $i < $endfor; ++$i) { - $ecc = array_slice($this->ecccode, $eccPos); - $this->rsblocks[$blockNo] = array(); - $this->rsblocks[$blockNo]['dataLength'] = $dl; - $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); - $this->rsblocks[$blockNo]['eccLength'] = $el; - $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); - $this->rsblocks[$blockNo]['ecc'] = $ecc; - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - if ($this->rsBlockNum2($spec) == 0) { - return 0; - } - $dl = $this->rsDataCodes2($spec); - $el = $this->rsEccCodes2($spec); - $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - if ($rs == NULL) { - return -1; - } - $endfor = $this->rsBlockNum2($spec); - for ($i=0; $i < $endfor; ++$i) { - $ecc = array_slice($this->ecccode, $eccPos); - $this->rsblocks[$blockNo] = array(); - $this->rsblocks[$blockNo]['dataLength'] = $dl; - $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); - $this->rsblocks[$blockNo]['eccLength'] = $el; - $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); - $this->rsblocks[$blockNo]['ecc'] = $ecc; - $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc); - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - return 0; - } - - /** - * Return Reed-Solomon block code. - * @return array rsblocks - */ - protected function getCode() { - if ($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if ($col >= $this->rsblocks[0]['dataLength']) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]['data'][$col]; - } elseif ($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]['ecc'][$col]; - } else { - return 0; - } - $this->count++; - return $ret; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRmask - - /** - * Write Format Information on frame and returns the number of black bits - * @param int $width frame width - * @param array $frame frame - * @param array $mask masking mode - * @param int $level error correction level - * @return int blacks - */ - protected function writeFormatInformation($width, &$frame, $mask, $level) { - $blacks = 0; - $format = $this->getFormatInfo($mask, $level); - for ($i=0; $i<8; ++$i) { - if ($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - $frame[8][$width - 1 - $i] = chr($v); - if ($i < 6) { - $frame[$i][8] = chr($v); - } else { - $frame[$i + 1][8] = chr($v); - } - $format = $format >> 1; - } - for ($i=0; $i<7; ++$i) { - if ($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - $frame[$width - 7 + $i][8] = chr($v); - if ($i == 0) { - $frame[8][7] = chr($v); - } else { - $frame[8][6 - $i] = chr($v); - } - $format = $format >> 1; - } - return $blacks; - } - - /** - * mask0 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask0($x, $y) { - return ($x + $y) & 1; - } - - /** - * mask1 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask1($x, $y) { - return ($y & 1); - } - - /** - * mask2 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask2($x, $y) { - return ($x % 3); - } - - /** - * mask3 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask3($x, $y) { - return ($x + $y) % 3; - } - - /** - * mask4 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask4($x, $y) { - return (((int)($y / 2)) + ((int)($x / 3))) & 1; - } - - /** - * mask5 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask5($x, $y) { - return (($x * $y) & 1) + ($x * $y) % 3; - } - - /** - * mask6 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask6($x, $y) { - return ((($x * $y) & 1) + ($x * $y) % 3) & 1; - } - - /** - * mask7 - * @param int $x X position - * @param int $y Y position - * @return int mask - */ - protected function mask7($x, $y) { - return ((($x * $y) % 3) + (($x + $y) & 1)) & 1; - } - - /** - * Return bitmask - * @param int $maskNo mask number - * @param int $width width - * @param array $frame frame - * @return array bitmask - */ - protected function generateMaskNo($maskNo, $width, $frame) { - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($y=0; $y<$width; ++$y) { - for ($x=0; $x<$width; ++$x) { - if (ord($frame[$y][$x]) & 0x80) { - $bitMask[$y][$x] = 0; - } else { - $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); - $bitMask[$y][$x] = ($maskFunc == 0)?1:0; - } - } - } - return $bitMask; - } - - /** - * makeMaskNo - * @param int $maskNo - * @param int $width - * @param int $s - * @param int $d - * @param boolean $maskGenOnly - * @return int b - */ - protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { - $b = 0; - $bitMask = array(); - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - if ($maskGenOnly) { - return; - } - $d = $s; - for ($y=0; $y<$width; ++$y) { - for ($x=0; $x<$width; ++$x) { - if ($bitMask[$y][$x] == 1) { - $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); - } - $b += (int)(ord($d[$y][$x]) & 1); - } - } - return $b; - } - - /** - * makeMask - * @param int $width - * @param array $frame - * @param int $maskNo - * @param int $level - * @return array mask - */ - protected function makeMask($width, $frame, $maskNo, $level) { - $masked = array_fill(0, $width, str_repeat("\0", $width)); - $this->makeMaskNo($maskNo, $width, $frame, $masked); - $this->writeFormatInformation($width, $masked, $maskNo, $level); - return $masked; - } - - /** - * calcN1N3 - * @param int $length - * @return int demerit - */ - protected function calcN1N3($length) { - $demerit = 0; - for ($i=0; $i<$length; ++$i) { - if ($this->runLength[$i] >= 5) { - $demerit += (N1 + ($this->runLength[$i] - 5)); - } - if ($i & 1) { - if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) { - $fact = (int)($this->runLength[$i] / 3); - if (($this->runLength[$i-2] == $fact) - AND ($this->runLength[$i-1] == $fact) - AND ($this->runLength[$i+1] == $fact) - AND ($this->runLength[$i+2] == $fact)) { - if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) { - $demerit += N3; - } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) { - $demerit += N3; - } - } - } - } - } - return $demerit; - } - - /** - * evaluateSymbol - * @param int $width - * @param array $frame - * @return int demerit - */ - protected function evaluateSymbol($width, $frame) { - $head = 0; - $demerit = 0; - for ($y=0; $y<$width; ++$y) { - $head = 0; - $this->runLength[0] = 1; - $frameY = $frame[$y]; - if ($y > 0) { - $frameYM = $frame[$y-1]; - } - for ($x=0; $x<$width; ++$x) { - if (($x > 0) AND ($y > 0)) { - $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); - $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); - if (($b22 | ($w22 ^ 1)) & 1) { - $demerit += N2; - } - } - if (($x == 0) AND (ord($frameY[$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } elseif ($x > 0) { - if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - $demerit += $this->calcN1N3($head+1); - } - for ($x=0; $x<$width; ++$x) { - $head = 0; - $this->runLength[0] = 1; - for ($y=0; $y<$width; ++$y) { - if (($y == 0) AND (ord($frame[$y][$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } elseif ($y > 0) { - if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - $demerit += $this->calcN1N3($head+1); - } - return $demerit; - } - - /** - * mask - * @param int $width - * @param array $frame - * @param int $level - * @return array best mask - */ - protected function mask($width, $frame, $level) { - $minDemerit = PHP_INT_MAX; - $bestMaskNum = 0; - $bestMask = array(); - $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7); - if (QR_FIND_FROM_RANDOM !== false) { - $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9); - for ($i = 0; $i < $howManuOut; ++$i) { - $remPos = rand (0, count($checked_masks)-1); - unset($checked_masks[$remPos]); - $checked_masks = array_values($checked_masks); - } - } - $bestMask = $frame; - foreach ($checked_masks as $i) { - $mask = array_fill(0, $width, str_repeat("\0", $width)); - $demerit = 0; - $blacks = 0; - $blacks = $this->makeMaskNo($i, $width, $frame, $mask); - $blacks += $this->writeFormatInformation($width, $mask, $i, $level); - $blacks = (int)(100 * $blacks / ($width * $width)); - $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); - $demerit += $this->evaluateSymbol($width, $mask); - if ($demerit < $minDemerit) { - $minDemerit = $demerit; - $bestMask = $mask; - $bestMaskNum = $i; - } - } - return $bestMask; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRsplit - - /** - * Return true if the character at specified position is a number - * @param string $str string - * @param int $pos characted position - * @return boolean true of false - */ - protected function isdigitat($str, $pos) { - if ($pos >= strlen($str)) { - return false; - } - return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); - } - - /** - * Return true if the character at specified position is an alphanumeric character - * @param string $str string - * @param int $pos characted position - * @return boolean true of false - */ - protected function isalnumat($str, $pos) { - if ($pos >= strlen($str)) { - return false; - } - return ($this->lookAnTable(ord($str[$pos])) >= 0); - } - - /** - * identifyMode - * @param int $pos - * @return int mode - */ - protected function identifyMode($pos) { - if ($pos >= strlen($this->dataStr)) { - return QR_MODE_NL; - } - $c = $this->dataStr[$pos]; - if ($this->isdigitat($this->dataStr, $pos)) { - return QR_MODE_NM; - } elseif ($this->isalnumat($this->dataStr, $pos)) { - return QR_MODE_AN; - } elseif ($this->hint == QR_MODE_KJ) { - if ($pos+1 < strlen($this->dataStr)) { - $d = $this->dataStr[$pos+1]; - $word = (ord($c) << 8) | ord($d); - if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) { - return QR_MODE_KJ; - } - } - } - return QR_MODE_8B; - } - - /** - * eatNum - * @return int run - */ - protected function eatNum() { - $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); - $p = 0; - while($this->isdigitat($this->dataStr, $p)) { - $p++; - } - $run = $p; - $mode = $this->identifyMode($p); - if ($mode == QR_MODE_8B) { - $dif = $this->estimateBitsModeNum($run) + 4 + $ln - + $this->estimateBitsMode8(1) // + 4 + l8 - - $this->estimateBitsMode8($run + 1); // - 4 - l8 - if ($dif > 0) { - return $this->eat8(); - } - } - if ($mode == QR_MODE_AN) { - $dif = $this->estimateBitsModeNum($run) + 4 + $ln - + $this->estimateBitsModeAn(1) // + 4 + la - - $this->estimateBitsModeAn($run + 1);// - 4 - la - if ($dif > 0) { - return $this->eatAn(); - } - } - $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr)); - return $run; - } - - /** - * eatAn - * @return int run - */ - protected function eatAn() { - $la = $this->lengthIndicator(QR_MODE_AN, $this->version); - $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); - $p = 0; - while($this->isalnumat($this->dataStr, $p)) { - if ($this->isdigitat($this->dataStr, $p)) { - $q = $p; - while($this->isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = $this->estimateBitsModeAn($p) // + 4 + la - + $this->estimateBitsModeNum($q - $p) + 4 + $ln - - $this->estimateBitsModeAn($q); // - 4 - la - if ($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - $run = $p; - if (!$this->isalnumat($this->dataStr, $p)) { - $dif = $this->estimateBitsModeAn($run) + 4 + $la - + $this->estimateBitsMode8(1) // + 4 + l8 - - $this->estimateBitsMode8($run + 1); // - 4 - l8 - if ($dif > 0) { - return $this->eat8(); - } - } - $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr)); - return $run; - } - - /** - * eatKanji - * @return int run - */ - protected function eatKanji() { - $p = 0; - while($this->identifyMode($p) == QR_MODE_KJ) { - $p += 2; - } - $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); - return $run; - } - - /** - * eat8 - * @return int run - */ - protected function eat8() { - $la = $this->lengthIndicator(QR_MODE_AN, $this->version); - $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); - $p = 1; - $dataStrLen = strlen($this->dataStr); - while($p < $dataStrLen) { - $mode = $this->identifyMode($p); - if ($mode == QR_MODE_KJ) { - break; - } - if ($mode == QR_MODE_NM) { - $q = $p; - while($this->isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = $this->estimateBitsMode8($p) // + 4 + l8 - + $this->estimateBitsModeNum($q - $p) + 4 + $ln - - $this->estimateBitsMode8($q); // - 4 - l8 - if ($dif < 0) { - break; - } else { - $p = $q; - } - } elseif ($mode == QR_MODE_AN) { - $q = $p; - while($this->isalnumat($this->dataStr, $q)) { - $q++; - } - $dif = $this->estimateBitsMode8($p) // + 4 + l8 - + $this->estimateBitsModeAn($q - $p) + 4 + $la - - $this->estimateBitsMode8($q); // - 4 - l8 - if ($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - $run = $p; - $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr)); - return $run; - } - - /** - * splitString - */ - protected function splitString() { - while (strlen($this->dataStr) > 0) { - if ($this->dataStr == '') { - return 0; - } - $mode = $this->identifyMode(0); - switch ($mode) { - case QR_MODE_NM: { - $length = $this->eatNum(); - break; - } - case QR_MODE_AN: { - $length = $this->eatAn(); - break; - } - case QR_MODE_KJ: { - if ($hint == QR_MODE_KJ) { - $length = $this->eatKanji(); - } else { - $length = $this->eat8(); - } - break; - } - default: { - $length = $this->eat8(); - break; - } - } - if ($length == 0) { - return 0; - } - if ($length < 0) { - return -1; - } - $this->dataStr = substr($this->dataStr, $length); - } - } - - /** - * toUpper - */ - protected function toUpper() { - $stringLen = strlen($this->dataStr); - $p = 0; - while ($p < $stringLen) { - $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); - if ($mode == QR_MODE_KJ) { - $p += 2; - } else { - if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) { - $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); - } - $p++; - } - } - return $this->dataStr; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRinputItem - - /** - * newInputItem - * @param int $mode - * @param int $size - * @param array $data - * @param array $bstream - * @return array input item - */ - protected function newInputItem($mode, $size, $data, $bstream=null) { - $setData = array_slice($data, 0, $size); - if (count($setData) < $size) { - $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0)); - } - if (!$this->check($mode, $size, $setData)) { - return NULL; - } - $inputitem = array(); - $inputitem['mode'] = $mode; - $inputitem['size'] = $size; - $inputitem['data'] = $setData; - $inputitem['bstream'] = $bstream; - return $inputitem; - } - - /** - * encodeModeNum - * @param array $inputitem - * @param int $version - * @return array input item - */ - protected function encodeModeNum($inputitem, $version) { - $words = (int)($inputitem['size'] / 3); - $inputitem['bstream'] = array(); - $val = 0x1; - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']); - for ($i=0; $i < $words; ++$i) { - $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100; - $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10; - $val += (ord($inputitem['data'][$i*3+2]) - ord('0')); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val); - } - if ($inputitem['size'] - $words * 3 == 1) { - $val = ord($inputitem['data'][$words*3]) - ord('0'); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); - } elseif (($inputitem['size'] - ($words * 3)) == 2) { - $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10; - $val += (ord($inputitem['data'][$words*3+1]) - ord('0')); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val); - } - return $inputitem; - } - - /** - * encodeModeAn - * @param array $inputitem - * @param int $version - * @return array input item - */ - protected function encodeModeAn($inputitem, $version) { - $words = (int)($inputitem['size'] / 2); - $inputitem['bstream'] = array(); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02); - $inputitem['bstream'] = $this->appendNum(v, $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']); - for ($i=0; $i < $words; ++$i) { - $val = (int)$this->lookAnTable(ord($inputitem['data'][$i*2 ])) * 45; - $val += (int)$this->lookAnTable(ord($inputitem['data'][$i*2+1])); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val); - } - if ($inputitem['size'] & 1) { - $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)])); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val); - } - return $inputitem; - } - - /** - * encodeMode8 - * @param array $inputitem - * @param int $version - * @return array input item - */ - protected function encodeMode8($inputitem, $version) { - $inputitem['bstream'] = array(); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']); - for ($i=0; $i < $inputitem['size']; ++$i) { - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i])); - } - return $inputitem; - } - - /** - * encodeModeKanji - * @param array $inputitem - * @param int $version - * @return array input item - */ - protected function encodeModeKanji($inputitem, $version) { - $inputitem['bstream'] = array(); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2)); - for ($i=0; $i<$inputitem['size']; $i+=2) { - $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]); - if ($val <= 0x9ffc) { - $val -= 0x8140; - } else { - $val -= 0xc140; - } - $h = ($val >> 8) * 0xc0; - $val = ($val & 0xff) + $h; - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val); - } - return $inputitem; - } - - /** - * encodeModeStructure - * @param array $inputitem - * @return array input item - */ - protected function encodeModeStructure($inputitem) { - $inputitem['bstream'] = array(); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1); - $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2])); - return $inputitem; - } - - /** - * encodeBitStream - * @param array $inputitem - * @param int $version - * @return array input item - */ - protected function encodeBitStream($inputitem, $version) { - $inputitem['bstream'] = array(); - $words = $this->maximumWords($inputitem['mode'], $version); - if ($inputitem['size'] > $words) { - $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']); - $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words)); - $st1 = $this->encodeBitStream($st1, $version); - $st2 = $this->encodeBitStream($st2, $version); - $inputitem['bstream'] = array(); - $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']); - $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']); - } else { - switch($inputitem['mode']) { - case QR_MODE_NM: { - $inputitem = $this->encodeModeNum($inputitem, $version); - break; - } - case QR_MODE_AN: { - $inputitem = $this->encodeModeAn($inputitem, $version); - break; - } - case QR_MODE_8B: { - $inputitem = $this->encodeMode8($inputitem, $version); - break; - } - case QR_MODE_KJ: { - $inputitem = $this->encodeModeKanji($inputitem, $version); - break; - } - case QR_MODE_ST: { - $inputitem = $this->encodeModeStructure($inputitem); - break; - } - default: { - break; - } - } - } - return $inputitem; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRinput - - /** - * Append data to an input object. - * The data is copied and appended to the input object. - * @param array items input items - * @param int $mode encoding mode. - * @param int $size size of data (byte). - * @param array $data array of input data. - * @return items - * - */ - protected function appendNewInputItem($items, $mode, $size, $data) { - $items[] = $this->newInputItem($mode, $size, $data); - return $items; - } - - /** - * insertStructuredAppendHeader - * @param array $items - * @param int $size - * @param int $index - * @param int $parity - * @return array items - */ - protected function insertStructuredAppendHeader($items, $size, $index, $parity) { - if ($size > MAX_STRUCTURED_SYMBOLS) { - return -1; - } - if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) { - return -1; - } - $buf = array($size, $index, $parity); - $entry = $this->newInputItem(QR_MODE_ST, 3, buf); - array_unshift($items, $entry); - return $items; - } - - /** - * calcParity - * @param array $items - * @return int parity - */ - protected function calcParity($items) { - $parity = 0; - foreach ($items as $item) { - if ($item['mode'] != QR_MODE_ST) { - for ($i=$item['size']-1; $i>=0; --$i) { - $parity ^= $item['data'][$i]; - } - } - } - return $parity; - } - - /** - * checkModeNum - * @param int $size - * @param array $data - * @return boolean true or false - */ - protected function checkModeNum($size, $data) { - for ($i=0; $i<$size; ++$i) { - if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){ - return false; - } - } - return true; - } - - /** - * estimateBitsModeNum - * @param int $size - * @return int number of bits - */ - protected function estimateBitsModeNum($size) { - $w = (int)$size / 3; - $bits = $w * 10; - switch($size - $w * 3) { - case 1: { - $bits += 4; - break; - } - case 2: { - $bits += 7; - break; - } - default: { - break; - } - } - return $bits; - } - - /** - * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). - * @param int $c character value - * @return value - */ - protected function lookAnTable($c) { - return (($c > 127)?-1:$this->anTable[$c]); - } - - /** - * checkModeAn - * @param int $size - * @param array $data - * @return boolean true or false - */ - protected function checkModeAn($size, $data) { - for ($i=0; $i<$size; ++$i) { - if ($this->lookAnTable(ord($data[$i])) == -1) { - return false; - } - } - return true; - } - - /** - * estimateBitsModeAn - * @param int $size - * @return int number of bits - */ - protected function estimateBitsModeAn($size) { - $w = (int)($size / 2); - $bits = $w * 11; - if ($size & 1) { - $bits += 6; - } - return $bits; - } - - /** - * estimateBitsMode8 - * @param int $size - * @return int number of bits - */ - protected function estimateBitsMode8($size) { - return $size * 8; - } - - /** - * estimateBitsModeKanji - * @param int $size - * @return int number of bits - */ - protected function estimateBitsModeKanji($size) { - return (int)(($size / 2) * 13); - } - - /** - * checkModeKanji - * @param int $size - * @param array $data - * @return boolean true or false - */ - protected function checkModeKanji($size, $data) { - if ($size & 1) { - return false; - } - for ($i=0; $i<$size; $i+=2) { - $val = (ord($data[$i]) << 8) | ord($data[$i+1]); - if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) { - return false; - } - } - return true; - } - - /** - * Validate the input data. - * @param int $mode encoding mode. - * @param int $size size of data (byte). - * @param array data data to validate - * @return boolean true in case of valid data, false otherwise - */ - protected function check($mode, $size, $data) { - if ($size <= 0) { - return false; - } - switch($mode) { - case QR_MODE_NM: { - return $this->checkModeNum($size, $data); - } - case QR_MODE_AN: { - return $this->checkModeAn($size, $data); - } - case QR_MODE_KJ: { - return $this->checkModeKanji($size, $data); - } - case QR_MODE_8B: { - return true; - } - case QR_MODE_ST: { - return true; - } - default: { - break; - } - } - return false; - } - - /** - * estimateBitStreamSize - * @param array $items - * @param int $version - * @return int bits - */ - protected function estimateBitStreamSize($items, $version) { - $bits = 0; - if ($version == 0) { - $version = 1; - } - foreach ($items as $item) { - switch($item['mode']) { - case QR_MODE_NM: { - $bits = $this->estimateBitsModeNum($item['size']); - break; - } - case QR_MODE_AN: { - $bits = $this->estimateBitsModeAn($item['size']); - break; - } - case QR_MODE_8B: { - $bits = $this->estimateBitsMode8($item['size']); - break; - } - case QR_MODE_KJ: { - $bits = $this->estimateBitsModeKanji($item['size']); - break; - } - case QR_MODE_ST: { - return STRUCTURE_HEADER_BITS; - } - default: { - return 0; - } - } - $l = $this->lengthIndicator($item['mode'], $version); - $m = 1 << $l; - $num = (int)(($item['size'] + $m - 1) / $m); - $bits += $num * (4 + $l); - } - return $bits; - } - - /** - * estimateVersion - * @param array $items - * @return int version - */ - protected function estimateVersion($items) { - $version = 0; - $prev = 0; - do { - $prev = $version; - $bits = $this->estimateBitStreamSize($items, $prev); - $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($version < 0) { - return -1; - } - } while ($version > $prev); - return $version; - } - - /** - * lengthOfCode - * @param int $mode - * @param int $version - * @param int $bits - * @return int size - */ - protected function lengthOfCode($mode, $version, $bits) { - $payload = $bits - 4 - $this->lengthIndicator($mode, $version); - switch($mode) { - case QR_MODE_NM: { - $chunks = (int)($payload / 10); - $remain = $payload - $chunks * 10; - $size = $chunks * 3; - if ($remain >= 7) { - $size += 2; - } elseif ($remain >= 4) { - $size += 1; - } - break; - } - case QR_MODE_AN: { - $chunks = (int)($payload / 11); - $remain = $payload - $chunks * 11; - $size = $chunks * 2; - if ($remain >= 6) { - ++$size; - } - break; - } - case QR_MODE_8B: { - $size = (int)($payload / 8); - break; - } - case QR_MODE_KJ: { - $size = (int)(($payload / 13) * 2); - break; - } - case QR_MODE_ST: { - $size = (int)($payload / 8); - break; - } - default: { - $size = 0; - break; - } - } - $maxsize = $this->maximumWords($mode, $version); - if ($size < 0) { - $size = 0; - } - if ($size > $maxsize) { - $size = $maxsize; - } - return $size; - } - - /** - * createBitStream - * @param array $items - * @return array of items and total bits - */ - protected function createBitStream($items) { - $total = 0; - foreach ($items as $key => $item) { - $items[$key] = $this->encodeBitStream($item, $this->version); - $bits = count($items[$key]['bstream']); - $total += $bits; - } - return array($items, $total); - } - - /** - * convertData - * @param array $items - * @return array items - */ - protected function convertData($items) { - $ver = $this->estimateVersion($items); - if ($ver > $this->version) { - $this->version = $ver; - } - for (;;) { - $cbs = $this->createBitStream($items); - $items = $cbs[0]; - $bits = $cbs[1]; - if ($bits < 0) { - return -1; - } - $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($ver < 0) { - return -1; - } elseif ($ver > $this->version) { - $this->version = $ver; - } else { - break; - } - } - return $items; - } - - /** - * Append Padding Bit to bitstream - * @param array $bstream - * @return array bitstream - */ - protected function appendPaddingBit($bstream) { - $bits = count($bstream); - $maxwords = $this->getDataLength($this->version, $this->level); - $maxbits = $maxwords * 8; - if ($maxbits == $bits) { - return 0; - } - if ($maxbits - $bits < 5) { - return $this->appendNum($bstream, $maxbits - $bits, 0); - } - $bits += 4; - $words = (int)(($bits + 7) / 8); - $padding = array(); - $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0); - $padlen = $maxwords - $words; - if ($padlen > 0) { - $padbuf = array(); - for ($i=0; $i<$padlen; ++$i) { - $padbuf[$i] = ($i&1)?0x11:0xec; - } - $padding = $this->appendBytes($padding, $padlen, $padbuf); - } - return $this->appendBitstream($bstream, $padding); - } - - /** - * mergeBitStream - * @param array $bstream - * @return array bitstream - */ - protected function mergeBitStream($items) { - $items = $this->convertData($items); - $bstream = array(); - foreach ($items as $item) { - $bstream = $this->appendBitstream($bstream, $item['bstream']); - } - return $bstream; - } - - /** - * Returns a stream of bits. - * @param int $items - * @return array padded merged byte stream - */ - protected function getBitStream($items) { - $bstream = $this->mergeBitStream($items); - return $this->appendPaddingBit($bstream); - } - - /** - * Pack all bit streams padding bits into a byte array. - * @param int $items - * @return array padded merged byte stream - */ - protected function getByteStream($items) { - $bstream = $this->getBitStream($items); - return $this->bitstreamToByte($bstream); - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRbitstream - - /** - * Return an array with zeros - * @param int $setLength array size - * @return array - */ - protected function allocate($setLength) { - return array_fill(0, $setLength, 0); - } - - /** - * Return new bitstream from number - * @param int $bits number of bits - * @param int $num number - * @return array bitstream - */ - protected function newFromNum($bits, $num) { - $bstream = $this->allocate($bits); - $mask = 1 << ($bits - 1); - for ($i=0; $i<$bits; ++$i) { - if ($num & $mask) { - $bstream[$i] = 1; - } else { - $bstream[$i] = 0; - } - $mask = $mask >> 1; - } - return $bstream; - } - - /** - * Return new bitstream from bytes - * @param int $size size - * @param array $data bytes - * @return array bitstream - */ - protected function newFromBytes($size, $data) { - $bstream = $this->allocate($size * 8); - $p=0; - for ($i=0; $i<$size; ++$i) { - $mask = 0x80; - for ($j=0; $j<8; ++$j) { - if ($data[$i] & $mask) { - $bstream[$p] = 1; - } else { - $bstream[$p] = 0; - } - $p++; - $mask = $mask >> 1; - } - } - return $bstream; - } - - /** - * Append one bitstream to another - * @param array $bitstream original bitstream - * @param array $append bitstream to append - * @return array bitstream - */ - protected function appendBitstream($bitstream, $append) { - if ((!is_array($append)) OR (count($append) == 0)) { - return $bitstream; - } - if (count($bitstream) == 0) { - return $append; - } - return array_values(array_merge($bitstream, $append)); - } - - /** - * Append one bitstream created from number to another - * @param array $bitstream original bitstream - * @param int $bits number of bits - * @param int $num number - * @return array bitstream - */ - protected function appendNum($bitstream, $bits, $num) { - if ($bits == 0) { - return 0; - } - $b = $this->newFromNum($bits, $num); - return $this->appendBitstream($bitstream, $b); - } - - /** - * Append one bitstream created from bytes to another - * @param array $bitstream original bitstream - * @param int $size size - * @param array $data bytes - * @return array bitstream - */ - protected function appendBytes($bitstream, $size, $data) { - if ($size == 0) { - return 0; - } - $b = $this->newFromBytes($size, $data); - return $this->appendBitstream($bitstream, $b); - } - - /** - * Convert bitstream to bytes - * @param array $bitstream original bitstream - * @return array of bytes - */ - protected function bitstreamToByte($bstream) { - $size = count($bstream); - if ($size == 0) { - return array(); - } - $data = array_fill(0, (int)(($size + 7) / 8), 0); - $bytes = (int)($size / 8); - $p = 0; - for ($i=0; $i<$bytes; $i++) { - $v = 0; - for ($j=0; $j<8; $j++) { - $v = $v << 1; - $v |= $bstream[$p]; - $p++; - } - $data[$i] = $v; - } - if ($size & 7) { - $v = 0; - for ($j=0; $j<($size & 7); $j++) { - $v = $v << 1; - $v |= $bstream[$p]; - $p++; - } - $data[$bytes] = $v; - } - return $data; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRspec - - /** - * Replace a value on the array at the specified position - * @param array $srctab - * @param int $x X position - * @param int $y Y position - * @param string $repl value to replace - * @param int $replLen length of the repl string - * @return array srctab - */ - protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) { - $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); - return $srctab; - } - - /** - * Return maximum data code length (bytes) for the version. - * @param int $version version - * @param int $level error correction level - * @return int maximum size (bytes) - */ - protected function getDataLength($version, $level) { - return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level]; - } - - /** - * Return maximum error correction code length (bytes) for the version. - * @param int $version version - * @param int $level error correction level - * @return int ECC size (bytes) - */ - protected function getECCLength($version, $level){ - return $this->capacity[$version][QRCAP_EC][$level]; - } - - /** - * Return the width of the symbol for the version. - * @param int $version version - * @return int width - */ - protected function getWidth($version) { - return $this->capacity[$version][QRCAP_WIDTH]; - } - - /** - * Return the numer of remainder bits. - * @param int $version version - * @return int number of remainder bits - */ - protected function getRemainder($version) { - return $this->capacity[$version][QRCAP_REMINDER]; - } - - /** - * Return a version number that satisfies the input code length. - * @param int $size input code length (byte) - * @param int $level error correction level - * @return int version number - */ - protected function getMinimumVersion($size, $level) { - for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) { - $words = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]; - if ($words >= $size) { - return $i; - } - } - return -1; - } - - /** - * Return the size of length indicator for the mode and version. - * @param int $mode encoding mode - * @param int $version version - * @return int the size of the appropriate length indicator (bits). - */ - protected function lengthIndicator($mode, $version) { - if ($mode == QR_MODE_ST) { - return 0; - } - if ($version <= 9) { - $l = 0; - } elseif ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - return $this->lengthTableBits[$mode][$l]; - } - - /** - * Return the maximum length for the mode and version. - * @param int $mode encoding mode - * @param int $version version - * @return int the maximum length (bytes) - */ - protected function maximumWords($mode, $version) { - if ($mode == QR_MODE_ST) { - return 3; - } - if ($version <= 9) { - $l = 0; - } else if ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - $bits = $this->lengthTableBits[$mode][$l]; - $words = (1 << $bits) - 1; - if ($mode == QR_MODE_KJ) { - $words *= 2; // the number of bytes is required - } - return $words; - } - - /** - * Return an array of ECC specification. - * @param int $version version - * @param int $level error correction level - * @param array $spec an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code} - * @return array spec - */ - protected function getEccSpec($version, $level, $spec) { - if (count($spec) < 5) { - $spec = array(0, 0, 0, 0, 0); - } - $b1 = $this->eccTable[$version][$level][0]; - $b2 = $this->eccTable[$version][$level][1]; - $data = $this->getDataLength($version, $level); - $ecc = $this->getECCLength($version, $level); - if ($b2 == 0) { - $spec[0] = $b1; - $spec[1] = (int)($data / $b1); - $spec[2] = (int)($ecc / $b1); - $spec[3] = 0; - $spec[4] = 0; - } else { - $spec[0] = $b1; - $spec[1] = (int)($data / ($b1 + $b2)); - $spec[2] = (int)($ecc / ($b1 + $b2)); - $spec[3] = $b2; - $spec[4] = $spec[1] + 1; - } - return $spec; - } - - /** - * Put an alignment marker. - * @param array $frame frame - * @param int $width width - * @param int $ox X center coordinate of the pattern - * @param int $oy Y center coordinate of the pattern - * @return array frame - */ - protected function putAlignmentMarker($frame, $ox, $oy) { - $finder = array( - "\xa1\xa1\xa1\xa1\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa0\xa1\xa0\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa1\xa1\xa1\xa1" - ); - $yStart = $oy - 2; - $xStart = $ox - 2; - for ($y=0; $y < 5; $y++) { - $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]); - } - return $frame; - } - - /** - * Put an alignment pattern. - * @param int $version version - * @param array $fram frame - * @param int $width width - * @return array frame - */ - protected function putAlignmentPattern($version, $frame, $width) { - if ($version < 2) { - return $frame; - } - $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0]; - if ($d < 0) { - $w = 2; - } else { - $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2); - } - if ($w * $w - 3 == 1) { - $x = $this->alignmentPattern[$version][0]; - $y = $this->alignmentPattern[$version][0]; - $frame = $this->putAlignmentMarker($frame, $x, $y); - return $frame; - } - $cx = $this->alignmentPattern[$version][0]; - $wo = $w - 1; - for ($x=1; $x < $wo; ++$x) { - $frame = $this->putAlignmentMarker($frame, 6, $cx); - $frame = $this->putAlignmentMarker($frame, $cx, 6); - $cx += $d; - } - $cy = $this->alignmentPattern[$version][0]; - for ($y=0; $y < $wo; ++$y) { - $cx = $this->alignmentPattern[$version][0]; - for ($x=0; $x < $wo; ++$x) { - $frame = $this->putAlignmentMarker($frame, $cx, $cy); - $cx += $d; - } - $cy += $d; - } - return $frame; - } - - /** - * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits. - * @param int $version version - * @return BCH encoded version information pattern - */ - protected function getVersionPattern($version) { - if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) { - return 0; - } - return $this->versionPattern[($version - 7)]; - } - - /** - * Return BCH encoded format information pattern. - * @param array $mask - * @param int $level error correction level - * @return BCH encoded format information pattern - */ - protected function getFormatInfo($mask, $level) { - if (($mask < 0) OR ($mask > 7)) { - return 0; - } - if (($level < 0) OR ($level > 3)) { - return 0; - } - return $this->formatInfo[$level][$mask]; - } - - /** - * Put a finder pattern. - * @param array $frame frame - * @param int $width width - * @param int $ox X center coordinate of the pattern - * @param int $oy Y center coordinate of the pattern - * @return array frame - */ - protected function putFinderPattern($frame, $ox, $oy) { - $finder = array( - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" - ); - for ($y=0; $y < 7; $y++) { - $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]); - } - return $frame; - } - - /** - * Return a copy of initialized frame. - * @param int $version version - * @return Array of unsigned char. - */ - protected function createFrame($version) { - $width = $this->capacity[$version][QRCAP_WIDTH]; - $frameLine = str_repeat ("\0", $width); - $frame = array_fill(0, $width, $frameLine); - // Finder pattern - $frame = $this->putFinderPattern($frame, 0, 0); - $frame = $this->putFinderPattern($frame, $width - 7, 0); - $frame = $this->putFinderPattern($frame, 0, $width - 7); - // Separator - $yOffset = $width - 7; - for ($y=0; $y < 7; ++$y) { - $frame[$y][7] = "\xc0"; - $frame[$y][$width - 8] = "\xc0"; - $frame[$yOffset][7] = "\xc0"; - ++$yOffset; - } - $setPattern = str_repeat("\xc0", 8); - $frame = $this->qrstrset($frame, 0, 7, $setPattern); - $frame = $this->qrstrset($frame, $width-8, 7, $setPattern); - $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern); - // Format info - $setPattern = str_repeat("\x84", 9); - $frame = $this->qrstrset($frame, 0, 8, $setPattern); - $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8); - $yOffset = $width - 8; - for ($y=0; $y < 8; ++$y,++$yOffset) { - $frame[$y][8] = "\x84"; - $frame[$yOffset][8] = "\x84"; - } - // Timing pattern - $wo = $width - 15; - for ($i=1; $i < $wo; ++$i) { - $frame[6][7+$i] = chr(0x90 | ($i & 1)); - $frame[7+$i][6] = chr(0x90 | ($i & 1)); - } - // Alignment pattern - $frame = $this->putAlignmentPattern($version, $frame, $width); - // Version information - if ($version >= 7) { - $vinf = $this->getVersionPattern($version); - $v = $vinf; - for ($x=0; $x<6; ++$x) { - for ($y=0; $y<3; ++$y) { - $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - $v = $vinf; - for ($y=0; $y<6; ++$y) { - for ($x=0; $x<3; ++$x) { - $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - } - // and a little bit... - $frame[$width - 8][8] = "\x81"; - return $frame; - } - - /** - * Set new frame for the specified version. - * @param int $version version - * @return Array of unsigned char. - */ - protected function newFrame($version) { - if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) { - return NULL; - } - if (!isset($this->frames[$version])) { - $this->frames[$version] = $this->createFrame($version); - } - if (is_null($this->frames[$version])) { - return NULL; - } - return $this->frames[$version]; - } - - /** - * Return block number 0 - * @param array $spec - * @return int value - */ - protected function rsBlockNum($spec) { - return ($spec[0] + $spec[3]); - } - - /** - * Return block number 1 - * @param array $spec - * @return int value - */ - protected function rsBlockNum1($spec) { - return $spec[0]; - } - - /** - * Return data codes 1 - * @param array $spec - * @return int value - */ - protected function rsDataCodes1($spec) { - return $spec[1]; - } - - /** - * Return ecc codes 1 - * @param array $spec - * @return int value - */ - protected function rsEccCodes1($spec) { - return $spec[2]; - } - - /** - * Return block number 2 - * @param array $spec - * @return int value - */ - protected function rsBlockNum2($spec) { - return $spec[3]; - } - - /** - * Return data codes 2 - * @param array $spec - * @return int value - */ - protected function rsDataCodes2($spec) { - return $spec[4]; - } - - /** - * Return ecc codes 2 - * @param array $spec - * @return int value - */ - protected function rsEccCodes2($spec) { - return $spec[2]; - } - - /** - * Return data length - * @param array $spec - * @return int value - */ - protected function rsDataLength($spec) { - return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); - } - - /** - * Return ecc length - * @param array $spec - * @return int value - */ - protected function rsEccLength($spec) { - return ($spec[0] + $spec[3]) * $spec[2]; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRrs - - /** - * Initialize a Reed-Solomon codec and add it to existing rsitems - * @param int $symsize symbol size, bits - * @param int $gfpoly Field generator polynomial coefficients - * @param int $fcr first root of RS code generator polynomial, index form - * @param int $prim primitive element to generate polynomial roots - * @param int $nroots RS code generator polynomial degree (number of roots) - * @param int $pad padding bytes at front of shortened block - * @return array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
. - */ - protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { - foreach ($this->rsitems as $rs) { - if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize) - OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) { - continue; - } - return $rs; - } - $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); - array_unshift($this->rsitems, $rs); - return $rs; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - // QRrsItem - - /** - * modnn - * @param array RS values - * @param int $x X position - * @return int X osition - */ - protected function modnn($rs, $x) { - while ($x >= $rs['nn']) { - $x -= $rs['nn']; - $x = ($x >> $rs['mm']) + ($x & $rs['nn']); - } - return $x; - } - - /** - * Initialize a Reed-Solomon codec and returns an array of values. - * @param int $symsize symbol size, bits - * @param int $gfpoly Field generator polynomial coefficients - * @param int $fcr first root of RS code generator polynomial, index form - * @param int $prim primitive element to generate polynomial roots - * @param int $nroots RS code generator polynomial degree (number of roots) - * @param int $pad padding bytes at front of shortened block - * @return array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
. - */ - protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { - // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2) - $rs = null; - // Check parameter ranges - if (($symsize < 0) OR ($symsize > 8)) { - return $rs; - } - if (($fcr < 0) OR ($fcr >= (1<<$symsize))) { - return $rs; - } - if (($prim <= 0) OR ($prim >= (1<<$symsize))) { - return $rs; - } - if (($nroots < 0) OR ($nroots >= (1<<$symsize))) { - return $rs; - } - if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) { - return $rs; - } - $rs = array(); - $rs['mm'] = $symsize; - $rs['nn'] = (1 << $symsize) - 1; - $rs['pad'] = $pad; - $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0); - $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0); - // PHP style macro replacement ;) - $NN =& $rs['nn']; - $A0 =& $NN; - // Generate Galois field lookup tables - $rs['index_of'][0] = $A0; // log(zero) = -inf - $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0 - $sr = 1; - for ($i=0; $i<$rs['nn']; ++$i) { - $rs['index_of'][$sr] = $i; - $rs['alpha_to'][$i] = $sr; - $sr <<= 1; - if ($sr & (1 << $symsize)) { - $sr ^= $gfpoly; - } - $sr &= $rs['nn']; - } - if ($sr != 1) { - // field generator polynomial is not primitive! - return NULL; - } - // Form RS code generator polynomial from its roots - $rs['genpoly'] = array_fill(0, ($nroots + 1), 0); - $rs['fcr'] = $fcr; - $rs['prim'] = $prim; - $rs['nroots'] = $nroots; - $rs['gfpoly'] = $gfpoly; - // Find prim-th root of 1, used in decoding - for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) { - ; // intentional empty-body loop! - } - $rs['iprim'] = (int)($iprim / $prim); - $rs['genpoly'][0] = 1; - - - for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { - $rs['genpoly'][$i+1] = 1; - // Multiply rs->genpoly[] by @**(root + x) - for ($j = $i; $j > 0; --$j) { - if ($rs['genpoly'][$j] != 0) { - $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)]; - } else { - $rs['genpoly'][$j] = $rs['genpoly'][$j-1]; - } - } - // rs->genpoly[0] can never be zero - $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)]; - } - // convert rs->genpoly[] to index form for quicker encoding - for ($i = 0; $i <= $nroots; ++$i) { - $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]]; - } - return $rs; - } - - /** - * Encode a Reed-Solomon codec and returns the parity array - * @param array $rs RS values - * @param array $data data - * @param array $parity parity - * @return parity array - */ - protected function encode_rs_char($rs, $data, $parity) { - $MM =& $rs['mm']; // bits per symbol - $NN =& $rs['nn']; // the total number of symbols in a RS block - $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form - $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form - $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form - $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block - $FCR =& $rs['fcr']; // first consecutive root, index form - $PRIM =& $rs['prim']; // primitive element, index form - $IPRIM =& $rs['iprim']; // prim-th root of 1, index form - $PAD =& $rs['pad']; // the number of pad symbols in a block - $A0 =& $NN; - $parity = array_fill(0, $NROOTS, 0); - for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) { - $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; - if ($feedback != $A0) { - // feedback term is non-zero - // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must - // always be for the polynomials constructed by init_rs() - $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback); - for ($j=1; $j < $NROOTS; ++$j) { - $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])]; - } - } - // Shift - array_shift($parity); - if ($feedback != $A0) { - array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]); - } else { - array_push($parity, 0); - } - } - return $parity; - } - - } // end QRcode class - -} // END OF "class_exists QRcode" -?> diff --git a/phpqrcode/cache/frame_1.dat b/phpqrcode/cache/frame_1.dat deleted file mode 100755 index be28fea..0000000 --- a/phpqrcode/cache/frame_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -xڝ E9u`"PńC牗T!0$ -EɲQmh۾9{kI" 9Ln)Ap־>^zmnŖ;mn \ No newline at end of file diff --git a/phpqrcode/cache/frame_1.png b/phpqrcode/cache/frame_1.png deleted file mode 100755 index 86ce6e98d8cf7071291d5e5bb39bc3080511c8b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dx33?wJtG`|X@*aCb)T!Hle|NocXoPQU{GWK+F z45^rtobc!Hfq>uNnVVn7Gg`2HlysJm`1k++!4KjchA)1}^Yl3E66=VaXwbng!p`vB WU-#~W{*xdZ7(8A5T-G@yGywobm@6p& diff --git a/phpqrcode/cache/frame_10.dat b/phpqrcode/cache/frame_10.dat deleted file mode 100755 index aff163f6882e1c842881c539160539ee97221e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmV;-05ku1+U=K34ul{KMqP93Nm#TyxdGe+ZZ`bX2|6GY6RiCuCX1^|Hy)_wA3>UwXVkes{2iDcbZs(b-_ G?>v^)7G+HU diff --git a/phpqrcode/cache/frame_10.png b/phpqrcode/cache/frame_10.png deleted file mode 100755 index dbfcd70b588c9cc508d210d761ca285c962e70c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ?3?#Q*6Fdf_*aCb)T!Hle|NocXoPQU{s`qqp z45^rNcH&0P1_Kcn{i)eEQ&eWabo5TEo z<(=q;l{2~SNFHOk7+K+Z++>o}0+W;js(lQ_L5J;4XHRbpJ@7EKSbjtGxs>0TanIFf yTerS?Jf(G)Wt_o(rC4{V)qPjP^(|O~A28=0dj4ToPRUb}EH+ z?=;|LU8z+!qM$&p(|BcWyT^0wyzYLMW@>oYiN^Dsz8hTJ4a-aiVeGGljlcQ?PgyF*WC@)ePT+&@l!`0?ief1~n6 zE|yl^gW5e`nKwIinOvP@sie!fPIxQBN@sPwvjzdvtR(AR7bMPLqt$5hLLY|jw(O$c@esqcjU~XWxX2%DQ}j2 Ypk>~2FWzvVWdEB3>HkBaKPQDn?w1{Br2qf` diff --git a/phpqrcode/cache/frame_12.png b/phpqrcode/cache/frame_12.png deleted file mode 100755 index 8ba67822cdbeb547858ff6fc50cacee24a1b7d39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^jv&m)3?#Q$MzaAawg8_HS0MfW|No^o=iddgdOckn zLn`JZC;Z`O`p;)zaHT2o|6@ssn1en08x5|_?@qWT|MUNU=7X>P-D6i`V>=dLP>_)D zgJ10T|NV^*^<88qe3j=qkQ8w3g4pi>{%_LN%!j{MZKyvjEwPU&^5g&i?aJMXS9tf# z))chnOn-VfGWh@Dzii+24R{?7GfXmbNLp7=x~^a^N0{!Mqa4YM488*Y@7T!EMuc4o**_dv29=tg%zuR9}#CwLe ZF7lm6+oM%3(p}KSMZA}4^aZ5yN}69FYBT@< diff --git a/phpqrcode/cache/frame_13.png b/phpqrcode/cache/frame_13.png deleted file mode 100755 index 6e49d35a02fdca84cbce7cbdcc4455a8f6c7a3bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^t{}|F3?$W@cV+=8wg8_Hkl_FS|CipJe;3GV_jGX# zshD$j(m~D!10L6U|G3>D>;fX{1#EjgrWdpJzq`==!Zpb!r-Z@r!+bgW{TFJO+!qN- zO!?Nbz~r}2caWn=<;hYT--4|xm^^H6ZOHEH)LZFp|21ezZE(M-7khSp>&l1M=G~k7 z```Ke>ZO4uStq~s?ri>iZOio6Z8x~5aew=^?BI!1D~3ap?Te2HrSt=x#Ng@b=d#Wz Gp$P!f)Kr=P diff --git a/phpqrcode/cache/frame_14.dat b/phpqrcode/cache/frame_14.dat deleted file mode 100755 index e9ae093296aa29fab5e9902b6f08c589fb0ada98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmV<90382#+U=M@3dA4`MZ5Oa11^$Xy@B3DZ#HVvL77flO`r_qyJ{$pN0cm*QcbkW zOb{?`fMilEnI}OcLM9cXSrSxIB``^d*Q8K#Sp&p|blj)ly$_eQu1|D#ZtYL-`P`_v z&)r4JoKwyYFt*0oxjyAsirGHbg&iU}F_Jo|lREvc)7@EgS~DZ_@w7&yaPY@qP1;GU zPx{8yNuAV5=eW*sedFq+PER-?LOv2s0FYrKP6Y+uPUG`wUqQUsGc*0ziH*;3-ma%} dV(p*WKJj*9?cGU|IJ?7+#M);zc>`M4w|A(xa#R2S diff --git a/phpqrcode/cache/frame_14.png b/phpqrcode/cache/frame_14.png deleted file mode 100755 index efc36c034f1a851498e5afad249adcce3d9fb04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^o*>M~3?#kx&YTaV*aCb)T!Hle|NocXoPQU{>hg4P z45^rNchW}Q1_K_Jxm}Srn$(yB6x19;G$JQ*YGh^#@P1G+>r7-mB7W`V*G+#Woopx# zaXH*8JW=$>j6!jp4LdeJ%jrLRbWNrUPz|e%?4;ffl``SFGrY?`?QLBi&=CD)URb+W z;hsD0-;#Cz-B}wlN7VYo-djpFrLW5Bvr5*ct<9@=upq-IF3r5?k;t7x_kgZq@O1Ta JS?83{1OWKuRWASl diff --git a/phpqrcode/cache/frame_15.dat b/phpqrcode/cache/frame_15.dat deleted file mode 100755 index 18727818d76dba4873f5993f6c9ba948ca4646af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmV zjE0Ef4oN1(k{KEk$4bexVm9YiXdC56v{3T$rBr2ZX>#9!_g z`B^`!y7Nq9&A4060Wo%qv*Ufsu{CCYT^E&9np3604Q_DzFE?pw^~|@kYVIa#&+I*` zl@Y;Kkq??`U*qt@M8@#wp?=9QD&F@s(Gu5We?xHWW={>BMTjUwEzGB diff --git a/phpqrcode/cache/frame_15.png b/phpqrcode/cache/frame_15.png deleted file mode 100755 index a9f416c7cf6d12d66b42288ca30634bd231620ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^z97uV3?y$Jul@|A*aCb)T!Hle|NocXoPQU{n&9c; z7*a7OIpGgKW4(k#*1|KZ|Y7;q&c({geOlq6{l_|NsB~@BeOj2?=LKg_g#L z_90*X^SA8}*y`}CUV@?f(2QoEFV40{_R4EX?7Qw<^Koy}!|cERKm4zM{J-8+&^5^V zM2+FAWR7Cxrk}D0bN=>!U_F$7K!)M7p-w2XYph^ate~2LVYZ-;n}smLZ{Gt?94;j$ Q0^P>o>FVdQ&MBb@0G@4Fe*gdg diff --git a/phpqrcode/cache/frame_16.dat b/phpqrcode/cache/frame_16.dat deleted file mode 100755 index 60af678..0000000 --- a/phpqrcode/cache/frame_16.dat +++ /dev/null @@ -1 +0,0 @@ -xA E]sIX;n6`qW6`%A/3!!g̡1N) E|;>6⸏97$c]kkw1[mC͜cR>E,hʼnp#xFyWVWG3+˓S}Ğ#G8b^c^cpc&3YQ"vk9܇} ĿQL/ \ No newline at end of file diff --git a/phpqrcode/cache/frame_16.png b/phpqrcode/cache/frame_16.png deleted file mode 100755 index 6ac8fe890573bd9ec52af39a315ac3ab4ea2821f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGt3?wHw-Y5l9YymzYu0Z<#|Nl#G&c6#}b$Gfs zhE&W+PWZ#m$}S<1weXDnM;@Ma0pIRB@R(Uk#Imf`XJ1(VT~b2AdEtS^#)tMHfByex zYuj(|)!|#c1w;4Yo6V7boNcfCeZ$Lh|MkLuTKNe-qW;_ev6oobrMz06=bb#S{I8Dh zN*l`;cPanr7UAppFZhu8w7WuKxXRac9?ujuXHUG*!(qm7^gY)#$(yb3fo@{(boFyt I=akR{0Keo@^#A|> diff --git a/phpqrcode/cache/frame_17.dat b/phpqrcode/cache/frame_17.dat deleted file mode 100755 index 87f0cf593bab1049b794e2cd5af31a03aed5ae4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmV??y z+zk`^4Hi`JDI!!RUucn1n-C-N9Fb z^_i|y`igmlD_r3USGeLnfcpUE6|QiFD_o!A%FM(h?MeyC;;xkP+jach+JBqBM9KYfaSc^$Z&>9G^P0tbL9Kb? diff --git a/phpqrcode/cache/frame_17.png b/phpqrcode/cache/frame_17.png deleted file mode 100755 index 5b929ac736efe8f6d1985337c1177744c1269ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^p&-o23?!MXtt5dITYyi9E0F&G|NqjP^X~##9iA?Z zAr*6y6aMhChD%6fCBE4#FAy~=;3R%V0whYqvPd*ASAoyV)#iDwF3O@+^;xolwc$WL45Dpax@=q3hFS3j3^ HP6<әt3;H#љt3Y+oghٽlnF>i^#awm;g~pgNs{6zp' \ No newline at end of file diff --git a/phpqrcode/cache/frame_18.png b/phpqrcode/cache/frame_18.png deleted file mode 100755 index ee0d6a35e2e6a84e715d5eb5b4fdc9b5d2749abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^ks!>-3?%c9O1%M6YymzYu0Z<#|Nl#G&c6#}&Gd9} z45^rtobZRAwO&R-A}euD{dY-;n8Z2%#V16aW903$A%y{rCU=?+2?S zoD&%`Zq?5?^Z!3DPkmyQ!<_#d4AUG7+P3l-Ff2$saPI&Ek5tBsDdq+>Yyb1R)Ia|J zpWl75<3-~We~dpEEmriJ=c8wIT*8-4vt+_y-iROtCy{xt9gWtVsEV2B>-_MFQnAED a3kLr4d-pH(c*O{GB!j1`pUXO@geCyv16v^g diff --git a/phpqrcode/cache/frame_19.dat b/phpqrcode/cache/frame_19.dat deleted file mode 100755 index 95e26ad..0000000 --- a/phpqrcode/cache/frame_19.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA - E.No7ћiiRN2W%x@ڜ' -u6.*S;}àT zrt%,};)ZLP$qgLdJ;w.]z#[͝Og" B}};w#1Gb;w_C+w@Dfu2N9R7|pWkk \ No newline at end of file diff --git a/phpqrcode/cache/frame_19.png b/phpqrcode/cache/frame_19.png deleted file mode 100755 index 20fddd84c87b089846e770d1f605bb2ad7f57c71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^u^`OI3?%>V|Iq-X*aCb)T!Hle|NocXoPQU{n&#=^ z7*a9k?UaqYhYUnq&Wq-jC5YuSB#B&dnb|T?LRr=$Z_R}Tk2{2ZJNXJK?z>}STkBod zD!Ahe?+Y#-&W#RvJnw{;%)2x3`m?>pT<459AMQBAm|$4*AhL{Qjqyw_`&^NPya`bn zXJgWHCRV@tu;iM2+Sbh*zvtZi6J38hrG4+=)_Z5WUzM+1``TYoxK{mFuJ#L=ri0wm XqQq6W4|?kYUC7|+>gTe~DWM4f0svZN diff --git a/phpqrcode/cache/frame_2.dat b/phpqrcode/cache/frame_2.dat deleted file mode 100755 index 7e42f31..0000000 --- a/phpqrcode/cache/frame_2.dat +++ /dev/null @@ -1 +0,0 @@ -x͒ F{v& &Y+?Z1S'y!a815&۴HٞclF1#6 f6O7C֏8gIfB\DԻ( \ No newline at end of file diff --git a/phpqrcode/cache/frame_2.png b/phpqrcode/cache/frame_2.png deleted file mode 100755 index 9c150ebe3c6343f6eb7549ec855a85c65de7604d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~;3?%=liz@&rwg8_HS0MfW|No^o=iddgTs>VJ zLn`JZC;X{zXk7U1e=Qr^_5b1%IX6fouV7|A3{)sB@vn(vQN$aEu-Zyy=Ewg(ur1JZ on5OM)8&Req;!^#!TfKm!>(UHx3vIVCg!03uy4-2eap diff --git a/phpqrcode/cache/frame_20.dat b/phpqrcode/cache/frame_20.dat deleted file mode 100755 index d5ecc1d8a0be752c422607ca863710fb41e89f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmb=p^>&so*I@;L*3I9pv5Fh-u3+BVd2h|XrM?Rygy#mlsE%yq{QN_rm3^kbraf_K zT{CJkWkNo9UY6CcnsV--^u zOJldbdLR|gckNx0zDb^tqE2c~fteS{QV^$$s-(VRP{&d+%}!k2n8hWL&;YFRNm@X@0pL0J~;%WB>pF diff --git a/phpqrcode/cache/frame_20.png b/phpqrcode/cache/frame_20.png deleted file mode 100755 index 23a061d5442e5950dc57ae4e3f754a72b18ff53a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^i6G3#3?%=YhPDX_8iU0msvcT2m((dUcsbb;eOISnHE*Dg<1ej05g z6TelqVW*J3LxB0VBTn;T9{U-YPuzYYm+{WVu)4`tCvuk0J$+=^JinE@{pYYme)_^G zRCKb+Ysa%PrSIR~y}9%L-~0HO`-ivRxp~21a(d3@Y0=B8FU(feo3S(D-WC(-B3)aC Yhx#Rc#-1{#fi7h5boFyt=akR{0I{51asU7T diff --git a/phpqrcode/cache/frame_21.dat b/phpqrcode/cache/frame_21.dat deleted file mode 100755 index 1974dd9..0000000 --- a/phpqrcode/cache/frame_21.dat +++ /dev/null @@ -1 +0,0 @@ -xA E]sIX;n6Upв]٘< i-eW)ŕ…H\jvqHL\6ЅrILܹ%@Vv(P4|Xngɝ~]Du1Us S\,2N?DKF-:eJ]p_,a0` X` w,` X]5 Y4{2vJs9)u۹,]^_7$_ \ No newline at end of file diff --git a/phpqrcode/cache/frame_21.png b/phpqrcode/cache/frame_21.png deleted file mode 100755 index 291598c72d21bac6548d649a4c0ae361a3f3c281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^sUXbA3?%b5?e76nYymzYu0Z<#|Nl#G&c6#}E%0=4 z45^s&c8Ve2Ap-%H>!P`J6Rz)A#2UEl5$}@DKW0@L!ESpLCP{0HM08I+w9mQHp{3|< z#uoLvV(f=)_!nr4*yb$UIO$8w3qQFZD{qDu=PBg(==aGzoAaDygT+2UZ#}`II(`@a zTfYDFcHhw_Mf$&32ite~e#^+LRiYnGe^u zy!rp1m#1E^%JI(s6AU`tXJpwn$-ff(mztmOBd(vL_Y+&&`mg^F|356yrZelFIO- 7p 7$}>ɷ7p tssrs Vmҹ}R~7&?7ԦIbh{<Mi- \ No newline at end of file diff --git a/phpqrcode/cache/frame_23.png b/phpqrcode/cache/frame_23.png deleted file mode 100755 index b8f16ae239dd9f4c18c18191589b0f98e896c750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^xggBQ3?wI-)rtZswg8_HS0MfW|No^o=idcMc)B=- zRLn_E_|wl2FCmdNaYwkl!49Ruey#-t=bLuQzgozl!F}cTUb(J&bqNVPt_=cgZT~$s z{jWFp<9dnv$v=0tgvgY49MfCbML0qY4m1n4Xi4n5_TOEBC(>kZ^AY#v;4+grFO{vO z&Rv<5>-tpA?P=FPcV6u)6IiDGIq|S3riwW=Ht_4NMYDR2t#y5Bw5WhlxO>L&-&1e; Q10BcU>FVdQ&MBb@0PfXRdH?_b diff --git a/phpqrcode/cache/frame_24.dat b/phpqrcode/cache/frame_24.dat deleted file mode 100755 index 7b92e29..0000000 --- a/phpqrcode/cache/frame_24.dat +++ /dev/null @@ -1 +0,0 @@ -xA EMX0;nVP4HSSxU3/O LiJ4V JC%6VR&DBHjDJ??BlcDZ'UXUޏ0ywįj똳3ścj{:GqGNv;笓J <]#8#8H'GqGtr:9#8#8ؓhNt_>teS^\gQe?vuo;>*wlm \ No newline at end of file diff --git a/phpqrcode/cache/frame_24.png b/phpqrcode/cache/frame_24.png deleted file mode 100755 index 397c64f8533159fe3c792420d93cab3ec64c673c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qx3?y%CxHlO{u?6^qxB}__|Nk$&IsYz@wcOLi zF{EP7+o>CQ4;cu!o)=Bt;3dWH(5PX|Xd0Tbewt9=(giM&ioPz%uZwq_{AtYK_=L;b z-~axk|Ds~-#=Rctl_DS6E<4m{++hxOxW(*z(!L?xL2jbS`@Xaf{qGdGWmpvR5thb97@%;4$j=d#Wzp$Pzhc4tul diff --git a/phpqrcode/cache/frame_25.dat b/phpqrcode/cache/frame_25.dat deleted file mode 100755 index ba12518..0000000 --- a/phpqrcode/cache/frame_25.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA - s낋]rxY51mMBG -*Sx|Ua5ƵZ-,1HPRjX5iG>WR/+uT廯 ӯ嗴u[Sa[kv5+5nJ%+VXbŊ߬u'SRtzZ++VXbŊٟٟٟ+VXb}Ŋ+VXVI+kq[toVZvoNVw}{r<ýR"R] Wr} \ No newline at end of file diff --git a/phpqrcode/cache/frame_25.png b/phpqrcode/cache/frame_25.png deleted file mode 100755 index 25bc4454afbe21949bfd01d1a8bbab713486ae65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^r6A163?#iy+587mYymzYu0Z<#|Nl#G&c6#}E%$VB z45^s&cB&%ZAqN51|5`cu2Qt4gsF-;4Ir?6nTp+=+Nr<&Ydrf9n!e{G{vpig`o@IAV zpT3{+yxVcXEa?kbazcxq6{lLB{}VM?`;*JP)#Y~fCz=^>mۚ?vmg?ұηdCUIkE\Msfafa>[sӈ9쬩ެ8b]LgEo w1 \ No newline at end of file diff --git a/phpqrcode/cache/frame_26.png b/phpqrcode/cache/frame_26.png deleted file mode 100755 index f4a6b393861525908d76f29c6d8a3bfc2ba4f747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^l_1Q>3?$V}WIz&Z0X`wFK>Gjx|4VPqzYAoo^mK6y zshE?T@TZ^UpG-o+3Rkfo(&rC6=+gP1FW~!t-{pbx-~a#LB)q!sxL;FM;QZsxnjpG@X|Wc^3Whe7pc$LY4HynfX%(+id5E{n0v40R%_lqrDMPR_=K#Nbs1J=Z*FW%KHev5UH0bx zvhP3A?5`T{eKs|C?=(67e>XRlv;V$O{Jat(4^}wWvJV8GgET;O7Rx~3dn=g8x81kq zTBsYH(o>B~k(w6wdiUP<-~a4d_f^K|^b>jOg|*Ku{@y(>H?~&4sQTS6>xH+g>q>Tg S)BB(oTgzV+tiQ0S`YHfvkCqVt diff --git a/phpqrcode/cache/frame_27.png b/phpqrcode/cache/frame_27.png deleted file mode 100755 index 8419ec2301e8c0278f9f86d97417d51d3df000bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^wIIyM3?#Su{YwKY3Z=Ttv zWf2y7&zVY?&I!gH*lL(C<3L-FqWk?PvhJVcioOWu?Vls-VEE&Jg0;|sb157vj!F0I zoFJt8?3CA*9ZT0UM?PxZcc8vtF);OXk;vd$@?2>|KWW^(`l diff --git a/phpqrcode/cache/frame_28.dat b/phpqrcode/cache/frame_28.dat deleted file mode 100755 index 8cbaa1961bed61c3d774192448857480eb49762f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmb=p^>&UUU$cUMYi#vvHNCX5BIcc(ch)S(P&rt#xF_>o`BhIHdwqxJ`pXR0ab3O; zyhvzU>thM$uzdDevN_u7>@yw8*(S-Z(T=tZ`1|rey6L^W%k_%NF5F|Ui=6h%{9e%d zZ;qDSdF$l&FG(-^99&vHr#0ZpbjM5kK3J?R3cg=E!9=w8_VG%C;KB!IWDhW~88k5R zBz#a~TYLY*^54yi?c%-~`hWLu-)r%Km;K+Pv$J34CnoIU-@%{2z$^h(euDc6>nEnl zMr%QcZlKHrafo2K5)VwFf<8p>oeNCgzsZd&I##GMUwz`}E2+Yy_3mfghfV%>+;#2K w_7?4#@$=nu@tm|;Z8o*f=bqOl7=Ny{aυR-rn.ꯋ\T:*)|) , ,x_}:^RUoɢu~މX`XЏЏЏЏ_`X`XЏЏЏ_`X`XЏЏЏЏwbX`PU)D"c{z3<}^?bm잃a.] -{Q6uT,9 \ No newline at end of file diff --git a/phpqrcode/cache/frame_29.png b/phpqrcode/cache/frame_29.png deleted file mode 100755 index ffe072c868268ea77f05f71c17088021d549090d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^tsuP;BJn$?U}wS}0TXykDcgTe~DWM4fn*mjQ diff --git a/phpqrcode/cache/frame_3.dat b/phpqrcode/cache/frame_3.dat deleted file mode 100755 index 188d531..0000000 --- a/phpqrcode/cache/frame_3.dat +++ /dev/null @@ -1 +0,0 @@ -x E{v& &Y+bk'ya:TXl޶$W+ӏv9}gR@H0YPBEm?s"bt2cn:ﺭ;YzQ7 \ No newline at end of file diff --git a/phpqrcode/cache/frame_3.png b/phpqrcode/cache/frame_3.png deleted file mode 100755 index 945ee7cb993022c3ba0081cdd6b833b92395b30c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^vLMXJ3?y@6zxn_vwg8_HS0MfW|No^o=iddgJUm?- zLn`JZC;a)}-nj7F|NHzr>;C`eQV>iqJa$2VtqrL1f5H!Lr4wnjD-wRh|KHox`0@XB rt_3F@rfGYe5mn(<%W`B5%F}Pb9F^HI>YU!D_xBYq^}BRWJ#p5u$@O~+U60g$ z^ZZ%%C&E6_>--Dp^Lw@H{+B%qvQk^Qjp5k3r)$sId8T^L{8KD*Wwpx3yDA4+gnbMS zvP`Zw$-FB!Z`b@c+Rxs&eZ4X_H(t}zN!in)_Pe(B-kBwv{Vn`0k`1A%fm#-_F9E_Q zHV6?QtI7cc&w)*Z5ts^pmI@a>n)4-LQd5VAxSF@+|0}%z9_8)t4X9Z8-TGsS+L_O` o3*N2iKjl*T?_}Zp7w1|m>#S{6FV2w-Q4O5Cykv#>|8j$;0GhIr$^ZZW diff --git a/phpqrcode/cache/frame_30.png b/phpqrcode/cache/frame_30.png deleted file mode 100755 index 75dbddd2416814ef91b71363c859c3dbe86f0802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^ogmD}3?!9ab#?(Mwg8_HS0MfW|No^o=iddgws^WY zhE&XXJ8dKHAp-$deb!SFYn&!CY6Q4UH4Jk7sONJ?V2XzJ1%+7_{OTQ#YUCIa<5O*I z@1FcVdoow(KLw+VEhS36DYCp#b}QPnZQP#yZF5>L_wIw#N8!&ZL32x5J2SZFRNT#W zJ+d{@@YEHq?4aMP=C-7+TKmm!p0e&81)Cc7+)G|xes$W5z3%q9Wf`gZcFvkf-|8dM zyYV櫷:ñA8-+mTbllltM&]ll&]Ill&]y 6` 6`iuyXWi\tz>.zk t77wJϔ4w҈85 \ No newline at end of file diff --git a/phpqrcode/cache/frame_31.png b/phpqrcode/cache/frame_31.png deleted file mode 100755 index b14d1fa267f229a5b21beb06401aaea3c7ee4673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^y&%lU3?w&9$bJT-*aCb)T!Hle|NocXoPQU{+Ue=y z7*a9k?X-=&hYSQ<^+j{d5~R!+0*%=60@{+AM5auc(!n|5PK2l6>q3RVA30i5E;U78 zzm!b-J6oUkrH>MO^Sih(w%FVJC(3=iBOLgbf7_Y;qQm^gYNmAkvubmKsBNb!r<>aC-Pn**9g*ߚ?aOkL_<[c>c˘uLI%#0#0#otѢ}4fv_)Eph5R881#0#0itZ#0#0#0itZ#0#0#0itZl0#09q"HܜHQ"L5}-Y׾k`>z鸳4&p!!`:5 \ No newline at end of file diff --git a/phpqrcode/cache/frame_32.png b/phpqrcode/cache/frame_32.png deleted file mode 100755 index 58d42db3c5b755228c7565cdf8128438559cfe1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^6G51f8A$#VJCOjS*aCb)T!Hle|NocXoPQU{+U@D$ z7*a9k?X-=&hYSQ<^`{N~#na9iwuURu!V?k}}KG;`at7keZ6HBO!j zPFw%CYT8codjH_FpLqjK{?_pC(kM^0-qBFEG_3wrT<*O&_g>F?-&noh_CE9X8vcLx zZ-?L5c<5S4(d*MS%jL4aFL*KcmFQoSBb$x~rEe4WKl3d;RlhCaH-pl}T98i}JYD@< J);T3K0RZV1Z(9HW diff --git a/phpqrcode/cache/frame_33.dat b/phpqrcode/cache/frame_33.dat deleted file mode 100755 index a261375..0000000 --- a/phpqrcode/cache/frame_33.dat +++ /dev/null @@ -1,14 +0,0 @@ -xA a޺@n7+*L++柮bb*LCc kHrjJ5Yi~0_TT}e>5b_w͟?\Rai+7W\wLUNL -+ -+jOkc\˩|%o} 8 -+ -+ -+ 3g -+ -+ -+3g@ -+ -+ -+:RXB9I=ko/Swؘٯ`gr_ٙYVSYzIefnmQoz > \ No newline at end of file diff --git a/phpqrcode/cache/frame_33.png b/phpqrcode/cache/frame_33.png deleted file mode 100755 index 924c728e0aa0b3c22b7537d833d53f072a923640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmV7LUZoG!D=_b+G>~XohCiGYUA3?`$qlQw=oFH)|?GM%W=ZP z?o-WP`{JCI-1j+kVd;lds9Q_l#)_e*e%!H*n2YxP(|eQ4yd?KKF7uLH<|VmLxpSZ$ z1MOt{Gd*JG7)eOIdQ#d>d~xt^_>>*JiBA`^i7E%w2i00000NkvXXu0mjf DAwYG& diff --git a/phpqrcode/cache/frame_34.dat b/phpqrcode/cache/frame_34.dat deleted file mode 100755 index 7ceb0259d4a6f14ad6d9e5d76eb87c07b034c711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmb=p_4bZoU$cP#>xCNzb)OE=JWTSu!=w6LqU*^gyy-W?Z;@;Fg>L`1=l-EkZ?iVvV?C0_X=i2_ zCW9G)ljhbgx7l(nwvgX`%e6^Q_5bh5(A^bzqxMK4)(Kt#i%i{@a^9b964fc@euQ;PW=~uiO$9&bgnPb zQZeW4^o^WMjsmX#U8f~jtBEBjv`tG?seT)Aq*3=qXXlI+_hnO3Z`!AqXdKG<^zh@1 z$2a89EJ`kxb5FQ`=(boyS7nhxxW0w*`IRj*&5GUQE?a*(lXrI>tApXq$M?>eXvpg? zJ7Dnt${M{rF8!;dRI6f&a!y#e`IJAq{!imf{LG6>4VD`%_D=Lmb(?#S3j3^P65% diff --git a/phpqrcode/cache/frame_35.dat b/phpqrcode/cache/frame_35.dat deleted file mode 100755 index 56bc3e28ee83b24767b00391773560ca842f0b44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmb=p_4e+@yk-Lt)(dC;l&Z2-bJsJ}Gu4L)&k?(_Yz24S#B<8tYk0!l*-FIIBjt?0 zZ`YVyJa2n|_x3Zdk9bXgHfz^qygTh2XweY|A-_q!&2k4t`5 zdHt-uf3>=7$NxRcHpcK?YhPbowodr?x--Th*X`3@Jbts=sCI7N@2dT+b7tjn%l`^M?L^?B>}TrgGEWxv+gtv>&1 z^SpAXK9B(~H-km1?tx8$7`Ys%2q^kG_8{C6zxh|wzed(x`wSQ9yIX(x>6}yP9JAN? zaAi*~^7>i6``g|}l``+#Pxx*7Q>a$?+fMp@&Wq;Q9mQL}|JJ)V^U3dOv#MPg=?~>E Qwf>fGyj#QM-^sTe06Gf6oB#j- diff --git a/phpqrcode/cache/frame_35.png b/phpqrcode/cache/frame_35.png deleted file mode 100755 index d29806c6037dea38b05d8211a0a45c2e0c1ff1d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmV69g+8T9FaOlD5lXr@5A{4g21 z`3F-KR1%=7ED2boeU%@kIrD;Vui5n8>omRhI!*7rPSbn8llib6 tcmDZ{$vZ*}#x^0hn~*mYfxOG)^abWznpY06{Y3x(002ovPDHLkV1fp`ZrcC= diff --git a/phpqrcode/cache/frame_36.dat b/phpqrcode/cache/frame_36.dat deleted file mode 100755 index 282c60d23bca6a7c3ac2c3da0744992f3415d8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmb=p_4ck~UbBG!>xDHtOI5|b@#Qg?H_pDw$;Z^XB}m*L@cxD_oki=_lM}=$=E<9G z-R?29c-FLpVq^dBT+!v^g&NTH_@wd)yXEcGyBzK-j`OqvsA7=ytvYW@9>9b z_WqKQLf0xI)<4~MTkdf{-#UAXb5bv_XIHKgJ-y+Ial~c2Rr$$h4+rJ0P5XKC?x8T> z8}0rlCMY_$@kss?KYU%i=k@&DYZIUS(0u#r`Qg$fYBKRcefj5YDxU=N96s;-dSNve zNU2c@M9){5FJQQ)9U&%Zbfx$L7;cb*sRL;UIPVCC2diGpI|Q*2B5lhKfv>@?fNH7t zol$&B)74DpqnE3hkLL7O>+2T(ei-}yr{??h8{VJ({BR!k#40|+{iXYjd3MGhD3d#O cr#P`%x8CVcM|J%hp|(5rsloS;^$2?d0KeI-=l}o! diff --git a/phpqrcode/cache/frame_36.png b/phpqrcode/cache/frame_36.png deleted file mode 100755 index 96ecb421354bec386b535fe1e2cf4fd753142013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmV+r0q_2aP)#C@Z9i(!~1M zrir*qV+k70-90^>68kqFj-O|}12;kA2%H6FtI=5KdLSEeASYjjHt&ri*^^Il@nz@$ zcM<0VP`V6=a&MyY!``k&|IeMgxU(i;@#22_fZ4~6ypj)cPBagDuD;9QQOl0fagwX_p(bdJihERcvP@-vOY{Y; W&Oa>B-?9<_0000W;+CoZ{7==byZrmTWaR#jx=*j}d9!=n z?jLue-7XczO-tXCTNhVr9_xF%CU42z`5zaC*qmOutsr!7Nc8d9(}S-rUG+8hGgqu? z>hF#zI+2@FPEJzwo~AQDvGQO3&(Hs_exLZN>iNf?wdd`Eg1#-+{C#?NzFg&`r^?Tk ze!Y~>4^#=)^407M7_OO)5CclC+`bSD6Zb-m25VS)uMGyjf-Qs@QzZ?7*Sz=JBAN4V zs?k%Ey^Est6oX4n+Z;cW+cNi&e)WmBGn&?4`2F$Yr!zA>_V(^buig{cW~=_xLjUnR b%i@}2^Cua-iuB0WJUmakbVYvd1M%+wXsyHf diff --git a/phpqrcode/cache/frame_37.png b/phpqrcode/cache/frame_37.png deleted file mode 100755 index fcc51627d75b1195d79e915e5ba5a26accff30b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmV+y0qFjTP)Q+l9uWqZrGW15EmmL1Za)FnMD)vS~08#pCh dPbukz=wHCg@a-IQ|2+Tz002ovPDHLkV1gG4c{u<8 diff --git a/phpqrcode/cache/frame_38.dat b/phpqrcode/cache/frame_38.dat deleted file mode 100755 index 71cf53e..0000000 --- a/phpqrcode/cache/frame_38.dat +++ /dev/null @@ -1 +0,0 @@ -xA0ЎuA2;Нk(gytp9$D\e^'t-aIFMSkIŤ:7|LkN8N7i}i,[WgӴ?31iN}}=OM:4)SL2eʔ)SL#$ JJM:}]L٧SQL2eʔ)SL2աPt(:)SL2eʔ)S:ECq2eʔ)SL2eʔECѡ8O2eʔ)SL2eTCѡPL2eʔ)SL2ݓsJCIKԂi93n_ +Ri4\g;% }an \ No newline at end of file diff --git a/phpqrcode/cache/frame_38.png b/phpqrcode/cache/frame_38.png deleted file mode 100755 index 89238f3c5bd6d3fa6aea44d2037dfd3bc0a34723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^D?yl%8AxVH_vZj9wg8_HS0MfW|No^o=iddg&Um^w zhE&XXJKd1$kb{7$dT5{Gy(7n%mk6AeQJ$Kzej0N`L_}BkhKVNY?%zz+J@k*Y+f^`a z^_k}%XBzDPc}byOdLr}0>WR7QehE+CtzjSL!0mG&m*?>2?tA~Zcn+}6IBv0`eDmq~ zc}z}+JJ0WJ_POR~GP(Dkvz2Uh;m>QHUB{HvnxDHtOI5|b@#Qg?H_jFnQdbgP@~WvsW^bbC&dz=Fbh`ibKL2SI zT-|A9x%8!2QQou6xhFC&&-ym4$aD9pW82OKdqz6mnsRx4=J8U#egE%mowI%0@84xI zZ4W<8zrSnRI_rgRZWpP2x%=6e@AT!byU*{w{_FTmgQ=a_yU*CBT#j3w|M=bQ)LTYp z-zJx@O!B(5Z`GEZo10QkPt%RwHa}ta_dLm$f4^*>CH-=s6v(7v&e*fR{ ztx~zGZ*4yp{T!$et^>&Eoe;)fc50TK5C1au;(Jh&pbBm$WPVLpzUJk@F9}r!=o)#a zk*D#WWv<`r;O<;6&F5D_CzowJTRZ36gVgy2`}e(i{XD+qP1dt!Yu@B<2_N6LRd3?0 je}Av+{;~a+3#!$wOf&lxJI6os@crUlGxJ^MEBXTf`CjAm diff --git a/phpqrcode/cache/frame_39.png b/phpqrcode/cache/frame_39.png deleted file mode 100755 index 1dc9cd1bc53a2e27ad5b61791c7a76cdab408123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^YeATi8A$#}%mtDRYymzYu0Z<#|Nl#G&c6#}?e%nV z45^s&cKSvxCPM)i^QmwDPN{$JaQO_kPo;GYt#kKIo$zc&c3+{t4%5trR)KEM%_$W+ zC*PSQGk)DUdv52RwA;cz%>sV@oL27Om%5WD`n|Bh@=ZQB4@JyxmgML?8g}V+>Zb|( zXHzc5U$%Rcbzopr09yKW761SM diff --git a/phpqrcode/cache/frame_4.dat b/phpqrcode/cache/frame_4.dat deleted file mode 100755 index 67b30e8..0000000 --- a/phpqrcode/cache/frame_4.dat +++ /dev/null @@ -1 +0,0 @@ -x E=u pجQCOM'ˏ$ @3eF\FNXRyؾC{a8R Ńa2@qkH1(`cj~0ܨعnXGĀ \ No newline at end of file diff --git a/phpqrcode/cache/frame_4.png b/phpqrcode/cache/frame_4.png deleted file mode 100755 index b72f9e70d374741d1d4ec4537b7a379088325669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^iXhC$3?y^40(5{BTYyi9E0F&G|NqjP^X~##UY;(F zAr*6y6aM`F&%o^b_W%Fyk`gih|L^bcaylaE>?|uG@sHV&`Ea~}XRw*|gxLT4_cSuT v*!F>Kf^<]߳bZn^AQ}[9^]ynajM܇K̘1cƌ3f̘1{W5}{7lMޚxI<Kαyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘1ۻٻ={αyl3f̘1cƌ3f̘SʑӒ7HK޼g\u_r'4[-]qL8ƝY1q!/(% \ No newline at end of file diff --git a/phpqrcode/cache/frame_40.png b/phpqrcode/cache/frame_40.png deleted file mode 100755 index 8034d862d60aed55180914d323aa4557f39c036f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmV+m0rdWfP)xUy&%?@Zqe$Lt^IHF*f5Ycy_0y589U#OP zDOgy2<>WYTpYrhA^tGLJe{+Ghzs|!@a34iK>1DI|zE}TO_YMEQ{K#kcE&Gwr@LTpH zpW(OcM?S;hKGje=R>w-jeWqvU%KmI=|;a=Y2bm$Ju*=arXY8`~`*2(t2@u R+XVms002ovPDHLkV1jNhe*XXf diff --git a/phpqrcode/cache/frame_5.dat b/phpqrcode/cache/frame_5.dat deleted file mode 100755 index d5dafe1..0000000 --- a/phpqrcode/cache/frame_5.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Eu7ЛZ|ND B0@R$l,->VKZ[Io+o1yT37=P9COrj~W-G?9JF6VLpcd diff --git a/phpqrcode/cache/frame_6.png b/phpqrcode/cache/frame_6.png deleted file mode 100755 index 05ca358b0ebc0c3a0b76df7bc0411af2d596f586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^njp-`3?wJ5o3s^3u?6^qxB}__|Nk$&IsYz@<>Tq% z7*a7OIpGgbjFGJ^N}+Uq<3Ul6SeNAsih33jb6-tP*oFY|>b2SQ8z)uR?vtd#dj@Cr|apornv1)El=m yfE)D&wC=s-ob2oKGnB!6a?|8|>$jotR__k)Tfb?1CbP75iyKQ(;+|ur1|Lo4=9^M0XYLiuS90INiM|3P! zl1w_Dw_=lP*>oFG#pgDRUYDi$t)1S^DCLO~UG_j|*#gebx3BZ+nH+yL4#Xe`MZ5Oaleo}by@B3DZ#Iau!Ks7Twck}KFFz0sl!D6kkmQ`t zEwPxAt7e4vK(tICs>9R+3CvUzZbGE0t`1I&>PRt0PIx4!4(e4n`AHE@7YTQ-GD-FT zU5Un`f|ct4S(0g==b;u6VVT$-+hayNZ>kV6cem$hSdySrt`hAq)&LF)(-K_0ARP&tIq1zdFuig-v-KQf|`xVm{I3hDX Dr=(<@ diff --git a/phpqrcode/cache/frame_8.png b/phpqrcode/cache/frame_8.png deleted file mode 100755 index db1f1877ab3aa0f221156a6c8ab461cf548b7c22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^h9Jzy3?w~+F2@5Ywg8_HS0MfW|No^o=iddg8a-Vc zLn`KMov@L&*+9hQeCRTV$kt=bOB^&Mo4IaE8~7hfU-_hp z>GjwD9k;ZU{x$DC`?c>k>SwyYUwnVQ%-n^a7#d|n|4z96z#8Zn22WQ%mvv4FO#qqh BQ^o)Q diff --git a/phpqrcode/cache/frame_9.dat b/phpqrcode/cache/frame_9.dat deleted file mode 100755 index d79295ee0f93bf3b101c220b436cc0d302b3dd72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmV;<05Sh~+U=G>4ul{KMO}02Nm#TyxdGe+ZZ;LFff1oFD-%8|o4)*%Sp6YHdA;?7 z06sMb75pI)g+!%pq7Eks1(Ax~0~7*wDR<~T*G1Lma@N`!#dGl;n!P;E()p>G>kd7u z??pPBm5wsHKNm@}RC?UEAu(m9sO7c1-s)A`rDjb%?QOHhl&f?!YX5jm&9&Z*<@HW4 z${vU~>O~9yjCv75*xjqWU*~WAGqlU$A+xo=8}e*Zc!_gVK9@YR<##wsNwa7{iF0qJ IFSFt|>Yb-#$p8QV diff --git a/phpqrcode/cache/frame_9.png b/phpqrcode/cache/frame_9.png deleted file mode 100755 index 74ddf08da2f671de67f1fed645afe705662e8424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^rXbA73?y%B7#ag9wg8_HS0MfW|No^o=iddgYCK&W zLn`L%ov@L!AwagA1{7>@m-%iy`qAdx51;UBica)=ne)?S3j3^P6=xt5c>OY+~gW)7igeMcUJuTaR$o&p-O;5+hmJG|D H^z#4!b%aZc diff --git a/phpqrcode/cache/mask_0/mask_105_0.dat b/phpqrcode/cache/mask_0/mask_105_0.dat deleted file mode 100755 index 97e9e5dfff667572d9451add45a3a5e05c157625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmb=p_4bw{SAzlr%YohNFaEDz7aTYx-~rdw7iUi!E!oMQ9qZ10=B~!Y1!Xh8FbC`Z zyZK8u`25eDzn4VhGJ|J-om&>Dy5;$~&1-gk)KCM0Wh*o*?Q>r*t&Z>8Q#|w7j5+Ec zQ8l$%fAdS<5uE#%zyDF50RnO9r|hm-%}`_g>f0!1_?Y+V!H}75vy!UUpR@9hH`4Vh H(~brJDN;^O diff --git a/phpqrcode/cache/mask_0/mask_109_0.dat b/phpqrcode/cache/mask_0/mask_109_0.dat deleted file mode 100755 index eadf83a..0000000 --- a/phpqrcode/cache/mask_0/mask_109_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x= -0 нi9'b$t^#ii?bK[AUF徝Ƶijx]m]2-ĖK~ Vw}X&Oɓ666666yR'%lllll/hlm dl3+mͫ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_113_0.dat b/phpqrcode/cache/mask_0/mask_113_0.dat deleted file mode 100755 index 5eb7f5d..0000000 --- a/phpqrcode/cache/mask_0/mask_113_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x; -0>I9+Es=ϤL1̄[FZU4?i<;7;P#W-[ݯ6ddddddc",;"sk摑Q&erw######L.摑Иy1^˲\3 v \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_117_0.dat b/phpqrcode/cache/mask_0/mask_117_0.dat deleted file mode 100755 index 781c7f8..0000000 --- a/phpqrcode/cache/mask_0/mask_117_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 }OrR,#3,o5Cq:;;wvNJZG=m} ѱ2iRkj_YYYYYYYYe_/WVVVVVVkd-Ϻ,#OZc]|{ž$ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_121_0.dat b/phpqrcode/cache/mask_0/mask_121_0.dat deleted file mode 100755 index 68810c3..0000000 --- a/phpqrcode/cache/mask_0/mask_121_0.dat +++ /dev/null @@ -1 +0,0 @@ -x1 О/w YMS8>2SFOEcW\ۼ{cpKGBКmxhfffffff/s22W|*d1*5̬RWas\xm~8߮r0wjsdm&y \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_125_0.dat b/phpqrcode/cache/mask_0/mask_125_0.dat deleted file mode 100755 index 2c73ef1..0000000 --- a/phpqrcode/cache/mask_0/mask_125_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA - н_TH`3AOL4 k(ewGW. #2} \Ygggggggggg_d>j^s;;;;;;;;;;'q;;;;;;;;;'˰qu_PYw{e=dG/ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_129_0.dat b/phpqrcode/cache/mask_0/mask_129_0.dat deleted file mode 100755 index 812ee8a..0000000 --- a/phpqrcode/cache/mask_0/mask_129_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - /*DE'hgt-}_pV \"b=s[J=8Dho۞' 0X ۴e0`  j" 0`Wf`^P0`2Ȁ  d07(Y/XLGby"pT \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_137_0.dat b/phpqrcode/cache/mask_0/mask_137_0.dat deleted file mode 100755 index f6d993b..0000000 --- a/phpqrcode/cache/mask_0/mask_137_0.dat +++ /dev/null @@ -1 +0,0 @@ -x1 О/+FZ?J L7Ժ*Ba%L~˻ʓCJYIWJ .K]R0a„ $INTwlLaL0a„ &Ld@PO0a„ &L0e@P?a„ &L0aDe@ &L0aMIlL&)dlgacR<$v,ɺ?U2] \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_141_0.dat b/phpqrcode/cache/mask_0/mask_141_0.dat deleted file mode 100755 index 8c685c8..0000000 --- a/phpqrcode/cache/mask_0/mask_141_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x= -0 нi9'EDx͘%I9+E{$m^&uS"D6ڟ]98UMbҾY[2拉Ĉ#F1bĈ%iRN潝ѳ#;#F1bĈN1i#F1bĈ#FtZ}Nk1bĈ#F1bktZ;#F1bFV-u"IoD-*7uj>bMV+ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_149_0.dat b/phpqrcode/cache/mask_0/mask_149_0.dat deleted file mode 100755 index d258350..0000000 --- a/phpqrcode/cache/mask_0/mask_149_0.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA - н_MEQXP৞.|94e{JLv#^n[ ?; -ZIV-*w˒1*+VXbŊXgwqX}JRYbŊ+VXbeΠwfeΠ^bŊ+VXbʜAʜAbŊ+VXbŊ9ٜAbŊ+VXbŊl0*0Tj`?Ϊ;X=zZr* \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_153_0.dat b/phpqrcode/cache/mask_0/mask_153_0.dat deleted file mode 100755 index fc79e9e..0000000 --- a/phpqrcode/cache/mask_0/mask_153_0.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Н/礑h&F`Ҽ@I;PZ^X͌mf.=5 [if-R+!wr˜g\j̘1cƌ3f̘1cfo.2?1z `ƌ3f̘1cƌzƌ3f̘1cƌ3fztf3f̘1cƌ3f̘kk030cƌ3f̘1c9;Ď`vf͚̆ZϘW9 \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_157_0.dat b/phpqrcode/cache/mask_0/mask_157_0.dat deleted file mode 100755 index ad749f3..0000000 --- a/phpqrcode/cache/mask_0/mask_157_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA - н_QRY k*q͵=j7~nN.p%ڵsi.رcǎ;vر{.-W2={mgy+رcǎ;vɳ2;yּcǎ;vرcNɳ;vرcǎ;v2xI3`FaC~S7rJnYfY8T-%e~DHFIIc5zv^p@ZbtcP7qJ_1+9^La zKHT%7-Y-t#T{NC)k=gd2o zjNY~Ld^ftnUmGj|mU3?60jkj`HqbYoV)>#S!~tpmi%zkeFHURTr~Ks{-QatqS5&9ib(yR@{gMnQ+Lcye6Ty_ Q@^8h%UuzjeUK>3D05K(RC;$Ke diff --git a/phpqrcode/cache/mask_0/mask_165_0.dat b/phpqrcode/cache/mask_0/mask_165_0.dat deleted file mode 100755 index 3a17a05..0000000 --- a/phpqrcode/cache/mask_0/mask_165_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x; -0>I9+DyI4ˠ5:Wvdqߜܴ<d2x%[U%2]&K,Ydɒ%ˡ,S՗r2yd=,k_{Xdɒ%K,Yd)0m,Ydɒ%K,Yd)0m,Ydɒ%K,Yme,e%K,Ydɒ%K,eq Ò%K,Ydɒe:I9EQ=Ls I{ZtR}Sn:|R[?_*SL2eʔ)SL&ϦI O2O2eʔ)SL2e*C1PPSL2eʔ)SLP22)SL2eʔ)SLe(}2)SL2eʔ)SLe(}2)SL2eʔ)Sic7;"ޙFͦސٙvL ^2}oO'r \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_173_0.dat b/phpqrcode/cache/mask_0/mask_173_0.dat deleted file mode 100755 index 5ef85e7..0000000 --- a/phpqrcode/cache/mask_0/mask_173_0.dat +++ /dev/null @@ -1 +0,0 @@ -x10ޯT [4v2ƽok݇;Ӳ]f֞dljlG0n+߻mG˖-[lٲe"Y}oV[lٲe˖-[lٲeհՃ[2lٲe˖-[lٲeհՃ[2lٲe˖-[lٲeհՃ[lٲe˖-[lٲeValٲe˖-[lٲef[BmаE;N-ۜT/rl?* \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_177_0.dat b/phpqrcode/cache/mask_0/mask_177_0.dat deleted file mode 100755 index 78a26a7..0000000 --- a/phpqrcode/cache/mask_0/mask_177_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0>I9+?߁iև d̹xֈxN/է|{ظ8d0h=cFf̘1cƌ3f̘qq=w6;l4cƕ<nj3f̘1cƌ3fXһ1ֻcƌ3f̘1cƌ3fXbwnj3f̘1cƌ3f̘M'X&1cƌ3f̘1cƌ3ֻnn1cƌ3f̘1cƌÍ3U< \7+(<OƌΊnj4@ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_21_0.dat b/phpqrcode/cache/mask_0/mask_21_0.dat deleted file mode 100755 index 368c9941fd09f695d58934eb0de062a54fd74c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48 zcmb=pWo*#E=&aDfq?gm=vB)I2o5jQUx&ZeRqn1^Uf@;3Hn^Ft5vfXH5Z;oPEP!;?T E0GJaIuK)l5 diff --git a/phpqrcode/cache/mask_0/mask_25_0.dat b/phpqrcode/cache/mask_0/mask_25_0.dat deleted file mode 100755 index e4a5b6d8afc4516779d7d246ebfcf7ced36029d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmV-90LK4#+A}bK0YfN+0xnzV>=60G~7^dI6e8pX8D%7wG^1 diff --git a/phpqrcode/cache/mask_0/mask_33_0.dat b/phpqrcode/cache/mask_0/mask_33_0.dat deleted file mode 100755 index 2ec712a7adcd6edf1ce2c785adf00e3ca7c5b729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62 zcmV-E0Kxxw+A}bK0Yfwh1zdy_AgLHMX5awSafcxR$OTi6Q^}|q!_EwNn!%sOz-Hh| UV{|eD?iT|>N~mE50E^|%1m89on*aa+ diff --git a/phpqrcode/cache/mask_0/mask_37_0.dat b/phpqrcode/cache/mask_0/mask_37_0.dat deleted file mode 100755 index 1588cfce1318608538dbde89fa7f04d05ff574e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmV-H0KWft+A}bK0YfYh3b=?-grsWFnuP~Y*IkB0KrWabyvjz+8Z~Q>n+4Agg!2&C XEPQ!r0L+5>(SR6b)HDkKY5W93c-0$f diff --git a/phpqrcode/cache/mask_0/mask_41_0.dat b/phpqrcode/cache/mask_0/mask_41_0.dat deleted file mode 100755 index e369027e3831ce2d9ac858eaa2cdfa5e5498df07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmV-K0K5Nq+A}bK0Ye-R3b=?>h@^7Jm`MQ8#+`;lLN1s-f=Wlt95r*)%t2))yeuHD a3;~--s0 \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_53_0.dat b/phpqrcode/cache/mask_0/mask_53_0.dat deleted file mode 100755 index 572d279..0000000 --- a/phpqrcode/cache/mask_0/mask_53_0.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK -@!йoQϺ:(m&s-6Z{m4YX.F٭XZij=:έ֋b忑VH 8 #[Y^Xe \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_57_0.dat b/phpqrcode/cache/mask_0/mask_57_0.dat deleted file mode 100755 index ea81e6d..0000000 --- a/phpqrcode/cache/mask_0/mask_57_0.dat +++ /dev/null @@ -1,4 +0,0 @@ -xA - {^s=YL՚ ( -ouj)  -Z7yv,ԴwVQ iGiҤDfەwo4ѤoLLȼ}4 h \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_61_0.dat b/phpqrcode/cache/mask_0/mask_61_0.dat deleted file mode 100755 index 93d2444d8249bf3c534223bc1bb339d54f7af957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmV--0Eqv1+U?dk3IHJt1<*dHN$!6+E5(hNrI=BE>;m7%=n!PCCC1eixx=ze|IFU^ z&9=7bWCto@OXj<~I62OGT~zl9#bLvS4O_9jbFKC1I6Jle?Kb{3*sx(Qw*P@W*om-i Z8|GT{jXc==mTf+B&fNDGb^()u!gb2GK0EGW|+U?gt4!|G?1i(A5f&YK5CmXS?mE~YV7mp;Hi4u*ftt_y*5-7lK6FzHr z>I4k)=)nLMYOw4+bP*CfgX@x(2S?CA0}V9%z<}J֞!Ŋ+V嬪.2XbŊ+VX.kBzwձ̀gkYZ \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_89_0.dat b/phpqrcode/cache/mask_0/mask_89_0.dat deleted file mode 100755 index aaa4c52..0000000 --- a/phpqrcode/cache/mask_0/mask_89_0.dat +++ /dev/null @@ -1 +0,0 @@ -x1 ὧi9'Hl?L^"&M?bq?˸,9!z]VScƌ3_c!`n3f̘1č 3f̘1/f>.Uc˻; 2;Y+7 \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_93_0.dat b/phpqrcode/cache/mask_0/mask_93_0.dat deleted file mode 100755 index e218fa0..0000000 --- a/phpqrcode/cache/mask_0/mask_93_0.dat +++ /dev/null @@ -1,3 +0,0 @@ -xK - EyV,OmޠrPH0{2bc{tQ] -{Q{{弬֒ǎ;v_ڳ}L}l߱cǎ;v̑̑̑رcǎ.Legw3qeѾ@i \ No newline at end of file diff --git a/phpqrcode/cache/mask_0/mask_97_0.dat b/phpqrcode/cache/mask_0/mask_97_0.dat deleted file mode 100755 index 74ac719d06e7ba35f7b749e668c884f291daefb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmb=p_4cMC*8v3{my5N2lkfa5ijADYwQUyT?SDJYDA|}8ET~@TVG}wt#i2yK=7z!b z>XaF;OL-RsNjlZ?U*+(wbH1LOIxmNXjYq;D;XuQ~?`*DdR@K|)ymqtY`Of=>87kg* z$16{D`=-laMU02Hv7J?~OBUdlkQVwh=~Mq+LyI<1=UdT5U+wnXEMO=-^wS0a*1ӘK}:!iY'*3]fsmb[JƶŖK9}cccccc'u.6Ʀs6666R[^g{/lٷ 7͂ \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_113_1.dat b/phpqrcode/cache/mask_1/mask_113_1.dat deleted file mode 100755 index 1dd666d..0000000 --- a/phpqrcode/cache/mask_1/mask_113_1.dat +++ /dev/null @@ -1 +0,0 @@ -x1  -8fL(pBlDM9";-;?1p{\%-3:@ad4*Nadddddd########c]751xYu \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_117_1.dat b/phpqrcode/cache/mask_1/mask_117_1.dat deleted file mode 100755 index 8921f64..0000000 --- a/phpqrcode/cache/mask_1/mask_117_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -xֻ >ӘK$^ 8YQSV'z8jzʇ^]סekXYYYYYYYjݵ# -+yeeeeeeee#WVVVVVVVV;"+yeeeeeeel'e;b&^9{/J$p \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_121_1.dat b/phpqrcode/cache/mask_1/mask_121_1.dat deleted file mode 100755 index 64bd8ba..0000000 --- a/phpqrcode/cache/mask_1/mask_121_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - н\CPbїE$DdƩYtڅλ0$ήꝝga7yٯ痽Y??{{D \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_129_1.dat b/phpqrcode/cache/mask_1/mask_129_1.dat deleted file mode 100755 index 62cd1c9a18c2367d1c2c4a125b0c7bfb7647cd07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmb=p_4c+Q*8v3{)(d-=d%mmRskg|fP}}X+^rc5NZJtc#aociguIS=*E7o0PY;Hez z>gn9i&b%cXe#-fTKV)dW7BEeenT946)3$`s uʮ>Wd )g'M{3\d6ubذaÆ 6lؼn]Nذ9FްaÆ 6lذa3a#oذaÆ 6lذذ5e16lذaÆ ]Sbk6lذaÆ mͤ;CcfIdsG \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_145_1.dat b/phpqrcode/cache/mask_1/mask_145_1.dat deleted file mode 100755 index 6a9950f..0000000 --- a/phpqrcode/cache/mask_1/mask_145_1.dat +++ /dev/null @@ -1 +0,0 @@ -x!0@k 4a)q2i.YCUO{35UZFn]fN>bdwtzJF}F1bĈ#F(F6r1bĈ#F1E1ilF1bĈ#FtF#F1bĈ#FtZ}##F1bĈleHGܣ@ٝ \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_149_1.dat b/phpqrcode/cache/mask_1/mask_149_1.dat deleted file mode 100755 index 02a3cdc..0000000 --- a/phpqrcode/cache/mask_1/mask_149_1.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Ӕ_΅qH_Xci#Gd̘Ք՛gLU^ݮVR>dKVXbŊ+VXeoXJ_bŊ+VXb;ݙ+}Ŋ+VXbŊ+VAVngŊ+VXbŊ}+ +VXbŊVj>hewf*`uTq \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_153_1.dat b/phpqrcode/cache/mask_1/mask_153_1.dat deleted file mode 100755 index 2abfca2..0000000 --- a/phpqrcode/cache/mask_1/mask_153_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0\9btEc'HH9efߞmffM#.̘1cƌ3f̘1cf73f̘g̘1cƌ3f̘1co2c]?3f̘1cƌ3f5Mf3f̘1cƌ3f̘17utf3f̘1cƌ3f̘=lj3>V \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_157_1.dat b/phpqrcode/cache/mask_1/mask_157_1.dat deleted file mode 100755 index 17344b8..0000000 --- a/phpqrcode/cache/mask_1/mask_157_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - >94Sd/51V)SkJv7eGcǎ;vرc]Zٱc'رcǎ;vر+رg;vرcǎ;}V`N+رcǎ;v:;v;vرcǎ;;}Vޱcǎ;vص'vz#;]klwoA` \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_161_1.dat b/phpqrcode/cache/mask_1/mask_161_1.dat deleted file mode 100755 index 669ade1..0000000 --- a/phpqrcode/cache/mask_1/mask_161_1.dat +++ /dev/null @@ -1 +0,0 @@ -x10_΅Xš yi~Qbkvp7'M u=]([ 2dȐ +\' 2 2dȐ!C 2s0/3d() 2dȐ!C 241dh 2dȐ!C 2dhcȐSL2eʔ)SL2M SLSL2eʔ)SL2M}LSSL2eʔ)SLeSy)SŔ)SL2eʔ)S;ٔ)S;)SL2eʔ)Sv()Sv()SL2eʔ)SLdT6}a*3mljmzC' \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_173_1.dat b/phpqrcode/cache/mask_1/mask_173_1.dat deleted file mode 100755 index 436918c..0000000 --- a/phpqrcode/cache/mask_1/mask_173_1.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Ӕ_Υ''@y]X1?"g:1犝fn˶˻mm.?lٲe˖-F>glٲ2lٲe˖-[lٲeO`˖e˖-[lٲe˖-[l lٲlٲe˖-[lٲeVO`˖e˖-[lٲe˖-[z0}[z0y˖-[lٲe˖-[Ee[hOVWö=t*| \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_177_1.dat b/phpqrcode/cache/mask_1/mask_177_1.dat deleted file mode 100755 index 12e2e52..0000000 --- a/phpqrcode/cache/mask_1/mask_177_1.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Ep0X,a#r}6}nj~\8ƌ3f̘1cƌ7{3f,y3f̘1cƌ3fX_`X&3f̘1cƌ3f̘M_1cy̘1cƌ3f̘1cƌ+3f,y3f̘1cƌ3fX_bX&3f̘1cƌ3fx2dX'x[cy| 3 \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_21_1.dat b/phpqrcode/cache/mask_1/mask_21_1.dat deleted file mode 100755 index f87e0a11227bb4e1e6f46a1dbb133ca9b1cc8109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42 ycmb=pWo*#E^%B$z4|g)+XrS~G>tDQj I0gJJp;@7?u-2eap diff --git a/phpqrcode/cache/mask_1/mask_33_1.dat b/phpqrcode/cache/mask_1/mask_33_1.dat deleted file mode 100755 index 318949df07745528a680a428ac74ea85f016c2aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmb=pWo*#E(KTk=YPW25x~DW1ZnK;yQ#k{?W*9i^mo(k2MWv7BXK JDEWV$2>`Yr5WxTd diff --git a/phpqrcode/cache/mask_1/mask_37_1.dat b/phpqrcode/cache/mask_1/mask_37_1.dat deleted file mode 100755 index 5bd9e3aa0d08230508938e61404749c9ae72e32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56 zcmb=pWo*#Ec0ARA$6JzFue`IJvZq{C68loc~P O{VIfV)fhyX>>B}kGZlIO diff --git a/phpqrcode/cache/mask_1/mask_45_1.dat b/phpqrcode/cache/mask_1/mask_45_1.dat deleted file mode 100755 index b35c567dca6aa84fbd8758e1fba4ba2feb397de2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 zcmV-Y0ImOc+A}bK0z+KD00FoRNC61dbTS*2PX)7SsT!xdk(^GV*-*`fM1fJW2ff*Z o(g~bDg3KOGC-gI$Q0Yx=v#FI%h$&--irG{SZ{o}b0N2uhd5F*?p8x;= diff --git a/phpqrcode/cache/mask_1/mask_49_1.dat b/phpqrcode/cache/mask_1/mask_49_1.dat deleted file mode 100755 index d20d71710eecee1842e3fc1535a09df5a9bc8761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmV-a0IUCa+A}bK0z-Vj00FoRNCgNTbhiUtgi3bMLkC`eAbEuhJD>&_5)DS}7`1~) qJBUfUaFG#i$7s45S#}Up3)038>ZV;{>!_h=2TkIGcsl^2!^he0dm&5! diff --git a/phpqrcode/cache/mask_1/mask_53_1.dat b/phpqrcode/cache/mask_1/mask_53_1.dat deleted file mode 100755 index a676d7dfa2092a94b7a81322980eb4def98fba74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmV-d0I2_X+A}bK0z*Q;00FoR$N>ml185hf7!~cJr!Ip2Lh>4!c0mm>Bngb#HEP!o tw~N^P1s5B&Ycw5>+BN9xBDS?bOS@>1zes5V31pqmJ6B4Gdk diff --git a/phpqrcode/cache/mask_1/mask_57_1.dat b/phpqrcode/cache/mask_1/mask_57_1.dat deleted file mode 100755 index 896ed43575bbcdf0ad49fbfabe490f0645a69df4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmV-i0HgnS+A}bK0z+be0RnItkP8qx2Zf#3M5%1&K=cx?F0b9ifGvGnJH}m diff --git a/phpqrcode/cache/mask_1/mask_61_1.dat b/phpqrcode/cache/mask_1/mask_61_1.dat deleted file mode 100755 index 4165a4b..0000000 --- a/phpqrcode/cache/mask_1/mask_61_1.dat +++ /dev/null @@ -1 +0,0 @@ -x30CbpPi`@&H^nadQG{nF3s~{gDf@VF{6Pqb^n%N<(VOM!% z$k4$xhh-EO4838Mg8>5u3?CSjTRkcmt{T`$3>YwEH7H+JtRd!Bt3S?PhR}V`4GpQu FA{XR~DnI}L diff --git a/phpqrcode/cache/mask_1/mask_69_1.dat b/phpqrcode/cache/mask_1/mask_69_1.dat deleted file mode 100755 index 03bba657f6d0df2a65ab63bc13715660ffc4ba1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmV-s0Ga=I+U?gd3IHGoh2g!^*!?fpBGuB6Ru=tl734z%QACqxBP~f*q;+|~GOlg3 z+|*@yF5PGrS+r?(1q&7|Sg<^6vEHLv!?NAN?qb1$1ZaPm@r{VZ}QxyUc>an#ExUago&HU9mj+T)Arjuh3Vye^8R7`ZVIqZ Kep3TS=JO^`WH?p; diff --git a/phpqrcode/cache/mask_1/mask_77_1.dat b/phpqrcode/cache/mask_1/mask_77_1.dat deleted file mode 100755 index 0fe0b03e868a00c5cc8f97a40528a7873b189a78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmV-!0FnQA+U?je4ge4gh2h<4>i(Cr2nH6ODE>E!G+%@^VU`nTV>Q8)snssB^}WNL zdu^VpO`ltHbYfdB9wots4cnKt)&5pivAMDF7O-K%#>`?aFte~>!}hvu_4ni(Cr2nG^~hc@}&Xs9m@nlP)$C$XMn>hy{MjVt$j z{gE+3#iKqBt-N5Y8)R89V#J7X)2MhK+d4+qM(zwoj2JO8ubJ1(Ym68%VvJ~1{NnyH UdYUt;KT?e16B)r+06TKr<%ttFF8}}l diff --git a/phpqrcode/cache/mask_1/mask_85_1.dat b/phpqrcode/cache/mask_1/mask_85_1.dat deleted file mode 100755 index b8a20c7..0000000 --- a/phpqrcode/cache/mask_1/mask_85_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - н\]4AA hM\QjsAkUjmun2RΚ5:k;jƲ[eo[o[kZ \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_89_1.dat b/phpqrcode/cache/mask_1/mask_89_1.dat deleted file mode 100755 index e9d226f..0000000 --- a/phpqrcode/cache/mask_1/mask_89_1.dat +++ /dev/null @@ -1 +0,0 @@ -x1 Ӕ_΅Nh}%@ iDOH*c"_.4Iy킎`)-5*(of[sm}6YM ;;;;;G{zطz1vw}=wuL%?"=~ei \ No newline at end of file diff --git a/phpqrcode/cache/mask_1/mask_97_1.dat b/phpqrcode/cache/mask_1/mask_97_1.dat deleted file mode 100755 index 24fa60f..0000000 --- a/phpqrcode/cache/mask_1/mask_97_1.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0н1\tncKD"H$DH$D"Q&WerH$D"*x[(?/'nd \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_117_2.dat b/phpqrcode/cache/mask_2/mask_117_2.dat deleted file mode 100755 index b4dcce4..0000000 --- a/phpqrcode/cache/mask_2/mask_117_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - >94!m dOs\0X,la5#E>Z[ַRT*JR?Q-*T*JR?UW*JRTݟ+JRԤ~m5;S&+ \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_121_2.dat b/phpqrcode/cache/mask_2/mask_121_2.dat deleted file mode 100755 index a2a0097b1fd803424ccf0a741277066f44b04dae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmb=p_4c+Q7lR@X%YlD!!vFtUN&Z3X+ Wr*l6!Q#;$o?ELu?!b)#0qyqpqZ94e? diff --git a/phpqrcode/cache/mask_2/mask_125_2.dat b/phpqrcode/cache/mask_2/mask_125_2.dat deleted file mode 100755 index 0ea40fd..0000000 --- a/phpqrcode/cache/mask_2/mask_125_2.dat +++ /dev/null @@ -1 +0,0 @@ -x! PӔ_@ U(kp@^Mڮ5-:VF_\t:NtyNqt:NtG;Nt:.8:NtzA}yNq;+n& \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_129_2.dat b/phpqrcode/cache/mask_2/mask_129_2.dat deleted file mode 100755 index bf04839..0000000 --- a/phpqrcode/cache/mask_2/mask_129_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0н_KVڡ'.!w]A0X~  !࣠fK# xFy4 vey@^+  ~  L#veI \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_133_2.dat b/phpqrcode/cache/mask_2/mask_133_2.dat deleted file mode 100755 index 9e78b6d..0000000 --- a/phpqrcode/cache/mask_2/mask_133_2.dat +++ /dev/null @@ -1,10 +0,0 @@ -x1 - н&`LQ-g=Aqbʪl fƄȚ44& )OȚYF4444444444c4~9S:3ЌטpǮ> \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_145_2.dat b/phpqrcode/cache/mask_2/mask_145_2.dat deleted file mode 100755 index 9ff2bbf..0000000 --- a/phpqrcode/cache/mask_2/mask_145_2.dat +++ /dev/null @@ -1,4 +0,0 @@ -x1 - нr] -,tQ^&C~ -щj~mɾ.FgMDDDDDDDDDDDST׈DHdZL+ɴDDDDDDDDDDD2-'"""""""":BתEYDd \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_149_2.dat b/phpqrcode/cache/mask_2/mask_149_2.dat deleted file mode 100755 index d52e048..0000000 --- a/phpqrcode/cache/mask_2/mask_149_2.dat +++ /dev/null @@ -1 +0,0 @@ -x;@/gcaGBXB'-ˆouէUQdRVOmT*ǫ;;j廝Ee2PQQQQQQQQQQQ TTTTTTTTTTTTr33R &Tskz_e2P=d \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_153_2.dat b/phpqrcode/cache/mask_2/mask_153_2.dat deleted file mode 100755 index 3b06041..0000000 --- a/phpqrcode/cache/mask_2/mask_153_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0 Ӥ8ZP!BZu賶"bu*)]MFFFFFFFFFFFF%= #ddddddddddddr ot2yFFFFFFFFFFFF& #k5L 2222222222(Y7"d@H \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_157_2.dat b/phpqrcode/cache/mask_2/mask_157_2.dat deleted file mode 100755 index 2baf535..0000000 --- a/phpqrcode/cache/mask_2/mask_157_2.dat +++ /dev/null @@ -1,3 +0,0 @@ -x1 -0>s6MqUH1X&U̘f/u-'.[KGGGGGGGGGGH|NG(ttttttttttNF;::::::::::}Nz$ ->n A#^AG(t =3{ \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_161_2.dat b/phpqrcode/cache/mask_2/mask_161_2.dat deleted file mode 100755 index d2df7594eafccef2dacee35dfd7b2fa20d22e1dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmb=p_4bY;UxNV;Yry%;UBBb`j2ojEHvT!3{p!RC?nRON7i3-Yc;zkY`Xf0}_x!$! zFE2cT6SG?D4qx=zQRnO+ECdE-0&RD4IXDluF5^{1fQ4roCj>lm@IU~K;tl%3r)17J zJ0ZZ#=G-X(&k}A4K#T&Dr(`%dQ~6pDpuA;fz2pBjgY@glDn4Sf%vz*>v-~PkmIDA9 Cq)A-> diff --git a/phpqrcode/cache/mask_2/mask_165_2.dat b/phpqrcode/cache/mask_2/mask_165_2.dat deleted file mode 100755 index 2e6cd7c..0000000 --- a/phpqrcode/cache/mask_2/mask_165_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0 Ӥ?BVUG%*+_fs MIIIIIIIII2d;l4()))))))))))eqJنIDIIIIIIIIIII)۠mPRRRRRRRRRRR6l JJJJJJJJJJJJن}RaQRRRRRRRRRRNeK?R퐔͔&W3U \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_169_2.dat b/phpqrcode/cache/mask_2/mask_169_2.dat deleted file mode 100755 index 4052062b8db42699eecf910b9792afd64d0db84b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmb=p_4ckI*8v3{)(d-=cYfa=BffC9bK#GR;+rC$JQO$)A7z^D@-5td;v_x$KZRRf zZ@YKti&y>Si-EiLS+DR!2HU-y%YuV0IWJizqKN=2d5((tdS!V{oP+?U0&*@cSz;s- xgbbohG*|MpPC)`8ZBAZV&W8R7OY$eT{eSz+A@fq6m)EU$prLMGxEX}SGyvz^RrCM= diff --git a/phpqrcode/cache/mask_2/mask_173_2.dat b/phpqrcode/cache/mask_2/mask_173_2.dat deleted file mode 100755 index 0a30ba5..0000000 --- a/phpqrcode/cache/mask_2/mask_173_2.dat +++ /dev/null @@ -1 +0,0 @@ -x+@ Pift:>y &d U߬S[]5Z;a5V۞A[Z˴VՃI0ZZZZZZZZZZZZZZ=-Lhi`VFK?ݧhioJ0}o \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_177_2.dat b/phpqrcode/cache/mask_2/mask_177_2.dat deleted file mode 100755 index d2c52f9..0000000 --- a/phpqrcode/cache/mask_2/mask_177_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - E>Y4V$~ ,C&U;Ook5bϙGx9%&&&&&&&&&&&n$OL|v#&&&&&&&&&&&&&bbݍXw#&l7bbbbbbbbbbbbbbM"l7bbbbbbbbbbbbbbMa!&݈3)U0}qMK$nTp4?}1s?+4l5MclS diff --git a/phpqrcode/cache/mask_2/mask_29_2.dat b/phpqrcode/cache/mask_2/mask_29_2.dat deleted file mode 100755 index 5112d11eff0ce0631ba1000e8823e0592ee3230e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmb=pWo*#EnW&mR* B5Pkpv diff --git a/phpqrcode/cache/mask_2/mask_33_2.dat b/phpqrcode/cache/mask_2/mask_33_2.dat deleted file mode 100755 index 5bac0c80d2fd997d753427178c6294dd3dd9184a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47 zcmb=pWo*#E*F> \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_45_2.dat b/phpqrcode/cache/mask_2/mask_45_2.dat deleted file mode 100755 index ad44ff1885f2c4e0d2158824e4d2b5537e0e8eb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmV-K0K5Nq+A}bK0z=#g4!8^kw`w#Iid7Q>h%(!dOx19XArWX)^>9~>HN_4))uS;# aNK_M3B2!g0&U7-YR1co;#)SYYI)8L$SQ+gA diff --git a/phpqrcode/cache/mask_2/mask_49_2.dat b/phpqrcode/cache/mask_2/mask_49_2.dat deleted file mode 100755 index 6e8edff24b9344b19623318f9e10802439cf2b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmV-M0J;Bo+A}bK0zFeF c>OklqvR0#s4%}&Xxa%04@qrTo0MEO|#KK}86#xJL diff --git a/phpqrcode/cache/mask_2/mask_53_2.dat b/phpqrcode/cache/mask_2/mask_53_2.dat deleted file mode 100755 index 682cae2aa6532baf02d2aa3e0c1dd2ab5227a34e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmV-P0Ji^l+A}bK0z*Ow32+$&77oAwesj8DyK(d{NRL}|M7?Oxab&l#B)j2eE;wiyK ib&jT?QJteYsi%|F)*Fp=5-1Z!bq=xk#E$^gB4-2t4I$0| diff --git a/phpqrcode/cache/mask_2/mask_61_2.dat b/phpqrcode/cache/mask_2/mask_61_2.dat deleted file mode 100755 index 77d3815eb51a7feb77ebf8fa7001e8428c252db7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmb=pWo*#E&42|mGA0{eU)ahq{&Zsci5AoT|sbCRL;^iky?c_QPW#8n#wmU scCwG!AOHf}SdL4%7jXKBFflomDSq>=(yS;mZJM;_nealU{J-+60Ag+8uB49o zCeM)i$;BWcAt6nrP(L9Zkl0KlBqVyA9!Ek#%9h06kgHO>pO7@^?R^TT0-T8OPY@d{ Aga7~l diff --git a/phpqrcode/cache/mask_2/mask_77_2.dat b/phpqrcode/cache/mask_2/mask_77_2.dat deleted file mode 100755 index 903cba4..0000000 --- a/phpqrcode/cache/mask_2/mask_77_2.dat +++ /dev/null @@ -1 +0,0 @@ -x1 н_CM>Gt ѫe+FWZEm&gއFѶhF+t/FYvFj[*7a \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_81_2.dat b/phpqrcode/cache/mask_2/mask_81_2.dat deleted file mode 100755 index 17a9ac2..0000000 --- a/phpqrcode/cache/mask_2/mask_81_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0н_KҩVi!O\"A]:xbW1uȦ&_T ΋6H$U^D~bׯb=gX \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_85_2.dat b/phpqrcode/cache/mask_2/mask_85_2.dat deleted file mode 100755 index 72c74ff..0000000 --- a/phpqrcode/cache/mask_2/mask_85_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0=1\B7O$A0$8Wwjguu槊RT*uS֧JRTJRRޢN浘V \ No newline at end of file diff --git a/phpqrcode/cache/mask_2/mask_89_2.dat b/phpqrcode/cache/mask_2/mask_89_2.dat deleted file mode 100755 index 06c9a4f..0000000 --- a/phpqrcode/cache/mask_2/mask_89_2.dat +++ /dev/null @@ -1 +0,0 @@ -xٱ 0 >/&E*cQqŃ zf$rM6hu5#zF6@yLURBPN&o9dL&(sq|@niI{j|F;se@4&-NL5N8P;_ J=`Rs#W7tsZG`0W$ diff --git a/phpqrcode/cache/mask_2/mask_97_2.dat b/phpqrcode/cache/mask_2/mask_97_2.dat deleted file mode 100755 index 38842b9..0000000 --- a/phpqrcode/cache/mask_2/mask_97_2.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 -0н_KivH4 )_%s_d3KO1^aL,$H"$KzRPt[I&X9$H"$I$ysI$DI$ɓI$I$Dɍ%es!=LAZ5'̓IVrn/2oƅ \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_113_3.dat b/phpqrcode/cache/mask_3/mask_113_3.dat deleted file mode 100755 index 023b273..0000000 --- a/phpqrcode/cache/mask_3/mask_113_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 D}NrnDFj2KCt?WݲZi.qoP %Smj7ަ:*N:@:***fW9d2*j*}S@`*j৪6Jlѿ}}էTUa24hnt \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_117_3.dat b/phpqrcode/cache/mask_3/mask_117_3.dat deleted file mode 100755 index 79cc04d..0000000 --- a/phpqrcode/cache/mask_3/mask_117_3.dat +++ /dev/null @@ -1,4 +0,0 @@ -x1 -0 ]Q.xIB$?~!-~Ih^HVEgKLuZlO;cUwJKHSx)|O2B zFzfxyYi|AgTNeL2=}VZ;Ev?R7P^rty{%*guOnUQ^gxskvcVQYX$3@&ONuIXHIa)Pv zd*)?`uy^M1DbmmD%Zo4AT@Sf`A^-TAmugk}r7i9rS@ZJQ!dsI6-_8j2Oj_vmiRt9J G3$_65-fl?% diff --git a/phpqrcode/cache/mask_3/mask_125_3.dat b/phpqrcode/cache/mask_3/mask_125_3.dat deleted file mode 100755 index e2febdb..0000000 --- a/phpqrcode/cache/mask_3/mask_125_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - ~N3rۄ]BБ'?xFrjdA{$T!&?~Jee~GOn@z#E)RHZ@bl-)ݿ<ߧ*OUR"5&5*ie J]+ \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_145_3.dat b/phpqrcode/cache/mask_3/mask_145_3.dat deleted file mode 100755 index 338b7e7..0000000 --- a/phpqrcode/cache/mask_3/mask_145_3.dat +++ /dev/null @@ -1,3 +0,0 @@ -x -@|:^ Jy̡yMj-' -9VS֦K9e)PyUwe-m jԨQF5jԨRi٫F4_wk}0+jRBRF5jԨQeOMBJHjԨQF5jwP״˪IH I5jԨQFͳc w5jԨQF:zS*2UZ_C*e_OZ%dIȯb \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_149_3.dat b/phpqrcode/cache/mask_3/mask_149_3.dat deleted file mode 100755 index 30bc5fa..0000000 --- a/phpqrcode/cache/mask_3/mask_149_3.dat +++ /dev/null @@ -1 +0,0 @@ -xA0}Oܠ⦐H頯'Z2{oV|Ι%>yR{!8ÂI+JpI|#f5κ[P A $H Q})&X{ט+Wb`I)5%d \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_153_3.dat b/phpqrcode/cache/mask_3/mask_153_3.dat deleted file mode 100755 index 89cdec0..0000000 --- a/phpqrcode/cache/mask_3/mask_153_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0}Ns˹)7mJ,}8X=cW^GeNE;R(13DFEx15%o)(+gL2|3uiEv#I;;|4`apdpkS*^~xvLf_IwePW`Q`R8jLgJQhVasX}og%bb( diff --git a/phpqrcode/cache/mask_3/mask_161_3.dat b/phpqrcode/cache/mask_3/mask_161_3.dat deleted file mode 100755 index 72a26a4..0000000 --- a/phpqrcode/cache/mask_3/mask_161_3.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA -0}NrnFTk,N Zђf7J:ƒ^`WٔUnXڤǧM-#V+ߡ+9zҖY l)SLocʱO_C?ߩ%;*KlM2eʔ)SL2Ye][bSL2eʔ)SLyVYlWG[bSL2eʔ)SL -]g+$eʔ)SL2eʔ/qBbKlʔ)SL2eqʙ]£{A/~V9\%[P#' \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_165_3.dat b/phpqrcode/cache/mask_3/mask_165_3.dat deleted file mode 100755 index 870af8f..0000000 --- a/phpqrcode/cache/mask_3/mask_165_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0}N3T #Z YuÏ:̛1ϱEUTT|S q)m-sG B.Cĉ'N8qğwv7['tg!.ե:qĉ'N8qv`_+.ե:qĉ'N8qv`R8qĉ'N8qΤ8"ե:qĉ'N8qĝIяہq&EKuĉ'N8q+9:}kFT?^ЏGo<0իCg/_ \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_169_3.dat b/phpqrcode/cache/mask_3/mask_169_3.dat deleted file mode 100755 index 9431095..0000000 --- a/phpqrcode/cache/mask_3/mask_169_3.dat +++ /dev/null @@ -1 +0,0 @@ -xA0}O3rn񷾦 )}'31Eh]4P[ _]Kv<˙fp#y_l[geӧO>}o%uJV/{%O>}ӧO}K~O>}ӧO>Q=/ї>}ӧO>}u{ח>}ӧO>}u{蟪/%?}ӧO>}ׯ.N4჏VMmRt(1| \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_177_3.dat b/phpqrcode/cache/mask_3/mask_177_3.dat deleted file mode 100755 index 9586979a1f9d74c4e115757feeeabb74819df45b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmb=p_4ckK*C7KDmJ79hlkfa5%Jb^v=;WB?Q=`hguxbC(hf6kRuDyQoTio}+UFQXv zzYC}H-0`hx>pHl#M}PCVx?h`vgGKGt$xx|wRV!3 zfoMp8BP)#fxJc>g$uD7oUs9|>H)gE5sHrt=^#lc>7A~z73z`r_mvKnO#w`)M&Z=su zbg*n(k1PjN^&?s|N=H{r^nS3Sqe@3D+;oUNM?Y$9iHOp<`z#Ekc_EUqAPXMxfb>qw zEAHgtRC0WyjcRYJR@RjRYnSlaR2M&;SL^DVy)i4Q+x2LaXy<=XYjqD_?+J5e|6#~G HtjGiaa;}E0 diff --git a/phpqrcode/cache/mask_3/mask_21_3.dat b/phpqrcode/cache/mask_3/mask_21_3.dat deleted file mode 100755 index bcb4eec4919b60e2c25c4e18ebb9c34423536b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 zcmb=pWo*#EQOIfiJ63sVS+xNu1fplLAA habXVvLtL={H4TR*l1wwiWg5b#xHRE54FHDyc9;xW9FqV5 diff --git a/phpqrcode/cache/mask_3/mask_29_3.dat b/phpqrcode/cache/mask_3/mask_29_3.dat deleted file mode 100755 index 6150ac1289809bad7646c662dd9cf836311f47f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmV-R0JQ&j+A}bK0z)JO16&9u7I`jwl1Q?&GZ`D8$YeOr5DVhME(}Fn_#_QSO-42g hU)nIl9)oZ$?ieJ~WF$A^k;Gv#QfT0j2LK0SpN7|C8+8Bx diff --git a/phpqrcode/cache/mask_3/mask_33_3.dat b/phpqrcode/cache/mask_3/mask_33_3.dat deleted file mode 100755 index 6053b5e396ca957ae26193aceb85d08a43dacd9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmV-V0I>gf+A}bK0z(W00bB+MfK>sq3hWAyRM5v3T!1RJz`2Gv5EpJKDB>cdVAPhO lW(z#c;7?-^TkxkbL)`g=Dz?D=LP!BVTMUV{1pswi&V8ytAOipZ diff --git a/phpqrcode/cache/mask_3/mask_37_3.dat b/phpqrcode/cache/mask_3/mask_37_3.dat deleted file mode 100755 index 5dea5b9cbe14fcff482e0fe9a647359aca07547b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmV-Z0IdIb+A}bK0z+&F3b+gq0H-2kRd@{JG8i};@d2vZ2XK(!(BO=uY7eM-(E6p3Zv0bsQxl5nw^V$$JC%}Bqlsj9DvDo{aE;P>E# hYO*WtyB%t`BNs_$5b6wWqgwwJ)C%Io3LZM{#-RD-KY#!L diff --git a/phpqrcode/cache/mask_3/mask_53_3.dat b/phpqrcode/cache/mask_3/mask_53_3.dat deleted file mode 100755 index 8800bea..0000000 --- a/phpqrcode/cache/mask_3/mask_53_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK -0Ds ! -(.Bp&|"-t&`qQ-"9_+)Be/H8D%a~}spKFN=,;;a^t4\FSN \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_57_3.dat b/phpqrcode/cache/mask_3/mask_57_3.dat deleted file mode 100755 index 4e1e5da386a57dacaf76f93d05473ff922574488..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmV-^0D=E_+U=Gx3cxT719!hh{{QE?gyNwnmS{-_8xJAm$PtVPuqu0fSCq8`R#F2C z`Jye^+}fgNtCnh;u5A$xa)x*4$m(#xu^rp7Rcwt+;I=%SqH*TgTz7#%(6RO)$6#_BUJmZJUz-cM|kVFF3Ae8Lopr+yDRo diff --git a/phpqrcode/cache/mask_3/mask_61_3.dat b/phpqrcode/cache/mask_3/mask_61_3.dat deleted file mode 100755 index bf1a3cc..0000000 --- a/phpqrcode/cache/mask_3/mask_61_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0fz4-%*dp!yZܫu(~=&ۓ)R2"/"<9FΊ=rb"/rw"2B#3-0-KW \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_65_3.dat b/phpqrcode/cache/mask_3/mask_65_3.dat deleted file mode 100755 index 8589208..0000000 --- a/phpqrcode/cache/mask_3/mask_65_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xQ - D4\?R ,!O-Nv1:cZu "UMÕF ~jK-la[^q^Q\=o-laZpUB @IKJzɢ|1Í  \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_69_3.dat b/phpqrcode/cache/mask_3/mask_69_3.dat deleted file mode 100755 index 55318a8..0000000 --- a/phpqrcode/cache/mask_3/mask_69_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -x -0 {&2'd l=,Fy;$쇤WE-R:%T,O2g"",Ȣ/DyĈɧ{O䮳",:NvEWN#(&,,]x؅ \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_73_3.dat b/phpqrcode/cache/mask_3/mask_73_3.dat deleted file mode 100755 index 15be77f..0000000 --- a/phpqrcode/cache/mask_3/mask_73_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xQ -0 C{g;JJ?dԬK=RasJhTJ6exka\$nIE,-/XB*х=wee4t̒tLщtt߫b gFf qoddn-? \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_77_3.dat b/phpqrcode/cache/mask_3/mask_77_3.dat deleted file mode 100755 index ec78280..0000000 --- a/phpqrcode/cache/mask_3/mask_77_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 &BiRaK"t`I@|fXyilE:Sza18GifK*?:YC1쌞졘(ቷJ*jl*TRIKR^ؙks)c)c)JZa \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_81_3.dat b/phpqrcode/cache/mask_3/mask_81_3.dat deleted file mode 100755 index 47bc0f7..0000000 --- a/phpqrcode/cache/mask_3/mask_81_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 - F=\,JGAġhj>#3X:kԹ\FM Jhu3>TZ{PSgP'kVjժU_ۯUV=P oO:Wҝj[Wxm 5 \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_85_3.dat b/phpqrcode/cache/mask_3/mask_85_3.dat deleted file mode 100755 index 02c4f8cdbbe43a99de71a77162d811d36ad4f51b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmV;R0AK%j+U?m(3V<*SMbUXy^Sb}dIVrU|sn!>N+|q$Y2;pF8P^qqRd9N$FYg^Jj ztFhS7{Q{@rM+N5MyIOtAC{U6F+M{SU#kj+puI|W4iU0x#Ab>!sfcG@40`85I_KdmkG#TsrP@uMqv1rdge4##%ZWgv6J(FGUkB?1g^dV O%IE@ppbHjj!&bK*zf9i% diff --git a/phpqrcode/cache/mask_3/mask_89_3.dat b/phpqrcode/cache/mask_3/mask_89_3.dat deleted file mode 100755 index 2b4cb59..0000000 --- a/phpqrcode/cache/mask_3/mask_89_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -x1 ὧ) *.@U |eŵ6ۢw5*) oiK4nk>1}d>@ 4XYCo ۡ1<AhFt - 4@51Wr>7G}}x7|NgN \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_93_3.dat b/phpqrcode/cache/mask_3/mask_93_3.dat deleted file mode 100755 index b4cc8a9..0000000 --- a/phpqrcode/cache/mask_3/mask_93_3.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 D}NrnJɪQ~B06na<<ׇe6MRCP L̓i9M 2 LkŮdDv*"aXjBdAddZTdAdqY0exqeN&WVQvc \ No newline at end of file diff --git a/phpqrcode/cache/mask_3/mask_97_3.dat b/phpqrcode/cache/mask_3/mask_97_3.dat deleted file mode 100755 index 7adc9ebaa77cfc3c6f7a54307a831fbeee0c87db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmV;g08syU+U?rG3V&G`N=*G0-MD(Ga{FCK!(&5t$)O3EWmo!5xs*ixXZ zVA@1zxl+BnrYNa(r@cz9VNyyDD4l1cxytAa-_m)8y8uckp@b4jD53OrC10xSQX0*J zF=dt7h5IPcalDsMLJ1|5P(o>6B~s-^N^~6WC6rJ?2_=+%t0e0VeE$jDlr;7Ux}BHg dPL&$iL~p8;J5{b%n)WQo-EsPG#~oB@^PHSYS7`tM diff --git a/phpqrcode/cache/mask_4/mask_101_4.dat b/phpqrcode/cache/mask_4/mask_101_4.dat deleted file mode 100755 index 1c97dc0..0000000 --- a/phpqrcode/cache/mask_4/mask_101_4.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA Fs^1bИ]4m+8+Ve^HR]\c -oWN#X+l HEcp \^.9qW9":.BB \0aPǨcp \ONqjpG}}$.˅ \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_105_4.dat b/phpqrcode/cache/mask_4/mask_105_4.dat deleted file mode 100755 index 0211cdb..0000000 --- a/phpqrcode/cache/mask_4/mask_105_4.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK -0 D=Mr˹A TeEFL2 #鹢_I!딤Ѻ-իkmO]sS T6*'8 N$'NZ^XXh%Zrr$W}rU*G9r|c[cN[_=׫5^J 1*qv \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_117_4.dat b/phpqrcode/cache/mask_4/mask_117_4.dat deleted file mode 100755 index 3867259..0000000 --- a/phpqrcode/cache/mask_4/mask_117_4.dat +++ /dev/null @@ -1,2 +0,0 @@ -x - н_s]4Dgn2Jj}ҾRsSWGRɧ)5Em#ܯk_"z3\rʕ+r Lk|/{;'jk^zGw=K_GJACF5KEX*@<$z}?p^YqOrD6l{pq{+`&l7JcHsOy z_GM@Ox_x?b=y>Jqe}Ao?uX%DM`IXJr{-ZaqKAvlH`*6wj&*7((AW$y+_m1`VYgIgEyrCkW+Vc diff --git a/phpqrcode/cache/mask_4/mask_125_4.dat b/phpqrcode/cache/mask_4/mask_125_4.dat deleted file mode 100755 index b98dc813afe773cdcd71a8779391ca295c0d3a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213 zcmb=p_4c+S-ysD7)(f`F8-K^2;|+^RST%8G)>;-rsHGtPebu=wvE(Rqud?@Jdiv-z32@0r%Fa7(4|DUhVIr-8&`h2IF>D|wlymv&u|5gc>1uLtXBe(o`B(jjL zU;pLDUo3v_shtNkChn^3Ki;iZZS8BT4}Mgedi!xzR{!b=ahL8^+0UC-$jr|$aq=Dj DA0&Li diff --git a/phpqrcode/cache/mask_4/mask_129_4.dat b/phpqrcode/cache/mask_4/mask_129_4.dat deleted file mode 100755 index 8ecfa250845e8ef1add89a66c88fc9f31250a436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmb=p_4c+kU$cP#%Y}Q(H@>gmX_E0-a3R;c&@UP>6Fhnzw0;$t`MGk<)@^G`dv2;9 zJa>BiGETqum$vWzzWVcDA(y^F$>O^;cE3bkZ7!_If6o7~R(2)#^;-&#|1=8@FtW=O zT)5zvG5y;kg&7OBX?Mm(S)NeKczodZftUvk%zPFg;tOl7WBdj2GpxmpM2j^4FA?}L o{bhTz9Ot|H{BduueXdPB_S/#\p\p># \p\p#>qp\p.$Iq dGR_4  \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_137_4.dat b/phpqrcode/cache/mask_4/mask_137_4.dat deleted file mode 100755 index 0c09c487c2e85488f8caf2dcc863e260cfd077d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmb=p_4bYxEjs$#?!2-R}~*>9$YZ>m}P8_SPSlc>J(ZYVC8? zO1oo*K1q`<^UtZRwccRy_UiY^lc)4;t3SOfES@w`rW=l2^YbTRO$JKN#b*jQw`{%rV(;`b$vL{4 zXRQkQ#dOtY-ox+n-*;b@wS2d1)2vU1rN&=NV*fwfSo>q^jJZKc}*2a`@ScXA0|@PM!+Z)$&&j+uR`i+&96LlQothXU{Gd06E`pF diff --git a/phpqrcode/cache/mask_4/mask_145_4.dat b/phpqrcode/cache/mask_4/mask_145_4.dat deleted file mode 100755 index 33fb211249fd13955f9481a5af91416b0850c79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmb=p_4bYjXH=f@| Kjo |SSWKZm׌j\Ъ2 W\qW\q"~ jvtv_\qW\qW\q%g3 }+++ r9ArW\qW\qŕA g3WA W\qW\qW]V~v{D3Ȝ!\W^Tڍ[S7vۜgq? -{peo383838{YXz,_OYfe3s38383\C!Ms38383r \C?37938383\C!07M8383q,mMrskWv3~W WB \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_157_4.dat b/phpqrcode/cache/mask_4/mask_157_4.dat deleted file mode 100755 index ad5fcf6..0000000 --- a/phpqrcode/cache/mask_4/mask_157_4.dat +++ /dev/null @@ -1 +0,0 @@ -x10ޯs4"FP=iRX¢X0멪u 4ftl}m➭S|юS P5<]rwqwq^QN6ÏZsߙ,wqwqǝ>Μ5g;;Y}Vgw,wqwqw>9wqwq>3gY;[ww?P3Ƙggt퐮;].3w4A \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_161_4.dat b/phpqrcode/cache/mask_4/mask_161_4.dat deleted file mode 100755 index 7604c45..0000000 --- a/phpqrcode/cache/mask_4/mask_161_4.dat +++ /dev/null @@ -1 +0,0 @@ -xA@ fs!AL_|,4l)iml׉0' +E ]N\x#2/_{7g9쏼ٷ}2r!?}-#Te9C9C9~6Sʇ겺!r!r!ۘse9C9C94_Ɯ|.r!r!s/s0 2r!r8}DwrDXΡ|x|!2 \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_165_4.dat b/phpqrcode/cache/mask_4/mask_165_4.dat deleted file mode 100755 index d83d631..0000000 --- a/phpqrcode/cache/mask_4/mask_165_4.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA -1 }Or."*?fPLHIkΫZQ8 -Gyqk-n5+?|֎kKnEŹK.K.?2.|EJ{2<:.Ku\K.K.ǝmu)_8\r%\r%\Џ;'2!_8\r%\r%\Џ;'2!_\r%\r%\rinC?nn9 RK.K.;.HqY'ݽNF?K㕢,R| My*3 \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_169_4.dat b/phpqrcode/cache/mask_4/mask_169_4.dat deleted file mode 100755 index 4aac95c1e3fc9ba5257f331564b211fab568c376..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmb=p_4bw{7n30m>xEkX%lG~l?V3;+6CwFBVc+Mpz`!LezkNJB-=9zK3Cy|6dc7)c z$=5@7j?a{Q`J_AleCn>hU3Whz>;A1NtE#vC#=Q1!Zp)m1?|$5V9DCCK-|1Vc*mtaT zocL^x-SRm_r!-;2ueFy?#eVr#8L;Ge>5J}i?kE{?B4PtL69K8~&|}TJq5E>1FRHmwz3+$1r7q GdJ_PDBBetB diff --git a/phpqrcode/cache/mask_4/mask_173_4.dat b/phpqrcode/cache/mask_4/mask_173_4.dat deleted file mode 100755 index 9df4d86..0000000 --- a/phpqrcode/cache/mask_4/mask_173_4.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK -1}Nrna ~ZY!Jt^5(/jkz[pj_?~v:|jwՖ_mXzo6?n%^4`7 P=;q=RrH8oyopw{-jJFsR diff --git a/phpqrcode/cache/mask_4/mask_25_4.dat b/phpqrcode/cache/mask_4/mask_25_4.dat deleted file mode 100755 index 0c7c44bbb5bb50a1f060373ea3ca14d083fe686e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmV-S0JHyi+A}af07FAV1c%Fjuna^PAxDf1Irg9fvh0EKpc;@!E_4AniAM&vX|%Qn i>NlJ|HN*%VIGY$5BJ4r(4;Eo;_F$1gmjnRDU3Su2%N^nX diff --git a/phpqrcode/cache/mask_4/mask_29_4.dat b/phpqrcode/cache/mask_4/mask_29_4.dat deleted file mode 100755 index c28dc20e8248d196503c88e3e58b9048de750a16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmV-U0I~mg+A}af07FAVI0*(^2E@r?NRc2*iM`kWMfO73Na9E&7dAmSNkA6A$s@yF k1DFWbSimBS8G{geiIFARUKIc0kiuy%rYtrE0Gke<<${17%K!iX diff --git a/phpqrcode/cache/mask_4/mask_33_4.dat b/phpqrcode/cache/mask_4/mask_33_4.dat deleted file mode 100755 index 5834b6fb5672ddd54227a5229ad248efb56f9931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmV-f0H*(V+A}af07FAV1PK%5G9X?BinJkI0ZA&T;SOAYD(-+P$1ng+a^aGIlSHT> vY|E%S29rDBDF$Z>!lD9ODl{aRP7U#;Q^M{*2@gEd1l)nH0+%8HgW}HuoFyU1 diff --git a/phpqrcode/cache/mask_4/mask_37_4.dat b/phpqrcode/cache/mask_4/mask_37_4.dat deleted file mode 100755 index 4bf2e26ed0238cb7f0fa88b4a2e8d9f607c6c465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmV-c0IC0Y+A}af07FAVG!hE93`kRjsRW^pR8`b;7d}8$cR_hr3_>Eg@JYf+B2^J* sQ04GUMNxbc& v?i_XJs5{AZrvXfsV99_*CH~R|;!aXkQtVEY@FYSRQSQW4Nk}mOMgc#BT0kV* diff --git a/phpqrcode/cache/mask_4/mask_45_4.dat b/phpqrcode/cache/mask_4/mask_45_4.dat deleted file mode 100755 index 1b921f3009656cf429e67486e59237b8dd15ff5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmV-;0Ehp0+U=A<3IHJpMfaXY?|-@3gj12@{}N1#TnN<@9`Z@`Ei+qoFVPwup|*kU zpmqSgF*>cacXR`pI4*58TFBT1fxMG6XL7wac>{^GqK!9Q$bqGK7QU=)P)>BL}k8 eRu0aQtjeU@>+_-I`CuK_9H00P-1Gn#s>kM_-9E?w diff --git a/phpqrcode/cache/mask_4/mask_53_4.dat b/phpqrcode/cache/mask_4/mask_53_4.dat deleted file mode 100755 index 7e88826dd67c8eed58a77ecc7bd6326cd996537c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du2@+U=H03cxT31^1pt?|->=VN(l5e9snI(1i&h1DSjzs%My4l0%60s2sV1 zUFvoM>Q$%8k$LTH-z$uZ_X`^svLKUJCMj-(<27Edc$MCl9xf#1?;NQB?uAn=uepcg i^-r(*&mns8lo?t9xVoWK-RMw{czy1?FmMC1XBA^pK|VMD diff --git a/phpqrcode/cache/mask_4/mask_57_4.dat b/phpqrcode/cache/mask_4/mask_57_4.dat deleted file mode 100755 index 84669c7d65c97c0b040497b32d3d3037c70d826e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmV-|0Db>>+U=H04uCKSME9Hq?teKq4gQfCYGNWRShRhHSItD#wao0Xdx_S`3}%zb z)6ua+cp@ZJk!QRPPwS|R$7C*c-vtG{7f62E_H57pdBSPpo*a39C`!$ZCqdRc`@3z= k_I%kB_3cxT31n<5^|NpsON^2;!>e@qKa}XLb#Yw^v)q9v(qB=lyhR&g$ zouh+=UGEBA9-;T^egK`j*5&+4Z}?KB16>uQvCipDZ+dUw-O4os=_q+W=RtbJoA;dF m^rrXIyZXXjy>U8x$cKrH<+(z6K0*KBy}^0+esBPHn8I@q@JM_B diff --git a/phpqrcode/cache/mask_4/mask_65_4.dat b/phpqrcode/cache/mask_4/mask_65_4.dat deleted file mode 100755 index c24343d..0000000 --- a/phpqrcode/cache/mask_4/mask_65_4.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK DtXЙ.4E1^hvOxW0 JHŻz[^܈[v -yyZk=`vcǃ<ȃaCe \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_81_4.dat b/phpqrcode/cache/mask_4/mask_81_4.dat deleted file mode 100755 index dd65216..0000000 --- a/phpqrcode/cache/mask_4/mask_81_4.dat +++ /dev/null @@ -1,3 +0,0 @@ -xA -0 yMyXE m7"892ѸQ1ݳ+xx;t35DIY1x\:u}e/ #Th< -UBz<5G<5{G<5<饫>]Urxu \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_85_4.dat b/phpqrcode/cache/mask_4/mask_85_4.dat deleted file mode 100755 index c8d5123e26909726dbd71694e1f6697cad51529e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmV;L0A>Gp+U=P!3cw%?MR!k=-2ZZ2N*jmT*5nJN&mmxtH#~v~YIZJnPs9LfrlsbP zk*TK+4nE7TrIxLs*SC2W7zhg5zDpNC7h5Ilh$5=S0ABHmSG?ji)1NN$BI-+pH9Di \ No newline at end of file diff --git a/phpqrcode/cache/mask_4/mask_97_4.dat b/phpqrcode/cache/mask_4/mask_97_4.dat deleted file mode 100755 index 5d848caade31141b6a6d238828e0513940b9aec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmb=p^>&scSAzi$%llg2U;ocnYTk;AQoMQf@D~ArLUH5VhzlL*U+;ClQn_{Ld4Rh8 z>uTAu_q(T_ELu@IVU2P7<-3>5gi15Bf~CWkN@uS0RjmncZrXE$dhO>e3gqq;cwFbMH2i4?0P>DhOaK4? diff --git a/phpqrcode/cache/mask_5/mask_101_5.dat b/phpqrcode/cache/mask_5/mask_101_5.dat deleted file mode 100755 index c21869e..0000000 --- a/phpqrcode/cache/mask_5/mask_101_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -x - E+%=M3Cbv ѬNkûgqkqq{%Oo,iKee3[|iVh]` ` 0ʕz˴T0Gu/q8F13:W>#ȕ0c0Q8E=F#+a X͞+cV%9W>Q]TkY-gLqD艋 \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_105_5.dat b/phpqrcode/cache/mask_5/mask_105_5.dat deleted file mode 100755 index bc8798c64015b6595105a07645625a572c839c0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZK&+U=S_3dA4~1n<6P`v0HHC0WDb$gbEE0yT;RFVdN!?Sm0#$x+d(-M&MH zb#RhAbEHXz@r$NR=-U3QPci-P|L%XEWG%ZUmG!BgbTK0LXu8R?&L*=*eAagQlk8Qg zsjyG52YayhPWDE5FUx?-`>CeAIbz1%-fVQSH_Cfi23+1R)r9Zid)&FO2Yavwd*nUx z9(fPn!}qvzVGs6T5BA7=v+3UUic`wTHUd>xK aP2TVA&wEd3Dq=6}&i9BW^E?1$d?(3j3x3!D diff --git a/phpqrcode/cache/mask_5/mask_109_5.dat b/phpqrcode/cache/mask_5/mask_109_5.dat deleted file mode 100755 index 25a394402fb8b1d0ebf02b85473522a21235736d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmb=p^>&scSAzi$%lk^-Pyf$XZV2j*s`A*zF?pKO&MOlNBNgB2F4Ef5es`YjsdLA3 z1GmLzcQ4u+7wuKIGk@pLkJ~=o2#t=t|EsmEP`E4gbGg?&F(KW|<)*sao-4A2zw@dk z3W3o7Ln%e~oL=noQ``Tq@Y3g3w~o|0t6%gi0ZRhqKTiJP`A5a7)9;Xq4;a-6*>}!& z0V-}7~CRaH?+kXgI=m1Q4e>}I|^`+f56tjphW?I(xcpB?4RQpn(Z H=>0 0 0 Ofz3=>0 0 0.3Z$׷8\pw4:Zp:qX 7 \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_121_5.dat b/phpqrcode/cache/mask_5/mask_121_5.dat deleted file mode 100755 index 9bb5c4158981760f99c1831c03ccf11a664e6053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmb=p^>%h3*AWFCm;c4Hp8T7ByMNb~P0`w->X-Iu1WibCj$>!PxYtGF(Dx08H@Bz! ziL_Mtn}1F*CX2(7=TOEDEbWKm# z7n3IwXBH>TO_bgSLC0^-+rs}kq59sv;^g0Fytmmr`w)|MuCvr_`^DT6m?EIk`)9ws z`TOnWP2bl(=@oqXJ10zcK~pjRkXgEU#Yr9g&b-C9Uzp__hM;esZ;0LBZFwcK^7XPb o>!)^ZQ#aoWuYBxxGe&=>)49shxbEDe|L3eseDs4sW73s<0HpnlZvX%Q diff --git a/phpqrcode/cache/mask_5/mask_125_5.dat b/phpqrcode/cache/mask_5/mask_125_5.dat deleted file mode 100755 index 2161c50..0000000 --- a/phpqrcode/cache/mask_5/mask_125_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA - E&fc;S$?؏Q4YahûyJ}9g==li.;nh_wz.qCWȧy uPk;<<<|*q, mkWqNl% yyyy^2䰅sX|aaaa3ϙ9lH<<<<̿웁[n`Tq8^vy \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_129_5.dat b/phpqrcode/cache/mask_5/mask_129_5.dat deleted file mode 100755 index f0c1d65020884c517fcba84b94191eaac350aaa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmb=p^>(%)-(dqD=JNe+fBrw;rBWIY;l}PP(iGgY;6uuWT>&yOg;TY((|V7;4|rHz z$aHnxR5q=ee-{;mpS}6Fjz8)5|GBsR+cqxEkvegY{WD8>{;97#wkaFeC|)-I_*?FJ zdDOO73mlv68dxKM=*5vkTKXxHkABpxay&a{NAkk7uziscPg`}IW$x!MWZc)F|A2b~ z0~9@B{lrw+xCbP5#sezq5T~F&LHq>w52k$wdRTBP%uhX7dcHJE;G5lvJnQRETQ@vs deIFa2`wqnRlbR99G23{{r2|{+4tV*M007v5c@F>p diff --git a/phpqrcode/cache/mask_5/mask_133_5.dat b/phpqrcode/cache/mask_5/mask_133_5.dat deleted file mode 100755 index 46be8b0..0000000 --- a/phpqrcode/cache/mask_5/mask_133_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 DѽOcr]4%1mCTxΜ[Dv={FEϏq?ݿ9keѭ}'2^c4G:3=JK-F0`#Hw'#<{~Z4 :BG舻F0`G~:`#?#tw-`#?##t#F0r}Q}eR;M/k1mX=hsH"k M:3qOW}9ԖIH1G;- sڶ?[%M - v#;zg^3d}69Ψޙ@7҄#gv`;׳ީ\$wlv`v;ލ}7wߑa;vkA#gv`=N2wxgWӤ@n?c}SQ:Zd?+9vz)P \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_141_5.dat b/phpqrcode/cache/mask_5/mask_141_5.dat deleted file mode 100755 index 60c1a8e81acb9a104b1003fe8c362588b053abac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmb=p_4dw1u0sYqtq*_O`hNbW|NLx;(ly@Fw~{rHnwy%g%&1?U=@uQmHZAgYPUWvV zSwa8P%uLts{p{|I6Ff?XUZ>?fOlh?Hu<*Lhj^j-g&%KHRklY zHSXJ%GR-^MUl+M`k&@0?^TfhtO`k-r;2DQRmi;?;$r6o)IJ{82> zzVP^R$E^#0m%8OX_%_jPZqDCVlYVV;i{Ag?{rvsKSBqQ(C$718!)g|LXx`R)LEA3< z-^TpyQqr?GFC*0AGYu!M2uzSo(E^bzLvI+;8@4U$WERT)%VrUu|y7`j4jj zp4qEF>;UTg{AOd_*}XaEC*vs]Ŝ_{W!zﶬ/)˙v V6V޻,f1Yb n^o>\O],,b,f1YyVgYYYb,f1+ʳ<˳<˳1YbŬ<+ʳ,,b,f1YyVgYYYb,fukys77}vmb=wsw)tW: \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_161_5.dat b/phpqrcode/cache/mask_5/mask_161_5.dat deleted file mode 100755 index 70d5fb0..0000000 --- a/phpqrcode/cache/mask_5/mask_161_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xI -@нDp@ o|m rHk㨤~co^Jzװ#5l¦S_92 [}ZÊ=T2ƀP2[cV衆CYf'-X9>v~usK5`e,2,2,2-///o_q}K\reYfeYf峖o+/,\feYfeYfٳexB.e2,2,̲g+l\r16,2,xKGoxt!_!?`Z2*Db#6mYclucZ_V= zotdf6-&SvZv*GR8D7h;;_}1^MuiAF~^{4Rr^~KwcM;_~Y5%sO3bm!TkuUAgq{`4tJ z=-blf&CknX*3G+da{|L^pSsAbX|zx+~B?%Xj;& z;1;Iu;j^AJCF&Z`Lw*|;|Nba-v0r}8=>>Iv>dx&vf52z;Q-;T)bDuoUlH3!|5cNl~ F6aZ#Wx#j=> diff --git a/phpqrcode/cache/mask_5/mask_169_5.dat b/phpqrcode/cache/mask_5/mask_169_5.dat deleted file mode 100755 index 921a770..0000000 --- a/phpqrcode/cache/mask_5/mask_169_5.dat +++ /dev/null @@ -1 +0,0 @@ -xj0|/niK'.r:T-m&Zx9yq3rOgvOO_zׯu`]ȷitاtiloc13j9%_g|ԧ)>>ϰ=te&_4=tU}/>>>Or5/u>/g}g}gOsvO}/g}g}ٷGo-w{r_{g}g}g_n=n]4Nkβ_M8m?SF< \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_173_5.dat b/phpqrcode/cache/mask_5/mask_173_5.dat deleted file mode 100755 index f9a6741..0000000 --- a/phpqrcode/cache/mask_5/mask_173_5.dat +++ /dev/null @@ -1,4 +0,0 @@ -x[ -0&G1gD)[CzeDѷц=RN6FJm JqP}x s_}GFy; -[;]ek[QbTmy&0 L`̄Y?رw؛ fcVN9&0 L`ׄZ}0=F=F9ANL`&0 L`BzYfI=F9AN&0 L`&0 fIsr ' L`&0 L`<i͒"9AN&0 L`VaBX",Um> -=wZgBΜP !8 \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_177_5.dat b/phpqrcode/cache/mask_5/mask_177_5.dat deleted file mode 100755 index b07c636..0000000 --- a/phpqrcode/cache/mask_5/mask_177_5.dat +++ /dev/null @@ -1,11 +0,0 @@ -xъ0~ܾح uO,"% :$Xui=ѶՃgƸ?Ώq.So~z׉W:=h1cq]Ƕi!r8Ɓ`+X -V jj;8ƁX+ -oV`+X -V?[1^h-ֳ5Z;rmS+ -oV`+X -V;Z,YMB+ -V`+X -VZeڦ}r\!W`+X -V`+3Km>SB+ -V`+X -Vc㊛{g;^Qq5ZUݮQL0+*&YDq*6 \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_21_5.dat b/phpqrcode/cache/mask_5/mask_21_5.dat deleted file mode 100755 index 04f97ea6983c85e1cf6e68150ea02bffa30a4f4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k+MSL;3IHGo1n<6P=l`E8qQc53Ts_3F*hoFpjJL@ppoFxt|L%<{=GZy:DR \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_33_5.dat b/phpqrcode/cache/mask_5/mask_33_5.dat deleted file mode 100755 index 726d7fd75da51d6bd7737a41e0120162ad66f42d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmV-w0G0oE+U-+G4gettyYm|Q|Ibavg*ZYTH6AU510hWtK(zoJYG1SgT>VVIrQ<*s zI~>0{7>;PQoL380wan9y;(obh5mL~qPG^u~gT@LOIlD;&&=vfsD8 MtZP z6Mwy=xtNYJP8P5*q$8GTpmRmFxG+$uUgBJr@iKnar8ktiR$tD;xa+0O#TdC4Bt{5~ JuLf_z1Mr1%Fq8lQ diff --git a/phpqrcode/cache/mask_5/mask_41_5.dat b/phpqrcode/cache/mask_5/mask_41_5.dat deleted file mode 100755 index e07c617..0000000 --- a/phpqrcode/cache/mask_5/mask_41_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xTA - 5?7XMtxҴx ?@7@~"N$Sɰ{+CA'r\Pp<ޏ- ͺ:S3sԉۻީz#qw > \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_45_5.dat b/phpqrcode/cache/mask_5/mask_45_5.dat deleted file mode 100755 index 5168a17..0000000 --- a/phpqrcode/cache/mask_5/mask_45_5.dat +++ /dev/null @@ -1 +0,0 @@ -xUA 5?U:N&Z":;4P1=bNvSGM1˛n'(κ J{Eѵs] ,sq \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_49_5.dat b/phpqrcode/cache/mask_5/mask_49_5.dat deleted file mode 100755 index 9f3f3cd7d60bcba44d9223f52747c1cc9a9feb52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmV;D0B!$x+U-_B3cw%?yZ1HC|3A0G94cx|E9_(x5y8cz*3P{E3|?W)+(E}-2WX#i zfHZ}}1&-ONsSXt<99&1;WS;^gJWwdf{AS1((&~d%`->c<{A($VpSL1s{ zRx%t39rs?{9Nck;b+FN)RKeb>Q2ppQ^!)JYKLg9b6OOo!Q?K^%$i!U415hQ$TboHr A)c^nh diff --git a/phpqrcode/cache/mask_5/mask_53_5.dat b/phpqrcode/cache/mask_5/mask_53_5.dat deleted file mode 100755 index 449807b..0000000 --- a/phpqrcode/cache/mask_5/mask_53_5.dat +++ /dev/null @@ -1 +0,0 @@ -xVA " zYf5ƐJC A;l\,dR. \(e_ еaNi5\żaLP(;2שjN6O u+l{y6od^ C[%  \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_57_5.dat b/phpqrcode/cache/mask_5/mask_57_5.dat deleted file mode 100755 index c7dd81f..0000000 --- a/phpqrcode/cache/mask_5/mask_57_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xVA - 5?NlZHAbBZ0a Md`1z'"<Ր19nvͨ. )bݻ~;9Z#tB~ \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_65_5.dat b/phpqrcode/cache/mask_5/mask_65_5.dat deleted file mode 100755 index ecd9380682523494a1f5577c6e22eff92571b446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmV;U09^lg+U-|C3IHJpy!#sG|DW4SODL(th;FD_Ol!+`ptx^N zLEU#+P+TP~hiEM?kDlMYCn2{Nokr`dh z=(A4`MyHt}6_aUUXNJM(G}onKt|Qlx8JUq8UCD^KPfsl&$;;O(L#`i%q&M<+dnDc& Vax;Tki-1v3l_b|f_yg_whE8s3Pu>6k diff --git a/phpqrcode/cache/mask_5/mask_73_5.dat b/phpqrcode/cache/mask_5/mask_73_5.dat deleted file mode 100755 index 00001176d018bd72f9f2128f2f0bf775aab99aa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmV;p07w6L+U;0d4uBvG``>BS`(MrYR@be?`f zXg4__uzEOkK6dEjx2oLg#9{`gm`?j=wt4_|87ivOHqbF%PAmBX8kw9Db&_}T?ycUn z`rYuGA*p6w>oim|H}6{gZul*glk!e^C-3Cl6W;y1W(Io8^nRzjQ{KtDFL+1JRVtmB msmjs2lzG8{6JIm^VkS0TGiPwh(`lA>@p#INaS{u_o$71/34Ϊz^'[FyglgM>OTL4ϔ{&3Wy*ʧb*`<3;Vo0/s6n0ya[mcE \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_81_5.dat b/phpqrcode/cache/mask_5/mask_81_5.dat deleted file mode 100755 index 71215e9..0000000 --- a/phpqrcode/cache/mask_5/mask_81_5.dat +++ /dev/null @@ -1,3 +0,0 @@ -x - C~M?tzU4" }tMX2|.ɋ˙F\~m4Xu -ٔ, w:EƄ>X̯=_]g>>zמ/)5ךkkkZsXXY{ܮ}~mt:S#&;U#) \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_85_5.dat b/phpqrcode/cache/mask_5/mask_85_5.dat deleted file mode 100755 index 09cf0e28127934862f45b0f155ede22e48833cd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmV;r07d_J+U=P^3V<*S1n+rG^8e3yuu_X!YO*T`o0cLu)Fn>SVBDKU)x4XXo;}Lz zW!EUrTdh$X>snv=m*blAkGsN*t+gK4zOfzOFOb9L?@mq&=-FzkwKE)0V`(MDRSbv$ zF(3xMXCUdfAl$J#15Y(!+RxHTimUQ~@_-l+17bi7s2)%~pgf>FAO^&M82AqZz<$9g ouBdLo$N>Dm_MjDe$NHpal&=TaS~+q3j)5w#tg{8Q4HYg~22k``-v9sr diff --git a/phpqrcode/cache/mask_5/mask_89_5.dat b/phpqrcode/cache/mask_5/mask_89_5.dat deleted file mode 100755 index 5fff530..0000000 --- a/phpqrcode/cache/mask_5/mask_89_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -x - 45enpQ Gcfl^^;;b5;`kU͹߮j`NsO=\[a6~nLD? !6uF%w*Ȭkf77SĆbÆXodw_—mbClNۙ ck&YVoܡ׷BעبAl6 Jjx \ No newline at end of file diff --git a/phpqrcode/cache/mask_5/mask_93_5.dat b/phpqrcode/cache/mask_5/mask_93_5.dat deleted file mode 100755 index ec4240b..0000000 --- a/phpqrcode/cache/mask_5/mask_93_5.dat +++ /dev/null @@ -1,2 +0,0 @@ -xK -0 D>&&  fP^8BY5s(imҮ=f3/wۧEyYQwf[} [90303ef̙3'3=,ͼwxDַ.,;s%g,,,=Rὓ7uKKTD<(n lYhV۹sޕyPEtyY]ns ;ss,!LkԅcbL12cX91Z#XEn#;svT~L~LR11vs.1111J1&؍Ń111J1&ƞg KLƪjlk{gڞ5K1/ǐ~,ac$ \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_105_6.dat b/phpqrcode/cache/mask_6/mask_105_6.dat deleted file mode 100755 index a58fec7..0000000 --- a/phpqrcode/cache/mask_6/mask_105_6.dat +++ /dev/null @@ -1,3 +0,0 @@ -xQ -@ DskBZ#o)Sd}Gܷl쯯^)G]S4S?#BZ:+{sHKNiI!me1 -RWe9!``Uyˀu:檞U=w-oԺwB}cMK蹰{{=y蹰{{=y蹰{wScaoi'fyO=CyO=Cy[{S޻=;|v4}ϯ20 \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_109_6.dat b/phpqrcode/cache/mask_6/mask_109_6.dat deleted file mode 100755 index be7b474..0000000 --- a/phpqrcode/cache/mask_6/mask_109_6.dat +++ /dev/null @@ -1 +0,0 @@ -xA0 ~ρDBHCHV20nuol쯯˻=ۢs9[l'?7R" &2:7QqX_n ]$՚EIY*Lq0 0 0{LJз(s\ɳwX-7^ItIII$~?N0 0 0O'Itg7L$L-Iuzrfr M^'}(O~R]1YLĞu9Qӕ \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_113_6.dat b/phpqrcode/cache/mask_6/mask_113_6.dat deleted file mode 100755 index 397f527..0000000 --- a/phpqrcode/cache/mask_6/mask_113_6.dat +++ /dev/null @@ -1,3 +0,0 @@ -x E5NՉbF6on,m>gS9RWcǕ9&%1_cx= GR^w-z?dzv=,}ԥ?ǹژ:9m==@U䲉UXUXVe~by4Wi:e=+3}u4V%s*ZZGM&;I{^hb=04yIS((dxvZSQzT-ftM{l(nX+lN_8ODT@5*n+ z7_UD(asGDJ=LTuwGLL68OD>x%-!8VhX~z9)s_}nsM7#IRuTu5NlE1M}DE!~LqHV#? z>Qf#_+}0{yXSc>}`Oi7KFW*{qHhjb7t7W#OJ7->RxEgr--0aihQri-x!RWX2w$z_x z-{(K`{`B@#S%`O<>9f@NPe0F}o}Zti{rTɼÆ$<>Ov'Cytaaaa~|'9liΣ<<<<Iæ<:<<<ٕWDzy:.z= ݓʯ sVöE=ll_k0_#vίmj \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_129_6.dat b/phpqrcode/cache/mask_6/mask_129_6.dat deleted file mode 100755 index b4695c3ff0d8ebd6925d8af5e0b403d5974ed46b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmV-60m=S&+U=Xs3d1l6Mc@4z{r{iaU`b3tw}-Y`#z{*Vj)K^nc<+O%V_D@=U$Xty z&tEmqAcJ?j?v86TK^YOR_hi^6CyeFRR#Fmw^kkN5f+OzB@3mz7YhU+_46fxbXrKqJ8dEWiRRzyf{&zkpxBFVGk0 z3uq)*fCX591z5l@;1}=<_yzg`eF2RG3$OqSumB7A1^fbj0lz?Bpf8}2U;!3j0T%w4 zg_beb0}DNqzB>!qv~!(b=$i3#ztA<~>3$)bcdqjbP4mv1Uw8})+SVD`X8*k}X!oJ` I0%mGk`PF`vEdT%j diff --git a/phpqrcode/cache/mask_6/mask_133_6.dat b/phpqrcode/cache/mask_6/mask_133_6.dat deleted file mode 100755 index 40911dc575dbbb17a4a057a46521c47b159138ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmb=p^>&UUU$X%Z%lo?CzyHr~4f5p772*@!y+W#4z-aoFvniX|)r-4>+}{b_t=?z1 za^B%Uo6C=?Bf5p+A4mDPRY%qZb+7;LH~IgZx!WufT|#LdH+*}lvf|jbWz$U;MJdj?+L60%T4~Y&jvfg5!>uf4f9dJsH`X7Hoj9}k^e4rC zS0C4C)Ev*0lXY~zAowlHfJqsIn&c1mKXCt`{DQ-(sSmClB=SSBgaxSfM)pCdp>-_w zAk_;%Y9X4Lls֪r666rҟ=vڲWy -' -Ο;q tQE>U϶f곭xN]Tc(s❮7tAw`v`v`v`kvwfwt;];;;;;!ޙ;ao];l;;;÷| ʷ(3}l.?"މr};\}S-Aw<9;EV'ם \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_141_6.dat b/phpqrcode/cache/mask_6/mask_141_6.dat deleted file mode 100755 index 0340409..0000000 --- a/phpqrcode/cache/mask_6/mask_141_6.dat +++ /dev/null @@ -1,10 +0,0 @@ -xa F4/c]زȐ[=[E럓sm,fn/|kj\j?g[q(NOZc5SGGP[oMVָfvL<)r%zGej;*ZC7u5PHroFXT;2T zErAz-@(#{w+P}?wqtMJ3uDW8^Zp>M}^Fr0Lpp6sHMCtS0T=zSWcURlGh1q8m6XBZP z)<+zU-@Sal+U99%rKBCNUob7{wNzPiPzs9vGH3tDF8^{p;9$q2z5quaE#u5AU!HIYpjb0cSa)^E8M?_KmSO6tj)==bYa lKD}5p(yFJjBc0i__3AFOq}<9%1{c=3R{)onxM=_Y diff --git a/phpqrcode/cache/mask_6/mask_149_6.dat b/phpqrcode/cache/mask_6/mask_149_6.dat deleted file mode 100755 index 69e9883..0000000 --- a/phpqrcode/cache/mask_6/mask_149_6.dat +++ /dev/null @@ -1,2 +0,0 @@ -x -0 E5f478UD62zmpߞk8}GӕN}?}W:guWAˌ7 ~;)Ø{̪ǿ+WPOۢrE\jwG)y˖wAAAAM%2`2dl|p}eqP : e j想=lT5ɠ : G{ddAtDaaaaa&أ&w : 1-MRb0Wf uz5&YiIѺNрAPQSL}4 \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_153_6.dat b/phpqrcode/cache/mask_6/mask_153_6.dat deleted file mode 100755 index 3ab6130edd889298419b702ce1dcfddfda30cf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmb=p_4ZC+-eCoSmWSnj%-{FNXq%daEZUK`+NjemCo*t?dCFURVYiCx+AY&AWaXz; z#Mw80;rtkb0d8YE*wD7uX)inq9ZVuZUFDP(T@8+N1 zd)6dxd%yYT`R@txHxIga-#%q{p=18$LjAv|)HMzi=qI9z_Q`c5T9@Wu3#VwUI?XqmF<#Ov^FVyZX znO%a=0o3e&KJ815aoXF1m16oYp6*fD?Jm?ru;I^wH)p;*n7!8a0qfl_O<0VW z=e+S-gZL9m5s=WóCaz6U~һ{`nݻdvVy~rZ"qk{>g$XKU}m\bjaGx,f1Yb]z̞^.5[?嬜r,f1YY>grVb,f1Y>g,rVmYb,f,|VY9Yb,f,|VY9+g1Ybً ̦M7>2{9z϶hm3l|9xټ#f#x6 -v%N' \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_161_6.dat b/phpqrcode/cache/mask_6/mask_161_6.dat deleted file mode 100755 index ecec68b1ac0f7ae45685bed5d752ef54a48f0f3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmb=p_4aOH-eCm+*NgRG%)jr)tiI;gamK_~Was)*2d9a$rlzvVFd(`Vxt}K4Lw&$1iobzS93uRn)?%d|f?w*sGT%NE> z{5IRU4qg|XWXaPJc9Wm(u=|#>w)ceHw=b*9PWtu#%$j?0UgYIfVgE|yed#NsPfj0ye)_BM^UK-)PTmj)Dk+(%2Qn6>@Mqw( zr>Eaf(4VdSY0^ghT|OXlU~(X3o3@I6N-cI>vvvVU=j&u7z0uK%@n+#iZgHXOO4Lz* zS5klalWD4FYUNJv>X3bV?!C6tj6Zkhb=|q?)qi3p?yJdny>uh|S+%y9&hsv>7uDKn Qv3e2bEbSR&we7b907^~O^#A|> diff --git a/phpqrcode/cache/mask_6/mask_165_6.dat b/phpqrcode/cache/mask_6/mask_165_6.dat deleted file mode 100755 index d641dfa3dde2565c932c7234b4521d35c4a1af0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmb=p_4e+=tY!lV)(ihDXFd5FpVz$dq?^)Rf%2utrx}%SOWEwLn>i_J`_iSlTlG_a z?5xW@^>fafr_X<_`MyU#`bPG>>Gu53mUJ)QUoZ3jlYiaKTYL1ypC5hw`u4`@;aj#{ z65c&WV*jT2f7ha_kN&Vtzwen{t6%P~`!n?0+`iwtWbQAWZ<=}1xMrHJarBp;Hbut9$M7_G_mM zcbUq6j_Pl_yVJGrbfKl*aj-TBao%v9T>btkn@|5AAOFSPyYnPS{;9>|9^-RRg7etb z$M3`Xce6j+WoQnP+#v(96>7#EW6f8E-w#x%VH*A2r>p9Yt-(CciI0n7`gVuGb;wx~J!=SaTlS=q~KG>㵾+'{է_Vˊx-J<ӛܗr_>>i;rO}/g}g}ٿ}}xO}/g}g}ٷGo/{{r_>>o/z^#}g}ٿd'ʳ|QRNS3YڳZ'msEǷj5 \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_173_6.dat b/phpqrcode/cache/mask_6/mask_173_6.dat deleted file mode 100755 index 95fa97c..0000000 --- a/phpqrcode/cache/mask_6/mask_173_6.dat +++ /dev/null @@ -1 +0,0 @@ -xa09MrM S*:a_-5hh_)uZ֭[loےsmKN{H?x`l#f9>ڟ[eЄώߓ ?^m*/Kmhy%v-nKlkKL`&& g5(gwxYܞa¬pVcZ[#O=SN9&0 L`DŽ 'tjj]QN9&0 L`sYRc@QN9 L`&0 L`"YRc\ ' r&0 L`EH9AN&0 L`& 7p6`|hms R5Ƙȉ k\X/ )g9 \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_177_6.dat b/phpqrcode/cache/mask_6/mask_177_6.dat deleted file mode 100755 index e9f0476..0000000 --- a/phpqrcode/cache/mask_6/mask_177_6.dat +++ /dev/null @@ -1,14 +0,0 @@ -xn {ڤ*4v۴u1{f{_,,K9o 4ǵ7lniJiggir<-MG - - - -xuV+zRCr9+Gq6QWb"Qe"WL+ - XXXXX/|~j,nmuMۤ+ - XXXXXYa,X;M+ - XXXXXe)oӘf|5H늚7/D \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_21_6.dat b/phpqrcode/cache/mask_6/mask_21_6.dat deleted file mode 100755 index 6bd505b..0000000 --- a/phpqrcode/cache/mask_6/mask_21_6.dat +++ /dev/null @@ -1 +0,0 @@ -xڝQ C9M{i]X1- C!D7 W ٜ&rD)~]<M 3(>{A aS \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_25_6.dat b/phpqrcode/cache/mask_6/mask_25_6.dat deleted file mode 100755 index d45083a..0000000 --- a/phpqrcode/cache/mask_6/mask_25_6.dat +++ /dev/null @@ -1 +0,0 @@ -xڝQA 52)e+(XmZt*(ڹ;tJ<峂_ڤ3oڴ"̢azh}&qvSG֙,-J4}oS[}w \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_29_6.dat b/phpqrcode/cache/mask_6/mask_29_6.dat deleted file mode 100755 index 0408e22..0000000 --- a/phpqrcode/cache/mask_6/mask_29_6.dat +++ /dev/null @@ -1,3 +0,0 @@ -xRA -0 XcL(4EԈB -8Cܾ޳nM+lǝՆO1]&ڍ4UD-6-$:6dZ?ylf? 8?߲bTQ5IjGy*#_+5FlYF0i|O3{~#Ory&Utx49Pb}M!qqU eGB4z0Ua0$-m+;~$`<#o+3+E#9Qgs1fkI!%T**fq5 diff --git a/phpqrcode/cache/mask_6/mask_37_6.dat b/phpqrcode/cache/mask_6/mask_37_6.dat deleted file mode 100755 index b37ff0a..0000000 --- a/phpqrcode/cache/mask_6/mask_37_6.dat +++ /dev/null @@ -1 +0,0 @@ -xA &T `jB{{Ok%tdtlP>c!Jq2?sR|6OyXBED_#CJGJ|{4?o|# zWi31{IkRWty7H{19EeICVF#bFBLK`Sqohq!P3c{Hxke=hL*^psZ< diff --git a/phpqrcode/cache/mask_6/mask_45_6.dat b/phpqrcode/cache/mask_6/mask_45_6.dat deleted file mode 100755 index a7da7ee0297b6371bd3ebf57467f009712e40cd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmV;u07CzG+U-?A4#Xe`yz?6P|L3|%6(}8a+S4YxXiTkkisJyP!>lt6lk}|T(tQNG zKksqJ*w!?R9dPAm82jdF@w%LHYmk%ah`(8LQqB>(=edn(GCywV&RxRO?k3YHLkmWk z*aT+KWsqQ$<3Gg7PA4uT3C+}K0drYmWeGYb>)1(p7ta_qgP{3eCtn>q+w^_mWM3IF rC#dT5I$?6GuTnWSVh7coK6Z$@lVax;CrT-Ws>PubeR7!xL?VGyGa6i_ diff --git a/phpqrcode/cache/mask_6/mask_49_6.dat b/phpqrcode/cache/mask_6/mask_49_6.dat deleted file mode 100755 index 64ded70..0000000 --- a/phpqrcode/cache/mask_6/mask_49_6.dat +++ /dev/null @@ -1,2 +0,0 @@ -xVQ i{K&YX؁0̦!=tn&fpWL -`/<ϓKVrU\1bGp@ӑ&fN/+ƽq`AWSRGp_5||zxν:J+WEm4h43tܭ.Ag`\ʤ*F \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_53_6.dat b/phpqrcode/cache/mask_6/mask_53_6.dat deleted file mode 100755 index 9139e325901037a409a2a2d317141cbd9bb27807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmV;!06hPA+U=In4uBvCMc?@v`Tw7*ElsG)6&_ona}B4=6R_J_H(gnqCg!_cThR(n zojZKuSh^TEmcRQQKZxaCGEO}_fJWLvh7ncHkT}m%gO65*3_i=>Wv5I&JTu%XJ;$_U zq9afxnshi?de~<88-}PKQlCVXOM8jnene{dW{CPB^@+QK_CphY=i#p94>Qav8_#g2 xe}y4d8>?E5v<_ݏ`8G1`B`;+}&s]<iK'l'9%.7 \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_65_6.dat b/phpqrcode/cache/mask_6/mask_65_6.dat deleted file mode 100755 index 550fc8f..0000000 --- a/phpqrcode/cache/mask_6/mask_65_6.dat +++ /dev/null @@ -1 +0,0 @@ -xWQ i{KNLk?e$Qik41{`+!ڮM ? 1b8 .^wsnFj5EaQX|=w@2v<ŋŞ|4w\UXBQz+TTcBz/48,5`ȱ OV$ \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_69_6.dat b/phpqrcode/cache/mask_6/mask_69_6.dat deleted file mode 100755 index a3e4fa0..0000000 --- a/phpqrcode/cache/mask_6/mask_69_6.dat +++ /dev/null @@ -1 +0,0 @@ -xK @dTh hLSSEq eY@<+*|窮 %>z*7e6QS`.>sE '%@[6@P0h aFxtpl2 Q-g1Nfeo^0FdT>N_OwG3ug {3<[Ժ b?'6^ \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_73_6.dat b/phpqrcode/cache/mask_6/mask_73_6.dat deleted file mode 100755 index ab71b70ae59ccfb23e9c4185b1e919d531fb040f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmV6w!~0Dh_U!#`ksFaQ7m diff --git a/phpqrcode/cache/mask_6/mask_77_6.dat b/phpqrcode/cache/mask_6/mask_77_6.dat deleted file mode 100755 index ad5a660..0000000 --- a/phpqrcode/cache/mask_6/mask_77_6.dat +++ /dev/null @@ -1 +0,0 @@ -x E۲iVa.FpSTY4q~z=:͒ 6m8:#0PضiDy:2Š'Zs&}滜\r0\ŚXw;iPȔL)Seԕ{hDu9LbJSS))gZ{e)qJdLw+#3-V0շljڠS-S 9=ݯ5PPq1M?g \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_81_6.dat b/phpqrcode/cache/mask_6/mask_81_6.dat deleted file mode 100755 index 28a6d07..0000000 --- a/phpqrcode/cache/mask_6/mask_81_6.dat +++ /dev/null @@ -1,3 +0,0 @@ -xQ0D9 rRLvk`0 ;i6\|_cc1huio#2}x*.Yt& -ְq/K;3ve̢ȊAH?`]5Kw!}{Zû߲W -yⷾ^_ykk^Kתb-bYSڸ'֜Nu#MfHSQ?|]IAiMyyuW \ No newline at end of file diff --git a/phpqrcode/cache/mask_6/mask_85_6.dat b/phpqrcode/cache/mask_6/mask_85_6.dat deleted file mode 100755 index d5403e49a80cd825886b9cf067587297c22542b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmVz+U=Q93IibwME~bB$^9?aLbYnE?lu`e3KJJuW7jbno{1 z6z!*@KIP;y_0^MY?(1Uq+xo)SueFNlpSwk~3kHJTZW;Jhe~*j0f6i>Ev*&T`9<+0j zJ6S`Ia)zC1@aibjTa>+X>cWZvF(3xSz)1!u`9P<`={Ia;V3iYwbtJu->xkU@m%8GB z;(!ntduS+U=Q93dA4`ME`S|1p|)V-|IyeM8#yz&a$P<5H8u1j zJvs=^zR6hA`VPFkrR{fvn^+GR9ksLtHTXo64YENt$i~~)fawi)LW)84hWko>3Nllc zx#paEz7d+7rFOyurM|GlguB4YENtj{*X=Ev^DF}ptAKX6@RpX4vjZjklMsHWS3nR)a*F|K!unUJMmO!Vn} zoTXx;{$pvl+nqFvSzoF-QmYM8VkABAis-2UASHPxZ{Wiz40ft)3ZUf;xjbgSiRJfEh3YX28r%%+%_c*_vLo*0<$@ z23~1k)EU$n%uQeh%zzm%^YhH4w^!eo$?ptXW}>e4xt^)$QRDw9atl$NB&!*=1='#`+bl]Z \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_101_7.dat b/phpqrcode/cache/mask_7/mask_101_7.dat deleted file mode 100755 index 1f6bc51..0000000 --- a/phpqrcode/cache/mask_7/mask_101_7.dat +++ /dev/null @@ -1 +0,0 @@ -xQ C}rm`fjT#54'tfaЇo$cmOJ23c<6Xn0F ) \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_105_7.dat b/phpqrcode/cache/mask_7/mask_105_7.dat deleted file mode 100755 index 6b0cacf..0000000 --- a/phpqrcode/cache/mask_7/mask_105_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0EFaMҙNPx)pQ_~|ñ(bF$.aoWGNPUǖM%{oHQUlִL^>+m#{{eo&Y2soM)gncO9sZ3wo+{=f.zޣ{{=zGcskCQϞp^&{^NʷU e5}EwGn+o \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_109_7.dat b/phpqrcode/cache/mask_7/mask_109_7.dat deleted file mode 100755 index 9875cbe..0000000 --- a/phpqrcode/cache/mask_7/mask_109_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -xA -0 D9Mr}* _x-d:"NJ-k"⨚d{ջגɬ|'rQ5+ s)c7-1nn햺qɔJtg^ʉw̘Ň-?*&Mm@ee5^ -c - -,b\13j4TZfŢo* - - -:Ut* - - -Xů0"%6ed 8rS NsUnk5XejުuVXg,l`u!hXZ\VlM|[ͬ0 0 0 #hF'c]i>Hataaa~<ÆzyqkO0 0 0 㪞Faaa)2˰fÒ%z8tO=3=3:cw -V$ \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_121_7.dat b/phpqrcode/cache/mask_7/mask_121_7.dat deleted file mode 100755 index d5d577f..0000000 --- a/phpqrcode/cache/mask_7/mask_121_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -x[ - Edi;^az,#6ƞ^rh&^amY9_غ5Cr6t^^WlEز~ɿ|MmmS}( ۰ ۰ ۰}mQ]ZVq]vѲ"M1fG, qBmtaaazeF3cxIDmtaaamný$n۰ ۰ ۰ ۏa[}`[yޖ޻)n<4K/Oslnlm/G \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_125_7.dat b/phpqrcode/cache/mask_7/mask_125_7.dat deleted file mode 100755 index f9ec0887b05d63190cd6ebe1bb181252db240a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmb=p^>(%+-(dwFmiND<{`^0`b*j_CTqezxZ{^rj;wKcm=?PmSu=Glz<7VlslV=Y- zO8>Uu%kQn~TjKuaTl~3{$o%&7)#h8}=22b&;klFIREslqHa`A!?#mmI&via`Hb+0Y z@=dof=(6k43w+wj81s{h(%)-(dv-mfy8!@BX(Jcim*@*T8k(?P5abBdPTV55E<2nWM}-KktRmgh+FK z(J5XM>l-trubloFW*NMH^}mg5a-3Y>F9fC9#l&wam?F3O`BH_m{d}fVk6)~v_I&Hz zHJ=+cdHrqItm^WLCC8c$D{tL(Yf{g&%x7Q9 zubFPXVwyI0pF{it{Ra~h7{x%SagRfsg8l^Y7u;W1ZG?0VFoDnn@e|xnSU)k2i@PJtN|E!a-ww)M{dF^|hGkUkCJ!|~{M9*8VnoW7a`o8vg bU+c{{(Mi0VI}n?>ZnFz5Vih(RRyE z|8~uM{F%Y??j(=+_U|&*MxD6{EXooGIou3B+4rdIt<3u>@m`ky)yCCP{twlzB)65{ zxt83x+o|t_pyi`jZivc5?msx>A1W8Q07ZMC+7Tk}qrk>B3EF|xO$4cfDymCT`D{~t z*yCE}H)iGgttY-t-17O&+Wsls{yaWkCr)~=oXRV&$sJJi`D}ZpWzpFaOJp>)b53$^ I_LZ6o0K%<<o[l -Ο -07։Vl;b7fMS;1LCvR|KMH -#Н(Sqd \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_141_7.dat b/phpqrcode/cache/mask_7/mask_141_7.dat deleted file mode 100755 index 98dffab..0000000 --- a/phpqrcode/cache/mask_7/mask_141_7.dat +++ /dev/null @@ -1 +0,0 @@ -xA E= rITY@Ä0!|1tbG0ԗѤs2Z/oa\qzOnҋMntX"KmeM}CpPL^S0S0S0SL )ǔژY߾%b,Sl?zC)tLLLLI2zRXh@)tLLLLI1zbϷB)~0S0S0S07)|B)))3ՖL% tfwM*:~hZsnc$1UTtJg8OYE \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_145_7.dat b/phpqrcode/cache/mask_7/mask_145_7.dat deleted file mode 100755 index 4aa2bac..0000000 --- a/phpqrcode/cache/mask_7/mask_145_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -x - E5?W6Z-^2qbGX6(Ɖu"LbbGuμGk:HwA[jmHݞ3OkQ{l|TEm JfL?2"&)kRfc̉F,z=5X5X5X7F\pUs#5X5X5XFdYk!a ` ` `o8ct ]CC gM5[N%khZp?Iܣϲ^n$Y7AZP[ fȓ0 \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_149_7.dat b/phpqrcode/cache/mask_7/mask_149_7.dat deleted file mode 100755 index 809f005..0000000 --- a/phpqrcode/cache/mask_7/mask_149_7.dat +++ /dev/null @@ -1 +0,0 @@ -xn {? uچ2G$ncFKb3֪tPc ̥7[?9:['9'*Ӗ Gah_/z+6XB>2qYJ0黏Bfa 1 9c7G Ol,^꽓3A:H  1A b0X4%٫#d>&C  1A b+g嬜,f1Yb|Y>+g嬜,f1Ylio.\Ɲo=gϙ-yk_TA \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_161_7.dat b/phpqrcode/cache/mask_7/mask_161_7.dat deleted file mode 100755 index 35ba8ff..0000000 --- a/phpqrcode/cache/mask_7/mask_161_7.dat +++ /dev/null @@ -1 +0,0 @@ -xю y/皨E)Ʈ1~493,˵+ZT=ZeC.~iߏ&>,6e~,lW] 2\;׵2j"e,rXݵV(c쵵ZӖ18ީ/,'t.ee,cX2߱,_|yt|]t.cX2e,cy/ɗys.eLe,cX2lo|Z{+2]bl,cX2e{+֊[A2]X2e,c9CXxJ+6rf>h5o6qcIQd2nm=Y_6}PsM~AQyzW1wahnqx4i9#trl79 zGTt{n-#Tkq_|`@8b@BO^-&#lQzJI&bdA?QLEw|ZnT7O=OKRfSrJL~d`Aw9u`O=epcc%X?f~g1U{2P4x`u+VC z_4Xxs=ND}`cY4xm diff --git a/phpqrcode/cache/mask_7/mask_173_7.dat b/phpqrcode/cache/mask_7/mask_173_7.dat deleted file mode 100755 index 3b51371..0000000 --- a/phpqrcode/cache/mask_7/mask_173_7.dat +++ /dev/null @@ -1 +0,0 @@ -xj0 {=M/ RbHrj\=,mcoZ8;mm0b_ߚt$~Wu5ǚNn'?df2(oG,L6_{z? 9wq9 S!ƌ9o2 L`pOEnv8Lv8L UY"d} Kr ' L`&0 L`B'f:O8TcTc\kr ' L`&0 L`BYgIkr ' L`&0 L`"YRc\ ' r&0 L`EڳH9AN&0 L`&'!;q+Yl*ܳ=؀9j[2 Ms¤Ԅ* \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_177_7.dat b/phpqrcode/cache/mask_7/mask_177_7.dat deleted file mode 100755 index 068477c92af080afb53465a651dd7d1815d562c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmb=p_4e+?tY!lS)(hWjd_VoS4`&P8oD}qI!Lz*MP5ODNZExOG1+MwJb8D;p-LO8! z?c3h{D>>rL|Ffpgd7A6Xc6+Psn~m@D{rRxH?)O~%;+lWWo2OpY#{~EVH=u6 z*CeoNM;zn|YxyENS5&k1Xxh;g$7WrP-Y%=Xxj1^=`WtIKUTA-NKSlcq*G{K(1-ys2 zkTw0`)@J(M6-dz@>7=A*us5M&v*{}_V zikH1R`f1L}yvxPQidw;HV6KBY)F%BE(1c~reV&3`GXd;yxF5O}ivA8Q?Gyc+m*}Yd zYKdyZw)H0}-4ng5+!L?o?u!;XT{?T~wJmv{XFN90&I($0Ldf#T-Q#!vG0tQ&@c{s0 CYRvKg diff --git a/phpqrcode/cache/mask_7/mask_21_7.dat b/phpqrcode/cache/mask_7/mask_21_7.dat deleted file mode 100755 index 4f9f138..0000000 --- a/phpqrcode/cache/mask_7/mask_21_7.dat +++ /dev/null @@ -1,4 +0,0 @@ -xڝQ -0 B=r]-?]Rl2nc -[nA".j+i -~x3;QIQH8R҈G"z,&;'o97%P8%6oǽ;]NWn[f7v \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_29_7.dat b/phpqrcode/cache/mask_7/mask_29_7.dat deleted file mode 100755 index e3d7391..0000000 --- a/phpqrcode/cache/mask_7/mask_29_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -xR9 QpX$lŲf!I2pgSMZj"te0#ԛ`_1-cha~/Eh4"~ \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_37_7.dat b/phpqrcode/cache/mask_7/mask_37_7.dat deleted file mode 100755 index 87d9a1a9d2c57b346aa4a8a2e03754a7f7668ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmV-=0EPc}+U-<34nQFY+c^!r|K-dh{-xmXMloTrDOS>|wt{nN$p8UIKT#gc;o<{l zE|1OO;;@B_*1sBYail&HAVaMSznZ$V?+Zst%JX#@k^|V&_%v=tL+(dx9wGsNg^L)? cH0CK`8l%kV8sp6AdyF;KJ?hQK0&cYgLugGq!2kdN diff --git a/phpqrcode/cache/mask_7/mask_41_7.dat b/phpqrcode/cache/mask_7/mask_41_7.dat deleted file mode 100755 index 8acec04..0000000 --- a/phpqrcode/cache/mask_7/mask_41_7.dat +++ /dev/null @@ -1 +0,0 @@ -xTA 5[fDY(O^bR3/~t/L"7SQQ5j\Sib#Նȏ+ǣw#zx?㽧A-wu曑Y7$b.%A;wRoxG}? \ No newline at end of file diff --git a/phpqrcode/cache/mask_7/mask_45_7.dat b/phpqrcode/cache/mask_7/mask_45_7.dat deleted file mode 100755 index dbba31d0bfddcbed98ea5d7a9f6ee59f976e0421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmV;e08;;W+U-@*3cw%;e7~=;|Npr$DAUrsy$v=4K{1olOOYWhIYuypTZ?rVorcG` ziBe#%j*Q*dv)kOh(x@276Nxd&JP9U=2L~+ngMKq>jn}9{jK*jHRSM|5x5n%q5&j`e zsyWelhq7a3OJw7iYkdjosJYWIS!tZw|D3#JI49hv+1NkUa3?Dz bQL;xvA(=V?*)bSkL5FpXakG_S`^qkH-^P*%H1XEuNsLnfvAu` z`*BEI8A_NDBQX*qG5P?bYCW1Y9JBiGIs;FK@Oe8gF(1@>hQVmp28DF`j`Xh+BQX-A zPcoX-fMZmg?C*@cp*&oVxZ$(2Gpy+uA|bgw1Aot87`^rkIYy2Bj`)lr?t+Z`0Y=4# E+IH1p%m4rY diff --git a/phpqrcode/cache/mask_7/mask_73_7.dat b/phpqrcode/cache/mask_7/mask_73_7.dat deleted file mode 100755 index f414e4a5877861bd45e439125a47c52b70a0ca12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmV<303!c*+U;1;4#OY_e7~=O|NpsVOKWw-svJ$a1xQMLKjmF z$Fo{kZk}5~sTj*XCvO!sEAx=sT{$)7Ae9TQEOc4^f@wQ)ea)wu7H%}{#MK=l@)ASD zb^%LDMOj|2h)%FTj!en)$C=J-W^O$fr&vx@-|THnt7dOwYNfBvQ>ukv o40T%96U5*sI{`_>S?}(:yTl{G&E\6}"AX XϬQSkr0$!s zmX(et@ z$j}>#8;TpsDPluxhz+rk$AtTL3lG`X3UJ4`446UdL}WW&@+vhnbfN!;F1qj9*+b^XNIk3 z`ZsZ(ai8(tWM<5anK3hF=1a_o^~_APRcC!GK5O7o1G~?-&v25BNzV0+I1 diff --git a/phpqrcode/cache/mask_7/mask_97_7.dat b/phpqrcode/cache/mask_7/mask_97_7.dat deleted file mode 100755 index b277368..0000000 --- a/phpqrcode/cache/mask_7/mask_97_7.dat +++ /dev/null @@ -1,2 +0,0 @@ -x0ܲD[V.KI`'sxy$xx"= O^&pbYʬ$Kݣ8K eÌ 3:$bI,%$Yb襶 -M)T %q綦EX}jlTTKbI,%,_e[%V]R];N,%$%V@`%pam(}_%%۸4='u)ai.;M> \ No newline at end of file diff --git a/phpqrcode/phpqrcode.php b/phpqrcode/phpqrcode.php deleted file mode 100755 index c3afc9d..0000000 --- a/phpqrcode/phpqrcode.php +++ /dev/null @@ -1,3625 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -/* - * Version: 1.1.4 - * Build: 2010100721 - */ - - - -//---- qrconst.php ----------------------------- - - - - - -/* - * PHP QR Code encoder - * - * Common constants - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - // Encoding modes - - define('QR_MODE_NUL', -1); - define('QR_MODE_NUM', 0); - define('QR_MODE_AN', 1); - define('QR_MODE_8', 2); - define('QR_MODE_KANJI', 3); - define('QR_MODE_STRUCTURE', 4); - - // Levels of error correction. - - define('QR_ECLEVEL_L', 0); - define('QR_ECLEVEL_M', 1); - define('QR_ECLEVEL_Q', 2); - define('QR_ECLEVEL_H', 3); - - // Supported output formats - - define('QR_FORMAT_TEXT', 0); - define('QR_FORMAT_PNG', 1); - - class qrstr { - public static function set(&$srctab, $x, $y, $repl, $replLen = false) { - $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); - } - } - - - -//---- merged_config.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Config file, tuned-up for merged verion - */ - - define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there - define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true - define('QR_LOG_DIR', false); // default error logs dir - - define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code - define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly - define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false - - define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images - - - - -//---- qrtools.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Toolset, handy and debug utilites. - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRtools { - - //---------------------------------------------------------------------- - public static function binarize($frame) - { - $len = count($frame); - foreach ($frame as &$frameLine) { - - for($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - - return $frame; - } - - //---------------------------------------------------------------------- - public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') - { - $barcode_array = array(); - - if (!is_array($mode)) - $mode = explode(',', $mode); - - $eccLevel = 'L'; - - if (count($mode) > 1) { - $eccLevel = $mode[1]; - } - - $qrTab = QRcode::text($code, false, $eccLevel); - $size = count($qrTab); - - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach(str_split($line) as $char) - $arrAdd[] = ($char=='1')?1:0; - $barcode_array['bcode'][] = $arrAdd; - } - - return $barcode_array; - } - - //---------------------------------------------------------------------- - public static function clearCache() - { - self::$frames = array(); - } - - //---------------------------------------------------------------------- - public static function buildCache() - { - QRtools::markTime('before_build_cache'); - - $mask = new QRmask(); - for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { - $frame = QRspec::newFrame($a); - if (QR_IMAGE) { - $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; - QRimage::png(self::binarize($frame), $fileName, 1, 0); - } - - $width = count($frame); - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($maskNo=0; $maskNo<8; $maskNo++) - $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); - } - - QRtools::markTime('after_build_cache'); - } - - //---------------------------------------------------------------------- - public static function log($outfile, $err) - { - if (QR_LOG_DIR !== false) { - if ($err != '') { - if ($outfile !== false) { - file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } else { - file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } - } - } - } - - //---------------------------------------------------------------------- - public static function dumpMask($frame) - { - $width = count($frame); - for($y=0;$y<$width;$y++) { - for($x=0;$x<$width;$x++) { - echo ord($frame[$y][$x]).','; - } - } - } - - //---------------------------------------------------------------------- - public static function markTime($markerId) - { - list($usec, $sec) = explode(" ", microtime()); - $time = ((float)$usec + (float)$sec); - - if (!isset($GLOBALS['qr_time_bench'])) - $GLOBALS['qr_time_bench'] = array(); - - $GLOBALS['qr_time_bench'][$markerId] = $time; - } - - //---------------------------------------------------------------------- - public static function timeBenchmark() - { - self::markTime('finish'); - - $lastTime = 0; - $startTime = 0; - $p = 0; - - echo ' - - '; - - foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { - if ($p > 0) { - echo ''; - } else { - $startTime = $thisTime; - } - - $p++; - $lastTime = $thisTime; - } - - echo ' - - -
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; - } - - public static function save($content, $filename_path) - { - try { - $handle = fopen($filename_path, "w"); - fwrite($handle, $content); - fclose($handle); - return true; - } catch (Exception $e) { - echo 'Exception reçue : ', $e->getMessage(), "\n"; - } - - } - - } - - //########################################################################## - - QRtools::markTime('start'); - - - - -//---- qrspec.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * QR Code specifications - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QRSPEC_VERSION_MAX', 40); - define('QRSPEC_WIDTH_MAX', 177); - - define('QRCAP_WIDTH', 0); - define('QRCAP_WORDS', 1); - define('QRCAP_REMINDER', 2); - define('QRCAP_EC', 3); - - class QRspec { - - public static $capacity = array( - array( 0, 0, 0, array( 0, 0, 0, 0)), - array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 - array( 25, 44, 7, array( 10, 16, 22, 28)), - array( 29, 70, 7, array( 15, 26, 36, 44)), - array( 33, 100, 7, array( 20, 36, 52, 64)), - array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 - array( 41, 172, 7, array( 36, 64, 96, 112)), - array( 45, 196, 0, array( 40, 72, 108, 130)), - array( 49, 242, 0, array( 48, 88, 132, 156)), - array( 53, 292, 0, array( 60, 110, 160, 192)), - array( 57, 346, 0, array( 72, 130, 192, 224)), //10 - array( 61, 404, 0, array( 80, 150, 224, 264)), - array( 65, 466, 0, array( 96, 176, 260, 308)), - array( 69, 532, 0, array( 104, 198, 288, 352)), - array( 73, 581, 3, array( 120, 216, 320, 384)), - array( 77, 655, 3, array( 132, 240, 360, 432)), //15 - array( 81, 733, 3, array( 144, 280, 408, 480)), - array( 85, 815, 3, array( 168, 308, 448, 532)), - array( 89, 901, 3, array( 180, 338, 504, 588)), - array( 93, 991, 3, array( 196, 364, 546, 650)), - array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 - array(101, 1156, 4, array( 224, 442, 644, 750)), - array(105, 1258, 4, array( 252, 476, 690, 816)), - array(109, 1364, 4, array( 270, 504, 750, 900)), - array(113, 1474, 4, array( 300, 560, 810, 960)), - array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 - array(121, 1706, 4, array( 336, 644, 952, 1110)), - array(125, 1828, 4, array( 360, 700, 1020, 1200)), - array(129, 1921, 3, array( 390, 728, 1050, 1260)), - array(133, 2051, 3, array( 420, 784, 1140, 1350)), - array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 - array(141, 2323, 3, array( 480, 868, 1290, 1530)), - array(145, 2465, 3, array( 510, 924, 1350, 1620)), - array(149, 2611, 3, array( 540, 980, 1440, 1710)), - array(153, 2761, 3, array( 570, 1036, 1530, 1800)), - array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 - array(161, 3034, 0, array( 600, 1120, 1680, 1980)), - array(165, 3196, 0, array( 630, 1204, 1770, 2100)), - array(169, 3362, 0, array( 660, 1260, 1860, 2220)), - array(173, 3532, 0, array( 720, 1316, 1950, 2310)), - array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 - ); - - //---------------------------------------------------------------------- - public static function getDataLength($version, $level) - { - return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getECCLength($version, $level) - { - return self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getWidth($version) - { - return self::$capacity[$version][QRCAP_WIDTH]; - } - - //---------------------------------------------------------------------- - public static function getRemainder($version) - { - return self::$capacity[$version][QRCAP_REMINDER]; - } - - //---------------------------------------------------------------------- - public static function getMinimumVersion($size, $level) - { - - for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { - $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; - if($words >= $size) - return $i; - } - - return -1; - } - - //###################################################################### - - public static $lengthTableBits = array( - array(10, 12, 14), - array( 9, 11, 13), - array( 8, 16, 16), - array( 8, 10, 12) - ); - - //---------------------------------------------------------------------- - public static function lengthIndicator($mode, $version) - { - if ($mode == QR_MODE_STRUCTURE) - return 0; - - if ($version <= 9) { - $l = 0; - } else if ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - return self::$lengthTableBits[$mode][$l]; - } - - //---------------------------------------------------------------------- - public static function maximumWords($mode, $version) - { - if($mode == QR_MODE_STRUCTURE) - return 3; - - if($version <= 9) { - $l = 0; - } else if($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - $bits = self::$lengthTableBits[$mode][$l]; - $words = (1 << $bits) - 1; - - if($mode == QR_MODE_KANJI) { - $words *= 2; // the number of bytes is required - } - - return $words; - } - - // Error correction code ----------------------------------------------- - // Table of the error correction code (Reed-Solomon block) - // See Table 12-16 (pp.30-36), JIS X0510:2004. - - public static $eccTable = array( - array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), - array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 - array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), - array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), - array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), - array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), - array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 - array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), - array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), - array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), - array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), - array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 - array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), - array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), - array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), - array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), - array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 - array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), - array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), - array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), - array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), - array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 - array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), - array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), - array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), - array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), - array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 - array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), - array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), - array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), - array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), - array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 - array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), - array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), - array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), - array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), - array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 - ); - - //---------------------------------------------------------------------- - // CACHEABLE!!! - - public static function getEccSpec($version, $level, array &$spec) - { - if (count($spec) < 5) { - $spec = array(0,0,0,0,0); - } - - $b1 = self::$eccTable[$version][$level][0]; - $b2 = self::$eccTable[$version][$level][1]; - $data = self::getDataLength($version, $level); - $ecc = self::getECCLength($version, $level); - - if($b2 == 0) { - $spec[0] = $b1; - $spec[1] = (int)($data / $b1); - $spec[2] = (int)($ecc / $b1); - $spec[3] = 0; - $spec[4] = 0; - } else { - $spec[0] = $b1; - $spec[1] = (int)($data / ($b1 + $b2)); - $spec[2] = (int)($ecc / ($b1 + $b2)); - $spec[3] = $b2; - $spec[4] = $spec[1] + 1; - } - } - - // Alignment pattern --------------------------------------------------- - - // Positions of alignment patterns. - // This array includes only the second and the third position of the - // alignment patterns. Rest of them can be calculated from the distance - // between them. - - // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. - - public static $alignmentPattern = array( - array( 0, 0), - array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 - array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 - array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 - array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 - array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 - array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 - array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 - array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 - ); - - - /** -------------------------------------------------------------------- - * Put an alignment marker. - * @param frame - * @param width - * @param ox,oy center coordinate of the pattern - */ - public static function putAlignmentMarker(array &$frame, $ox, $oy) - { - $finder = array( - "\xa1\xa1\xa1\xa1\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa0\xa1\xa0\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa1\xa1\xa1\xa1" - ); - - $yStart = $oy-2; - $xStart = $ox-2; - - for($y=0; $y<5; $y++) { - QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function putAlignmentPattern($version, &$frame, $width) - { - if($version < 2) - return; - - $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; - if($d < 0) { - $w = 2; - } else { - $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); - } - - if($w * $w - 3 == 1) { - $x = self::$alignmentPattern[$version][0]; - $y = self::$alignmentPattern[$version][0]; - self::putAlignmentMarker($frame, $x, $y); - return; - } - - $cx = self::$alignmentPattern[$version][0]; - for($x=1; $x<$w - 1; $x++) { - self::putAlignmentMarker($frame, 6, $cx); - self::putAlignmentMarker($frame, $cx, 6); - $cx += $d; - } - - $cy = self::$alignmentPattern[$version][0]; - for($y=0; $y<$w-1; $y++) { - $cx = self::$alignmentPattern[$version][0]; - for($x=0; $x<$w-1; $x++) { - self::putAlignmentMarker($frame, $cx, $cy); - $cx += $d; - } - $cy += $d; - } - } - - // Version information pattern ----------------------------------------- - - // Version information pattern (BCH coded). - // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. - - // size: [QRSPEC_VERSION_MAX - 6] - - public static $versionPattern = array( - 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, - 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, - 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, - 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, - 0x27541, 0x28c69 - ); - - //---------------------------------------------------------------------- - public static function getVersionPattern($version) - { - if($version < 7 || $version > QRSPEC_VERSION_MAX) - return 0; - - return self::$versionPattern[$version -7]; - } - - // Format information -------------------------------------------------- - // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) - - public static $formatInfo = array( - array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), - array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), - array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), - array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) - ); - - public static function getFormatInfo($mask, $level) - { - if($mask < 0 || $mask > 7) - return 0; - - if($level < 0 || $level > 3) - return 0; - - return self::$formatInfo[$level][$mask]; - } - - // Frame --------------------------------------------------------------- - // Cache of initial frames. - - public static $frames = array(); - - /** -------------------------------------------------------------------- - * Put a finder pattern. - * @param frame - * @param width - * @param ox,oy upper-left coordinate of the pattern - */ - public static function putFinderPattern(&$frame, $ox, $oy) - { - $finder = array( - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" - ); - - for($y=0; $y<7; $y++) { - QRstr::set($frame, $ox, $oy+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function createFrame($version) - { - $width = self::$capacity[$version][QRCAP_WIDTH]; - $frameLine = str_repeat ("\0", $width); - $frame = array_fill(0, $width, $frameLine); - - // Finder pattern - self::putFinderPattern($frame, 0, 0); - self::putFinderPattern($frame, $width - 7, 0); - self::putFinderPattern($frame, 0, $width - 7); - - // Separator - $yOffset = $width - 7; - - for($y=0; $y<7; $y++) { - $frame[$y][7] = "\xc0"; - $frame[$y][$width - 8] = "\xc0"; - $frame[$yOffset][7] = "\xc0"; - $yOffset++; - } - - $setPattern = str_repeat("\xc0", 8); - - QRstr::set($frame, 0, 7, $setPattern); - QRstr::set($frame, $width-8, 7, $setPattern); - QRstr::set($frame, 0, $width - 8, $setPattern); - - // Format info - $setPattern = str_repeat("\x84", 9); - QRstr::set($frame, 0, 8, $setPattern); - QRstr::set($frame, $width - 8, 8, $setPattern, 8); - - $yOffset = $width - 8; - - for($y=0; $y<8; $y++,$yOffset++) { - $frame[$y][8] = "\x84"; - $frame[$yOffset][8] = "\x84"; - } - - // Timing pattern - - for($i=1; $i<$width-15; $i++) { - $frame[6][7+$i] = chr(0x90 | ($i & 1)); - $frame[7+$i][6] = chr(0x90 | ($i & 1)); - } - - // Alignment pattern - self::putAlignmentPattern($version, $frame, $width); - - // Version information - if($version >= 7) { - $vinf = self::getVersionPattern($version); - - $v = $vinf; - - for($x=0; $x<6; $x++) { - for($y=0; $y<3; $y++) { - $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - - $v = $vinf; - for($y=0; $y<6; $y++) { - for($x=0; $x<3; $x++) { - $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - } - - // and a little bit... - $frame[$width - 8][8] = "\x81"; - - return $frame; - } - - //---------------------------------------------------------------------- - public static function debug($frame, $binary_mode = false) - { - if ($binary_mode) { - - foreach ($frame as &$frameLine) { - $frameLine = join('  ', explode('0', $frameLine)); - $frameLine = join('██', explode('1', $frameLine)); - } - - ?> - -


        '; - echo join("
        ", $frame); - echo '






'; - - } else { - - foreach ($frame as &$frameLine) { - $frameLine = join(' ', explode("\xc0", $frameLine)); - $frameLine = join('', explode("\xc1", $frameLine)); - $frameLine = join(' ', explode("\xa0", $frameLine)); - $frameLine = join('', explode("\xa1", $frameLine)); - $frameLine = join('', explode("\x84", $frameLine)); //format 0 - $frameLine = join('', explode("\x85", $frameLine)); //format 1 - $frameLine = join('', explode("\x81", $frameLine)); //special bit - $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 - $frameLine = join('', explode("\x91", $frameLine)); //clock 1 - $frameLine = join(' ', explode("\x88", $frameLine)); //version - $frameLine = join('', explode("\x89", $frameLine)); //version - $frameLine = join('♦', explode("\x01", $frameLine)); - $frameLine = join('⋅', explode("\0", $frameLine)); - } - - ?> - - "; - echo join("
", $frame); - echo "
"; - - } - } - - //---------------------------------------------------------------------- - public static function serial($frame) - { - return gzcompress(join("\n", $frame), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - return explode("\n", gzuncompress($code)); - } - - //---------------------------------------------------------------------- - public static function newFrame($version) - { - if($version < 1 || $version > QRSPEC_VERSION_MAX) - return null; - - if(!isset(self::$frames[$version])) { - - $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - self::$frames[$version] = self::unserial(file_get_contents($fileName)); - } else { - self::$frames[$version] = self::createFrame($version); - file_put_contents($fileName, self::serial(self::$frames[$version])); - } - } else { - self::$frames[$version] = self::createFrame($version); - } - } - - if(is_null(self::$frames[$version])) - return null; - - return self::$frames[$version]; - } - - //---------------------------------------------------------------------- - public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } - public static function rsBlockNum1($spec) { return $spec[0]; } - public static function rsDataCodes1($spec) { return $spec[1]; } - public static function rsEccCodes1($spec) { return $spec[2]; } - public static function rsBlockNum2($spec) { return $spec[3]; } - public static function rsDataCodes2($spec) { return $spec[4]; } - public static function rsEccCodes2($spec) { return $spec[2]; } - public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } - public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } - - } - - - -//---- qrimage.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_IMAGE', true); - - class QRimage { - - //---------------------------------------------------------------------- - public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - Header("Content-type: image/png"); - ImagePng($image); - } else { - if($saveandprint===TRUE){ - ImagePng($image, $filename); - header("Content-type: image/png"); - ImagePng($image); - }else{ - ImagePng($image, $filename); - } - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/jpeg"); - ImageJpeg($image, null, $q); - } else { - ImageJpeg($image, $filename, $q); - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - $base_image =ImageCreate($imgW, $imgH); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r1 = round((($fore_color & 0xFF0000) >> 16), 5); - $g1 = round((($fore_color & 0x00FF00) >> 8), 5); - $b1 = round(($fore_color & 0x0000FF), 5); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r2 = round((($back_color & 0xFF0000) >> 16), 5); - $g2 = round((($back_color & 0x00FF00) >> 8), 5); - $b2 = round(($back_color & 0x0000FF), 5); - - - - $col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2); - $col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1); - - imagefill($base_image, 0, 0, $col[0]); - - for($y=0; $y<$h; $y++) { - for($x=0; $x<$w; $x++) { - if ($frame[$y][$x] == '1') { - ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); - } - } - } - - $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); - ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); - ImageDestroy($base_image); - - return $target_image; - } - } - - - - -//---- qrinput.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input encoding class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('STRUCTURE_HEADER_BITS', 20); - define('MAX_STRUCTURED_SYMBOLS', 16); - - class QRinputItem { - - public $mode; - public $size; - public $data; - public $bstream; - - public function __construct($mode, $size, $data, $bstream = null) - { - $setData = array_slice($data, 0, $size); - - if (count($setData) < $size) { - $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); - } - - if(!QRinput::check($mode, $size, $setData)) { - throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); - } - - $this->mode = $mode; - $this->size = $size; - $this->data = $setData; - $this->bstream = $bstream; - } - - //---------------------------------------------------------------------- - public function encodeModeNum($version) - { - try { - - $words = (int)($this->size / 3); - $bs = new QRbitstream(); - - $val = 0x1; - $bs->appendNum(4, $val); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; - $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; - $val += (ord($this->data[$i*3+2]) - ord('0')); - $bs->appendNum(10, $val); - } - - if($this->size - $words * 3 == 1) { - $val = ord($this->data[$words*3]) - ord('0'); - $bs->appendNum(4, $val); - } else if($this->size - $words * 3 == 2) { - $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; - $val += (ord($this->data[$words*3+1]) - ord('0')); - $bs->appendNum(7, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeAn($version) - { - try { - $words = (int)($this->size / 2); - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x02); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; - $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); - - $bs->appendNum(11, $val); - } - - if($this->size & 1) { - $val = QRinput::lookAnTable(ord($this->data[$words * 2])); - $bs->appendNum(6, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeMode8($version) - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x4); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); - - for($i=0; $i<$this->size; $i++) { - $bs->appendNum(8, ord($this->data[$i])); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeKanji($version) - { - try { - - $bs = new QRbitrtream(); - - $bs->appendNum(4, 0x8); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); - - for($i=0; $i<$this->size; $i+=2) { - $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); - if($val <= 0x9ffc) { - $val -= 0x8140; - } else { - $val -= 0xc140; - } - - $h = ($val >> 8) * 0xc0; - $val = ($val & 0xff) + $h; - - $bs->appendNum(13, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeStructure() - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x03); - $bs->appendNum(4, ord($this->data[1]) - 1); - $bs->appendNum(4, ord($this->data[0]) - 1); - $bs->appendNum(8, ord($this->data[2])); - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function estimateBitStreamSizeOfEntry($version) - { - $bits = 0; - - if($version == 0) - $version = 1; - - switch($this->mode) { - case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; - case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; - case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; - case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; - case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; - default: - return 0; - } - - $l = QRspec::lengthIndicator($this->mode, $version); - $m = 1 << $l; - $num = (int)(($this->size + $m - 1) / $m); - - $bits += $num * (4 + $l); - - return $bits; - } - - //---------------------------------------------------------------------- - public function encodeBitStream($version) - { - try { - - unset($this->bstream); - $words = QRspec::maximumWords($this->mode, $version); - - if($this->size > $words) { - - $st1 = new QRinputItem($this->mode, $words, $this->data); - $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); - - $st1->encodeBitStream($version); - $st2->encodeBitStream($version); - - $this->bstream = new QRbitstream(); - $this->bstream->append($st1->bstream); - $this->bstream->append($st2->bstream); - - unset($st1); - unset($st2); - - } else { - - $ret = 0; - - switch($this->mode) { - case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; - case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; - case QR_MODE_8: $ret = $this->encodeMode8($version); break; - case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; - case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; - - default: - break; - } - - if($ret < 0) - return -1; - } - - return $this->bstream->size(); - - } catch (Exception $e) { - return -1; - } - } - }; - - //########################################################################## - - class QRinput { - - public $items; - - private $version; - private $level; - - //---------------------------------------------------------------------- - public function __construct($version = 0, $level = QR_ECLEVEL_L) - { - if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { - throw new Exception('Invalid version no'); - } - - $this->version = $version; - $this->level = $level; - } - - //---------------------------------------------------------------------- - public function getVersion() - { - return $this->version; - } - - //---------------------------------------------------------------------- - public function setVersion($version) - { - if($version < 0 || $version > QRSPEC_VERSION_MAX) { - throw new Exception('Invalid version no'); - return -1; - } - - $this->version = $version; - - return 0; - } - - //---------------------------------------------------------------------- - public function getErrorCorrectionLevel() - { - return $this->level; - } - - //---------------------------------------------------------------------- - public function setErrorCorrectionLevel($level) - { - if($level > QR_ECLEVEL_H) { - throw new Exception('Invalid ECLEVEL'); - return -1; - } - - $this->level = $level; - - return 0; - } - - //---------------------------------------------------------------------- - public function appendEntry(QRinputItem $entry) - { - $this->items[] = $entry; - } - - //---------------------------------------------------------------------- - public function append($mode, $size, $data) - { - try { - $entry = new QRinputItem($mode, $size, $data); - $this->items[] = $entry; - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - - public function insertStructuredAppendHeader($size, $index, $parity) - { - if( $size > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong size'); - } - - if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong index'); - } - - $buf = array($size, $index, $parity); - - try { - $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); - array_unshift($this->items, $entry); - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function calcParity() - { - $parity = 0; - - foreach($this->items as $item) { - if($item->mode != QR_MODE_STRUCTURE) { - for($i=$item->size-1; $i>=0; $i--) { - $parity ^= $item->data[$i]; - } - } - } - - return $parity; - } - - //---------------------------------------------------------------------- - public static function checkModeNum($size, $data) - { - for($i=0; $i<$size; $i++) { - if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeNum($size) - { - $w = (int)$size / 3; - $bits = $w * 10; - - switch($size - $w * 3) { - case 1: - $bits += 4; - break; - case 2: - $bits += 7; - break; - default: - break; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static $anTable = array( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - ); - - //---------------------------------------------------------------------- - public static function lookAnTable($c) - { - return (($c > 127)?-1:self::$anTable[$c]); - } - - //---------------------------------------------------------------------- - public static function checkModeAn($size, $data) - { - for($i=0; $i<$size; $i++) { - if (self::lookAnTable(ord($data[$i])) == -1) { - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeAn($size) - { - $w = (int)($size / 2); - $bits = $w * 11; - - if($size & 1) { - $bits += 6; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static function estimateBitsMode8($size) - { - return $size * 8; - } - - //---------------------------------------------------------------------- - public function estimateBitsModeKanji($size) - { - return (int)(($size / 2) * 13); - } - - //---------------------------------------------------------------------- - public static function checkModeKanji($size, $data) - { - if($size & 1) - return false; - - for($i=0; $i<$size; $i+=2) { - $val = (ord($data[$i]) << 8) | ord($data[$i+1]); - if( $val < 0x8140 - || ($val > 0x9ffc && $val < 0xe040) - || $val > 0xebbf) { - return false; - } - } - - return true; - } - - /*********************************************************************** - * Validation - **********************************************************************/ - - public static function check($mode, $size, $data) - { - if($size <= 0) - return false; - - switch($mode) { - case QR_MODE_NUM: return self::checkModeNum($size, $data); break; - case QR_MODE_AN: return self::checkModeAn($size, $data); break; - case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; - case QR_MODE_8: return true; break; - case QR_MODE_STRUCTURE: return true; break; - - default: - break; - } - - return false; - } - - - //---------------------------------------------------------------------- - public function estimateBitStreamSize($version) - { - $bits = 0; - - foreach($this->items as $item) { - $bits += $item->estimateBitStreamSizeOfEntry($version); - } - - return $bits; - } - - //---------------------------------------------------------------------- - public function estimateVersion() - { - $version = 0; - $prev = 0; - do { - $prev = $version; - $bits = $this->estimateBitStreamSize($prev); - $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($version < 0) { - return -1; - } - } while ($version > $prev); - - return $version; - } - - //---------------------------------------------------------------------- - public static function lengthOfCode($mode, $version, $bits) - { - $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); - switch($mode) { - case QR_MODE_NUM: - $chunks = (int)($payload / 10); - $remain = $payload - $chunks * 10; - $size = $chunks * 3; - if($remain >= 7) { - $size += 2; - } else if($remain >= 4) { - $size += 1; - } - break; - case QR_MODE_AN: - $chunks = (int)($payload / 11); - $remain = $payload - $chunks * 11; - $size = $chunks * 2; - if($remain >= 6) - $size++; - break; - case QR_MODE_8: - $size = (int)($payload / 8); - break; - case QR_MODE_KANJI: - $size = (int)(($payload / 13) * 2); - break; - case QR_MODE_STRUCTURE: - $size = (int)($payload / 8); - break; - default: - $size = 0; - break; - } - - $maxsize = QRspec::maximumWords($mode, $version); - if($size < 0) $size = 0; - if($size > $maxsize) $size = $maxsize; - - return $size; - } - - //---------------------------------------------------------------------- - public function createBitStream() - { - $total = 0; - - foreach($this->items as $item) { - $bits = $item->encodeBitStream($this->version); - - if($bits < 0) - return -1; - - $total += $bits; - } - - return $total; - } - - //---------------------------------------------------------------------- - public function convertData() - { - $ver = $this->estimateVersion(); - if($ver > $this->getVersion()) { - $this->setVersion($ver); - } - - for(;;) { - $bits = $this->createBitStream(); - - if($bits < 0) - return -1; - - $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if($ver < 0) { - throw new Exception('WRONG VERSION'); - } else if($ver > $this->getVersion()) { - $this->setVersion($ver); - } else { - break; - } - } - - return 0; - } - - //---------------------------------------------------------------------- - public function appendPaddingBit(&$bstream) - { - $bits = $bstream->size(); - $maxwords = QRspec::getDataLength($this->version, $this->level); - $maxbits = $maxwords * 8; - - if ($maxbits == $bits) { - return 0; - } - - if ($maxbits - $bits < 5) { - return $bstream->appendNum($maxbits - $bits, 0); - } - - $bits += 4; - $words = (int)(($bits + 7) / 8); - - $padding = new QRbitstream(); - $ret = $padding->appendNum($words * 8 - $bits + 4, 0); - - if($ret < 0) - return $ret; - - $padlen = $maxwords - $words; - - if($padlen > 0) { - - $padbuf = array(); - for($i=0; $i<$padlen; $i++) { - $padbuf[$i] = ($i&1)?0x11:0xec; - } - - $ret = $padding->appendBytes($padlen, $padbuf); - - if($ret < 0) - return $ret; - - } - - $ret = $bstream->append($padding); - - return $ret; - } - - //---------------------------------------------------------------------- - public function mergeBitStream() - { - if($this->convertData() < 0) { - return null; - } - - $bstream = new QRbitstream(); - - foreach($this->items as $item) { - $ret = $bstream->append($item->bstream); - if($ret < 0) { - return null; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getBitStream() - { - - $bstream = $this->mergeBitStream(); - - if($bstream == null) { - return null; - } - - $ret = $this->appendPaddingBit($bstream); - if($ret < 0) { - return null; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getByteStream() - { - $bstream = $this->getBitStream(); - if($bstream == null) { - return null; - } - - return $bstream->toByte(); - } - } - - - - - - -//---- qrbitstream.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Bitstream class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRbitstream { - - public $data = array(); - - //---------------------------------------------------------------------- - public function size() - { - return count($this->data); - } - - //---------------------------------------------------------------------- - public function allocate($setLength) - { - $this->data = array_fill(0, $setLength, 0); - return 0; - } - - //---------------------------------------------------------------------- - public static function newFromNum($bits, $num) - { - $bstream = new QRbitstream(); - $bstream->allocate($bits); - - $mask = 1 << ($bits - 1); - for($i=0; $i<$bits; $i++) { - if($num & $mask) { - $bstream->data[$i] = 1; - } else { - $bstream->data[$i] = 0; - } - $mask = $mask >> 1; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public static function newFromBytes($size, $data) - { - $bstream = new QRbitstream(); - $bstream->allocate($size * 8); - $p=0; - - for($i=0; $i<$size; $i++) { - $mask = 0x80; - for($j=0; $j<8; $j++) { - if($data[$i] & $mask) { - $bstream->data[$p] = 1; - } else { - $bstream->data[$p] = 0; - } - $p++; - $mask = $mask >> 1; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function append(QRbitstream $arg) - { - if (is_null($arg)) { - return -1; - } - - if($arg->size() == 0) { - return 0; - } - - if($this->size() == 0) { - $this->data = $arg->data; - return 0; - } - - $this->data = array_values(array_merge($this->data, $arg->data)); - - return 0; - } - - //---------------------------------------------------------------------- - public function appendNum($bits, $num) - { - if ($bits == 0) - return 0; - - $b = QRbitstream::newFromNum($bits, $num); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function appendBytes($size, $data) - { - if ($size == 0) - return 0; - - $b = QRbitstream::newFromBytes($size, $data); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function toByte() - { - - $size = $this->size(); - - if($size == 0) { - return array(); - } - - $data = array_fill(0, (int)(($size + 7) / 8), 0); - $bytes = (int)($size / 8); - - $p = 0; - - for($i=0; $i<$bytes; $i++) { - $v = 0; - for($j=0; $j<8; $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$i] = $v; - } - - if($size & 7) { - $v = 0; - for($j=0; $j<($size & 7); $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$bytes] = $v; - } - - return $data; - } - - } - - - - -//---- qrsplit.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input splitting classes - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - class QRsplit { - - public $dataStr = ''; - public $input; - public $modeHint; - - //---------------------------------------------------------------------- - public function __construct($dataStr, $input, $modeHint) - { - $this->dataStr = $dataStr; - $this->input = $input; - $this->modeHint = $modeHint; - } - - //---------------------------------------------------------------------- - public static function isdigitat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); - } - - //---------------------------------------------------------------------- - public static function isalnumat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return (QRinput::lookAnTable(ord($str[$pos])) >= 0); - } - - //---------------------------------------------------------------------- - public function identifyMode($pos) - { - if ($pos >= strlen($this->dataStr)) - return QR_MODE_NUL; - - $c = $this->dataStr[$pos]; - - if(self::isdigitat($this->dataStr, $pos)) { - return QR_MODE_NUM; - } else if(self::isalnumat($this->dataStr, $pos)) { - return QR_MODE_AN; - } else if($this->modeHint == QR_MODE_KANJI) { - - if ($pos+1 < strlen($this->dataStr)) - { - $d = $this->dataStr[$pos+1]; - $word = (ord($c) << 8) | ord($d); - if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { - return QR_MODE_KANJI; - } - } - } - - return QR_MODE_8; - } - - //---------------------------------------------------------------------- - public function eatNum() - { - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - while(self::isdigitat($this->dataStr, $p)) { - $p++; - } - - $run = $p; - $mode = $this->identifyMode($p); - - if($mode == QR_MODE_8) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - if($mode == QR_MODE_AN) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsModeAn(1) // + 4 + la - - QRinput::estimateBitsModeAn($run + 1);// - 4 - la - if($dif > 0) { - return $this->eatAn(); - } - } - - $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatAn() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - - while(self::isalnumat($this->dataStr, $p)) { - if(self::isdigitat($this->dataStr, $p)) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - - $dif = QRinput::estimateBitsModeAn($p) // + 4 + la - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsModeAn($q); // - 4 - la - - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - - if(!self::isalnumat($this->dataStr, $p)) { - $dif = QRinput::estimateBitsModeAn($run) + 4 + $la - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - - $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatKanji() - { - $p = 0; - - while($this->identifyMode($p) == QR_MODE_KANJI) { - $p += 2; - } - - $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $ret; - } - - //---------------------------------------------------------------------- - public function eat8() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 1; - $dataStrLen = strlen($this->dataStr); - - while($p < $dataStrLen) { - - $mode = $this->identifyMode($p); - if($mode == QR_MODE_KANJI) { - break; - } - if($mode == QR_MODE_NUM) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else if($mode == QR_MODE_AN) { - $q = $p; - while(self::isalnumat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeAn($q - $p) + 4 + $la - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); - - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function splitString() - { - while (strlen($this->dataStr) > 0) - { - if($this->dataStr == '') - return 0; - - $mode = $this->identifyMode(0); - - switch ($mode) { - case QR_MODE_NUM: $length = $this->eatNum(); break; - case QR_MODE_AN: $length = $this->eatAn(); break; - case QR_MODE_KANJI: - if ($mode == QR_MODE_KANJI) - $length = $this->eatKanji(); - else $length = $this->eat8(); - break; - default: $length = $this->eat8(); break; - - } - - if($length == 0) return 0; - if($length < 0) return -1; - - $this->dataStr = substr($this->dataStr, $length); - } - } - - //---------------------------------------------------------------------- - public function toUpper() - { - $stringLen = strlen($this->dataStr); - $p = 0; - - while ($p<$stringLen) { - $mode = self::identifyMode(substr($this->dataStr, $p)); - if($mode == QR_MODE_KANJI) { - $p += 2; - } else { - if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { - $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); - } - $p++; - } - } - - return $this->dataStr; - } - - //---------------------------------------------------------------------- - public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) - { - if(is_null($string) || $string == '\0' || $string == '') { - throw new Exception('empty string!!!'); - } - - $split = new QRsplit($string, $input, $modeHint); - - if(!$casesensitive) - $split->toUpper(); - - return $split->splitString(); - } - } - - - -//---- qrrscode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Reed-Solomon error correction support - * - * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q - * (libfec is released under the GNU Lesser General Public License.) - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsItem { - - public $mm; // Bits per symbol - public $nn; // Symbols per block (= (1<= $this->nn) { - $x -= $this->nn; - $x = ($x >> $this->mm) + ($x & $this->nn); - } - - return $x; - } - - //---------------------------------------------------------------------- - public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - // Common code for intializing a Reed-Solomon control block (char or int symbols) - // Copyright 2004 Phil Karn, KA9Q - // May be used under the terms of the GNU Lesser General Public License (LGPL) - - $rs = null; - - // Check parameter ranges - if($symsize < 0 || $symsize > 8) return $rs; - if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; - if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; - if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! - if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding - - $rs = new QRrsItem(); - $rs->mm = $symsize; - $rs->nn = (1<<$symsize)-1; - $rs->pad = $pad; - - $rs->alpha_to = array_fill(0, $rs->nn+1, 0); - $rs->index_of = array_fill(0, $rs->nn+1, 0); - - // PHP style macro replacement ;) - $NN =& $rs->nn; - $A0 =& $NN; - - // Generate Galois field lookup tables - $rs->index_of[0] = $A0; // log(zero) = -inf - $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 - $sr = 1; - - for($i=0; $i<$rs->nn; $i++) { - $rs->index_of[$sr] = $i; - $rs->alpha_to[$i] = $sr; - $sr <<= 1; - if($sr & (1<<$symsize)) { - $sr ^= $gfpoly; - } - $sr &= $rs->nn; - } - - if($sr != 1){ - // field generator polynomial is not primitive! - $rs = NULL; - return $rs; - } - - /* Form RS code generator polynomial from its roots */ - $rs->genpoly = array_fill(0, $nroots+1, 0); - - $rs->fcr = $fcr; - $rs->prim = $prim; - $rs->nroots = $nroots; - $rs->gfpoly = $gfpoly; - - /* Find prim-th root of 1, used in decoding */ - for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) - ; // intentional empty-body loop! - - $rs->iprim = (int)($iprim / $prim); - $rs->genpoly[0] = 1; - - for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { - $rs->genpoly[$i+1] = 1; - - // Multiply rs->genpoly[] by @**(root + x) - for ($j = $i; $j > 0; $j--) { - if ($rs->genpoly[$j] != 0) { - $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; - } else { - $rs->genpoly[$j] = $rs->genpoly[$j-1]; - } - } - // rs->genpoly[0] can never be zero - $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; - } - - // convert rs->genpoly[] to index form for quicker encoding - for ($i = 0; $i <= $nroots; $i++) - $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; - - return $rs; - } - - //---------------------------------------------------------------------- - public function encode_rs_char($data, &$parity) - { - $MM =& $this->mm; - $NN =& $this->nn; - $ALPHA_TO =& $this->alpha_to; - $INDEX_OF =& $this->index_of; - $GENPOLY =& $this->genpoly; - $NROOTS =& $this->nroots; - $FCR =& $this->fcr; - $PRIM =& $this->prim; - $IPRIM =& $this->iprim; - $PAD =& $this->pad; - $A0 =& $NN; - - $parity = array_fill(0, $NROOTS, 0); - - for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { - - $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; - if($feedback != $A0) { - // feedback term is non-zero - - // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must - // always be for the polynomials constructed by init_rs() - $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); - - for($j=1;$j<$NROOTS;$j++) { - $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; - } - } - - // Shift - array_shift($parity); - if($feedback != $A0) { - array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); - } else { - array_push($parity, 0); - } - } - } - } - - //########################################################################## - - class QRrs { - - public static $items = array(); - - //---------------------------------------------------------------------- - public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - foreach(self::$items as $rs) { - if($rs->pad != $pad) continue; - if($rs->nroots != $nroots) continue; - if($rs->mm != $symsize) continue; - if($rs->gfpoly != $gfpoly) continue; - if($rs->fcr != $fcr) continue; - if($rs->prim != $prim) continue; - - return $rs; - } - - $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); - array_unshift(self::$items, $rs); - - return $rs; - } - } - - - -//---- qrmask.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Masking - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('N1', 3); - define('N2', 3); - define('N3', 40); - define('N4', 10); - - class QRmask { - - public $runLength = array(); - - //---------------------------------------------------------------------- - public function __construct() - { - $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); - } - - //---------------------------------------------------------------------- - public function writeFormatInformation($width, &$frame, $mask, $level) - { - $blacks = 0; - $format = QRspec::getFormatInfo($mask, $level); - - for($i=0; $i<8; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[8][$width - 1 - $i] = chr($v); - if($i < 6) { - $frame[$i][8] = chr($v); - } else { - $frame[$i + 1][8] = chr($v); - } - $format = $format >> 1; - } - - for($i=0; $i<7; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[$width - 7 + $i][8] = chr($v); - if($i == 0) { - $frame[8][7] = chr($v); - } else { - $frame[8][6 - $i] = chr($v); - } - - $format = $format >> 1; - } - - return $blacks; - } - - //---------------------------------------------------------------------- - public function mask0($x, $y) { return ($x+$y)&1; } - public function mask1($x, $y) { return ($y&1); } - public function mask2($x, $y) { return ($x%3); } - public function mask3($x, $y) { return ($x+$y)%3; } - public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } - public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } - public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } - public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } - - //---------------------------------------------------------------------- - private function generateMaskNo($maskNo, $width, $frame) - { - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if(ord($frame[$y][$x]) & 0x80) { - $bitMask[$y][$x] = 0; - } else { - $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); - $bitMask[$y][$x] = ($maskFunc == 0)?1:0; - } - - } - } - - return $bitMask; - } - - //---------------------------------------------------------------------- - public static function serial($bitFrame) - { - $codeArr = array(); - - foreach ($bitFrame as $line) - $codeArr[] = join('', $line); - - return gzcompress(join("\n", $codeArr), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - $codeArr = array(); - - $codeLines = explode("\n", gzuncompress($code)); - foreach ($codeLines as $line) - $codeArr[] = str_split($line); - - return $codeArr; - } - - //---------------------------------------------------------------------- - public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) - { - $b = 0; - $bitMask = array(); - - $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - $bitMask = self::unserial(file_get_contents($fileName)); - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) - mkdir(QR_CACHE_DIR.'mask_'.$maskNo); - file_put_contents($fileName, self::serial($bitMask)); - } - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - } - - if ($maskGenOnly) - return; - - $d = $s; - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if($bitMask[$y][$x] == 1) { - $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); - } - $b += (int)(ord($d[$y][$x]) & 1); - } - } - - return $b; - } - - //---------------------------------------------------------------------- - public function makeMask($width, $frame, $maskNo, $level) - { - $masked = array_fill(0, $width, str_repeat("\0", $width)); - $this->makeMaskNo($maskNo, $width, $frame, $masked); - $this->writeFormatInformation($width, $masked, $maskNo, $level); - - return $masked; - } - - //---------------------------------------------------------------------- - public function calcN1N3($length) - { - $demerit = 0; - - for($i=0; $i<$length; $i++) { - - if($this->runLength[$i] >= 5) { - $demerit += (N1 + ($this->runLength[$i] - 5)); - } - if($i & 1) { - if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { - $fact = (int)($this->runLength[$i] / 3); - if(($this->runLength[$i-2] == $fact) && - ($this->runLength[$i-1] == $fact) && - ($this->runLength[$i+1] == $fact) && - ($this->runLength[$i+2] == $fact)) { - if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { - $demerit += N3; - } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { - $demerit += N3; - } - } - } - } - } - return $demerit; - } - - //---------------------------------------------------------------------- - public function evaluateSymbol($width, $frame) - { - $head = 0; - $demerit = 0; - - for($y=0; $y<$width; $y++) { - $head = 0; - $this->runLength[0] = 1; - - $frameY = $frame[$y]; - - if ($y>0) - $frameYM = $frame[$y-1]; - - for($x=0; $x<$width; $x++) { - if(($x > 0) && ($y > 0)) { - $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); - $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); - - if(($b22 | ($w22 ^ 1))&1) { - $demerit += N2; - } - } - if(($x == 0) && (ord($frameY[$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($x > 0) { - if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - for($x=0; $x<$width; $x++) { - $head = 0; - $this->runLength[0] = 1; - - for($y=0; $y<$width; $y++) { - if($y == 0 && (ord($frame[$y][$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($y > 0) { - if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - return $demerit; - } - - - //---------------------------------------------------------------------- - public function mask($width, $frame, $level) - { - $minDemerit = PHP_INT_MAX; - $bestMaskNum = 0; - $bestMask = array(); - - $checked_masks = array(0,1,2,3,4,5,6,7); - - if (QR_FIND_FROM_RANDOM !== false) { - - $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); - for ($i = 0; $i < $howManuOut; $i++) { - $remPos = rand (0, count($checked_masks)-1); - unset($checked_masks[$remPos]); - $checked_masks = array_values($checked_masks); - } - - } - - $bestMask = $frame; - - foreach($checked_masks as $i) { - $mask = array_fill(0, $width, str_repeat("\0", $width)); - - $demerit = 0; - $blacks = 0; - $blacks = $this->makeMaskNo($i, $width, $frame, $mask); - $blacks += $this->writeFormatInformation($width, $mask, $i, $level); - $blacks = (int)(100 * $blacks / ($width * $width)); - $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); - $demerit += $this->evaluateSymbol($width, $mask); - - if($demerit < $minDemerit) { - $minDemerit = $demerit; - $bestMask = $mask; - $bestMaskNum = $i; - } - } - - return $bestMask; - } - - //---------------------------------------------------------------------- - } - - - - -//---- qrencode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Main encoder classes. - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsblock { - public $dataLength; - public $data = array(); - public $eccLength; - public $ecc = array(); - - public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) - { - $rs->encode_rs_char($data, $ecc); - - $this->dataLength = $dl; - $this->data = $data; - $this->eccLength = $el; - $this->ecc = $ecc; - } - }; - - //########################################################################## - - class QRrawcode { - public $version; - public $datacode = array(); - public $ecccode = array(); - public $blocks; - public $rsblocks = array(); //of RSblock - public $count; - public $dataLength; - public $eccLength; - public $b1; - - //---------------------------------------------------------------------- - public function __construct(QRinput $input) - { - $spec = array(0,0,0,0,0); - - $this->datacode = $input->getByteStream(); - if(is_null($this->datacode)) { - throw new Exception('null imput string'); - } - - QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); - - $this->version = $input->getVersion(); - $this->b1 = QRspec::rsBlockNum1($spec); - $this->dataLength = QRspec::rsDataLength($spec); - $this->eccLength = QRspec::rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = QRspec::rsBlockNum($spec); - - $ret = $this->init($spec); - if($ret < 0) { - throw new Exception('block alloc error'); - return null; - } - - $this->count = 0; - } - - //---------------------------------------------------------------------- - public function init(array $spec) - { - $dl = QRspec::rsDataCodes1($spec); - $el = QRspec::rsEccCodes1($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - if(QRspec::rsBlockNum2($spec) == 0) - return 0; - - $dl = QRspec::rsDataCodes2($spec); - $el = QRspec::rsEccCodes2($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - if($rs == NULL) return -1; - - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - return 0; - } - - //---------------------------------------------------------------------- - public function getCode() - { - $ret; - - if($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if($col >= $this->rsblocks[0]->dataLength) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]->data[$col]; - } else if($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]->ecc[$col]; - } else { - return 0; - } - $this->count++; - - return $ret; - } - } - - //########################################################################## - - class QRcode { - - public $version; - public $width; - public $data; - - //---------------------------------------------------------------------- - public function encodeMask(QRinput $input, $mask) - { - if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { - throw new Exception('wrong version'); - } - if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { - throw new Exception('wrong level'); - } - - $raw = new QRrawcode($input); - - QRtools::markTime('after_raw'); - - $version = $raw->version; - $width = QRspec::getWidth($version); - $frame = QRspec::newFrame($version); - - $filler = new FrameFiller($width, $frame); - if(is_null($filler)) { - return NULL; - } - - // inteleaved data and ecc codes - for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { - $code = $raw->getCode(); - $bit = 0x80; - for($j=0; $j<8; $j++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - - QRtools::markTime('after_filler'); - - unset($raw); - - // remainder bits - $j = QRspec::getRemainder($version); - for($i=0; $i<$j; $i++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02); - } - - $frame = $filler->frame; - unset($filler); - - - // masking - $maskObj = new QRmask(); - if($mask < 0) { - - if (QR_FIND_BEST_MASK) { - $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); - } else { - $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); - } - } else { - $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); - } - - if($masked == NULL) { - return NULL; - } - - QRtools::markTime('after_mask'); - - $this->version = $version; - $this->width = $width; - $this->data = $masked; - - return $this; - } - - //---------------------------------------------------------------------- - public function encodeInput(QRinput $input) - { - return $this->encodeMask($input, -1); - } - - //---------------------------------------------------------------------- - public function encodeString8bit($string, $version, $level) - { - if($string == NULL) { - throw new Exception('empty string!'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); - if($ret < 0) { - unset($input); - return NULL; - } - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public function encodeString($string, $version, $level, $hint, $casesensitive) - { - - if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { - throw new Exception('bad hint'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); - if($ret < 0) { - return NULL; - } - - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodePNG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encode($text, $outfile); - } - - //---------------------------------------------------------------------- - public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk); - return $enc->encodeEPS($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodeSVG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodeRAW($text, $outfile); - } - } - - //########################################################################## - - class FrameFiller { - - public $width; - public $frame; - public $x; - public $y; - public $dir; - public $bit; - - //---------------------------------------------------------------------- - public function __construct($width, &$frame) - { - $this->width = $width; - $this->frame = $frame; - $this->x = $width - 1; - $this->y = $width - 1; - $this->dir = -1; - $this->bit = -1; - } - - //---------------------------------------------------------------------- - public function setFrameAt($at, $val) - { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - //---------------------------------------------------------------------- - public function getFrameAt($at) - { - return ord($this->frame[$at['y']][$at['x']]); - } - - //---------------------------------------------------------------------- - public function next() - { - do { - - if($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - - $x = $this->x; - $y = $this->y; - $w = $this->width; - - if($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - - if($this->dir < 0) { - if($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if($x == 6) { - $x--; - $y = 9; - } - } - } else { - if($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if($x == 6) { - $x--; - $y -= 8; - } - } - } - if($x < 0 || $y < 0) return null; - - $this->x = $x; - $this->y = $y; - - } while(ord($this->frame[$y][$x]) & 0x80); - - return array('x'=>$x, 'y'=>$y); - } - - } ; - - //########################################################################## - - class QRencode { - - public $casesensitive = true; - public $eightbit = false; - - public $version = 0; - public $size = 3; - public $margin = 4; - public $back_color = 0xFFFFFF; - public $fore_color = 0x000000; - - public $structured = 0; // not supported yet - - public $level = QR_ECLEVEL_L; - public $hint = QR_MODE_8; - - //---------------------------------------------------------------------- - public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = new QRencode(); - $enc->size = $size; - $enc->margin = $margin; - $enc->fore_color = $fore_color; - $enc->back_color = $back_color; - $enc->cmyk = $cmyk; - - switch ($level.'') { - case '0': - case '1': - case '2': - case '3': - $enc->level = $level; - break; - case 'l': - case 'L': - $enc->level = QR_ECLEVEL_L; - break; - case 'm': - case 'M': - $enc->level = QR_ECLEVEL_M; - break; - case 'q': - case 'Q': - $enc->level = QR_ECLEVEL_Q; - break; - case 'h': - case 'H': - $enc->level = QR_ECLEVEL_H; - break; - } - - return $enc; - } - - //---------------------------------------------------------------------- - public function encodeRAW($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - return $code->data; - } - - //---------------------------------------------------------------------- - public function encode($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - QRtools::markTime('after_encode'); - - if ($outfile!== false) { - file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); - } else { - return QRtools::binarize($code->data); - } - } - - //---------------------------------------------------------------------- - public function encodePNG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeEPS($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeSVG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - } - - - - -//---- qrvect.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_VECT', true); - - class QRvect { - - //---------------------------------------------------------------------- - public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk); - - if ($filename === false) { - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - if ($cmyk) - { - // convert color value into decimal eps format - $c = round((($fore_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($fore_color & 0x000000FF) / 255, 5); - $fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - - // convert color value into decimal eps format - $c = round((($back_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($back_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($back_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($back_color & 0x000000FF) / 255, 5); - $back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - } - else - { - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($fore_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($fore_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($fore_color & 0x0000FF) / 255, 5); - $fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($back_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($back_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($back_color & 0x0000FF) / 255, 5); - $back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - } - - $output = - '%!PS-Adobe EPSF-3.0'."\n". - '%%Creator: PHPQrcodeLib'."\n". - '%%Title: QRcode'."\n". - '%%CreationDate: '.date('Y-m-d')."\n". - '%%DocumentData: Clean7Bit'."\n". - '%%LanguageLevel: 2'."\n". - '%%Pages: 1'."\n". - '%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n"; - - // set the scale - $output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n"; - // position the center of the coordinate system - - $output .= $outerFrame.' '.$outerFrame.' translate'."\n"; - - - - - // redefine the 'rectfill' operator to shorten the syntax - $output .= '/F { rectfill } def'."\n"; - - // set the symbol color - $output .= $back_color_string; - $output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n"; - - - // set the symbol color - $output .= $fore_color_string; - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = $h - 1 - $i; - $x = $j; - $output .= $x.' '.$y.' 1 1 F'."\n"; - } - } - } - - - $output .='%%EOF'; - - return $output; - } - - //---------------------------------------------------------------------- - public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: attachment, filename="qrcode.svg"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: filename="'.$filename.'"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - - $output = - ''."\n". - ''."\n". - ''."\n"; - - $output = - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - if(!empty($back_color)) { - $backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT); - $output .= ''."\n"; - } - - $output .= - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = ($i + $outerFrame) * $pixelPerPoint; - $x = ($j + $outerFrame) * $pixelPerPoint; - $output .= ''."\n"; - } - } - } - $output .= - ''."\n". - ''; - - return $output; - } - } - - - - diff --git a/phpqrcode/qrbitstream.php b/phpqrcode/qrbitstream.php deleted file mode 100755 index 7d4ec4a..0000000 --- a/phpqrcode/qrbitstream.php +++ /dev/null @@ -1,180 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRbitstream { - - public $data = array(); - - //---------------------------------------------------------------------- - public function size() - { - return count($this->data); - } - - //---------------------------------------------------------------------- - public function allocate($setLength) - { - $this->data = array_fill(0, $setLength, 0); - return 0; - } - - //---------------------------------------------------------------------- - public static function newFromNum($bits, $num) - { - $bstream = new QRbitstream(); - $bstream->allocate($bits); - - $mask = 1 << ($bits - 1); - for($i=0; $i<$bits; $i++) { - if($num & $mask) { - $bstream->data[$i] = 1; - } else { - $bstream->data[$i] = 0; - } - $mask = $mask >> 1; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public static function newFromBytes($size, $data) - { - $bstream = new QRbitstream(); - $bstream->allocate($size * 8); - $p=0; - - for($i=0; $i<$size; $i++) { - $mask = 0x80; - for($j=0; $j<8; $j++) { - if($data[$i] & $mask) { - $bstream->data[$p] = 1; - } else { - $bstream->data[$p] = 0; - } - $p++; - $mask = $mask >> 1; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function append(QRbitstream $arg) - { - if (is_null($arg)) { - return -1; - } - - if($arg->size() == 0) { - return 0; - } - - if($this->size() == 0) { - $this->data = $arg->data; - return 0; - } - - $this->data = array_values(array_merge($this->data, $arg->data)); - - return 0; - } - - //---------------------------------------------------------------------- - public function appendNum($bits, $num) - { - if ($bits == 0) - return 0; - - $b = QRbitstream::newFromNum($bits, $num); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function appendBytes($size, $data) - { - if ($size == 0) - return 0; - - $b = QRbitstream::newFromBytes($size, $data); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function toByte() - { - - $size = $this->size(); - - if($size == 0) { - return array(); - } - - $data = array_fill(0, (int)(($size + 7) / 8), 0); - $bytes = (int)($size / 8); - - $p = 0; - - for($i=0; $i<$bytes; $i++) { - $v = 0; - for($j=0; $j<8; $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$i] = $v; - } - - if($size & 7) { - $v = 0; - for($j=0; $j<($size & 7); $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$bytes] = $v; - } - - return $data; - } - - } diff --git a/phpqrcode/qrconfig.php b/phpqrcode/qrconfig.php deleted file mode 100755 index e53dff8..0000000 --- a/phpqrcode/qrconfig.php +++ /dev/null @@ -1,17 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - // Encoding modes - - define('QR_MODE_NUL', -1); - define('QR_MODE_NUM', 0); - define('QR_MODE_AN', 1); - define('QR_MODE_8', 2); - define('QR_MODE_KANJI', 3); - define('QR_MODE_STRUCTURE', 4); - - // Levels of error correction. - - define('QR_ECLEVEL_L', 0); - define('QR_ECLEVEL_M', 1); - define('QR_ECLEVEL_Q', 2); - define('QR_ECLEVEL_H', 3); - - // Supported output formats - - define('QR_FORMAT_TEXT', 0); - define('QR_FORMAT_PNG', 1); - - class qrstr { - public static function set(&$srctab, $x, $y, $repl, $replLen = false) { - $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); - } - } \ No newline at end of file diff --git a/phpqrcode/qrencode.php b/phpqrcode/qrencode.php deleted file mode 100755 index 6c210e8..0000000 --- a/phpqrcode/qrencode.php +++ /dev/null @@ -1,569 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsblock { - public $dataLength; - public $data = array(); - public $eccLength; - public $ecc = array(); - - public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) - { - $rs->encode_rs_char($data, $ecc); - - $this->dataLength = $dl; - $this->data = $data; - $this->eccLength = $el; - $this->ecc = $ecc; - } - }; - - //########################################################################## - - class QRrawcode { - public $version; - public $datacode = array(); - public $ecccode = array(); - public $blocks; - public $rsblocks = array(); //of RSblock - public $count; - public $dataLength; - public $eccLength; - public $b1; - - //---------------------------------------------------------------------- - public function __construct(QRinput $input) - { - $spec = array(0,0,0,0,0); - - $this->datacode = $input->getByteStream(); - if(is_null($this->datacode)) { - throw new Exception('null imput string'); - } - - QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); - - $this->version = $input->getVersion(); - $this->b1 = QRspec::rsBlockNum1($spec); - $this->dataLength = QRspec::rsDataLength($spec); - $this->eccLength = QRspec::rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = QRspec::rsBlockNum($spec); - - $ret = $this->init($spec); - if($ret < 0) { - throw new Exception('block alloc error'); - return null; - } - - $this->count = 0; - } - - //---------------------------------------------------------------------- - public function init(array $spec) - { - $dl = QRspec::rsDataCodes1($spec); - $el = QRspec::rsEccCodes1($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - if(QRspec::rsBlockNum2($spec) == 0) - return 0; - - $dl = QRspec::rsDataCodes2($spec); - $el = QRspec::rsEccCodes2($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - if($rs == NULL) return -1; - - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - return 0; - } - - //---------------------------------------------------------------------- - public function getCode() - { - $ret = NULL; - - if($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if($col >= $this->rsblocks[0]->dataLength) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]->data[$col]; - } else if($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]->ecc[$col]; - } else { - return 0; - } - $this->count++; - - return $ret; - } - } - - //########################################################################## - - class QRcode { - - public $version; - public $width; - public $data; - - //---------------------------------------------------------------------- - public function encodeMask(QRinput $input, $mask) - { - if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { - throw new Exception('wrong version'); - } - if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { - throw new Exception('wrong level'); - } - - $raw = new QRrawcode($input); - - QRtools::markTime('after_raw'); - - $version = $raw->version; - $width = QRspec::getWidth($version); - $frame = QRspec::newFrame($version); - - $filler = new FrameFiller($width, $frame); - if(is_null($filler)) { - return NULL; - } - - // inteleaved data and ecc codes - for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { - $code = $raw->getCode(); - $bit = 0x80; - for($j=0; $j<8; $j++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - - QRtools::markTime('after_filler'); - - unset($raw); - - // remainder bits - $j = QRspec::getRemainder($version); - for($i=0; $i<$j; $i++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02); - } - - $frame = $filler->frame; - unset($filler); - - - // masking - $maskObj = new QRmask(); - if($mask < 0) { - - if (QR_FIND_BEST_MASK) { - $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); - } else { - $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); - } - } else { - $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); - } - - if($masked == NULL) { - return NULL; - } - - QRtools::markTime('after_mask'); - - $this->version = $version; - $this->width = $width; - $this->data = $masked; - - return $this; - } - - //---------------------------------------------------------------------- - public function encodeInput(QRinput $input) - { - return $this->encodeMask($input, -1); - } - - //---------------------------------------------------------------------- - public function encodeString8bit($string, $version, $level) - { - if($string == NULL) { - throw new Exception('empty string!'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); - if($ret < 0) { - unset($input); - return NULL; - } - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public function encodeString($string, $version, $level, $hint, $casesensitive) - { - - if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { - throw new Exception('bad hint'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); - if($ret < 0) { - return NULL; - } - - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodePNG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encode($text, $outfile); - } - - //---------------------------------------------------------------------- - public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk); - return $enc->encodeEPS($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodeSVG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodeRAW($text, $outfile); - } - } - - //########################################################################## - - class FrameFiller { - - public $width; - public $frame; - public $x; - public $y; - public $dir; - public $bit; - - //---------------------------------------------------------------------- - public function __construct($width, &$frame) - { - $this->width = $width; - $this->frame = $frame; - $this->x = $width - 1; - $this->y = $width - 1; - $this->dir = -1; - $this->bit = -1; - } - - //---------------------------------------------------------------------- - public function setFrameAt($at, $val) - { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - //---------------------------------------------------------------------- - public function getFrameAt($at) - { - return ord($this->frame[$at['y']][$at['x']]); - } - - //---------------------------------------------------------------------- - public function next() - { - do { - - if($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - - $x = $this->x; - $y = $this->y; - $w = $this->width; - - if($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - - if($this->dir < 0) { - if($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if($x == 6) { - $x--; - $y = 9; - } - } - } else { - if($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if($x == 6) { - $x--; - $y -= 8; - } - } - } - if($x < 0 || $y < 0) return null; - - $this->x = $x; - $this->y = $y; - - } while(ord($this->frame[$y][$x]) & 0x80); - - return array('x'=>$x, 'y'=>$y); - } - - } ; - - //########################################################################## - - class QRencode { - - public $casesensitive = true; - public $eightbit = false; - - public $version = 0; - public $size = 3; - public $margin = 4; - public $back_color = 0xFFFFFF; - public $fore_color = 0x000000; - - public $structured = 0; // not supported yet - - public $level = QR_ECLEVEL_L; - public $hint = QR_MODE_8; - - //---------------------------------------------------------------------- - public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = new QRencode(); - $enc->size = $size; - $enc->margin = $margin; - $enc->fore_color = $fore_color; - $enc->back_color = $back_color; - $enc->cmyk = $cmyk; - - switch ($level.'') { - case '0': - case '1': - case '2': - case '3': - $enc->level = $level; - break; - case 'l': - case 'L': - $enc->level = QR_ECLEVEL_L; - break; - case 'm': - case 'M': - $enc->level = QR_ECLEVEL_M; - break; - case 'q': - case 'Q': - $enc->level = QR_ECLEVEL_Q; - break; - case 'h': - case 'H': - $enc->level = QR_ECLEVEL_H; - break; - } - - return $enc; - } - - //---------------------------------------------------------------------- - public function encodeRAW($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - return $code->data; - } - - //---------------------------------------------------------------------- - public function encode($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - QRtools::markTime('after_encode'); - - if ($outfile!== false) { - file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); - } else { - return QRtools::binarize($code->data); - } - } - - //---------------------------------------------------------------------- - public function encodePNG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeEPS($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeSVG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - } diff --git a/phpqrcode/qrimage.php b/phpqrcode/qrimage.php deleted file mode 100755 index 48048e8..0000000 --- a/phpqrcode/qrimage.php +++ /dev/null @@ -1,107 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_IMAGE', true); - - class QRimage { - - //---------------------------------------------------------------------- - public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - Header("Content-type: image/png"); - ImagePng($image); - } else { - if($saveandprint===TRUE){ - ImagePng($image, $filename); - header("Content-type: image/png"); - ImagePng($image); - }else{ - ImagePng($image, $filename); - } - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/jpeg"); - ImageJpeg($image, null, $q); - } else { - ImageJpeg($image, $filename, $q); - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - $base_image =ImageCreate($imgW, $imgH); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r1 = round((($fore_color & 0xFF0000) >> 16), 5); - $g1 = round((($fore_color & 0x00FF00) >> 8), 5); - $b1 = round(($fore_color & 0x0000FF), 5); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r2 = round((($back_color & 0xFF0000) >> 16), 5); - $g2 = round((($back_color & 0x00FF00) >> 8), 5); - $b2 = round(($back_color & 0x0000FF), 5); - - - - $col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2); - $col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1); - - imagefill($base_image, 0, 0, $col[0]); - - for($y=0; $y<$h; $y++) { - for($x=0; $x<$w; $x++) { - if ($frame[$y][$x] == '1') { - ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); - } - } - } - - $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); - ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); - ImageDestroy($base_image); - - return $target_image; - } - } diff --git a/phpqrcode/qrinput.php b/phpqrcode/qrinput.php deleted file mode 100755 index b587297..0000000 --- a/phpqrcode/qrinput.php +++ /dev/null @@ -1,726 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('STRUCTURE_HEADER_BITS', 20); - define('MAX_STRUCTURED_SYMBOLS', 16); - - class QRinputItem { - - public $mode; - public $size; - public $data; - public $bstream; - - public function __construct($mode, $size, $data, $bstream = null) - { - $setData = array_slice($data, 0, $size); - - if (count($setData) < $size) { - $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); - } - - if(!QRinput::check($mode, $size, $setData)) { - throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); - } - - $this->mode = $mode; - $this->size = $size; - $this->data = $setData; - $this->bstream = $bstream; - } - - //---------------------------------------------------------------------- - public function encodeModeNum($version) - { - try { - - $words = (int)($this->size / 3); - $bs = new QRbitstream(); - - $val = 0x1; - $bs->appendNum(4, $val); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; - $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; - $val += (ord($this->data[$i*3+2]) - ord('0')); - $bs->appendNum(10, $val); - } - - if($this->size - $words * 3 == 1) { - $val = ord($this->data[$words*3]) - ord('0'); - $bs->appendNum(4, $val); - } else if($this->size - $words * 3 == 2) { - $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; - $val += (ord($this->data[$words*3+1]) - ord('0')); - $bs->appendNum(7, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeAn($version) - { - try { - $words = (int)($this->size / 2); - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x02); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; - $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); - - $bs->appendNum(11, $val); - } - - if($this->size & 1) { - $val = QRinput::lookAnTable(ord($this->data[$words * 2])); - $bs->appendNum(6, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeMode8($version) - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x4); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); - - for($i=0; $i<$this->size; $i++) { - $bs->appendNum(8, ord($this->data[$i])); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeKanji($version) - { - try { - - $bs = new QRbitrtream(); - - $bs->appendNum(4, 0x8); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); - - for($i=0; $i<$this->size; $i+=2) { - $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); - if($val <= 0x9ffc) { - $val -= 0x8140; - } else { - $val -= 0xc140; - } - - $h = ($val >> 8) * 0xc0; - $val = ($val & 0xff) + $h; - - $bs->appendNum(13, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeStructure() - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x03); - $bs->appendNum(4, ord($this->data[1]) - 1); - $bs->appendNum(4, ord($this->data[0]) - 1); - $bs->appendNum(8, ord($this->data[2])); - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function estimateBitStreamSizeOfEntry($version) - { - $bits = 0; - - if($version == 0) - $version = 1; - - switch($this->mode) { - case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; - case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; - case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; - case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; - case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; - default: - return 0; - } - - $l = QRspec::lengthIndicator($this->mode, $version); - $m = 1 << $l; - $num = (int)(($this->size + $m - 1) / $m); - - $bits += $num * (4 + $l); - - return $bits; - } - - //---------------------------------------------------------------------- - public function encodeBitStream($version) - { - try { - - unset($this->bstream); - $words = QRspec::maximumWords($this->mode, $version); - - if($this->size > $words) { - - $st1 = new QRinputItem($this->mode, $words, $this->data); - $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); - - $st1->encodeBitStream($version); - $st2->encodeBitStream($version); - - $this->bstream = new QRbitstream(); - $this->bstream->append($st1->bstream); - $this->bstream->append($st2->bstream); - - unset($st1); - unset($st2); - - } else { - - $ret = 0; - - switch($this->mode) { - case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; - case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; - case QR_MODE_8: $ret = $this->encodeMode8($version); break; - case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; - case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; - - default: - break; - } - - if($ret < 0) - return -1; - } - - return $this->bstream->size(); - - } catch (Exception $e) { - return -1; - } - } - }; - - //########################################################################## - - class QRinput { - - public $items; - - private $version; - private $level; - - //---------------------------------------------------------------------- - public function __construct($version = 0, $level = QR_ECLEVEL_L) - { - if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { - throw new Exception('Invalid version no'); - } - - $this->version = $version; - $this->level = $level; - } - - //---------------------------------------------------------------------- - public function getVersion() - { - return $this->version; - } - - //---------------------------------------------------------------------- - public function setVersion($version) - { - if($version < 0 || $version > QRSPEC_VERSION_MAX) { - throw new Exception('Invalid version no'); - return -1; - } - - $this->version = $version; - - return 0; - } - - //---------------------------------------------------------------------- - public function getErrorCorrectionLevel() - { - return $this->level; - } - - //---------------------------------------------------------------------- - public function setErrorCorrectionLevel($level) - { - if($level > QR_ECLEVEL_H) { - throw new Exception('Invalid ECLEVEL'); - return -1; - } - - $this->level = $level; - - return 0; - } - - //---------------------------------------------------------------------- - public function appendEntry(QRinputItem $entry) - { - $this->items[] = $entry; - } - - //---------------------------------------------------------------------- - public function append($mode, $size, $data) - { - try { - $entry = new QRinputItem($mode, $size, $data); - $this->items[] = $entry; - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - - public function insertStructuredAppendHeader($size, $index, $parity) - { - if( $size > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong size'); - } - - if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong index'); - } - - $buf = array($size, $index, $parity); - - try { - $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); - array_unshift($this->items, $entry); - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function calcParity() - { - $parity = 0; - - foreach($this->items as $item) { - if($item->mode != QR_MODE_STRUCTURE) { - for($i=$item->size-1; $i>=0; $i--) { - $parity ^= $item->data[$i]; - } - } - } - - return $parity; - } - - //---------------------------------------------------------------------- - public static function checkModeNum($size, $data) - { - for($i=0; $i<$size; $i++) { - if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeNum($size) - { - $w = (int)$size / 3; - $bits = $w * 10; - - switch($size - $w * 3) { - case 1: - $bits += 4; - break; - case 2: - $bits += 7; - break; - default: - break; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static $anTable = array( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - ); - - //---------------------------------------------------------------------- - public static function lookAnTable($c) - { - return (($c > 127)?-1:self::$anTable[$c]); - } - - //---------------------------------------------------------------------- - public static function checkModeAn($size, $data) - { - for($i=0; $i<$size; $i++) { - if (self::lookAnTable(ord($data[$i])) == -1) { - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeAn($size) - { - $w = (int)($size / 2); - $bits = $w * 11; - - if($size & 1) { - $bits += 6; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static function estimateBitsMode8($size) - { - return $size * 8; - } - - //---------------------------------------------------------------------- - public function estimateBitsModeKanji($size) - { - return (int)(($size / 2) * 13); - } - - //---------------------------------------------------------------------- - public static function checkModeKanji($size, $data) - { - if($size & 1) - return false; - - for($i=0; $i<$size; $i+=2) { - $val = (ord($data[$i]) << 8) | ord($data[$i+1]); - if( $val < 0x8140 - || ($val > 0x9ffc && $val < 0xe040) - || $val > 0xebbf) { - return false; - } - } - - return true; - } - - /*********************************************************************** - * Validation - **********************************************************************/ - - public static function check($mode, $size, $data) - { - if($size <= 0) - return false; - - switch($mode) { - case QR_MODE_NUM: return self::checkModeNum($size, $data); break; - case QR_MODE_AN: return self::checkModeAn($size, $data); break; - case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; - case QR_MODE_8: return true; break; - case QR_MODE_STRUCTURE: return true; break; - - default: - break; - } - - return false; - } - - - //---------------------------------------------------------------------- - public function estimateBitStreamSize($version) - { - $bits = 0; - - foreach($this->items as $item) { - $bits += $item->estimateBitStreamSizeOfEntry($version); - } - - return $bits; - } - - //---------------------------------------------------------------------- - public function estimateVersion() - { - $version = 0; - $prev = 0; - do { - $prev = $version; - $bits = $this->estimateBitStreamSize($prev); - $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($version < 0) { - return -1; - } - } while ($version > $prev); - - return $version; - } - - //---------------------------------------------------------------------- - public static function lengthOfCode($mode, $version, $bits) - { - $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); - switch($mode) { - case QR_MODE_NUM: - $chunks = (int)($payload / 10); - $remain = $payload - $chunks * 10; - $size = $chunks * 3; - if($remain >= 7) { - $size += 2; - } else if($remain >= 4) { - $size += 1; - } - break; - case QR_MODE_AN: - $chunks = (int)($payload / 11); - $remain = $payload - $chunks * 11; - $size = $chunks * 2; - if($remain >= 6) - $size++; - break; - case QR_MODE_8: - $size = (int)($payload / 8); - break; - case QR_MODE_KANJI: - $size = (int)(($payload / 13) * 2); - break; - case QR_MODE_STRUCTURE: - $size = (int)($payload / 8); - break; - default: - $size = 0; - break; - } - - $maxsize = QRspec::maximumWords($mode, $version); - if($size < 0) $size = 0; - if($size > $maxsize) $size = $maxsize; - - return $size; - } - - //---------------------------------------------------------------------- - public function createBitStream() - { - $total = 0; - - foreach($this->items as $item) { - $bits = $item->encodeBitStream($this->version); - - if($bits < 0) - return -1; - - $total += $bits; - } - - return $total; - } - - //---------------------------------------------------------------------- - public function convertData() - { - $ver = $this->estimateVersion(); - if($ver > $this->getVersion()) { - $this->setVersion($ver); - } - - for(;;) { - $bits = $this->createBitStream(); - - if($bits < 0) - return -1; - - $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if($ver < 0) { - throw new Exception('WRONG VERSION'); - } else if($ver > $this->getVersion()) { - $this->setVersion($ver); - } else { - break; - } - } - - return 0; - } - - //---------------------------------------------------------------------- - public function appendPaddingBit(&$bstream) - { - $bits = $bstream->size(); - $maxwords = QRspec::getDataLength($this->version, $this->level); - $maxbits = $maxwords * 8; - - if ($maxbits == $bits) { - return 0; - } - - if ($maxbits - $bits < 5) { - return $bstream->appendNum($maxbits - $bits, 0); - } - - $bits += 4; - $words = (int)(($bits + 7) / 8); - - $padding = new QRbitstream(); - $ret = $padding->appendNum($words * 8 - $bits + 4, 0); - - if($ret < 0) - return $ret; - - $padlen = $maxwords - $words; - - if($padlen > 0) { - - $padbuf = array(); - for($i=0; $i<$padlen; $i++) { - $padbuf[$i] = ($i&1)?0x11:0xec; - } - - $ret = $padding->appendBytes($padlen, $padbuf); - - if($ret < 0) - return $ret; - - } - - $ret = $bstream->append($padding); - - return $ret; - } - - //---------------------------------------------------------------------- - public function mergeBitStream() - { - if($this->convertData() < 0) { - return null; - } - - $bstream = new QRbitstream(); - - foreach($this->items as $item) { - $ret = $bstream->append($item->bstream); - if($ret < 0) { - return null; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getBitStream() - { - - $bstream = $this->mergeBitStream(); - - if($bstream == null) { - return null; - } - - $ret = $this->appendPaddingBit($bstream); - if($ret < 0) { - return null; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getByteStream() - { - $bstream = $this->getBitStream(); - if($bstream == null) { - return null; - } - - return $bstream->toByte(); - } - } - - - \ No newline at end of file diff --git a/phpqrcode/qrlib.php b/phpqrcode/qrlib.php deleted file mode 100755 index 768d534..0000000 --- a/phpqrcode/qrlib.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; - - // Required libs - - include $QR_BASEDIR."qrconst.php"; - include $QR_BASEDIR."qrconfig.php"; - include $QR_BASEDIR."qrtools.php"; - include $QR_BASEDIR."qrspec.php"; - include $QR_BASEDIR."qrimage.php"; - include $QR_BASEDIR."qrvect.php"; - include $QR_BASEDIR."qrinput.php"; - include $QR_BASEDIR."qrbitstream.php"; - include $QR_BASEDIR."qrsplit.php"; - include $QR_BASEDIR."qrrscode.php"; - include $QR_BASEDIR."qrmask.php"; - include $QR_BASEDIR."qrencode.php"; - diff --git a/phpqrcode/qrmask.php b/phpqrcode/qrmask.php deleted file mode 100755 index 1f00fb9..0000000 --- a/phpqrcode/qrmask.php +++ /dev/null @@ -1,328 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('N1', 3); - define('N2', 3); - define('N3', 40); - define('N4', 10); - - class QRmask { - - public $runLength = array(); - - //---------------------------------------------------------------------- - public function __construct() - { - $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); - } - - //---------------------------------------------------------------------- - public function writeFormatInformation($width, &$frame, $mask, $level) - { - $blacks = 0; - $format = QRspec::getFormatInfo($mask, $level); - - for($i=0; $i<8; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[8][$width - 1 - $i] = chr($v); - if($i < 6) { - $frame[$i][8] = chr($v); - } else { - $frame[$i + 1][8] = chr($v); - } - $format = $format >> 1; - } - - for($i=0; $i<7; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[$width - 7 + $i][8] = chr($v); - if($i == 0) { - $frame[8][7] = chr($v); - } else { - $frame[8][6 - $i] = chr($v); - } - - $format = $format >> 1; - } - - return $blacks; - } - - //---------------------------------------------------------------------- - public function mask0($x, $y) { return ($x+$y)&1; } - public function mask1($x, $y) { return ($y&1); } - public function mask2($x, $y) { return ($x%3); } - public function mask3($x, $y) { return ($x+$y)%3; } - public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } - public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } - public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } - public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } - - //---------------------------------------------------------------------- - private function generateMaskNo($maskNo, $width, $frame) - { - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if(ord($frame[$y][$x]) & 0x80) { - $bitMask[$y][$x] = 0; - } else { - $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); - $bitMask[$y][$x] = ($maskFunc == 0)?1:0; - } - - } - } - - return $bitMask; - } - - //---------------------------------------------------------------------- - public static function serial($bitFrame) - { - $codeArr = array(); - - foreach ($bitFrame as $line) - $codeArr[] = join('', $line); - - return gzcompress(join("\n", $codeArr), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - $codeArr = array(); - - $codeLines = explode("\n", gzuncompress($code)); - foreach ($codeLines as $line) - $codeArr[] = str_split($line); - - return $codeArr; - } - - //---------------------------------------------------------------------- - public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) - { - $b = 0; - $bitMask = array(); - - $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - $bitMask = self::unserial(file_get_contents($fileName)); - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) - mkdir(QR_CACHE_DIR.'mask_'.$maskNo); - file_put_contents($fileName, self::serial($bitMask)); - } - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - } - - if ($maskGenOnly) - return; - - $d = $s; - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if($bitMask[$y][$x] == 1) { - $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); - } - $b += (int)(ord($d[$y][$x]) & 1); - } - } - - return $b; - } - - //---------------------------------------------------------------------- - public function makeMask($width, $frame, $maskNo, $level) - { - $masked = array_fill(0, $width, str_repeat("\0", $width)); - $this->makeMaskNo($maskNo, $width, $frame, $masked); - $this->writeFormatInformation($width, $masked, $maskNo, $level); - - return $masked; - } - - //---------------------------------------------------------------------- - public function calcN1N3($length) - { - $demerit = 0; - - for($i=0; $i<$length; $i++) { - - if($this->runLength[$i] >= 5) { - $demerit += (N1 + ($this->runLength[$i] - 5)); - } - if($i & 1) { - if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { - $fact = (int)($this->runLength[$i] / 3); - if(($this->runLength[$i-2] == $fact) && - ($this->runLength[$i-1] == $fact) && - ($this->runLength[$i+1] == $fact) && - ($this->runLength[$i+2] == $fact)) { - if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { - $demerit += N3; - } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { - $demerit += N3; - } - } - } - } - } - return $demerit; - } - - //---------------------------------------------------------------------- - public function evaluateSymbol($width, $frame) - { - $head = 0; - $demerit = 0; - - for($y=0; $y<$width; $y++) { - $head = 0; - $this->runLength[0] = 1; - - $frameY = $frame[$y]; - - if ($y>0) - $frameYM = $frame[$y-1]; - - for($x=0; $x<$width; $x++) { - if(($x > 0) && ($y > 0)) { - $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); - $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); - - if(($b22 | ($w22 ^ 1))&1) { - $demerit += N2; - } - } - if(($x == 0) && (ord($frameY[$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($x > 0) { - if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - for($x=0; $x<$width; $x++) { - $head = 0; - $this->runLength[0] = 1; - - for($y=0; $y<$width; $y++) { - if($y == 0 && (ord($frame[$y][$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($y > 0) { - if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - return $demerit; - } - - - //---------------------------------------------------------------------- - public function mask($width, $frame, $level) - { - $minDemerit = PHP_INT_MAX; - $bestMaskNum = 0; - $bestMask = array(); - - $checked_masks = array(0,1,2,3,4,5,6,7); - - if (QR_FIND_FROM_RANDOM !== false) { - - $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); - for ($i = 0; $i < $howManuOut; $i++) { - $remPos = rand (0, count($checked_masks)-1); - unset($checked_masks[$remPos]); - $checked_masks = array_values($checked_masks); - } - - } - - $bestMask = $frame; - - foreach($checked_masks as $i) { - $mask = array_fill(0, $width, str_repeat("\0", $width)); - - $demerit = 0; - $blacks = 0; - $blacks = $this->makeMaskNo($i, $width, $frame, $mask); - $blacks += $this->writeFormatInformation($width, $mask, $i, $level); - $blacks = (int)(100 * $blacks / ($width * $width)); - $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); - $demerit += $this->evaluateSymbol($width, $mask); - - if($demerit < $minDemerit) { - $minDemerit = $demerit; - $bestMask = $mask; - $bestMaskNum = $i; - } - } - - return $bestMask; - } - - //---------------------------------------------------------------------- - } diff --git a/phpqrcode/qrrscode.php b/phpqrcode/qrrscode.php deleted file mode 100755 index 591129a..0000000 --- a/phpqrcode/qrrscode.php +++ /dev/null @@ -1,210 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsItem { - - public $mm; // Bits per symbol - public $nn; // Symbols per block (= (1<= $this->nn) { - $x -= $this->nn; - $x = ($x >> $this->mm) + ($x & $this->nn); - } - - return $x; - } - - //---------------------------------------------------------------------- - public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - // Common code for intializing a Reed-Solomon control block (char or int symbols) - // Copyright 2004 Phil Karn, KA9Q - // May be used under the terms of the GNU Lesser General Public License (LGPL) - - $rs = null; - - // Check parameter ranges - if($symsize < 0 || $symsize > 8) return $rs; - if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; - if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; - if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! - if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding - - $rs = new QRrsItem(); - $rs->mm = $symsize; - $rs->nn = (1<<$symsize)-1; - $rs->pad = $pad; - - $rs->alpha_to = array_fill(0, $rs->nn+1, 0); - $rs->index_of = array_fill(0, $rs->nn+1, 0); - - // PHP style macro replacement ;) - $NN =& $rs->nn; - $A0 =& $NN; - - // Generate Galois field lookup tables - $rs->index_of[0] = $A0; // log(zero) = -inf - $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 - $sr = 1; - - for($i=0; $i<$rs->nn; $i++) { - $rs->index_of[$sr] = $i; - $rs->alpha_to[$i] = $sr; - $sr <<= 1; - if($sr & (1<<$symsize)) { - $sr ^= $gfpoly; - } - $sr &= $rs->nn; - } - - if($sr != 1){ - // field generator polynomial is not primitive! - $rs = NULL; - return $rs; - } - - /* Form RS code generator polynomial from its roots */ - $rs->genpoly = array_fill(0, $nroots+1, 0); - - $rs->fcr = $fcr; - $rs->prim = $prim; - $rs->nroots = $nroots; - $rs->gfpoly = $gfpoly; - - /* Find prim-th root of 1, used in decoding */ - for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) - ; // intentional empty-body loop! - - $rs->iprim = (int)($iprim / $prim); - $rs->genpoly[0] = 1; - - for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { - $rs->genpoly[$i+1] = 1; - - // Multiply rs->genpoly[] by @**(root + x) - for ($j = $i; $j > 0; $j--) { - if ($rs->genpoly[$j] != 0) { - $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; - } else { - $rs->genpoly[$j] = $rs->genpoly[$j-1]; - } - } - // rs->genpoly[0] can never be zero - $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; - } - - // convert rs->genpoly[] to index form for quicker encoding - for ($i = 0; $i <= $nroots; $i++) - $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; - - return $rs; - } - - //---------------------------------------------------------------------- - public function encode_rs_char($data, &$parity) - { - $MM =& $this->mm; - $NN =& $this->nn; - $ALPHA_TO =& $this->alpha_to; - $INDEX_OF =& $this->index_of; - $GENPOLY =& $this->genpoly; - $NROOTS =& $this->nroots; - $FCR =& $this->fcr; - $PRIM =& $this->prim; - $IPRIM =& $this->iprim; - $PAD =& $this->pad; - $A0 =& $NN; - - $parity = array_fill(0, $NROOTS, 0); - - for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { - - $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; - if($feedback != $A0) { - // feedback term is non-zero - - // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must - // always be for the polynomials constructed by init_rs() - $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); - - for($j=1;$j<$NROOTS;$j++) { - $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; - } - } - - // Shift - array_shift($parity); - if($feedback != $A0) { - array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); - } else { - array_push($parity, 0); - } - } - } - } - - //########################################################################## - - class QRrs { - - public static $items = array(); - - //---------------------------------------------------------------------- - public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - foreach(self::$items as $rs) { - if($rs->pad != $pad) continue; - if($rs->nroots != $nroots) continue; - if($rs->mm != $symsize) continue; - if($rs->gfpoly != $gfpoly) continue; - if($rs->fcr != $fcr) continue; - if($rs->prim != $prim) continue; - - return $rs; - } - - $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); - array_unshift(self::$items, $rs); - - return $rs; - } - } \ No newline at end of file diff --git a/phpqrcode/qrspec.php b/phpqrcode/qrspec.php deleted file mode 100755 index 92aea0c..0000000 --- a/phpqrcode/qrspec.php +++ /dev/null @@ -1,592 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QRSPEC_VERSION_MAX', 40); - define('QRSPEC_WIDTH_MAX', 177); - - define('QRCAP_WIDTH', 0); - define('QRCAP_WORDS', 1); - define('QRCAP_REMINDER', 2); - define('QRCAP_EC', 3); - - class QRspec { - - public static $capacity = array( - array( 0, 0, 0, array( 0, 0, 0, 0)), - array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 - array( 25, 44, 7, array( 10, 16, 22, 28)), - array( 29, 70, 7, array( 15, 26, 36, 44)), - array( 33, 100, 7, array( 20, 36, 52, 64)), - array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 - array( 41, 172, 7, array( 36, 64, 96, 112)), - array( 45, 196, 0, array( 40, 72, 108, 130)), - array( 49, 242, 0, array( 48, 88, 132, 156)), - array( 53, 292, 0, array( 60, 110, 160, 192)), - array( 57, 346, 0, array( 72, 130, 192, 224)), //10 - array( 61, 404, 0, array( 80, 150, 224, 264)), - array( 65, 466, 0, array( 96, 176, 260, 308)), - array( 69, 532, 0, array( 104, 198, 288, 352)), - array( 73, 581, 3, array( 120, 216, 320, 384)), - array( 77, 655, 3, array( 132, 240, 360, 432)), //15 - array( 81, 733, 3, array( 144, 280, 408, 480)), - array( 85, 815, 3, array( 168, 308, 448, 532)), - array( 89, 901, 3, array( 180, 338, 504, 588)), - array( 93, 991, 3, array( 196, 364, 546, 650)), - array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 - array(101, 1156, 4, array( 224, 442, 644, 750)), - array(105, 1258, 4, array( 252, 476, 690, 816)), - array(109, 1364, 4, array( 270, 504, 750, 900)), - array(113, 1474, 4, array( 300, 560, 810, 960)), - array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 - array(121, 1706, 4, array( 336, 644, 952, 1110)), - array(125, 1828, 4, array( 360, 700, 1020, 1200)), - array(129, 1921, 3, array( 390, 728, 1050, 1260)), - array(133, 2051, 3, array( 420, 784, 1140, 1350)), - array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 - array(141, 2323, 3, array( 480, 868, 1290, 1530)), - array(145, 2465, 3, array( 510, 924, 1350, 1620)), - array(149, 2611, 3, array( 540, 980, 1440, 1710)), - array(153, 2761, 3, array( 570, 1036, 1530, 1800)), - array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 - array(161, 3034, 0, array( 600, 1120, 1680, 1980)), - array(165, 3196, 0, array( 630, 1204, 1770, 2100)), - array(169, 3362, 0, array( 660, 1260, 1860, 2220)), - array(173, 3532, 0, array( 720, 1316, 1950, 2310)), - array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 - ); - - //---------------------------------------------------------------------- - public static function getDataLength($version, $level) - { - return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getECCLength($version, $level) - { - return self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getWidth($version) - { - return self::$capacity[$version][QRCAP_WIDTH]; - } - - //---------------------------------------------------------------------- - public static function getRemainder($version) - { - return self::$capacity[$version][QRCAP_REMINDER]; - } - - //---------------------------------------------------------------------- - public static function getMinimumVersion($size, $level) - { - - for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { - $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; - if($words >= $size) - return $i; - } - - return -1; - } - - //###################################################################### - - public static $lengthTableBits = array( - array(10, 12, 14), - array( 9, 11, 13), - array( 8, 16, 16), - array( 8, 10, 12) - ); - - //---------------------------------------------------------------------- - public static function lengthIndicator($mode, $version) - { - if ($mode == QR_MODE_STRUCTURE) - return 0; - - if ($version <= 9) { - $l = 0; - } else if ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - return self::$lengthTableBits[$mode][$l]; - } - - //---------------------------------------------------------------------- - public static function maximumWords($mode, $version) - { - if($mode == QR_MODE_STRUCTURE) - return 3; - - if($version <= 9) { - $l = 0; - } else if($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - $bits = self::$lengthTableBits[$mode][$l]; - $words = (1 << $bits) - 1; - - if($mode == QR_MODE_KANJI) { - $words *= 2; // the number of bytes is required - } - - return $words; - } - - // Error correction code ----------------------------------------------- - // Table of the error correction code (Reed-Solomon block) - // See Table 12-16 (pp.30-36), JIS X0510:2004. - - public static $eccTable = array( - array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), - array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 - array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), - array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), - array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), - array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), - array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 - array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), - array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), - array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), - array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), - array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 - array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), - array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), - array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), - array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), - array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 - array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), - array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), - array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), - array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), - array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 - array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), - array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), - array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), - array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), - array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 - array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), - array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), - array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), - array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), - array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 - array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), - array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), - array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), - array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), - array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 - ); - - //---------------------------------------------------------------------- - // CACHEABLE!!! - - public static function getEccSpec($version, $level, array &$spec) - { - if (count($spec) < 5) { - $spec = array(0,0,0,0,0); - } - - $b1 = self::$eccTable[$version][$level][0]; - $b2 = self::$eccTable[$version][$level][1]; - $data = self::getDataLength($version, $level); - $ecc = self::getECCLength($version, $level); - - if($b2 == 0) { - $spec[0] = $b1; - $spec[1] = (int)($data / $b1); - $spec[2] = (int)($ecc / $b1); - $spec[3] = 0; - $spec[4] = 0; - } else { - $spec[0] = $b1; - $spec[1] = (int)($data / ($b1 + $b2)); - $spec[2] = (int)($ecc / ($b1 + $b2)); - $spec[3] = $b2; - $spec[4] = $spec[1] + 1; - } - } - - // Alignment pattern --------------------------------------------------- - - // Positions of alignment patterns. - // This array includes only the second and the third position of the - // alignment patterns. Rest of them can be calculated from the distance - // between them. - - // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. - - public static $alignmentPattern = array( - array( 0, 0), - array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 - array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 - array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 - array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 - array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 - array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 - array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 - array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 - ); - - - /** -------------------------------------------------------------------- - * Put an alignment marker. - * @param frame - * @param width - * @param ox,oy center coordinate of the pattern - */ - public static function putAlignmentMarker(array &$frame, $ox, $oy) - { - $finder = array( - "\xa1\xa1\xa1\xa1\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa0\xa1\xa0\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa1\xa1\xa1\xa1" - ); - - $yStart = $oy-2; - $xStart = $ox-2; - - for($y=0; $y<5; $y++) { - QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function putAlignmentPattern($version, &$frame, $width) - { - if($version < 2) - return; - - $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; - if($d < 0) { - $w = 2; - } else { - $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); - } - - if($w * $w - 3 == 1) { - $x = self::$alignmentPattern[$version][0]; - $y = self::$alignmentPattern[$version][0]; - self::putAlignmentMarker($frame, $x, $y); - return; - } - - $cx = self::$alignmentPattern[$version][0]; - for($x=1; $x<$w - 1; $x++) { - self::putAlignmentMarker($frame, 6, $cx); - self::putAlignmentMarker($frame, $cx, 6); - $cx += $d; - } - - $cy = self::$alignmentPattern[$version][0]; - for($y=0; $y<$w-1; $y++) { - $cx = self::$alignmentPattern[$version][0]; - for($x=0; $x<$w-1; $x++) { - self::putAlignmentMarker($frame, $cx, $cy); - $cx += $d; - } - $cy += $d; - } - } - - // Version information pattern ----------------------------------------- - - // Version information pattern (BCH coded). - // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. - - // size: [QRSPEC_VERSION_MAX - 6] - - public static $versionPattern = array( - 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, - 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, - 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, - 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, - 0x27541, 0x28c69 - ); - - //---------------------------------------------------------------------- - public static function getVersionPattern($version) - { - if($version < 7 || $version > QRSPEC_VERSION_MAX) - return 0; - - return self::$versionPattern[$version -7]; - } - - // Format information -------------------------------------------------- - // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) - - public static $formatInfo = array( - array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), - array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), - array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), - array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) - ); - - public static function getFormatInfo($mask, $level) - { - if($mask < 0 || $mask > 7) - return 0; - - if($level < 0 || $level > 3) - return 0; - - return self::$formatInfo[$level][$mask]; - } - - // Frame --------------------------------------------------------------- - // Cache of initial frames. - - public static $frames = array(); - - /** -------------------------------------------------------------------- - * Put a finder pattern. - * @param frame - * @param width - * @param ox,oy upper-left coordinate of the pattern - */ - public static function putFinderPattern(&$frame, $ox, $oy) - { - $finder = array( - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" - ); - - for($y=0; $y<7; $y++) { - QRstr::set($frame, $ox, $oy+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function createFrame($version) - { - $width = self::$capacity[$version][QRCAP_WIDTH]; - $frameLine = str_repeat ("\0", $width); - $frame = array_fill(0, $width, $frameLine); - - // Finder pattern - self::putFinderPattern($frame, 0, 0); - self::putFinderPattern($frame, $width - 7, 0); - self::putFinderPattern($frame, 0, $width - 7); - - // Separator - $yOffset = $width - 7; - - for($y=0; $y<7; $y++) { - $frame[$y][7] = "\xc0"; - $frame[$y][$width - 8] = "\xc0"; - $frame[$yOffset][7] = "\xc0"; - $yOffset++; - } - - $setPattern = str_repeat("\xc0", 8); - - QRstr::set($frame, 0, 7, $setPattern); - QRstr::set($frame, $width-8, 7, $setPattern); - QRstr::set($frame, 0, $width - 8, $setPattern); - - // Format info - $setPattern = str_repeat("\x84", 9); - QRstr::set($frame, 0, 8, $setPattern); - QRstr::set($frame, $width - 8, 8, $setPattern, 8); - - $yOffset = $width - 8; - - for($y=0; $y<8; $y++,$yOffset++) { - $frame[$y][8] = "\x84"; - $frame[$yOffset][8] = "\x84"; - } - - // Timing pattern - - for($i=1; $i<$width-15; $i++) { - $frame[6][7+$i] = chr(0x90 | ($i & 1)); - $frame[7+$i][6] = chr(0x90 | ($i & 1)); - } - - // Alignment pattern - self::putAlignmentPattern($version, $frame, $width); - - // Version information - if($version >= 7) { - $vinf = self::getVersionPattern($version); - - $v = $vinf; - - for($x=0; $x<6; $x++) { - for($y=0; $y<3; $y++) { - $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - - $v = $vinf; - for($y=0; $y<6; $y++) { - for($x=0; $x<3; $x++) { - $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - } - - // and a little bit... - $frame[$width - 8][8] = "\x81"; - - return $frame; - } - - //---------------------------------------------------------------------- - public static function debug($frame, $binary_mode = false) - { - if ($binary_mode) { - - foreach ($frame as &$frameLine) { - $frameLine = join('  ', explode('0', $frameLine)); - $frameLine = join('██', explode('1', $frameLine)); - } - - ?> - -


        '; - echo join("
        ", $frame); - echo '






'; - - } else { - - foreach ($frame as &$frameLine) { - $frameLine = join(' ', explode("\xc0", $frameLine)); - $frameLine = join('', explode("\xc1", $frameLine)); - $frameLine = join(' ', explode("\xa0", $frameLine)); - $frameLine = join('', explode("\xa1", $frameLine)); - $frameLine = join('', explode("\x84", $frameLine)); //format 0 - $frameLine = join('', explode("\x85", $frameLine)); //format 1 - $frameLine = join('', explode("\x81", $frameLine)); //special bit - $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 - $frameLine = join('', explode("\x91", $frameLine)); //clock 1 - $frameLine = join(' ', explode("\x88", $frameLine)); //version - $frameLine = join('', explode("\x89", $frameLine)); //version - $frameLine = join('♦', explode("\x01", $frameLine)); - $frameLine = join('⋅', explode("\0", $frameLine)); - } - - ?> - - "; - echo join("
", $frame); - echo "
"; - - } - } - - //---------------------------------------------------------------------- - public static function serial($frame) - { - return gzcompress(join("\n", $frame), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - return explode("\n", gzuncompress($code)); - } - - //---------------------------------------------------------------------- - public static function newFrame($version) - { - if($version < 1 || $version > QRSPEC_VERSION_MAX) - return null; - - if(!isset(self::$frames[$version])) { - - $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - self::$frames[$version] = self::unserial(file_get_contents($fileName)); - } else { - self::$frames[$version] = self::createFrame($version); - file_put_contents($fileName, self::serial(self::$frames[$version])); - } - } else { - self::$frames[$version] = self::createFrame($version); - } - } - - if(is_null(self::$frames[$version])) - return null; - - return self::$frames[$version]; - } - - //---------------------------------------------------------------------- - public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } - public static function rsBlockNum1($spec) { return $spec[0]; } - public static function rsDataCodes1($spec) { return $spec[1]; } - public static function rsEccCodes1($spec) { return $spec[2]; } - public static function rsBlockNum2($spec) { return $spec[3]; } - public static function rsDataCodes2($spec) { return $spec[4]; } - public static function rsEccCodes2($spec) { return $spec[2]; } - public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } - public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } - - } \ No newline at end of file diff --git a/phpqrcode/qrsplit.php b/phpqrcode/qrsplit.php deleted file mode 100755 index 73a8e82..0000000 --- a/phpqrcode/qrsplit.php +++ /dev/null @@ -1,311 +0,0 @@ - - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - class QRsplit { - - public $dataStr = ''; - public $input; - public $modeHint; - - //---------------------------------------------------------------------- - public function __construct($dataStr, $input, $modeHint) - { - $this->dataStr = $dataStr; - $this->input = $input; - $this->modeHint = $modeHint; - } - - //---------------------------------------------------------------------- - public static function isdigitat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); - } - - //---------------------------------------------------------------------- - public static function isalnumat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return (QRinput::lookAnTable(ord($str[$pos])) >= 0); - } - - //---------------------------------------------------------------------- - public function identifyMode($pos) - { - if ($pos >= strlen($this->dataStr)) - return QR_MODE_NUL; - - $c = $this->dataStr[$pos]; - - if(self::isdigitat($this->dataStr, $pos)) { - return QR_MODE_NUM; - } else if(self::isalnumat($this->dataStr, $pos)) { - return QR_MODE_AN; - } else if($this->modeHint == QR_MODE_KANJI) { - - if ($pos+1 < strlen($this->dataStr)) - { - $d = $this->dataStr[$pos+1]; - $word = (ord($c) << 8) | ord($d); - if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { - return QR_MODE_KANJI; - } - } - } - - return QR_MODE_8; - } - - //---------------------------------------------------------------------- - public function eatNum() - { - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - while(self::isdigitat($this->dataStr, $p)) { - $p++; - } - - $run = $p; - $mode = $this->identifyMode($p); - - if($mode == QR_MODE_8) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - if($mode == QR_MODE_AN) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsModeAn(1) // + 4 + la - - QRinput::estimateBitsModeAn($run + 1);// - 4 - la - if($dif > 0) { - return $this->eatAn(); - } - } - - $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatAn() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - - while(self::isalnumat($this->dataStr, $p)) { - if(self::isdigitat($this->dataStr, $p)) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - - $dif = QRinput::estimateBitsModeAn($p) // + 4 + la - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsModeAn($q); // - 4 - la - - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - - if(!self::isalnumat($this->dataStr, $p)) { - $dif = QRinput::estimateBitsModeAn($run) + 4 + $la - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - - $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatKanji() - { - $p = 0; - - while($this->identifyMode($p) == QR_MODE_KANJI) { - $p += 2; - } - - $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $ret; - } - - //---------------------------------------------------------------------- - public function eat8() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 1; - $dataStrLen = strlen($this->dataStr); - - while($p < $dataStrLen) { - - $mode = $this->identifyMode($p); - if($mode == QR_MODE_KANJI) { - break; - } - if($mode == QR_MODE_NUM) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else if($mode == QR_MODE_AN) { - $q = $p; - while(self::isalnumat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeAn($q - $p) + 4 + $la - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); - - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function splitString() - { - while (strlen($this->dataStr) > 0) - { - if($this->dataStr == '') - return 0; - - $mode = $this->identifyMode(0); - - switch ($mode) { - case QR_MODE_NUM: $length = $this->eatNum(); break; - case QR_MODE_AN: $length = $this->eatAn(); break; - case QR_MODE_KANJI: - if ($mode == QR_MODE_KANJI) - $length = $this->eatKanji(); - else $length = $this->eat8(); - break; - default: $length = $this->eat8(); break; - - } - - if($length == 0) return 0; - if($length < 0) return -1; - - $this->dataStr = substr($this->dataStr, $length); - } - } - - //---------------------------------------------------------------------- - public function toUpper() - { - $stringLen = strlen($this->dataStr); - $p = 0; - - while ($p<$stringLen) { - $mode = self::identifyMode(substr($this->dataStr, $p)); - if($mode == QR_MODE_KANJI) { - $p += 2; - } else { - if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { - $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); - } - $p++; - } - } - - return $this->dataStr; - } - - //---------------------------------------------------------------------- - public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) - { - if(is_null($string) || $string == '\0' || $string == '') { - throw new Exception('empty string!!!'); - } - - $split = new QRsplit($string, $input, $modeHint); - - if(!$casesensitive) - $split->toUpper(); - - return $split->splitString(); - } - } \ No newline at end of file diff --git a/phpqrcode/qrtools.php b/phpqrcode/qrtools.php deleted file mode 100755 index bb29528..0000000 --- a/phpqrcode/qrtools.php +++ /dev/null @@ -1,185 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRtools { - - //---------------------------------------------------------------------- - public static function binarize($frame) - { - $len = count($frame); - foreach ($frame as &$frameLine) { - - for($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - - return $frame; - } - - //---------------------------------------------------------------------- - public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') - { - $barcode_array = array(); - - if (!is_array($mode)) - $mode = explode(',', $mode); - - $eccLevel = 'L'; - - if (count($mode) > 1) { - $eccLevel = $mode[1]; - } - - $qrTab = QRcode::text($code, false, $eccLevel); - $size = count($qrTab); - - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach(str_split($line) as $char) - $arrAdd[] = ($char=='1')?1:0; - $barcode_array['bcode'][] = $arrAdd; - } - - return $barcode_array; - } - - //---------------------------------------------------------------------- - public static function clearCache() - { - self::$frames = array(); - } - - //---------------------------------------------------------------------- - public static function buildCache() - { - QRtools::markTime('before_build_cache'); - - $mask = new QRmask(); - for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { - $frame = QRspec::newFrame($a); - if (QR_IMAGE) { - $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; - QRimage::png(self::binarize($frame), $fileName, 1, 0); - } - - $width = count($frame); - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($maskNo=0; $maskNo<8; $maskNo++) - $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); - } - - QRtools::markTime('after_build_cache'); - } - - //---------------------------------------------------------------------- - public static function log($outfile, $err) - { - if (QR_LOG_DIR !== false) { - if ($err != '') { - if ($outfile !== false) { - file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } else { - file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } - } - } - } - - //---------------------------------------------------------------------- - public static function dumpMask($frame) - { - $width = count($frame); - for($y=0;$y<$width;$y++) { - for($x=0;$x<$width;$x++) { - echo ord($frame[$y][$x]).','; - } - } - } - - //---------------------------------------------------------------------- - public static function markTime($markerId) - { - list($usec, $sec) = explode(" ", microtime()); - $time = ((float)$usec + (float)$sec); - - if (!isset($GLOBALS['qr_time_bench'])) - $GLOBALS['qr_time_bench'] = array(); - - $GLOBALS['qr_time_bench'][$markerId] = $time; - } - - //---------------------------------------------------------------------- - public static function timeBenchmark() - { - self::markTime('finish'); - - $lastTime = 0; - $startTime = 0; - $p = 0; - - echo ' - - '; - - foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { - if ($p > 0) { - echo ''; - } else { - $startTime = $thisTime; - } - - $p++; - $lastTime = $thisTime; - } - - echo ' - - -
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; - } - - public static function save($content, $filename_path) - { - try { - $handle = fopen($filename_path, "w"); - fwrite($handle, $content); - fclose($handle); - return true; - } catch (Exception $e) { - echo 'Exception reçue : ', $e->getMessage(), "\n"; - } - - } - - } - - //########################################################################## - - QRtools::markTime('start'); - \ No newline at end of file diff --git a/phpqrcode/qrvect.php b/phpqrcode/qrvect.php deleted file mode 100755 index 113fd12..0000000 --- a/phpqrcode/qrvect.php +++ /dev/null @@ -1,214 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_VECT', true); - - class QRvect { - - //---------------------------------------------------------------------- - public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk); - - if ($filename === false) { - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - if ($cmyk) - { - // convert color value into decimal eps format - $c = round((($fore_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($fore_color & 0x000000FF) / 255, 5); - $fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - - // convert color value into decimal eps format - $c = round((($back_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($back_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($back_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($back_color & 0x000000FF) / 255, 5); - $back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - } - else - { - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($fore_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($fore_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($fore_color & 0x0000FF) / 255, 5); - $fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($back_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($back_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($back_color & 0x0000FF) / 255, 5); - $back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - } - - $output = - '%!PS-Adobe EPSF-3.0'."\n". - '%%Creator: PHPQrcodeLib'."\n". - '%%Title: QRcode'."\n". - '%%CreationDate: '.date('Y-m-d')."\n". - '%%DocumentData: Clean7Bit'."\n". - '%%LanguageLevel: 2'."\n". - '%%Pages: 1'."\n". - '%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n"; - - // set the scale - $output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n"; - // position the center of the coordinate system - - $output .= $outerFrame.' '.$outerFrame.' translate'."\n"; - - - - - // redefine the 'rectfill' operator to shorten the syntax - $output .= '/F { rectfill } def'."\n"; - - // set the symbol color - $output .= $back_color_string; - $output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n"; - - - // set the symbol color - $output .= $fore_color_string; - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = $h - 1 - $i; - $x = $j; - $output .= $x.' '.$y.' 1 1 F'."\n"; - } - } - } - - - $output .='%%EOF'; - - return $output; - } - - //---------------------------------------------------------------------- - public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: attachment, filename="qrcode.svg"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: filename="'.$filename.'"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - - $output = - ''."\n". - ''."\n". - ''."\n"; - - $output = - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - if(!empty($back_color)) { - $backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT); - $output .= ''."\n"; - } - - $output .= - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = ($i + $outerFrame) * $pixelPerPoint; - $x = ($j + $outerFrame) * $pixelPerPoint; - $output .= ''."\n"; - } - } - } - $output .= - ''."\n". - ''; - - return $output; - } - } - - diff --git a/phpqrcode/temp/tempfolder b/phpqrcode/temp/tempfolder deleted file mode 100755 index e69de29..0000000 diff --git a/phpqrcode/tools/merge.bat b/phpqrcode/tools/merge.bat deleted file mode 100755 index b60a485..0000000 --- a/phpqrcode/tools/merge.bat +++ /dev/null @@ -1,2 +0,0 @@ -php ./merge.php -pause \ No newline at end of file diff --git a/phpqrcode/tools/merge.php b/phpqrcode/tools/merge.php deleted file mode 100755 index 526d6e4..0000000 --- a/phpqrcode/tools/merge.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR; - $QR_TOOLSDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; - - $outputFile = $QR_BASEDIR.'phpqrcode.php'; - - // Required libs - - $fileList = array( - $QR_BASEDIR.'qrconst.php', - $QR_TOOLSDIR.'merged_config.php', - $QR_BASEDIR.'qrtools.php', - $QR_BASEDIR.'qrspec.php', - $QR_BASEDIR.'qrimage.php', - $QR_BASEDIR.'qrinput.php', - $QR_BASEDIR.'qrbitstream.php', - $QR_BASEDIR.'qrsplit.php', - $QR_BASEDIR.'qrrscode.php', - $QR_BASEDIR.'qrmask.php', - $QR_BASEDIR.'qrencode.php', - $QR_BASEDIR.'qrvect.php' - ); - - $headerFile = $QR_TOOLSDIR.'merged_header.php'; - $versionFile = $QR_BASEDIR.'VERSION'; - - $outputCode = ''; - - foreach($fileList as $fileName) { - $outputCode .= "\n\n".'//---- '.basename($fileName).' -----------------------------'."\n\n"; - $anotherCode = file_get_contents($fileName); - $anotherCode = preg_replace ('/^<\?php/', '', $anotherCode); - $anotherCode = preg_replace ('/\?>\*$/', '', $anotherCode); - $outputCode .= "\n\n".$anotherCode."\n\n"; - } - - $versionDataEx = explode("\n", file_get_contents($versionFile)); - - $outputContents = file_get_contents($headerFile); - $outputContents .= "\n\n/*\n * Version: ".trim($versionDataEx[0])."\n * Build: ".trim($versionDataEx[1])."\n */\n\n"; - $outputContents .= $outputCode; - - file_put_contents($outputFile, $outputContents); - - \ No newline at end of file diff --git a/phpqrcode/tools/merge.sh b/phpqrcode/tools/merge.sh deleted file mode 100755 index f7d3168..0000000 --- a/phpqrcode/tools/merge.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -php ./merge.php diff --git a/phpqrcode/tools/merged_config.php b/phpqrcode/tools/merged_config.php deleted file mode 100755 index 55ddb45..0000000 --- a/phpqrcode/tools/merged_config.php +++ /dev/null @@ -1,17 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - \ No newline at end of file diff --git a/ubuntu-dl.ttf b/ubuntu-dl.ttf deleted file mode 100755 index 45a038bade527cbbf30f197c5a116be3cfb2f0a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353824 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 z 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