build_dir = build
target = $(build_dir)/kurumi.exe
source = kurumi30.c

cc = gcc
cxx = g++
cflags = -O2 -Wall -Werror -pedantic -march=native

# ................................................................
# Executables.

$(target): $(source) | make_build_dir
	$(cc) $(cflags) $< -o $@

$(build_dir)/repeated_substrings.exe: repeated_substrings.cc | make_build_dir
	$(cxx) $(cflags) -std=c++20 $< -o $@

$(build_dir)/crc32.exe: crc32.c | make_build_dir
	$(cc) $(cflags) $< -o $@

$(build_dir)/force_crc.exe: force_crc.cc | make_build_dir
	$(cxx) $(cflags) $< -o $@

$(build_dir)/force_crc_list_variations.exe: force_crc.cc | make_build_dir
	$(cxx) $(cflags) -DLIST_ALL_VARIATIONS $< -o $@


# ................................................................
# Tests.
test: \
	$(build_dir)/kurumi.test_passed \
	$(build_dir)/kurumi_exhaustive_1.test_passed \
	$(build_dir)/kurumi_exhaustive_2.test_passed \
	$(build_dir)/kurumi_exhaustive_3.test_passed \
	$(build_dir)/kurumi_exhaustive_4.test_passed \
	$(build_dir)/kurumi_exhaustive_5.test_passed \
	$(build_dir)/kurumi_exhaustive_6.test_passed \
	$(build_dir)/kurumi_exhaustive_7.test_passed \
	$(build_dir)/kurumi_exhaustive_8.test_passed \
	$(build_dir)/kurumi_exhaustive_9.test_passed \
	$(build_dir)/kurumi_exhaustive_a.test_passed \
	$(build_dir)/kurumi_exhaustive_b.test_passed \
	$(build_dir)/kurumi_exhaustive_c.test_passed \
	$(build_dir)/kurumi_exhaustive_d.test_passed \
	$(build_dir)/kurumi_exhaustive_e.test_passed \
	$(build_dir)/kurumi_exhaustive_f.test_passed \
	$(build_dir)/kurumi_exhaustive_10.test_passed \
	$(build_dir)/kurumi_exhaustive_11.test_passed \
	$(build_dir)/kurumi_exhaustive_12.test_passed \
	$(build_dir)/kurumi_exhaustive_13.test_passed \
	$(build_dir)/kurumi_exhaustive_14.test_passed \
	$(build_dir)/kurumi_exhaustive_15.test_passed \
	$(build_dir)/kurumi_exhaustive_16.test_passed \
	$(build_dir)/kurumi_exhaustive_17.test_passed \
	$(build_dir)/kurumi_exhaustive_18.test_passed \
	$(build_dir)/kurumi_exhaustive_19.test_passed \
	$(build_dir)/kurumi_exhaustive_1a.test_passed \
	$(build_dir)/kurumi_exhaustive_1b.test_passed \
	$(build_dir)/kurumi_exhaustive_1c.test_passed \
	$(build_dir)/kurumi_exhaustive_1d.test_passed \
	$(build_dir)/kurumi_exhaustive_1e.test_passed \
	$(build_dir)/kurumi_exhaustive_1f.test_passed \
	$(build_dir)/kurumi_exhaustive_20.test_passed \
	$(build_dir)/kurumi_exhaustive_21.test_passed \
	$(build_dir)/kurumi_exhaustive_22.test_passed \
	$(build_dir)/kurumi_exhaustive_23.test_passed \
	$(build_dir)/kurumi_exhaustive_24.test_passed \
	$(build_dir)/kurumi_exhaustive_25.test_passed \
	$(build_dir)/kurumi_exhaustive_26.test_passed \
	$(build_dir)/kurumi_exhaustive_27.test_passed \
	$(build_dir)/kurumi_exhaustive_28.test_passed \
	$(build_dir)/kurumi_exhaustive_29.test_passed \
	$(build_dir)/kurumi_exhaustive_2a.test_passed \
	$(build_dir)/kurumi_exhaustive_2b.test_passed \
	$(build_dir)/kurumi_exhaustive_2c.test_passed \
	$(build_dir)/kurumi_exhaustive_2d.test_passed \
	$(build_dir)/kurumi_exhaustive_2e.test_passed \
	$(build_dir)/kurumi_exhaustive_2f.test_passed \
	$(build_dir)/kurumi_exhaustive_30.test_passed \
	$(build_dir)/kurumi_exhaustive_31.test_passed \
	$(build_dir)/kurumi_exhaustive_32.test_passed \
	$(build_dir)/kurumi_exhaustive_33.test_passed \
	$(build_dir)/kurumi_exhaustive_34.test_passed \
	$(build_dir)/kurumi_exhaustive_35.test_passed \
	$(build_dir)/kurumi_exhaustive_36.test_passed \
	$(build_dir)/kurumi_exhaustive_37.test_passed \
	$(build_dir)/kurumi_exhaustive_38.test_passed \
	$(build_dir)/kurumi_exhaustive_39.test_passed \
	$(build_dir)/kurumi_exhaustive_3a.test_passed \
	$(build_dir)/kurumi_exhaustive_3b.test_passed \
	$(build_dir)/kurumi_exhaustive_3c.test_passed \
	$(build_dir)/kurumi_exhaustive_3d.test_passed \
	$(build_dir)/kurumi_exhaustive_3e.test_passed \
	$(build_dir)/kurumi_exhaustive_3f.test_passed \
	$(build_dir)/kurumi_exhaustive_40.test_passed \
	$(build_dir)/kurumi_exhaustive_41.test_passed \
	$(build_dir)/kurumi_exhaustive_42.test_passed \
	$(build_dir)/kurumi_exhaustive_43.test_passed \
	$(build_dir)/kurumi_exhaustive_44.test_passed \
	$(build_dir)/kurumi_exhaustive_45.test_passed \
	$(build_dir)/kurumi_exhaustive_46.test_passed \
	$(build_dir)/kurumi_exhaustive_47.test_passed \
	$(build_dir)/kurumi_exhaustive_48.test_passed \
	$(build_dir)/kurumi_exhaustive_49.test_passed \
	$(build_dir)/kurumi_exhaustive_4a.test_passed \
	$(build_dir)/kurumi_exhaustive_4b.test_passed \
	$(build_dir)/kurumi_exhaustive_4c.test_passed \
	$(build_dir)/kurumi_exhaustive_4d.test_passed \
	$(build_dir)/kurumi_exhaustive_4e.test_passed \
	$(build_dir)/kurumi_exhaustive_4f.test_passed \
	$(build_dir)/kurumi_exhaustive_50.test_passed \
	$(build_dir)/kurumi_exhaustive_51.test_passed \
	$(build_dir)/kurumi_exhaustive_52.test_passed \
	$(build_dir)/kurumi_exhaustive_53.test_passed \
	$(build_dir)/kurumi_exhaustive_54.test_passed \
	$(build_dir)/kurumi_exhaustive_55.test_passed \
	$(build_dir)/kurumi_exhaustive_56.test_passed \
	$(build_dir)/kurumi_exhaustive_57.test_passed \
	$(build_dir)/kurumi_exhaustive_58.test_passed \
	$(build_dir)/kurumi_exhaustive_59.test_passed \
	$(build_dir)/kurumi_exhaustive_5a.test_passed \
	$(build_dir)/kurumi_exhaustive_5b.test_passed \
	$(build_dir)/kurumi_exhaustive_5c.test_passed \
	$(build_dir)/kurumi_exhaustive_5d.test_passed \
	$(build_dir)/kurumi_exhaustive_5e.test_passed \
	$(build_dir)/kurumi_exhaustive_5f.test_passed \
	$(build_dir)/kurumi_exhaustive_60.test_passed \
	$(build_dir)/kurumi_exhaustive_61.test_passed \
	$(build_dir)/kurumi_exhaustive_62.test_passed \
	$(build_dir)/kurumi_exhaustive_63.test_passed \
	$(build_dir)/kurumi_exhaustive_64.test_passed \
	$(build_dir)/kurumi_exhaustive_65.test_passed \
	$(build_dir)/kurumi_exhaustive_66.test_passed \
	$(build_dir)/kurumi_exhaustive_67.test_passed \
	$(build_dir)/kurumi_exhaustive_68.test_passed \
	$(build_dir)/kurumi_exhaustive_69.test_passed \
	$(build_dir)/kurumi_exhaustive_6a.test_passed \
	$(build_dir)/kurumi_exhaustive_6b.test_passed \
	$(build_dir)/kurumi_exhaustive_6c.test_passed \
	$(build_dir)/kurumi_exhaustive_6d.test_passed \
	$(build_dir)/kurumi_exhaustive_6e.test_passed \
	$(build_dir)/kurumi_exhaustive_6f.test_passed \
	$(build_dir)/kurumi_exhaustive_70.test_passed \
	$(build_dir)/kurumi_exhaustive_71.test_passed \
	$(build_dir)/kurumi_exhaustive_72.test_passed \
	$(build_dir)/kurumi_exhaustive_73.test_passed \
	$(build_dir)/kurumi_exhaustive_74.test_passed \
	$(build_dir)/kurumi_exhaustive_75.test_passed \
	$(build_dir)/kurumi_exhaustive_76.test_passed \
	$(build_dir)/kurumi_exhaustive_77.test_passed \
	$(build_dir)/kurumi_exhaustive_78.test_passed \
	$(build_dir)/kurumi_exhaustive_79.test_passed \
	$(build_dir)/kurumi_exhaustive_7a.test_passed \
	$(build_dir)/kurumi_exhaustive_7b.test_passed \
	$(build_dir)/kurumi_exhaustive_7c.test_passed \
	$(build_dir)/kurumi_exhaustive_7d.test_passed \
	$(build_dir)/kurumi_exhaustive_7e.test_passed \
	$(build_dir)/kurumi_exhaustive_7f.test_passed \
	$(build_dir)/kurumi_exhaustive_80.test_passed \
	$(build_dir)/kurumi_exhaustive_81.test_passed \
	$(build_dir)/kurumi_exhaustive_82.test_passed \
	$(build_dir)/kurumi_exhaustive_83.test_passed \
	$(build_dir)/kurumi_exhaustive_84.test_passed \
	$(build_dir)/kurumi_exhaustive_85.test_passed \
	$(build_dir)/kurumi_exhaustive_86.test_passed \
	$(build_dir)/kurumi_exhaustive_87.test_passed \
	$(build_dir)/kurumi_exhaustive_88.test_passed \
	$(build_dir)/kurumi_exhaustive_89.test_passed \
	$(build_dir)/kurumi_exhaustive_8a.test_passed \
	$(build_dir)/kurumi_exhaustive_8b.test_passed \
	$(build_dir)/kurumi_exhaustive_8c.test_passed \
	$(build_dir)/kurumi_exhaustive_8d.test_passed \
	$(build_dir)/kurumi_exhaustive_8e.test_passed \
	$(build_dir)/kurumi_exhaustive_8f.test_passed \
	$(build_dir)/kurumi_exhaustive_90.test_passed \
	$(build_dir)/kurumi_exhaustive_91.test_passed \
	$(build_dir)/kurumi_exhaustive_92.test_passed \
	$(build_dir)/kurumi_exhaustive_93.test_passed \
	$(build_dir)/kurumi_exhaustive_94.test_passed \
	$(build_dir)/kurumi_exhaustive_95.test_passed \
	$(build_dir)/kurumi_exhaustive_96.test_passed \
	$(build_dir)/kurumi_exhaustive_97.test_passed \
	$(build_dir)/kurumi_exhaustive_98.test_passed \
	$(build_dir)/kurumi_exhaustive_99.test_passed \
	$(build_dir)/kurumi_exhaustive_9a.test_passed \
	$(build_dir)/kurumi_exhaustive_9b.test_passed \
	$(build_dir)/kurumi_exhaustive_9c.test_passed \
	$(build_dir)/kurumi_exhaustive_9d.test_passed \
	$(build_dir)/kurumi_exhaustive_9e.test_passed \
	$(build_dir)/kurumi_exhaustive_9f.test_passed \
	$(build_dir)/kurumi_exhaustive_a0.test_passed \
	$(build_dir)/kurumi_exhaustive_a1.test_passed \
	$(build_dir)/kurumi_exhaustive_a2.test_passed \
	$(build_dir)/kurumi_exhaustive_a3.test_passed \
	$(build_dir)/kurumi_exhaustive_a4.test_passed \
	$(build_dir)/kurumi_exhaustive_a5.test_passed \
	$(build_dir)/kurumi_exhaustive_a6.test_passed \
	$(build_dir)/kurumi_exhaustive_a7.test_passed \
	$(build_dir)/kurumi_exhaustive_a8.test_passed \
	$(build_dir)/kurumi_exhaustive_a9.test_passed \
	$(build_dir)/kurumi_exhaustive_aa.test_passed \
	$(build_dir)/kurumi_exhaustive_ab.test_passed \
	$(build_dir)/kurumi_exhaustive_ac.test_passed \
	$(build_dir)/kurumi_exhaustive_ad.test_passed \
	$(build_dir)/kurumi_exhaustive_ae.test_passed \
	$(build_dir)/kurumi_exhaustive_af.test_passed \
	$(build_dir)/kurumi_exhaustive_b0.test_passed \
	$(build_dir)/kurumi_exhaustive_b1.test_passed \
	$(build_dir)/kurumi_exhaustive_b2.test_passed \
	$(build_dir)/kurumi_exhaustive_b3.test_passed \
	$(build_dir)/kurumi_exhaustive_b4.test_passed \
	$(build_dir)/kurumi_exhaustive_b5.test_passed \
	$(build_dir)/kurumi_exhaustive_b6.test_passed \
	$(build_dir)/kurumi_exhaustive_b7.test_passed \
	$(build_dir)/kurumi_exhaustive_b8.test_passed \
	$(build_dir)/kurumi_exhaustive_b9.test_passed \
	$(build_dir)/kurumi_exhaustive_ba.test_passed \
	$(build_dir)/kurumi_exhaustive_bb.test_passed \
	$(build_dir)/kurumi_exhaustive_bc.test_passed \
	$(build_dir)/kurumi_exhaustive_bd.test_passed \
	$(build_dir)/kurumi_exhaustive_be.test_passed \
	$(build_dir)/kurumi_exhaustive_bf.test_passed \
	$(build_dir)/kurumi_exhaustive_c0.test_passed \
	$(build_dir)/kurumi_exhaustive_c1.test_passed \
	$(build_dir)/kurumi_exhaustive_c2.test_passed \
	$(build_dir)/kurumi_exhaustive_c3.test_passed \
	$(build_dir)/kurumi_exhaustive_c4.test_passed \
	$(build_dir)/kurumi_exhaustive_c5.test_passed \
	$(build_dir)/kurumi_exhaustive_c6.test_passed \
	$(build_dir)/kurumi_exhaustive_c7.test_passed \
	$(build_dir)/kurumi_exhaustive_c8.test_passed \
	$(build_dir)/kurumi_exhaustive_c9.test_passed \
	$(build_dir)/kurumi_exhaustive_ca.test_passed \
	$(build_dir)/kurumi_exhaustive_cb.test_passed \
	$(build_dir)/kurumi_exhaustive_cc.test_passed \
	$(build_dir)/kurumi_exhaustive_cd.test_passed \
	$(build_dir)/kurumi_exhaustive_ce.test_passed \
	$(build_dir)/kurumi_exhaustive_cf.test_passed \
	$(build_dir)/kurumi_exhaustive_d0.test_passed \
	$(build_dir)/kurumi_exhaustive_d1.test_passed \
	$(build_dir)/kurumi_exhaustive_d2.test_passed \
	$(build_dir)/kurumi_exhaustive_d3.test_passed \
	$(build_dir)/kurumi_exhaustive_d4.test_passed \
	$(build_dir)/kurumi_exhaustive_d5.test_passed \
	$(build_dir)/kurumi_exhaustive_d6.test_passed \
	$(build_dir)/kurumi_exhaustive_d7.test_passed \
	$(build_dir)/kurumi_exhaustive_d8.test_passed \
	$(build_dir)/kurumi_exhaustive_d9.test_passed \
	$(build_dir)/kurumi_exhaustive_da.test_passed \
	$(build_dir)/kurumi_exhaustive_db.test_passed \
	$(build_dir)/kurumi_exhaustive_dc.test_passed \
	$(build_dir)/kurumi_exhaustive_dd.test_passed \
	$(build_dir)/kurumi_exhaustive_de.test_passed \
	$(build_dir)/kurumi_exhaustive_df.test_passed \
	$(build_dir)/kurumi_exhaustive_e0.test_passed \
	$(build_dir)/kurumi_exhaustive_e1.test_passed \
	$(build_dir)/kurumi_exhaustive_e2.test_passed \
	$(build_dir)/kurumi_exhaustive_e3.test_passed \
	$(build_dir)/kurumi_exhaustive_e4.test_passed \
	$(build_dir)/kurumi_exhaustive_e5.test_passed \
	$(build_dir)/kurumi_exhaustive_e6.test_passed \
	$(build_dir)/kurumi_exhaustive_e7.test_passed \
	$(build_dir)/kurumi_exhaustive_e8.test_passed \
	$(build_dir)/kurumi_exhaustive_e9.test_passed \
	$(build_dir)/kurumi_exhaustive_ea.test_passed \
	$(build_dir)/kurumi_exhaustive_eb.test_passed \
	$(build_dir)/kurumi_exhaustive_ec.test_passed \
	$(build_dir)/kurumi_exhaustive_ed.test_passed \
	$(build_dir)/kurumi_exhaustive_ee.test_passed \
	$(build_dir)/kurumi_exhaustive_ef.test_passed \
	$(build_dir)/kurumi_exhaustive_f0.test_passed \
	$(build_dir)/kurumi_exhaustive_f1.test_passed \
	$(build_dir)/kurumi_exhaustive_f2.test_passed \
	$(build_dir)/kurumi_exhaustive_f3.test_passed \
	$(build_dir)/kurumi_exhaustive_f4.test_passed \
	$(build_dir)/kurumi_exhaustive_f5.test_passed \
	$(build_dir)/kurumi_exhaustive_f6.test_passed \
	$(build_dir)/kurumi_exhaustive_f7.test_passed \
	$(build_dir)/kurumi_exhaustive_f8.test_passed \
	$(build_dir)/kurumi_exhaustive_f9.test_passed \
	$(build_dir)/kurumi_exhaustive_fa.test_passed \
	$(build_dir)/kurumi_exhaustive_fb.test_passed \
	$(build_dir)/kurumi_exhaustive_fc.test_passed \
	$(build_dir)/kurumi_exhaustive_fd.test_passed \
	$(build_dir)/kurumi_exhaustive_fe.test_passed \
	$(build_dir)/kurumi_exhaustive_ff.test_passed \
	$(build_dir)/compile_source.test_passed \
	$(build_dir)/embedded_crc.test_passed \
	$(build_dir)/crc32.test_passed \
	$(build_dir)/force_crc.test_passed \
	$(build_dir)/repeated_substrings.test_passed

