Skip to content

Instantly share code, notes, and snippets.

@GilesBathgate
Created November 9, 2020 17:47
Show Gist options
  • Save GilesBathgate/94a153553019c04b6090352f232c5a5b to your computer and use it in GitHub Desktop.
Save GilesBathgate/94a153553019c04b6090352f232c5a5b to your computer and use it in GitHub Desktop.
ID_support_handler performance benchmark
clang++ -lbenchmark ID_support_handler_benchmark.cpp -o baseline
python3 /usr/share/benchmark/compare.py benchmarks ./baseline ./contender --benchmark_repetitions=10
#include <benchmark/benchmark.h>
#include <CGAL/Nef_3/ID_support_handler.h>
#include <CGAL/Nef_3/SNC_indexed_items.h>
// A bit unconventional ;)
static int data[][2]
#include "sample.data"
;
namespace CGAL {
//Just some mocks
struct Decorator
{
typedef struct Halffacet {
bool is_twin() { return true; }
struct Halffacet* twin(){ return nullptr; }
int plane() { return 1; }
} Halffacet,*Halffacet_const_handle;
typedef struct {
int point(){ return 1; }
void set_index() {}
void set_index(int) {}
int get_index(){ return 1; }
} SVertex, *SVertex_handle,*SVertex_const_handle;
typedef struct {
Halffacet_const_handle get_index_facet() { return nullptr; }
} SHalfedge,*SHalfedge_handle,*SHalfedge_const_handle;
typedef struct {} SHalfloop,*SHalfloop_const_handle;
};
typedef Decorator::SVertex_handle SVertex_handle;
typedef Decorator::Halffacet_const_handle Halffacet_const_handle;
}
void initialisation_test(benchmark::State& state)
{
for (auto _ : state) {
//Initialisation is where the main overhead occours.
CGAL::ID_support_handler<CGAL::SNC_indexed_items,CGAL::Decorator> o;
CGAL::SVertex_handle sv=0;
auto f1=(CGAL::Halffacet_const_handle)(long)data[0][0];
auto f2=(CGAL::Halffacet_const_handle)(long)data[0][1];
o.hash_facet_pair(sv,f1,f2);
}
}
void hash_facet_pair_test(benchmark::State& state)
{
CGAL::ID_support_handler<CGAL::SNC_indexed_items,CGAL::Decorator> o;
CGAL::SVertex_handle sv=0;
for (auto _ : state) {
for(auto d: data)
{
auto f1=(CGAL::Halffacet_const_handle)(long)d[0];
auto f2=(CGAL::Halffacet_const_handle)(long)d[1];
o.hash_facet_pair(sv,f1,f2);
}
}
}
BENCHMARK(initialisation_test);
BENCHMARK(hash_facet_pair_test);
BENCHMARK_MAIN();
python3 /usr/share/benchmark/compare.py benchmarks ./baseline ./contender --benchmark_repetitions=10
RUNNING: ./baseline --benchmark_repetitions=10 --benchmark_out=/tmp/tmpaf4ll5zl
2020-11-09 13:30:14
Running ./baseline
Run on (8 X 4200 MHz CPU s)
CPU Caches:
L1 Data 32K (x4)
L1 Instruction 32K (x4)
L2 Unified 256K (x4)
L3 Unified 8192K (x1)
Load Average: 1.03, 1.01, 1.12
----------------------------------------------------------------------
Benchmark Time CPU Iterations
----------------------------------------------------------------------
initialisation_test 13670737 ns 13670546 ns 51
initialisation_test 13392296 ns 13376618 ns 51
initialisation_test 15824206 ns 15823694 ns 51
initialisation_test 11608582 ns 11607604 ns 51
initialisation_test 11857179 ns 11842009 ns 51
initialisation_test 12495380 ns 12495217 ns 51
initialisation_test 12553563 ns 12553352 ns 51
initialisation_test 12686818 ns 12686318 ns 51
initialisation_test 12583103 ns 12581365 ns 51
initialisation_test 12544319 ns 12541294 ns 51
initialisation_test_mean 12921618 ns 12917802 ns 10
initialisation_test_median 12568333 ns 12567359 ns 10
initialisation_test_stddev 1187624 ns 1188614 ns 10
hash_facet_pair_test 49388 ns 49386 ns 13537
hash_facet_pair_test 49291 ns 49284 ns 13537
hash_facet_pair_test 49244 ns 49242 ns 13537
hash_facet_pair_test 49875 ns 49863 ns 13537
hash_facet_pair_test 49861 ns 49856 ns 13537
hash_facet_pair_test 50541 ns 50536 ns 13537
hash_facet_pair_test 50038 ns 50025 ns 13537
hash_facet_pair_test 49034 ns 49029 ns 13537
hash_facet_pair_test 49732 ns 49723 ns 13537
hash_facet_pair_test 49937 ns 49933 ns 13537
hash_facet_pair_test_mean 49694 ns 49688 ns 10
hash_facet_pair_test_median 49797 ns 49789 ns 10
hash_facet_pair_test_stddev 454 ns 452 ns 10
RUNNING: ./contender --benchmark_repetitions=10 --benchmark_out=/tmp/tmpreybxnv7
2020-11-09 13:30:28
Running ./contender
Run on (8 X 4200 MHz CPU s)
CPU Caches:
L1 Data 32K (x4)
L1 Instruction 32K (x4)
L2 Unified 256K (x4)
L3 Unified 8192K (x1)
Load Average: 1.09, 1.03, 1.12
----------------------------------------------------------------------
Benchmark Time CPU Iterations
----------------------------------------------------------------------
initialisation_test 10402 ns 10402 ns 68457
initialisation_test 10366 ns 10366 ns 68457
initialisation_test 10335 ns 10335 ns 68457
initialisation_test 10240 ns 10240 ns 68457
initialisation_test 10288 ns 10288 ns 68457
initialisation_test 10292 ns 10292 ns 68457
initialisation_test 10092 ns 10092 ns 68457
initialisation_test 10130 ns 10129 ns 68457
initialisation_test 10130 ns 10130 ns 68457
initialisation_test 10158 ns 10158 ns 68457
initialisation_test_mean 10243 ns 10243 ns 10
initialisation_test_median 10264 ns 10264 ns 10
initialisation_test_stddev 110 ns 110 ns 10
hash_facet_pair_test 43705 ns 43704 ns 16002
hash_facet_pair_test 43492 ns 43491 ns 16002
hash_facet_pair_test 43517 ns 43515 ns 16002
hash_facet_pair_test 43141 ns 43140 ns 16002
hash_facet_pair_test 42271 ns 42270 ns 16002
hash_facet_pair_test 43083 ns 43083 ns 16002
hash_facet_pair_test 43357 ns 43357 ns 16002
hash_facet_pair_test 42778 ns 42778 ns 16002
hash_facet_pair_test 43407 ns 43406 ns 16002
hash_facet_pair_test 43006 ns 43005 ns 16002
hash_facet_pair_test_mean 43176 ns 43175 ns 10
hash_facet_pair_test_median 43249 ns 43249 ns 10
hash_facet_pair_test_stddev 421 ns 421 ns 10
Comparing ./baseline to ./contender
Benchmark Time CPU Time Old Time New CPU Old CPU New
--------------------------------------------------------------------------------------------------------------------------
initialisation_test -0.9992 -0.9992 13670737 10402 13670546 10402
initialisation_test -0.9992 -0.9992 13392296 10366 13376618 10366
initialisation_test -0.9993 -0.9993 15824206 10335 15823694 10335
initialisation_test -0.9991 -0.9991 11608582 10240 11607604 10240
initialisation_test -0.9991 -0.9991 11857179 10288 11842009 10288
initialisation_test -0.9992 -0.9992 12495380 10292 12495217 10292
initialisation_test -0.9992 -0.9992 12553563 10092 12553352 10092
initialisation_test -0.9992 -0.9992 12686818 10130 12686318 10129
initialisation_test -0.9992 -0.9992 12583103 10130 12581365 10130
initialisation_test -0.9992 -0.9992 12544319 10158 12541294 10158
initialisation_test_pvalue 0.0002 0.0002 U Test, Repetitions: 10 vs 10
initialisation_test_mean -0.9992 -0.9992 12921618 10243 12917802 10243
initialisation_test_median -0.9992 -0.9992 12568333 10264 12567359 10264
initialisation_test_stddev -0.9999 -0.9999 1187624 110 1188614 110
hash_facet_pair_test -0.1151 -0.1150 49388 43705 49386 43704
hash_facet_pair_test -0.1177 -0.1175 49291 43492 49284 43491
hash_facet_pair_test -0.1163 -0.1163 49244 43517 49242 43515
hash_facet_pair_test -0.1350 -0.1348 49875 43141 49863 43140
hash_facet_pair_test -0.1522 -0.1521 49861 42271 49856 42270
hash_facet_pair_test -0.1476 -0.1475 50541 43083 50536 43083
hash_facet_pair_test -0.1335 -0.1333 50038 43357 50025 43357
hash_facet_pair_test -0.1276 -0.1275 49034 42778 49029 42778
hash_facet_pair_test -0.1272 -0.1270 49732 43407 49723 43406
hash_facet_pair_test -0.1388 -0.1387 49937 43006 49933 43005
hash_facet_pair_test_pvalue 0.0002 0.0002 U Test, Repetitions: 10 vs 10
hash_facet_pair_test_mean -0.1312 -0.1311 49694 43176 49688 43175
hash_facet_pair_test_median -0.1315 -0.1314 49797 43249 49789 43249
hash_facet_pair_test_stddev -0.0711 -0.0687 454 421 452 421
{{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x254aad0,0x25c0bc0},{0x2cf1640,0x2c4f1d0},{0x2cd18c0,0x2671330},{0x2cd18c0,0x2671330},{0x2cf1640,0x2c4f1d0},{0x2cf1a80,0x2670ec0},{0x2cf1ef0,0x28771f0},{0x2cf1a80,0x2670ec0},{0x2cf1ef0,0x28771f0},{0x2cf2360,0x2d1b8d0},{0x2cd1cf0,0x2877610},{0x2cd1cf0,0x2877610},{0x2cf2360,0x2d1b8d0},{0x2cd2160,0x29bb4b0},{0x2cd2160,0x29bb4b0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2d0eb00,0x2766ba0},{0x2b72700,0x273d5c0},{0x2d0eb00,0x2766ba0},{0x2b72700,0x273d5c0},{0x2cd94e0,0x29c78a0},{0x2cd9090,0x28f7c00},{0x2cd94e0,0x29c78a0},{0x2cd9090,0x28f7c00},{0x2d0f3c0,0x2c4ed60},{0x2cf1a80,0x2670ec0},{0x2cf1a80,0x2670ec0},{0x2d0f3c0,0x2c4ed60},{0x2d0f6b0,0x2670a50},{0x2d159f0,0x2964900},{0x2d0f6b0,0x2670a50},{0x2d159f0,0x2964900},{0x2d15e60,0x2d1b010},{0x2cf1ef0,0x28771f0},{0x2cf1ef0,0x28771f0},{0x2d15e60,0x2d1b010},{0x2cf2360,0x2d1b8d0},{0x2cf2360,0x2d1b8d0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2d1cd90,0x28f7790},{0x2b72700,0x273d5c0},{0x2d1cd90,0x28f7790},{0x2b72700,0x273d5c0},{0x2d0ef50,0x29c7430},{0x2d0eb00,0x2766ba0},{0x2d0ef50,0x29c7430},{0x2d0eb00,0x2766ba0},{0x2d1d650,0x2c4e8f0},{0x2d0f6b0,0x2670a50},{0x2d0f6b0,0x2670a50},{0x2d1d650,0x2c4e8f0},{0x2d1dac0,0x28946f0},{0x2d2e940,0x2964490},{0x2d1dac0,0x28946f0},{0x2d2e940,0x2964490},{0x2d2ed90,0x2964040},{0x2d159f0,0x2964900},{0x2d159f0,0x2964900},{0x2d2ed90,0x2964040},{0x2d15e60,0x2d1b010},{0x2d15e60,0x2d1b010},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2d72d10,0x2adabe0},{0x2b72700,0x273d5c0},{0x2d72d10,0x2adabe0},{0x2b72700,0x273d5c0},{0x2d1d1e0,0x29c6fc0},{0x2d1cd90,0x28f7790},{0x2d1d1e0,0x29c6fc0},{0x2d1cd90,0x28f7790},{0x2d735d0,0x2c43a60},{0x2d1dac0,0x28946f0},{0x2d1dac0,0x28946f0},{0x2d735d0,0x2c43a60},{0x2d73a40,0x2894280},{0x2d4b1d0,0x2878d30},{0x2d73a40,0x2894280},{0x2d4b1d0,0x2878d30},{0x2d4b5c0,0x2a9e7e0},{0x2d2e940,0x2964490},{0x2d2e940,0x2964490},{0x2d4b5c0,0x2a9e7e0},{0x2d2ed90,0x2964040},{0x2d2ed90,0x2964040},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2d52550,0x2ada770},{0x2b72700,0x273d5c0},{0x2d52550,0x2ada770},{0x2b72700,0x273d5c0},{0x2d73160,0x29256d0},{0x2d72d10,0x2adabe0},{0x2d73160,0x29256d0},{0x2d72d10,0x2adabe0},{0x2d52e10,0x2c435f0},{0x2d73a40,0x2894280},{0x2d73a40,0x2894280},{0x2d52e10,0x2c435f0},{0x2d53280,0x2c43180},{0x2d536f0,0x2a08270},{0x2d53280,0x2c43180},{0x2d536f0,0x2a08270},{0x2d598f0,0x2a9e370},{0x2d4b1d0,0x2878d30},{0x2d4b1d0,0x2878d30},{0x2d598f0,0x2a9e370},{0x2d4b5c0,0x2a9e7e0},{0x2d4b5c0,0x2a9e7e0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2d5aa90,0x2ada320},{0x2b72700,0x273d5c0},{0x2d5aa90,0x2ada320},{0x2b72700,0x273d5c0},{0x2d529a0,0x2925260},{0x2d52550,0x2ada770},{0x2d529a0,0x2925260},{0x2d52550,0x2ada770},{0x2d6bcf0,0x25cf3d0},{0x2d53280,0x2c43180},{0x2d53280,0x2c43180},{0x2d6bcf0,0x25cf3d0},{0x2d6c160,0x281bba0},{0x2d6c5d0,0x273edf0},{0x2d6c160,0x281bba0},{0x2d6c5d0,0x273edf0},{0x2d6ca40,0x2d079a0},{0x2d536f0,0x2a08270},{0x2d536f0,0x2a08270},{0x2d6ca40,0x2d079a0},{0x2d598f0,0x2a9e370},{0x2d598f0,0x2a9e370},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b116b0,0x27c9c40},{0x2b72700,0x273d5c0},{0x2b116b0,0x27c9c40},{0x2b72700,0x273d5c0},{0x2d6b8a0,0x2924e10},{0x2d5aa90,0x2ada320},{0x2d6b8a0,0x2924e10},{0x2d5aa90,0x2ada320},{0x2d6c160,0x281bba0},{0x2d6c160,0x281bba0},{0x2d6c5d0,0x273edf0},{0x2d6c5d0,0x273edf0},{0x2d6ca40,0x2d079a0},{0x2d6ca40,0x2d079a0},{0x2b11b00,0x25cf840},{0x2b116b0,0x27c9c40},{0x2b11b00,0x25cf840},{0x2b116b0,0x27c9c40},{0x2b1f110,0x27d9cd0},{0x2b1f110,0x27d9cd0},{0x2b1f580,0x273e540},{0x2b1f580,0x273e540},{0x2b1f9f0,0x2d070c0},{0x2b1f9f0,0x2d070c0},{0x2b2e0a0,0x2d50ac0},{0x2b2dc50,0x29c4b30},{0x2b2e0a0,0x2d50ac0},{0x2b2dc50,0x29c4b30},{0x2b465d0,0x2b24e50},{0x2b1eca0,0x2c16100},{0x2b1eca0,0x2c16100},{0x2b465d0,0x2b24e50},{0x2b1f110,0x27d9cd0},{0x2b1f580,0x273e540},{0x2b1f110,0x27d9cd0},{0x2b1f580,0x273e540},{0x2b46a00,0x29c5e70},{0x2b1f9f0,0x2d070c0},{0x2b1f9f0,0x2d070c0},{0x2b46a00,0x29c5e70},{0x2b46e70,0x2a9fb40},{0x2b46e70,0x2a9fb40},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b2dc50,0x29c4b30},{0x2b72700,0x273d5c0},{0x2b2dc50,0x29c4b30},{0x2b72700,0x273d5c0},{0x2b8b240,0x2d50650},{0x2b8adf0,0x2a09a10},{0x2b8b240,0x2d50650},{0x2b8adf0,0x2a09a10},{0x2b8bb20,0x2b249e0},{0x2b2e510,0x2a77360},{0x2b2e510,0x2a77360},{0x2b8bb20,0x2b249e0},{0x2b465d0,0x2b24e50},{0x2b46a00,0x29c5e70},{0x2b465d0,0x2b24e50},{0x2b46a00,0x29c5e70},{0x2b5bf60,0x29c5a00},{0x2b46e70,0x2a9fb40},{0x2b46e70,0x2a9fb40},{0x2b5bf60,0x29c5a00},{0x2b5c3d0,0x2a9f6d0},{0x2b5c3d0,0x2a9f6d0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b8adf0,0x2a09a10},{0x2b72700,0x273d5c0},{0x2b8adf0,0x2a09a10},{0x2b72700,0x273d5c0},{0x2b63750,0x2ca6460},{0x2b63300,0x2a09150},{0x2b63750,0x2ca6460},{0x2b63300,0x2a09150},{0x2b64030,0x2a35bb0},{0x2b8b6b0,0x2a76ef0},{0x2b8b6b0,0x2a76ef0},{0x2b64030,0x2a35bb0},{0x2b8bb20,0x2b249e0},{0x2b5bf60,0x29c5a00},{0x2b8bb20,0x2b249e0},{0x2b5bf60,0x29c5a00},{0x25fb7a0,0x29c5590},{0x2b5c3d0,0x2a9f6d0},{0x2b5c3d0,0x2a9f6d0},{0x25fb7a0,0x29c5590},{0x25fbbe0,0x2a9f260},{0x25fbbe0,0x2a9f260},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b63300,0x2a09150},{0x2b72700,0x273d5c0},{0x2b63300,0x2a09150},{0x2b72700,0x273d5c0},{0x2abbb30,0x2ca5bd0},{0x2abb6e0,0x2ba0d50},{0x2abbb30,0x2ca5bd0},{0x2abb6e0,0x2ba0d50},{0x2abc410,0x2a35300},{0x2b63bc0,0x2d48b30},{0x2b63bc0,0x2d48b30},{0x2abc410,0x2a35300},{0x2b64030,0x2a35bb0},{0x25fb7a0,0x29c5590},{0x2b64030,0x2a35bb0},{0x25fb7a0,0x29c5590},{0x2abc880,0x29c34d0},{0x25fbbe0,0x2a9f260},{0x25fbbe0,0x2a9f260},{0x2abc880,0x29c34d0},{0x294b9e0,0x2872b50},{0x294b9e0,0x2872b50},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2abb6e0,0x2ba0d50},{0x2b72700,0x273d5c0},{0x2abb6e0,0x2ba0d50},{0x2b72700,0x273d5c0},{0x295d990,0x2da2260},{0x294cbc0,0x2c9f020},{0x295d990,0x2da2260},{0x294cbc0,0x2c9f020},{0x295e250,0x29e09b0},{0x2abbfa0,0x2d48250},{0x2abbfa0,0x2d48250},{0x295e250,0x29e09b0},{0x2abc410,0x2a35300},{0x2abc880,0x29c34d0},{0x2abc410,0x2a35300},{0x2abc880,0x29c34d0},{0x295e6c0,0x29c2bf0},{0x294b9e0,0x2872b50},{0x294b9e0,0x2872b50},{0x295e6c0,0x29c2bf0},{0x295eb30,0x28726e0},{0x295eb30,0x28726e0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x294cbc0,0x2c9f020},{0x2b72700,0x273d5c0},{0x294cbc0,0x2c9f020},{0x2b72700,0x273d5c0},{0x2a79ff0,0x2da1df0},{0x2a79ba0,0x2c9e740},{0x2a79ff0,0x2da1df0},{0x2a79ba0,0x2c9e740},{0x2cdfdf0,0x29e0540},{0x295dde0,0x2c96d60},{0x295dde0,0x2c96d60},{0x2cdfdf0,0x29e0540},{0x295e250,0x29e09b0},{0x295e6c0,0x29c2bf0},{0x295e250,0x29e09b0},{0x295e6c0,0x29c2bf0},{0x2ce0260,0x29ebf10},{0x295eb30,0x28726e0},{0x295eb30,0x28726e0},{0x2ce0260,0x29ebf10},{0x2ce06d0,0x2871e40},{0x2ce06d0,0x2871e40},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2a79ba0,0x2c9e740},{0x2b72700,0x273d5c0},{0x2a79ba0,0x2c9e740},{0x2b72700,0x273d5c0},{0x2d369f0,0x2a6d7d0},{0x2d365a0,0x273db30},{0x2d369f0,0x2a6d7d0},{0x2d365a0,0x273db30},{0x2a1d0f0,0x29d9070},{0x2cdf980,0x2c968f0},{0x2cdf980,0x2c968f0},{0x2a1d0f0,0x29d9070},{0x2a1d560,0x29ebaa0},{0x2ce06d0,0x2871e40},{0x2ce06d0,0x2871e40},{0x2a1d560,0x29ebaa0},{0x2a1d9d0,0x2d23d60},{0x2a1d9d0,0x2d23d60},{0x2903460,0x2a6d360},{0x2903010,0x29c4fa0},{0x2903460,0x2a6d360},{0x2903010,0x29c4fa0},{0x2a1d0f0,0x29d9070},{0x29038d0,0x2aebc80},{0x29038d0,0x2aebc80},{0x2a1d0f0,0x29d9070},{0x28c76b0,0x27d9860},{0x28c7b00,0x29ec380},{0x28c76b0,0x27d9860},{0x28c7b00,0x29ec380},{0x2a1d560,0x29ebaa0},{0x28c7f70,0x2872270},{0x28c7f70,0x2872270},{0x2a1d560,0x29ebaa0},{0x2a1d9d0,0x2d23d60},{0x2a1d9d0,0x2d23d60},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x299c790,0x273df80},{0x2b72700,0x273d5c0},{0x299c790,0x273df80},{0x2b72700,0x273d5c0},{0x2903460,0x2a6d360},{0x2903010,0x29c4fa0},{0x2903460,0x2a6d360},{0x2903010,0x29c4fa0},{0x28c76b0,0x27d9860},{0x299d050,0x2c971d0},{0x299d050,0x2c971d0},{0x28c76b0,0x27d9860},{0x299d4c0,0x29e0e20},{0x299d930,0x29c3060},{0x299d4c0,0x29e0e20},{0x299d930,0x29c3060},{0x28c7b00,0x29ec380},{0x2af0420,0x2878a40},{0x2af0420,0x2878a40},{0x28c7b00,0x29ec380},{0x28c7f70,0x2872270},{0x28c7f70,0x2872270},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2af1600,0x2c9ebb0},{0x2b72700,0x273d5c0},{0x2af1600,0x2c9ebb0},{0x2b72700,0x273d5c0},{0x299cbe0,0x2a6cef0},{0x299c790,0x273df80},{0x299cbe0,0x2a6cef0},{0x299c790,0x273df80},{0x299d4c0,0x29e0e20},{0x2af7ad0,0x2d486c0},{0x2af7ad0,0x2d486c0},{0x299d4c0,0x29e0e20},{0x2af7f40,0x2a35740},{0x2af83b0,0x2ceb730},{0x2af7f40,0x2a35740},{0x2af83b0,0x2ceb730},{0x299d930,0x29c3060},{0x2af8820,0x27d9440},{0x2af8820,0x27d9440},{0x299d930,0x29c3060},{0x2af0420,0x2878a40},{0x2af0420,0x2878a40},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b35390,0x2ba0910},{0x2b72700,0x273d5c0},{0x2b35390,0x2ba0910},{0x2b72700,0x273d5c0},{0x2af7660,0x2a6caa0},{0x2af1600,0x2c9ebb0},{0x2af7660,0x2a6caa0},{0x2af1600,0x2c9ebb0},{0x2af7f40,0x2a35740},{0x2b6a320,0x2a76aa0},{0x2b6a320,0x2a76aa0},{0x2af7f40,0x2a35740},{0x2b6a790,0x25cef60},{0x2b6ac00,0x2ceb2c0},{0x2b6a790,0x25cef60},{0x2b6ac00,0x2ceb2c0},{0x2af83b0,0x2ceb730},{0x2b6b070,0x28785d0},{0x2b6b070,0x28785d0},{0x2af83b0,0x2ceb730},{0x2af8820,0x27d9440},{0x2af8820,0x27d9440},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2bdd970,0x2ba11c0},{0x2b72700,0x273d5c0},{0x2bdd970,0x2ba11c0},{0x2b72700,0x273d5c0},{0x2b357e0,0x2da26d0},{0x2b35390,0x2ba0910},{0x2b357e0,0x2da26d0},{0x2b35390,0x2ba0910},{0x2b6a790,0x25cef60},{0x2bde230,0x2b75420},{0x2bde230,0x2b75420},{0x2b6a790,0x25cef60},{0x27eb7d0,0x2729230},{0x27ebbf0,0x2ceae50},{0x27eb7d0,0x2729230},{0x27ebbf0,0x2ceae50},{0x2b6ac00,0x2ceb2c0},{0x27ec060,0x28781a0},{0x27ec060,0x28781a0},{0x2b6ac00,0x2ceb2c0},{0x2b6b070,0x28785d0},{0x2b6b070,0x28785d0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2a0a620,0x2a095a0},{0x2b72700,0x273d5c0},{0x2a0a620,0x2a095a0},{0x2b72700,0x273d5c0},{0x2bdddc0,0x2ca5ff0},{0x2bdd970,0x2ba11c0},{0x2bdddc0,0x2ca5ff0},{0x2bdd970,0x2ba11c0},{0x27eb7d0,0x2729230},{0x2a0aee0,0x2b74fb0},{0x2a0aee0,0x2b74fb0},{0x27eb7d0,0x2729230},{0x2a0b350,0x2728dc0},{0x2904420,0x2b32e60},{0x2a0b350,0x2728dc0},{0x2904420,0x2b32e60},{0x27ebbf0,0x2ceae50},{0x2904860,0x2965980},{0x2904860,0x2965980},{0x27ebbf0,0x2ceae50},{0x27ec060,0x28781a0},{0x27ec060,0x28781a0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2905a40,0x28b9210},{0x2b72700,0x273d5c0},{0x2905a40,0x28b9210},{0x2b72700,0x273d5c0},{0x2a0aa70,0x2d501e0},{0x2a0a620,0x2a095a0},{0x2a0aa70,0x2d501e0},{0x2a0a620,0x2a095a0},{0x2a0b350,0x2728dc0},{0x2a0b350,0x2728dc0},{0x2904420,0x2b32e60},{0x2904420,0x2b32e60},{0x2904860,0x2965980},{0x2904860,0x2965980},{0x27532f0,0x29e7650},{0x2905a40,0x28b9210},{0x27532f0,0x29e7650},{0x2905a40,0x28b9210},{0x28f4610,0x281c8d0},{0x28f4610,0x281c8d0},{0x28f4a80,0x2b32580},{0x28f4a80,0x2b32580},{0x28f4ef0,0x29650a0},{0x28f4ef0,0x29650a0},{0x2725750,0x29e6df0},{0x2725300,0x28b9ac0},{0x2725750,0x29e6df0},{0x2725300,0x28b9ac0},{0x28f41a0,0x2c16e10},{0x28f56e0,0x281c460},{0x28f56e0,0x281c460},{0x28f41a0,0x2c16e10},{0x28f4610,0x281c8d0},{0x28f4a80,0x2b32580},{0x28f4610,0x281c8d0},{0x28f4a80,0x2b32580},{0x28f4ef0,0x29650a0},{0x2936270,0x2b32140},{0x2936270,0x2b32140},{0x28f4ef0,0x29650a0},{0x29366e0,0x2708e30},{0x29366e0,0x2708e30},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2725300,0x28b9ac0},{0x2b72700,0x273d5c0},{0x2725300,0x28b9ac0},{0x2b72700,0x273d5c0},{0x2a36cb0,0x2766fd0},{0x2a36860,0x29c46c0},{0x2a36cb0,0x2766fd0},{0x2a36860,0x29c46c0},{0x2725bc0,0x2c169a0},{0x2a37590,0x281bff0},{0x2a37590,0x281bff0},{0x2725bc0,0x2c169a0},{0x28f56e0,0x281c460},{0x2936270,0x2b32140},{0x28f56e0,0x281c460},{0x2936270,0x2b32140},{0x29366e0,0x2708e30},{0x2a37a00,0x2a08b50},{0x2a37a00,0x2a08b50},{0x29366e0,0x2708e30},{0x2822830,0x27089c0},{0x2822830,0x27089c0},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2a36860,0x29c46c0},{0x2b72700,0x273d5c0},{0x2a36860,0x29c46c0},{0x2b72700,0x273d5c0},{0x2a63380,0x2aeb810},{0x2823a10,0x2a755d0},{0x2a63380,0x2aeb810},{0x2823a10,0x2a755d0},{0x2a37120,0x2aeb3d0},{0x2a63c40,0x29d8790},{0x2a63c40,0x29d8790},{0x2a37120,0x2aeb3d0},{0x2a37590,0x281bff0},{0x2a37a00,0x2a08b50},{0x2a37590,0x281bff0},{0x2a37a00,0x2a08b50},{0x2822830,0x27089c0},{0x2a640b0,0x2a086e0},{0x2a640b0,0x2a086e0},{0x2822830,0x27089c0},{0x2a64520,0x2708550},{0x2a64520,0x2708550},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2823a10,0x2a755d0},{0x2b72700,0x273d5c0},{0x2823a10,0x2a755d0},{0x2b72700,0x273d5c0},{0x2aa1480,0x2735f70},{0x2aa1030,0x2a75160},{0x2aa1480,0x2735f70},{0x2aa1030,0x2a75160},{0x2a637d0,0x29d8c00},{0x27902b0,0x2742b00},{0x27902b0,0x2742b00},{0x2a637d0,0x29d8c00},{0x2a63c40,0x29d8790},{0x2a640b0,0x2a086e0},{0x2a63c40,0x29d8790},{0x2a640b0,0x2a086e0},{0x2a64520,0x2708550},{0x2790720,0x2742690},{0x2790720,0x2742690},{0x2a64520,0x2708550},{0x2790b90,0x2a9ec50},{0x2790b90,0x2a9ec50},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2aa1030,0x2a75160},{0x2b72700,0x273d5c0},{0x2aa1030,0x2a75160},{0x2b72700,0x273d5c0},{0x2b26940,0x2735b00},{0x2b264f0,0x27ca0b0},{0x2b26940,0x2735b00},{0x2b264f0,0x27ca0b0},{0x278fec0,0x29d8360},{0x2b27220,0x2742220},{0x2b27220,0x2742220},{0x278fec0,0x29d8360},{0x27902b0,0x2742b00},{0x2790720,0x2742690},{0x27902b0,0x2742b00},{0x2790720,0x2742690},{0x2790b90,0x2a9ec50},{0x2b71590,0x2d238f0},{0x2b71590,0x2d238f0},{0x2790b90,0x2a9ec50},{0x2b719d0,0x2d23500},{0x2b719d0,0x2d23500},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b264f0,0x27ca0b0},{0x2b72700,0x273d5c0},{0x2b264f0,0x27ca0b0},{0x2b72700,0x273d5c0},{0x2b990c0,0x2735690},{0x2b98c70,0x27c9820},{0x2b990c0,0x2735690},{0x2b98c70,0x27c9820},{0x2b26db0,0x2da07b0},{0x2b999a0,0x2741de0},{0x2b999a0,0x2741de0},{0x2b26db0,0x2da07b0},{0x2b27220,0x2742220},{0x2b71590,0x2d238f0},{0x2b27220,0x2742220},{0x2b71590,0x2d238f0},{0x2b719d0,0x2d23500},{0x2b99e10,0x2877a80},{0x2b99e10,0x2877a80},{0x2b719d0,0x2d23500},{0x2bd5bf0,0x278dd10},{0x2bd5bf0,0x278dd10},{0x2cd8790,0x2d1b310},{0x2cd8790,0x2d1b310},{0x2b98c70,0x27c9820},{0x2b72700,0x273d5c0},{0x2b98c70,0x27c9820},{0x2b72700,0x273d5c0},{0x2bd71e0,0x29c7d10},{0x2bd6d90,0x28f8070},{0x2bd71e0,0x29c7d10},{0x2bd6d90,0x28f8070}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment