From b7bd7386ed62699bca76e1fb77da8da50db88cd3 Mon Sep 17 00:00:00 2001 From: divija95 Date: Wed, 4 Sep 2024 04:00:09 +0000 Subject: [PATCH] Changes to support Edgelist datasets --- inputs/rmat10.el | 10447 ++++++++++++++++ .../galois/graphs/DistributedLocalGraph.h | 12 +- .../galois/runtime/GraphUpdateManager.h | 46 +- libwmd/include/galois/wmd/WMDGraph.h | 218 +- libwmd/include/galois/wmd/WMDPartitioner.h | 66 +- libwmd/include/galois/wmd/schema.h | 56 + libwmd/test/CMakeLists.txt | 2 + libwmd/test/el-graph-build.cpp | 182 + libwmd/test/wmd-graph-build.cpp | 2 +- 9 files changed, 10975 insertions(+), 56 deletions(-) create mode 100644 inputs/rmat10.el create mode 100644 libwmd/test/el-graph-build.cpp diff --git a/inputs/rmat10.el b/inputs/rmat10.el new file mode 100644 index 000000000..0607d8d9d --- /dev/null +++ b/inputs/rmat10.el @@ -0,0 +1,10447 @@ +0 1 +0 2 +0 3 +0 4 +0 5 +0 6 +0 7 +0 8 +0 9 +0 10 +0 11 +0 12 +0 13 +0 14 +0 15 +0 16 +0 17 +0 18 +0 19 +0 20 +0 21 +0 22 +0 23 +0 24 +0 25 +0 26 +0 27 +0 28 +0 29 +0 30 +0 32 +0 33 +0 34 +0 35 +0 36 +0 37 +0 38 +0 39 +0 40 +0 41 +0 42 +0 43 +0 44 +0 46 +0 48 +0 49 +0 50 +0 51 +0 52 +0 53 +0 54 +0 55 +0 56 +0 57 +0 58 +0 60 +0 64 +0 65 +0 66 +0 67 +0 68 +0 69 +0 70 +0 71 +0 72 +0 73 +0 74 +0 76 +0 77 +0 78 +0 79 +0 80 +0 81 +0 82 +0 84 +0 85 +0 86 +0 87 +0 88 +0 89 +0 90 +0 91 +0 92 +0 94 +0 96 +0 97 +0 98 +0 99 +0 100 +0 101 +0 102 +0 103 +0 104 +0 105 +0 106 +0 110 +0 111 +0 112 +0 113 +0 116 +0 117 +0 118 +0 120 +0 121 +0 122 +0 124 +0 128 +0 129 +0 130 +0 131 +0 132 +0 133 +0 134 +0 135 +0 136 +0 137 +0 138 +0 139 +0 140 +0 141 +0 142 +0 144 +0 145 +0 146 +0 147 +0 148 +0 149 +0 150 +0 151 +0 152 +0 153 +0 154 +0 155 +0 156 +0 157 +0 158 +0 160 +0 161 +0 162 +0 163 +0 164 +0 165 +0 167 +0 168 +0 170 +0 174 +0 175 +0 176 +0 181 +0 184 +0 185 +0 188 +0 192 +0 193 +0 194 +0 196 +0 197 +0 198 +0 200 +0 201 +0 202 +0 204 +0 205 +0 208 +0 209 +0 210 +0 216 +0 224 +0 225 +0 226 +0 231 +0 232 +0 240 +0 256 +0 257 +0 258 +0 259 +0 260 +0 261 +0 262 +0 263 +0 264 +0 265 +0 266 +0 268 +0 269 +0 270 +0 271 +0 272 +0 273 +0 274 +0 276 +0 277 +0 280 +0 281 +0 284 +0 286 +0 288 +0 289 +0 290 +0 291 +0 292 +0 293 +0 294 +0 296 +0 297 +0 298 +0 302 +0 304 +0 305 +0 306 +0 308 +0 312 +0 320 +0 321 +0 322 +0 323 +0 324 +0 325 +0 328 +0 330 +0 331 +0 332 +0 333 +0 334 +0 335 +0 336 +0 337 +0 340 +0 344 +0 352 +0 353 +0 354 +0 355 +0 356 +0 357 +0 360 +0 362 +0 365 +0 369 +0 376 +0 384 +0 385 +0 386 +0 388 +0 389 +0 392 +0 393 +0 394 +0 395 +0 400 +0 401 +0 402 +0 408 +0 410 +0 416 +0 417 +0 418 +0 420 +0 421 +0 426 +0 429 +0 434 +0 436 +0 440 +0 448 +0 449 +0 450 +0 451 +0 452 +0 456 +0 458 +0 464 +0 465 +0 468 +0 470 +0 476 +0 480 +0 482 +0 496 +0 512 +0 513 +0 514 +0 515 +0 516 +0 517 +0 518 +0 520 +0 521 +0 522 +0 523 +0 524 +0 525 +0 528 +0 529 +0 530 +0 532 +0 533 +0 534 +0 535 +0 536 +0 537 +0 538 +0 539 +0 540 +0 544 +0 545 +0 546 +0 547 +0 548 +0 549 +0 550 +0 552 +0 553 +0 554 +0 555 +0 556 +0 557 +0 558 +0 560 +0 561 +0 562 +0 564 +0 566 +0 568 +0 576 +0 577 +0 578 +0 579 +0 580 +0 581 +0 582 +0 584 +0 586 +0 587 +0 588 +0 592 +0 593 +0 594 +0 596 +0 597 +0 600 +0 604 +0 608 +0 609 +0 610 +0 612 +0 616 +0 619 +0 620 +0 622 +0 624 +0 628 +0 631 +0 632 +0 640 +0 641 +0 642 +0 643 +0 644 +0 646 +0 647 +0 648 +0 649 +0 650 +0 651 +0 652 +0 654 +0 656 +0 657 +0 660 +0 664 +0 666 +0 667 +0 672 +0 673 +0 674 +0 675 +0 676 +0 679 +0 680 +0 684 +0 685 +0 686 +0 688 +0 689 +0 696 +0 702 +0 704 +0 706 +0 707 +0 708 +0 714 +0 722 +0 724 +0 728 +0 736 +0 737 +0 744 +0 755 +0 756 +0 768 +0 769 +0 770 +0 771 +0 772 +0 773 +0 775 +0 776 +0 777 +0 778 +0 779 +0 780 +0 784 +0 785 +0 786 +0 787 +0 789 +0 790 +0 792 +0 794 +0 796 +0 800 +0 801 +0 802 +0 804 +0 805 +0 806 +0 817 +0 818 +0 820 +0 822 +0 823 +0 824 +0 827 +0 832 +0 833 +0 834 +0 837 +0 840 +0 844 +0 846 +0 849 +0 850 +0 852 +0 864 +0 867 +0 896 +0 897 +0 900 +0 901 +0 902 +0 903 +0 912 +0 914 +0 915 +0 918 +0 919 +0 920 +0 922 +0 925 +0 928 +0 929 +0 932 +0 933 +0 934 +0 938 +0 960 +0 961 +0 963 +0 978 +0 992 +0 1008 +1 2 +1 3 +1 4 +1 5 +1 6 +1 7 +1 8 +1 9 +1 10 +1 12 +1 13 +1 15 +1 16 +1 17 +1 18 +1 20 +1 22 +1 24 +1 25 +1 26 +1 27 +1 29 +1 32 +1 33 +1 34 +1 35 +1 36 +1 39 +1 40 +1 41 +1 42 +1 45 +1 47 +1 48 +1 49 +1 56 +1 58 +1 64 +1 65 +1 66 +1 68 +1 69 +1 72 +1 74 +1 76 +1 78 +1 80 +1 81 +1 82 +1 84 +1 86 +1 88 +1 92 +1 94 +1 98 +1 99 +1 100 +1 104 +1 110 +1 113 +1 114 +1 116 +1 126 +1 128 +1 129 +1 130 +1 131 +1 132 +1 134 +1 135 +1 136 +1 139 +1 140 +1 142 +1 144 +1 148 +1 150 +1 151 +1 152 +1 153 +1 156 +1 160 +1 161 +1 162 +1 164 +1 165 +1 168 +1 169 +1 172 +1 173 +1 176 +1 184 +1 192 +1 193 +1 194 +1 195 +1 196 +1 200 +1 205 +1 208 +1 210 +1 211 +1 212 +1 214 +1 216 +1 218 +1 225 +1 229 +1 233 +1 238 +1 256 +1 257 +1 258 +1 259 +1 260 +1 262 +1 264 +1 266 +1 267 +1 268 +1 272 +1 273 +1 274 +1 276 +1 285 +1 288 +1 289 +1 290 +1 291 +1 292 +1 293 +1 296 +1 300 +1 304 +1 308 +1 312 +1 316 +1 320 +1 322 +1 323 +1 324 +1 326 +1 330 +1 337 +1 346 +1 352 +1 353 +1 356 +1 384 +1 385 +1 386 +1 389 +1 390 +1 394 +1 396 +1 401 +1 402 +1 405 +1 408 +1 420 +1 421 +1 433 +1 450 +1 452 +1 484 +1 485 +1 492 +1 497 +1 512 +1 513 +1 514 +1 515 +1 516 +1 517 +1 518 +1 520 +1 521 +1 522 +1 524 +1 526 +1 528 +1 530 +1 531 +1 532 +1 533 +1 534 +1 536 +1 544 +1 546 +1 547 +1 548 +1 550 +1 552 +1 556 +1 560 +1 562 +1 568 +1 570 +1 574 +1 576 +1 577 +1 578 +1 579 +1 580 +1 582 +1 586 +1 587 +1 589 +1 592 +1 593 +1 594 +1 596 +1 599 +1 602 +1 610 +1 615 +1 628 +1 633 +1 640 +1 641 +1 642 +1 644 +1 646 +1 648 +1 656 +1 657 +1 664 +1 672 +1 674 +1 676 +1 678 +1 684 +1 704 +1 705 +1 710 +1 712 +1 714 +1 720 +1 724 +1 744 +1 768 +1 769 +1 771 +1 772 +1 774 +1 782 +1 784 +1 785 +1 794 +1 800 +1 806 +1 817 +1 822 +1 832 +1 841 +1 842 +1 844 +1 848 +1 849 +1 858 +1 883 +1 897 +1 898 +1 912 +1 920 +1 924 +1 931 +1 948 +1 960 +1 964 +1 968 +1 1008 +2 3 +2 4 +2 5 +2 6 +2 7 +2 8 +2 9 +2 10 +2 12 +2 13 +2 14 +2 16 +2 17 +2 18 +2 20 +2 21 +2 22 +2 24 +2 25 +2 27 +2 31 +2 32 +2 33 +2 34 +2 35 +2 36 +2 38 +2 40 +2 43 +2 44 +2 45 +2 48 +2 49 +2 50 +2 51 +2 52 +2 53 +2 58 +2 64 +2 65 +2 66 +2 67 +2 68 +2 69 +2 70 +2 72 +2 73 +2 74 +2 76 +2 77 +2 78 +2 80 +2 88 +2 90 +2 96 +2 97 +2 99 +2 100 +2 101 +2 104 +2 105 +2 106 +2 112 +2 116 +2 119 +2 120 +2 128 +2 129 +2 130 +2 131 +2 132 +2 134 +2 136 +2 138 +2 139 +2 144 +2 145 +2 148 +2 152 +2 153 +2 158 +2 160 +2 161 +2 164 +2 165 +2 166 +2 168 +2 172 +2 178 +2 180 +2 192 +2 193 +2 194 +2 200 +2 201 +2 204 +2 206 +2 209 +2 210 +2 224 +2 225 +2 232 +2 240 +2 244 +2 256 +2 257 +2 258 +2 260 +2 261 +2 262 +2 264 +2 266 +2 268 +2 269 +2 272 +2 274 +2 275 +2 276 +2 277 +2 279 +2 280 +2 282 +2 284 +2 288 +2 290 +2 292 +2 293 +2 295 +2 304 +2 307 +2 310 +2 320 +2 321 +2 322 +2 323 +2 325 +2 326 +2 327 +2 328 +2 329 +2 331 +2 332 +2 336 +2 340 +2 344 +2 347 +2 352 +2 355 +2 356 +2 372 +2 384 +2 386 +2 388 +2 393 +2 394 +2 400 +2 402 +2 416 +2 424 +2 443 +2 448 +2 452 +2 469 +2 472 +2 480 +2 512 +2 513 +2 514 +2 515 +2 516 +2 517 +2 519 +2 520 +2 522 +2 524 +2 528 +2 529 +2 530 +2 532 +2 533 +2 534 +2 536 +2 540 +2 544 +2 545 +2 553 +2 554 +2 560 +2 561 +2 565 +2 568 +2 576 +2 577 +2 578 +2 580 +2 582 +2 584 +2 585 +2 602 +2 608 +2 611 +2 614 +2 620 +2 640 +2 641 +2 642 +2 644 +2 645 +2 646 +2 649 +2 651 +2 656 +2 658 +2 660 +2 672 +2 674 +2 688 +2 690 +2 704 +2 708 +2 716 +2 736 +2 754 +2 768 +2 770 +2 776 +2 778 +2 779 +2 784 +2 788 +2 793 +2 800 +2 801 +2 808 +2 809 +2 832 +2 848 +2 855 +2 864 +2 896 +2 897 +2 900 +2 904 +2 905 +2 906 +2 912 +2 930 +2 939 +2 960 +2 992 +2 996 +3 4 +3 5 +3 6 +3 7 +3 8 +3 9 +3 10 +3 12 +3 13 +3 16 +3 18 +3 21 +3 24 +3 28 +3 29 +3 32 +3 34 +3 36 +3 42 +3 47 +3 48 +3 49 +3 53 +3 55 +3 56 +3 57 +3 64 +3 66 +3 68 +3 74 +3 76 +3 80 +3 84 +3 88 +3 96 +3 99 +3 112 +3 124 +3 128 +3 129 +3 130 +3 131 +3 132 +3 134 +3 136 +3 138 +3 140 +3 146 +3 148 +3 157 +3 160 +3 161 +3 162 +3 164 +3 166 +3 192 +3 193 +3 194 +3 197 +3 203 +3 208 +3 220 +3 241 +3 256 +3 260 +3 261 +3 262 +3 264 +3 265 +3 272 +3 273 +3 274 +3 276 +3 277 +3 280 +3 288 +3 290 +3 296 +3 304 +3 320 +3 324 +3 329 +3 336 +3 338 +3 356 +3 384 +3 400 +3 401 +3 405 +3 416 +3 417 +3 448 +3 451 +3 457 +3 481 +3 512 +3 513 +3 516 +3 520 +3 528 +3 532 +3 537 +3 539 +3 545 +3 548 +3 549 +3 560 +3 564 +3 576 +3 577 +3 582 +3 584 +3 585 +3 592 +3 593 +3 602 +3 608 +3 617 +3 626 +3 640 +3 641 +3 644 +3 705 +3 710 +3 723 +3 768 +3 772 +3 800 +3 812 +3 818 +3 833 +3 840 +3 876 +3 897 +3 904 +3 928 +3 977 +4 5 +4 6 +4 7 +4 8 +4 9 +4 10 +4 11 +4 12 +4 13 +4 14 +4 15 +4 16 +4 17 +4 18 +4 19 +4 20 +4 21 +4 22 +4 23 +4 24 +4 26 +4 28 +4 29 +4 30 +4 32 +4 33 +4 34 +4 35 +4 36 +4 38 +4 40 +4 41 +4 43 +4 48 +4 49 +4 50 +4 52 +4 55 +4 56 +4 57 +4 60 +4 63 +4 64 +4 65 +4 66 +4 68 +4 69 +4 70 +4 72 +4 73 +4 75 +4 79 +4 80 +4 81 +4 82 +4 86 +4 96 +4 97 +4 100 +4 102 +4 104 +4 105 +4 112 +4 113 +4 119 +4 122 +4 123 +4 124 +4 128 +4 129 +4 130 +4 131 +4 132 +4 133 +4 134 +4 136 +4 137 +4 138 +4 142 +4 144 +4 145 +4 146 +4 148 +4 151 +4 156 +4 160 +4 161 +4 164 +4 165 +4 168 +4 169 +4 170 +4 172 +4 176 +4 177 +4 178 +4 180 +4 184 +4 185 +4 186 +4 192 +4 193 +4 194 +4 200 +4 208 +4 210 +4 212 +4 218 +4 224 +4 228 +4 234 +4 256 +4 257 +4 258 +4 259 +4 260 +4 261 +4 262 +4 264 +4 265 +4 268 +4 272 +4 273 +4 274 +4 276 +4 277 +4 280 +4 281 +4 282 +4 284 +4 288 +4 289 +4 290 +4 291 +4 292 +4 309 +4 314 +4 320 +4 321 +4 322 +4 325 +4 326 +4 332 +4 336 +4 337 +4 338 +4 341 +4 346 +4 361 +4 384 +4 385 +4 386 +4 388 +4 390 +4 400 +4 401 +4 410 +4 416 +4 419 +4 421 +4 426 +4 432 +4 436 +4 440 +4 448 +4 449 +4 450 +4 456 +4 512 +4 513 +4 514 +4 515 +4 516 +4 520 +4 521 +4 522 +4 524 +4 527 +4 528 +4 529 +4 532 +4 536 +4 538 +4 544 +4 545 +4 546 +4 548 +4 552 +4 554 +4 556 +4 559 +4 560 +4 561 +4 565 +4 573 +4 576 +4 577 +4 580 +4 585 +4 587 +4 592 +4 593 +4 600 +4 609 +4 612 +4 614 +4 625 +4 640 +4 641 +4 642 +4 643 +4 644 +4 647 +4 656 +4 658 +4 672 +4 676 +4 682 +4 704 +4 708 +4 710 +4 721 +4 732 +4 753 +4 768 +4 769 +4 770 +4 771 +4 772 +4 776 +4 782 +4 785 +4 786 +4 793 +4 800 +4 801 +4 808 +4 810 +4 821 +4 828 +4 836 +4 842 +4 848 +4 850 +4 856 +4 876 +4 882 +4 896 +4 897 +4 912 +4 928 +4 962 +4 964 +4 1008 +5 8 +5 10 +5 11 +5 12 +5 16 +5 17 +5 18 +5 19 +5 20 +5 21 +5 24 +5 28 +5 32 +5 33 +5 36 +5 40 +5 44 +5 46 +5 48 +5 52 +5 62 +5 64 +5 65 +5 68 +5 72 +5 77 +5 78 +5 80 +5 82 +5 83 +5 84 +5 92 +5 96 +5 97 +5 114 +5 128 +5 129 +5 130 +5 133 +5 134 +5 136 +5 144 +5 145 +5 146 +5 148 +5 161 +5 170 +5 176 +5 192 +5 208 +5 213 +5 226 +5 232 +5 256 +5 257 +5 258 +5 265 +5 267 +5 268 +5 271 +5 272 +5 274 +5 278 +5 280 +5 288 +5 289 +5 290 +5 296 +5 298 +5 316 +5 320 +5 324 +5 330 +5 342 +5 344 +5 345 +5 378 +5 384 +5 386 +5 387 +5 390 +5 394 +5 416 +5 417 +5 436 +5 438 +5 512 +5 513 +5 514 +5 516 +5 520 +5 524 +5 529 +5 532 +5 535 +5 537 +5 538 +5 544 +5 554 +5 558 +5 576 +5 578 +5 580 +5 581 +5 587 +5 600 +5 608 +5 640 +5 641 +5 650 +5 661 +5 689 +5 704 +5 706 +5 720 +5 768 +5 769 +5 770 +5 771 +5 776 +5 777 +5 800 +5 803 +5 809 +5 850 +5 896 +5 897 +5 904 +5 907 +5 912 +5 920 +5 928 +5 960 +6 8 +6 9 +6 10 +6 11 +6 16 +6 17 +6 18 +6 20 +6 22 +6 25 +6 32 +6 33 +6 35 +6 36 +6 40 +6 42 +6 44 +6 48 +6 49 +6 64 +6 65 +6 66 +6 67 +6 68 +6 69 +6 70 +6 74 +6 80 +6 85 +6 97 +6 98 +6 108 +6 128 +6 129 +6 132 +6 138 +6 144 +6 153 +6 160 +6 162 +6 163 +6 164 +6 167 +6 192 +6 216 +6 217 +6 228 +6 240 +6 248 +6 256 +6 258 +6 259 +6 260 +6 262 +6 263 +6 264 +6 265 +6 268 +6 272 +6 273 +6 274 +6 282 +6 288 +6 289 +6 296 +6 320 +6 324 +6 328 +6 330 +6 336 +6 352 +6 357 +6 369 +6 384 +6 388 +6 418 +6 433 +6 444 +6 512 +6 513 +6 514 +6 516 +6 521 +6 523 +6 528 +6 529 +6 538 +6 544 +6 548 +6 576 +6 580 +6 584 +6 592 +6 599 +6 609 +6 624 +6 640 +6 641 +6 648 +6 656 +6 657 +6 659 +6 704 +6 705 +6 760 +6 768 +6 780 +6 784 +6 800 +6 801 +6 804 +6 820 +6 822 +6 838 +6 866 +6 897 +6 915 +6 929 +7 8 +7 12 +7 14 +7 28 +7 32 +7 33 +7 36 +7 40 +7 48 +7 64 +7 65 +7 72 +7 76 +7 84 +7 89 +7 96 +7 97 +7 105 +7 112 +7 128 +7 140 +7 145 +7 160 +7 170 +7 176 +7 192 +7 198 +7 201 +7 225 +7 258 +7 264 +7 268 +7 272 +7 273 +7 288 +7 396 +7 405 +7 408 +7 417 +7 464 +7 513 +7 516 +7 546 +7 576 +7 600 +7 609 +7 611 +7 642 +7 652 +7 654 +7 689 +7 772 +8 9 +8 10 +8 11 +8 12 +8 14 +8 16 +8 17 +8 18 +8 19 +8 20 +8 21 +8 23 +8 24 +8 25 +8 27 +8 28 +8 30 +8 31 +8 32 +8 33 +8 34 +8 35 +8 36 +8 37 +8 40 +8 41 +8 42 +8 44 +8 48 +8 49 +8 50 +8 54 +8 56 +8 60 +8 61 +8 64 +8 65 +8 66 +8 67 +8 68 +8 69 +8 71 +8 72 +8 73 +8 75 +8 76 +8 80 +8 81 +8 82 +8 84 +8 85 +8 87 +8 89 +8 92 +8 96 +8 97 +8 98 +8 100 +8 112 +8 113 +8 114 +8 117 +8 120 +8 128 +8 129 +8 130 +8 132 +8 133 +8 134 +8 136 +8 137 +8 138 +8 144 +8 145 +8 150 +8 152 +8 160 +8 161 +8 162 +8 164 +8 168 +8 176 +8 180 +8 192 +8 193 +8 194 +8 195 +8 196 +8 200 +8 205 +8 216 +8 224 +8 225 +8 240 +8 256 +8 257 +8 258 +8 260 +8 261 +8 262 +8 264 +8 265 +8 266 +8 270 +8 272 +8 275 +8 280 +8 281 +8 288 +8 289 +8 292 +8 296 +8 304 +8 305 +8 312 +8 314 +8 315 +8 320 +8 322 +8 324 +8 325 +8 326 +8 328 +8 329 +8 330 +8 336 +8 340 +8 345 +8 352 +8 354 +8 364 +8 368 +8 384 +8 387 +8 388 +8 389 +8 390 +8 392 +8 402 +8 407 +8 416 +8 418 +8 419 +8 423 +8 425 +8 428 +8 432 +8 436 +8 441 +8 448 +8 452 +8 454 +8 456 +8 466 +8 481 +8 482 +8 512 +8 513 +8 514 +8 516 +8 518 +8 520 +8 521 +8 522 +8 523 +8 524 +8 525 +8 528 +8 530 +8 532 +8 533 +8 539 +8 541 +8 544 +8 545 +8 546 +8 547 +8 548 +8 553 +8 556 +8 560 +8 570 +8 571 +8 572 +8 576 +8 577 +8 580 +8 581 +8 584 +8 586 +8 592 +8 600 +8 608 +8 610 +8 612 +8 624 +8 640 +8 641 +8 642 +8 644 +8 645 +8 646 +8 652 +8 656 +8 657 +8 661 +8 664 +8 669 +8 672 +8 673 +8 674 +8 676 +8 680 +8 688 +8 704 +8 705 +8 706 +8 708 +8 709 +8 720 +8 727 +8 752 +8 768 +8 769 +8 770 +8 771 +8 772 +8 774 +8 775 +8 776 +8 778 +8 784 +8 797 +8 800 +8 802 +8 808 +8 832 +8 897 +8 906 +8 916 +8 920 +8 928 +8 961 +8 964 +8 986 +9 16 +9 18 +9 20 +9 22 +9 25 +9 32 +9 33 +9 34 +9 35 +9 36 +9 37 +9 44 +9 49 +9 52 +9 60 +9 64 +9 66 +9 72 +9 73 +9 75 +9 80 +9 84 +9 88 +9 90 +9 96 +9 102 +9 112 +9 128 +9 129 +9 130 +9 132 +9 135 +9 137 +9 138 +9 146 +9 148 +9 160 +9 166 +9 168 +9 178 +9 192 +9 201 +9 204 +9 208 +9 216 +9 225 +9 256 +9 258 +9 259 +9 264 +9 265 +9 266 +9 272 +9 275 +9 286 +9 288 +9 290 +9 291 +9 293 +9 294 +9 300 +9 320 +9 322 +9 328 +9 352 +9 389 +9 448 +9 460 +9 512 +9 514 +9 520 +9 524 +9 528 +9 530 +9 531 +9 532 +9 537 +9 544 +9 546 +9 560 +9 562 +9 577 +9 598 +9 601 +9 640 +9 642 +9 644 +9 648 +9 664 +9 668 +9 673 +9 678 +9 708 +9 714 +9 768 +9 769 +9 777 +9 784 +9 793 +9 794 +9 832 +9 836 +9 841 +9 853 +9 880 +9 897 +9 960 +9 976 +10 12 +10 13 +10 14 +10 16 +10 17 +10 18 +10 19 +10 20 +10 21 +10 23 +10 24 +10 25 +10 32 +10 33 +10 34 +10 36 +10 38 +10 40 +10 48 +10 50 +10 51 +10 64 +10 67 +10 68 +10 69 +10 70 +10 71 +10 72 +10 87 +10 96 +10 97 +10 116 +10 117 +10 128 +10 129 +10 130 +10 131 +10 133 +10 134 +10 135 +10 136 +10 139 +10 140 +10 144 +10 160 +10 164 +10 176 +10 192 +10 193 +10 196 +10 201 +10 208 +10 209 +10 210 +10 212 +10 220 +10 222 +10 224 +10 240 +10 257 +10 259 +10 260 +10 262 +10 266 +10 272 +10 280 +10 285 +10 288 +10 289 +10 290 +10 296 +10 320 +10 321 +10 322 +10 324 +10 344 +10 350 +10 352 +10 384 +10 386 +10 388 +10 392 +10 393 +10 403 +10 449 +10 488 +10 512 +10 514 +10 515 +10 516 +10 520 +10 521 +10 525 +10 528 +10 529 +10 533 +10 536 +10 544 +10 545 +10 561 +10 562 +10 565 +10 576 +10 577 +10 578 +10 580 +10 592 +10 640 +10 642 +10 644 +10 645 +10 646 +10 656 +10 673 +10 674 +10 706 +10 709 +10 712 +10 720 +10 768 +10 772 +10 815 +10 816 +10 832 +10 836 +10 920 +10 921 +10 930 +11 16 +11 17 +11 18 +11 32 +11 48 +11 49 +11 50 +11 64 +11 68 +11 98 +11 128 +11 138 +11 148 +11 164 +11 200 +11 208 +11 256 +11 272 +11 288 +11 304 +11 384 +11 388 +11 420 +11 512 +11 514 +11 546 +11 550 +11 560 +11 562 +11 576 +11 604 +11 609 +11 640 +11 641 +11 642 +11 660 +11 666 +11 768 +11 777 +11 784 +11 822 +11 856 +11 864 +11 912 +12 13 +12 16 +12 17 +12 21 +12 22 +12 31 +12 32 +12 33 +12 34 +12 35 +12 38 +12 40 +12 42 +12 50 +12 56 +12 58 +12 64 +12 66 +12 72 +12 80 +12 83 +12 96 +12 97 +12 102 +12 112 +12 121 +12 126 +12 128 +12 131 +12 136 +12 137 +12 144 +12 145 +12 148 +12 152 +12 160 +12 161 +12 164 +12 168 +12 184 +12 193 +12 194 +12 196 +12 200 +12 224 +12 226 +12 243 +12 256 +12 257 +12 258 +12 259 +12 260 +12 265 +12 266 +12 268 +12 272 +12 274 +12 277 +12 280 +12 288 +12 290 +12 294 +12 296 +12 308 +12 320 +12 352 +12 372 +12 395 +12 400 +12 416 +12 424 +12 425 +12 449 +12 505 +12 512 +12 513 +12 514 +12 516 +12 520 +12 521 +12 527 +12 528 +12 530 +12 532 +12 533 +12 536 +12 544 +12 547 +12 548 +12 560 +12 576 +12 577 +12 578 +12 580 +12 584 +12 586 +12 588 +12 608 +12 624 +12 627 +12 640 +12 641 +12 642 +12 645 +12 648 +12 665 +12 677 +12 709 +12 768 +12 771 +12 772 +12 784 +12 800 +12 808 +12 832 +12 842 +12 850 +12 864 +12 881 +12 902 +12 940 +12 976 +13 16 +13 20 +13 24 +13 26 +13 32 +13 33 +13 35 +13 38 +13 48 +13 50 +13 64 +13 69 +13 73 +13 80 +13 89 +13 98 +13 128 +13 133 +13 144 +13 169 +13 172 +13 178 +13 196 +13 208 +13 209 +13 216 +13 260 +13 287 +13 289 +13 293 +13 299 +13 320 +13 322 +13 336 +13 512 +13 516 +13 520 +13 521 +13 544 +13 582 +13 640 +13 641 +13 648 +13 657 +13 673 +13 709 +13 728 +13 768 +13 776 +13 802 +13 846 +13 849 +13 850 +14 16 +14 17 +14 24 +14 44 +14 48 +14 49 +14 52 +14 64 +14 66 +14 67 +14 69 +14 80 +14 82 +14 86 +14 96 +14 100 +14 114 +14 117 +14 128 +14 144 +14 146 +14 161 +14 163 +14 181 +14 192 +14 196 +14 224 +14 240 +14 256 +14 257 +14 265 +14 310 +14 320 +14 336 +14 385 +14 392 +14 400 +14 441 +14 512 +14 514 +14 516 +14 520 +14 528 +14 531 +14 624 +14 650 +14 708 +14 785 +14 801 +14 803 +14 816 +14 850 +15 16 +15 32 +15 49 +15 52 +15 57 +15 60 +15 65 +15 128 +15 140 +15 161 +15 256 +15 261 +15 323 +15 516 +15 705 +15 770 +16 17 +16 18 +16 19 +16 21 +16 22 +16 24 +16 25 +16 26 +16 28 +16 29 +16 32 +16 33 +16 34 +16 35 +16 36 +16 37 +16 40 +16 41 +16 44 +16 45 +16 50 +16 52 +16 56 +16 57 +16 62 +16 64 +16 65 +16 66 +16 67 +16 68 +16 70 +16 71 +16 72 +16 74 +16 76 +16 77 +16 80 +16 81 +16 82 +16 85 +16 86 +16 89 +16 90 +16 96 +16 97 +16 98 +16 99 +16 100 +16 101 +16 103 +16 112 +16 118 +16 120 +16 128 +16 129 +16 130 +16 131 +16 132 +16 133 +16 134 +16 135 +16 136 +16 137 +16 138 +16 141 +16 144 +16 145 +16 148 +16 154 +16 156 +16 160 +16 161 +16 165 +16 172 +16 176 +16 180 +16 184 +16 192 +16 193 +16 194 +16 196 +16 197 +16 208 +16 212 +16 220 +16 224 +16 225 +16 228 +16 229 +16 238 +16 250 +16 256 +16 257 +16 258 +16 259 +16 260 +16 261 +16 262 +16 264 +16 265 +16 266 +16 268 +16 272 +16 273 +16 274 +16 275 +16 276 +16 277 +16 278 +16 284 +16 288 +16 289 +16 290 +16 292 +16 293 +16 296 +16 298 +16 299 +16 304 +16 312 +16 317 +16 320 +16 321 +16 322 +16 324 +16 326 +16 328 +16 329 +16 333 +16 338 +16 345 +16 352 +16 353 +16 360 +16 364 +16 372 +16 384 +16 386 +16 388 +16 391 +16 396 +16 400 +16 404 +16 405 +16 408 +16 416 +16 418 +16 419 +16 424 +16 429 +16 432 +16 434 +16 437 +16 444 +16 448 +16 456 +16 457 +16 462 +16 464 +16 478 +16 509 +16 512 +16 513 +16 514 +16 515 +16 516 +16 517 +16 518 +16 520 +16 521 +16 523 +16 524 +16 528 +16 529 +16 530 +16 531 +16 532 +16 536 +16 537 +16 538 +16 540 +16 541 +16 544 +16 545 +16 548 +16 552 +16 554 +16 560 +16 564 +16 576 +16 577 +16 578 +16 579 +16 580 +16 581 +16 587 +16 588 +16 592 +16 600 +16 602 +16 609 +16 612 +16 618 +16 638 +16 640 +16 641 +16 642 +16 644 +16 649 +16 656 +16 662 +16 672 +16 678 +16 680 +16 704 +16 728 +16 746 +16 768 +16 769 +16 770 +16 771 +16 772 +16 774 +16 775 +16 776 +16 777 +16 784 +16 785 +16 787 +16 788 +16 800 +16 805 +16 808 +16 817 +16 832 +16 840 +16 860 +16 869 +16 870 +16 896 +16 897 +16 902 +16 908 +16 917 +16 920 +16 937 +16 938 +16 944 +16 945 +16 948 +16 961 +16 1002 +17 18 +17 19 +17 20 +17 21 +17 24 +17 25 +17 26 +17 30 +17 31 +17 32 +17 33 +17 35 +17 37 +17 39 +17 40 +17 41 +17 48 +17 50 +17 57 +17 64 +17 67 +17 68 +17 70 +17 72 +17 77 +17 80 +17 82 +17 84 +17 88 +17 96 +17 98 +17 105 +17 128 +17 129 +17 130 +17 131 +17 134 +17 138 +17 144 +17 145 +17 154 +17 160 +17 161 +17 167 +17 192 +17 193 +17 201 +17 256 +17 257 +17 258 +17 260 +17 262 +17 273 +17 275 +17 278 +17 320 +17 321 +17 322 +17 330 +17 352 +17 354 +17 357 +17 360 +17 364 +17 365 +17 384 +17 385 +17 392 +17 396 +17 400 +17 448 +17 450 +17 500 +17 512 +17 513 +17 514 +17 515 +17 516 +17 517 +17 520 +17 522 +17 524 +17 529 +17 545 +17 552 +17 553 +17 560 +17 561 +17 576 +17 578 +17 581 +17 586 +17 608 +17 620 +17 640 +17 644 +17 648 +17 704 +17 768 +17 770 +17 777 +17 781 +17 790 +17 848 +17 864 +17 897 +17 898 +17 899 +17 900 +17 954 +17 964 +18 19 +18 20 +18 24 +18 28 +18 33 +18 36 +18 42 +18 48 +18 49 +18 56 +18 64 +18 65 +18 66 +18 67 +18 68 +18 69 +18 70 +18 72 +18 73 +18 74 +18 80 +18 82 +18 90 +18 100 +18 102 +18 106 +18 112 +18 116 +18 128 +18 129 +18 130 +18 136 +18 141 +18 142 +18 146 +18 147 +18 149 +18 160 +18 164 +18 176 +18 179 +18 192 +18 196 +18 199 +18 200 +18 226 +18 256 +18 257 +18 260 +18 264 +18 272 +18 274 +18 275 +18 276 +18 288 +18 292 +18 296 +18 300 +18 304 +18 320 +18 321 +18 326 +18 330 +18 336 +18 352 +18 357 +18 362 +18 384 +18 389 +18 400 +18 416 +18 417 +18 433 +18 452 +18 464 +18 471 +18 512 +18 513 +18 514 +18 516 +18 517 +18 520 +18 521 +18 524 +18 525 +18 528 +18 536 +18 544 +18 552 +18 577 +18 580 +18 581 +18 584 +18 594 +18 602 +18 608 +18 614 +18 640 +18 644 +18 648 +18 656 +18 658 +18 672 +18 704 +18 715 +18 728 +18 768 +18 770 +18 772 +18 784 +18 792 +18 795 +18 832 +18 835 +18 864 +18 900 +18 929 +18 932 +18 934 +18 978 +19 20 +19 32 +19 33 +19 36 +19 48 +19 52 +19 60 +19 64 +19 65 +19 72 +19 82 +19 100 +19 128 +19 134 +19 160 +19 162 +19 164 +19 192 +19 194 +19 216 +19 260 +19 261 +19 264 +19 289 +19 328 +19 340 +19 344 +19 454 +19 464 +19 512 +19 514 +19 515 +19 516 +19 528 +19 532 +19 544 +19 549 +19 551 +19 584 +19 612 +19 665 +19 708 +19 730 +19 820 +19 837 +20 24 +20 26 +20 32 +20 33 +20 34 +20 35 +20 36 +20 40 +20 46 +20 53 +20 57 +20 64 +20 65 +20 66 +20 70 +20 72 +20 76 +20 78 +20 83 +20 85 +20 90 +20 96 +20 98 +20 100 +20 103 +20 128 +20 129 +20 131 +20 136 +20 147 +20 149 +20 160 +20 161 +20 162 +20 194 +20 208 +20 210 +20 224 +20 256 +20 257 +20 259 +20 260 +20 264 +20 265 +20 266 +20 288 +20 290 +20 292 +20 304 +20 306 +20 320 +20 321 +20 322 +20 324 +20 328 +20 336 +20 342 +20 358 +20 384 +20 385 +20 390 +20 409 +20 416 +20 426 +20 456 +20 480 +20 482 +20 485 +20 512 +20 513 +20 514 +20 518 +20 520 +20 530 +20 544 +20 545 +20 548 +20 568 +20 582 +20 590 +20 608 +20 610 +20 627 +20 633 +20 640 +20 642 +20 646 +20 654 +20 672 +20 736 +20 760 +20 768 +20 775 +20 784 +20 832 +20 834 +20 841 +20 906 +20 970 +21 26 +21 32 +21 34 +21 36 +21 42 +21 50 +21 64 +21 72 +21 80 +21 88 +21 128 +21 129 +21 136 +21 138 +21 152 +21 160 +21 162 +21 165 +21 195 +21 196 +21 226 +21 256 +21 257 +21 260 +21 273 +21 288 +21 289 +21 292 +21 338 +21 384 +21 387 +21 390 +21 400 +21 490 +21 512 +21 516 +21 517 +21 520 +21 524 +21 532 +21 537 +21 544 +21 592 +21 600 +21 620 +21 642 +21 652 +21 768 +21 770 +21 896 +21 920 +21 929 +22 32 +22 65 +22 67 +22 78 +22 98 +22 100 +22 104 +22 128 +22 136 +22 144 +22 146 +22 160 +22 168 +22 208 +22 232 +22 240 +22 243 +22 257 +22 258 +22 264 +22 297 +22 320 +22 328 +22 358 +22 393 +22 400 +22 404 +22 512 +22 513 +22 516 +22 532 +22 544 +22 546 +22 548 +22 576 +22 632 +22 656 +22 684 +22 768 +22 897 +22 933 +22 937 +23 32 +23 34 +23 64 +23 80 +23 104 +23 256 +23 257 +23 388 +23 515 +23 517 +23 520 +23 530 +23 560 +23 644 +23 776 +24 25 +24 26 +24 32 +24 33 +24 34 +24 35 +24 36 +24 40 +24 44 +24 46 +24 53 +24 62 +24 64 +24 65 +24 66 +24 67 +24 68 +24 69 +24 70 +24 76 +24 80 +24 82 +24 96 +24 98 +24 112 +24 128 +24 130 +24 132 +24 148 +24 149 +24 160 +24 161 +24 164 +24 177 +24 196 +24 200 +24 210 +24 228 +24 242 +24 256 +24 258 +24 260 +24 265 +24 268 +24 272 +24 278 +24 283 +24 288 +24 289 +24 293 +24 296 +24 304 +24 320 +24 328 +24 332 +24 384 +24 386 +24 421 +24 476 +24 512 +24 513 +24 518 +24 519 +24 520 +24 521 +24 522 +24 524 +24 528 +24 531 +24 545 +24 546 +24 568 +24 578 +24 586 +24 593 +24 605 +24 608 +24 612 +24 640 +24 641 +24 642 +24 644 +24 656 +24 665 +24 704 +24 712 +24 738 +24 768 +24 769 +24 771 +24 772 +24 774 +24 784 +24 788 +24 794 +24 802 +24 896 +24 898 +24 930 +24 932 +24 960 +24 963 +25 26 +25 32 +25 36 +25 38 +25 48 +25 50 +25 64 +25 68 +25 72 +25 78 +25 81 +25 128 +25 140 +25 144 +25 145 +25 160 +25 180 +25 192 +25 256 +25 258 +25 261 +25 292 +25 299 +25 320 +25 332 +25 402 +25 418 +25 512 +25 513 +25 544 +25 576 +25 706 +25 768 +25 778 +25 832 +25 842 +26 32 +26 33 +26 36 +26 45 +26 49 +26 52 +26 64 +26 68 +26 73 +26 80 +26 82 +26 94 +26 95 +26 112 +26 128 +26 136 +26 148 +26 161 +26 170 +26 188 +26 192 +26 240 +26 256 +26 258 +26 266 +26 288 +26 301 +26 303 +26 320 +26 353 +26 355 +26 360 +26 400 +26 417 +26 514 +26 517 +26 520 +26 521 +26 560 +26 609 +26 704 +26 838 +27 37 +27 69 +27 128 +27 256 +27 260 +27 268 +27 290 +27 384 +27 514 +27 520 +27 800 +27 932 +28 36 +28 40 +28 64 +28 65 +28 66 +28 81 +28 96 +28 112 +28 128 +28 130 +28 137 +28 141 +28 145 +28 146 +28 156 +28 168 +28 176 +28 208 +28 256 +28 267 +28 274 +28 288 +28 388 +28 412 +28 512 +28 514 +28 521 +28 576 +28 578 +28 584 +28 592 +28 618 +28 674 +28 806 +28 808 +28 833 +28 835 +28 896 +28 897 +29 32 +29 64 +29 66 +29 67 +29 114 +29 132 +29 133 +29 175 +29 256 +29 258 +29 264 +29 284 +29 296 +29 518 +29 768 +29 769 +29 888 +30 32 +30 73 +30 130 +30 160 +30 210 +30 260 +30 272 +30 322 +30 400 +30 401 +30 514 +30 552 +30 560 +31 64 +31 210 +31 520 +31 521 +31 548 +32 33 +32 34 +32 35 +32 36 +32 38 +32 40 +32 48 +32 51 +32 52 +32 56 +32 64 +32 65 +32 66 +32 67 +32 68 +32 70 +32 72 +32 74 +32 77 +32 80 +32 81 +32 92 +32 95 +32 96 +32 97 +32 98 +32 100 +32 104 +32 108 +32 115 +32 116 +32 117 +32 128 +32 129 +32 130 +32 131 +32 132 +32 133 +32 134 +32 135 +32 136 +32 138 +32 140 +32 141 +32 142 +32 144 +32 146 +32 147 +32 148 +32 152 +32 153 +32 156 +32 160 +32 162 +32 164 +32 167 +32 168 +32 170 +32 176 +32 192 +32 194 +32 196 +32 197 +32 200 +32 201 +32 209 +32 212 +32 216 +32 217 +32 224 +32 225 +32 227 +32 228 +32 240 +32 242 +32 248 +32 256 +32 257 +32 258 +32 260 +32 263 +32 264 +32 265 +32 266 +32 268 +32 270 +32 272 +32 275 +32 276 +32 277 +32 284 +32 288 +32 289 +32 290 +32 292 +32 293 +32 296 +32 298 +32 301 +32 304 +32 320 +32 321 +32 322 +32 323 +32 324 +32 325 +32 328 +32 329 +32 330 +32 332 +32 336 +32 338 +32 340 +32 345 +32 360 +32 384 +32 385 +32 386 +32 389 +32 392 +32 393 +32 394 +32 400 +32 402 +32 404 +32 429 +32 448 +32 451 +32 456 +32 464 +32 480 +32 490 +32 496 +32 512 +32 513 +32 514 +32 515 +32 516 +32 517 +32 518 +32 520 +32 521 +32 522 +32 524 +32 525 +32 527 +32 528 +32 529 +32 530 +32 532 +32 536 +32 544 +32 545 +32 549 +32 552 +32 553 +32 558 +32 560 +32 576 +32 577 +32 578 +32 579 +32 581 +32 584 +32 585 +32 586 +32 587 +32 588 +32 593 +32 596 +32 616 +32 622 +32 624 +32 625 +32 640 +32 641 +32 644 +32 648 +32 651 +32 656 +32 708 +32 720 +32 722 +32 736 +32 740 +32 768 +32 769 +32 770 +32 772 +32 773 +32 774 +32 778 +32 779 +32 785 +32 788 +32 800 +32 804 +32 809 +32 816 +32 817 +32 819 +32 832 +32 836 +32 864 +32 894 +32 896 +32 899 +32 900 +32 904 +32 944 +32 966 +32 1000 +33 34 +33 36 +33 38 +33 40 +33 49 +33 52 +33 56 +33 64 +33 66 +33 67 +33 71 +33 72 +33 73 +33 76 +33 80 +33 101 +33 113 +33 128 +33 129 +33 130 +33 131 +33 132 +33 136 +33 140 +33 144 +33 147 +33 148 +33 150 +33 155 +33 160 +33 168 +33 177 +33 184 +33 198 +33 202 +33 205 +33 212 +33 256 +33 257 +33 258 +33 259 +33 260 +33 262 +33 264 +33 266 +33 268 +33 270 +33 272 +33 273 +33 274 +33 289 +33 292 +33 301 +33 304 +33 308 +33 312 +33 320 +33 321 +33 322 +33 324 +33 328 +33 330 +33 337 +33 338 +33 340 +33 344 +33 347 +33 370 +33 384 +33 403 +33 404 +33 448 +33 452 +33 512 +33 514 +33 516 +33 520 +33 523 +33 526 +33 527 +33 528 +33 536 +33 540 +33 544 +33 548 +33 552 +33 561 +33 565 +33 576 +33 578 +33 592 +33 594 +33 598 +33 600 +33 643 +33 647 +33 666 +33 684 +33 710 +33 723 +33 768 +33 773 +33 776 +33 785 +33 786 +33 800 +33 833 +33 896 +33 996 +34 35 +34 36 +34 40 +34 41 +34 46 +34 48 +34 53 +34 58 +34 64 +34 66 +34 68 +34 69 +34 70 +34 72 +34 73 +34 77 +34 80 +34 84 +34 91 +34 96 +34 97 +34 99 +34 100 +34 110 +34 128 +34 129 +34 130 +34 132 +34 133 +34 136 +34 144 +34 145 +34 146 +34 164 +34 167 +34 168 +34 177 +34 178 +34 180 +34 192 +34 200 +34 204 +34 225 +34 234 +34 256 +34 258 +34 260 +34 264 +34 268 +34 272 +34 274 +34 276 +34 288 +34 298 +34 303 +34 320 +34 328 +34 336 +34 384 +34 389 +34 390 +34 394 +34 396 +34 397 +34 400 +34 402 +34 403 +34 405 +34 416 +34 488 +34 512 +34 513 +34 514 +34 516 +34 518 +34 520 +34 524 +34 528 +34 532 +34 533 +34 536 +34 537 +34 548 +34 562 +34 576 +34 578 +34 586 +34 593 +34 640 +34 643 +34 644 +34 645 +34 656 +34 657 +34 664 +34 708 +34 720 +34 776 +34 797 +34 800 +34 804 +34 838 +34 866 +34 882 +34 896 +34 908 +35 36 +35 40 +35 48 +35 62 +35 64 +35 65 +35 70 +35 72 +35 73 +35 102 +35 128 +35 129 +35 130 +35 132 +35 136 +35 162 +35 192 +35 200 +35 210 +35 264 +35 272 +35 326 +35 336 +35 362 +35 384 +35 385 +35 512 +35 513 +35 515 +35 516 +35 550 +35 576 +35 578 +35 640 +35 649 +35 664 +35 788 +35 850 +35 912 +35 938 +35 961 +36 37 +36 40 +36 43 +36 48 +36 52 +36 64 +36 65 +36 66 +36 68 +36 69 +36 74 +36 81 +36 86 +36 88 +36 96 +36 98 +36 100 +36 104 +36 105 +36 128 +36 129 +36 130 +36 132 +36 133 +36 136 +36 144 +36 148 +36 150 +36 152 +36 153 +36 154 +36 156 +36 160 +36 161 +36 164 +36 170 +36 180 +36 192 +36 193 +36 194 +36 206 +36 224 +36 228 +36 256 +36 257 +36 258 +36 260 +36 261 +36 262 +36 264 +36 265 +36 270 +36 272 +36 273 +36 274 +36 276 +36 277 +36 282 +36 288 +36 293 +36 296 +36 320 +36 323 +36 328 +36 331 +36 336 +36 354 +36 392 +36 393 +36 402 +36 408 +36 409 +36 417 +36 418 +36 464 +36 512 +36 513 +36 514 +36 515 +36 516 +36 524 +36 528 +36 532 +36 533 +36 536 +36 544 +36 548 +36 549 +36 560 +36 561 +36 568 +36 576 +36 577 +36 578 +36 589 +36 596 +36 640 +36 641 +36 642 +36 656 +36 661 +36 680 +36 681 +36 683 +36 704 +36 714 +36 716 +36 768 +36 770 +36 772 +36 787 +36 794 +36 834 +36 900 +36 972 +36 976 +37 49 +37 68 +37 80 +37 96 +37 112 +37 116 +37 128 +37 129 +37 140 +37 146 +37 160 +37 192 +37 200 +37 256 +37 264 +37 272 +37 304 +37 320 +37 322 +37 324 +37 356 +37 512 +37 514 +37 515 +37 516 +37 526 +37 530 +37 544 +37 576 +37 577 +37 584 +37 643 +37 760 +37 896 +37 898 +37 905 +37 916 +38 40 +38 48 +38 49 +38 64 +38 75 +38 92 +38 128 +38 160 +38 161 +38 162 +38 163 +38 172 +38 184 +38 196 +38 208 +38 256 +38 257 +38 261 +38 264 +38 276 +38 288 +38 313 +38 320 +38 321 +38 329 +38 384 +38 385 +38 392 +38 512 +38 514 +38 521 +38 538 +38 546 +38 560 +38 577 +38 578 +38 640 +38 641 +38 657 +38 769 +38 770 +38 776 +38 832 +38 864 +39 80 +39 82 +39 88 +39 128 +39 257 +39 280 +39 386 +39 432 +39 529 +39 550 +39 609 +39 672 +39 784 +40 41 +40 46 +40 48 +40 49 +40 51 +40 60 +40 64 +40 65 +40 66 +40 68 +40 70 +40 72 +40 73 +40 76 +40 83 +40 87 +40 92 +40 96 +40 98 +40 100 +40 112 +40 113 +40 128 +40 129 +40 130 +40 134 +40 136 +40 144 +40 148 +40 150 +40 153 +40 160 +40 184 +40 192 +40 193 +40 194 +40 212 +40 256 +40 257 +40 258 +40 259 +40 265 +40 272 +40 273 +40 280 +40 288 +40 289 +40 294 +40 320 +40 322 +40 324 +40 328 +40 336 +40 362 +40 368 +40 384 +40 385 +40 417 +40 433 +40 450 +40 465 +40 512 +40 513 +40 514 +40 517 +40 520 +40 521 +40 528 +40 530 +40 542 +40 544 +40 548 +40 549 +40 552 +40 561 +40 592 +40 600 +40 624 +40 657 +40 661 +40 672 +40 715 +40 720 +40 768 +40 769 +40 770 +40 772 +40 776 +40 786 +40 804 +40 806 +40 816 +40 821 +40 832 +40 850 +40 914 +41 48 +41 52 +41 64 +41 68 +41 73 +41 88 +41 118 +41 163 +41 192 +41 194 +41 212 +41 230 +41 240 +41 256 +41 264 +41 272 +41 275 +41 292 +41 320 +41 369 +41 376 +41 384 +41 385 +41 392 +41 395 +41 401 +41 512 +41 513 +41 514 +41 515 +41 524 +41 528 +41 536 +41 577 +41 578 +41 584 +41 586 +41 704 +41 768 +41 792 +41 896 +41 945 +42 64 +42 65 +42 66 +42 69 +42 98 +42 128 +42 144 +42 145 +42 160 +42 192 +42 246 +42 256 +42 258 +42 260 +42 277 +42 280 +42 288 +42 354 +42 385 +42 512 +42 513 +42 522 +42 532 +42 576 +42 609 +42 610 +42 640 +42 656 +42 714 +42 768 +42 772 +42 785 +42 791 +42 864 +42 908 +42 937 +42 964 +42 1010 +43 72 +43 98 +43 129 +43 144 +43 272 +43 288 +43 306 +43 356 +43 512 +43 514 +43 585 +43 641 +43 736 +43 832 +43 906 +44 64 +44 66 +44 102 +44 128 +44 129 +44 136 +44 138 +44 163 +44 194 +44 198 +44 225 +44 272 +44 288 +44 294 +44 310 +44 338 +44 360 +44 384 +44 390 +44 392 +44 397 +44 448 +44 512 +44 513 +44 515 +44 521 +44 530 +44 537 +44 544 +44 545 +44 561 +44 576 +44 609 +44 736 +44 770 +44 800 +44 857 +45 48 +45 65 +45 128 +45 208 +45 256 +45 518 +45 520 +45 522 +45 564 +45 580 +45 643 +45 928 +46 64 +46 67 +46 72 +46 129 +46 133 +46 136 +46 188 +46 256 +46 368 +46 512 +46 529 +46 535 +46 586 +46 673 +46 800 +47 65 +47 68 +47 273 +47 522 +47 545 +48 49 +48 56 +48 58 +48 59 +48 64 +48 65 +48 66 +48 68 +48 70 +48 72 +48 74 +48 82 +48 83 +48 84 +48 86 +48 88 +48 93 +48 96 +48 98 +48 104 +48 106 +48 120 +48 128 +48 129 +48 130 +48 132 +48 136 +48 140 +48 144 +48 146 +48 152 +48 160 +48 177 +48 192 +48 193 +48 194 +48 223 +48 256 +48 257 +48 258 +48 260 +48 262 +48 265 +48 268 +48 270 +48 281 +48 284 +48 288 +48 308 +48 320 +48 322 +48 324 +48 330 +48 358 +48 384 +48 388 +48 398 +48 404 +48 412 +48 466 +48 482 +48 512 +48 514 +48 515 +48 516 +48 519 +48 520 +48 528 +48 546 +48 548 +48 551 +48 560 +48 576 +48 577 +48 585 +48 600 +48 641 +48 648 +48 656 +48 672 +48 673 +48 705 +48 711 +48 736 +48 768 +48 769 +48 771 +48 772 +48 788 +48 801 +48 802 +48 810 +48 834 +48 837 +48 865 +49 52 +49 64 +49 65 +49 70 +49 73 +49 76 +49 81 +49 82 +49 88 +49 192 +49 196 +49 212 +49 258 +49 260 +49 262 +49 266 +49 328 +49 352 +49 385 +49 448 +49 514 +49 516 +49 519 +49 544 +49 548 +49 586 +49 640 +49 649 +49 708 +49 714 +49 930 +50 64 +50 65 +50 129 +50 132 +50 144 +50 200 +50 226 +50 272 +50 329 +50 388 +50 394 +50 448 +50 512 +50 513 +50 520 +50 532 +50 535 +50 536 +50 580 +50 644 +50 704 +50 772 +50 808 +50 832 +50 936 +50 976 +50 980 +51 65 +51 72 +51 76 +51 100 +51 128 +51 129 +51 132 +51 136 +51 155 +51 200 +51 256 +51 264 +51 288 +51 385 +51 448 +51 512 +51 560 +51 579 +51 590 +51 640 +52 64 +52 67 +52 68 +52 70 +52 78 +52 84 +52 128 +52 136 +52 144 +52 148 +52 256 +52 257 +52 259 +52 260 +52 261 +52 269 +52 272 +52 275 +52 288 +52 336 +52 368 +52 384 +52 385 +52 456 +52 514 +52 515 +52 522 +52 528 +52 541 +52 552 +52 578 +52 600 +52 633 +52 640 +52 740 +52 784 +52 832 +52 840 +53 64 +53 112 +53 192 +53 256 +53 285 +53 328 +53 385 +53 386 +53 549 +53 768 +54 67 +54 75 +54 128 +54 256 +54 328 +54 337 +54 362 +54 389 +54 453 +54 513 +54 898 +55 104 +55 141 +55 260 +56 64 +56 65 +56 68 +56 69 +56 83 +56 132 +56 134 +56 208 +56 256 +56 260 +56 261 +56 262 +56 268 +56 292 +56 296 +56 308 +56 312 +56 328 +56 512 +56 513 +56 516 +56 529 +56 544 +56 546 +56 576 +56 604 +56 640 +56 644 +56 656 +56 748 +56 768 +56 772 +56 776 +56 845 +56 865 +56 896 +56 898 +57 72 +57 128 +57 133 +57 170 +57 256 +57 257 +57 259 +57 324 +57 384 +57 436 +57 452 +57 513 +57 584 +57 592 +57 644 +57 648 +57 650 +58 64 +58 72 +58 96 +58 133 +58 141 +58 178 +58 256 +58 332 +58 352 +58 512 +58 585 +58 712 +59 256 +59 328 +59 343 +60 70 +60 72 +60 74 +60 96 +60 98 +60 260 +60 261 +60 320 +60 514 +60 556 +60 769 +60 772 +60 833 +62 68 +62 145 +62 203 +62 304 +62 320 +63 64 +64 65 +64 66 +64 67 +64 68 +64 72 +64 73 +64 74 +64 75 +64 76 +64 77 +64 79 +64 80 +64 81 +64 82 +64 85 +64 89 +64 92 +64 96 +64 97 +64 98 +64 99 +64 100 +64 101 +64 104 +64 105 +64 112 +64 116 +64 118 +64 121 +64 128 +64 129 +64 130 +64 131 +64 132 +64 133 +64 134 +64 136 +64 137 +64 138 +64 139 +64 141 +64 144 +64 145 +64 146 +64 148 +64 149 +64 153 +64 154 +64 156 +64 157 +64 160 +64 161 +64 162 +64 164 +64 169 +64 170 +64 171 +64 176 +64 177 +64 178 +64 182 +64 187 +64 192 +64 193 +64 195 +64 198 +64 201 +64 202 +64 208 +64 209 +64 210 +64 212 +64 228 +64 238 +64 240 +64 241 +64 246 +64 256 +64 257 +64 258 +64 260 +64 262 +64 264 +64 265 +64 266 +64 268 +64 272 +64 273 +64 274 +64 276 +64 277 +64 278 +64 279 +64 280 +64 284 +64 285 +64 286 +64 288 +64 289 +64 290 +64 291 +64 293 +64 305 +64 308 +64 320 +64 321 +64 322 +64 324 +64 327 +64 336 +64 338 +64 357 +64 381 +64 384 +64 385 +64 388 +64 390 +64 392 +64 396 +64 400 +64 402 +64 404 +64 408 +64 416 +64 417 +64 418 +64 420 +64 432 +64 444 +64 448 +64 450 +64 457 +64 459 +64 480 +64 482 +64 512 +64 513 +64 514 +64 515 +64 516 +64 517 +64 518 +64 520 +64 521 +64 526 +64 528 +64 529 +64 531 +64 532 +64 534 +64 536 +64 539 +64 540 +64 544 +64 546 +64 548 +64 553 +64 554 +64 556 +64 558 +64 560 +64 564 +64 576 +64 578 +64 580 +64 584 +64 598 +64 608 +64 610 +64 612 +64 613 +64 616 +64 628 +64 640 +64 641 +64 642 +64 644 +64 646 +64 648 +64 649 +64 652 +64 657 +64 664 +64 673 +64 674 +64 680 +64 688 +64 704 +64 706 +64 707 +64 712 +64 718 +64 722 +64 734 +64 768 +64 770 +64 772 +64 776 +64 778 +64 784 +64 785 +64 792 +64 800 +64 818 +64 823 +64 832 +64 833 +64 840 +64 841 +64 847 +64 848 +64 850 +64 865 +64 868 +64 869 +64 870 +64 878 +64 896 +64 897 +64 912 +64 925 +64 945 +64 963 +64 964 +64 968 +64 976 +65 66 +65 68 +65 72 +65 73 +65 80 +65 84 +65 88 +65 89 +65 96 +65 97 +65 98 +65 100 +65 106 +65 112 +65 114 +65 128 +65 132 +65 134 +65 136 +65 137 +65 139 +65 140 +65 144 +65 145 +65 146 +65 149 +65 152 +65 160 +65 162 +65 164 +65 172 +65 189 +65 192 +65 195 +65 201 +65 224 +65 256 +65 257 +65 258 +65 260 +65 265 +65 276 +65 288 +65 289 +65 290 +65 298 +65 301 +65 305 +65 309 +65 312 +65 321 +65 322 +65 323 +65 328 +65 336 +65 355 +65 357 +65 368 +65 380 +65 384 +65 392 +65 396 +65 402 +65 450 +65 456 +65 464 +65 512 +65 514 +65 515 +65 516 +65 520 +65 521 +65 523 +65 528 +65 529 +65 530 +65 536 +65 544 +65 560 +65 568 +65 576 +65 577 +65 578 +65 580 +65 584 +65 592 +65 650 +65 665 +65 674 +65 710 +65 768 +65 769 +65 770 +65 771 +65 777 +65 780 +65 788 +65 789 +65 792 +65 802 +65 806 +65 809 +65 840 +65 904 +65 928 +66 68 +66 69 +66 70 +66 71 +66 78 +66 80 +66 82 +66 84 +66 98 +66 128 +66 132 +66 136 +66 137 +66 146 +66 148 +66 152 +66 160 +66 161 +66 162 +66 163 +66 164 +66 165 +66 176 +66 180 +66 192 +66 194 +66 196 +66 208 +66 256 +66 257 +66 258 +66 263 +66 264 +66 265 +66 266 +66 268 +66 269 +66 273 +66 274 +66 276 +66 280 +66 288 +66 292 +66 293 +66 294 +66 296 +66 300 +66 320 +66 336 +66 352 +66 384 +66 386 +66 388 +66 400 +66 416 +66 440 +66 464 +66 512 +66 517 +66 519 +66 520 +66 521 +66 522 +66 523 +66 528 +66 536 +66 544 +66 552 +66 562 +66 577 +66 578 +66 591 +66 596 +66 600 +66 613 +66 616 +66 640 +66 641 +66 644 +66 645 +66 660 +66 672 +66 684 +66 692 +66 704 +66 705 +66 768 +66 776 +66 792 +66 802 +66 818 +66 836 +66 848 +66 876 +66 888 +66 912 +67 68 +67 70 +67 84 +67 86 +67 96 +67 101 +67 112 +67 128 +67 129 +67 130 +67 132 +67 133 +67 149 +67 164 +67 176 +67 192 +67 193 +67 196 +67 232 +67 256 +67 258 +67 259 +67 260 +67 264 +67 272 +67 275 +67 288 +67 290 +67 293 +67 304 +67 512 +67 516 +67 522 +67 528 +67 536 +67 552 +67 560 +67 640 +67 650 +67 720 +67 722 +67 768 +67 769 +67 896 +67 929 +68 74 +68 80 +68 89 +68 96 +68 97 +68 100 +68 105 +68 106 +68 112 +68 121 +68 128 +68 130 +68 138 +68 143 +68 144 +68 146 +68 147 +68 152 +68 160 +68 162 +68 164 +68 166 +68 169 +68 188 +68 190 +68 193 +68 194 +68 200 +68 208 +68 218 +68 224 +68 240 +68 256 +68 257 +68 258 +68 259 +68 260 +68 261 +68 262 +68 264 +68 265 +68 266 +68 272 +68 274 +68 278 +68 284 +68 288 +68 289 +68 306 +68 320 +68 321 +68 328 +68 332 +68 400 +68 409 +68 416 +68 420 +68 421 +68 424 +68 453 +68 512 +68 513 +68 514 +68 516 +68 517 +68 520 +68 528 +68 530 +68 531 +68 533 +68 536 +68 544 +68 545 +68 546 +68 548 +68 549 +68 552 +68 561 +68 570 +68 580 +68 585 +68 596 +68 610 +68 640 +68 642 +68 644 +68 645 +68 649 +68 656 +68 681 +68 704 +68 707 +68 721 +68 744 +68 752 +68 768 +68 769 +68 770 +68 772 +68 779 +68 785 +68 788 +68 800 +68 804 +68 810 +68 833 +68 834 +68 848 +68 900 +68 905 +68 995 +69 70 +69 128 +69 132 +69 134 +69 142 +69 144 +69 161 +69 174 +69 256 +69 257 +69 258 +69 261 +69 264 +69 265 +69 268 +69 324 +69 336 +69 384 +69 387 +69 403 +69 404 +69 520 +69 573 +69 576 +69 589 +69 618 +69 641 +69 648 +69 768 +69 770 +69 834 +69 896 +69 968 +70 72 +70 74 +70 96 +70 100 +70 128 +70 129 +70 130 +70 134 +70 136 +70 160 +70 169 +70 172 +70 192 +70 197 +70 234 +70 257 +70 265 +70 324 +70 337 +70 352 +70 450 +70 452 +70 512 +70 524 +70 529 +70 544 +70 560 +70 602 +70 640 +70 641 +70 642 +70 672 +70 768 +70 824 +70 832 +70 897 +71 84 +71 96 +71 128 +71 272 +71 276 +71 288 +71 290 +71 344 +71 358 +71 581 +71 640 +71 674 +71 756 +71 769 +71 904 +72 73 +72 75 +72 80 +72 82 +72 84 +72 86 +72 97 +72 98 +72 106 +72 112 +72 128 +72 129 +72 132 +72 133 +72 134 +72 136 +72 138 +72 140 +72 145 +72 146 +72 148 +72 152 +72 160 +72 176 +72 188 +72 192 +72 194 +72 208 +72 240 +72 256 +72 257 +72 258 +72 262 +72 263 +72 264 +72 268 +72 272 +72 276 +72 280 +72 284 +72 288 +72 289 +72 296 +72 300 +72 303 +72 305 +72 312 +72 320 +72 321 +72 328 +72 329 +72 336 +72 338 +72 346 +72 353 +72 372 +72 384 +72 385 +72 386 +72 392 +72 400 +72 404 +72 408 +72 416 +72 419 +72 480 +72 481 +72 512 +72 513 +72 514 +72 520 +72 522 +72 536 +72 544 +72 546 +72 548 +72 552 +72 562 +72 576 +72 583 +72 588 +72 589 +72 592 +72 640 +72 641 +72 642 +72 644 +72 645 +72 657 +72 704 +72 768 +72 770 +72 772 +72 773 +72 822 +72 832 +72 870 +72 898 +72 914 +72 928 +73 98 +73 99 +73 104 +73 128 +73 136 +73 144 +73 224 +73 256 +73 266 +73 288 +73 304 +73 322 +73 336 +73 384 +73 388 +73 468 +73 515 +73 520 +73 524 +73 529 +73 530 +73 544 +73 549 +73 594 +73 648 +73 657 +73 720 +73 782 +73 833 +73 848 +73 930 +74 100 +74 120 +74 128 +74 136 +74 144 +74 146 +74 160 +74 176 +74 196 +74 208 +74 257 +74 258 +74 260 +74 263 +74 272 +74 277 +74 294 +74 376 +74 384 +74 392 +74 400 +74 401 +74 485 +74 513 +74 532 +74 560 +74 566 +74 576 +74 578 +74 640 +74 657 +74 672 +74 677 +74 768 +74 797 +74 800 +74 896 +74 900 +74 944 +75 156 +75 194 +75 196 +75 256 +75 268 +75 298 +75 320 +75 321 +75 428 +75 434 +75 443 +75 640 +75 772 +75 796 +75 805 +75 936 +76 80 +76 82 +76 128 +76 138 +76 150 +76 152 +76 162 +76 225 +76 226 +76 282 +76 304 +76 310 +76 384 +76 386 +76 448 +76 512 +76 519 +76 528 +76 546 +76 570 +76 594 +76 597 +76 768 +76 786 +76 788 +77 97 +77 200 +77 257 +77 328 +77 578 +77 674 +77 768 +77 940 +78 185 +78 256 +78 264 +78 296 +78 324 +78 512 +78 530 +78 684 +78 775 +78 788 +78 800 +78 801 +78 836 +79 513 +79 640 +80 81 +80 82 +80 84 +80 85 +80 96 +80 97 +80 99 +80 112 +80 113 +80 128 +80 133 +80 134 +80 136 +80 139 +80 140 +80 144 +80 152 +80 160 +80 162 +80 164 +80 167 +80 168 +80 170 +80 176 +80 184 +80 192 +80 193 +80 201 +80 208 +80 220 +80 225 +80 256 +80 257 +80 258 +80 259 +80 264 +80 265 +80 266 +80 276 +80 288 +80 289 +80 290 +80 300 +80 304 +80 310 +80 320 +80 324 +80 336 +80 384 +80 392 +80 394 +80 405 +80 416 +80 448 +80 512 +80 513 +80 514 +80 516 +80 520 +80 522 +80 524 +80 528 +80 544 +80 554 +80 556 +80 562 +80 564 +80 576 +80 581 +80 597 +80 598 +80 608 +80 641 +80 642 +80 644 +80 646 +80 653 +80 658 +80 665 +80 742 +80 768 +80 774 +80 781 +80 784 +80 800 +80 874 +80 877 +80 880 +80 930 +80 956 +80 964 +81 128 +81 137 +81 144 +81 160 +81 256 +81 258 +81 264 +81 270 +81 272 +81 275 +81 279 +81 290 +81 293 +81 320 +81 360 +81 392 +81 418 +81 420 +81 425 +81 453 +81 484 +81 512 +81 513 +81 514 +81 516 +81 522 +81 528 +81 530 +81 532 +81 537 +81 544 +81 547 +81 589 +81 648 +81 681 +81 696 +81 708 +81 710 +81 768 +81 784 +81 800 +81 809 +81 820 +81 932 +82 96 +82 128 +82 132 +82 138 +82 144 +82 145 +82 256 +82 257 +82 259 +82 260 +82 264 +82 265 +82 386 +82 416 +82 512 +82 516 +82 520 +82 525 +82 528 +82 529 +82 544 +82 608 +82 642 +82 672 +82 674 +82 705 +82 840 +82 865 +82 960 +83 105 +83 134 +83 144 +83 161 +83 164 +83 258 +83 512 +83 869 +84 104 +84 120 +84 128 +84 130 +84 137 +84 138 +84 140 +84 142 +84 154 +84 176 +84 256 +84 260 +84 277 +84 281 +84 288 +84 314 +84 321 +84 325 +84 326 +84 344 +84 369 +84 400 +84 401 +84 512 +84 513 +84 516 +84 520 +84 526 +84 528 +84 532 +84 536 +84 547 +84 548 +84 554 +84 576 +84 608 +84 650 +84 772 +84 774 +84 797 +84 832 +84 864 +85 106 +85 128 +85 146 +85 164 +85 257 +85 289 +85 297 +85 393 +85 514 +85 544 +85 576 +85 600 +85 613 +85 737 +85 769 +85 801 +85 946 +86 88 +86 96 +86 128 +86 192 +86 256 +86 259 +86 288 +86 293 +86 322 +86 336 +86 517 +86 547 +86 580 +86 600 +86 640 +86 848 +87 135 +87 216 +87 516 +87 576 +88 100 +88 128 +88 146 +88 168 +88 257 +88 258 +88 259 +88 260 +88 274 +88 278 +88 289 +88 310 +88 338 +88 355 +88 388 +88 512 +88 514 +88 519 +88 520 +88 546 +88 796 +88 896 +89 133 +89 144 +89 192 +89 194 +89 261 +89 271 +89 418 +89 516 +89 576 +89 772 +89 914 +90 129 +90 152 +90 192 +90 321 +90 352 +90 524 +90 530 +90 662 +90 825 +90 905 +91 128 +91 228 +91 257 +91 512 +91 582 +91 904 +91 992 +92 168 +92 208 +92 260 +92 271 +92 292 +92 384 +92 388 +92 416 +92 512 +92 544 +93 288 +93 512 +93 594 +94 208 +94 768 +94 785 +94 930 +95 809 +96 97 +96 100 +96 108 +96 113 +96 128 +96 129 +96 130 +96 132 +96 136 +96 140 +96 141 +96 144 +96 148 +96 160 +96 161 +96 162 +96 168 +96 200 +96 216 +96 220 +96 224 +96 232 +96 256 +96 257 +96 258 +96 260 +96 265 +96 267 +96 270 +96 272 +96 276 +96 288 +96 289 +96 294 +96 308 +96 324 +96 325 +96 328 +96 329 +96 337 +96 384 +96 392 +96 401 +96 402 +96 512 +96 513 +96 514 +96 516 +96 518 +96 522 +96 524 +96 532 +96 544 +96 547 +96 548 +96 553 +96 556 +96 560 +96 563 +96 568 +96 576 +96 577 +96 584 +96 592 +96 609 +96 617 +96 640 +96 641 +96 645 +96 716 +96 768 +96 774 +96 788 +96 798 +96 800 +96 856 +96 896 +96 902 +97 101 +97 114 +97 128 +97 130 +97 132 +97 137 +97 141 +97 144 +97 196 +97 213 +97 256 +97 265 +97 272 +97 304 +97 336 +97 384 +97 392 +97 402 +97 424 +97 450 +97 456 +97 512 +97 523 +97 560 +97 576 +97 592 +97 645 +97 771 +97 840 +97 902 +98 128 +98 139 +98 140 +98 144 +98 150 +98 164 +98 195 +98 256 +98 257 +98 258 +98 263 +98 264 +98 273 +98 276 +98 277 +98 288 +98 289 +98 293 +98 322 +98 385 +98 512 +98 516 +98 517 +98 519 +98 530 +98 581 +98 640 +98 705 +98 706 +98 722 +98 784 +98 832 +98 896 +98 901 +99 168 +99 245 +99 256 +99 264 +99 274 +99 304 +99 384 +99 517 +99 528 +99 534 +99 776 +100 128 +100 130 +100 148 +100 164 +100 169 +100 176 +100 177 +100 195 +100 202 +100 240 +100 256 +100 264 +100 270 +100 276 +100 286 +100 305 +100 320 +100 323 +100 328 +100 384 +100 390 +100 512 +100 513 +100 514 +100 515 +100 518 +100 528 +100 537 +100 544 +100 552 +100 564 +100 576 +100 584 +100 640 +100 646 +100 670 +100 672 +100 737 +100 788 +100 816 +100 920 +101 179 +101 182 +101 257 +101 268 +101 288 +101 448 +101 513 +101 535 +101 672 +102 132 +102 133 +102 136 +102 194 +102 256 +102 257 +102 269 +102 385 +102 512 +102 530 +102 537 +102 773 +103 131 +103 132 +103 256 +103 452 +104 113 +104 128 +104 132 +104 144 +104 145 +104 162 +104 176 +104 192 +104 196 +104 257 +104 259 +104 260 +104 262 +104 272 +104 273 +104 304 +104 320 +104 340 +104 400 +104 402 +104 403 +104 448 +104 453 +104 512 +104 513 +104 515 +104 516 +104 528 +104 537 +104 560 +104 576 +104 641 +104 705 +104 802 +104 812 +104 818 +104 848 +104 940 +105 141 +105 161 +105 169 +105 256 +105 264 +105 272 +105 283 +105 480 +105 512 +105 548 +105 608 +105 668 +105 672 +105 896 +106 128 +106 200 +106 256 +106 257 +106 260 +106 274 +106 288 +106 338 +106 385 +106 424 +106 448 +106 517 +106 523 +106 529 +106 626 +106 640 +106 841 +107 132 +107 144 +107 192 +107 240 +107 258 +107 417 +107 482 +107 524 +107 832 +108 128 +108 260 +108 265 +108 292 +108 344 +108 358 +108 384 +108 386 +108 513 +108 521 +108 560 +108 779 +108 864 +108 904 +109 128 +109 814 +110 217 +110 265 +111 146 +111 776 +112 128 +112 129 +112 133 +112 134 +112 144 +112 160 +112 163 +112 164 +112 192 +112 218 +112 222 +112 224 +112 256 +112 258 +112 260 +112 288 +112 320 +112 325 +112 326 +112 420 +112 458 +112 472 +112 512 +112 513 +112 514 +112 516 +112 520 +112 528 +112 614 +112 778 +112 936 +113 261 +113 392 +113 512 +113 520 +113 642 +113 680 +113 773 +114 128 +114 131 +114 220 +114 259 +114 261 +114 288 +114 393 +114 402 +114 456 +114 544 +114 546 +114 640 +115 138 +115 264 +115 564 +115 584 +115 624 +116 256 +116 258 +116 261 +116 276 +116 518 +116 552 +116 640 +116 778 +117 224 +117 312 +117 576 +117 740 +118 161 +118 262 +118 320 +120 128 +120 130 +120 256 +120 296 +120 327 +120 386 +120 416 +120 512 +120 526 +120 528 +120 531 +120 640 +120 768 +121 576 +121 658 +121 664 +122 292 +122 512 +124 164 +124 322 +124 388 +124 400 +124 514 +124 901 +125 257 +126 265 +126 336 +128 129 +128 130 +128 131 +128 132 +128 133 +128 136 +128 137 +128 138 +128 141 +128 145 +128 146 +128 148 +128 149 +128 150 +128 153 +128 154 +128 155 +128 156 +128 157 +128 160 +128 161 +128 162 +128 164 +128 168 +128 169 +128 172 +128 176 +128 178 +128 180 +128 192 +128 193 +128 195 +128 196 +128 202 +128 204 +128 208 +128 210 +128 217 +128 224 +128 227 +128 228 +128 231 +128 236 +128 240 +128 241 +128 256 +128 257 +128 258 +128 259 +128 260 +128 261 +128 262 +128 264 +128 266 +128 267 +128 270 +128 272 +128 274 +128 276 +128 277 +128 279 +128 280 +128 282 +128 288 +128 291 +128 292 +128 293 +128 294 +128 296 +128 297 +128 304 +128 306 +128 311 +128 314 +128 320 +128 321 +128 322 +128 323 +128 325 +128 326 +128 327 +128 328 +128 329 +128 333 +128 337 +128 340 +128 341 +128 352 +128 354 +128 384 +128 388 +128 393 +128 400 +128 401 +128 412 +128 433 +128 443 +128 460 +128 484 +128 493 +128 510 +128 512 +128 513 +128 514 +128 516 +128 518 +128 520 +128 521 +128 522 +128 523 +128 524 +128 525 +128 528 +128 531 +128 532 +128 533 +128 536 +128 537 +128 538 +128 544 +128 546 +128 548 +128 550 +128 552 +128 558 +128 560 +128 568 +128 573 +128 576 +128 577 +128 578 +128 579 +128 580 +128 582 +128 584 +128 592 +128 596 +128 601 +128 609 +128 617 +128 626 +128 640 +128 641 +128 643 +128 644 +128 645 +128 652 +128 672 +128 673 +128 683 +128 705 +128 707 +128 710 +128 722 +128 736 +128 768 +128 769 +128 772 +128 777 +128 780 +128 784 +128 786 +128 804 +128 806 +128 816 +128 832 +128 835 +128 836 +128 838 +128 860 +128 866 +128 896 +128 904 +128 905 +128 914 +128 920 +128 960 +129 130 +129 132 +129 134 +129 136 +129 144 +129 148 +129 149 +129 153 +129 156 +129 160 +129 161 +129 166 +129 176 +129 180 +129 192 +129 194 +129 196 +129 204 +129 214 +129 226 +129 256 +129 257 +129 258 +129 260 +129 264 +129 268 +129 272 +129 288 +129 290 +129 292 +129 293 +129 296 +129 300 +129 308 +129 320 +129 326 +129 328 +129 340 +129 352 +129 384 +129 386 +129 392 +129 394 +129 404 +129 408 +129 464 +129 512 +129 513 +129 514 +129 516 +129 518 +129 519 +129 520 +129 522 +129 529 +129 530 +129 536 +129 544 +129 554 +129 560 +129 566 +129 578 +129 579 +129 581 +129 600 +129 608 +129 610 +129 612 +129 616 +129 624 +129 630 +129 640 +129 651 +129 704 +129 706 +129 718 +129 732 +129 740 +129 768 +129 776 +129 786 +129 788 +129 800 +129 804 +129 832 +129 856 +130 131 +130 133 +130 141 +130 144 +130 160 +130 170 +130 180 +130 193 +130 194 +130 196 +130 226 +130 243 +130 256 +130 257 +130 259 +130 260 +130 261 +130 262 +130 264 +130 267 +130 268 +130 272 +130 273 +130 277 +130 280 +130 288 +130 290 +130 292 +130 293 +130 299 +130 304 +130 328 +130 348 +130 352 +130 384 +130 392 +130 425 +130 448 +130 452 +130 512 +130 513 +130 515 +130 516 +130 518 +130 520 +130 521 +130 528 +130 533 +130 540 +130 544 +130 545 +130 548 +130 552 +130 557 +130 576 +130 577 +130 584 +130 593 +130 594 +130 601 +130 608 +130 612 +130 613 +130 628 +130 675 +130 709 +130 720 +130 724 +130 768 +130 770 +130 801 +130 803 +130 832 +130 856 +130 897 +130 900 +130 901 +130 908 +130 912 +130 920 +130 940 +131 145 +131 146 +131 184 +131 208 +131 224 +131 256 +131 263 +131 276 +131 294 +131 331 +131 370 +131 388 +131 428 +131 449 +131 512 +131 517 +131 536 +131 574 +131 580 +131 640 +131 677 +131 720 +131 774 +131 832 +131 840 +132 136 +132 137 +132 139 +132 144 +132 160 +132 161 +132 172 +132 173 +132 192 +132 198 +132 224 +132 225 +132 228 +132 232 +132 235 +132 240 +132 256 +132 257 +132 258 +132 259 +132 264 +132 268 +132 272 +132 274 +132 276 +132 281 +132 288 +132 289 +132 293 +132 294 +132 305 +132 320 +132 324 +132 328 +132 341 +132 384 +132 389 +132 391 +132 393 +132 397 +132 400 +132 417 +132 422 +132 444 +132 500 +132 512 +132 513 +132 514 +132 516 +132 520 +132 524 +132 525 +132 529 +132 533 +132 547 +132 557 +132 561 +132 576 +132 579 +132 594 +132 620 +132 629 +132 643 +132 653 +132 680 +132 705 +132 706 +132 720 +132 770 +132 774 +132 776 +132 795 +132 834 +132 864 +132 904 +132 948 +133 166 +133 192 +133 193 +133 200 +133 232 +133 256 +133 258 +133 260 +133 268 +133 294 +133 300 +133 322 +133 430 +133 512 +133 523 +133 528 +133 545 +133 585 +133 640 +133 644 +133 656 +133 657 +133 674 +133 704 +133 705 +133 801 +133 816 +134 153 +134 161 +134 164 +134 176 +134 192 +134 195 +134 201 +134 256 +134 258 +134 259 +134 272 +134 273 +134 276 +134 310 +134 320 +134 325 +134 339 +134 384 +134 396 +134 440 +134 512 +134 514 +134 520 +134 524 +134 528 +134 536 +134 544 +134 546 +134 561 +134 576 +134 588 +134 616 +134 774 +134 818 +135 322 +135 640 +136 138 +136 145 +136 146 +136 152 +136 156 +136 160 +136 164 +136 168 +136 181 +136 192 +136 193 +136 208 +136 209 +136 212 +136 252 +136 256 +136 257 +136 258 +136 261 +136 262 +136 263 +136 264 +136 272 +136 280 +136 284 +136 288 +136 289 +136 292 +136 304 +136 305 +136 312 +136 320 +136 321 +136 323 +136 325 +136 329 +136 352 +136 369 +136 382 +136 384 +136 390 +136 399 +136 400 +136 404 +136 434 +136 458 +136 482 +136 513 +136 514 +136 516 +136 520 +136 526 +136 528 +136 533 +136 544 +136 552 +136 560 +136 578 +136 580 +136 585 +136 590 +136 592 +136 609 +136 612 +136 640 +136 648 +136 657 +136 768 +136 777 +136 778 +136 784 +136 805 +136 806 +136 816 +136 822 +136 832 +136 840 +136 844 +136 848 +136 900 +137 138 +137 141 +137 164 +137 193 +137 194 +137 208 +137 268 +137 288 +137 320 +137 328 +137 390 +137 418 +137 424 +137 493 +137 512 +137 513 +137 516 +137 520 +137 548 +137 576 +137 642 +137 712 +137 768 +137 776 +137 783 +137 800 +138 252 +138 274 +138 275 +138 305 +138 324 +138 358 +138 464 +138 480 +138 520 +138 524 +138 528 +138 549 +138 576 +138 642 +138 644 +138 704 +138 736 +138 768 +138 769 +138 770 +138 776 +138 794 +138 803 +138 816 +138 851 +138 984 +139 146 +139 162 +139 257 +139 261 +139 304 +139 314 +139 544 +139 575 +139 576 +139 592 +139 608 +139 706 +139 736 +140 144 +140 160 +140 174 +140 176 +140 180 +140 236 +140 256 +140 272 +140 293 +140 308 +140 320 +140 325 +140 393 +140 416 +140 457 +140 484 +140 490 +140 512 +140 523 +140 552 +140 562 +140 570 +140 577 +140 608 +140 787 +140 933 +140 981 +141 144 +141 169 +141 325 +141 513 +141 676 +141 866 +142 144 +142 256 +142 264 +142 273 +142 290 +142 514 +142 516 +142 528 +142 532 +142 616 +142 769 +142 774 +142 896 +143 256 +143 264 +144 145 +144 148 +144 150 +144 160 +144 162 +144 164 +144 170 +144 192 +144 193 +144 196 +144 201 +144 202 +144 204 +144 224 +144 246 +144 256 +144 258 +144 261 +144 262 +144 263 +144 266 +144 269 +144 270 +144 272 +144 273 +144 277 +144 280 +144 288 +144 290 +144 292 +144 296 +144 305 +144 306 +144 320 +144 323 +144 332 +144 336 +144 370 +144 386 +144 409 +144 420 +144 432 +144 448 +144 460 +144 472 +144 498 +144 512 +144 513 +144 514 +144 516 +144 518 +144 520 +144 521 +144 531 +144 538 +144 545 +144 546 +144 552 +144 576 +144 579 +144 581 +144 608 +144 618 +144 620 +144 624 +144 625 +144 640 +144 641 +144 642 +144 656 +144 666 +144 744 +144 769 +144 772 +144 795 +144 800 +144 802 +144 804 +144 824 +144 832 +144 833 +144 836 +144 856 +144 857 +144 865 +144 930 +145 160 +145 177 +145 196 +145 256 +145 257 +145 267 +145 272 +145 273 +145 288 +145 290 +145 305 +145 320 +145 336 +145 338 +145 385 +145 399 +145 454 +145 512 +145 514 +145 515 +145 522 +145 525 +145 528 +145 542 +145 569 +145 576 +145 577 +145 584 +145 650 +145 652 +145 672 +145 768 +145 800 +145 801 +145 905 +146 160 +146 176 +146 193 +146 200 +146 217 +146 226 +146 256 +146 257 +146 264 +146 269 +146 288 +146 384 +146 388 +146 412 +146 516 +146 517 +146 528 +146 544 +146 546 +146 585 +146 609 +146 660 +146 676 +146 716 +146 768 +146 770 +146 776 +146 785 +147 257 +147 310 +147 672 +147 768 +147 786 +148 248 +148 257 +148 264 +148 265 +148 272 +148 298 +148 320 +148 512 +148 513 +148 514 +148 515 +148 517 +148 522 +148 527 +148 528 +148 539 +148 544 +148 548 +148 553 +148 576 +148 577 +148 578 +148 641 +148 656 +148 727 +148 772 +148 776 +148 779 +148 786 +148 898 +148 960 +149 194 +149 257 +149 264 +149 390 +149 512 +149 520 +149 664 +149 706 +150 324 +150 448 +150 512 +150 544 +150 548 +150 656 +150 760 +150 784 +150 788 +151 257 +151 264 +152 153 +152 161 +152 162 +152 176 +152 184 +152 197 +152 198 +152 210 +152 256 +152 260 +152 264 +152 265 +152 290 +152 320 +152 328 +152 344 +152 387 +152 416 +152 516 +152 517 +152 532 +152 540 +152 544 +152 545 +152 560 +152 578 +152 588 +152 624 +152 642 +152 737 +152 776 +152 833 +153 256 +153 257 +153 266 +153 384 +153 514 +153 549 +153 809 +153 848 +154 256 +154 262 +154 272 +154 288 +154 544 +154 644 +154 832 +154 848 +155 305 +155 537 +155 842 +156 178 +156 256 +156 264 +156 512 +156 516 +156 577 +156 640 +156 673 +156 768 +156 835 +157 258 +157 354 +157 673 +159 547 +160 161 +160 164 +160 166 +160 176 +160 193 +160 195 +160 196 +160 208 +160 224 +160 256 +160 257 +160 258 +160 260 +160 264 +160 268 +160 272 +160 274 +160 290 +160 294 +160 300 +160 320 +160 326 +160 329 +160 346 +160 352 +160 353 +160 388 +160 389 +160 400 +160 408 +160 416 +160 482 +160 484 +160 507 +160 512 +160 514 +160 516 +160 517 +160 518 +160 520 +160 523 +160 528 +160 531 +160 536 +160 544 +160 560 +160 561 +160 568 +160 576 +160 577 +160 581 +160 588 +160 593 +160 624 +160 640 +160 642 +160 643 +160 644 +160 648 +160 704 +160 736 +160 768 +160 769 +160 772 +160 787 +160 803 +160 804 +160 841 +160 864 +160 866 +160 912 +160 914 +160 960 +160 974 +160 992 +161 164 +161 169 +161 171 +161 176 +161 193 +161 208 +161 221 +161 224 +161 256 +161 258 +161 272 +161 290 +161 292 +161 300 +161 322 +161 384 +161 454 +161 512 +161 515 +161 540 +161 549 +161 550 +161 560 +161 584 +161 616 +161 642 +161 676 +161 768 +161 770 +161 976 +162 166 +162 168 +162 172 +162 192 +162 204 +162 256 +162 257 +162 258 +162 259 +162 260 +162 272 +162 289 +162 300 +162 305 +162 308 +162 384 +162 400 +162 420 +162 424 +162 512 +162 513 +162 521 +162 523 +162 530 +162 544 +162 568 +162 570 +162 576 +162 596 +162 614 +162 649 +162 691 +162 768 +162 784 +163 192 +163 260 +163 340 +163 484 +163 560 +163 576 +163 648 +163 864 +163 920 +164 193 +164 256 +164 257 +164 264 +164 276 +164 278 +164 280 +164 288 +164 290 +164 351 +164 355 +164 400 +164 402 +164 424 +164 512 +164 514 +164 518 +164 520 +164 529 +164 576 +164 588 +164 640 +164 644 +164 666 +164 704 +164 805 +165 202 +165 276 +165 297 +165 320 +165 322 +165 513 +165 552 +165 584 +165 625 +165 742 +165 769 +165 792 +165 896 +166 244 +166 252 +166 281 +166 308 +166 320 +166 385 +166 512 +166 544 +166 556 +166 576 +166 649 +166 768 +166 772 +166 795 +167 520 +167 592 +167 961 +168 207 +168 208 +168 256 +168 257 +168 268 +168 273 +168 275 +168 321 +168 325 +168 422 +168 512 +168 514 +168 524 +168 536 +168 537 +168 544 +168 578 +168 585 +168 597 +168 648 +168 665 +168 674 +168 768 +168 770 +168 776 +168 893 +168 898 +168 960 +169 256 +169 281 +169 288 +169 400 +169 528 +169 536 +169 544 +169 560 +169 583 +169 816 +170 196 +170 256 +170 384 +170 388 +170 392 +170 406 +170 448 +170 512 +170 516 +170 562 +170 580 +170 784 +171 195 +171 512 +171 584 +171 590 +171 833 +172 286 +172 297 +172 418 +172 512 +172 528 +172 544 +172 648 +172 908 +173 320 +173 460 +173 518 +173 533 +173 578 +173 593 +173 594 +174 292 +174 386 +174 786 +174 840 +176 193 +176 194 +176 200 +176 256 +176 257 +176 258 +176 260 +176 261 +176 263 +176 264 +176 268 +176 322 +176 385 +176 466 +176 512 +176 513 +176 516 +176 520 +176 534 +176 545 +176 548 +176 576 +176 640 +176 665 +176 673 +176 684 +176 706 +176 776 +176 832 +176 866 +176 867 +176 910 +176 944 +177 256 +177 261 +177 288 +177 324 +177 334 +177 449 +177 520 +177 536 +177 608 +177 704 +177 806 +177 900 +177 901 +177 912 +178 256 +178 326 +178 384 +178 514 +178 524 +178 530 +178 544 +178 560 +178 800 +179 384 +180 192 +180 194 +180 264 +180 266 +180 512 +180 544 +180 642 +180 648 +181 196 +181 520 +181 704 +182 400 +182 592 +184 257 +184 265 +184 320 +184 329 +184 331 +184 513 +184 544 +184 896 +185 320 +186 256 +186 378 +186 388 +186 592 +187 276 +187 512 +188 276 +189 260 +190 529 +192 195 +192 198 +192 208 +192 228 +192 244 +192 256 +192 257 +192 258 +192 259 +192 260 +192 261 +192 263 +192 264 +192 265 +192 266 +192 269 +192 272 +192 276 +192 280 +192 282 +192 288 +192 290 +192 292 +192 295 +192 296 +192 298 +192 304 +192 305 +192 309 +192 320 +192 321 +192 329 +192 354 +192 376 +192 384 +192 400 +192 417 +192 448 +192 457 +192 462 +192 512 +192 513 +192 515 +192 520 +192 522 +192 524 +192 525 +192 528 +192 544 +192 560 +192 562 +192 564 +192 576 +192 578 +192 582 +192 584 +192 592 +192 600 +192 609 +192 620 +192 641 +192 644 +192 648 +192 672 +192 690 +192 705 +192 706 +192 768 +192 770 +192 771 +192 802 +192 805 +192 806 +192 820 +192 835 +192 852 +192 864 +192 928 +192 976 +193 256 +193 260 +193 264 +193 270 +193 272 +193 280 +193 291 +193 292 +193 304 +193 324 +193 334 +193 352 +193 392 +193 512 +193 514 +193 516 +193 520 +193 548 +193 555 +193 560 +193 561 +193 578 +193 600 +193 640 +193 649 +193 772 +193 778 +193 785 +193 840 +193 896 +194 256 +194 257 +194 259 +194 260 +194 308 +194 320 +194 321 +194 384 +194 386 +194 394 +194 440 +194 504 +194 520 +194 522 +194 533 +194 581 +194 588 +194 592 +194 640 +194 800 +194 810 +194 868 +195 261 +195 290 +195 384 +195 388 +195 412 +195 445 +195 593 +195 866 +195 1012 +196 256 +196 257 +196 260 +196 263 +196 264 +196 270 +196 272 +196 288 +196 289 +196 290 +196 364 +196 406 +196 424 +196 512 +196 514 +196 529 +196 545 +196 548 +196 552 +196 560 +196 576 +196 640 +196 774 +196 802 +196 896 +197 390 +197 453 +197 514 +197 640 +197 646 +197 648 +197 740 +198 289 +198 321 +198 329 +198 385 +198 506 +198 532 +198 553 +198 580 +198 640 +198 912 +199 277 +199 672 +199 784 +199 867 +200 201 +200 226 +200 260 +200 264 +200 266 +200 272 +200 320 +200 323 +200 336 +200 337 +200 416 +200 460 +200 516 +200 518 +200 521 +200 522 +200 528 +200 544 +200 546 +200 548 +200 560 +200 576 +200 584 +200 610 +200 640 +200 673 +200 708 +200 772 +200 786 +201 221 +201 300 +201 321 +201 371 +201 384 +201 512 +201 659 +201 912 +202 212 +202 260 +202 284 +202 336 +202 337 +202 393 +202 516 +202 528 +202 531 +202 576 +202 784 +203 736 +204 262 +204 289 +204 344 +204 384 +204 512 +204 524 +204 546 +204 576 +204 914 +205 704 +206 512 +206 520 +206 521 +206 864 +207 516 +207 588 +208 256 +208 258 +208 260 +208 261 +208 263 +208 265 +208 288 +208 305 +208 321 +208 438 +208 451 +208 512 +208 515 +208 530 +208 692 +208 769 +208 773 +208 776 +208 784 +208 788 +208 896 +208 960 +209 248 +209 260 +209 289 +209 400 +209 515 +209 517 +209 576 +209 642 +209 803 +210 289 +210 396 +210 516 +210 521 +210 784 +210 928 +211 264 +211 512 +211 773 +212 224 +212 264 +212 320 +212 345 +212 512 +212 520 +212 537 +212 560 +212 578 +212 741 +212 768 +212 769 +212 896 +213 270 +213 513 +213 516 +213 644 +213 774 +214 524 +216 256 +216 384 +216 513 +216 550 +216 572 +216 768 +216 929 +217 258 +217 296 +217 704 +218 329 +218 374 +218 513 +218 580 +220 256 +222 899 +224 257 +224 258 +224 259 +224 260 +224 282 +224 286 +224 304 +224 314 +224 322 +224 324 +224 359 +224 465 +224 512 +224 516 +224 517 +224 525 +224 529 +224 592 +224 608 +224 640 +224 658 +224 690 +224 708 +224 768 +224 802 +224 833 +225 264 +225 277 +225 321 +225 359 +225 392 +225 522 +225 524 +225 560 +225 641 +225 658 +225 772 +225 816 +225 928 +226 256 +226 260 +226 286 +226 385 +226 394 +226 544 +226 552 +226 688 +226 948 +227 512 +228 256 +228 274 +228 512 +228 544 +228 576 +228 580 +228 610 +229 232 +229 516 +229 542 +232 256 +232 289 +232 410 +232 537 +232 560 +232 648 +232 736 +232 768 +233 268 +233 578 +234 817 +235 545 +236 320 +236 523 +236 714 +238 260 +240 274 +240 321 +240 394 +240 518 +240 519 +240 550 +240 611 +240 914 +241 260 +241 530 +242 416 +242 516 +242 520 +243 520 +244 265 +244 430 +244 514 +244 617 +244 800 +244 912 +245 597 +248 264 +248 512 +248 516 +249 300 +253 772 +256 257 +256 258 +256 259 +256 260 +256 261 +256 262 +256 264 +256 265 +256 266 +256 268 +256 272 +256 273 +256 274 +256 276 +256 278 +256 280 +256 284 +256 288 +256 291 +256 292 +256 293 +256 297 +256 301 +256 304 +256 305 +256 309 +256 312 +256 320 +256 324 +256 325 +256 328 +256 332 +256 335 +256 336 +256 344 +256 352 +256 353 +256 358 +256 385 +256 386 +256 387 +256 388 +256 389 +256 390 +256 393 +256 400 +256 408 +256 416 +256 417 +256 420 +256 425 +256 432 +256 480 +256 482 +256 512 +256 513 +256 514 +256 515 +256 516 +256 517 +256 518 +256 520 +256 524 +256 528 +256 529 +256 531 +256 533 +256 538 +256 540 +256 544 +256 545 +256 546 +256 548 +256 552 +256 555 +256 556 +256 560 +256 561 +256 566 +256 569 +256 572 +256 576 +256 577 +256 581 +256 584 +256 585 +256 588 +256 590 +256 592 +256 594 +256 608 +256 609 +256 611 +256 613 +256 616 +256 617 +256 628 +256 633 +256 640 +256 642 +256 644 +256 645 +256 648 +256 652 +256 653 +256 656 +256 662 +256 664 +256 672 +256 673 +256 677 +256 688 +256 696 +256 704 +256 706 +256 722 +256 728 +256 736 +256 737 +256 768 +256 770 +256 772 +256 775 +256 776 +256 784 +256 800 +256 801 +256 802 +256 833 +256 834 +256 836 +256 844 +256 864 +256 896 +256 900 +256 912 +256 930 +256 933 +256 976 +257 258 +257 260 +257 262 +257 264 +257 265 +257 272 +257 276 +257 288 +257 289 +257 290 +257 292 +257 299 +257 316 +257 318 +257 324 +257 369 +257 384 +257 396 +257 404 +257 408 +257 418 +257 426 +257 480 +257 498 +257 501 +257 512 +257 513 +257 514 +257 516 +257 517 +257 520 +257 521 +257 524 +257 528 +257 531 +257 533 +257 537 +257 543 +257 544 +257 548 +257 554 +257 561 +257 576 +257 580 +257 584 +257 593 +257 594 +257 608 +257 609 +257 640 +257 644 +257 648 +257 653 +257 656 +257 672 +257 673 +257 681 +257 704 +257 736 +257 768 +257 772 +257 785 +257 792 +257 806 +257 840 +257 849 +257 856 +257 866 +257 884 +257 962 +257 1020 +258 272 +258 274 +258 277 +258 280 +258 284 +258 288 +258 304 +258 310 +258 322 +258 334 +258 336 +258 339 +258 344 +258 386 +258 389 +258 390 +258 392 +258 394 +258 417 +258 418 +258 420 +258 466 +258 484 +258 498 +258 512 +258 513 +258 516 +258 520 +258 521 +258 528 +258 531 +258 536 +258 544 +258 549 +258 550 +258 562 +258 576 +258 597 +258 640 +258 641 +258 642 +258 667 +258 668 +258 673 +258 677 +258 680 +258 704 +258 717 +258 740 +258 768 +258 770 +258 774 +258 776 +258 788 +258 817 +258 839 +258 872 +258 912 +258 944 +259 269 +259 273 +259 305 +259 316 +259 320 +259 332 +259 384 +259 520 +259 521 +259 549 +259 576 +259 577 +259 578 +259 585 +259 640 +259 642 +259 656 +259 768 +259 776 +259 778 +259 784 +260 261 +260 264 +260 266 +260 267 +260 268 +260 272 +260 276 +260 288 +260 289 +260 305 +260 320 +260 321 +260 325 +260 329 +260 336 +260 389 +260 392 +260 402 +260 408 +260 452 +260 481 +260 512 +260 513 +260 514 +260 518 +260 520 +260 521 +260 522 +260 524 +260 528 +260 530 +260 534 +260 536 +260 544 +260 547 +260 560 +260 573 +260 576 +260 584 +260 588 +260 592 +260 594 +260 626 +260 640 +260 641 +260 642 +260 643 +260 648 +260 653 +260 656 +260 678 +260 688 +260 689 +260 697 +260 736 +260 751 +260 772 +260 778 +260 784 +260 785 +260 786 +260 790 +260 882 +260 897 +260 936 +260 968 +261 262 +261 290 +261 292 +261 304 +261 324 +261 337 +261 363 +261 384 +261 385 +261 402 +261 512 +261 514 +261 521 +261 528 +261 529 +261 538 +261 546 +261 549 +261 562 +261 576 +261 579 +261 704 +261 846 +262 277 +262 288 +262 291 +262 292 +262 320 +262 384 +262 387 +262 451 +262 512 +262 520 +262 533 +262 545 +262 576 +262 608 +262 624 +262 640 +262 652 +262 656 +262 712 +262 773 +262 784 +262 832 +263 352 +263 512 +263 536 +263 544 +263 577 +263 768 +264 266 +264 268 +264 273 +264 288 +264 297 +264 304 +264 320 +264 332 +264 337 +264 342 +264 362 +264 384 +264 386 +264 400 +264 416 +264 418 +264 420 +264 450 +264 464 +264 469 +264 472 +264 498 +264 512 +264 513 +264 514 +264 516 +264 517 +264 520 +264 528 +264 532 +264 538 +264 540 +264 576 +264 577 +264 578 +264 579 +264 580 +264 593 +264 596 +264 600 +264 608 +264 616 +264 620 +264 632 +264 640 +264 642 +264 644 +264 659 +264 662 +264 679 +264 701 +264 706 +264 737 +264 738 +264 750 +264 768 +264 770 +264 772 +264 776 +264 849 +264 897 +264 944 +265 276 +265 288 +265 292 +265 320 +265 322 +265 326 +265 448 +265 512 +265 514 +265 516 +265 538 +265 546 +265 552 +265 569 +265 576 +265 579 +265 642 +265 896 +266 288 +266 296 +266 304 +266 320 +266 325 +266 344 +266 384 +266 454 +266 512 +266 517 +266 519 +266 525 +266 544 +266 545 +266 576 +266 587 +266 609 +266 636 +266 657 +266 672 +266 768 +266 770 +266 771 +266 772 +266 776 +266 832 +266 848 +266 921 +267 330 +267 400 +267 525 +268 272 +268 273 +268 289 +268 304 +268 320 +268 322 +268 328 +268 376 +268 392 +268 512 +268 520 +268 528 +268 545 +268 562 +268 570 +268 600 +268 613 +268 643 +268 644 +268 648 +268 669 +268 688 +268 808 +268 816 +269 358 +269 512 +269 520 +269 536 +269 576 +269 610 +269 641 +269 658 +270 324 +270 448 +270 516 +270 524 +270 532 +270 560 +270 614 +270 656 +270 811 +271 548 +272 276 +272 288 +272 289 +272 292 +272 296 +272 298 +272 300 +272 321 +272 328 +272 329 +272 338 +272 352 +272 356 +272 385 +272 394 +272 416 +272 425 +272 459 +272 512 +272 513 +272 516 +272 520 +272 522 +272 524 +272 526 +272 528 +272 544 +272 545 +272 552 +272 554 +272 561 +272 576 +272 579 +272 582 +272 583 +272 608 +272 609 +272 624 +272 640 +272 642 +272 643 +272 646 +272 649 +272 652 +272 664 +272 666 +272 676 +272 685 +272 704 +272 705 +272 716 +272 740 +272 768 +272 770 +272 898 +272 909 +273 324 +273 328 +273 384 +273 388 +273 396 +273 512 +273 514 +273 518 +273 538 +273 560 +273 569 +273 580 +273 582 +273 624 +273 629 +273 640 +273 674 +273 704 +273 800 +273 971 +274 277 +274 293 +274 384 +274 522 +274 529 +274 544 +274 550 +274 576 +274 579 +274 593 +274 614 +274 642 +274 676 +274 704 +274 803 +274 899 +275 304 +275 391 +275 514 +275 568 +275 600 +275 688 +275 961 +276 353 +276 512 +276 513 +276 520 +276 521 +276 528 +276 536 +276 540 +276 550 +276 552 +276 644 +276 648 +276 673 +276 720 +276 816 +276 936 +277 417 +277 522 +277 528 +277 587 +277 641 +277 648 +277 674 +277 812 +278 288 +278 308 +278 320 +278 336 +278 416 +278 588 +278 616 +278 656 +280 297 +280 314 +280 322 +280 354 +280 358 +280 391 +280 488 +280 512 +280 515 +280 516 +280 525 +280 532 +280 580 +280 582 +280 612 +280 617 +280 643 +280 650 +280 707 +280 768 +280 896 +280 897 +280 960 +281 292 +281 322 +281 324 +281 449 +281 552 +281 576 +281 592 +282 288 +282 290 +282 321 +282 344 +282 360 +282 516 +282 528 +282 545 +282 554 +282 616 +282 657 +283 692 +284 384 +284 456 +284 519 +284 526 +284 533 +286 528 +287 576 +288 289 +288 293 +288 296 +288 321 +288 336 +288 351 +288 384 +288 386 +288 388 +288 392 +288 404 +288 408 +288 448 +288 452 +288 456 +288 512 +288 514 +288 515 +288 516 +288 520 +288 521 +288 529 +288 530 +288 532 +288 536 +288 545 +288 552 +288 556 +288 562 +288 580 +288 584 +288 590 +288 609 +288 641 +288 642 +288 643 +288 644 +288 650 +288 657 +288 675 +288 680 +288 720 +288 721 +288 747 +288 768 +288 769 +288 773 +288 775 +288 782 +288 784 +288 800 +288 834 +288 851 +288 929 +289 300 +289 322 +289 353 +289 436 +289 460 +289 516 +289 520 +289 524 +289 528 +289 532 +289 556 +289 578 +289 642 +289 657 +289 672 +289 690 +289 704 +289 716 +289 836 +290 320 +290 345 +290 363 +290 512 +290 528 +290 548 +290 576 +290 584 +290 620 +290 640 +290 643 +290 649 +290 772 +290 840 +291 320 +291 386 +291 520 +291 581 +291 582 +291 628 +291 706 +291 770 +291 814 +291 857 +292 304 +292 329 +292 370 +292 396 +292 402 +292 428 +292 512 +292 513 +292 514 +292 552 +292 576 +292 645 +292 673 +292 690 +292 721 +292 774 +292 903 +292 909 +293 320 +293 386 +293 520 +293 537 +293 582 +293 585 +293 596 +293 626 +293 874 +293 976 +294 409 +294 917 +295 512 +295 554 +295 802 +296 320 +296 385 +296 386 +296 464 +296 515 +296 522 +296 525 +296 528 +296 529 +296 530 +296 549 +296 560 +296 624 +296 709 +296 738 +296 840 +296 873 +296 883 +296 896 +296 921 +296 960 +297 392 +297 512 +297 558 +297 586 +297 608 +297 672 +297 688 +297 840 +298 305 +298 369 +298 520 +298 544 +298 576 +298 704 +298 768 +298 772 +298 912 +299 512 +299 816 +300 332 +300 384 +300 648 +301 784 +302 384 +302 388 +302 474 +302 513 +302 843 +304 320 +304 352 +304 389 +304 448 +304 450 +304 512 +304 516 +304 520 +304 523 +304 542 +304 544 +304 546 +304 560 +304 576 +304 608 +304 618 +304 643 +304 645 +304 649 +304 656 +304 704 +304 768 +304 832 +305 330 +305 418 +305 428 +305 533 +305 576 +305 580 +305 704 +306 484 +306 515 +306 521 +306 528 +306 546 +306 577 +306 804 +307 396 +307 609 +308 544 +308 553 +308 576 +308 596 +308 646 +308 664 +308 788 +308 848 +308 874 +310 644 +310 770 +312 402 +312 555 +312 657 +312 705 +313 416 +313 642 +313 905 +316 516 +316 905 +317 404 +320 321 +320 339 +320 344 +320 384 +320 392 +320 394 +320 400 +320 402 +320 424 +320 480 +320 488 +320 512 +320 513 +320 514 +320 516 +320 520 +320 522 +320 524 +320 526 +320 531 +320 544 +320 546 +320 548 +320 550 +320 553 +320 577 +320 586 +320 590 +320 593 +320 596 +320 640 +320 642 +320 643 +320 644 +320 649 +320 656 +320 658 +320 705 +320 770 +320 784 +320 832 +320 896 +320 904 +320 1018 +321 325 +321 352 +321 384 +321 401 +321 514 +321 515 +321 520 +321 536 +321 553 +321 554 +321 568 +321 627 +321 647 +321 651 +321 682 +321 808 +321 902 +321 985 +322 384 +322 388 +322 512 +322 514 +322 524 +322 529 +322 758 +322 768 +322 776 +322 794 +323 328 +323 334 +323 512 +323 514 +323 544 +323 587 +323 644 +324 434 +324 512 +324 513 +324 518 +324 533 +324 536 +324 550 +324 560 +324 577 +324 580 +324 592 +324 612 +324 690 +324 770 +324 834 +324 896 +325 354 +325 389 +325 401 +325 512 +325 576 +325 600 +325 650 +325 656 +325 664 +325 672 +325 769 +325 817 +326 329 +326 520 +326 570 +326 585 +326 673 +326 804 +327 512 +327 561 +328 384 +328 416 +328 460 +328 512 +328 514 +328 515 +328 518 +328 520 +328 528 +328 532 +328 537 +328 544 +328 641 +328 656 +328 689 +328 768 +328 800 +328 801 +329 384 +329 414 +329 437 +329 521 +329 536 +329 584 +329 642 +329 657 +330 512 +330 520 +330 657 +330 708 +330 832 +330 833 +332 424 +332 512 +332 513 +332 544 +332 545 +332 548 +332 550 +332 576 +332 900 +332 962 +333 600 +334 706 +335 712 +336 380 +336 419 +336 448 +336 512 +336 514 +336 516 +336 522 +336 528 +336 529 +336 530 +336 538 +336 549 +336 554 +336 576 +336 580 +336 593 +336 611 +336 642 +336 649 +336 673 +337 536 +337 555 +337 563 +337 586 +337 724 +337 768 +338 418 +338 621 +338 644 +338 656 +338 775 +338 786 +339 609 +340 464 +340 576 +340 610 +340 640 +340 708 +340 768 +340 778 +341 528 +341 545 +342 640 +342 680 +344 384 +344 512 +344 513 +344 526 +344 528 +344 576 +344 592 +344 672 +344 936 +345 516 +346 385 +346 396 +346 562 +348 512 +348 570 +349 994 +352 513 +352 514 +352 519 +352 532 +352 538 +352 546 +352 562 +352 612 +352 660 +352 688 +352 722 +352 769 +352 852 +352 896 +352 904 +353 384 +353 513 +353 578 +353 771 +353 776 +353 792 +354 704 +354 772 +355 385 +355 525 +355 592 +355 640 +355 768 +356 496 +356 515 +356 520 +356 528 +356 627 +356 656 +356 768 +356 771 +357 512 +358 512 +360 512 +360 517 +360 531 +360 532 +360 544 +360 578 +360 580 +360 768 +361 548 +361 640 +362 576 +363 832 +364 416 +368 512 +368 514 +368 544 +368 552 +369 449 +369 452 +369 524 +369 656 +370 776 +371 610 +371 648 +372 650 +372 672 +373 600 +377 515 +384 385 +384 450 +384 460 +384 512 +384 513 +384 515 +384 516 +384 520 +384 522 +384 524 +384 528 +384 536 +384 544 +384 548 +384 553 +384 560 +384 565 +384 576 +384 577 +384 578 +384 579 +384 580 +384 584 +384 585 +384 626 +384 640 +384 641 +384 644 +384 647 +384 653 +384 658 +384 660 +384 674 +384 675 +384 720 +384 736 +384 768 +384 772 +384 786 +384 788 +384 800 +384 801 +384 802 +384 852 +384 896 +384 913 +384 942 +385 480 +385 512 +385 514 +385 528 +385 529 +385 549 +385 565 +385 576 +385 611 +385 625 +385 696 +385 799 +386 412 +386 420 +386 496 +386 512 +386 520 +386 528 +386 540 +386 544 +386 545 +386 551 +386 560 +386 569 +386 578 +386 580 +386 582 +386 590 +386 596 +386 597 +386 641 +386 768 +386 792 +386 898 +387 512 +387 584 +387 769 +387 1000 +388 416 +388 512 +388 516 +388 518 +388 528 +388 547 +388 576 +388 581 +388 614 +388 640 +388 736 +388 772 +388 778 +389 512 +389 516 +389 525 +389 528 +389 582 +389 595 +389 641 +390 393 +390 486 +390 512 +390 514 +390 544 +390 597 +390 673 +392 424 +392 494 +392 512 +392 514 +392 545 +392 562 +392 576 +392 584 +392 585 +392 680 +392 708 +392 832 +392 856 +392 916 +393 512 +393 514 +393 580 +393 672 +394 514 +394 581 +394 649 +395 481 +396 516 +396 577 +396 793 +398 512 +398 674 +398 705 +398 780 +398 832 +399 416 +400 513 +400 514 +400 515 +400 516 +400 520 +400 532 +400 537 +400 539 +400 541 +400 544 +400 547 +400 562 +400 578 +400 609 +400 644 +400 648 +400 680 +400 772 +400 773 +400 809 +400 884 +401 512 +401 519 +401 520 +401 628 +402 514 +402 527 +402 530 +402 768 +402 783 +403 416 +403 556 +403 609 +404 540 +404 608 +404 640 +404 648 +404 928 +405 769 +406 545 +408 512 +408 520 +408 528 +408 544 +408 562 +408 797 +409 512 +409 866 +410 772 +412 568 +414 648 +416 420 +416 512 +416 517 +416 526 +416 536 +416 544 +416 552 +416 576 +416 592 +416 593 +416 608 +416 642 +416 768 +416 832 +416 836 +416 926 +417 776 +417 896 +417 898 +418 590 +418 728 +419 596 +420 450 +420 512 +420 514 +420 521 +420 544 +420 586 +420 658 +421 528 +421 584 +421 592 +421 608 +421 776 +422 516 +422 549 +424 464 +424 514 +424 570 +424 674 +424 768 +424 771 +424 908 +425 560 +425 640 +425 786 +426 497 +426 524 +426 541 +426 576 +427 516 +427 584 +428 514 +428 528 +428 834 +432 450 +432 516 +432 522 +432 528 +432 559 +434 555 +436 532 +436 590 +437 768 +440 582 +448 512 +448 513 +448 514 +448 517 +448 520 +448 525 +448 531 +448 534 +448 544 +448 558 +448 562 +448 564 +448 577 +448 584 +448 673 +448 676 +448 705 +448 768 +448 822 +448 832 +448 909 +449 516 +449 519 +449 520 +449 525 +450 514 +450 528 +450 552 +450 576 +450 581 +450 673 +450 677 +450 714 +450 835 +452 512 +452 578 +452 582 +452 612 +452 640 +453 512 +453 523 +453 800 +453 880 +455 544 +456 482 +456 548 +456 768 +457 626 +458 513 +458 594 +458 800 +459 557 +460 512 +461 530 +462 520 +462 562 +464 512 +464 545 +464 770 +465 522 +465 672 +467 512 +467 960 +468 513 +468 521 +469 532 +472 513 +472 544 +480 512 +480 528 +480 545 +480 657 +481 512 +481 528 +481 544 +481 596 +483 768 +484 529 +484 533 +484 832 +487 582 +488 913 +489 544 +494 656 +496 525 +501 523 +512 513 +512 514 +512 515 +512 516 +512 517 +512 518 +512 520 +512 522 +512 523 +512 524 +512 525 +512 528 +512 529 +512 530 +512 532 +512 536 +512 538 +512 541 +512 544 +512 545 +512 546 +512 549 +512 551 +512 560 +512 561 +512 562 +512 568 +512 569 +512 570 +512 576 +512 594 +512 596 +512 597 +512 598 +512 616 +512 619 +512 634 +512 640 +512 642 +512 644 +512 645 +512 648 +512 659 +512 660 +512 682 +512 685 +512 705 +512 720 +512 724 +512 768 +512 769 +512 771 +512 772 +512 776 +512 785 +512 786 +512 800 +512 802 +512 804 +512 805 +512 810 +512 822 +512 825 +512 832 +512 833 +512 835 +512 850 +512 869 +512 896 +512 904 +512 914 +512 928 +512 932 +512 936 +512 1020 +513 514 +513 516 +513 518 +513 519 +513 520 +513 522 +513 526 +513 528 +513 529 +513 544 +513 546 +513 548 +513 549 +513 554 +513 576 +513 578 +513 580 +513 584 +513 592 +513 595 +513 608 +513 609 +513 620 +513 624 +513 634 +513 640 +513 641 +513 648 +513 649 +513 664 +513 672 +513 740 +513 769 +513 800 +513 808 +513 809 +513 820 +513 832 +513 834 +513 840 +513 870 +513 937 +513 951 +513 964 +513 976 +514 515 +514 516 +514 520 +514 524 +514 528 +514 533 +514 540 +514 544 +514 546 +514 548 +514 576 +514 577 +514 578 +514 592 +514 608 +514 609 +514 640 +514 642 +514 644 +514 681 +514 768 +514 770 +514 776 +514 785 +514 804 +514 832 +514 840 +514 848 +514 897 +514 904 +515 521 +515 528 +515 592 +515 674 +515 716 +515 736 +515 768 +515 773 +515 774 +515 856 +515 868 +515 998 +516 520 +516 522 +516 525 +516 526 +516 528 +516 536 +516 537 +516 544 +516 552 +516 568 +516 576 +516 578 +516 580 +516 584 +516 594 +516 600 +516 640 +516 641 +516 650 +516 672 +516 674 +516 678 +516 688 +516 696 +516 704 +516 736 +516 769 +516 770 +516 780 +516 785 +516 817 +516 841 +516 912 +516 944 +517 520 +517 522 +517 528 +517 534 +517 544 +517 552 +517 578 +517 640 +517 788 +517 801 +517 808 +517 832 +518 521 +518 528 +518 532 +518 540 +518 561 +518 562 +518 564 +518 576 +518 594 +518 610 +518 640 +518 648 +518 744 +518 768 +518 785 +518 808 +518 960 +519 577 +519 658 +519 770 +519 772 +520 528 +520 534 +520 536 +520 544 +520 564 +520 585 +520 624 +520 640 +520 644 +520 656 +520 704 +520 707 +520 722 +520 768 +520 781 +520 848 +520 856 +520 872 +520 896 +520 1011 +521 522 +521 546 +521 582 +521 592 +521 640 +521 642 +521 660 +521 820 +521 898 +521 929 +522 524 +522 528 +522 532 +522 544 +522 568 +522 577 +522 587 +522 592 +522 598 +522 642 +522 657 +522 708 +522 769 +522 801 +523 528 +523 592 +523 640 +524 528 +524 546 +524 560 +524 592 +524 643 +524 774 +524 794 +524 896 +525 536 +525 540 +525 544 +525 654 +525 728 +525 770 +525 816 +525 929 +526 544 +526 555 +526 640 +526 960 +528 540 +528 545 +528 546 +528 547 +528 548 +528 555 +528 556 +528 570 +528 576 +528 578 +528 584 +528 601 +528 608 +528 612 +528 640 +528 642 +528 656 +528 664 +528 672 +528 722 +528 769 +528 770 +528 781 +528 800 +528 810 +528 856 +528 896 +528 917 +529 536 +529 556 +529 644 +529 648 +529 768 +529 770 +529 776 +529 780 +530 552 +530 561 +530 608 +530 644 +530 649 +530 656 +530 672 +530 769 +530 770 +530 786 +530 833 +530 844 +531 544 +531 545 +531 595 +531 768 +531 944 +532 554 +532 576 +532 592 +532 600 +532 608 +532 640 +532 754 +532 769 +532 776 +532 808 +532 857 +532 897 +532 902 +532 904 +534 544 +534 548 +534 640 +534 689 +534 840 +534 898 +536 552 +536 596 +536 642 +536 672 +536 832 +536 848 +537 608 +537 772 +537 800 +537 996 +538 544 +538 546 +538 584 +538 641 +538 770 +539 544 +539 644 +539 925 +540 577 +540 773 +540 792 +540 842 +541 548 +543 554 +544 576 +544 580 +544 588 +544 601 +544 610 +544 640 +544 644 +544 646 +544 652 +544 738 +544 768 +544 772 +544 789 +544 810 +544 848 +544 993 +545 577 +545 650 +545 668 +545 681 +545 704 +545 770 +545 786 +546 613 +546 705 +546 928 +547 577 +547 640 +547 647 +547 676 +547 936 +548 552 +548 576 +548 770 +548 771 +548 792 +548 803 +549 576 +549 592 +549 805 +549 816 +549 850 +549 992 +549 1002 +552 578 +552 622 +552 641 +552 672 +552 674 +552 736 +552 769 +552 771 +552 816 +552 864 +553 576 +553 580 +553 794 +554 588 +554 832 +555 708 +556 576 +556 710 +556 896 +557 962 +560 576 +560 656 +560 675 +560 769 +560 771 +560 836 +561 643 +564 576 +564 673 +564 716 +566 776 +568 580 +568 640 +569 592 +571 646 +572 788 +573 778 +576 578 +576 584 +576 587 +576 588 +576 610 +576 640 +576 642 +576 649 +576 658 +576 696 +576 723 +576 737 +576 768 +576 770 +576 784 +576 803 +576 896 +576 897 +576 924 +576 962 +576 968 +577 643 +577 644 +577 656 +577 666 +577 683 +577 768 +577 774 +578 592 +578 641 +578 644 +578 650 +578 666 +578 768 +578 801 +578 916 +578 962 +579 612 +580 672 +580 773 +580 776 +580 800 +580 852 +581 706 +581 770 +581 792 +581 896 +582 640 +582 656 +584 613 +585 746 +585 768 +586 625 +586 640 +586 642 +586 800 +586 834 +587 640 +592 612 +592 644 +592 647 +592 720 +592 776 +592 804 +592 808 +592 864 +593 681 +593 768 +593 781 +594 640 +594 656 +595 774 +596 640 +596 650 +596 712 +597 739 +598 757 +598 896 +599 832 +600 900 +600 913 +601 677 +601 832 +602 705 +604 904 +608 640 +608 642 +608 704 +608 712 +608 784 +608 817 +608 898 +608 900 +609 691 +609 712 +609 772 +612 645 +612 784 +612 832 +614 784 +615 769 +616 704 +616 800 +616 854 +620 650 +620 784 +620 834 +621 704 +624 816 +624 928 +625 824 +628 704 +632 804 +633 978 +640 704 +640 705 +640 712 +640 768 +640 778 +640 780 +640 782 +640 788 +640 790 +640 802 +640 847 +640 896 +640 928 +640 968 +640 993 +641 644 +641 648 +641 658 +641 662 +641 708 +641 768 +641 784 +641 835 +641 896 +642 643 +642 649 +642 672 +642 768 +642 806 +644 768 +644 769 +644 840 +644 962 +644 984 +645 704 +646 713 +648 676 +648 784 +648 928 +649 826 +650 726 +650 784 +650 832 +651 772 +652 683 +652 768 +652 818 +652 946 +652 956 +652 962 +653 771 +656 657 +656 832 +656 864 +656 912 +658 770 +660 769 +660 772 +660 784 +661 776 +665 770 +667 672 +672 729 +672 768 +672 780 +672 896 +672 901 +673 706 +673 901 +674 912 +676 711 +677 796 +678 772 +680 768 +680 920 +681 740 +688 800 +688 833 +688 904 +694 782 +700 832 +701 768 +703 896 +704 768 +708 820 +710 832 +712 784 +712 800 +713 813 +714 832 +715 768 +716 835 +720 961 +722 786 +724 816 +736 744 +736 896 +737 960 +760 832 +768 776 +768 777 +768 779 +768 792 +769 776 +771 896 +772 795 +772 802 +772 896 +776 788 +776 850 +776 901 +776 929 +777 1014 +778 979 +782 896 +783 856 +785 792 +787 794 +788 803 +788 896 +795 836 +797 864 +803 906 +823 896 +832 851 +838 924 +840 900 +871 960 +912 944 +912 962 +912 965 diff --git a/libcusp/include/galois/graphs/DistributedLocalGraph.h b/libcusp/include/galois/graphs/DistributedLocalGraph.h index 0ff532a8f..8b22b9e07 100644 --- a/libcusp/include/galois/graphs/DistributedLocalGraph.h +++ b/libcusp/include/galois/graphs/DistributedLocalGraph.h @@ -588,13 +588,15 @@ class DistLocalGraph { * @param mflag access flag for edge data * @returns The edge data for the requested edge */ - inline EdgeTy& getEdgeData(GraphNode src, edge_iterator ni) { + inline typename std::enable_if::value, edge_iterator> + getEdgeData(GraphNode src, edge_iterator ni) { GraphNode dst = getEdgeDst(ni); auto& r = graph->getEdgeData(std::make_pair(src, dst)); return r; } - inline EdgeTy& getEdgeData(edge_iterator ni) { + inline typename std::enable_if::value, edge_iterator> + getEdgeData(edge_iterator ni) { auto& r = graph->getEdgeData(*ni); return r; } @@ -942,12 +944,6 @@ class DistLocalGraph { graph.setEdgeData(eh, data); } - template - typename std::enable_if::value, EdgeTy&>::type - getEdgeData(edge_iterator eh) { - return graph.getEdgeData(eh); - } - enum Task { ADD_VERTEX, ADD_VERTEX_TOPOLOGY_ONLY, diff --git a/libgalois/include/galois/runtime/GraphUpdateManager.h b/libgalois/include/galois/runtime/GraphUpdateManager.h index 0c3b73b72..9447ac0a9 100644 --- a/libgalois/include/galois/runtime/GraphUpdateManager.h +++ b/libgalois/include/galois/runtime/GraphUpdateManager.h @@ -9,10 +9,13 @@ using namespace agile::workflow1; -template +template class graphUpdateManager { public: - using T = galois::graphs::DistLocalGraph; + using T = galois::graphs::WMDGraph; graphUpdateManager() = default; graphUpdateManager( std::unique_ptr> parser, @@ -43,14 +46,28 @@ class graphUpdateManager { T* graph; std::unique_ptr> fileParser; - void processNodes(std::vector& nodes) { + template + typename std::enable_if::value, + void>::type + processNodes(std::vector& nodes) { for (auto& node : nodes) { graph->addVertex(node); } } + template + typename std::enable_if::value, + void>::type + processNodes(std::vector& nodes) { + for (auto& node : nodes) { + graph->addVertexTopologyOnly(node.id); + } + } + template - void processEdges(std::vector& edges) { + typename std::enable_if::value, + void>::type + processEdges(std::vector& edges) { for (auto& edge : edges) { std::vector dsts; dsts.push_back(edge.dst); @@ -62,20 +79,13 @@ class graphUpdateManager { } template - void processLine(const char* line, size_t len) { - galois::graphs::ParsedGraphStructure value = - fileParser->ParseLine(const_cast(line), len); - if (value.isNode) - graph->addVertex(value.node); - else { - for (auto& edge : value.edges) { - std::vector dsts; - dsts.push_back(edge.dst); - std::vector data; - data.push_back(edge); - std::vector dstData = fileParser->GetDstData(value.edges); - graph->addEdges(edge.src, dsts, data, dstData); - } + typename std::enable_if::value, + void>::type + processEdges(std::vector& edges) { + for (auto& edge : edges) { + std::vector dsts; + dsts.push_back(edge.dst); + graph->addEdgesTopologyOnly(edge.src, dsts); } } diff --git a/libwmd/include/galois/wmd/WMDGraph.h b/libwmd/include/galois/wmd/WMDGraph.h index 0d158559a..1e750d401 100644 --- a/libwmd/include/galois/wmd/WMDGraph.h +++ b/libwmd/include/galois/wmd/WMDGraph.h @@ -38,6 +38,20 @@ namespace galois { namespace graphs { +struct ELVertex { + std::uint64_t id; + constexpr operator std::uint64_t() { return id; } +}; + +struct ELEdge { + std::uint64_t src; + std::uint64_t dst; + constexpr operator std::uint64_t() { return src; } + bool operator<(const ELEdge& other) const { + return (src == other.src) ? (dst < other.dst) : (src < other.src); + } +}; + void inline increment_evilPhase() { ++galois::runtime::evilPhase; if (galois::runtime::evilPhase >= @@ -671,8 +685,6 @@ class WMDBufferedGraph : public BufferedGraph { // number of edges in the entire graph (not just locallly loaded portion) uint64_t globalEdgeSize = 0; - // number of nodes loaded into this graph - uint32_t numLocalNodes = 0; // number of edges loaded into this graph uint64_t numLocalEdges = 0; // offset of local to global node id @@ -685,7 +697,49 @@ class WMDBufferedGraph : public BufferedGraph { std::vector offsets; // offsets[numLocalNodes] point to end of edges std::vector edges; - void + template + typename std::enable_if::value>::type + exchangeLocalNodeSize(WMDOfflineGraph& srcGraph) { + auto& net = galois::runtime::getSystemNetworkInterface(); + globalNodeOffset.resize(numHosts); + localNodeSize.resize(numHosts); + numNodes = 0; + + // send vertex size to other hosts + for (uint32_t h = 0; h < numHosts; ++h) { + if (h == hostID) { + continue; + } + // serialize size_t + galois::runtime::SendBuffer sendBuffer; + galois::runtime::gSerialize(sendBuffer, numLocalNodes); + net.sendTagged(h, galois::runtime::evilPhase, std::move(sendBuffer)); + } + + for (uint32_t h = 0; h < numHosts - 1; h++) { + decltype(net.recieveTagged(galois::runtime::evilPhase)) p; + do { + p = net.recieveTagged(galois::runtime::evilPhase); + } while (!p); + // deserialize local_node_size + galois::runtime::gDeserialize(p->second, localNodeSize[p->first]); + } + + localNodeSize[hostID] = numLocalNodes; + numNodes = localNodeSize[hostID]; + // compute prefix sum to get offset + globalNodeOffset[0] = 0; + for (size_t h = 1; h < numHosts; h++) { + globalNodeOffset[h] = localNodeSize[h - 1] + globalNodeOffset[h - 1]; + } + srcGraph.setSize(globalNodeOffset[numHosts - 1] + + localNodeSize[numHosts - 1]); + + increment_evilPhase(); + } + + template + typename std::enable_if::value>::type exchangeLocalNodeSize(WMDOfflineGraph& srcGraph) { auto& net = galois::runtime::getSystemNetworkInterface(); globalNodeOffset.resize(numHosts); @@ -781,7 +835,8 @@ class WMDBufferedGraph : public BufferedGraph { * Exchanges vertex ids to form a global id to local id map before exchanging * edges so that using the map edges can be inserted into the edgelist */ - void + template + typename std::enable_if::value>::type gatherVerticesAndEdges(std::vector>& localEdges, std::vector& localNodes) { auto& net = galois::runtime::getSystemNetworkInterface(); @@ -932,6 +987,148 @@ class WMDBufferedGraph : public BufferedGraph { increment_evilPhase(); } + /** + * Exchanges vertex ids to form a global id to local id map before exchanging + * edges so that using the map edges can be inserted into the edgelist + */ + template + typename std::enable_if::value>::type + gatherVerticesAndEdges(std::vector>& localEdges, + std::vector&) { + auto& net = galois::runtime::getSystemNetworkInterface(); + uint32_t activeThreads = galois::getActiveThreads(); + + // create per thread map + std::vector> perThreadGIDtoLID( + activeThreads); + galois::on_each([&](unsigned tid, unsigned nthreads) { + uint32_t beginNode; + uint32_t endNode; + std::tie(beginNode, endNode) = + galois::block_range((uint32_t)0, globalSize, tid, nthreads); + uint32_t id = 0; + for (uint32_t i = beginNode; i < endNode; ++i) { + uint64_t src = i; + uint32_t host = virtualToPhyMapping[src % numVirtualHosts]; + if (host == hostID) { + perThreadGIDtoLID[tid].emplace(src, id); + id++; + } + } + }); + + // prefix sum to get offset + uint64_t offset = 0; + std::vector prefixSum(activeThreads, 0); + galois::do_all( + galois::iterate((size_t)0, (size_t)activeThreads), + [&](size_t h) { prefixSum[h] = perThreadGIDtoLID[h].size(); }); + for (uint32_t i = 0; i < activeThreads; i++) { + for (uint32_t j = 0; j < i; j++) { + offset += prefixSum[j]; + } + prefixSum[i] = offset; + } + using map = phmap::parallel_flat_hash_map_m; + // parallel insert + galois::do_all( + galois::iterate((size_t)0, (size_t)activeThreads), [&](size_t h) { + for (auto& kv : perThreadGIDtoLID[h]) { + GIDtoLID.lazy_emplace_l( + kv.first, [&](map::value_type&) {}, + [&](const map::constructor& ctor) { + ctor(std::pair(kv.first, kv.second + prefixSum[h])); + }); + LIDtoGID.lazy_emplace_l( + kv.second + prefixSum[h], [&](map::value_type&) {}, + [&](const map::constructor& ctor) { + ctor(std::pair(kv.second + prefixSum[h], kv.first)); + }); + } + }); + + std::vector>> edgesToSend( + numHosts, std::vector>()); + galois::PerThreadVector>> + threadEdgesToSend; + for (uint32_t i = 0; i < activeThreads; i++) { + threadEdgesToSend[i].resize(numHosts); + } + // send edge data to other hosts + // Prepare edgeList and Vertex ID list to send to other hosts + galois::on_each([&](unsigned tid, unsigned nthreads) { + uint64_t beginNode; + uint64_t endNode; + std::tie(beginNode, endNode) = + galois::block_range((uint64_t)0, localEdges.size(), tid, nthreads); + for (uint64_t i = beginNode; i < endNode; ++i) { + uint64_t src = localEdges[i][0].src; + int host = virtualToPhyMapping[src % numVirtualHosts]; + threadEdgesToSend.get()[host].emplace_back((localEdges[i])); + } + }); + localEdges.clear(); + for (uint32_t tid = 0; tid < activeThreads; tid++) { + for (uint32_t h = 0; h < numHosts; h++) { + edgesToSend[h].insert(edgesToSend[h].end(), + threadEdgesToSend[tid][h].begin(), + threadEdgesToSend[tid][h].end()); + } + } + threadEdgesToSend.clear_all_parallel(); + // Send Edgelist + for (uint32_t h = 0; h < numHosts; h++) { + if (h == hostID) + continue; + galois::runtime::SendBuffer sendBuffer; + galois::runtime::gSerialize(sendBuffer, edgesToSend[h]); + galois::gInfo("[", hostID, "] ", "send to ", h, + " edgesToSend size: ", edgesToSend[h].size()); + net.sendTagged(h, galois::runtime::evilPhase, std::move(sendBuffer)); + } + // Appending edges in each host that belong to self + localEdges.resize(GIDtoLID.size()); + // Receiving edges from other hosts and populating edgelist + for (uint32_t h = 0; h < (numHosts - 1); h++) { + decltype(net.recieveTagged(galois::runtime::evilPhase)) p; + do { + p = net.recieveTagged(galois::runtime::evilPhase); + } while (!p); + uint32_t sendingHost = p->first; + std::vector> edgeList; + galois::runtime::gDeserialize(p->second, edgeList); + galois::gInfo("[", hostID, "] recv from ", sendingHost, + " edgeList size: ", edgeList.size()); + galois::on_each([&](unsigned tid, unsigned nthreads) { + size_t beginNode; + size_t endNode; + std::tie(beginNode, endNode) = + galois::block_range((size_t)0, edgeList.size(), tid, nthreads); + for (size_t j = beginNode; j < endNode; j++) { + auto lid = GIDtoLID[edgeList[j][0].src]; + localEdges[lid].insert(std::end(localEdges[lid]), + std::begin(edgeList[j]), + std::end(edgeList[j])); + } + }); + edgeList.clear(); + } + galois::on_each([&](unsigned tid, unsigned nthreads) { + size_t beginNode; + size_t endNode; + std::tie(beginNode, endNode) = galois::block_range( + (size_t)0, edgesToSend[hostID].size(), tid, nthreads); + for (size_t j = beginNode; j < endNode; j++) { + auto lid = GIDtoLID[edgesToSend[hostID][j][0].src]; + localEdges[lid].insert(std::end(localEdges[lid]), + std::begin(edgesToSend[hostID][j]), + std::end(edgesToSend[hostID][j])); + } + }); + edgesToSend.clear(); + increment_evilPhase(); + } + /** * Flatten the 2D vector localEdges into a CSR edge list * Will compute edge size and build CSR edge offset mapping @@ -979,10 +1176,12 @@ class WMDBufferedGraph : public BufferedGraph { uint32_t scaleFactor; uint64_t numNodes; uint32_t numVirtualHosts; + uint32_t numLocalNodes; std::vector localNodeSize; // number of local nodes in each hosts std::vector globalNodeOffset; // each hosts' local ID offset wrt global ID std::vector virtualToPhyMapping; + void setSize(uint64_t size) { globalSize = size; } /** * Gets the number of global nodes in the graph * @returns the total number of nodes in the graph (not just local loaded @@ -1037,9 +1236,10 @@ class WMDBufferedGraph : public BufferedGraph { } // build local buffered graph - exchangeLocalNodeSize(srcGraph); galois::gDebug("[", hostID, "] gatherVerticesAndEdges!"); gatherVerticesAndEdges(srcGraph.localEdges, srcGraph.localNodes); + numLocalNodes = GIDtoLID.size(); + exchangeLocalNodeSize(srcGraph); galois::gDebug("[", hostID, "] ", "flattenEdges!"); flattenEdges(srcGraph.localEdges); @@ -1072,11 +1272,7 @@ class WMDBufferedGraph : public BufferedGraph { void gatherNodes(WMDOfflineGraph& srcGraph, GraphTy& dstGraph, std::vector>& proxiesOnHosts, - uint64_t totalLocalNodes, std::unordered_map globalToLocalMap) { -#ifdef NDEBUG - (void)totalLocalNodes; -#endif auto& net = galois::runtime::getSystemNetworkInterface(); auto& localNodes = srcGraph.localNodes; @@ -1223,10 +1419,6 @@ class WMDBufferedGraph : public BufferedGraph { nodeRecv.clear(); IDofNodeRecv.clear(); } -#ifndef NDEBUG - // assert(addedData == totalLocalNodes); -#endif - increment_evilPhase(); // clean unused memory diff --git a/libwmd/include/galois/wmd/WMDPartitioner.h b/libwmd/include/galois/wmd/WMDPartitioner.h index e7914cc03..59c0b2448 100644 --- a/libwmd/include/galois/wmd/WMDPartitioner.h +++ b/libwmd/include/galois/wmd/WMDPartitioner.h @@ -45,8 +45,9 @@ namespace graphs { * @todo fully document and clean up code * @warning not meant for public use + not fully documented yet */ -template -class WMDGraph : public DistLocalGraph { +template +class WMDGraph : public DistLocalGraph { //! size used to buffer edge sends during partitioning constexpr static unsigned edgePartitionSendBufSize = 8388608; @@ -80,7 +81,7 @@ class WMDGraph : public DistLocalGraph { std::vector> mirrorEdges; std::unordered_map localEdgeGIDToLID; - template + template friend class WMDGraph; virtual unsigned getHostIDImpl(uint64_t gid) const { @@ -100,7 +101,7 @@ class WMDGraph : public DistLocalGraph { public: //! typedef for base DistGraph class - using base_DistGraph = DistLocalGraph; + using base_DistGraph = DistLocalGraph; /** * Returns edges owned by this graph (i.e. read). @@ -137,7 +138,7 @@ class WMDGraph : public DistLocalGraph { std::vector>>& parsers, unsigned host, unsigned _numHosts, bool setupGluon = true, - bool doSort = false, + bool doSort = false, uint64_t numVertices = 0, galois::graphs::MASTERS_DISTRIBUTION md = BALANCED_EDGES_OF_MASTERS) : base_DistGraph(host, _numHosts) { galois::gInfo("[", base_DistGraph::id, "] Start DistGraph construction."); @@ -175,6 +176,10 @@ class WMDGraph : public DistLocalGraph { // never read edge data from disk galois::graphs::WMDBufferedGraph bufGraph; + if constexpr (std::is_same::value) { + assert(numVertices != 0); + bufGraph.setSize(numVertices); + } bufGraph.loadPartialGraph(g, base_DistGraph::numGlobalEdges); edgesExchangeTimer.stop(); @@ -184,7 +189,9 @@ class WMDGraph : public DistLocalGraph { galois::gInfo("[", base_DistGraph::id, "] Starting edge inspection."); galois::StatTimer inspectionTimer("EdgeInspection", GRNAME); inspectionTimer.start(); - base_DistGraph::numGlobalNodes = g.size(); + base_DistGraph::numGlobalNodes = + bufGraph.globalNodeOffset[base_DistGraph::numHosts - 1] + + bufGraph.localNodeSize[base_DistGraph::numHosts - 1]; base_DistGraph::numGlobalEdges = g.sizeEdges(); // galois::gstl::Vector prefixSumOfEdges; @@ -248,20 +255,16 @@ class WMDGraph : public DistLocalGraph { for (auto dst : edgeDst) { dstData.emplace_back(base_DistGraph::globalToLocalMap[dst]); } - std::vector edgeData(bufGraph.edgeNum(globalID)); - edgeData = bufGraph.edgeLocalData(globalID); - base_DistGraph::graph->addEdges( - (globalID - bufGraph.globalNodeOffset[base_DistGraph::id]), - dstData, edgeData); + addEdgesHelper( + globalID - bufGraph.globalNodeOffset[base_DistGraph::id], + dstData); }, galois::steal()); // move node data (include mirror nodes) from other hosts to graph in this // host galois::gDebug("[", base_DistGraph::id, "] add nodes data into graph."); - bufGraph.gatherNodes(g, base_DistGraph::graph, proxiesOnOtherHosts, - base_DistGraph::numNodes, - base_DistGraph::globalToLocalMap); + gatherNodes(bufGraph, g, proxiesOnOtherHosts); galois::gDebug("[", base_DistGraph::id, "] LS_CSR construction done."); galois::gInfo("[", base_DistGraph::id, @@ -617,6 +620,36 @@ class WMDGraph : public DistLocalGraph { private: WMDGraph(unsigned host, unsigned _numHosts) : base_DistGraph(host, _numHosts) {} + + template + typename std::enable_if::value>::type + addEdgesHelper(uint64_t src, std::vector& dstData) { + base_DistGraph::graph->addEdgesTopologyOnly(src, dstData); + } + + template + typename std::enable_if::value>::type + addEdgesHelper(uint64_t src, std::vector& dstData) { + std::vector edgeData(dstData.size()); + base_DistGraph::graph->addEdges(src, dstData, edgeData); + } + + template + typename std::enable_if::value, + void>::type + gatherNodes(galois::graphs::WMDBufferedGraph& bufGraph, + galois::graphs::WMDOfflineGraph& g, + std::vector> proxiesOnOtherHosts) { + bufGraph.gatherNodes(g, base_DistGraph::graph, proxiesOnOtherHosts, + base_DistGraph::globalToLocalMap); + } + + template + typename std::enable_if::value, + void>::type + gatherNodes(galois::graphs::WMDBufferedGraph&, + galois::graphs::WMDOfflineGraph&, + std::vector>) {} std::vector> edgeInspectionRound1( galois::graphs::WMDBufferedGraph& bufGraph) { @@ -883,9 +916,10 @@ class WMDGraph : public DistLocalGraph { }; // make GRNAME visible to public -template +template constexpr const char* const - galois::graphs::WMDGraph::GRNAME; + galois::graphs::WMDGraph::GRNAME; } // end namespace graphs } // end namespace galois diff --git a/libwmd/include/galois/wmd/schema.h b/libwmd/include/galois/wmd/schema.h index 166cc47ec..bdc009226 100644 --- a/libwmd/include/galois/wmd/schema.h +++ b/libwmd/include/galois/wmd/schema.h @@ -185,6 +185,62 @@ class WMDParser : public FileParser { std::vector files_; }; +template +class ELParser : public FileParser { +public: + ELParser(std::vector files) : csvFields_(2), files_(files) {} + ELParser(uint64_t csvFields, std::vector files) + : csvFields_(csvFields), files_(files) {} + virtual ~ELParser() override {} + + virtual const std::vector& GetFiles() override { return files_; } + virtual ParsedGraphStructure ParseLine(char* line, + uint64_t) override { + std::uint64_t src; + std::uint64_t dst; + line = elGetOne(line, src); + line = elGetOne(line, dst); + std::vector edges; + E edge = {src, dst}; + edges.emplace_back(edge); + return ParsedGraphStructure(edges); + } + + char* elGetOne(char* line, std::uint64_t& val) { + bool found = false; + val = 0; + char c; + while ((c = *line++) != '\0' && isspace(c)) { + } + do { + if (isdigit(c)) { + found = true; + val *= 10; + val += (c - '0'); + } else if (c == '_') { + continue; + } else { + break; + } + } while ((c = *line++) != '\0' && !isspace(c)); + if (!found) + val = UINT64_MAX; + return line; + } + + std::vector GetDstData(std::vector& edges) override { + std::vector dstData; + for (auto& edge : edges) { + dstData.emplace_back(V{edge.dst}); + } + return dstData; + } + +private: + uint64_t csvFields_; + std::vector files_; +}; + } // namespace graphs } // namespace galois diff --git a/libwmd/test/CMakeLists.txt b/libwmd/test/CMakeLists.txt index 044e4f174..c755f43aa 100644 --- a/libwmd/test/CMakeLists.txt +++ b/libwmd/test/CMakeLists.txt @@ -10,3 +10,5 @@ function(add_test_unit name) endfunction() add_test_unit(wmd-graph-build) +set(test_options "${Galois_SOURCE_DIR}/inputs/rmat10.el" "--numVertices" "987") +add_test_unit(el-graph-build ${test_options}) diff --git a/libwmd/test/el-graph-build.cpp b/libwmd/test/el-graph-build.cpp new file mode 100644 index 000000000..179de25a7 --- /dev/null +++ b/libwmd/test/el-graph-build.cpp @@ -0,0 +1,182 @@ +/* + * Run this script in Debug view and compare its result to result of + * MiningPartitioner.h + * + * A testing result sheet could be found at + * https://docs.google.com/spreadsheets/u/1/d/1D0dAab29uazRKVroBZdEvAsEUT92aNHsiIYuHK6dlDA + * + * TODO: include a script to gen dataset and compare result + * + */ +#include "galois/wmd/WMDPartitioner.h" +#include "galois/shad/DataTypes.h" +#include "galois/wmd/graphTypes.h" + +#include "galois/DistGalois.h" +#include "galois/graphs/GenericPartitioners.h" + +#include +#include +#include +#include + +struct NodeData { + uint32_t dist_current; +}; + +typedef galois::graphs::WMDGraph< + galois::graphs::ELVertex, galois::graphs::ELEdge, NodeData, void, OECPolicy> + Graph; + +const char* elGetOne(const char* line, std::uint64_t& val) { + bool found = false; + val = 0; + char c; + while ((c = *line++) != '\0' && isspace(c)) { + } + do { + if (isdigit(c)) { + found = true; + val *= 10; + val += (c - '0'); + } else if (c == '_') { + continue; + } else { + break; + } + } while ((c = *line++) != '\0' && !isspace(c)); + if (!found) + val = UINT64_MAX; + return line; +} + +void parser( + const char* line, + std::unordered_map>& vertices) { + uint64_t src, dst; + line = elGetOne(line, src); + line = elGetOne(line, dst); + if (vertices.find(src) == vertices.end()) { + std::vector edges; + vertices.insert(std::make_pair(src, std::vector{dst})); + } else { + vertices[src].push_back(dst); + } +} + +void getELDataFromGraph( + std::string& filename, + std::unordered_map>& vertices) { + // read file line by line + std::string line; + std::ifstream myfile(filename); + if (myfile.is_open()) { + std::string line; + while (getline(myfile, line)) { + parser(line.c_str(), vertices); + } + myfile.close(); + } else { + std::cout << "Unable to open file"; + } +} + +int main(int argc, char* argv[]) { + galois::DistMemSys G; // init galois memory + auto& net = galois::runtime::getSystemNetworkInterface(); + + if (argc == 5) + galois::setActiveThreads(atoi(argv[4])); + + if (std::strcmp(argv[2], "--numVertices") != 0) { + std::cerr << "Usage: " << argv[2] << " --numVertices " << std::endl; + return 1; + } + + uint64_t numVertices = std::stoull(argv[3]); + + if (net.ID == 0) { + galois::gPrint("Testing building WMD graph from file.\n"); + galois::gPrint("Num Hosts: ", net.Num, + ", Active Threads Per Hosts: ", galois::getActiveThreads(), + "\n"); + } + + std::string dataFile = argv[1]; + std::string file = dataFile; + std::vector filenames; + filenames.emplace_back(dataFile); + std::unordered_map> vertices; + getELDataFromGraph(file, vertices); + + std::vector>> + parsers; + parsers.emplace_back( + std::make_unique>( + filenames)); + Graph* graph = new Graph(parsers, net.ID, net.Num, true, false, numVertices, + galois::graphs::BALANCED_EDGES_OF_MASTERS); + assert(graph != nullptr); + + // generate a file with sorted token of all nodes and its outgoing edge dst + // compare it with other implementation to verify the correctness + std::vector>> tokenAndEdges; + tokenAndEdges.resize(graph->numMasters()); + galois::do_all( + galois::iterate(graph->masterNodesRange()), + [&](size_t lid) { + auto token = graph->getGID(lid); + std::vector edgeDst; + auto end = graph->edge_end(lid); + auto itr = graph->edge_begin(lid); + for (; itr != end; itr++) { + edgeDst.push_back(graph->getGID(graph->getEdgeDst(itr))); + } + std::vector edgeDstDbg; + for (auto& e : graph->edges(lid)) { + edgeDstDbg.push_back(graph->getGID(graph->getEdgeDst(e))); + } + assert(edgeDst == edgeDstDbg); + std::sort(edgeDst.begin(), edgeDst.end()); + tokenAndEdges[lid] = std::make_pair(token, std::move(edgeDst)); + }, + galois::steal()); + + // gather node info from other hosts + if (net.ID != 0) { // send token and degree pairs to host 0 + galois::runtime::SendBuffer sendBuffer; + galois::runtime::gSerialize(sendBuffer, tokenAndEdges); + net.sendTagged(0, galois::runtime::evilPhase, std::move(sendBuffer)); + } else { // recv node range from other hosts + for (size_t i = 0; i < net.Num - 1; i++) { + decltype(net.recieveTagged(galois::runtime::evilPhase)) p; + do { + p = net.recieveTagged(galois::runtime::evilPhase); + } while (!p); + std::vector>> + incomingtokenAndEdges; + galois::runtime::gDeserialize(p->second, incomingtokenAndEdges); + // combine data + std::move(incomingtokenAndEdges.begin(), incomingtokenAndEdges.end(), + std::back_inserter(tokenAndEdges)); + } + } + // sort the node info by token order + // serilize it to file + if (net.ID == 0) { + // compare with vertices + for (size_t i = 0; i < tokenAndEdges.size(); i++) { + auto& tokenAndEdge = tokenAndEdges[i]; + auto& vertex = vertices[tokenAndEdge.first]; + assert(vertices.find(tokenAndEdge.first) != vertices.end()); + assert(vertex.size() == tokenAndEdge.second.size()); + std::sort(vertex.begin(), vertex.end()); + for (size_t j = 0; j < vertex.size(); j++) { + assert(vertex[j] == tokenAndEdge.second[j]); + } + } + } + return 0; +} diff --git a/libwmd/test/wmd-graph-build.cpp b/libwmd/test/wmd-graph-build.cpp index 9705092dc..dacbb1ae5 100644 --- a/libwmd/test/wmd-graph-build.cpp +++ b/libwmd/test/wmd-graph-build.cpp @@ -27,7 +27,7 @@ namespace po = boost::program_options; using namespace agile::workflow1; -typedef galois::graphs::WMDGraph Graph; +typedef galois::graphs::WMDGraph Graph; void insertEdge( Edge edge,