# Functional test.
$(build_dir)/kurumi.test_passed: $(target) kurumi_test.sh
	bash kurumi_test.sh $< && touch $@

$(build_dir)/kurumi_exhaustive_1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1 && touch $@

$(build_dir)/kurumi_exhaustive_2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2 && touch $@

$(build_dir)/kurumi_exhaustive_3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3 && touch $@

$(build_dir)/kurumi_exhaustive_4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4 && touch $@

$(build_dir)/kurumi_exhaustive_5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5 && touch $@

$(build_dir)/kurumi_exhaustive_6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6 && touch $@

$(build_dir)/kurumi_exhaustive_7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7 && touch $@

$(build_dir)/kurumi_exhaustive_8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8 && touch $@

$(build_dir)/kurumi_exhaustive_9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9 && touch $@

$(build_dir)/kurumi_exhaustive_a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a && touch $@

$(build_dir)/kurumi_exhaustive_b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b && touch $@

$(build_dir)/kurumi_exhaustive_c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c && touch $@

$(build_dir)/kurumi_exhaustive_d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d && touch $@

$(build_dir)/kurumi_exhaustive_e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e && touch $@

$(build_dir)/kurumi_exhaustive_f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f && touch $@

$(build_dir)/kurumi_exhaustive_10.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 10 && touch $@

$(build_dir)/kurumi_exhaustive_11.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 11 && touch $@

$(build_dir)/kurumi_exhaustive_12.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 12 && touch $@

$(build_dir)/kurumi_exhaustive_13.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 13 && touch $@

$(build_dir)/kurumi_exhaustive_14.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 14 && touch $@

$(build_dir)/kurumi_exhaustive_15.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 15 && touch $@

$(build_dir)/kurumi_exhaustive_16.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 16 && touch $@

$(build_dir)/kurumi_exhaustive_17.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 17 && touch $@

$(build_dir)/kurumi_exhaustive_18.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 18 && touch $@

$(build_dir)/kurumi_exhaustive_19.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 19 && touch $@

$(build_dir)/kurumi_exhaustive_1a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1a && touch $@

$(build_dir)/kurumi_exhaustive_1b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1b && touch $@

$(build_dir)/kurumi_exhaustive_1c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1c && touch $@

$(build_dir)/kurumi_exhaustive_1d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1d && touch $@

$(build_dir)/kurumi_exhaustive_1e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1e && touch $@

$(build_dir)/kurumi_exhaustive_1f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 1f && touch $@

$(build_dir)/kurumi_exhaustive_20.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 20 && touch $@

$(build_dir)/kurumi_exhaustive_21.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 21 && touch $@

$(build_dir)/kurumi_exhaustive_22.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 22 && touch $@

$(build_dir)/kurumi_exhaustive_23.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 23 && touch $@

$(build_dir)/kurumi_exhaustive_24.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 24 && touch $@

$(build_dir)/kurumi_exhaustive_25.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 25 && touch $@

$(build_dir)/kurumi_exhaustive_26.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 26 && touch $@

$(build_dir)/kurumi_exhaustive_27.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 27 && touch $@

$(build_dir)/kurumi_exhaustive_28.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 28 && touch $@

$(build_dir)/kurumi_exhaustive_29.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 29 && touch $@

$(build_dir)/kurumi_exhaustive_2a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2a && touch $@

$(build_dir)/kurumi_exhaustive_2b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2b && touch $@

$(build_dir)/kurumi_exhaustive_2c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2c && touch $@

$(build_dir)/kurumi_exhaustive_2d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2d && touch $@

$(build_dir)/kurumi_exhaustive_2e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2e && touch $@

$(build_dir)/kurumi_exhaustive_2f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 2f && touch $@

$(build_dir)/kurumi_exhaustive_30.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 30 && touch $@

$(build_dir)/kurumi_exhaustive_31.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 31 && touch $@

$(build_dir)/kurumi_exhaustive_32.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 32 && touch $@

$(build_dir)/kurumi_exhaustive_33.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 33 && touch $@

$(build_dir)/kurumi_exhaustive_34.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 34 && touch $@

$(build_dir)/kurumi_exhaustive_35.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 35 && touch $@

$(build_dir)/kurumi_exhaustive_36.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 36 && touch $@

$(build_dir)/kurumi_exhaustive_37.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 37 && touch $@

$(build_dir)/kurumi_exhaustive_38.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 38 && touch $@

$(build_dir)/kurumi_exhaustive_39.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 39 && touch $@

$(build_dir)/kurumi_exhaustive_3a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3a && touch $@

$(build_dir)/kurumi_exhaustive_3b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3b && touch $@

$(build_dir)/kurumi_exhaustive_3c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3c && touch $@

$(build_dir)/kurumi_exhaustive_3d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3d && touch $@

$(build_dir)/kurumi_exhaustive_3e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3e && touch $@

$(build_dir)/kurumi_exhaustive_3f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 3f && touch $@

$(build_dir)/kurumi_exhaustive_40.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 40 && touch $@

$(build_dir)/kurumi_exhaustive_41.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 41 && touch $@

$(build_dir)/kurumi_exhaustive_42.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 42 && touch $@

$(build_dir)/kurumi_exhaustive_43.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 43 && touch $@

$(build_dir)/kurumi_exhaustive_44.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 44 && touch $@

$(build_dir)/kurumi_exhaustive_45.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 45 && touch $@

$(build_dir)/kurumi_exhaustive_46.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 46 && touch $@

$(build_dir)/kurumi_exhaustive_47.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 47 && touch $@

$(build_dir)/kurumi_exhaustive_48.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 48 && touch $@

$(build_dir)/kurumi_exhaustive_49.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 49 && touch $@

$(build_dir)/kurumi_exhaustive_4a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4a && touch $@

$(build_dir)/kurumi_exhaustive_4b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4b && touch $@

$(build_dir)/kurumi_exhaustive_4c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4c && touch $@

$(build_dir)/kurumi_exhaustive_4d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4d && touch $@

$(build_dir)/kurumi_exhaustive_4e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4e && touch $@

$(build_dir)/kurumi_exhaustive_4f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 4f && touch $@

$(build_dir)/kurumi_exhaustive_50.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 50 && touch $@

$(build_dir)/kurumi_exhaustive_51.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 51 && touch $@

$(build_dir)/kurumi_exhaustive_52.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 52 && touch $@

$(build_dir)/kurumi_exhaustive_53.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 53 && touch $@

$(build_dir)/kurumi_exhaustive_54.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 54 && touch $@

$(build_dir)/kurumi_exhaustive_55.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 55 && touch $@

$(build_dir)/kurumi_exhaustive_56.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 56 && touch $@

$(build_dir)/kurumi_exhaustive_57.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 57 && touch $@

$(build_dir)/kurumi_exhaustive_58.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 58 && touch $@

$(build_dir)/kurumi_exhaustive_59.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 59 && touch $@

$(build_dir)/kurumi_exhaustive_5a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5a && touch $@

$(build_dir)/kurumi_exhaustive_5b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5b && touch $@

$(build_dir)/kurumi_exhaustive_5c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5c && touch $@

$(build_dir)/kurumi_exhaustive_5d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5d && touch $@

$(build_dir)/kurumi_exhaustive_5e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5e && touch $@

$(build_dir)/kurumi_exhaustive_5f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 5f && touch $@

$(build_dir)/kurumi_exhaustive_60.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 60 && touch $@

$(build_dir)/kurumi_exhaustive_61.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 61 && touch $@

$(build_dir)/kurumi_exhaustive_62.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 62 && touch $@

$(build_dir)/kurumi_exhaustive_63.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 63 && touch $@

$(build_dir)/kurumi_exhaustive_64.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 64 && touch $@

$(build_dir)/kurumi_exhaustive_65.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 65 && touch $@

$(build_dir)/kurumi_exhaustive_66.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 66 && touch $@

$(build_dir)/kurumi_exhaustive_67.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 67 && touch $@

$(build_dir)/kurumi_exhaustive_68.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 68 && touch $@

$(build_dir)/kurumi_exhaustive_69.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 69 && touch $@

$(build_dir)/kurumi_exhaustive_6a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6a && touch $@

$(build_dir)/kurumi_exhaustive_6b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6b && touch $@

$(build_dir)/kurumi_exhaustive_6c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6c && touch $@

$(build_dir)/kurumi_exhaustive_6d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6d && touch $@

$(build_dir)/kurumi_exhaustive_6e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6e && touch $@

$(build_dir)/kurumi_exhaustive_6f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 6f && touch $@

$(build_dir)/kurumi_exhaustive_70.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 70 && touch $@

$(build_dir)/kurumi_exhaustive_71.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 71 && touch $@

$(build_dir)/kurumi_exhaustive_72.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 72 && touch $@

$(build_dir)/kurumi_exhaustive_73.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 73 && touch $@

$(build_dir)/kurumi_exhaustive_74.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 74 && touch $@

$(build_dir)/kurumi_exhaustive_75.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 75 && touch $@

$(build_dir)/kurumi_exhaustive_76.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 76 && touch $@

$(build_dir)/kurumi_exhaustive_77.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 77 && touch $@

$(build_dir)/kurumi_exhaustive_78.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 78 && touch $@

$(build_dir)/kurumi_exhaustive_79.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 79 && touch $@

$(build_dir)/kurumi_exhaustive_7a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7a && touch $@

$(build_dir)/kurumi_exhaustive_7b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7b && touch $@

$(build_dir)/kurumi_exhaustive_7c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7c && touch $@

$(build_dir)/kurumi_exhaustive_7d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7d && touch $@

$(build_dir)/kurumi_exhaustive_7e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7e && touch $@

$(build_dir)/kurumi_exhaustive_7f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 7f && touch $@

$(build_dir)/kurumi_exhaustive_80.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 80 && touch $@

$(build_dir)/kurumi_exhaustive_81.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 81 && touch $@

$(build_dir)/kurumi_exhaustive_82.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 82 && touch $@

$(build_dir)/kurumi_exhaustive_83.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 83 && touch $@

$(build_dir)/kurumi_exhaustive_84.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 84 && touch $@

$(build_dir)/kurumi_exhaustive_85.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 85 && touch $@

$(build_dir)/kurumi_exhaustive_86.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 86 && touch $@

$(build_dir)/kurumi_exhaustive_87.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 87 && touch $@

$(build_dir)/kurumi_exhaustive_88.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 88 && touch $@

$(build_dir)/kurumi_exhaustive_89.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 89 && touch $@

$(build_dir)/kurumi_exhaustive_8a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8a && touch $@

$(build_dir)/kurumi_exhaustive_8b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8b && touch $@

$(build_dir)/kurumi_exhaustive_8c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8c && touch $@

$(build_dir)/kurumi_exhaustive_8d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8d && touch $@

$(build_dir)/kurumi_exhaustive_8e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8e && touch $@

$(build_dir)/kurumi_exhaustive_8f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 8f && touch $@

$(build_dir)/kurumi_exhaustive_90.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 90 && touch $@

$(build_dir)/kurumi_exhaustive_91.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 91 && touch $@

$(build_dir)/kurumi_exhaustive_92.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 92 && touch $@

$(build_dir)/kurumi_exhaustive_93.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 93 && touch $@

$(build_dir)/kurumi_exhaustive_94.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 94 && touch $@

$(build_dir)/kurumi_exhaustive_95.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 95 && touch $@

$(build_dir)/kurumi_exhaustive_96.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 96 && touch $@

$(build_dir)/kurumi_exhaustive_97.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 97 && touch $@

$(build_dir)/kurumi_exhaustive_98.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 98 && touch $@

$(build_dir)/kurumi_exhaustive_99.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 99 && touch $@

$(build_dir)/kurumi_exhaustive_9a.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9a && touch $@

$(build_dir)/kurumi_exhaustive_9b.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9b && touch $@

$(build_dir)/kurumi_exhaustive_9c.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9c && touch $@

$(build_dir)/kurumi_exhaustive_9d.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9d && touch $@

$(build_dir)/kurumi_exhaustive_9e.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9e && touch $@

$(build_dir)/kurumi_exhaustive_9f.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< 9f && touch $@

$(build_dir)/kurumi_exhaustive_a0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a0 && touch $@

$(build_dir)/kurumi_exhaustive_a1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a1 && touch $@

$(build_dir)/kurumi_exhaustive_a2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a2 && touch $@

$(build_dir)/kurumi_exhaustive_a3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a3 && touch $@

$(build_dir)/kurumi_exhaustive_a4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a4 && touch $@

$(build_dir)/kurumi_exhaustive_a5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a5 && touch $@

$(build_dir)/kurumi_exhaustive_a6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a6 && touch $@

$(build_dir)/kurumi_exhaustive_a7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a7 && touch $@

$(build_dir)/kurumi_exhaustive_a8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a8 && touch $@

$(build_dir)/kurumi_exhaustive_a9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< a9 && touch $@

$(build_dir)/kurumi_exhaustive_aa.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< aa && touch $@

$(build_dir)/kurumi_exhaustive_ab.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ab && touch $@

$(build_dir)/kurumi_exhaustive_ac.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ac && touch $@

$(build_dir)/kurumi_exhaustive_ad.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ad && touch $@

$(build_dir)/kurumi_exhaustive_ae.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ae && touch $@

$(build_dir)/kurumi_exhaustive_af.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< af && touch $@

$(build_dir)/kurumi_exhaustive_b0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b0 && touch $@

$(build_dir)/kurumi_exhaustive_b1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b1 && touch $@

$(build_dir)/kurumi_exhaustive_b2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b2 && touch $@

$(build_dir)/kurumi_exhaustive_b3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b3 && touch $@

$(build_dir)/kurumi_exhaustive_b4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b4 && touch $@

$(build_dir)/kurumi_exhaustive_b5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b5 && touch $@

$(build_dir)/kurumi_exhaustive_b6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b6 && touch $@

$(build_dir)/kurumi_exhaustive_b7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b7 && touch $@

$(build_dir)/kurumi_exhaustive_b8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b8 && touch $@

$(build_dir)/kurumi_exhaustive_b9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< b9 && touch $@

$(build_dir)/kurumi_exhaustive_ba.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ba && touch $@

$(build_dir)/kurumi_exhaustive_bb.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< bb && touch $@

$(build_dir)/kurumi_exhaustive_bc.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< bc && touch $@

$(build_dir)/kurumi_exhaustive_bd.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< bd && touch $@

$(build_dir)/kurumi_exhaustive_be.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< be && touch $@

$(build_dir)/kurumi_exhaustive_bf.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< bf && touch $@

$(build_dir)/kurumi_exhaustive_c0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c0 && touch $@

$(build_dir)/kurumi_exhaustive_c1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c1 && touch $@

$(build_dir)/kurumi_exhaustive_c2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c2 && touch $@

$(build_dir)/kurumi_exhaustive_c3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c3 && touch $@

$(build_dir)/kurumi_exhaustive_c4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c4 && touch $@

$(build_dir)/kurumi_exhaustive_c5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c5 && touch $@

$(build_dir)/kurumi_exhaustive_c6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c6 && touch $@

$(build_dir)/kurumi_exhaustive_c7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c7 && touch $@

$(build_dir)/kurumi_exhaustive_c8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c8 && touch $@

$(build_dir)/kurumi_exhaustive_c9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< c9 && touch $@

$(build_dir)/kurumi_exhaustive_ca.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ca && touch $@

$(build_dir)/kurumi_exhaustive_cb.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< cb && touch $@

$(build_dir)/kurumi_exhaustive_cc.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< cc && touch $@

$(build_dir)/kurumi_exhaustive_cd.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< cd && touch $@

$(build_dir)/kurumi_exhaustive_ce.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ce && touch $@

$(build_dir)/kurumi_exhaustive_cf.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< cf && touch $@

$(build_dir)/kurumi_exhaustive_d0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d0 && touch $@

$(build_dir)/kurumi_exhaustive_d1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d1 && touch $@

$(build_dir)/kurumi_exhaustive_d2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d2 && touch $@

$(build_dir)/kurumi_exhaustive_d3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d3 && touch $@

$(build_dir)/kurumi_exhaustive_d4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d4 && touch $@

$(build_dir)/kurumi_exhaustive_d5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d5 && touch $@

$(build_dir)/kurumi_exhaustive_d6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d6 && touch $@

$(build_dir)/kurumi_exhaustive_d7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d7 && touch $@

$(build_dir)/kurumi_exhaustive_d8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d8 && touch $@

$(build_dir)/kurumi_exhaustive_d9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< d9 && touch $@

$(build_dir)/kurumi_exhaustive_da.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< da && touch $@

$(build_dir)/kurumi_exhaustive_db.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< db && touch $@

$(build_dir)/kurumi_exhaustive_dc.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< dc && touch $@

$(build_dir)/kurumi_exhaustive_dd.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< dd && touch $@

$(build_dir)/kurumi_exhaustive_de.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< de && touch $@

$(build_dir)/kurumi_exhaustive_df.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< df && touch $@

$(build_dir)/kurumi_exhaustive_e0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e0 && touch $@

$(build_dir)/kurumi_exhaustive_e1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e1 && touch $@

$(build_dir)/kurumi_exhaustive_e2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e2 && touch $@

$(build_dir)/kurumi_exhaustive_e3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e3 && touch $@

$(build_dir)/kurumi_exhaustive_e4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e4 && touch $@

$(build_dir)/kurumi_exhaustive_e5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e5 && touch $@

$(build_dir)/kurumi_exhaustive_e6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e6 && touch $@

$(build_dir)/kurumi_exhaustive_e7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e7 && touch $@

$(build_dir)/kurumi_exhaustive_e8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e8 && touch $@

$(build_dir)/kurumi_exhaustive_e9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< e9 && touch $@

$(build_dir)/kurumi_exhaustive_ea.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ea && touch $@

$(build_dir)/kurumi_exhaustive_eb.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< eb && touch $@

$(build_dir)/kurumi_exhaustive_ec.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ec && touch $@

$(build_dir)/kurumi_exhaustive_ed.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ed && touch $@

$(build_dir)/kurumi_exhaustive_ee.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ee && touch $@

$(build_dir)/kurumi_exhaustive_ef.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ef && touch $@

$(build_dir)/kurumi_exhaustive_f0.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f0 && touch $@

$(build_dir)/kurumi_exhaustive_f1.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f1 && touch $@

$(build_dir)/kurumi_exhaustive_f2.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f2 && touch $@

$(build_dir)/kurumi_exhaustive_f3.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f3 && touch $@

$(build_dir)/kurumi_exhaustive_f4.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f4 && touch $@

$(build_dir)/kurumi_exhaustive_f5.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f5 && touch $@

$(build_dir)/kurumi_exhaustive_f6.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f6 && touch $@

$(build_dir)/kurumi_exhaustive_f7.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f7 && touch $@

$(build_dir)/kurumi_exhaustive_f8.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f8 && touch $@

$(build_dir)/kurumi_exhaustive_f9.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< f9 && touch $@

$(build_dir)/kurumi_exhaustive_fa.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< fa && touch $@

$(build_dir)/kurumi_exhaustive_fb.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< fb && touch $@

$(build_dir)/kurumi_exhaustive_fc.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< fc && touch $@

$(build_dir)/kurumi_exhaustive_fd.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< fd && touch $@

$(build_dir)/kurumi_exhaustive_fe.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< fe && touch $@

$(build_dir)/kurumi_exhaustive_ff.test_passed: $(target) kurumi_exhaustive_test.sh
	bash kurumi_exhaustive_test.sh $< ff && touch $@

# Verify that input source is compatible with various compilers and C standards.
$(build_dir)/compile_source.test_passed: $(source) | make_build_dir
	bash test_compile_all.sh $< && touch $@

# Verify that CRC of source code is embedded in the source code.
$(build_dir)/embedded_crc.test_passed: $(build_dir)/crc32.exe $(source)
	grep -qF `$(build_dir)/crc32.exe $(source)` $(source) && touch $@

# Test crc32 tool.
$(build_dir)/crc32.test_passed: $(build_dir)/crc32.exe crc32_test.sh
	bash crc32_test.sh $< && touch $@

# Test force_crc tool.
$(build_dir)/force_crc.test_passed: $(build_dir)/force_crc.exe $(build_dir)/crc32.exe force_crc_test.sh
	bash force_crc_test.sh $< $(build_dir)/crc32.exe && touch $@

# Test repeated_substrings tool.
$(build_dir)/repeated_substrings.test_passed: $(build_dir)/repeated_substrings.exe repeated_substrings_test.sh
	bash repeated_substrings_test.sh $< && touch $@

# ................................................................
# Maintenance rules.
make_build_dir: $(build_dir)

$(build_dir):
	mkdir -p $@

clean:
	-rm -rf $(build_dir)
